Dataization

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

EO(以及我们基于其构建的𝜑-演算)中有三个要素:数据、原子和对象。存在一个数据化函数,将这三者结合在一起,使得EO程序变得活跃起来。以下是它与Java的配合方式,以在线商店为例。

假设我们正在制作一个在线商店,商品将被运送到不同的国家,我们必须根据顾客的位置计算运费。我们创建一个表示运费的抽象对象:

然后,假设我们有一个抽象对象customer-in-mysql,它代表了MySQL数据库中的客户信息。要创建一个特定的客户jeff,我们复制customer-in-mysql,并将客户的ID指定为42

封闭对象jeff是我们正在寻找的客户。我们假设它有country子对象,这是cost-of-shipment所需的。

现在,我们复制cost-of-shipment,然后将其添加到产品价格中,以计算客户需要支付多少。

在这里,x 是一个新的对象,cost-of-shipment 的一个副本。然后,我们从中取出子抽象对象 add 并复制它,将 product.price 对象赋给它作为属性。我们将所创建的副本命名为 total。然后,我们打印出总价格。

所有这些操作都还没有打印出数字。它们都是对象声明。我们声明了一个抽象对象cost-of-shipment和几个封闭的对象:jeffxtotalapp

现在最有趣的部分,我们称之为数据化。这是将对象转化为数据的过程。数据是指没有任何子对象的东西,是计算平台中最简单的元素,EO软件正在编译的地方。你可能认为在上面的例子中,42"US"是数据。但它们不是。它们也是对象,我们可以这样写:

这些对象背后的数据在EO程序的层次上对我们来说是不可见的。数据在42对象内部。只有特定平台的运行时可以通过数据化机制挖掘出来。如果将EO代码编译成Java,你将得到一个名为EOapp的类(派生自app对象),可以像这样进行数据化:

方法take()将获取对象app并尝试要求其将自身转换为数据。对象stdout将重定向此请求到对象sprintf,后者将向对象total提出相同的问题:你有什么数据?对象total是对象x.add。如果我们查看一下x是什么,我们会发现它是我们自己的抽象对象cost-of-shipment的副本,它没有子对象add!然而,它确实有一个子对象@,它是一个”捕捉一切”的对象:对于获取add的请求将会落到这里。

与属性@绑定的对象是if的副本:

它将获取 customer.country.eq 数据并将其转换为布尔数据,然后根据这个数据返回 9.9924.99 中的一个。其中任意一个都有属性 add,将用于构建一个新对象,带有参数 product.price。结果将被 Dataized Java 类使用以继续数据化的过程。最后,两个数字的和将被数据化为一个 Java 浮点数。

customer.country.eq 的数据化在运行时发生,无法在 EO 的层面上看到。对象 eq 被称为原子,因为它是语言的一个原子元素—它必须在 Java 中实现,而不是在 EO 中实现。以上示例中还有其他原子:ifsprintfaddstdoutlength。它们都是在 Java 中实现的。

因此,我们首先通过抽象(声明新的抽象对象)或通过应用(复制抽象对象)构建对象。接下来,我们对其中的一个对象进行数据化,整个对象组合开始”活动”,试图将自身转化为数据。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-11-22 at 09:52

sixnines availability badge   GitHub stars