2011年01月24日

携帯デバイスに限ればソフトの仮想化は荷が重い

(ARM版Windowsで始まるx86対ARMのCPU戦争 :後藤弘茂)

「命令セットアーキテクチャの重要性が低下し、それに応じて、命令セットに依存するバイナリコード資産の重要性も下がるという流れになる可能性がある。」は、筆者も同意見だが、だからといって実行モジュールがjavaのように仮想化したものが主流になるとは思えない。WindowsVistaが.NetFrameworkを基本APIに出来なかった主な原因は、あまりにも遅くなるのが原因だったからと思うね。
 VistaはWin32APIではなくCOM(Component Object Model)のライブラリがものすごく増えた。筆者は.NETでプログラミングをしたことがないが、Win32APIに加えてCOMも薄くラップしたものが.NETライブラリだと思われる。
 今ではWin32APIだけでは最新のWindowsのインターフェイスに対応できなくなっている。しかし、COMを使うとそれが出来るのだ。例えばダイアログボックスのカスタマイズは、Win32APIだけでは最新のエクスプローラスタイル上でのカスタマイズは出来ない。

要するにMicrosoftは正確にはCOMをネイティブのAPIにしたのだろう。しかしCOMは.NETとは違い、インタプリタ型ではない。コンパイラ型言語でコンパイルされた実行モジュール上で実行される、れっきとしたネイティブのAPIだ。しかしCOMは難解だ。だから.NETFrameworkとその上で動くプログラミング言語を拡充し、加えて直感的に使えるWin32APIは今後も少しずつだが拡張されると思われる。

Microsoftは当然VisualStudioの次期バージョンでARMに対応したネイティブコードを吐き出すコンパイラを出すだろう。COMは今でもC言語でも使える一種のクラスライブラリだからだ。.NETは実質軽いアプリを作るためとして存在するだけだろう。これは開発初心者のハードルを下げるためでもある。制約の厳しい携帯デバイス上では今後もネイティブコードのアプリが主要アプリになる。

前から言っているが、後藤氏が言う仮想化されたソフトという、どのプラットホームでも動くソフト(.NETなどのインタプリタ型言語で作ったソフト)は、プラットホーム間の差異を吸収するために凡庸な機能、性能にならざるを得ないので、ネイティブのアプリが無くなることはないと思っている。言うまでもないが、インタプリタ言語で作ったソフトも結局ネイティブコードを実行する訳なのだし。

これから考えると、最初に戻ってCPUのインストラクションセットも使われるデバイスのためにチューニングした方が最高の性能を得ることが出来るはずだ。そういう意味でもx86アーキテクチャは携帯デバイス上は不利だと筆者は思うのだ。何十年も前から下位互換性を重視し、足を引っ張る命令を今でもサポートしている。

もしかしたらIntelは将来のAtomで下位互換性をばっさり捨てたバージョンを出してくるかもしれない。Windowsが走るネットブック用でなければ、そうしたバージョンを投入しても問題ないだろう。
posted by danpei at 09:31| software