JSIR de Google : une représentation intermédiaire basée sur MLIR pour l'analyse JavaScript

JSIR de Google : une représentation intermédiaire basée sur MLIR pour l'analyse JavaScript

lschvn5 min de lecture

Quand une représentation intermédiaire de compilateur fait la une, c'est que ça compte. Google a publié JSIR, un outil d'analyse JavaScript nouvelle génération basé sur MLIR, et il est déjà utilisé en interne pour des tâches qui révèlent toute l'ambition du projet : décompiler le bytecode Hermes vers JavaScript et alimenter des pipelines de désobfuscation assistée par IA combinant JSIR avec Gemini.

Pourquoi c'est important pour l'outillage

Une représentation intermédiaire est la structure de données qu'un compilateur ou un outil d'analyse utilise pour représenter le code entre le parsing et la génération de code. Si un AST vous dit à quoi ressemble le code structurellement, une IR vous dit ce qu'il fait. La qualité de votre IR détermine le type d'analyse et de transformation que vous pouvez effectuer.

L'outillage JavaScript a longtemps souffert d'approches fragmentées des IR. Les plugins Babel travaillent sur des AST. Les règles ESLint travaillent sur des AST. Les bundlers travaillent souvent sur leurs propres représentations internes avec une interopérabilité limitée. Une IR commune et bien conçue pourrait permettre à ces outils de partager le travail d'analyse, et c'est exactement ce que Google propose avec JSIR.

Haut niveau et bas niveau simultanément

Le défi technique central que JSIR résout est un classique du design de compilateurs : vous devez généralement choisir entre une IR de haut niveau (préserve la structure AST, peut être remontée à la source) et une IR de bas niveau (permet une analyse de flux profonde comme le suivi de taint et la propagation de constantes). La plupart des systèmes choisissent un.

JSIR utilise les régions MLIR pour modéliser précisément les structures de flux de contrôle de JavaScript, fermetures, try-catch-finally, fonctions async, cadres générateurs, d'une manière qui supporte les deux directions simultanément. Vous pouvez transformer le code et le remonter à la source, ou exécuter une analyse de taint sur la même représentation.

Cela ouvre des cas d'usage précédemment impraticables :

Décompilation : JSIR est utilisé chez Google pour décompiler le bytecode Hermes jusqu'au JavaScript. Hermes compile les apps React Native vers un bytecode compact pour des démarrages plus rapides ; la capacité de remontée à la source de JSIR est ce qui rend cette décompilation possible quand d'autres outils heurteraient un mur.

Désobfuscation : Google a publié des recherches (CASCADE) sur la combinaison de Gemini LLM avec JSIR pour la désobfuscation JavaScript. L'IA opère sur la représentation structurée de JSIR plutôt que sur la source obfusquée brute, produisant des transformations que JSIR applique pour reconstruire du code propre.

La Fondation MLIR

JSIR n'est pas un projet autonome, il est construit sur MLIR, le framework IR flexible du projet LLVM. C'est significatif pour la compatibilité avec l'écosystème : MLIR a déjà un large ensemble de dialectes, transformations et outils existants. En exprimant l'analyse JavaScript en termes MLIR, JSIR peut se brancher sur cet écosystème plutôt que de réinventer l'infrastructure.

Pour Commencer

JSIR est disponible sur GitHub à github.com/google/jsir. Le projet recommande d'utiliser Docker pour l'expérimentation locale :

docker build -t jsir:latest .
docker run --rm -v $(pwd):/workspace jsir:latest jsir_gen --input_file=/workspace/yourfile.js

Compiler depuis les sources requiert clang, Bazel, et un temps de build significatif, le projet note que la récupération et la compilation de LLVM prend du temps. Le chemin Docker est le point d'entrée pratique pour la plupart des développeurs.

Ce Que Ça Signifie pour l'Écosystème

La plupart des développeurs n'interagiront pas directement avec JSIR dans un avenir proche, c'est une fondation pour que les développeurs d'outils buildent dessus. Mais les implications à long terme sont significatives. Une IR partagée et bien conçue pourrait permettre :

  • Des linters avec une compréhension sémantique plus profonde (pas juste de la correspondance de patterns sur des nœuds AST)
  • Des bundlers avec une meilleure élimination de code mort utilisant l'analyse de flux
  • Des outils de refactoring qui peuvent transformer le code en toute sécurité à travers un flux de contrôle complexe
  • Une analyse cross-framework qui fonctionne de manière cohérente quel que soit le framework ou l'outil de build utilisé

