#circuit #utility #simulation

app reso

Reso:一种视觉像素艺术逻辑电路设计语言

7 个版本

0.0.7 2024年1月20日
0.0.6 2024年1月20日
0.0.3 2023年12月23日

#106 in 数学

Download history 5/week @ 2024-03-29

每月 73 次下载

自定义许可

155KB
1.5K SLoC

Reso -- 一种视觉逻辑电路设计语言

Reso logo

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 的人都可以构建的数字逻辑电路。

依赖关系

~15MB
~93K SLoC