网易首页 > 网易号 > 正文 申请入驻

新语言Lisette把Go和Rust焊在一起:编译期抓空指针

0
分享至

一门新语言把Rust的语法糖塞进Go的运行时,承诺编译期消灭空指针,同时保持Go级别的垃圾回收效率。GitHub上刚放出来两周,Star数破3400,Issue区吵翻了天。

这相当于给法拉利装了个自动驾驶——既要操控感,又要省心。

Lisette的作者叫Austin,前Google SRE,干了八年基础设施。他在README里写得很直白:「我受够了Go的if err != nil,也受够了Rust的学习曲线。」于是自己造了个轮子,语法像Rust,跑在Go runtime上,能直接import Go的标准库。

「没有nil」是怎么做到的

Go的nil是runtime panic的主要来源之一。Lisette的做法是代数数据类型(ADT)+ 模式匹配,把「值不存在」变成编译期必须处理的case。

看这段代码:

fn load_config(path: string) -> Result {
let file = os.Open(path)?
defer file.Close()
let data = io.ReadAll(file)?
parse_yaml(data)
}

问号运算符?是Rust的语法,遇到error直接向上传播。但底层调用的是os.Open,这是Go的标准库。Lisette在编译期把Result类型展开,生成Go能理解的代码,runtime层面没有任何额外开销。

换句话说,你写的是Rust风格,跑的是Go机器码。

模式匹配让nil彻底消失。enum Message可以是Ready、Write(string)或者Move { x: int, y: int },match语句强制你处理所有分支。编译器不会放过任何一个未处理的case,这比Go的interface{}类型断言安全得多。

Go的runtime,Rust的type system

Hindley-Milner类型系统是Lisette的另一张牌。这套系统能从代码里自动推导出最通用的类型,写泛型时不用像Go 1.18之前那样手写interface{}。

看max函数的实现:

fn max(metrics: Slice) -> T {
metrics.fold(metrics[0], |a, b|
if a.value() > b.value() { a } else { b }
)
}

T: Metric是类型约束,表示T必须实现Metric接口。fold是高阶函数,|a, b|是lambda语法。Go 1.18的泛型也能写类似逻辑,但类型推导和错误信息的友好度差了一截。

更关键的是不变性(immutable by default)。let声明的变量默认不可变,想改得用mut显式标记。这对并发编程是质的提升——Go的race detector是runtime工具,Lisette直接在编译期拒绝数据竞争。

import "go:fmt" 的野心

Lisette最取巧的设计是生态兼容。import "go:fmt"不是重新实现,而是直接链接Go的编译产物。这意味着:

• 所有Go第三方库开箱即用
• 调用Go函数没有FFI开销
• 部署方式和Go二进制完全一样

作者Austin在讨论区回复过一个问题:「为什么不直接改进Go?」他的回答是:「Go的兼容性承诺是护城河,也是牢笼。我想证明另一种语法和类型系统能跑在同一套runtime上。」

这有点像Kotlin之于JVM,或者TypeScript之于JavaScript。但Lisette的绑定更深——它不是转译成Go代码,而是生成Go的SSA中间表示,再交给Go的编译器后端。

技术债和风险都在这儿。

Go的runtime升级时,Lisette必须跟进。Go 1.22的loopvar语义变更就差点让Lisette的闭包捕获逻辑出bug。Austin在v0.3.1的release note里写:「跟踪Go的runtime变化比写编译器还累。」

社区的分裂

GitHub Issue #47的标题很典型:「Please don't become another ReasonML」。ReasonML也是把OCaml的语法套在JavaScript生态上,最后两头不讨好——OCaml社区觉得它不纯粹,JS社区觉得它没必要。

Lisette面临同样的质疑。Rust开发者@pietroalbini评论:「如果我要学Hindley-Milner,为什么不直接用Rust?」Go开发者@davecheney的回复被点了180多个赞:「我写了十年Go,Lisette让我第一次觉得错误处理可以不那么丑。」

争议最大的是defer的语义。Lisette继承了Go的defer,但Rust社区更习惯RAII和Drop trait。Austin的妥协方案是:defer在函数作用域生效,同时支持Rust风格的显式drop调用,两者混用时会报警告。

这种「既要又要」的设计哲学贯穿全书。if let和let else同时存在,前者是Rust语法,后者是Lisette为了对齐Go开发者的习惯加的糖。链式调用.filter().map().unwrap_or()写起来像Rust,但unwrap_or的默认值求值策略是Go的惰性求值。

性能数字和真实场景

项目自带的benchmark对比了Lisette和原生Go的HTTP handler。在同等的JSON序列化场景下,Lisette生成的二进制体积大12%,P99延迟高8%,但内存分配次数少34%。

Austin的解释是:Lisette的逃逸分析更激进,减少了堆分配,但Go的编译器优化对某些模式更成熟。这12%的体积开销来自运行时类型信息的保留,为了支持模式匹配的完备性检查。

一个有趣的细节:Lisette的编译速度比Rust快得多,接近Go的水平。因为它跳过了LLVM,直接生成Go的SSA。在M3 Max上编译10万行代码,Lisette用1.2秒,Rust用14秒,Go用0.8秒。

但编译器本身的稳定性是另一回事。v0.3.2修复了17个ICE(internal compiler error),其中3个会导致生成的Go代码编译失败。Austin在Discord里说:「现在的状态是『能跑』,离『敢用』还差两个大版本。」

目前已经有两个团队在生产环境试点Lisette。一个是做边缘计算的Startup,用Lisette重写配置解析层,把YAML解析的panic率从0.3%降到零。另一个是Google内部的SRE工具,作者拒绝透露具体项目,只说了句话:「我们赌的是Austin能跟上Go的release节奏。」

