OSASK-WikiのKの落書きの過去ログ

  • 本家:OSA:K
    • 過去ログにコメントしたい人も、本家のこめんと欄に突っ込んでください。
      • そのうちKによって下のこめんと欄に移動しますので。

仮想マシン

  • (2005.02.21)
  • どこかに書いておかないと忘れそうな気がしたので書いてみます。
  • いつになるのかはまだ分かりませんが、とにかくOSASKは将来エミュレータを搭載して、さまざまなOSのソフトウェアを動かせることになっています。エミュレータというのはまあ一種の仮想マシンであることは間違いなく、その意味で仮想マシン技術の応用例の一つであるとはいえます。
  • OSASKが仮想マシンを使うのは、過去のソフトウェアとの互換性をOS開発の際に意識しないでよくするためで、つまりOS本体やアプリケーションに互換性確保のための汚らしい仕組みをつけないと未練なく割り切るためのものです。本当のOSASKのアプリケーションは、そのきれいな仕組みを使って簡潔に書かれるべきだと考えているわけです。そしてもちろん、本当のOSASKアプリケーションの実行に当たっては、仮想マシンの仕組みは不要であって、したがってOSASKにとって仮想マシンの仕組みは取り外し可能なオプショナルな存在であります。
  • しかし一方で、仮想マシンによる実行を中心に考えるやり方があります。JavaVMや.NETなどです。これらの精神の根本は、同じバイナリがどんな環境でも動きます、というもので、Write Once, Run Anyway.などといわれています。これはこれでとても結構なことだと思います。
  • 僕は基本的には仮想マシンによる実行を中心に据える考えには批判的です。なぜなら、毎回インタープリタ的に実行しなければいけないか、もしくはJIT(実行時コンパイル)しなければいけないからです。仮想マシン用のコードを実行の際に毎回機械語に翻訳するなんて、処理能力の浪費以外の何者でもなく、僕だったらコンパイル後のバイナリをそれぞれ作って、もし必要ならそれをさらに時間をかけてじっくり最適化して、そうして得られたものを使用・配布すればいいと思っています。これなら多分コードはコンパクトで速くて省エネでしょう。
  • この考え方はOSASKにもあって、つまりOSに必須の機能がなんであるかは大体見えてきたから、だからOSのコアはASKAみたいな言語で効率重視でがしがしと効率重視で作ってしまいましょう、というわけです。一方で、新規アプリやシェルのように発展途上の部分はCやC++などの高級言語で作っていいのではないか、というわけです。そのほうが生産効率が良さそうですし、改造もしやすそうですから。効率を念頭においた仕様設計はできないとは思いますが、それはそのアプリやシェルが十分に枯れて、要求仕様が固まってからでいいと思うのです。
  • ということで、僕からすると高級言語でプログラムを作るというのは、試作品みたいなものです。仕様が固まって大量生産・大量消費するときは、低級言語で書き直し、効率を念頭に再設計するのです。
  • そして新規アプリ開発の仮想マシンの利用にも同じことが言えると思うんです。試作版としてJavaVM用や.NET用を利用するというのは非常に良いと思います。それを最終目標だと思っている意見に対してのみ僕は疑問を感じているわけです。多くの人がたくさん使うようなものに成長したら、仮想マシン用のコードだけではなく、ネイティブ用のコードも作るべきだと思っているわけです。
  • なお、さらにいうと、ネイティブ用のコードというのもゴールではないと思います。最後は専用ハードウェアになるべきでしょう。MPEGデコーダなどがその例になると思うのですが、研究開発段階では多分高級言語でアルゴリズムを研究して、アイデアが固まった頃に効率重視でデコードルーチンを最適化して、仕様として確定した後にハードウェアデコーダが開発されています。
  • ということで、僕の意見をまとめると、仮想マシン技術を新アプリ開発に役立てることは大いに賛成だけど、それは手っ取り早く全環境向けアプリをリリースするための過渡的な技術であって、本当の完成はその後にあるんだよ、ということでした。

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2006-02-16 (木) 18:00:13 (5974d)