etolisp 進捗 (26) 〜 Packageの実装 (5)
半年以上 塩漬け になっていた package 絡みの問題を解決。なんかもう記憶が定かではないのだが,拙い blog の記述によれば,実行時にシンボル名を解決していたのが問題になっていたらしい。
結局「,」や「,@」を,CL package*1のexportシンボルにして,「,hoge」や「,@hoge」は,それぞれ
,hoge => (, . hoge) ,@hoge => (,@ . hoge)
のように,特殊な cons としてパースすることにした。で「`(back-quote)」の実行時に,目ざとくそういう cons を検出して普通に展開したり,splice 展開したりするという仕様。このやり方だと,ちゃんとパース時のカレントパッケージを使ってシンボルが決定されるようになる。
もともと「,」や「,@」はパーサが単一のシンボルとしてはパースできない仕様で,エラーになる。従って,こういう cons は,この記法でしか作成されないため,別の意図と混同することはないであろうという判断。
実装が簡単で動けばOK。それが etolisp クオリティ。
*1:大元締めのpackage