2010-06-17 40 views
27

我已閱讀McCarthy 1960年關於LISP的論文,發現沒有提及任何類似於用戶定義的宏或正常順序評估的文章。我在想,當宏第一次出現在編程語言的歷史(也是Lisp的歷史):何時出現宏(用戶定義的代碼轉換)的想法?

  • 當被用戶定義的代碼轉換的想法(前解釋或編譯)首次描述(理論上)?
  • 什麼是第一個編程語言實現具有類似Lisp的宏(通過「Lisp-like」我的意思是「使用可讀的圖靈完成語言進行代碼轉換」)? (包括非Lisp - 例如Forth已經很老了,但我不確定第一個Forth實現是否已經有「IMMEDIATE」)
  • 另外哪些是第一個高級編程語言(不包括彙編語言...)
  • 什麼是第一個Lisp方言有宏?

謝謝!

回答

10

我認爲這個想法可以追溯到Post systems,用字符串重寫(「如果你看到這個字符串,用它替換它」)。 Post系統具有圖靈功能,因此可以計算任何東西(包括程序文本!)。 Emil Post關於這些文章的論文可追溯到1943年,但據說他在20年代做了最初的概念化。

The General Purpose Macro Processor是最早被廣泛使用的產品之一,已於60年代初期上市。

TRAC是另一個可以追溯到同一時期的早期宏觀處理器。 History of Computer Languages (TRAC)表示它設計於1959年。

這兩個都是圖靈功能的宏處理器。

SNOBOL也是來自同一時期。

事實上,在60年代初建立的非常通用的宏處理器向我暗示,可能存在特殊用途的宏處理器,然後才能提供靈感。在這之前,我確信宏處理器在彙編器中正在使用,但我沒有具體的證據。

我知道COBOL有所謂的COPY庫,它是宏和包含文件之間的交叉。我不知道這是什麼時候引入到COBOL中的,但是它的語言可以追溯到1958年。

有趣的是,LISP宏可以被認爲是樹對樹重寫的特例(「if你看到一個看起來像這樣的s表達式,用一個看起來像這樣的s表達式替換它「)。樹可以很容易地建模爲字符串(請參閱:「LISP」:),因此LISP宏是字符串重寫的特例。

樹重寫的廣義案例現在是Program Transformation Systems的基礎,它可以對程序文本進行大規模更改。

+0

謝謝 - 我已經忘記了彙編宏和郵政系統。這非常有用 - 而且我還會編輯我的問題以包含「第一個高級語言」 - 如果它是COBOL,還不清楚。 – Jay 2010-06-17 21:18:54

16

爲了尋找如何宏中引入了Lisp語言,你應該尋找提到的FEXPRsFSUBRs其現代Lisp的宏(前輩或者更準確地說,FEXPRs是用戶定義宏的前輩)。這些在幾個地方被提及 - 例如,在McCarthy的History of LispFrom LISP 1 to LISP 1.5部分。但事實上,它也比之前提到:在LISP I PROGRAMMER'S MANUAL(從1960年)的第48頁中,您可以看到FEXPR和FSUBR的描述。

順便說一句,將Lisp宏與基於字符串的系統進行比較有點虛假。使用樹變換器與字符串操作的優點足以使其成爲一個完全不同的系統。 Lisp宏的另一個重要方面是它們是本地轉換與全局程序轉換(最明顯的論文是Felleisen的On the Expressive Power of Programming Languages)。當然,這裏有一個完整的區域 - 從FEXPR到現代的,更好表現的宏,然後是Scheme中的衛生宏(處理比符號分析樹更豐富的表示),然後是宏和模塊系統,語法擴張階段,等等等等等等。這裏有可能足夠的東西了幾年的閱讀...

相關問題