Programming Bottom-Upa day agohttp://www.paulgraham.com/progbot.html自顶向下设计根据目标将程序划分为子程序,而自底向上设计则构建适应问题的语言。在Lisp中,程序员根据需求创建新运算符,使语言与程序共同演化,直至自然契合。自底向上设计产生更小、更抽象的语言和更简短的程序,降低了复杂性和组件数量。优势包括程序更小、更灵活,更易阅读和修改,代码重用率更高,设计模式更清晰。其他语言可通过库实现自底向上设计,但Lisp在扩展语言方面提供了更强大的能力。这种风格特别适合小团队,能提高个人生产力,使其达成更多成果。
The Roots of Lispa day agohttp://www.paulgraham.com/rootsoflisp.html约翰·麦卡锡1960年的论文展示了如何仅用几个简单的运算符和函数表示法构建编程语言。Lisp是“列表处理”的缩写,它将列表作为代码和数据的核心数据结构。麦卡锡的发现作为一个历史里程碑以及现代编程趋势的典范具有重要意义。C和Lisp模型被描述为两种简洁一致的编程范式,而较新的语言正朝着Lisp模型发展。现代语言越来越多地采用Lisp的特性,如运行时类型和垃圾回收。Lisp的决定性特质是其能够用自身编写,文章通过使用Common Lisp代码重述麦卡锡的步骤来解释这一点。
What Made Lisp Differenta day agohttp://www.paulgraham.com/diff.html条件语句(if-then-else)由麦卡锡为Lisp发明,后来扩展至多数语言。在Lisp中,函数是第一类对象,被视为与整数或字符串同等的数据类型。递归作为编程语言特性首次在Lisp中得到支持。Lisp中的变量本质上是指针;值具有类型,而变量没有。Lisp引入了垃圾回收机制以实现自动内存管理。程序由每个都返回值的表达式组成,这与Fortran中表达式/语句的区分不同。Lisp拥有与字符串不同的符号类型,可通过指针比较进行相等性测试。代码使用符号树表示,从而支持强大的宏(至今仍为Lisp独有特性)。整个语言始终可用:无读取时、编译时和运行时的区分,允许语法重编程和宏。
Revenge of the Nerdsa day agohttp://www.paulgraham.com/icad.html编程语言并不等价;有些比其他的更强大,Lisp就是强大语言的一个典型例子。管理者(尖头老板)通常因为感知到的安全性和招聘便利性而选择主流语言如Java或C++,忽略了语言的实际能力。Lisp创建于1958年,引入了许多创新思想(例如条件语句、递归、垃圾回收),这些直到现在才被主流语言采用。使用像Lisp这样更强大的语言可以显著缩短代码长度(比C语言短7-20倍),并加快开发速度,提供竞争优势。在要求严苛的应用中,语言的选择至关重要;较弱的语言会阻碍解决难题并限制创新。使用非主流语言(如兼容性、库、招聘)的风险通常被夸大;对于严肃项目,收益超过缺点。自底向上的编程和宏(Lisp独有)允许编写能编写程序的程序,实现强大的抽象和代码压缩。像ITA Software这样的公司证明,使用Lisp可以超越使用主流技术的竞争对手,体现了“赚钱的秘诀”。
If Lisp is So Greata day agohttp://www.paulgraham.com/iflisp.html编程语言的流行度与质量并不相关,就像简·奥斯汀的作品尽管质量更高,却不如约翰·格里森姆的作品流行。Lisp因其不寻常的语法而显得困难,吓退了许多潜在用户。过去避免使用Lisp的借口,比如速度太慢,现在已不再成立;如今的借口是循环论证——其他语言更流行。编程语言的流行度会自我延续,因为更多的库、更容易的集成以及管理者的偏好。尽管流行度较低,Lisp的独特优势确保了它的生存,类似于简·奥斯汀经久不衰的小说。
History of T17 days agohttps://paulgraham.com/thist.htmlT是一种极具影响力的Lisp实现,以其简洁的设计和优化闻名。T由乔纳森·里斯于1980年代初在耶鲁大学开发,是一个优化的原生代码Scheme系统,这在当时是一个激进的选择。T引入了创新的实现技术,如高效的数据表示、深度优先垃圾收集器和细粒度中断处理。其编译器Orbit采用CPS(延续传递风格)作为中间表示,多年来一直是最优化的Scheme编译器之一。T的发展催生了多篇博士论文,并对后来的语言和编译器(包括SML/NJ和Scheme 48)产生了影响。其语言设计具有简洁的对象系统,集成了赋值机制和一致的命名方案。T的遗产包括对函数式编程、编译器技术和垃圾收集研究的贡献。