#:g1: stalinの紹介

Posted 2014-08-20 09:45:00 GMT

(LISP Library 365参加エントリ)

 LISP Library 365 の232日目です。

stalinとはなにか

 chicken-stalinは、Jeffrey Mark Siskind氏作の強い最適化を特長とするR4RSのコンパイラをFelix Winkelmann氏がChickenに移植したものです。

パッケージ情報

パッケージ名stalin
Chicken eggs:stalin - The Chicken Scheme wiki

インストール方法

$ sudo chicken-install stalin

すれば、

$ chicken-stalin -copt -O2 -On file.scm

のような感じでSchemeのソースをコンパイルできます。

試してみる

 Stalinは単体でもDebianのパッケージ等でもインストールできますが、Chicken版のstalinは、文字列中の\n、\t、\eを使えるように拡張し、srfi-0のサポートも追加されています。

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

(display (fib 40)) (newline)

のようなファイル /tmp/fib.scm があれば、

$ chicken-stalin -copt -O2 -On /tmp/fib.scm

でコンパイルできて、

$ time ./fib                               
102334155
./fib  0.38s user 0.00s system 99% cpu 0.379 total

という感じです。
(fib 40)で0.38というのはSBCLだと

(setq sb-ext:*inline-expansion-limit* 360)

(defun fib (n) (declare (optimize (speed 3) (safety 0) (debug 0) (space 0)) (fixnum n)) (labels ((fib (n) (declare (fixnum n)) (if (< n 2) n (the fixnum (+ (fib (- n 1)) (fib (- n 2))))))) (declare (inline fib)) (fib n)))

(fib 40) ;=> 102334155 #|------------------------------------------------------------| Evaluation took: 0.374 seconds of real time 0.376000 seconds of total run time (0.376000 user, 0.000000 system) 100.53% CPU 1,007,460,264 processor cycles 3,840 bytes consed

Intel(R) Core(TM) i7-4600U CPU @ 2.10GHz |------------------------------------------------------------|#

位やらないと追い付けない感じです。

まとめ

 今回は、stalinを紹介してみました。
Stalinはやっぱり速いですね。

comments powered by Disqus