Skip to content

Commit

Permalink
[docs] 反应网编程 -- 总结
Browse files Browse the repository at this point in the history
  • Loading branch information
xieyuheng committed Sep 5, 2023
1 parent f6c0ef7 commit d8e5402
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 3 deletions.
2 changes: 0 additions & 2 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# articles

[docs] 反应网编程 -- 总结

[docs] translate the article -- section #2
[docs] translate the article -- section #3
[docs] translate the article -- section #4
Expand Down
57 changes: 56 additions & 1 deletion docs/articles/反应网编程.md
Original file line number Diff line number Diff line change
Expand Up @@ -983,4 +983,59 @@ diff_append @run $result

# 13

TODO 总结。
反应网介绍完了。

下面我们回顾一下,再展望一下。

## 并行计算

这个计算模型确实有趣,在其中任何一步计算都可以相互独立地进行,
因此非常适合用并行计算的方式来实现。

## 非线性计算模型的语法

用栈与后缀表达式来构造非线性的网,也算是一种很简洁的语法。

其实对于反应网这样的,基于图论的计算模型来说,图本身才是语法。
但是图是非线性的,为了用线性的文本去描述图,
我们使用栈和后缀表达式来构造图。

这样,用于构造图的语言,其实就成了反应网这个语言下面一层的语言。
把这个语言本身视为程序语言,也是图灵完备的。

这种想法不单单能够用来构造图,为基于图论的计算模型提供语法,
也可以用来构造更复杂的非线性对象,比如图论在高维度的推广
-- 胞腔复形 [Cell complex](https://zh.wikipedia.org/wiki/CW%E5%A4%8D%E5%BD%A2)
假使我们有一个基于胞腔复形的新的计算模型,
那么用栈与后缀表达式来为计算模型提供语法的方案依然适用。

# 类型系统

另外我们的语言也有类型系统,类型检查的过程,其实就是运行这个底层语言的过程,
只要在连接节点的时候,检查两个接口的类型是否匹配就可以了。

在我们这个语言的类型系统中,类型的参数必须是类型,
但是其实也可以想象,让类型的参数也可以是任意的值,
即所谓的依赖类型 [Dependent type](https://en.wikipedia.org/wiki/Dependent_type)

此时我们需要判断两个类型是否匹配就更困难了,
因为需要判断两个可能带有任意计算的值是否相等。

在一般的计算模型,比如 Lambda 演算中,
实现这种判断非常困难,但是在反应网中,
实现这种判断是相对简单的,
因为只要判断经过所有可能的反应之后,
两个指定了一个节点的图是否同构。

# 成为实用的程序语言

在纯粹的反应网中,数据只有点和边构成的图,
想要编码自然数都要用结绳计数,
在很多实用场景下,这显然是不实用的。

但是我们的语言已经分成了两层,
上面一层是纯粹的反应网,
底下一层栈与后缀表达式的通用程序语言。
通过扩展这个底层语言,我们就可以让整个语言变成一个实用的语言。

预知具体设计如何,且看我下回项目之分解。

0 comments on commit d8e5402

Please sign in to comment.