Smalltalk和python之间的区别?

Ste*_*ini 9 python smalltalk

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

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

Pav*_*aev 17

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

[编辑]一些例子.

Smalltalk中的条件声明:

((x > y) and: [x > z])
  ifTrue: [ ... ]
  ifFalse: [ ... ]
Run Code Online (Sandbox Code Playgroud)

注意如何and:只是一条消息Boolean(本身是由于传递消息>而产生的x),而第二个参数and:不是普通表达式,而是一个块,允许进行惰性(即短路)评估.这会产生另一个Boolean对象,它也支持消息ifTrue:ifFalse:,将两个块(即lambdas)作为参数,并根据Boolean的值运行其中一个或另一个.

  • 一切都是可变的 - 一切都是疯狂的......我非常喜欢它. (7认同)
  • 很接近了.`ifTrue:`是布尔值的消息,它将块作为参数. (3认同)
  • 哦......这很酷.所以即使if是一个代码块的消息?大笑...... (2认同)

小智 9

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

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

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

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

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


The*_*lor 7

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

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

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

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

雅各