Smalltalk有什么特别之处?

时间:2009-11-30 17:42:33

标签: programming-languages oop smalltalk

在每个技术出版物中,以及在本网站上,人们总是将OO语言与Smalltalk进行比较。我的经验是Java:Smalltalk 所以重要,我应该研究它吗?

12 个答案:

答案 0 :(得分:87)

Smalltalk是最早的面向对象(OO)语言之一(与SimulaEiffel等其他语言一样)并且在OO意义上可以说是极其“纯粹”:

  • 一切都是一个对象,只有通过发送消息才能传达对象
  • 没有原语(没有int s,boolean等)
  • 无控制结构(无forwhileif等)。听起来不可能,但这是真的!
  • 没有静力学

它还开创了其他一些现在常见的东西:

  • 虚拟机(和JIT编译)
  • 通过检查进行调试
  • “Hotswapping”正在运行的代码
  • 现代IDE
  • 闭包
  • 鸭子打字
  • UI的模型 - 视图控制器(MVC)架构
  • 测试驱动开发(TDD)和敏捷方法

还有其他与Smalltalk相关的东西并没有真正成为主流:

  • 基于“图像”的系统,而不是基于文件的。
  • 面向对象的数据库

公平地说,Java集合API和 apache-commons集合 API受Smalltalk的影响很大。

我不会说你应该学习Smalltalk 本身,但熟悉这些功能的基础(现在有很多其他语言版本)肯定是有利的给你。

请注意,目前有only 123 questions on here这种语言,最初是作为一种教育语言(即针对儿童)的创作者Alan Kay。它不再使用得特别多。这并不是说它没有被使用。例如,摩根大通有一个大型的奇异衍生品风险管理系统。

答案 1 :(得分:48)

Smalltalk有许多出色的创新 - 我们今天都认为理所当然的事情,包括:

  • 第一个IDE
  • 使用鼠标为GUI提供编程支持如果你学习了Smalltalk GUI编程,你真的会理解MVC。
  • 由少数能够很好地协同工作的强大创意构建而成
  • Smalltalk方式不会因意外行为而崩溃 - 这是为了适应。如果您向不理解它的对象发送消息,则调试器会出现并邀请您编写该方法...因此它为增量开发提供了出色的支持
  • IDE,您正在编写的应用程序和您的数据都属于同一系统 - 因此您可以更轻松地编写自己的工具和调试工具。
  • Smalltalk中的 TDD工具集仍然比其他语言更好(见下文)。
  • Squeak Smalltalk拥有相当多的尖端设计研究:
    • 形态UI - 您可以熟悉“活力”的概念
    • 海边网络框架 - 了解延续服务器是什么以及它如何完全不同
    • Squeak与OLPC软件(每个孩子一台笔记本电脑)项目有很强的联系 - 并且可能对世界产生重大影响。
    • 找出什么是“特质” ......
    • 使用名为Open Croquet的激进3D沉浸式环境进行游戏。
  • 因为Smalltalk是一种更小,更简单,更一致的语言,有了它自己的内置环境,它就是一个更难以开始教授OOP的地方。走这条路的人最终成为更好的Java,Ruby和C#程序员,因为他们可以学习基本的OOP而不会出现主流语言的混乱。
  • 一些商业Smalltalks拥有令人惊叹的多节点分布式OO数据库环境。我正在考虑宝石。
  • 想要了解Model-View-Controller和Model-View-Presenter之间的区别 - 请看Dolphin Smalltalk ......

今天学习Smalltalk的最重要原因是极端编程和scrum都是在Smalltalk社区中发明的...而且你在Smalltalk中体验的高度交互式编程风格比任何你能做的更简单,更强大和更直接使用Java或C#或Ruby ...并且在您尝试在Smalltalk中进行极端编程之前,您无法真正理解敏捷方法的效果如何。很少有其他语言(无论如何都没有主流语言)具有相似的功能集。

...要真正了解您需要使用SUn的TDD。 JUnit只显示测试失败的位置。 SUnit实际上允许您在测试失败时点击调试器并查看实际对象以及它们如何连接,以便您可以看到,在调试器中生活代码如何失败并在那里修复它。

答案 2 :(得分:20)

是的,Smalltalk非常重要,你应该研究它。为什么?您可以以纯粹,简单的形式理解面向对象的编程。人们忘记的是,Smalltalk-80“蓝皮书”只有大约90页用于语言 - 语言就是这么简单。其他300页讨论了预定义的类层次结构,这是使用单继承的基于类的面向对象语言的设计杰作。您将更深入地了解对象(例如,类是对象,并且它们具有元类,等等到无穷大......除了结被仔细地绑定以保持系统有限)比您从学习中获得的更多混合语言,如Java或C ++。 Smalltalk不仅仅因为它的历史,而且因为它的简单性:

  • 足够简单,因此您可以理解整个语言

  • 显示一个想法(对象就是你所需要的)推到逻辑极端