Google l'a open source, ce qui signifie que la communauté peut build sur cette fondation. Que ça gagne en traction dépend de si les mainteneurs d'outils voient assez d'avantages pour intégrer l'analyse basée sur JSIR dans leurs pipelines, mais la fondation technique est solide.

Questions fréquentes

Articles connexes

Plus de couverture avec des sujets et tags en commun.

Playwright v1.61.0 : passkeys WebAuthn, vraie API WebStorage et modes vidéo à la trace pour le test runner
security

Playwright v1.61.0 : passkeys WebAuthn, vraie API WebStorage et modes vidéo à la trace pour le test runner

Playwright v1.61.0 (15 juin 2026) livre un authentificateur virtuel pour les cérémonies WebAuthn/passkey, une API de première classe page.localStorage / page.sessionStorage, les détails de sécurité réseau sur les APIResponse, et aligne l'enregistrement vidéo du test runner sur l'enregistrement de trace. Canaux navigateur : Chromium 149, Firefox 151, WebKit 26.5.
esbuild 0.28.1 : première release en deux mois avec une RCE Deno de haute gravité, un path traversal Windows et un bug de disposal `using`
security

esbuild 0.28.1 : première release en deux mois avec une RCE Deno de haute gravité, un path traversal Windows et un bug de disposal `using`

esbuild v0.28.1 (11 juin 2026) est la première release depuis avril. Elle corrige une exécution de code à distance CVSS 8.1 dans l'API Deno via NPM_CONFIG_REGISTRY, un path traversal du dev server limité à Windows, et un bug du minifier qui cassait silencieusement le disposal des ressources avec `using` et `await using`.
Bug Claude Code #74066 : Des Utilisateurs Signalent une Fuite de Contexte Entre Workspaces sur Sonnet 5, Anthropic N'a Pas Encore Répondu
security

Bug Claude Code #74066 : Des Utilisateurs Signalent une Fuite de Contexte Entre Workspaces sur Sonnet 5, Anthropic N'a Pas Encore Répondu

Un bug ouvert déposé contre Claude Code le 2026-07-04 par un utilisateur [Enterprise ZDR](https://docs.anthropic.com/en/docs/build-with-claude/zero-data-retention) décrit une session de travail sur Sonnet 5 qui commence soudainement à faire référence à une construction de temple Minecraft non liée, puis persiste dans la mauvaise tâche dans son récapitulatif. Le rapporteur (GitHub : [@milesrichardson-edb](https://github.com/milesrichardson-edb), issue [anthropics/claude-code#74066](https://github.com/anthropics/claude-code/issues/74066)) est sur Enterprise Zero Data Retention, le niveau qu'Anthropic présente spécifiquement comme isolé par session. Le triage sur le JSONL de session locale du rapporteur à `~/.claude/projects/<encoded-cwd>/<session-id>.jsonl` montre que le texte fuité n'est pas dans la transcription, ce qui exclut une fuite de contexte locale par chevauchement de fichier. Quatre autres utilisateurs dans les commentaires (avec des historiques de travail remontant à l'an dernier) décrivent un comportement quasi identique sur Claude Code, Claude Mobile et Claude deep research. Le fit architectural le plus plausible est un état de cache KV partagé dans l'inférence ([selon @yv3nne dans les commentaires](https://github.com/anthropics/claude-code/issues/74066#issuecomment-4880448776)), mais aucun ingénieur d'Anthropic n'a commenté l'issue dans les 22 heures depuis son dépôt, et l'issue a atteint le sommet de [Hacker News](https://news.ycombinator.com/item?id=42481789) le 2026-07-04. Le ton dans le fil est partagé : la moitié suspectant une vraie réutilisation de cache plateforme, l'autre moitié suspectant une [hallucination spécifique à Sonnet 5 déclenchée par un lexer Pygments](https://github.com/anthropics/claude-code/issues/74066#issuecomment-4880334711). Les deux lectures sont crédibles.

Commentaires

Connexion Connectez-vous pour participer à la conversation.

Pas encore de commentaires. Soyez le premier à partager vos pensées.