AI HOT 精选

ts-rust 发布:由 LLM 将 TypeScript 编译器、检查器和 LSP 移植到 Rust

6.9内容质量

TL;DR · AI 摘要

ts-rust 发布:由 LLM 将 TypeScript 编译器、检查器和 LSP 移植到 Rust · AIHOT Hacker News:AI 热帖 ·...

核心要点

  • 主题聚焦:ts-rust 发布:由 LLM 将 TypeScript 编译器、检查器和 LSP 移植到 R
  • 来源:AI HOT 精选,建议结合原文判断细节。
  • AI 分析暂不可用,本条为保底评分与摘要。
#AI#编程#前端#后端#开源
打开原文

ts-rust 发布:由 LLM 将 TypeScript 编译器、检查器和 LSP 移植到 Rust · AIHOT

Hacker News:AI 热帖

·

jcbhmr

2026-10-08 08:46

9 小时前

精选

AI 评分

76

ts-rust 发布:由 LLM 将 TypeScript 编译器、检查器和 LSP 移植到 Rust

Port of the TypeScript compiler, checker and lsp to Rust, by LLM

AI 导读

ts-rust(tsc-rs)将 microsoft/TypeScript(Go 实现)的编译器、类型检查器和语言服务器移植为 Rustï¼Œä½œè€ ç§°å ¨éƒ¨ä»£ç ç”± LLM ç¼–å†™ï¼Œæœ¬äººæœªè¯»è¿‡ä»£ç ã€‚

推荐理由

åŽŸæ–‡ç»™å‡ºäº†å®Œæ•´åŸºå‡†æ•°æ®å’Œå ¼å®¹æ€§æµ‹è¯•ç»“æžœï¼Œè¯»è€ å¯ä»¥æ®æ­¤è¯„ä¼°è¿™ä¸ª Rust 版 TypeScript æ£€æŸ¥å™¨æ˜¯å¦é€‚åˆæŽ¥å ¥çŽ°æœ‰é¡¹ç›®ã€‚

正文 · AI 翻译

ts-rust(又名 tsc-rs)

我想看看 LLM 能否把 TypeScript 编译器、检查器和 lsp 移植到 Rust。事实证明它们可以。

这 èŠ±è´¹äº†è¶ è¿‡ 42 ä¸‡ç¾Žå ƒ 的 tokenï¼Œä½†ä½ å¤§æ¦‚ç”¨çº¦ 2 ä¸‡ç¾Žå ƒå°±èƒ½å®Œæˆï¼ˆè§ä¸‹æ–‡ï¼‰

动机

  • 测试模型能力
  • æ‰“é€ ä¸€ä¸ªå¿«é€Ÿçš„ TypeScript 类型检查器
  • æ‰“é€ ä¸€ä¸ªèƒ½åœ¨ WASM 中高性能运行的 ts 检查器
  • 梗图

警告

这是早期版本。 在我们测试过的所有真实项目中,它都实现了 100% å ¼å®¹ã€‚å¯¹äºŽç»å¤§å¤šæ•°åº”ç”¨æ¥è¯´ï¼Œå®ƒåº”å½“å¯ä»¥ä½œä¸ºç›´æŽ¥æ›¿ä»£å“ä½¿ç”¨ã€‚å‚è§ 已知问题 。

å¦å¤–å€¼å¾—ä¸€æçš„æ˜¯ï¼šè¿™ä»£ç æˆ‘ä¸€è¡Œéƒ½æ²¡è¯»è¿‡ã€‚

安è£

äº‹å ˆè­¦å‘Šï¼Œæˆ‘å®Œå ¨ä¸çŸ¥é“è¿™åˆ°åº•èƒ½ä¸èƒ½ç”¨ã€‚

code
npm install -D tsc-rs
npx tsc-rs -p tsconfig.json

进展如何?

我用了大量 OpenAI æ¨¡åž‹æ¥å°è¯•å®Œæˆè¿™æ¬¡ç§»æ¤ã€‚æ€»å ±ï¼Œæˆ‘ç”¨ GPT-5.6 Sol 和 GPT 6 Astra æ¶ˆè€—äº†è¶ è¿‡ 40 ä¸‡ç¾Žå ƒ API 定价的 token 。它们在数月的 /goal å¾ªçŽ¯ä¸­å†™äº†è¶ è¿‡ 130 万行 Rustï¼Œå ¼å®¹åº¦å´å§‹ç»ˆæ²¡èƒ½è¶ è¿‡ 84% 左右。

