#:g1: Chez Scheme がオープンソース化されたので試してみる

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
      (+ (fib (- n 1))
         (fib (- n 2)))))

(time (fib 40)) ;>> (time (fib 40)) ;>> no collections ;>> 0.958591374s elapsed cpu time ;>> 0.958607953s elapsed real time ;>> 0 bytes allocated ;=> 102334155

さすがネイティブコンパイラだけあって速いですね。
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を実行

(time
 (my-tiny-compile
  '(letrec ((fib (lambda (n)
                   (if (< n 2)
                       n
                       (+ (fib (- n 1))
                          (fib (- n 2)))))))
     (fib 40))))
(time (my-tiny-compile (quote (...))))
    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は高速なようです。


HTML generated by 3bmd in LispWorks 7.0.0

comments powered by Disqus