TechTalk by Peter Seibel on Common Lisp
看了一个视频:http://video.google.com/videoplay?docid=448441135356213813
Peter Seibel (Pratical Common Lisp 的作者)做的关于 Common Lisp (CL) 的语言优势的一些介绍,比较有意思。
第一个例子中,首先他给出了 Java 中 Visitor 模式的一个典型的实现(C# 中也差不多),代码很多。而在 Lisp 中有了语言特性 generic method, 就能直接了当的解决这个问题,Visitor 模式在 Lisp 中就用不着了。
这里比较一针见血的就是他指出了其实 Visitor pattern 本质上是一种 double dispatch 机制。也就是说,如何遍历树节点,以及遍历不同种类的树节点,这是一种分派(dispatch)机制,同时,对于每种不同的节点,还可能存在多种访问方式,这又是另一个 level 的分派机制。也就是说,对于同一个树我们可以定义多种 Visitor, 用做不同的用途。比如负责打印树的内容的 Visitor, 或者负责解析并计算树节点含义的 Visitor, 等等。也就是说:
Java 中的类继承体系 是第一个 level 的 dispatch;
具体对于每种不同的类进行何种操作,又是第二个 level 的 dispatch.
CL 的优势在于:方法不属于类。
generic method (广义方法)可以针对其每一个实例参数的类型(以及其他特征)进行任意的特化!
这样来看,不光 double dispatch 了,其实可以实现任意的 multiple dispatch 机制。
相比而言,Java / C# 体系的单继承 OO 系统真的是太简单了。
有时候我们会发现在 Java / C# 中很难准确设计类之间的继承关系,其实跟语言的表达能力有限有直接的关系。
第二个重要的语言特征,讲到了 CL 中的 Condition System. 这个比一般语言里的 try..finally 异常处理的机制要强大很多。听其描述应该可以直接支持类似 AOP 这样的编程手段。不过我暂时还没有完全搞明白,这里先不说。
第三个就是介绍了宏,Lisp 的终极武器。其本质的强大性在于可以任意定义语法,参与编译器的编译步骤,从而方便的实现 DSL, 获得更强大的表达能力。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
2009-06-04 也玩有道难题的双立方数问题:Python 版解法
2007-06-04 实现浏览器兼容的漂浮窗体拖动/改变尺寸的技术要点