Show HN:Wyzer 编程语言

Hacker News Top 工具

摘要

Wyzer 是一种新的静态类型、编译型编程语言,通过基于所有权的资源模型集成编排式编程,实现分布式安全。

所以我从几天前(或者说几个月前)就开始研究这个项目了,它叫 wyzer(意思是更聪明)。它是一种静态类型、编译型、面向资源的编程语言,通过编排式编程和 perceus 内存模型实现了集成的分布式安全。我开始这个项目的原因是出于对 Rust 的失望,你看,它确实通过严格的类型检查为你的内存提供了安全,但它不能保证的是针对分布式死锁的安全——基本上就是几个独立的节点或服务永久等待彼此持有的资源或消息,形成循环等待。其他的还有跨服务正确性和协议不匹配问题。具体来说,Wyzer 主要致力于在高级编程语言中推广编排式编程的概念,因为这是实际解决这些安全空白的极少数尝试之一。与借用检查器和生命周期不同,wyzer 使用线性/仿射类型和 perceus 引用计数,这在计算上对 LSP 来说也更容易理解<p>经过 5 个月的研究和几周的开发,我即将发布 0.1.0 版本,如果你想为此做出贡献,非常欢迎!
查看原文
查看缓存全文

缓存时间: 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 编程,请查看我们的官方文档:

  1. 简介
  2. 变量与类型
  3. 控制流
  4. 函数与结构体
  5. 内存模型

如何用 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 :)

相似文章

Wren 编程语言的性能表现

Lobsters Hottest

Wren 官网发布微基准测试,称其运行速度超过标准 Python/Ruby/Lua 解释器,同时仍保持简单的字节码虚拟机,得益于 NaN 标记和固定对象布局。

Hobbes – 一种语言与嵌入式JIT编译器

Hacker News Top

Hobbes是摩根士丹利开发的一种开源语言、嵌入式JIT编译器和运行时,用于在C++应用程序中进行高效的动态表达式求值、数据存储和分析。

Révo编程语言

Lobsters Hottest

Revo 是一种编程语言,具有清晰的数据流、错误即值、编译时执行和基于纤程的并发特性。它使用Zig构建,并提供可选类型和强推断功能。