gpu-lexer, WebGPU-модель для подсветки синтаксиса весом 27,5 КБ

gpu-lexer, библиотека для подсветки синтаксиса кода размером 27,5 КБ, устроенная иначе, чем привычные инструменты вроде Shiki. Вместо того чтобы описывать грамматику для каждого языка программирования, она сначала разбивает исходный код на простые части, слова, пробелы, переносы строк и символы, а затем маленькая модель, работающая через WebGPU прямо в браузере, присваивает каждой части тип: обычный текст, комментарий, строка, число, ключевое слово, тип, функция, константа или оператор. Модель определяет тип по локальному и общему контексту файла, а не по заранее заданным правилам языка, поэтому теоретически может работать даже с языками и синтаксисом, которых не видела во время обучения. Соседние фрагменты с одинаковым типом объединяются в диапазоны подсветки, которые библиотека возвращает вызывающему коду.

Используется библиотека как обычный JS-модуль: import { highlight } from 'gpu-lexer', вызов await highlight('исходный код') возвращает массив объектов с типом фрагмента и позициями начала и конца. На сайте проекта (gpu-lexer.vercel.app) выложены живые демо для 75 языков программирования, включая разбор файла react.development.js.

Сам проект прямо называет себя экспериментом, а не полноценной заменой грамматических подсветчиков. На файлах, не входивших в обучающую выборку модели, 12,57% меток, присвоенных токенам, расходятся с тем, что дал бы Shiki, популярная библиотека подсветки синтаксиса. Источник подчёркивает: это показатель согласия с Shiki, а не независимая оценка правильности разметки, и на незнакомых языках или реальном коде расхождение может быть выше измеренных 12,57%. В тексте страницы проекта не назван автор, компания или организация, не указаны дата выпуска, архитектура модели и её параметры, кроме итогового размера библиотеки в 27,5 КБ.

Ключевые факты

  • gpu-lexer, библиотека весом 27,5 КБ, использующая маленькую модель на WebGPU вместо грамматики языка программирования
  • Исходный код делится на слова, пробелы, переносы строк и символы, а модель размечает каждую часть по локальному и общему контексту файла: комментарий, строка, число, ключевое слово, тип, функция, константа, оператор
  • Задуман для любого языка программирования, включая те, что не встречались модели при обучении
  • На файлах вне обучающей выборки 12,57% меток расходятся с популярной библиотекой Shiki; сам проект называет это мерой согласия, а не показателем правильности
  • Живые демо на сайте проекта охватывают 75 языков программирования

Почему это важно

Подсветка синтаксиса в редакторах кода и на сайтах документации обычно строится на отдельной грамматике для каждого языка программирования, так устроены популярные инструменты вроде Shiki. gpu-lexer предлагает другой подход: маленькая модель, работающая прямо в браузере через WebGPU, угадывает тип каждого фрагмента кода по контексту, без явного описания синтаксиса языка. Это демонстрация того, что разметку кода можно получать статистически, а не через набор правил, и потенциально распространять на языки, для которых грамматика ещё не написана.

Кому это важно

Разработчикам веб-редакторов кода, систем документации и онлайн-песочниц, которым нужна подсветка редких или новых языков программирования без написания отдельной грамматики под каждый из них. Также, исследователям и энтузиастам, которых интересует применение маленьких моделей машинного обучения к задачам разбора кода прямо в браузере, без обращения к серверу.

Как это применить

Библиотека подключается как обычный JS-модуль: import { highlight } from 'gpu-lexer', вызов await highlight('исходный код') возвращает массив объектов с типом фрагмента (plain, comment, string, number, keyword, type, function, constant, operator) и позициями начала и конца в тексте. Живые демо на сайте проекта (gpu-lexer.vercel.app) охватывают 75 языков программирования, один из примеров, разбор файла react.development.js.

Можно ли доверять

Сам проект честно называет себя экспериментом, а не заменой грамматических подсветчиков вроде Shiki. Заявленная точность, 12,57% расхождения меток на файлах, не входивших в обучение, это мера согласия с Shiki, а не независимая оценка правильности разметки: Shiki сам может ошибаться, и расхождение с ним не всегда означает ошибку gpu-lexer. Источник прямо предупреждает, что на незнакомых языках и реальном коде расхождение может оказаться выше измеренных 12,57%. В тексте страницы не назван автор, компания или организация за проектом, не указана дата выпуска и не раскрыта архитектура модели.

Риски и подводные камни

Модель может ошибочно размечать фрагменты кода, на тестовых файлах расходится с Shiki примерно каждая восьмая метка, а на реальном коде и незнакомых языках ошибок может быть больше. Без явной грамматики результат менее предсказуем, чем у классических подсветчиков: стабильная точность не гарантирована для каждого языка. Работа модели требует поддержки WebGPU в браузере пользователя, что доступно не на всех устройствах и не во всех браузерах.