为什么Smalltalk不流行

时间:2023-03-10 05:30:40
为什么Smalltalk不流行

最近读到一本书,说Python程序员比Java程序员聪明。同理,懂Smalltalk的程序员也比Java程序员聪明。所以,我在*上找到这个关闭很久的问题,整理了一下,跟大家分享。

在介绍为什么Smalltalk不流行之前,你一定会想它有什么特别之处吗,以至于很多技术刊物和出版物在谈论面向对象时都拿它作为参照。我只会Java,它真的有那么重要吗,或者说我需要学习它。因此我先就这个问题作了整理。

Smalltalk可以说是OO语言的先驱之一(当时与之对应的是Simula和Eiffel),它是相当纯粹的OO语言。

  • 一切皆对象,对象之间的通讯只能通过发送消息实现
  • 无原生对象(例如int或boolean等)
  • 无结构控制(例如for或switch等),听起来不可思议但这是真的
  • 无静态对象(static)

它甚至实现了一些现在看来司空见惯的设计:

  • 虚拟机(JIT编译)
  • 检查式调试
  • “Hotswapping”执行代码
  • 闭包
  • 现代IDE
  • Duck typing
  • 基于Model-View Controller (MVC) 的UI
  • 测试驱动开发(TDD)和敏捷方法

另外Smalltalk还有很多特性让它显得另类:

  • 基于Image的系统而不是基于文件
  • 面向对象的数据库

毫不夸张的说,Java和apache-common的集合类(collections)API都极大地受到Smalltalk的影响。

我不会建议你去学习Smalltalk,但熟悉这些基本概念(目前很多语言都提供了)对你相当有帮助。 该语言的创作者Alan Kay最初的目的是儿童教育。现在人们不再大规模使用它,但这不并不是说它完全退出了。比如,JPMorgan有一个大型的管理衍生品风险的系统就是用Smalltalk语言编写的。

言归正传,回到刚才的主题,为啥Smalltalk没有流行起来。 某人说,最近几个月来我一直在看Smalltalk(VisualWorks),我越学越对它刮目相看。不过我总觉得我是不是忽略了一些东西,它现在为啥不再流行还是它从未流行过。那些抛弃Smalltalk转而学习Java或C++的人,谁能告诉我这是为什么。

大家普遍认可的一个回答说,有很多原因(大部分是历史造成的)导致Smalltalk没有火起来。

  • 与那个时代的硬件相比,它太超前了。
  • 1995年,Java横空出世,Smalltalk主要的厂商(ParcPalace)正忙着呢与另一个厂商(Digitalk)合并,最终以失败告终。
  • 2000年,Cincom收购VisualWork时,人们已经不再对Smalltalk感冒了。
  • 此后,Smalltalk不再扮演重要角色,但它又恢复了一些市场。