Hacker News 中文摘要

RSS订阅

Ruby及其近邻:Smalltalk -- Ruby and Its Neighbors: Smalltalk

文章摘要

文章探讨了Smalltalk对Ruby语言的影响,指出虽然Ruby几乎没有沿用Smalltalk的语法,但在对象系统设计上深受其启发。作者分享了自己使用Smalltalk的经历,并简要提及Smalltalk在施乐PARC实验室的起源背景。

文章总结

Ruby的邻语:Smalltalk

发布时间:2025年11月4日

在探讨Perl对Ruby的影响之后,本文聚焦Ruby的另一重要灵感来源——Smalltalk。尽管Ruby几乎未沿用Smalltalk的语法,但其对象系统的核心理念(如"万物皆对象")深受Smalltalk启发。作为作者最钟爱却已式微的语言,Smalltalk的故事值得细说。

Smalltalk简史

诞生于施乐PARC实验室的Smalltalk-80(与图形界面、以太网同期问世),在80-90年代曾是商业软件开发的主流选择。航空业、薪酬系统乃至极限编程先驱项目都依赖它,当时Smalltalk程序员薪酬甚至高于C++开发者。作者90年代在佐治亚理工任教时,曾用昂贵的ObjectWorks环境教授面向对象编程。

1995年,原施乐团队在苹果公司期间开源了Squeak——这个用极小C内核构建、95%代码自举的Smalltalk实现,因其高度可移植性迅速风靡。作者团队曾基于Squeak开发了早期Wiki工具,其环境特性至今令人怀念。

独特的环境哲学

Smalltalk完全跳脱Unix/C的影响,自成一派操作系统: - 工作区(Workspace):类似REPL但需手动选择执行 - 浏览器(Browser):四窗格代码编辑器支持实时查看/修改系统任意代码(包括核心类) - 图像系统(Image):所有代码和状态保存在运行时镜像中,通过变更集(change sets)协作

极简语法设计

  • 消息传递:所有操作皆为消息(一元/二元/关键字消息)
  • 严格左优先:无运算符优先级,3²+4²会先算成9+16=25再开方
  • 代码块(Block):类似Ruby的块但更灵活,如条件语句实为消息:(x>10) ifTrue:[x²] ifFalse:[x√]
  • 纯面向对象:连布尔逻辑都由True/False类的方法实现

与Ruby的渊源

两语言共享诸多特性: - 单根继承(Object类) - 动态方法查找 - 元类系统 - 兜底方法(doesNotUnderstand/method_missing)

差异在于Smalltalk不支持混入(mixin),而通过委托实现代码复用。Kent Beck的《Smalltalk最佳实践模式》至今对Ruby开发者具有参考价值。

兴衰启示

Smalltalk的沉浸式开发体验令人称道: - 即时测试/调试:可热修改异常代码并继续执行 - 智能环境:自动建议未定义的方法创建 - 全系统透明:所有对象状态可实时探查

但其"大统一"环境最终难敌Unix哲学: - 缺乏脚本能力 - 数据库集成滞后 - 镜像系统导致部署困难 - 与主流版本控制理念冲突

对Ruby的馈赠

Ruby继承了Smalltalk"万物皆消息"的对象模型,但用类C语法重构。作者坦言,其偏好创建小类(如化学管道模拟中的Direction类)的编码风格,正是受Smalltalk范式熏陶。在众多语言中,Ruby最完美延续了这种优雅的面向对象精神。

(全文完)

评论总结

以下是评论内容的总结:

  1. Smalltalk镜像的独特价值

    • 主要观点:Smalltalk的镜像(image)功能是其生态系统中最令人印象深刻的部分,可以冻结、分发和恢复应用程序状态,实现某种“永生”。
    • 关键引用:
      • "The Smalltalk image is a very interesting beast. Look at it as a kind of immortality."
      • "Some of the objects in a Smalltalk image may date back to 1972, when the first Smalltalk image bootstrapped!"
  2. 对Smalltalk历史和风格的欣赏

    • 主要观点:一些评论者赞赏文章对Smalltalk历史的介绍和写作风格。
    • 关键引用:
      • "as a history of languages aficionado myself, I appreciate both the content and the style."
      • "thank you for this great post. my nostalgia for the late 90's ParcPlace IDE is heavy."
  3. Smalltalk的替代语言推荐

    • 主要观点:推荐Newspeak作为Smalltalk的现代替代品,尤其是其基于浏览器的体验。
    • 关键引用:
      • "check out https://newspeaklanguage.org for the Smalltalk experience in the web browser."
      • "This is my favorite video by Newspeak's creator Gilad Bracha."
  4. 对Smalltalk实际应用的疑问

    • 主要观点:质疑Smalltalk在商业化部署中的实际运作方式,尤其是其作为“操作系统”的特性。
    • 关键引用:
      • "how did deployment to end-users work?"
      • "Were the users running, say, Windows and then the Smalltalk 'OS' would be running on top of that?"
  5. 对缺乏代码示例的批评

    • 主要观点:批评文章缺乏实际代码示例,认为这种“空谈”无法展示语言的真实效果。
    • 关键引用:
      • "Rants like this about languages which have little/no code snippets are the worst."
      • "talk is cheap, show me the fucking code, else don't waste my time."
  6. 对Smalltalk交互式编程环境的讨论

    • 主要观点:Smalltalk的交互式编程环境(如“运行中调试”)是其独特优势,但也存在可重复性和调试效率的问题。
    • 关键引用:
      • "It really is nice... you can always halt and continue."
      • "the hard part of the experimental method is reproducibility... conflicts with 'you're in the running environment'."
  7. Ruby与Smalltalk的比较

    • 主要观点:Ruby是Smalltalk的现代化改进版本,更适合现代开发实践和工具链。
    • 关键引用:
      • "Ruby is Smalltalk but amenable to modern development practices and tools."
      • "Ruby got closer but also no dice... Matz is a better language designer than Alan Kay."
  8. Smalltalk的抽象能力与局限性

    • 主要观点:Smalltalk在抽象建模方面非常强大,但由于硬件和生态的发展,其影响力逐渐减弱。
    • 关键引用:
      • "Smalltalk is among the top most ergonomic ways to model concepts in a computer."
      • "destiny made CPUs win and now we're using AI to chew their accidental complexity for us."
  9. 对Alan Kay愿景的反思

    • 主要观点:Alan Kay的愿景(如面向对象编程)尚未被任何语言完全实现,Smalltalk和Ruby都只是部分接近。
    • 关键引用:
      • "I still don't think any language came close to his vision... smalltalk definitely not."
      • "It is definitely not smalltalk; it is also not ruby, though ruby is very good."

总结:评论中对Smalltalk的评价呈现两极分化,一方面赞赏其独特的镜像功能和交互式开发环境,另一方面批评其语法和实际应用中的局限性。同时,Ruby和Newspeak等语言被视为Smalltalk的现代化替代品。