从“原子”开始构建面向对象编程语言

3

超越关系中有一种美感。考虑以下几个例子:

  1. 原子由亚原子粒子组成,分子由原子组成,细胞由分子组成,器官由细胞组成,人由器官组成,社会由人组成。
  2. 围棋的复杂策略建立在需要制造具有“两个眼睛”的结构以便生存的基础上 - 然而“两个眼睛”并没有在规则中明确说明,而是围棋非常简单的规则的 emergent property。
  3. 康威生命游戏的图灵完备性可以通过滑翔机飞船的概念来证明,这些概念又基于开和关的概念和非常简单的规则集
在所有情况下,最小的对象集和最小的规则集最终会导致非常复杂的结构。
我的第一个问题:是否可能概述一组小型且极简的编程“对象”和“规则”,以用于构建面向对象编程语言?
现在,聪明的计算机科学家可能会指出规则110的图灵完备性,并说这就是你需要的全部!但这并不是我要寻找的。相反,冒着提出一个定义不清的问题的风险,有哪些最简单、易于理解的概念可以构建成一个面向对象的编程语言?

对于一个不好且不完整的示例,暗示我想要什么,定义三个概念对象:一个参考,一个函数和一个信息容器。然后(第二级?)定义一个结构体,它是通过引用其他信息文件夹来保存其他信息的信息容器。一种基本的(第三级?)将使用对函数的引用增强结构,但必须构建其他结构来处理私有与公共函数的概念。最终,我们应该得到一个完全基于基本概念构建的面向对象编程语言,没有任何地方使用机器代码硬编码优化或语法盐。理想情况下,最终结果仍然是有吸引力和可读性的代码。

我的第二个问题:是否已经有任何面向对象编程语言接近这一点了?


这已经做过了(http://goo.gl/9RHP4),不止一次。我的一位教授创建了一种语言,从0/1的布尔代数开始定义了所有离散数学;如果您感兴趣,我可以找到一个参考资料。 - Apalala
@Apalala 如果找到参考资料不太困难的话,我会很感兴趣。但是不要花太多时间。你给了我一个Lisp的参考资料。我在想Lisp是否会在这次对话中出现。 - JnBrymn
Berryman,我找到了这个参考资料。悖论在于,要定义一种语言,你必须使用某种语言来定义它。该参考资料使用谓词逻辑,所以我认为你可能不感兴趣。 - Apalala
如果这是一个网络参考,我仍然会感兴趣。我预计需要一种语言(如谓词逻辑)来描述我在这里寻找的语言。是否有可能绕过这个问题呢?很可能不行! - JnBrymn
4个回答

1

io 可能是最接近你所寻找的语言。


乍一看,它看起来很有趣且简单。 - JnBrymn

1

原型

IO 语言参考提供了一个很好的提示 - 面向对象编程最简单的方法似乎是 基于原型的编程。你所需要的只是 关联数组一级函数

由于许多数据结构,包括字典,都可以用函数实现 来表示, 我们很快就会涉及到一些语法糖和λ演算,它涵盖了整个图灵完备的计算模型。


0

有趣的问题,但我不确定它是否合理。

考虑到在计算机科学中,1和0是我们的原子。它们是严格不可分割的。它们的不同组合形成了具有各种惊人属性的程序。但是,用1和0来编写程序并不合适,因为抽象级别太低。

我认为你的语言会遇到同样的问题。如果它足够灵活,可以构建任何东西,那么它将无法使用;如果它不够灵活,它将无法满足您的要求。


任何以0和1编写的内容都只能作为我们最感兴趣的想法和概念的序列化。因此,也许我们可以通过说在构建这种语言时,我们只能谈论概念而不是实现来超越这一点。在我们定义了基本公理并将它们构建成面向对象的语言之后,我们可以回过头来谈论实现基本概念。 - 最终,也许你是对的。我不确定问题是否已经完全定义清楚。 - JnBrymn

0

Smalltalk是建立在非常有限的原语之上的,但OO范式在那里是原子的。理论上,您可以在基础如SK逻辑或λ演算一样简单的基础上构建任意复杂的语言。 OO功能并没有什么不同,它们可以被减少到更原始的集合。在原始Lisp宏之上的任何OO系统都可以是一个很好的例子。

更新:并且要查看术语重写系统,这是一种在更简单的事物之上定义复杂语义的强大技术。

我还建议阅读一本书http://www.cambridge.org/gb/knowledge/isbn/item1132720/?site_locale=en_GB


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接