"widely" 使用纯面向对象的语言应该是什么样的?

What should a purely object-oriented language look like to be "widely" used?

我知道的最面向对象的语言是Smalltalk。它与其他语言相比的独特之处在于将一切定义为对象。

然而(如果我们不考虑历史事件),难道不是这种特殊性使得它成为比大多数其他面向对象语言(Java、C++、Python, ...)?

现在最常用的面向对象语言也不完全是这样,所以学起来还是比较容易的(如果不考虑范式的话,和C-like差别不大),使用外部元素(API、C 库、DLL 等),或使用 classes 创建您自己的对象(我们将进一步讨论面向 class 的编程)。

所以我的印象是大多数面向对象的语言都不遵循原始 OOP 的 "philosophy"(我错了吗?)。

然后我想知道一种纯面向对象的语言是否可以像该范式中的大多数语言一样被广泛使用,以及使这种语言不脱离其环境的特征应该是什么(例如,无法在 Smalltalk 中使用 C 库)?

在现代 Smalltalks 中与 C 接口并不难。还有其他纯 OO 语言(Erlang、CLOS、Scala 等等),所以我认为纯度不是问题。

难点在于:Smalltalk 不仅仅是一种语言。语法是次要的。

Smalltalk 的卓越生产力来自于它是一个实时对象环境。您通过在内存中创建 class 个对象,向其中添加方法对象,然后创建实例,并迭代地重塑 class 个对象和实例来进行编程,直到您拥有一个可以执行您想要的操作的对象集合。这些对象的二进制快照存储在图像中。要稍后再次使用它们,将恢复快照。

源代码本身是次要的,它只是一个操作对象的接口。您输入的用于定义 class 的源代码甚至没有存储,class 对象会在需要时生成它。同样,方法的源代码只是为了保留格式、注释和变量名而保留,行为的主要定义是方法对象。

这使得它很难与其他语言进行比较。对于认为文本文件中的源代码是编程本质的主流程序员来说,这感觉非常陌生。恕我直言,这是今天没有更广泛采用 Smalltalk 的主要因素。