kiyokaのブログアーカイブ

Archive of old blog posts

高速化のアイデア

私がRubyで書いているLisp方言、 [Nendo]について。

関数呼び出しが重たいのがわかっている。

例えば、現在の[Nendo]は関数の引数が1個の時でも、次のような引数変換用のcallProcedure関数を通る。

 callProcedure( '関数名', @_func, Cell.new( 1 ))

これを

 @_func.call( 1 )

のように、目的のクロージャを直接呼びだす様にすれば、オーバーヘッドが無くなる。

これは計測の結果、ボトルネックだと確実に分かっている。 (例えば、fib(20)が10倍ほども高速化された) 先にsrfi-1等のポーティングをやってから取り掛かろう。