作者Schelfaniel (Schelfaniel)
看板Ruby
标题Re: [连结] 松本行弘: Code 的世界~成为超级程式设 …
时间Tue Jul 28 14:58:07 2009
※ 引述《godfat (godfat 真常)》之铭言:
: 我猜,因为 macro 展开可能会碰到,例如 global 的 name?
嗯嗯
: 如果像是这样呢?
: ASM(%q{
: mov ax, 10h
: ret
: })
: 这样也可以是合法的 ruby syntax. 也就是说 ASM 里面会需要一个
: assembly 的 parser. 用 lisp 应该也是类似的作法?
: macro 的速度?你是指先展开再 compile 吗?
: 这个由另一个 preprocessor 去跑,再把这 compile 成 ruby,
: 再把他丢给 ruby 去跑。好像可以试试看用起来如何...
应该说 Common Lisp 的原本就是可以 compile 的,
最少的执行有两种方式,一种就当成 Script 直接执行,
另一种的,就是 (compile) 成 .fsc (档,依各家实作副档名或有不同)
Common Lisp 本身就可以 compile 成快速执行档 (但这部份没有统一规格)
然後,有些家还有 (save-image) 直接产生 executable
或是产生 image 档给专用的执行程式等执行方式。
而一般 Common Lisp 的处理,它是有 Reader -> Compiler 的顺序,
它的 Reader 其实是只吃 Common Lisp 式的括号格式 如 (+ 1 2)
所以你写 1+2 它会认为这个不正确,但是 Reader 之前
还可以再设一个前置处理,就是类似 preprocessor 的 Reader Macro
让 Reader 知道哪一些情形,要先行转换成 Lisp 格式,再给 Reader 读取,
而读取的同时,才进行 Common Lisp 本身的 Macro 的置换,
置换完再 compile,当然这边不管是 Reader Macro 或是 Macro,
如果直接使用 Script 方式来执行的话,只能算是 Syntax Sugar :QQ
毕竟置换的时间,和多呼叫一次函式的时间,也许相差不多 :QQ
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.29.29.137