ということで、Cincom Smalltalk(VisualWorks)向けに書き換えてみました。Squeak 版との違いは…、
- double のリテラル表現の違い
- ファイルストリームの生成方法の違い
- #+ などを持たない Array を継承させてもうま味がないので、改めて Vec を Object 下で実装しなおし
- カーリーブレイスによる動的な配列生成表現をサポートしないので Array class>>#with:with:with: に差し替え
- #infinity がないので、1d308 へ差し替え
といったところでしょうか。
VisualWorks には #timeToRun はないので、計測には昔ながらの Time class>>#millisecondsToRun: を用います。
Time millisecondsToRun: [self pixelSize: 256 level: 9]
結果は 173 秒。3分弱で終了します。環境は同じ 1.0 GHz PowerPC (OS X) です。30 分 15 分 かけて終わる Squeak からしたら爆速で 約 10 倍 約5倍 のパフォーマンスといったところ。この差は他の一般的なベンチマークでもだいたい一緒なので順当なところでしょう。さすがは商用 Smalltalk 。Squeak とは違うのだよ、Squeak とはっ!といった感じです。もっとも Java には余裕(同じ環境、同じパラメータ設定で、5〜6倍の遅さ)で負けてますけど(^_^;)。