每个人都有从Smalltalk学到的东西!

答案 3 :(得分:18)

Smalltalk是前两种原始OOP语言之一,另一种是Simula-67。因此,有两个大型系列 - 以方法调用为中心的静态类型模型,由Simula开创(C ++,Java,C#都属于这里),动态类型模型以消息传递为中心,由Smalltalk开创(Python,Ruby属于这里)。

今天,Smalltalk本身并不是特别重要 - 有些人仍然使用它来写东西,但它绝对不是主流。然而,学习它将为您提供有关OOP如何以及为何进化的一些见解。

答案 4 :(得分:11)

我上个月在一次关于Smalltalk的历史和影响的会议上花了大约5分钟的时间。见Image-based development with Smalltalk。对于今天的程序员来说,更为外国的概念之一是“基于图像”的开发。有一些很好的类比,包括DBMS和电子表格。

答案 5 :(得分:8)

是。下载the seaside one-click image,开始使用James Foster中的教程,您至少会学到:

  • 应如何构建Web应用程序
  • 调试应该如何工作

答案 6 :(得分:6)

它不仅是第一个,Smalltalk至今仍然是OO语言设计的典范。后来出现的更流行的语言--C ++,Java,甚至是Objective-C--都具有更原始的面向对象,并且比旧的Smalltalk更具限制性。 Smalltalk拥有无处不在的一流对象,对运行时内省的极大支持,非常自然地使用鸭子打字和闭包,比我在任何非功能语言中看到的更好。我的意思是,我们谈论的是一种没有本机控制结构的语言(如果,同时等),但能够以无缝工作的方式从对象系统中创建它们。这有多酷?

我不推荐Smalltalk进行任何密集的桌面应用程序开发(目前还没有一个可行的实现IMO),但如果你想看看OO是什么意思,可能会选择一些你可以使用的想法在你的应用程序中,Smalltalk是一个很好看的地方。

答案 7 :(得分:6)

我同意其他人的意见。我不确定它本身是否重要,但它是COOL(imho)。

我喜欢语言中没有循环或条件。 If-then-else是发送给布尔对象的消息。 True类型的对象做一件事,False类型的对象做另一件事。 (是,True和False是布尔的子类型,每个都有一个值,分别为true和false)。

它开始有点反直觉,但它确实给你一个非常有趣,深刻的观点,看看OO编程应该如何工作......

答案 8 :(得分:5)

如果您只知道一种面向对象的语言,那么您应该考虑学习第二种,第三种和第四种语言,以便在使用对象进行编程时获得更广泛的视角。学习Smalltalk会扩展你的大脑,因为我们在其他语言中习惯了很多熟悉的概念(例如if-then-else,for(;;),while()等)在Smalltalk中不存在。显然,有些等价物,但Smalltalk做的事情有所不同,了解不同的做事方式总是一个好主意。

祝你好运。

答案 9 :(得分:4)

我刚刚开始重新唤起我对Smalltalk的兴趣,在我看来,Smalltalk有一些引人注目的特别之处:

  • 高效率的发展 环境
  • 内置支持Agile / Extreme 编程方法
  • “纯粹”对象模型
  • 易于使用的图形框架

这些都不会对那些不从事软件开发业务的人特别有用。我第一次看到它是因为我在使用Smalltalk的PC上看到了嵌入式设备的用户界面。这使得用户界面可以非常快速地进行修改和测试,并且在完成后,为嵌入式开发人员提供了比任何文档都精确得多的“可执行规范”。我很惊讶我没有看到这种技术的使用频率远远超过我在过去20年的旅行中所观察到的。

使用Smalltalk作为原型工具是我感兴趣的地方:我认为,鉴于一个新问题,可以在Smalltalk环境中非常快速,轻松地尝试和验证解决它的不同方法,并且一旦找到所需的解决方案应该是相对机械的将它转换为Java / C ++ / C#等等。事实上,对于重复的事​​情,很可能使用Smalltalk为某些其他目标语言的部分解决方案生成代码。

答案 10 :(得分:3)

关于SmallTalk的另一件事是它的校友包括Kent Beck和Ward Cunningham。他们使用SmallTalk的工作产生了automated xUnit testingsoftware design patternsCRC Cards以及其他编入XP / Agile等的实践。因此可以说SmallTalk是现代编程的主要贡献者。景观。

答案 11 :(得分:2)

只有两条评论:

  1. Smalltalk不是“面向对象”,是真实对象,只是环境中的对象和消息。

  2. Smalltalk不是一种语言,是一种具有同名语言的环境,但这里的大部分“神奇”都归功于环境(图像)。