2个版本
0.1.1 | 2023年8月31日 |
---|---|
0.1.0 | 2023年8月6日 |
#2529 in 神奇豆子
20KB
151 代码行
Stylus SDK
概述
Bf 是一种幽默的、晦涩的编程语言,以其简洁性、难度和能够为最简单的程序生成难以理解的代码而著称。例如,以下是KSab编写的已知最短的Hello World实现。
+[>>>->-[>->----<<<]>>]>.---.>+..+++.>>.<.>>---.<<<.+++.------.<-.>>+.
上面看到的8个符号构成了Bf编程语言的全部。因为它们的操作模拟了一个图灵机,所以Bf可以用来编写任何可计算函数。也就是说,你可以在C、Rust等语言中做到的事情,你同样可以用Bf做到——如果你能想出如何编写它的话!
对于好坏,这个仓库包含了一个Bf到WebAssembly的编译器,这使得Bf程序可以在Arbitrum链上以接近原生的速度运行。符号被解释如下。
操作 | 效果 |
---|---|
> |
将机器头向右移动1个单元格。 |
< |
将机器头向左移动1个单元格。 |
+ |
增加当前单元格中存储的字节。 |
- |
减少当前单元格中存储的字节。 |
. |
将当前单元格的字节附加到EVM返回数据。 |
, |
将calldata的下一个字节读入当前单元格。 |
[ |
如果当前单元格的字节是0,则跳转到匹配的] 。 |
] |
如果当前单元格的字节不是0,则跳转到匹配的[ 。 |
用法
要调用编译器,请运行:
cargo run <input.b> -o <output.wat>
要将 .wat
上传到支持 Stylus 的 Arbitrum 链,请参阅 cargo stylus
。
为什么会有这个东西存在?
虽然看起来只是好玩,但我们希望这个仓库对框架开发者具有教育价值。为新语言创建 Stylus SDK 非常简单,并且使用了在由这个 Bf 编译器生成的 .wat
文件中看到的相同的构建模块。甚至可以使用在 prelude.wat
中看到的导入来部署手写的 .wat
文件;
(module
(import "vm_hooks" "read_args" (func $read_args (param i32 )))
(import "vm_hooks" "write_result" (func $return_data (param i32 i32)))
(func $main (export "user_entrypoint") (param $args_len i32) (result i32)
;; your code here
)
)
只需要一个支持 WebAssembly 的编译器和一些导入,完整列表可以在 这里 找到。下表包括我们基于相同理念构建的官方 SDK。
仓库 | 用例 | 许可协议 |
---|---|---|
Rust SDK | 一切! | Apache 2.0 或 MIT |
C/C++ SDK | 密码学和算法 | Apache 2.0 或 MIT |
Bf SDK | 教育用途 | Apache 2.0 或 MIT |
想要自己写吗?加入我们在 #stylus
频道上的讨论吧!discord!
许可协议
© 2022-2023 Offchain Labs, Inc.
本项目许可协议为以下之一
任选其一。
本项目的 SPDX 许可协议标识符为 MIT OR Apache-2.0
。
依赖项
~5–16MB
~215K SLoC