veilletech.fr
12 sept. Feed du jour
#09 FRONT Article

gpu-lexer colore 75 langages sans grammaire

Une coloration probabiliste : rapide, honnête sur ce qu'elle ignore.

gpu-lexer remplace les grammaires par langage par un petit modèle exécuté sur le GPU du navigateur via WebGPU : 41 321 paramètres, 27,4 Ko de bundle pour 75 langages. Il est plus rapide que tous ses concurrents mesurés, au prix de 90,35 % d'accord avec Shiki pris comme référence.

2 min de lectureintermédiairevidéo 1:22
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Les mesures
  3. Ce que ça vaut
  4. À retenir

Ce qui se passe

Toute coloration syntaxique repose sur une grammaire par langage. gpu-lexer prend le problème à l'envers : il découpe la source en mots, espaces, retours à la ligne et symboles, puis un modèle WebGPU minuscule combine le contexte local et celui du fichier entier pour étiqueter chacun. Les étiquettes voisines deviennent des spans, parmi neuf classes :

JavaScript
import { parse } from 'gpu-lexer'
const spans = await parse('source code')
// { type: 'plain' | 'comment' | 'string' | 'number' | 'keyword'
//        | 'type' | 'function' | 'constant' | 'operator',
//   start: number, end: number }[]

Le modèle pèse 41 321 paramètres, entraînés sur 4 688 781 jetons, et le même bundle sert tous les langages — y compris ceux absents de l'entraînement.

Les mesures

Sur dix copies de three.min.js (5,56 M de caractères), une exécution navigateur après préchauffage le 9 septembre, MacBook Pro M4 Pro, Chrome 152, chaque moteur dans son worker, rendu DOM exclu :

Bibliothèque Temps
gpu-lexer 402,0 ms
Sugar High 2.3.1 836,2 ms
Prism.js 1.30.0 1,16 s
Highlight.js 11.12.0 1,29 s
Starry Night 3.11.0 11,0 s
Shiki 4.4.3 29,6 s

Côté poids, 27,4 Ko minifiés et compressés en Brotli pour 75 langages, contre 8,6 Ko (Prism) et 14,9 Ko (Highlight.js) pour six langages du web seulement.

L'accord est mesuré contre Shiki, ramené à 100 %, sur 1 103 fichiers exclus de l'entraînement, pondérés par la popularité des 25 premiers langages du GitHub Innovation Graph (2026-Q1) : gpu-lexer 90,35 %, Prism.js 86,93 %, Highlight.js 84,31 %.

Ce que ça vaut

Les auteurs sont clairs : c'est « une expérience, pas un équivalent de grammaire ». 11,98 % des étiquettes diffèrent de Shiki, et cette mesure dit l'accord, pas la justesse. Le résultat varie beaucoup selon le langage : ActionScript, Python et JSX passent 95 %, Jinja et Visual Basic tombent sous 50 %. Rien là-dedans ne remplace un compilateur, un linter ou un analyseur.

Source : gpu-lexer.