Show HN:Wyzer 编程语言
摘要
Wyzer 是一种新的静态类型、编译型编程语言,通过基于所有权的资源模型集成编排式编程,实现分布式安全。
查看缓存全文
缓存时间: 2026/08/07 14:10
Wyzer-Lang/wyzer
来源:https://github.com/Wyzer-Lang/wyzer
Wyzer 编程语言 WYZERLANG
“简洁不是没有力量,而是不虚张声势的力量。” ~ Atiksh Sharma 随便用这句装逼语录哈。
Wyzer 是一门静态类型、编译型、面向资源的编程语言,通过编排式编程(choreographic programming)实现内置的分布式安全,并采用 Perceus 内存模型
Wyzer 的动机
Rust 保证了进程内的安全性,但它对以下问题无能为力:
- 分布式死锁
- 协议不匹配
- 跨服务正确性
为了解决这个问题,Wyzer 引入了编排式编程的概念,这是为数不多的严肃尝试之一。
欢迎贡献代码,如果你想为这门语言做贡献,请阅读 RESEARCH.md
也欢迎加入我们的 Discord 服务器 :)) https://discord.gg/RhpPhkTrVu
文档
要学习如何用 Wyzer 编程,请查看我们的官方文档:
如何用 Wyzer 编写代码
Wyzer 的设计目标是简单、明确、易读。下面快速看看如何用 Wyzer 写代码。
1. 变量与类型
所有东西都有明确的类型,变量默认是不可变的(不能被修改)。如果你想修改一个变量,必须显式使用 var 而不是 let。你也可以用 const 定义编译期常量。
fn main() {
const MAX: u32 = 100; // 编译期常量
let x: u32 = 10; // 不可修改
var y: u32 = 20; // 可修改
y = y + x;
std::io::println(y);
}
2. 结构体与数据
你可以定义自定义数据结构并直接访问其字段。
struct Point {
x: u32,
y: u32
}
fn main() {
let p: Point = Point { x: 10, y: 20 };
std::io::println(p.x);
}
3. 控制流
Wyzer 支持标准的 if/else、while 和 for 循环。注意循环条件不需要加括号。
fn main() {
let mut i: u32 = 0;
while i < 3 {
std::io::println(i);
i = i + 1;
}
}
4. 错误处理与 match
错误不会被隐藏。可能失败的函数会返回 Result。你使用 match 表达式来安全地处理成功(Ok)和错误(Err)两种情况。注意 match 是一个表达式,如果作为独立语句使用,末尾需要加分号!
fn main() {
let result: Result = Ok(42);
match (result) {
Ok(value) => std::io::println(value),
Err(err_msg) => std::io::println(0)
};
}
FAQ:它是什么、为什么存在、以及真正新在哪里
一份不需要数学的简单指南。用这个来快速解释这个项目。
1. 用一段话概括 Wyzer 是什么
Wyzer 是一门构建在一个核心理念之上的编程语言:大多数难题(比如内存 bug、死锁和网络错误)之所以发生,是因为不清楚谁拥有某个资源。Wyzer 不是用三种不同的工具来修复内存、并发和网络问题,而是对这三者使用同一条所有权规则。
2. 为什么要做一门新语言?
这是一个合理的问题,诚实的回答应该先说明现有方案的优点,而不是它们的缺点。
Rust 证明了在没有垃圾回收器的情况下也能实现安全的内存管理。这很棒,但 Rust 很难学,而且它的规则让一些常见的代码结构难以编写。
Go、Java、C# 和 Python 使用垃圾回收器。这让它们更容易使用,但更慢、更不可预测。这对实时系统或底层系统来说是个问题。
网络编程仍然主要靠手工完成。你写两个程序,然后希望它们能正确通信。当它们不能时,就会出现 bug。
Wyzer 的目标:获得 Rust 的安全性而不需要那么陡峭的学习曲线,并用同一条规则让网络程序也安全。
3. 真正新的东西是什么?
Wyzer 的大部分组件已经存在。新的是把它们组合在一起。
- Perceus 引用计数: 不需要 Rust 的复杂度就能实现快速内存管理。我们从 Koka 和 Lean 4 借鉴了这一点。
- 编排式编程: 编写一条网络规则,为每台计算机生成代码。我们从学术研究中借鉴了这一点。
- 新的是: 我们把编排思想不仅仅用于网络,还用于线程和中断。完全相同的规则证明了内存安全、中断安全和网络安全。
好处:你只需要学一条规则,就能安全地管理内存、线程和网络。
4. 核心设计原则
这些是驱动我们决策的价值观。它们解释了为什么 Wyzer 长这样。
一种写法。 如果同一件事有两种写法,我们就去掉一种。
没有隐藏魔法,但保持简洁。 重要的东西应该在代码中可见,但你不需要写多余的样板代码。
让编译器干活,除非这会让人困惑。 我们希望编译器能自己推断,但在事情变复杂时要求有清晰的规则。
诚实面对未完成的部分。 我们会明确标记未解决的问题,让大家知道哪里还需要努力。
5. 核心语义,用大白话说
这部分是形式化规则的简单地图。先读这个来理解基础。
内存(第 5 节): 你编写不修改数据的函数式代码。在底层,如果一份数据只有一个所有者,编译器会直接在内存中修改它。这使得它像 C 一样快,而且不需要垃圾回收器或生命周期规则。
所有权就是一切(第 3、6、7 节): 唯一一条规则是,一旦你使用了一个资源,就不能再使用它。这适用于内存、网络消息和硬件中断。
安全的网络(第 6 节): 你编写普通函数,类型会显示谁拥有数据。编译器会推导出网络规则并为你检查。这能在代码运行之前就捕获死锁和消息丢失的问题。
没有隐藏的控制流: 没有 async/await 的割裂。错误以标准类型返回,而不是隐藏的异常。
6. 常见问题
“这不就是 Rust 多绕了几步吗?” 不是。我们想要 Rust 的安全性,但不需要那么陡峭的学习曲线。我们在内存方面使用了不同的方法(Perceus),而且 Rust 没有我们的网络功能。
“编排式编程不是已经被学术研究解决了吗?” 数学上是可行的,但它主要用在研究中,而不是真正的语言里。我们想把它带到一门通用编程语言中。
“为什么不直接用 effect handlers / async-await / 垃圾回收器,像其他人那样?” 那些工具解决的是特定问题。Wyzer 是在尝试看能否用同一条规则同时解决内存、线程和网络问题。
“这东西真的会完成并达到生产可用吗?” 说实话,这还处于早期研究阶段。几个大问题还没解决。
“电梯演讲再说一次?” 一条所有权规则管理内存、线程和网络。没有垃圾回收器,没有复杂的借用检查器,也没有网络错误。
AI 协助
AI 提供的帮助
- 使用 AI 生成提交信息
- 使用 AI 进行研究(深入理解编排式编程、Perceus 内存模型等)
- 使用 AI 进行品牌设计,我感谢 AI 为我提供了大量精彩的想法来帮助我设计 Wyzer 的 Logo :)
相似文章
Show HN:Wyrm – 通过触摸解代数,基于开源健全性引擎构建
Wyrm 是一个用 TypeScript 编写的开源符号代数引擎,为 iOS 和 Android 上基于手势的代数应用提供支持。它通过条件重写规则在构建时保证健全性,允许用户通过触摸来解方程。
Show HN: Woxi - 开源的 Mathematica / Wolfram Language 重新实现
Woxi 是一个用 Rust 实现的开源 Wolfram Language 解释器,提供浏览器游乐场、CLI、Jupyter 内核和笔记本编辑器。
Wren 编程语言的性能表现
Wren 官网发布微基准测试,称其运行速度超过标准 Python/Ruby/Lua 解释器,同时仍保持简单的字节码虚拟机,得益于 NaN 标记和固定对象布局。
Hobbes – 一种语言与嵌入式JIT编译器
Hobbes是摩根士丹利开发的一种开源语言、嵌入式JIT编译器和运行时,用于在C++应用程序中进行高效的动态表达式求值、数据存储和分析。
Révo编程语言
Revo 是一种编程语言,具有清晰的数据流、错误即值、编译时执行和基于纤程的并发特性。它使用Zig构建,并提供可选类型和强推断功能。