Posted 2016-05-05 14:59:16 GMT

先日の4/26日の話になりますが、商用Scheme処理系の雄であるChez SchemeがApache License, Version 2.0で公開されました。

結構反響は大きいようですが、早速ダウンロードして試してみます。

$ git clone https://github.com/cisco/ChezScheme.git $ cd ChezScheme/ $ ./configure --threads --64

今回試すホストはLinuxですが、何も指定しないとシングルスレッド版になるようです。

上記では、マルチスレッド版になるように指定しています。これでビルドすると、 ta6le 版がビルドされます。

また、

$ make test

でビルドのチェックも可能です。

しかし、トレースの出力結果もテストするのは初めてみたような…。

なお、make checkには結構時間がかかります(多分1時間以上)

ta6le/mats/summary に結果が出力されます。

インストールは、

$ sudo make install

のようになります。 Chezの処理系である scheme 、お馴染のPetite Chezの petite 、それとスクリプト実行用なのか、 scheme-script 等々がインストールされます。

起動してみる

$ scheme

で起動します。

$ scheme Chez Scheme Version 9.4 Copyright 1984-2016 Cisco Systems, Inc. >

なにはともあれ fib を定義してみましょう

define ( fib n ) if ( < n 2 ) n + - n 1 fib - n 2 fib (time (fib 40))

さすがネイティブコンパイラだけあって速いですね。

LispWorks(ネイティブコンパイラ)位の速度が出てます。

他に何か試してみようと物色していましたが、 @nfunatoさんにChezでも採用されているNanopass Compilerの動画を教えてもらったので、これを眺めつつ、この動画で紹介されている scheme-to-c を試してみます。

Clojure Conj 2013: Andy Keep - Writing a Nanopass Compiler

scheme-to-c は nanopass-framework に依存していますが、下記の版の nanopass-framework-scheme でないと上手く動かないようです。

それぞれ git clone すればOKです。

使用方法はREADMEに書いてありますが、下記ではコマンドラインからのオプションの指定ではなく、処理系内からライブラリのディレクトリの指定と読み込みを実行しています。

( cd ".../scheme-to-c" ) (library-directories (cons '(".../nanopass-framework-scheme" . ".../nanopass-framework-scheme") '(("." . ".")))) (import (c))

またまた fib を実行

letrec lambda ( n ) if ( < n 2 ) n + - n 1 fib - n 2 fib fib ( fib 40 ) my-tiny-compile ' time quote ... my-tiny-compile time no collections 0.003715930s elapsed cpu time 1.254270947s elapsed real time 155104 bytes allocated 102334155

scheme-to-c はCに変換して実行し、結果をChezに戻してくるというものですが、コンパイルの速度も実行結果も速いですね!

(trace-passes #t)

を実行することでトレースも可能で、ナノパスコンパイルの細かいパスの具合や、変換されたCのコードなども眺めることが可能です。

まとめ

速さを求めるならRacket、Larceny、Chickenあたりかと思っていましたが、Chezはさすがネイティブという速度です。

これだけ速いと比べてみたくなりますが、Chezが公開されたこのタイミングでベンチを取って公開する人も現われました。

まだ一覧としては未完成のようですが、これまでの所でもやはりChezは高速なようです。

■

