[Waba WORLD] [Wabasoft] 開発:[FAQ| 仕様|How-to]
"Things should be made as simple as possible, but not any simpler."
- Albert Einstein

Waba仮想マシン

Wava仮想マシンはJava仮想マシンの仕様に定義されたバイトコード命令のサブセットを 実行するように設計されました。

このため、Wabaクラスファイル・フォーマットはJavaクラスファイル・フォーマットの サブセットとして定義され、開発者はWabaと互換でWaba仮想マシン上で実行できる クラスファイルやバイトコードの生成にJava開発ツールを使うことができます。

Waba仮想マシンは非常に小さなメモリ量で動作するようにつくられています。 たとえば、PalmPilot用Wava仮想マシンはおよそ50Kです。 (実行可能ファイルのために約30K、基本クラスの集合のために約20K使われます)

バイトコード

Wabaでサポートするバイトコード命令とフォーマットの全定義は、 Jon MeyerとTroy Downing共著の"Java Virtual Machine"にあります。 Waba仮想マシンで実装されたオペコードは、longとdoubleのデータ型、例外、 スレッドを除いた"標準(Standard)"オペコード(0-201)です。

Waba仮想マシンは、longとdoubleのデータ型、例外、スレッドに関した操作を サポートしていません。

以下はオペコードの一覧です。それらはWaba仮想マシンで実装される必要が無い "標準"オペコードの一部です:

OP_monitorenter OP_monitorexit OP_athrow
OP_lconst_N OP_dconst_N OP_lload
OP_dload OP_lload_N OP_dload_N
OP_laload OP_daload OP_lstore
OP_dstore OP_lstore_N OP_dstore_N
OP_lastore OP_dastore OP_ldc2_w
OP_i2l OP_i2d OP_f2l
OP_f2d OP_ladd OP_dadd
OP_lsub OP_dsub OP_lmul
OP_dmul OP_ldiv OP_ddiv
OP_lrem OP_drem OP_lneg
OP_dneg OP_lshl OP_lshr
OP_lushr OP_land OP_lor
OP_lxor OP_l2i OP_l2f
OP_l2d OP_d2i OP_d2l
OP_d2f OP_lcmp OP_dcmpl
OP_dcmpg OP_lreturn OP_dreturn

"Quick"オペコードと"Reserved"オペコード(203-255)はWaba仮想マシンの仕様になく、 Waba仮想マシンでサポートされていません。

クラスファイル・フォーマット

Wabaでサポートされたクラスファイル・フォーマットはJava仮想マシンでサポートされた クラスファイル・フォーマットのサブセットとして定義されます。

クラスファイル・フォーマットは、以下の例外を除いてJon MeyeyとTroy Downing共著 "Java Virtual Machine"の12章(Class File Reference)に記述されたものと同様です:

  • longとdouble型記述子がサポートされていません
  • longとdouble型定数型がサポートされていません
  • longとdouble型定数値がサポートされていません
  • メソッド属性中の例外テーブルが飛ばされます
  • LineNumberやLocalVariableTableなどのコード属性が飛ばされます
Wabaはクラスファイルが解釈されておらずオリジナルに忠実なフォーマットで ストアされるように要求していることが重要です。 クラスファイルはいかなる方法によっても事前にリンクされたり解釈されたりすることは 許されておらず、全てのプラットフォームで同じフォーマットをもちます。

これは互換性を保ち、バージョンの問題を軽減します。


原文:Copyright (c) 1999 Wabasoft. Waba, WabaVM and WabaSDK are trademarks of Wabasoft Inc.