Rivulet 语言中的源代码艺术
Hacker News 摘要原标题:Source code art in the Rivulet language
Rivulet 是一种流动线条的编程语言,采用半图形字符书写。每条线条并非图示化:其流动并不模拟计算。Rivulet 具有四种类型的线条,每种线条有各自的符号和语法规则,组合在一起形成符号,这些紧凑的代码块能够一起执行。以下是一个完整的 Fibonacci 程序的描述。
状态警告
当前版本为 0.4,基本工作正常的解释器和生成源代码 SVG 文件的工具。命令列表可能需要扩展以提升可用性。
设计理念
Rivulet 是一种基于列表的语言,避免了普通的分支和循环方法。线条从不分叉,也不会有线条未被执行。其书写系统受到迷宫的紧凑性、Anni Albers 的《Meanders》系列以及空间填充算法的启发。其书法特征源自自然语言,并偏向于手写的能力。
数据模型
在 Rivulet 中,数据被组织为相邻单元的列表,默认填充为零。命令可以应用于单个单元或整个列表。命令还可以按列表与列表的方式运行,逐个应用到另一个列表的相应单元。
控制流
Rivulet 程序中的每条线条都在运行;没有 "if" 语句的等价物。如果一个符号导致了不希望的状态,可以回滚该符号及其块(同一层或更高层的所有连续符号),将执行状态设置回到符号(或符号组)触发之前。
语法
Rivulet 的细腻语法可能一开始显得复杂,但随着实践将变得易于阅读和书写。
符号(Glyphs)
符号以标记开始,在左上角表示,以标记结束,在右下角表示。它们必须不直接有垂直字符在其上方或下方出现,否则将被误解为线条。符号主要用于标识 Rivulet 中最小的代码块。
代码行
解释器根据符号编号和行号来引用代码位置。每个符号内的行号在每个符号中重置为 1,且行号在每个连续的素数中编号。
命令和动作
Rivulet 命令用特定字符编写,某些指令复用字符,需依赖上下文来区分。动作符号可以应用于现有数据线条,以选择其它命令进行操作。
特殊线条
问题线条成对出现,提出关于数据状态的问题。如果状态不符合预期,相应的符号及其同级别的连接线会回滚。问题线条是 Rivulet 中唯一退出循环的方式。
本仓库的 Rivulet 项目包含了多种代码示例及其用法,感兴趣的开发者可以进行探索或贡献。