苹果剑桥团队的语言计划
Dylan是一种面向应用与系统编程的动态面向对象语言,名称由dynamic与language组合而成。苹果希望把动态语言便于试验和修改的特点,与商业软件所需的运行效率结合起来。1992年出版的首部手册把仍在发展的设计带到外部程序员面前。
拉里·特斯勒在首版序文中回忆,苹果先进技术组试过多种语言环境,却未找到能兼顾全部需求的方案。公司取得马萨诸塞州Coral Software的资产、聘用其大部分员工,并在剑桥建立ATG East。该团队一边继续开发Macintosh Common Lisp,一边实现新的语言与环境。
1992年的公开设计与1994年的整理
早期项目由艾克·纳西和卡尔·施瓦茨领导,安德鲁·沙利特编写首版手册,大卫·穆恩等人参与语言与文档工作。特斯勒1992年3月署名的序言强调,语言尚未冻结,公开是为了吸收更广泛的意见。
1994年的《临时参考手册》说明,它综合了原书、已发布的设计说明和截至当年5月的新决定,语言也已经采用新的语法。这份过渡文档让早期实现的使用者能够继续试验,同时为更完整的参考规范作准备。
参考:[1]
对象、方法与泛型函数
1996年正式参考书把对象和函数作为语言的基本组织方式。数字、类和函数都能作为值传递或保存在数据结构中;对象具有类型,类型检查可以发生在编译时,也可以发生在运行时。不再可达的对象由运行时自动回收。
方法是一段可调用的代码,泛型函数则把若干方法组织在一起。调用时,语言根据参数选择最适用的方法。类保存对象的结构与继承关系,模块负责名称的可见范围;这种分工使同一操作能够扩展到不同对象,而不必把所有代码塞进某一个类中。
参考:[2]
同一个double如何处理不同对象
苹果Dylan团队成员史蒂夫·斯特拉斯曼在1995年《develop》中给出double的例子。对数字,方法返回2乘以输入值;对字符串,方法把字符串与自身连接。调用者使用同一个名称,执行的代码却随参数类型而变。
文章还定义了一个没有特定类型限制的默认方法,把输入对象组成一个重复的pair。若参数属于数字或字符串,就选中更具体的方法。这展示了程序员如何先提供一般行为,再针对特定对象补充处理方式。
方法的专门化不仅能按类进行,也能针对某一个特定对象。文章用符号cup与pint演示这种情况,把“加倍”的含义交给程序的对象模型决定,而不是固定成一种算术运算。
参考:[3]
语言规范之外的早期实现
1995年3月的《develop》附盘提供Marlais解释器、示例代码和临时参考手册;文章还介绍了Unix上的Mindy字节码编译器。当时苹果自己的Apple Dylan仍是计划在当年交付的产品,公开语言设计与完整开发环境的交付并不同步。
后来《Dylan Programming》的资料附录列出苹果的Technology Release、卡内基梅隆大学的Mindy,以及Harlequin的开发工作。书中把苹果技术发行版明确描述为未完成且不再由苹果支持或更新的软件,显示语言的后续发展已涉及多家实现者。
在灵活性与效率之间设置边界
《Dylan Programming》讨论了类型信息与封闭声明的作用。程序员可以让某些类或函数范围保持可扩展,也可以对稳定部分作出限制,使编译器更容易判断将调用哪个方法,减少运行时的选择工作。
这些声明并不自动保证所有程序都更快。书中建议先把程序设计和实现做正确,再利用测量工具寻找耗时部分,补充类型与封闭信息。Dylan的核心尝试由此落到一个具体工作过程:开发时保留调整空间,交付时利用已知约束改善运行表现。
参考:[4]