当我看到我的 Claude Code é¢åº¦å‡ ä¹Žæ²¡æ€Žä¹ˆæ¶ˆè€—æ—¶ï¼Œæˆ‘æƒ³æŠŠ Opus 5.5 扔进去应该会很有趣。它 10 小时就做出了一个可用的 v0。

我以为它会继续使用 Codex æ¨¡åž‹å†™çš„ä»£ç ã€‚æˆ‘é”™äº†ã€‚ Opus 5.5 是从零开始的。它用 1/10 的时间就比 Astra 走得更远。

我让它继续跑下去,它确实做到了。总 token 花费为 ä¸¤å‘¨å† çº¦ 24,047 ç¾Žå ƒçš„ API 支出 。我用的是我的 Claude 账户,折算下来大约是我 200 ç¾Žå ƒå¥—é¤æ¯å‘¨é™é¢çš„ 925% 到 983% 。

确实很贵,但考虑到 typescript-go æŠ•å ¥äº†é‚£ä¹ˆå¤šå·¥ä½œï¼Œä¹Ÿä¸ç®—å¤ªç³Ÿã€‚

“垃圾分界线”

ä»¥ä¸‹æ‰€æœ‰å† å®¹éƒ½æ˜¯ç”±æˆ‘çš„ LLM 写的,不是我。

这到底是什么?

ts-rust 是微软原生 TypeScript ç¼–è¯‘å™¨çš„ç›´æŽ¥ç§»æ¤ç‰ˆï¼ŒåŽè€ ç”¨ Go 编写( microsoft/TypeScript ,原为 typescript-go )。它保留了 Go 的算法和行为,并拥有相同的命令行( tsc )、语言服务器和 API。

tsc-rs 接受与 tsc 相同的选项。npm åŒ åä¸º tsc-rs ï¼Œä»¥å ä¸Ž typescript åŒ å†²çªã€‚æ¯ä¸ª 发布版本 还附带各平台的独立归档: tsc äºŒè¿›åˆ¶æ–‡ä»¶åŠå ¶æ—è¾¹çš„ lib 文件。

平台:Linux x64(静态,适用于任何发行版)和 macOS arm64。Windows 和 Linux arm64 尚不可用。

要在 VS Code ä¸­ä½¿ç”¨å®ƒï¼Œè¯·å‚é˜ npm åŒ README 。

Effect 诊断

tsc-rs å† ç½®äº† Effect è¯­è¨€æœåŠ¡è¯Šæ–­ï¼ˆä»£ç  377xxxï¼‰ï¼Œå› æ­¤ Effect 项目不需要第二个编译器。它们与 TypeScript è¯Šæ–­æ¥è‡ªåŒä¸€æ¬¡æ£€æŸ¥ï¼Œè¯­è¨€æœåŠ¡å™¨ä¹Ÿä¼šæ˜¾ç¤ºå®ƒä»¬ã€‚å®ƒä»¬ä» åœ¨ tsconfig 含有该插件时运行,与 @effect/language-service ä¸€æ ·ï¼š

code
{
"compilerOptions"
: {
"plugins"
: [{
"name"
:
"
@effect/language-service
"
}] } }

规则、选项和 @effect-diagnostics 注释是 Effect-TS/tsgo 0.46.1 çš„ç§»æ¤ã€‚è¯­è¨€æœåŠ¡å™¨çš„ç¼–è¾‘å™¨åŠŸèƒ½ï¼ˆå¿«é€Ÿä¿®å¤ã€é‡æž„ã€æ‚¬åœã€è¡¥å ¨ï¼‰å°šæœªç§»æ¤ã€‚

状态

该移植固定在一个上游修订版本,即 microsoft/TypeScript 673a5f17d713 (2026-09-29,TypeScript 7.1.0-dev; UPSTREAM.md ),并与该修订版本的 Go 版本进行比较。要进行比较,请使用 [email protected] ,而不是 7.0.x 或 @typescript/native-preview ã€‚æ­¤æž„å»ºåŒæ ·è¡¨çŽ°å‡ºçš„å·®å¼‚å±žäºŽä¸Šæ¸¸è¡Œä¸ºï¼Œå½“ç§»æ¤æ›´æ–°åˆ°æ›´æ–°çš„å›ºå®šç‰ˆæœ¬æ—¶å°±ä¼šæ¶ˆå¤±ã€‚

  • 结果相同。 TanStack Query æ ¸å¿ƒå’Œ Hono 的检查诊断与 Go å®Œå ¨ä¸€è‡´ã€‚æ‰€æœ‰ 181,711 个移植的 Go 测试均通过。语言服务器和 API 的应答在 oracle 测试集上与 Go 一致。
  • 更快。 在 60 个开源项目上,类型检查耗时约为 Go ç‰ˆæœ¬çš„ä¸€åŠï¼ˆå‡ ä½•å¹³å‡å€¼ï¼‰ã€‚é¢„è§ˆåŒ æ˜¯åœ¨ CI 中构建的,未启用 PGO 和 BOLTï¼Œå› æ­¤æ¯”ä¸Šè¿°å®žæµ‹æž„å»ºæ›´æ ¢ã€‚
  • 真实项目。 在 120 个开源仓库上,命令行输出与 Go ç‰ˆæœ¬çš„å·®å¼‚ä» åœ¨äºŽä¸‹è¿°é—®é¢˜ï¼Œä»¥åŠ Go 自身输出在多次运行间发生变化之处。

