Rivulet 语言中的源代码艺术

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 项目包含了多种代码示例及其用法,感兴趣的开发者可以进行探索或贡献。


原文:https://github.com/rottytooth/Rivulet

评论:https://news.ycombinator.com/item?id=43492652

Report Page