Jay*_*Jay 27 lisp macros scheme history racket
我读过McCarthy 1960年关于LISP的论文,没有发现任何与用户定义的宏或正常的订单评估相似的内容.我想知道宏首次出现在编程语言历史中(以及Lisp历史中):
谢谢!
Eli*_*lay 18
要查找引入Lisp的宏的方式,你应该寻找FEXPR和FSUBR的提及现代Lisp宏的前身(或更确切地说,FEXPR是用户定义宏的前身).这些在几个地方被提到 - 例如,在McCarthy的Lisp历史的From LISP 1到LISP 1.5部分.但实际上,它也早于此提到:在LISP I PROGRAMMER'S MANUAL(从1960年)的第48页中,您可以看到FEXPR和FSUBR的描述.
顺便说一句,将Lisp宏与基于字符串的系统进行比较有点虚假.使用树形变换器与字符串操作的优势足以使其成为完全不同的系统.Lisp宏的另一个重要方面是它们是局部转换而不是全局程序转换(最明显的读者是Felleisen的"编程语言的表达能力").当然这里有一个完整的区域 - 从FEXPRs到现代的,表现更好的宏,然后到Scheme中的卫生宏(处理比符号解析树更丰富的表示),然后是宏和a的组合模块系统,语法扩展阶段等等.这里有足够的东西可以阅读几年.
Ira*_*ter 10
我认为这个想法可以追溯到Post系统,用字符串重写("如果你看到这个字符串,用该字符串替换它").Post系统具有Turing功能,因此可以计算任何东西(包括程序文本!).埃米尔波斯特关于这些的论文是在1943年,但据说他在20世纪20年代做了原始的概念化.
通用宏处理器是最早广泛使用的处理器之一,于60年代初期推出.
TRAC是另一个可追溯到同一时期的早期宏观处理器.该计算机语言的历史(TRAC)说,这是在1959年设计的.
这两者都是具有图灵功能的宏处理器.
SNOBOL也可以追溯到同一时期.
在60年代早期建造非常通用的宏处理器的事实告诉我,在此之前可能有专用的宏处理器来提供灵感.在此之前,我很确定宏处理器在汇编程序中使用,但我没有具体的证据.
我知道COBOL有所谓的COPY库,它是宏和包含文件之间的交叉.我不知道这是什么时候被引入COBOL,但语言可以追溯到1958年.
值得注意的是,LISP宏可以被认为是树到树重写的一种特殊情况("如果你看到一个看起来像这样的s表达式,用一个看起来像这样的s表达式替换它") .树可以很容易地建模为字符串(参见:"LISP":),因此LISP宏是字符串重写的特例.
树形重写的一般情况现在是程序转换系统的基础,它可以对程序文本进行大量更改.
来自Lisp的演变(斯蒂尔/加布里埃尔):
3.3宏
1963年,Timothy P. Hart在简短的MIT AI Memo [Hart,1963]中将宏似乎引入了Lisp,
Timothy P. Hart,1967年10月,LISP的MACRO定义