Biwa Schemeを読む(0) - 斜め読み

仮想マシン

クロージャやら末尾再帰の最適化やら継続やらをなんとか理解できるようになってきた。しかし、中間コードを生成し,
仮想マシンで・・・と言われると何のことやらちんぷんかんぷんだ。

こんな感じ?

僕のイメージとしては、パーサーを通してS式に変換して、S式を順番に読み上げてリスト形式のForth(アセンブリ言語に毛が生えたような言語)作る。で、リスト形式のForthを実行してるのかなぁと。しかし、謎の部分が多すぎていきなり作る訳にもいかなそうだ。

そうだBiwa Schemeを読もう

ということで、JavaScriptで書かれたスタックベースのSchemeBiwaScheme0.5を簡単に写経しながら読み解いていきたいと思います。


とりあえずファイル構造から理解する事に。

  • index.html
    • ブラウザで動作確認が取れる。メインっぽい。
    • ブラウザのボタン押したら、bs_evalを呼ぶ。
    • new WebScheme.Interpreter()がメインのクラスかな?
    • コードを取得して、コンパイルしたものを表示しているようだ。
    • evaluate(コード,継続?)で評価して表示。
      • 2番目の引数はイマイチ謎なので、後で追う事にする。
  • lib/prototype.160.js
    • prototype1.6使ってるらしい。これも未読なので、積読にしておこう。
  • lib/stackbase.js
    • たぶんコア部分。次回からはここを中心に読むと思われる。
  • lib/r6rs_lib.js
    • R6RSのライブラリ。0.5の時点では未完っぽい。
  • lib/webscheme_lib.js
  • lib/extra_lib.js
    • SRFIとか。無いと困っちゃいそうな関数群。
  • サンプルコード色々。
    • ネットワーク関連が充実してるっぽい。

ここまでの感想

  • 丁寧なソースで非常に読みやすいです。
  • そういやJavaScriptをずっと書いてなかった気がする。