基准测试:T3 Code

对 T3 Code 进行完整类型检查,并与 tsc 6、 tsc 7 以及 Bun 中新的 bun check 进行对比。T3 Code 使用了 Effectï¼Œå› æ­¤æœ‰ä¸¤ç§æƒ å†µï¼šä¸å¸¦ Effect 诊断和带 Effect 诊断。每次耗时均为五个 T3 Code 项目的总和。越低越快。

不带 Effect 诊断

检查器

时间

对比

code
tsc

6

7

code
bun check

4.07s

15.4×

快 3.95×

code
█
code
tsc-rs

7.25s

8.6×

快 2.22×

code
██

16.10s

3.9×

基准

code
█████

62.63s

æ ¢ 3.89×

code
██████████████████

带 Effect 诊断

7 + Effect

ï¼ˆå† ç½® Effect)

11.13s

12.5×

快 1.89×

code
███

7 +

code
@effect/tsgo

21.07s

6.6×

code
██████

,然后

code
effect-tsgo diagnostics

37.60s

3.7×

æ ¢ 1.78×

code
███████████

6 +

code
@effect/language-service

138.63s

æ ¢ 6.58×

code
████████████████████████████████████████

å½“ä½ ä¸éœ€è¦ Effect 诊断时, bun check æ˜¯æœ€å¿«çš„ã€‚å®ƒæ²¡æœ‰è¿™äº›è¯Šæ–­ï¼Œå› æ­¤ Effect 项目需要第二遍检查。 tsc-rs 通过一次检查即可获得它们。

