Smalltalk和python之间的区别?

时间:2009-08-12 23:17:31

标签: python smalltalk

我正在研究Smalltalk。它看起来与python非常相似(实际上,相反,python与Smalltalk非常相似),所以我想知道,作为一个蟒蛇爱好者,如果我真的值得我研究它。

除了消息传递之外,Smalltalk和python之间还有哪些值得注意的概念差异可以让我看到新的编程视野?

5 个答案:

答案 0 :(得分:17)

在Python中,诸如if/else之类的“基本”结构,短路布尔运算符和循环是语言本身的一部分。在Smalltalk中,它们都只是消息。从这个意义上讲,虽然Python和Smalltalk都同意“一切都是一个对象”,但Smalltalk更进一步说它还断言“一切都是一条信息”。

[编辑]一些例子。

Smalltalk中的条件声明:

((x > y) and: [x > z])
  ifTrue: [ ... ]
  ifFalse: [ ... ]

请注意and:只是Boolean上的消息(由于将消息>传递给x而产生的),以及{{1}的第二个参数不是简单的表达式,而是一个块,可以实现惰性(即短路)评估。这会生成另一个and:对象,它还支持消息Boolean,将两个块(即lambdas)作为参数,并根据布尔值运行其中一个。

答案 1 :(得分:9)

作为smalltalk的新手,真正让我感到震惊的两件事是基于图像的系统,而且反射无处不在。这两个简单的事实似乎在系统中产生了其他一切:

  • 图像意味着您通过操纵对象来完成所有操作,包括编写和编译代码
  • Reflection允许您检查任何对象的状态。由于类是对象,它们的源是对象,因此您可以检查和操作代码
  • 您可以访问当前的执行上下文,因此您可以查看堆栈,并从那里查看已编译的代码和该代码的来源等等。
  • 堆栈是一个对象,因此您可以将其保存,然后再恢复。宾果,续课!

以上所有内容都以冷静的方式结合在一起:

  • 浏览器可让您探索字面上所有内容的来源,包括Squeak中的VM
  • 您可以进行影响您的直播节目的更改,因此无需重新启动并导航到您正在处理的任何内容
  • 更好的是,当您的程序抛出异常时,您可以调试实时代码。你修复了这个bug,如果它变得不一致就更新状态,然后让你的程序继续运行。
  • 浏览器会告诉您它是否认为您输错了
  • 在类层次结构中上下浏览,或者找出对象响应的消息,或者哪些代码发送给定消息,或者哪些对象可以接收给定消息,这是非常容易的
  • 您可以检查和操纵系统中任何对象的状态
  • 你可以让任何两个对象在字面上切换到带有:的地方,这样可以让你做任何物体之类的疯狂东西,然后懒洋洋地把它从其他地方拉出来,如果它被发送了一条消息。

图像系统和反射使得所有这些对于小游戏者来说都是完全自然和正常的事情大约三十年。

答案 2 :(得分:7)

Smalltalk历史上已经内置了一个令人惊叹的IDE。我已经错过了许多语言的IDE。

Smalltalk也有一个可爱的属性,它通常在一个生活系统。你开始干净并开始修改东西。这基本上是一个对象持久存储系统。话虽如此,这既好又坏。您运行的是系统的一部分,也是您发布的部分内容。在分发之前,系统可以很好地设置。不利的一面是,系统包含您运输的所有内容。你需要非常小心地重新分配包装。

现在,据说,自从我与Smalltalk(约20年)合作以来已经有一段时间了。是的,我知道,那些做数学的人很有趣。 Smalltalk是一种很好的语言,有趣的编程,有趣的学习,但我发现它有点难以运送。

如果你喜欢的话,尽情享受吧。我一直在玩Python并喜欢它。

雅各

答案 3 :(得分:2)

语言方面通常并不重要,许多语言都非常相同,

从我看来,Python和Smalltalk共享OOP理想......但它们的实现和所呈现语言界面的强大功能却大相径庭。

真正的价值在于实现方面的细微差异。看看Self和其他重元语言。

查看语法和直接语义,了解细微差别允许实现执行的操作。

例如:

  

Smalltalk-80中的所有内容都可以在正在运行的程序中进行修改

Python和Smalltalk之间的差异是否允许更深层次的操作?语言如何实现编译器/运行时?

答案 4 :(得分:1)

Smalltalk语言本身非常重要。它包含一小组强大的正交功能,使语言具有高度可扩展性。正如Alan Lovejoy所说: “Smalltalk也很有趣,因为定义和使用域特定语言并不是事后的想法,而是Smalltalk工作的唯一方式。”语言符号至关重要,因为:“所使用的编程符号的表达能力的差异很重要。”有关更多信息,请阅读完整文章here