问题 什么是一些最“纯粹”的面向对象语言? [关闭]


最近对Smalltalk的介绍启发了我对'纯'面向对象风格的应用和好处。我以前在Ruby中看到过这种优点,尽管存在非面向对象 ifunless 等等构造似乎没有把东西带到一路。

纯粹在这里,我说的是“一切都是一个对象”(包括通过块或类似的东西)和没有程序风格的流控制,而是在布尔和集合上使用流控制方法。

然而,即使在像Smalltalk这样的语言中,有些东西也很突出,因为它们不是面向对象的。例如,如果不使用特殊语法(:=而不是'is:'或类似方法)进行变量赋值似乎不可能,并且从函数返回值似乎需要^运算符,它似乎不属于'对任何物体。

有没有更进一步的语言?


9422
2017-08-29 18:23


起源

纯度有什么好处?纯度使Haskell具有比其他函数语言高得多的学习曲线,因为从程序的角度来看,monads很难理解。 - Chris Lutz
@Chris:是的,但monad是 真棒 一旦你得到它们。另一方面,这个问题看起来好像携带纯净的东西......当然,你可以删除返回值,而是要求那种通信通过对象状态(调用一个方法,它什么都没有,然后使用 self.result),但有一个原因,我们程序员通常会尽量保持一切尽可能小的范围。另外,它会破坏方法链,因为没有返回值,除非你将一些对象属性定义为该值,但我们又回到了魔法。而这样的例子不胜枚举。
我完全认识到,在这方面的纯度可以使事情变得非常冗长并且可能不具有高效性,但是在具有非常小且一致的规则集的语言中也有显着的好处。也就是说,我喜欢找到一种将事情发挥到极致的语言,即使只是为了一个好东西的好例子。 - donalbain
为什么你认为if语句是“非面向对象的”?你需要if语句,它与面向对象无关。 - Ed S.
您确实需要流控制,但过程if语句不是实现此目的的唯一方法。例如,在Smalltalk中你可以改为:condition ifTrue:[// true block] ifFalse:[// false block]其中condition是一个Boolean对象。 - donalbain


答案:


很长一段时间Smalltalker I(与此处的许多其他答案相比)了解你所追求的是什么 - 并且“自我”语言确实更进一步,至少在分配方面。没有自我编程我不能进一步评论它。另一种类似于self的新语言是Slate,也是原型,也使用消息发送进行分配。


8
2017-08-29 19:13





Eiffel,Smalltalk和Ruby http://www.jvoegele.com/software/langcomp.html


2
2017-08-29 18:30



Smalltalk在这个问题中被讨论并被驳回。 Ruby比Smalltalk更具混合性(例如,它具有诸如的功能特性 call/cc)。请阅读问题。
这个链接实际上是一个很好的资源。 - donalbain
它十年前是一个很好的资源。从2003年开始,Java就有了泛型。 - fdreger
@delnan: call/cc 在任何直接暴露调用堆栈的环境中都不需要,就像Squeak和Pharo那样。和 call/cc 无论如何,这是一个坏主意:请继续部分延续。 - Frank Shearar