言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

Squeak VM を作ろう

やる事: Squeak VM を VisualStudio でコンパイルしてデバッグする。

動機: 最新の Croquet がどうやら僕のパソコンで動かないようだ。バグ報告を出しても、「そんな事を言うのはお前だけだ」と言われる。自分で治すしかないみたい。

Squeak は大きくイメージと VM(バーチャルマシン) の二つの部品で出来ていて、VMgccコンパイルするのが一般的です。しかし、Windows でのデバッグにはやっぱり VisualStudio が楽なので、ここでは VisualStudio を使ってコンパイルします。VM のバージョンは Croquet の標準に合わせて 3.6.2 を使いますが、こだわりが無ければもっと新しい物もあります。

いくつか失敗すると思いますので、テキトウに直します。

  • sqWin32Prefs.c と sqWin32Windows.c の SetDefaultPrinter() を _SetDefaultPrinter() にします。
  • Plugins の InterPokerPlugin をプロジェクトから削除します。Plugins の追加 - 新しいフォルダを作り、BMPReadWriterPlugin FontPlugin RePlugin とファイル全部を登録します。
  • Squeak プロジェクトのプロパティ - リンカ - 入力 に、opengl32.lib を追加します。
  • これでコンパイルが通りますが、デバッガコンソールに出るエラーを減らないとやりにくい、ので win32ExternalPrims.c の printLastError(TEXT("LoadLibrary failed")); をコメントアウト
  • Croquet 向け設定としては、タイトルバーで右クリック VM Preference Display and Sound - Use OpenGL
  • VM のメインループは interp.c の 5054 行目あたりにあります。

と、これで安心とデバッグを続けるも、やはり VMデバッグは難しい。なんで C のくせに例外があるのだ。しかも、例外が起こった元のスタックが消えてしまってどこからやってきたのか判らない。ダメダ。