以前@g000001さんにSBCL+SLIMEのデモを見せてもらった時、関数やマクロの定義にジャンプできるだけでなく同じノリでアセンブリまで降りて行けれるのを見せてもらってびっくりした覚えがあります。コンパイラとデバッガが言語仕様に含まれてるCommon Lispならではですね。
* (defun main () (format t "unk~%"))
MAIN
* (save-lisp-and-die "unk" :toplevel #'main :executable t)
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into unk:
writing 5248 bytes from the read-only space at 0x20000000
writing 3088 bytes from the static space at 0x20100000
writing 40529920 bytes from the dynamic space at 0x1000000000
done]
SBCLではsave-lisp-and-dieで実行可能バイナリファイルを作成できるみたいです。
$ ./unk
unk
「ほう、経験が生きたな」(@ブロントさん)
$ du -h unk
39M unk
でかい!でもまあこれは仕方がない。
$ file unk
unk: Mach-O 64-bit executable x86_64
当たり前だけどMacではELFじゃなくてちゃんとMach-Oなんですね。これじゃ@g000001さんがやってたみたいな、"ローカルで適当な実行可能イメージを作ってLinuxサーバーにアップ"なんてことできませんな。