错误。 tsc-rs 、 tsc 7 + @effect/tsgo 以及 effect-tsgo diagnostics 这一遍报告了相同的 221 条 Effect 诊断。 tsc 6 使用 JavaScript Effect 插件( @effect/language-service 0.87.4ï¼‰ï¼Œå ¶è§„åˆ™é›†ä¸åŒï¼šåœ¨ apps/server 上它报告 287 æ¡ï¼Œè€Œå ¶ä»–å·¥å ·æŠ¥å‘Š 177 条。 tsc-rs 和 tsc 6 多报告一个错误,即 apps/server/scripts/record-pi-rpc-replay-fixture.ts 中的 TS2322。TypeScript 7.1.0-dev 也报告了它, pingdotgg/t3code#16704 修复了该问题。

æµ‹é‡æ–¹å¼ï¼šä¸Žä¸‹æ–‡çœŸå®žåº”ç”¨ç›¸åŒçš„æœºå™¨å’Œæ–¹æ³•ï¼Œå¹¶æ·»åŠ äº† --composite false ( apps/web 为 composite)。T3 Code 位于 cd41c4ad ,项目为 apps/server 、 apps/web 、 apps/mobile 、 packages/client-runtime 和 packages/shared 。不带 Effect æ—¶ï¼Œé ç½®ä¸­æ²¡æœ‰ Effect 插件。带 Effect 时, tsc 7 是来自 @effect/tsgo 0.46.1 的 Effect 补丁版 7.0.2,而 tsc 6 是用 @effect/language-service 打补丁的 6.0.3。脚本为 scripts/bench-apps/t3code.sh 。T3 Code 中的 tsc-rs å¼€å ³æ˜¯ pingdotgg/t3code#16704 。

基准测试:真实应用

使用 tsc 6(JavaScript 编译器)、 tsc 7(Go 编译器)、 tsc-rs 和 bun check å¯¹å ­ä¸ªå¼€æºåº”ç”¨è¿›è¡Œå®Œæ•´ç±»åž‹æ£€æŸ¥ã€‚å€æ•°æ˜¯ç›¸å¯¹äºŽ tsc 6 çš„åŠ é€Ÿæ¯”ã€‚æ—¶é—´è¶Šä½Žè¶Šå¿«ã€‚

应用

检查行数

VS Code

3.75M

54.56s

6.84s (8.0×)

4.20s (13.0×)

1.62s (33.7×)

Sentry

(前端)

2.11M

58.76s

7.90s (7.4×)

4.46s (13.2×)

3.14s (18.7×)*

Playwright

585k

4.48s

0.66s (6.8×)

0.34s (13.2×)

0.18s (25.0×)

Excalidraw

449k

5.32s

0.80s (6.7×)

0.70s (7.6×)

0.18s (29.0×)

TypeORM

386k

3.86s

0.55s (7.0×)

0.36s (10.7×)

0.19s (20.0×)

tRPC

(server åŒ ï¼‰

209k

1.10s

0.16s (6.8×)

0.09s (12.0×)

0.12s (9.1×)*

å‡ ä½•å¹³å‡å€¼

7.1×

11.4×

20.9×

与 tsc 7 相比, tsc-rs å¿« 1.61×, bun check å¿« 2.95Ã—ï¼ˆå‡ ä½•å¹³å‡å€¼ï¼‰ã€‚é™¤ tRPC 外, bun check 在每个应用上都是最快的。

  • bun check æŠ¥å‘Šäº†å ¶ä»–æ£€æŸ¥å™¨å‡æœªæŠ¥å‘Šçš„é”™è¯¯ï¼šSentry 上 3 个,tRPC 上 2 个。

æ¯ä¸ªé ç½®åœ¨ tsc 7.0.2 下检查均为 0 é”™è¯¯ã€‚å ¶ä»–å·®å¼‚ï¼š

  • tsc-rs 在 VS Code 上报告 10 个错误,在 Sentry 上报告 2 个。TypeScript 7.1.0-dev( typescript@next )逐行报告相同的错误。 tsc-rs 移植了 7.1 å¼€å‘ç‰ˆæœ¬ï¼Œå ¶ä¸­åŒ å« 7.0.2 没有的检查。
  • tsc 6 在 VS Code 上报告 9 个错误。

测量方式:Apple M4 Pro(12 æ ¸ï¼Œ48 GB),macOS 26.5.1。 hyperfine ,1 次预热运行后取 5 次运行的中位数,使用 --noEmit --incremental false ã€‚æ¯ä¸ªæ£€æŸ¥å™¨ä½¿ç”¨å ¶é»˜è®¤çº¿ç¨‹æ•°ã€‚ tsc 7 和 tsc-rs 以原生二进制运行,不使用 npm 启动器。 tsc 6 在 Node 24.19 ä¸Šè¿è¡Œï¼Œå †å¤§å°ä¸º 16 GBï¼Œå› ä¸ºåœ¨ VS Code 和 Sentry ä¸Šä½¿ç”¨é»˜è®¤å †ä¼šå† å­˜ä¸è¶³ã€‚ç‰ˆæœ¬ï¼š tsc-rs 0.1.0、TypeScript 7.0.2 和 6.0.3、Bun canary bd599f5af 。检查的行数是 tsc 7 的 --extendedDiagnostics 计数,使用 .d.ts 文件。上面的 T3 Code 基准测试使用相同的机器和方法。

有四个应用需要修改才能在 tsc 7 下以 0 é”™è¯¯è¿›è¡Œæ£€æŸ¥ã€‚å ¶ä»–æ²¡æœ‰å˜åŒ–ï¼š

  • Excalidraw:没有 baseUrl ï¼Œå› ä¸º TS 7 移除了它。
  • TypeORM: moduleResolution 从 node 改为 nodenext ï¼Œå› ä¸º TS 7 移除了 node 。
  • VS Codeï¼šå ¶ postinstall æ·»åŠ çš„ electron 类型定义。
  • Playwrightï¼šå ¶æž„å»ºç”Ÿæˆçš„æºæ–‡ä»¶ã€‚

有两个应用不在表中:

  • rxjs main éœ€è¦å ˆæž„å»ºå ¶å·¥ä½œåŒºåŒ ã€‚
  • date-fns 使用项目引用。在那里, tsc -p 和 bun check 做不同的工作。

脚本位于 scripts/bench-apps : setup.sh <dir> ,然后是 run.sh <dir> 和 summary.py <dir> ,T3 Code 用 t3code.sh <dir> 。

已知问题

  • 在某些 monorepo ä¸­ï¼Œå·¥ä½œåŒºåŒ çš„æºæ–‡ä»¶æ—¢å¯ä»¥é€šè¿‡ node_modules è®¿é—®ï¼Œä¹Ÿå¯ä»¥é€šè¿‡ç›´æŽ¥å¯¼å ¥è®¿é—®ã€‚åœ¨é‚£é‡Œï¼Œ tsc-rs 可能为比 tsc 更多的这些文件写出输出,并报告 TS6059(文件不在 rootDir 下)。 tsc é€šè¿‡è®¡æ—¶æ¥å†³å®šè¿™ä¸€ç‚¹ï¼Œå› æ­¤å®ƒè‡ªå·±çš„ç»“æžœåœ¨è¿è¡Œä¹‹é—´ä¼šå˜åŒ–ã€‚ tsc-rs 在每次运行中给出相同的结果(TypeScript 6 的结果)。
  • 在 tsc -b ä¸­ï¼Œå½“ä¸€ä¸ªé¡¹ç›®å¯¼å ¥å¦ä¸€ä¸ªé¡¹ç›®çš„è¾“å‡ºè€Œæ²¡æœ‰é¡¹ç›®å¼•ç”¨æ—¶ï¼Œ tsc-rs 可能读取到旧的或缺失的输出(TS2305 或 TS2307),而 tsc è¯»å–åˆ°æ–°çš„è¾“å‡ºã€‚å½“é¡¹ç›®åªéœ€è¦å†™å‡ºå ¶è¾“å‡ºæ—¶ä¼šå‘ç”Ÿè¿™ç§æƒ å†µã€‚æ·»åŠ å¼•ç”¨å³å¯ä¿®å¤ã€‚
  • åœ¨ç¼–è¾‘å™¨ä¸­ï¼Œé•¿æ—¶é—´ç¼–è¾‘ä¼šè¯æœŸé—´å† å­˜ä¼šç¼“æ ¢å¢žé•¿ï¼ˆæ¯ 1,000 次编辑约 20 MiB)。在我们测量的会话中,它保持在 tsc 以下。
  • tsc-rs --version 打印它移植的 TypeScript 版本(7.1.0-dev),而不是 npm ç‰ˆæœ¬ã€‚ç¼–è¯‘å™¨æ®æ­¤åŒ¹é  typesVersions 。

开发

crates/ts_goport 是编译器。它有两个部分 crate, goport_util 和 goport_lsproto ,位于 crates/ts_goport/parts 中,并使用 crates/ts_goport/libs 中的 lib 文件。 tools/ts_ast_codegen 生成 crates/ts_goport/src/astdata , tools/ts_diagnostics_codegen 生成 crates/ts_goport/src/diagnostics/catalog.rs 和 crates/ts_goport/src/diag.rs 。 crates/ts_wasm 是 WebAssembly 构建( npm/wasm )。

code
./scripts/run-cargo-capped.sh build --release -p ts_goport --bins
./scripts/verify.sh

二进制文件是 goport (类型检查)和 tsgo (Go tsgo 命令行)。Go 基线测试使用 TS_GO_REPO=/path/to/typescript-go ./scripts/run-cargo-capped.sh test -p ts_goport --test go_baselines 运行。

  • 移植规则: crates/ts_goport/PORTING.md
  • 测量和门禁脚本: scripts/goport
  • npm åŒ å’Œå‘å¸ƒï¼š npm/README.md
  • 类型检查器工作规则: AGENTS.md 、 问责规则 和 保存状态
  • 项目如何开始: docs/history.md

发布

æŽ¨é€æ ‡ç­¾ v<version> (例如 v0.1.0 )。 发布工作流 æž„å»ºã€æ‰“åŒ å¹¶æµ‹è¯•è¿™äº›åŒ ï¼Œå°†å®ƒä»¬å‘å¸ƒåˆ° npm 并创建 GitHub å‘å¸ƒã€‚ç¨³å®šç‰ˆæœ¬è¿›å ¥ dist-tag latest ,预发布版本( v0.2.0-beta.1 ï¼‰è¿›å ¥ next 和 GitHub 预发布。参见 npm/README.md 。

许可证

MIT ã€‚è¯¥ç§»æ¤ä¿ç•™äº†å®ƒæ‰€ç§»æ¤ä»£ç çš„è®¸å¯è¯å’Œå£°æ˜Žï¼šTypeScript(Apache-2.0)和 Go æ ‡å‡†åº“çš„éƒ¨åˆ†å† å®¹ï¼ˆBSD-3-Clause)。参见 NOTICE.md 。

来源: Hacker News:AI 热帖 · github.com

AI ç¼–ç 

产品更新

#

ç¼–ç 

OpenAI

Anthropic