代码为何不只在 1D 空间书写?

Spatial languages: Writing code in 2D

代码为何不只在 1D 空间书写?

我们习惯了代码从左到右的 1D 线性表达,但如果解锁 Y 轴会怎样?作者提出了一种 Spatial languages 概念,允许在 2D 空间编写代码。通过引入自定义的 `andFlip` 算子,展示了如何利用垂直布局处理三目运算和状态翻转。文章以自动鸡舍门控和量子计算中的 `CCCX` 门为例,演示了如何在 2D 表达式中优雅地实现变量重置与垃圾回收。这种写法不仅让数据流向更直观,还能在单行 2D 表达式中构建完整的 3-bit adder,同时保持中间变量的纯净。这不仅是语法的炫技,更是对编程空间维度的重新想象。

一直以来,我们都在 1D 空间中编写表达式,但如果我们解锁了额外的维度,会发生什么?
  1. jerf

    “一直以来我们都在一维空间里写表达式,但如果解锁了额外维度会发生什么?”

    文本是 n 维工作空间的序列化形式。“N 维”据我所知没有正式定义,但其主要特征是可以在任何地方突然出现一个新维度。如果你对此感兴趣想深入了解,可以看我之前的评论:https://news.ycombinator.com/item?id=35096647

    传统的文本语言可以表示那里提到的所有内容,而二维布局几乎从一开始就难以表示那些文本布局可以轻松表示的东西。

    它仍然可以作为一个“换个角度看世界”的练习,但这与“解放你的思想”恰恰相反……它实际上是进入了一个相当小的功能子集,尽管这个子集很不寻常,然后看看即便如此你还能做到什么。与其说是“解锁了一个新维度”,不如说是抛弃了其中的 n-2 个维度。只要使用一段时间,你就会发现这一点,因为在这种格式下,即使是表示非常简单的算法也会是一场持续的挣扎。

    我发这条评论主要是出于程序员对文本产生的“熟悉导致轻视”效应。我们使用文本是有原因的,这并非缺乏想象力或固步自封……它实际上是一种极其丰富且强大的格式,任何替代方案要想超越它都面临严峻挑战,因为它拥有惊人的组合能力……

  2. dahart

    这挺可爱的,玩玩也无妨,挺有趣,但不知为何,它把自己看得太严肃了。我为我的消极态度道歉,但要说“震撼我的大脑”?不,完全不是。文章结尾试图进行的辩解对我来说并不令人信服,反而显得矫揉造作;所谓的 Sapir-Whorf 假说(根据链接所述,这是个误称)是关于词汇和概念的,而不是关于布局的。这篇文章没有考虑如何表达或阅读二维代码,甚至没有思考为什么文本通常是一维的。语言之所以在一维中表达,是因为时间。我们无法用二维说话,因此我们也不写二维代码。我们确实经常将解析树可视化为树(二维图片),但这篇文章并未提及。此外,文章也没有提及尝试编写、编辑和维护二维代码的巨大弊端,以及我们其实已经有在 1D 中编写 3 个及以上参数函数的好方法。

    吹毛求疵一下——andFlip 函数浪费了整个维度去画不必要的线,还毫无必要地修改了输入参数(恶心!),而且毫无理由地将 3 个参数作为一个数组传入。

    更好的写法是:andFlip = lambda a,b,c : not c if (a and b) else c

    但这其实只是一个普通的 2 参数三元运算符,它对 a 或 b 单独没有任何有趣的处理,而是将它们视为一个整体,所以我认为这甚至不应该是一个函数。

  3. cavoirom

    本着同样的精神,不妨看看 Orca:https://100r.co/site/orca.html

    它用于创作歌曲。你可以在链接的页面中查看演示。

同日更多故事

2026-07-25