ネイティブコード生成についていろいろと考えていましたが、Tracing JITと呼ばれるものを試してみることにしました。 Tracing JITでポイントとなるのはインタープリタとコンパイル済みのコードの切り替えに起因するオーバヘッドかと思います。またYpsilonではConcurrent GCの性能を落としてはいけないという制約がありますのでなかなか難しいです。 でも、面白いことにConcurrent GCとTraicing JITが上手くかみ合うとネイティブコンパイラの性能を越えるケースも出てくるようです。 まず、Ikarusより速くなるという特別なケースを紹介しましょう。 (define map-1 (lambda (proc lst) (if (null? lst) '() (cons (proc (car lst)) (map-1 proc (cdr lst)))))) (def