Alan Ver0.2
Release Note

Last updated:
Created: 2004-10-28








by Fumisky Wells
  1. VMの命令のどれがよく使用されるかをレポートする a/vmstat を作成。 push がダントツという興味深い結果となった。

  2. directory を再構成。1つのファイルしかない src/lex/, src/gen/ を廃止し、 それぞれ src/parse/, src/semant/ にマージした。

  3. 構文上、type を式の1つとした( class A_type : A_exp {...}; )。 こうした理由は、型パラメータを導入したため。型パラメータの導入に伴い、 型が単なる ID ではなく型式となり、
    type_exp : ID
    exp : ID
    と普通の式と衝突するため。変数宣言か式かの違いは、
    exp ID ...    --変数宣言
    exp op ...    --式
    で判断させている。

  4. 今後の布石として、'.' 演算子を導入した。メンバ、スコープ、プロパティ 等の用途を考えている。

  5. 配列型 array[T] を導入。2次元までサポート。 関数に渡すと core-dump したり、まだ問題あり。
    でも、これで lifegame や Othello が記述できるようになった。

  6. リスト型 list[int] を導入。まだ試験的。list[str] はまだだし。

  7. put() しかサポートしてなかった標準関数 SFUNC を、 任意の C の関数を組込める CFUNC に一般化。

  8. 関数型(戻値の型 x 引数型)を導入。

  9. 変数定義時、初期値がない場合は既定値をセットする仕様とした。 int の場合 0, bool の場合 false, str の場合空列 (""), などである。

  10. 型の属性を表すのに、T.member という表記をさせることにする。例えば a.num や int.MAX など(後者はまだ実現できてないが)。 このために Scope を型に持たせる。

  11. 配列の添字アクセスなどのために VM命令セットに IX を追加したが、変更の余地ありそうだ。

  12. VM にローカルに可変サイズのメモリを確保する VM::alloca() を追加。 変数サイズ配列(変数定義時、定数ではなく変数や式で配列のサイズを指定できる 配列。定義後のサイズの変更はできない)にとっては効率のよい方法だ。

  13. システム例外が4つに増えた:
    VE_FILE_OPEN_FAIL
    VE_ARRAY_OUT_OF_IX
    VE_ARRAY_INCOMPATIBLE_N
    VE_LIST_OUT_OF_IX