27.5KB 的 WebGPU 语法高亮器:无需语法规则
27.5KB language-agnostic WebGPU syntax highlighter
gpu-lexer 是一个仅 27.5KB 的通用语法高亮工具,它彻底打破了传统依赖特定语法规则的局限。通过 WebGPU 技术,该工具利用微小的模型结合局部与全局上下文,智能推断代码片段类型,从而支持从未在训练中出现过的编程语言。在性能测试中,它对 10 倍大小的 three.min.js 文件的处理速度极快,且库体积远小于 Shiki 或 Prism.js 等主流方案。虽然目前它在未见过的文件上与 Shiki 的标签一致性约为 87%,但这作为一个实验性项目,展示了利用 GPU 进行通用代码理解的新可能,为前端开发者提供了一种轻量且灵活的替代方案。
它被设计为支持任何语言:与其选择语法规则,不如根据周围的源代码猜测每个部分的具体类型,即使它在训练过程中从未见过该语言或语法。
HN 评论区
33- vova_hn2
几年前,在当前的“AI”/LLM 热潮之前,我就听人说过,未来的编程将包含更少的固定确定性算法,而更多统计/机器学习算法。因为即便在可以编写确定性算法的情况下,有时收集训练数据并训练一个小模型,也比编写和维护一个能实现相同功能但具有确定性的庞大代码库更容易。
我想知道,LLM 代码生成的普及是否会加速这一进程。一方面,现在“编写”(由 LLM 生成)代码比以往任何时候都更容易,因此节省时间/精力的优势可能不再存在(大概吧,我不确定)。另一方面,现在人人都用 LLM,所以我认为人们对 ML 模型的非确定性和统计性质不再那么忌惮了。
想象一下,你正在开发一个 CLI 工具。CLI 工具是做什么的?嗯,它读取参数,读取 stdin,写入 stdout 并执行系统调用。因此,所有可能的输入和输出都非常明确。如果未来让 LLM“想象”出你正在制作的工具的大量可能输入和正确输出,然后训练一个小模型,而无需编写或生成任何代码,这样会不会更容易(甚至更自然)?
- netghost
我觉得最有趣的不是它在常见语言上效果很好,而是它似乎对尚未存在的语言也很有用。如果你需要为你的 SQL 变体、借鉴了许多通用习惯用语的语言,或者只是那些足够接近目标语言的随意代码提供某种高亮,这可能会很有用。
- thangalin
27 KB 确实令人印象深刻。作为对比,这里有一套由 LLM 为我编写的、针对常见语言和格式的确定性 PHP 文件,大小为 32 KB:
https://repo.autonoma.ca/repo/treetrek/tree/HEAD/render/rule...
- undefeated
在这个经济环境下,这真是一个令人印象深刻且新颖的机器学习应用吗?
看起来确实很厉害,但我确实发现了一个问题,就是一致性。例如,它似乎将 `null` 高亮为值,除非它出现在 `===` 表达式的左侧,因为它可能在训练数据中没见过这种情况。
它是否在训练集中不存在的语言上真正测试过?看看这么小的模型是否真的能泛化,会很有趣……
- Zopieux
bootstrap.css 的例子显示,数字(有些是蓝色,有些是黑色)和规则名称(有些是紫色,有些是黑色)周围的高亮非常随机。
虽然这个前提很巧妙(语法和分词器都挺相似的,人类怎么可能想出那么多不同的花样呢?),但这并不能让人对准确性产生太多信心。