我正在研究Smalltalk。它看起来与python非常相似(实际上,相反,python与Smalltalk非常相似),所以我想知道,作为一个蟒蛇爱好者,如果我真的值得我研究它。
除了消息传递之外,Smalltalk和python之间还有哪些值得注意的概念差异可以让我看到新的编程视野?
答案 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的新手,真正让我感到震惊的两件事是基于图像的系统,而且反射无处不在。这两个简单的事实似乎在系统中产生了其他一切:
以上所有内容都以冷静的方式结合在一起:
图像系统和反射使得所有这些对于小游戏者来说都是完全自然和正常的事情大约三十年。
答案 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。