-compile-syntax

Chicken Schemeでruntimeにマクロを残す

Chicken Schemeコンパイラのデフォルト仕様では、
マクロはコンパイル時に展開されるため実行時には残りません。

しかし、実行時にloadやevalを呼び出すプログラムを書いた際に、
syntaxをそのまま利用したい場合があります。

その場合、 -compile-syntax オプションを指定します。

(define-syntax line
  (syntax-rules ()
    ((_ obj) (begin (display obj) (newline)))
    ((_ obj port) (let ((p port)) (display obj p) (newline p)))))
(repl)
csc -compile-syntax hoge.scm
./hoge
#;> (line "hello,world!")
hello,world!

私の場合は開発時には csi を良く使い

  1. scm を cscコンパイル
  2. csi 上で load して動作チェック
  3. 問題なければ executable のビルドに結合

のように進めているため、
loadした時にsyntaxもしっかり使えることを重宝しています。