Re: [連結] 松本行弘: Code 的世界~成為超級程式設 …

看板Ruby作者 (Schelfaniel)時間15年前 (2009/07/28 14:58), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串7/16 (看更多)
※ 引述《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
文章代碼(AID): #1ARg60n6 (Ruby)
討論串 (同標題文章)
文章代碼(AID): #1ARg60n6 (Ruby)