Re: [連結] 松本行弘: Code 的世界~成為超級程式設 …
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 7 之 16 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章