こんにちは。きねぶちです。
Android OSのJavaコード部分100万行をすべてC#で書き換えたらとんでもなく高速化したというお話です。
いろいろと凄すぎていったいどこから突っ込めばいいのかよくわかりませんが、ソースも公開されています。
プロジェクトの主導者ミゲル・デ・イカザという人
このプロジェクトの名前はXobotOS。コードはGitHubで公開されています。Miguel de IcazaさんのブログでXobotOSの存在が発表されました。
このプロジェクトの開発を主導したのがミゲル・デ・イカザさん。この人は今はXamarinという会社を経営していますが、まず凄い天才です。
Xamarinという社名よりもMono Touchやmono for Androidといった開発ツールの名称の方が有名かもしれません。
ミゲルさんは、Linuxのデスクトップ環境であるGnomeプロジェクトの創始者として有名でした。Gnomeプロジェクトを始めたのが25歳のとき。Gnomeデスクトップはまたたく間に世界中に広まりました。
その後、彼の興味はデスクトップから言語処理系に移り、.NET FrameworkをLinux上で実装するというMonoプロジェクトを創始しました。Monoプロジェクトも大成功を収めています。
生涯で2つも世界的なオープンソースプロジェクトを成功させるという天才です。
XobotOS
Mono for Androidをリリースするときにチームメンバーが集まって食事をしていたところ、Dalvikの仮想マシンとしての性能の悪さが話題になり、「それならいっそのこと全部C#で書き換えちゃえば?」みたいな笑い話が出た、というのが話の発端だそうです。面白いのは、酒の席のネタ話をネタで終わらせないで、本気で取り組み、しかもかなりの成果を出してしまうところです。
その成果がこの比較表です。
Monoによる実装は、Dalvikに比べて7倍以上高速です。
単純な二分木の実装だそうなので、実用環境での体感速度の違いはどうなるか分かりませんが、しかしものすごい威力です。
Dalvikがイケてないのはなんとなく感じてはいましたが、これほどの差が出るとは思いませんでした。
10年間改良を続けてきたMono仮想マシンの性能と、C#の言語としての基本性能の高さがあいまって、これだけの差が出たということです。
AndroidのJavaコードは100万行あるそうなので、手で書き換えるわけにはいきません。そこで、Java→C#のトランスレータを作ったそうです。
Java/C#トランスレータは、SharpenというツールとしてXobotOSの一部としてリリースされています。
Xamarinには日本人の方がジョインしていて、XobotOSについて詳しい解説記事を書かれています。
パフォーマンス的にはC# >>>>>>>>>>>>>>> Javaらしい
C#とJavaというよりは、正確にはDalvikとMono VMということらしいですが、実行性能はC#の方がはるかに優れているそうです。XobotOSプロジェクトの経緯を解説した元記事によれば、C#は先端的な言語概念をばんばん採り入れていて、しかも仮想マシンの最適化がやりやすいように言語仕様を変えているので、出た当初は大差なかったJavaとのパフォーマンスの差も、今や雲泥の差でC#の方が優れているそうです。
残念ながらプロジェクトとしては終了
ただし残念なのは、XobotOSはあくまで研究目的のプロジェクトであって、製品化の予定どころかプロジェクトの継続さえも考えていないそうです。成果はMono for Androidという製品に取り込んでいくそうですが、XobotOSをどんなAndroid端末でも誰でも使えるような製品にする予定はないとのこと。
ソースが公開されていますから、気合でなんとかすることもできなくもないでしょうが・・ちょっと厳しいかな。
0 コメント:
コメントを投稿