Hacker News 中文摘要

RSS订阅

27.5KB 跨语言 WebGPU 语法高亮工具 -- 27.5KB language-agnostic WebGPU syntax highlighter

图形处理器词法分析器(gpu-lexer)把源码拆成词、空格、换行和符号,再用微小 WebGPU 模型结合局部与全文上下文标记每部分。它不限语言,不从语法规则而从周围代码猜测类型,即使训练未见过该语言。相邻标签成为返回的语法跨度。此实验性工具非等价高亮器,在训练外文件上当前模型 11.98% 的令牌标签与语法高亮库(Shiki)不同。

正文

gpu-lexer 是一个 27.4KB、与语言无关的 WebGPU 语法高亮器。调用 parse('source code') 会返回一组 span,每个 span 包含 start、end 和类型,类型共九种:plain、comment、string、number、keyword、type、function、constant、operator。

它的工作方式分两步:先把源码拆成词、空白、换行、符号等简单部分,再用一个很小的 WebGPU 模型结合局部上下文和整份文件的信息给每部分分类。它不选语法,而是根据周围源码猜测每部分的类型,所以天生不针对任何语言——即使训练时从未见过那种语言或语法,也能处理。相邻的标签合并起来,就是返回给调用方的语法 span。

这只是个实验,不是能替代语法规则的高亮器。在被剔除出训练的留出文件上,当前模型有 11.98% 的 token 标签与 Shiki 不同。这个数字衡量的是跟 Shiki 的一致度,不是客观正确性;换成没见过的语言或真实代码,差异可能更大。

「Highlight 10× three.min.js」测的是浏览器里温暖环境下的运行时间(越低越好):2026 年 9 月 9 日,每个引擎预热后跑一轮,输入是 10 份 three.min.js 拼接起来的源码(556 万字符)。设备为 MacBook Pro(Apple M4 Pro、20 核 GPU、24GB),系统 macOS 26.6.2,浏览器 Chrome 152。各引擎跑在独立 worker 里,不计 DOM 渲染。gpu-lexer 和 Shiki 返回 token 数据,Starry Night 返回 HAST 树,Sugar High、Prism.js、Highlight.js 返回高亮后的 HTML。版本分别是 Sugar High 2.3.1、Prism.js 1.30.0、Highlight.js 11.12.0、Starry Night 3.11.0、Shiki 4.4.3。

「Loaded library size」比较引入的库体积(越低越好):把各库压缩并做 Brotli 编码后,于 2026 年 9 月 9 日测量。覆盖的 Web 主力语言包括 javascript、typescript、css、html、json、markdown;gpu-lexer 不管哪种语言都用同一个包,Starry Night 的体积含 Oniguruma WASM。

「Top-25 weighted agreement」是与 Shiki 的按流行度加权一致度(越高越好)。以 Shiki 作为 100% 参照,把各库的 token 名映射到上面那九类,拿 GitHub Innovation Graph 2026 年 Q1 前 25 语言的 1,103 个留出文件做比较,只比较非空白片段,并按各语言的 pusher 数加权。不支持的语言记 0 分,语料大小不影响权重。

页面还提供了 live demos,涵盖 75 种语言,并有 react.development.js 的示例。

评论

多数人对用极小体积 WebGPU 小模型替代语法高亮的思路表示惊叹,并看好其对未知语言的泛化潜力;少数人质疑其实用性、跨平台兼容性及非确定性带来的一致性问题。

认为其价值在于炫技而非日常实用

  • 认为一次性高亮巨量代码并不常见,非确定性方式帮助有限,但作为浏览器能力的演示很精彩(较多人) > 这不算是实用,因为一次性高亮500万行代码不常见,但展示浏览器能干什么实在棒极了(@onion2k)

惊叹极小体积与用模型替代语法的思路

  • 27KB 的尺寸纪律令人喜爱,用微小 WebGPU 模型取代传统语法规则是简洁优雅的新颖想法(较多人) > 用微型 WebGPU 模型代替语法分析器是很干净的主意(@quietraster)

看好对未知语言与方言的泛化潜力

  • 认为最有趣的是小模型不仅对常见语言有效,对尚不存在的 SQL 变种或接近目标语言的随意代码也可能有用(较多人) > 最有趣的不是对常见语言有效,而是对还不存在的语言似乎也有用(@netghost)

质疑跨平台兼容性与静默失败

  • 多名用户报告在 Linux 和 Android Firefox 上完全无法高亮(文本全黑或无效),但在 iOS 上正常,怀疑是支持缺失或静默失败(较多人) > 在 Linux 和安卓 Firefox 上渲染全是黑字没有高亮,iOS 却很好,可能是静默失败(@LatticeAnimal)

担忧非确定性与训练集外的一致性问题

  • 指出模型高亮存在不一致,例如 null 在 === 左侧可能因训练未见过而不高亮,并怀疑小模型在训练集外语言上的真实泛化能力(较多人) > 一致性是个问题,比如 null 在等号左边可能不高亮,因为训练时大概没见过(@undefeated)

探讨小模型替代确定性代码的前沿趋势

  • 有人认为未来编程将更少依赖确定性算法,收集数据训练专精小模型比维护大体量代码更容易,LLM 普及也让人们不再排斥非确定性(少数人) > 即使能写确定性算法,有时收集数据训练小模型也比维护大型代码库更轻松(@vova_hn2)

有价值的补充

  • 浏览器冷启动与 CSP:有用户指出 WebGPU 管线编译的冷启动开销,以及严格 CSP 策略可能像拒绝 wasm-unsafe-eval 那样静默阻止着色器编译,值得关注(@alphanumericent)
  • 技术对照:有人给出了自己用确定性方式编写的 32KB PHP 高亮套件作为体积与思路对比(@thangalin)
  • 跨维度渲染:有开发者分享了自己基于 GPU 的三维确定性文本着色系统,能在一秒内渲染约 9500 万等宽字形,希望探讨结合可能(@tikimcfee)
  • 冷知识讽刺:项目宣称对 ActionScript 达到 95–100% 一致率被指出意义有限,因为该语言最后稳定版已是 20 年前(@muglug)