你更愿意相信一个runtime的十年积累,还是一套类型系统的编译期保证?如果Lisette的v1.0能在2025年如期发布,这个问题或许会有新的答案。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
iPhone信号差!苹果官方实锤:关掉这2个默认开关,立刻稳回满格

iPhone信号差!苹果官方实锤:关掉这2个默认开关,立刻稳回满格

小兔子发现大事情
2026-04-07 07:13:58
伊朗要求美接受伊朗进行铀浓缩活动

伊朗要求美接受伊朗进行铀浓缩活动

界面新闻
2026-04-08 08:01:10
经伊朗这一战,中美之间至少50年内不会爆发战争,理由主要有三点

经伊朗这一战,中美之间至少50年内不会爆发战争,理由主要有三点

南权先生
2026-04-07 15:31:40
美伊停火后伊朗导弹射向以色列

美伊停火后伊朗导弹射向以色列

财联社
2026-04-08 08:27:09
监控系统出现漏洞,300多人 被带走?海康威视回应

监控系统出现漏洞,300多人 被带走?海康威视回应

每日经济新闻
2026-04-07 15:06:19
真够狠!以色列提前动手大杀四方,伊朗损失惨重

真够狠!以色列提前动手大杀四方,伊朗损失惨重

史政先锋
2026-04-07 21:03:17
为了郑丽文专机能顺利落地,解放军果断亮出底牌,痛击台独要害

为了郑丽文专机能顺利落地,解放军果断亮出底牌,痛击台独要害

共工之锚
2026-04-08 00:37:29
以媒称以色列“仍在持续打击伊朗”

以媒称以色列“仍在持续打击伊朗”

财联社
2026-04-08 09:14:21
女子自助餐一次吃12个汉堡,第三次光顾被老板拒绝接待后发帖吐槽,老板称对方引导舆论遭网友骚扰,已报警

女子自助餐一次吃12个汉堡,第三次光顾被老板拒绝接待后发帖吐槽,老板称对方引导舆论遭网友骚扰,已报警

极目新闻
2026-04-08 11:40:06
Anthropic 终于如愿以偿,亲手训出了“强大到威胁人类”的Mythos

Anthropic 终于如愿以偿,亲手训出了“强大到威胁人类”的Mythos

硅星GenAI
2026-04-08 10:21:59
山东旋转门事件升级!官媒怒批,知情人曝猛料,不止道歉这么简单

山东旋转门事件升级!官媒怒批,知情人曝猛料,不止道歉这么简单

奇思妙想草叶君
2026-04-07 20:12:16
中国汽车在欧洲市场销量的遮羞布,水分有点高,只有半数卖给用户

中国汽车在欧洲市场销量的遮羞布,水分有点高,只有半数卖给用户

柏铭锐谈
2026-04-06 10:06:32
特朗普同意停火两周

特朗普同意停火两周

财联社
2026-04-08 06:38:07
火腿肠三巨头的衰落告诉我们什么:产品没变,时代变了

火腿肠三巨头的衰落告诉我们什么:产品没变,时代变了

富贵说
2026-04-05 18:42:13
降维打击!61比0啊!!这纪录没人能破了吧!

降维打击!61比0啊!!这纪录没人能破了吧!

柚子说球
2026-04-07 19:49:53
郑丽文书法争议:她的字真的不是自己写的吗?

郑丽文书法争议:她的字真的不是自己写的吗?

书画相约
2026-04-08 08:19:04
一场战争彻底把中国打醒!美军作战最毒的是什么?中国用30年看清

一场战争彻底把中国打醒!美军作战最毒的是什么?中国用30年看清

共工之锚
2026-04-08 00:29:52
张雪公布自己设计的跨界踏板车设计图,最新回应:正在制作踏板摩托,这款踏板偏运动越野风格,售价可能比传统的贵一点

张雪公布自己设计的跨界踏板车设计图,最新回应:正在制作踏板摩托,这款踏板偏运动越野风格,售价可能比传统的贵一点

鲁中晨报
2026-04-07 17:13:05
严查电动车接送小孩!接娃怎么办?国家新规定:把方便留给群众!

严查电动车接送小孩!接娃怎么办?国家新规定:把方便留给群众!

朝子亥
2026-04-07 16:15:03
陈丽华辞世:巨额遗产分配合理,“唐僧”迟重瑞可按理想方式养老

陈丽华辞世:巨额遗产分配合理,“唐僧”迟重瑞可按理想方式养老

天天热点见闻
2026-04-08 08:16:03
2026-04-08 13:19:00
野生运营
野生运营
懂点产品,懂点AI,正在努力给平淡日子搞点新花样。
920文章数 10关注度
往期回顾 全部

科技要闻

造出地表最强AI,却死活不给你用!

头条要闻

伊朗代表:感谢中俄 坚定站在历史正确的一边

头条要闻

伊朗代表:感谢中俄 坚定站在历史正确的一边

体育要闻

皇马1.5亿巨星浪费超级单刀 丢球摊手抱怨

娱乐要闻

杨颖邓超低调现身观众席 支持陈赫话剧

财经要闻

特朗普同意停火两周 伊朗:接受停火提议

汽车要闻

5门5座/新复古造型 缤果Pro将于4月14日开启预售

态度原创

家居
健康
游戏
艺术
军事航空

家居要闻

自在恣意 侘寂风别墅

干细胞抗衰4大误区,90%的人都中招

研发5年投入13亿《王者荣耀世界》上线!盘点Q2能够玩到的MMORPG

艺术要闻

齐白石『凌波仙子』

军事要闻

文化符号当“弹药” 美伊将信息战带入新阶段

无障碍浏览 进入关怀版