#错误报告 #汇编 #uxn #编程语言 #uxntal

bin+lib ruxnasm

专注于错误报告的替代 Uxntal 汇编器

4 个版本

0.2.0 2021 年 6 月 13 日
0.1.2 2021 年 6 月 5 日
0.1.1 2021 年 6 月 5 日
0.1.0 2021 年 6 月 5 日

#399 in 编程语言

MIT 许可证

120KB
3K SLoC

ruxnasm

CI crates.io docs.rs

Ruxnasm 是 Uxntal 的汇编器 —— 一种由 Hundred Rabbits 编写的用于 Uxn 堆栈机器的编程语言 [Uxn](https://wiki.xxiivv.com/site/uxn.html)。Ruxnasm 力求成为 Uxnasm 的替代品,具有更易于用户友好的错误报告、警告和有用的提示,让人联想到现代编译器(如 Rust 或 Elm)中的那些。

快速入门

cargo run -- examples/helloworld.tal helloworld.rom
uxncli helloworld.rom

与 Uxnasm 的兼容性

目前,Uxntal 没有官方的语言规范,这意味着它是由它所处理的程序定义的——汇编器。Uxntal 的官方汇编器是 [Uxnasm](https://git.sr.ht/~rabbits/uxn/tree/master/item/src/uxnasm.c),用 ANSI C 编写。Ruxnasm 并不试图成为 Uxnasm 的 1:1 实现;它太有主见而无法做到这一点。相反,它试图定义一个更优雅、更现代的 Uxntal 版本,同时保留用 Uxnasm 考虑编写过的软件。

尽管它们 大多数情况下 是相同的,但有一些程序在 Uxnasm 中有效,在 Ruxnasm 中无效,反之亦然。这意味着 Ruxnasm 定义的语言既不是 Uxnasm 定义的语言的子集,也不是其超集。Ruxnasm 和 Uxnasm 之间已知的所有差异都已在 docs/differences.md 文件中记录,并且随着项目的开发而保持更新。

从命令行与 Uxnasm 交互对 Ruxnasm 来说没有区别——只需在开头添加一个 "r"。

安装

从二进制文件

查看 Ruxnasm 为各种操作系统提供的预构建版本的 发布页面。如果您想获取最新的 Linux、Windows 或 macOS 构建,请查看 操作页面 上最新 CI 工作流程运行的工件。

从源代码

您可以使用Cargo(Rust的包管理器)从源代码构建和安装Ruxnasm。您可以通过安装最新版本的Rust来获取它。以下列出的两种方法都应构建Ruxnasm二进制文件并将其放置在Cargo安装根目录的bin文件夹中(默认为~/.cargo/bin,有关更多信息,请参阅此指南)。

  • 从Git仓库

    要构建和安装最新版本的Ruxnasm,请克隆仓库,使用cd进入它,然后运行

    cargo install --path .
    
  • 从crates.io

    Ruxnasm可以从crates.io包注册处获取。要构建和安装最新版本的Ruxnasm,请在任何地方运行

    cargo install ruxnasm
    

除了是一个命令行工具之外,Ruxnasm还作为Rust编程语言的库提供。它公开了assemble函数,该函数可以将Uxntal程序字符串转换为Uxn二进制文件。

pub fn assemble(source: impl AsRef<str>) -> Result<Vec<u8>>

该库可在crates.io上找到,并可以像这样包含在您的Cargo项目中

[dependencies]
ruxnasm = { version = "*", default-features = false } # Disable the default "bin" feature

然后,您可以在代码中使用它,如下所示

let (binary, _) = ruxnasm::assemble("|0100 #02 #03 ADD").unwrap();

assert_eq!(binary, [0x01, 0x02, 0x01, 0x03, 0x18]);

上面的代码展开结果,但也可以处理assemble函数返回的所有错误和警告(如果有的话)。

许可证

本软件受MIT许可证许可。

有关详细信息,请参阅LICENSE文件。

依赖项

~0–7.5MB
~42K SLoC