7 个版本
0.0.7 | 2024年1月20日 |
---|---|
0.0.6 | 2024年1月20日 |
0.0.3 | 2023年12月23日 |
#106 in 数学
每月 73 次下载
155KB
1.5K SLoC
Reso -- 一种视觉逻辑电路设计语言
Reso 是一种视觉电路设计语言,旨在让任何能绘制像素艺术的人创建可执行逻辑电路,灵感来自红石和康威生命游戏。
安装和使用
Reso 位于 crates.io,可以使用 cargo
安装
# Compile Reso from source
cargo install reso
# Run 16 simulation steps on `reso_logo.png`, outputting to `out_xx.png`.
reso -input reso_logo.png -output out_ -numiter 16 -verbose
或者,您可以从 GitHub 克隆 Reso 或从 GitLab 克隆
# Compile Reso from source
git clone [email protected]:resolang/reso.git
cd reso
# Run 16 simulation steps on `reso_logo.png`, outputting to `out_xx.png`.
cargo run --release -- -input reso_logo.png -output out_ -numiter 16 -verbose
十色调板
有十种语法相关的颜色会被编译,其他 16777206 种颜色会被忽略。色调板是 Reso 的一个重要部分!一个区域由其构成的颜色定义。
颜色 | 含义 | 十六进制代码 | RGB | ASCII |
---|---|---|---|---|
深橙色 | 橙色电线(关闭) | #804000 |
(128, 64, 0) |
o |
亮橙色 | 橙色电线(开启) | #ff8000 |
(255, 128, 0) |
O |
深蓝宝石色 | 蓝宝石电线(关闭) | #004080 |
( 0, 64, 128) |
s |
亮蓝宝石色 | 蓝宝石电线(开启) | #0080ff |
( 0, 128, 255) |
S |
深黄绿色 | 黄绿色电线(关闭) | #408000 |
(64, 128, 0) |
l |
亮黄绿色 | 黄绿色电线(开启) | #80ff00 |
(128, 255, 0) |
L |
深青色 | AND 逻辑节点 | #008040 |
( 0, 128, 64) |
& |
亮青色 | XOR 逻辑节点 | #00ff80 |
( 0, 255, 128) |
^ |
深紫色 | 输入(电线到节点) | #400080 |
( 64, 0, 128) |
+ |
亮紫色 | 输出(节点到电线) | #8000ff |
(128, 0, 255) |
= |
为了与新功能保持向后兼容,我们预留了总共 48 种颜色。(这是惯例,不是由 Reso 模拟器强制执行的。)
程序运行的简要说明: 电线 将它们的信号通过 输入节点 推送。有三种不同颜色的电线(橙色、蓝宝石色和黄绿色)。输入节点将这些信号传递给 逻辑节点 和 输出节点。逻辑节点用于计算每个输入信号的 'AND' 或 'XOR',并将这些推送到 输出节点。输出节点作为一个大型的 OR 门,将新的信号推送到电线。
不同电线的颜色没有任何意义。它们的存在是为了在二维环面上更容易布线,并更容易跟踪电线的含义。
预留的 48 种颜色调板
以下是我们认为“预留”的完整颜色调板。其他颜色是“空白”,即不会具有任何语义意义。
色调 | 饱和度(1) | 暗色调(2) | 亮色调(3) | 不饱和色调(4) |
---|---|---|---|---|
红色(R) | #ff0000 |
#800000 |
#ff8080 |
#804040 |
黄色 (Y) | #ffff00 |
#808000 |
#ffff80 |
#808040 |
绿色 (G) | #00ff00 |
#008000 |
#80ff80 |
#408040 |
青色 (C) | #00ffff |
#008080 |
#80ffff |
#408080 |
蓝色 (B) | #0000ff |
#000080 |
#8080ff |
#404080 |
洋红色 (M) | #ff00ff |
#800080 |
#ff80ff |
#804080 |
橙色 (O) | #ff8000 |
#804000 |
#ffc080 |
#806040 |
黄绿色 (L) | #80ff00 |
#408000 |
#c0ff80 |
#608040 |
水绿色 (T) | #00ff80 |
#008040 |
#80ffc0 |
#408060 |
蓝宝石 (S) | #0080ff |
#004080 |
#80c0ff |
#406080 |
紫色 (P) | #8000ff |
#400080 |
#c080ff |
#604080 |
紫罗兰 (V) | #ff0080 |
#800040 |
#ff80c0 |
#804060 |
(注意:请勿直接从网页浏览器中采样!它们的颜色渲染并不总是可靠的。)
趣闻
"Reso"既指电路描述语言,也指模拟器。
Reso不是一个细胞自动机,因为细胞区域会更新相邻的区域,这使得它们具有无限的范围,而细胞自动机在有限的邻域内操作。
Reso定义了一个数字逻辑电路图。也就是说,视觉语言被用来定义一个逻辑图。
Reso被称为"视觉"而不是"图形",因为说"视觉语言被编译成图"比说"图形语言被编译成图"更不容易混淆。
历史
2015年,我在UConn学习数字逻辑设计课程,并提出了Reso的初步草图。这门课程揭开了我多年前看到的神奇Minecraft红石电脑的面纱。我在2017年将这个想法作为毕业设计项目提出,但被拒绝了。
2018年初,我实现了一个自定义的三种物种的生命游戏和一个类似于Brian's Brain的三种物种的细胞自动机。实现这些让我在网格上工作以实现Reso有了足够的经验。
因此,我最终在2018年夏天用Python实现了Reso。您可以在这里看到原始的Python实现。今年夏天,我尝试学习Rust,打算重新实现Reso,但并没有走得太远。
2021年,我重新设计了Reso,更新了调色板和标志,并为2021年BangBangCon (!!Con)的演示清理了代码。
2022年,ashirviskas
实现了一个Rust版本,但我坦白说我并不了解足够的Rust来理解它!我回到了自己的实现。
2023年初,我真正开始写Rust。在编写Phantasm,一种幻想汇编语言时,我学到了很多。
在这整个过程中,Reso一直在我的脑海中发酵,我意识到可以做出许多改进。因此,当我于2023年底在Rust中重新实现Reso时,我进行了彻底的改革,与原始Python源代码的翻译非常少。
说实话,我并不是很擅长Rust。如果你认为自己知道得更好,我将非常欢迎改进和批评!
相关和类似的项目
我不是第一个想出可执行、绘制电路的人。
- 如上所述,
ashirviskas
也实现了一个Rust版本! - 各种细胞自动机都是图灵完备的,可以用来构建处理器。
- 康威生命游戏 -- 一个图灵完备的零玩家游戏。迄今为止最受欢迎的细胞自动机。愿约翰·康威安息。
- 线世界 -- 另一个易于实现逻辑电路的细胞自动机。
- Brian's Brain -- 与上一个类似的细胞自动机。
- 位图逻辑模拟器 -- 我不确定它是怎么工作的,但可以去看看!这是一个类似的想法。
- 图灵画笔 和 涂鸦代码,它们有“可涂鸦逻辑电路”的类似想法。
- 有线逻辑,类似于线世界,在图像中模拟电路。
- 许多游戏
- Minecraft 尤其是用于 红石,这是一种游戏内资源,可以让你构建电路。
- Zacktronics,因其游戏着重于计算而闻名。
- Hempuli 是我最喜欢的游戏开发者之一,看到他们在 Baba Is You 上的开发,让我在这件事上保持正确的思路。
- 这个浏览器视频游戏 让你构建电路并解决问题。
类似名称的项目
Reso 受到红石、esolangs 和 Python 的影响。目标是创建任何可以使用 MS Paint 的人都可以构建的数字逻辑电路。
- 房地产标准组织,这与此完全无关。
- 18kimn/Reso,一个无关的项目,将 R 转换为一种异构语言。
依赖关系
~15MB
~93K SLoC