制限事項

  • GC を特定の場所でしか行いません

GC 発生時にC言語のスタック上(引数、自動変数)にしかない参照が解放されてしまわない対策が行われていません。そのため任意のタイミングでGC を発生させると問題が発生します。現在はメモリの使用量を見て GC が必要になるとフラグをたてて VM ループの特定の場所でのみ GC 処理を行うようにしています。この方法には Heap メモリの少ないマシンでのクリティカルな状況に対応できないという問題があります。

ruby は保守的 GC という手法でC言語のスタックを走査しています。
Newton は C++ のクラス(RefVar, RefArg)をうまく使うことでこの問題を解決しているようです。

既知の問題

  • if 文で else の前に ; が使えない
    if a = 0 then
      a := 1                              // ; があるとエラーになる
    else
      a := 2;
    
  • try 文で onexception が複数ある場合途中の onexception では ; が使えない
    try
      a := 1;
    onexception |ext.ex.msg| do
      a := 2                              // ; があるとエラーになる
    onexception |ext.ex| do
      a := 3;
    

※どちらも yacc でちゃんと書いたつもりなのですがうまくいってません。少し修正すると部分的にはよくなりますが、他の構文でエラーが出るようになってしまってなかなかうまくいきません...

未実装

  • 0 での割算。Inf(無限大)

本家では 0 で割算をするとエラーを発生せずに Inf という値を返します。
現在は 0 で割算をするとエラー(例外)を発生するようになっています。

  • 独自のメモリ管理
  • 2 byte 文字対応(日本語)

その他

  • エラーメッセージが貧弱です
  • エラーチェックが貧弱です
  • 構文エラーで適切なメッセージを出していません
  • 定数の最適化を行っていません