(rontolisp) docs
← 関数

compile

(compile name definition)

リテラルの (lambda ...) 定義を、空のレキシカル環境で評価して関数に変換します。name が nil なら関数そのものを返し、シンボルの name を渡すとその名前のグローバル定義としてもインストールし、Common Lisp と同様に名前を返します。rontolisp の compile はネイティブコードを生成しません — 定義時のコード構築イディオムをロード可能にするために存在します。特に、クラスメタオブジェクトに対してメソッドを定義する引数なしの定義(オブジェクトマッパーの (funcall (compile nil(lambda () ,code)))イディオム。code` はクラスから計算した値を閉じ込めます)は、定義時のメソッド構築として実行されます。

コンパイルされたプログラム(JVM / WASM 出力)では、このメソッド構築イディオムはコンパイル時に展開されてプログラムに継ぎ足され、同じ呼び出しの実行時再実行は no-op になります。それ以外の実行時 compile 呼び出しはエラーをシグナルします — コンパイル済みプログラムはコンパイラを持たないためです。通常の式の実行時評価には eval を使ってください。