Présentation
Le projet gpu-lexer met à disposition un surligneur syntaxique de 27,5 KB qui s’appuie sur WebGPU. Contrairement aux solutions basées sur des grammaires statiques, il se veut language‑agnostic : il ne sélectionne pas de règle pré‑définie mais prédit le type de chaque fragment de code à partir du contexte local et du fichier complet. Le service expose une API JavaScript simple :
import { highlight } from 'gpu-lexer'
const spans = await highlight('source code')
// [{type:'keyword', start:0, end:5}, …]
Architecture et fonctionnement
Le moteur commence par découper le texte en unités élémentaires — mots, espaces, sauts de ligne et symboles. Chaque unité reçoit trois attributs : type (plain, comment, string, number, keyword, type, function, constant, operator), start et end. Ces fragments sont ensuite injectés dans un modèle de machine learning d’une taille infime, exécuté sur le GPU via l’API WebGPU. Le modèle exploite deux niveaux de contexte : un voisinage immédiat (quelques caractères autour du token) et une vue globale du fichier, ce qui lui permet d’inférer le rôle d’un token même lorsqu’il n’a jamais rencontré la langue correspondante pendant l’entraînement. Les prédictions sont transformées en « spans » de surbrillance renvoyés à l’appelant.
Le choix de WebGPU minimise l’empreinte mémoire et le temps de latence : le binaire du modèle occupe moins de 30 KB, et l’inférence se déroule entièrement sur le GPU, évitant le coût d’un transfert CPU‑GPU important. Cette conception rend le composant adapté aux environnements web où la bande passante et la capacité de calcul sont limitées.
Évaluation et limites
Sur un jeu de 75 langues supportées, le projet indique un taux de désaccord de 12,57 % avec Shiki, un surligneur de référence basé sur des grammaires. Cette métrique mesure uniquement la concordance avec Shiki ; elle ne constitue pas une évaluation absolue de la justesse du surligneur. Le test a été réalisé sur des fichiers exclus du jeu d’entraînement, ce qui suggère que le modèle peut rencontrer des écarts plus importants sur des syntaxes très spécifiques ou du code réel non représenté dans les données d’apprentissage.
En tant qu’expérience, le surligneur ne prétend pas remplacer les solutions grammaticales. L’absence de règles explicites implique que des constructions complexes (par exemple, les macros C++ ou les décorateurs Python) peuvent être mal classées. De plus, la dépendance à WebGPU limite l’utilisation aux navigateurs ou environnements qui implémentent pleinement l’API, excluant ainsi certains contextes serveur ou mobiles.
Malgré ces réserves, le projet démontre la faisabilité d’un modèle de coloration syntaxique ultra‑léger, capable de s’adapter à de nouvelles langues sans mise à jour de grammaire. La combinaison d’un pré‑traitement lexical simple et d’une inférence GPU ouvre la voie à des éditeurs en ligne plus réactifs, tout en conservant une empreinte compatible avec les contraintes du web moderne.