Smalltalk和python之间的区别?

Smalltalk和python之间的区别?,python,smalltalk,Python,Smalltalk,我现在正在学习闲聊。它看起来非常类似于python(事实上,相反,python非常类似于Smalltalk),所以作为一个python爱好者,我想知道它是否真的值得我研究 除了消息传递之外,Smalltalk和python之间还有哪些值得注意的概念上的差异,可以让我看到新的编程视野?在python中,“基本”构造,如if/else、短路布尔运算符和循环,都是语言本身的一部分。在Smalltalk中,它们都只是信息。从这个意义上说,虽然Python和Smalltalk都同意“一切都是对象”,但Sm

我现在正在学习闲聊。它看起来非常类似于python(事实上,相反,python非常类似于Smalltalk),所以作为一个python爱好者,我想知道它是否真的值得我研究

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

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

[编辑]一些例子

Smalltalk中的条件语句:

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

请注意,
和:
只是
布尔值上的一条消息(它本身是通过将消息
传递给
x
而产生的),并且,
和:
的第二个参数不是一个简单的表达式,而是一个块,支持惰性(即短路)计算。这将生成另一个
布尔对象,该对象还支持消息
ifTrue:ifFalse:
,将另外两个块(即lambda)作为参数,并根据布尔值运行其中一个或另一个。

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

Smalltalk还有一个可爱的特性,那就是它通常存在于生活系统中。你开始清理并开始修改东西。这基本上是一个对象持久存储系统。尽管如此,这既是好的也是坏的。您运行的是您系统的一部分,也是您发送的一部分。该系统在发布之前可以很好地进行设置。不利的一面是,系统将您运行的所有内容都作为您发送的内容的一部分。您需要非常小心地包装以便重新分发

话虽如此,我已经有一段时间没有和Smalltalk合作了(大约20年)。是的,我知道,对于那些做数学的人来说,这是一段快乐的时光。Smalltalk是一种很好的语言,编程很有趣,学习也很有趣,但我发现把东西放进去有点难

如果你喜欢玩它,就享受它。我一直在玩Python,并且很喜欢它


雅各布

语言方面通常并不那么重要,许多语言都很相似

在我看来,Python和Smalltalk共享OOP理念。。。但是,它们在实现和呈现的语言界面中的功能上有很大的不同

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

从语法和直接语义的角度来看,细微的差异允许实现做什么

例如:

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


Python和Smalltalk之间有什么区别,允许更深入的管理(如果有的话)?该语言是如何实现编译器/运行时的?

作为smalltalk的新手,真正打动我的两件事是基于图像的系统,反射无处不在。这两个简单的事实似乎导致了系统中其他一切的冷却:

  • 图像意味着您可以通过操作对象来完成所有操作,包括编写和编译代码
  • 反射允许您检查任何对象的状态。因为类是对象,它们的源是对象,所以可以检查和操作代码
  • 您可以访问当前的执行上下文,因此可以查看堆栈,并从中查看已编译代码和该代码的源代码等等
  • 堆栈是一个对象,因此您可以保存它,然后稍后继续。宾果,继续
上述所有因素开始以冷静的方式结合在一起:

  • 浏览器可以让你探索一切事物的来源,包括Squeak中的VM
  • 您可以进行影响live程序的更改,因此无需重新启动并导航到您正在处理的任何内容
  • 更好的是,当程序抛出异常时,您可以调试实时代码。修复错误,如果状态不一致,则更新状态,然后让程序继续
  • 浏览器会告诉你是否认为你输入了错别字
  • 在类层次结构上下浏览,或者找出对象响应什么消息,或者哪个代码发送给定消息,或者哪些对象可以接收给定消息,都非常容易
  • 您可以检查和操作系统中任何对象的状态
  • 您可以使用been:,让任意两个对象真正地交换位置,这让您可以做一些疯狂的事情,比如删除任何对象,然后在发送消息时从其他位置懒洋洋地将其拉入

三十年来,图像系统和反射使所有这些对于一个说小话的人来说都是非常自然和正常的事情。

说小话的语言本身非常重要。它包含一小部分功能强大的正交特性,使语言具有高度可扩展性。正如艾伦·洛夫乔伊所说:
“Smalltalk也很有趣,因为定义和使用特定于领域的语言不是事后才想到的,这是Smalltalk工作的唯一方式。”语言符号非常重要,因为:“所使用的编程符号的表达能力的差异确实很重要。”更多信息,阅读全文。

everything-is-a-mutable-everything meta madness。。。我很喜欢。看看观点研究。。。那会让你大吃一惊的,非常接近
ifTrue:
是一条以块为参数的布尔消息。离题问题:您使用什么来运行smalltalk?几年前我发现的唯一的东西就是我不太喜欢的吱吱声。你在用什么