dyncomp 0.1リリース

Gaucheの拡張モジュールdyncompをリリースしました。このライブラリを使うと、Gaucheのコードの中でCの関数が定義できるようになります(PerlのInline::Cみたいなモジュールです)。

メリットとして、以下のものがあります。

  • Schemeのコードの中に埋め込めるのでメンテナンスが簡単
  • コンパイラとしてTiny C Compilerを使っているのでコンパイル速度も速い
  • Cといってもgauche.cgen.ciseを使ったS式表現なので、C風の構文アレルギーの方でも安心して使える

デメリットとしては、以下のものがあります。

  • 現状Linuxでしか動かない*1
  • 読めないヘッダファイルがある(GCCの機能に依存しているものとか)
  • 構文がSchemeに似ているのでコードを書いていると混乱する

以下はマンデルブロ集合の計算でベンチマークをとった結果です (CPUはPentiumM 2.13GHz)。こういったように、ものによっては数十倍速くなります。

# Schemeバージョンの計算時間
% gosh examples/mandelbrot.scm
;(time (fill-image image size))
; real   1.190
; user   1.180
; sys    0.010

# dyncomp使用時の計算時間
% gosh examples/mandelbrot.scm -c
;(time (fill-image-fast image size))
; real   0.025
; user   0.020
; sys    0.000

雰囲気として、「"特殊なLisp"で書くと自動的に速くなる」といった感じでコンパイルとか気にせず使えますので、気軽にお試しください。

*1:MacOSX, FreeBSD, Windowsでも動作するようになりました