Smalltalk有什么特别之处?

Ste*_*eve 68 oop programming-languages smalltalk

在每个技术出版物中,以及在本网站上,人们总是将OO语言与Smalltalk进行比较.我的经验是Java:Smalltalk是如此重要以至于我应该学习它吗?

oxb*_*kes 88

Smalltalk是最早的面向对象(OO)语言之一(与其他人一样,如SimulaEiffel),在OO意义上可以说是极其"纯粹":

  • 一切都是对象,对象只通过发送消息进行通信
  • 没有原语(没有ints,booleans等)
  • 无控制结构(无for,while,if等).听起来不可能,但这是真的!
  • 没有静力学

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

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

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

  • 基于"图像"的系统而不是基于文件的系统.
  • 面向对象的数据库

可以说,Java集合API和apache-commons集合 API受Smalltalk的影响很大.

我不会说你应该学习Smalltalk 本身,但熟悉这些功能的基础知识(现在存在于许多其他语言中)肯定对你有利.

请注意,目前这里只有123个关于该语言的问题,其最初的目的是作为一种教育语言(即针对儿童)由其创建者Alan Kay提出.它不再使用得特别多.这并不是说它没有被使用.例如,摩根大通(JPMorgan)有一个大型的异国衍生品风险管理系统.

  • Smalltalk肯定没有先锋关闭 - Lisp在那之前做了很长时间. (8认同)
  • MVC也出生于smalltalk (7认同)
  • 我并不一定意味着"先锋"是第一个*的感觉.我真的只是说它是第一个.你知道,就像美国的先驱者一样; 几千年后他们到了 (3认同)
  • 您可以将"测试驱动开发"添加到开创性列表中. (3认同)
  • 使用重构浏览器,Smalltalk也开创了重构. (3认同)

Daf*_*ees 48

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

  • 第一个IDE
  • 使用鼠标为GUI提供编程支持如果您学习Smalltalk GUI编程,您将真正理解MVC.
  • 由少数强大的想法构建,这些想法非常好地协同工作
  • Smalltalk的方式是不碰撞出的意外行为-这是适应.如果您向不理解它的对象发送消息,调试器会出现并邀请您编写该方法...因此它为增量开发提供了出色的支持.
  • IDE,您正在编写的应用程序和您的数据都属于同一系统 - 因此您可以更轻松地编写自己的工具和调试工具.
  • Smalltalk中TDD工具集仍然优于任何其他语言(见下文).
  • Squeak Smalltalk拥有相当多的尖端设计研究:
    • Morphic环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实际上允许您在测试失败时点击调试器并查看实际对象以及它们如何连接,以便您可以看到,在调试器中生活代码如何失败并在那里修复它.


Nor*_*sey 21

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

  • 很简单,所以你可以理解整个语言

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

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


Pav*_*aev 18

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

今天,Smalltalk本身并不是特别重要 - 有些人仍在用它来写东西,但它绝对不是主流.然而,学习它将为您提供有关OOP演变的方式和原因的一些见解.

  • 我不知道在Smalltalk之后我是否会说OOP进化得很多 - 好吧有Self和Newspeak,但我不会说C++,Java和C#是从Smalltalk演变而来的 - 它们更像是遗传回归...... ;-) (3认同)
  • 那是因为他们没有从Smalltalk演变而来,他们是从Simula演变而来的. (3认同)
  • 我认为Java确实利用了一些Smalltalk的想法 - 首先,它恢复了虚拟机的想法,并且Sun确实聘请了很多旧的Xerox Parc来处理它. (2认同)

Jam*_*ter 11

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


Ste*_*ont 8

是.下载海边一键式图像,开始使用James Foster的教程,你至少会学到:

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


Chu*_*uck 6

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

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

  • @Chuck:我不同意.粗略地浏览一下Simula的报告清楚地表明,C++本质上是C,而Simula是最重要的,C#更是如此.例如,像"protected"和"virtual"这样的关键字,与今天的含义完全相同,来自Simula. (6认同)

Bri*_*tow 6

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

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

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


Bob*_*ica 5

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

祝好运.


tec*_*mad 5

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

  • 高效的开发环境
  • 对敏捷/极限编程方法的内置支持
  • “纯”对象模型
  • 易于使用的图形框架

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

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