Oxc v0.137 bringt dem Minifier das Treeshaken reiner Typed Arrays und Set/Map-Literale bei, liefert ein inkrementelles Scoping-Refresh und behebt einen React-Compiler-Randfall

Oxc v0.137 bringt dem Minifier das Treeshaken reiner Typed Arrays und Set/Map-Literale bei, liefert ein inkrementelles Scoping-Refresh und behebt einen React-Compiler-Randfall

lschvn

Der Oxc-Release crates_v0.137.0, veröffentlicht am 18. Juni 2026, liefert zwei neue Minifier-Treeshaking-Pässe, ein lang angelegtes inkrementelles Scoping-Refresh, einen freundlichen Parser-Fehler für benachbarte JSX-Elemente und einen React-Compiler-Fix für Imports, auf die nur über einen berechneten Schlüssel verwiesen wird. Der Release bringt außerdem zwei Breaking Changes an der ESTree-Config-API und die dichteste Perf-Patch-Liste des Projekts bisher: elf Performance-Einträge verteilt auf Parser, Minifier, Mangler, Transformer und React Compiler.

Es ist der erste Crates-Release seit v0.135 am 8. Juni und der zweite seit Buns nativer React-Compiler-Integration, die am 20. Juni in oven-sh/bun gemergt wurde. Buns Port zieht den Upstream-Rust-Workspace aus facebook/react direkt, also fließen die Oxc-Änderungen hier weiterhin über Metas Port und den react_compiler_oxc-Adapter, den andere Bundler aufgreifen, in den Upstream-Compiler zurück.

Das Highlight: zwei neue Minifier-Treeshaking-Pässe

Der neue Pass, den Anwender zuerst spüren werden, ist treeshake pure typed arrays and Set/Map array literals (#23469, Dunqing). Der Minifier vor v0.137 konnte bereits ein const x = [1, 2, 3] mit reinem Inhalt treeshaken, stoppte aber an der Grenze der Typed Arrays: Ein new Uint8Array([1, 2, 3]) mit ungenutzten Bytes blieb in der Ausgabe, ebenso ein new Map([["a", 1], ["b", 2]]), dessen Einträge nie gelesen wurden. Der v0.137-Pass erkennt diese Konstruktoren, durchläuft das innere Array-Literal und behandelt es genauso wie der reguläre Array-Literal-Pass: rein + ungenutzt => wegwerfen.

Die Ergänzung ist inline const value for read-only vars (#22593, ebenfalls Dunqing). Der Minifier vor v0.137 inlinete ein const-Binding nur, wenn das Binding genau einmal verwendet wurde; v0.137 inlinet den Wert an jeder Verwendungsstelle, wenn das Binding ein const ist und der Wert von der typbewussten Analyse als Read-Only behandelt wird. Das gibt dem Rest des Minifiers (Constant Folding, Bedingungsauswertung, Return-Statement-Vereinfachung) die Chance, das Ergebnis zu falten. Die PR-Beschreibung geht ein ausgearbeitetes Beispiel durch: Ein const FOO = computeFoo() gefolgt von einem späteren if (FOO > 0) kollabiert zum inlineten Vergleich, wenn computeFoo ein reiner Pfeil ist, der ein Literal zurückgibt, und zu einem Konstant-Bedingungs-Zweig, wenn es ein reiner Pfeil ist, der eine Konstante zurückgibt.

Beide Pässe sind durch CompressOptions-Flags gated, in v0.137 standardmäßig deaktiviert. Die Release-Notes sind explizit: Der CompressOptions-Standard in oxc_minifier v0.137 entspricht v0.136, die Gewinne sind also Opt-in.

Die größte Perf-Änderung: inkrementelles Scoping-Refresh

Die größte einzelne Perf-Änderung in v0.137 ist Incremental scoping refresh, delete LiveUsageCollector (#23197, Dunqing). LiveUsageCollector war die einzige Struktur in oxc_minifier, die bei jedem Minifier-Pass den gesamten Scope-Baum durchlief, um zu ermitteln, welche Symbole noch in Gebrauch waren. Das inkrementelle Scoping-Refresh teilt das in pro-Statement-Updates auf und überspringt den vollständigen Durchlauf, wenn keine stromabwärtige Änderung den Cache invalidiert.

Dunqings PR-Beschreibung ist direkt: LiveUsageCollector war der größte konstante Kostentreiber in großen Minifier-Läufen und der einzige Pass in oxc_minifier, der noch in O(scope) bei jedem Eintritt in einen Funktionskörper lief. Seine Entfernung eliminiert das einzige Minifier-Interne, das den vollen Scope-Baum bei jedem Eintritt benötigte, und der Rest des Minifiers kann nun ein günstigeres pro-Statement-Refresh nutzen. Die Release-Notes liefern keine Zahl, aber die zugehörigen Perf-Patches im selben Release erzählen dieselbe Geschichte:

  • Mangler: compile slot sort once instead of per CAPACITY (#23577, Boshen)
  • Parser: reduce code bloat from verify_modifiers monomorphization (#23576, Boshen)
  • ESTree: remove pointless mem::take (#23572, overlookmotel)
  • Transformer: pre-size statement vecs in TS enum & namespace lowering (#23516, Yunfei He)
  • Minifier: compute template-literal inline checks in a single pass (#23467, Yunfei He)
  • Semantic, mangler, minifier: fix Semantic::stats node count and reuse stats in mangler builds (#23352, Boshen)
  • Minifier: evaluate ternary branches once in minimize_conditional_expression (#23479, Yunfei He)
  • Transformer: pre-size JSX props vec to attribute count (#23466, Yunfei He)
  • React Compiler: borrow binding names in prefilter instead of allocating (#23471, Yunfei He)

Der Semantic/Mangler/Minifier-Fix in #23352 ist der, auf dem die anderen Perf-Einträge aufbauen: Semantic::stats lieferte bisher Knotenzählungen, die nicht dem entsprachen, was der Mangler gleich berechnen würde, sodass der Mangler die Arbeit wiederholen musste. Der Fix sorgt dafür, dass die Zählungen übereinstimmen, und der Rest des Releases kann sie wiederverwenden. v0.137 ist der erste Release, in dem die Semantic/Mangler/Minifier-Pipeline hinsichtlich Stats konsistent ist.

Zwei Breaking Changes der ESTree-Config

Die beiden Breaking Changes liegen beide in der optionalen ESTree-Kompatibilitätsschicht, nicht im Compiler selbst. Make whether to include TS fields a runtime option (#23574, overlookmotel) verschiebt die Entscheidung, ob der ESTree-AST TypeScript-spezifische Felder (TS-Annotationen, Typparameter, TS-spezifische Knoten) freilegt, von einem Cargo-Build-Feature zu einer Runtime-Option am ESTree-Builder. ESTree config use methods not consts (#23573, overlookmotel) ersetzt öffentliche const-Items auf der ESTree-Config-Struktur durch Methoden, sodass sich Aufrufstellen von config.include_ts_fields zu config.include_ts_fields() ändern.

Nachgelagerte Crates, die einen benutzerdefinierten ESTree-AST bauen, müssen ihre Config-Aufrufe anpassen. Der Compiler selbst, der Parser, der Transformer, der Minifier und der React Compiler bleiben durch die ESTree-Überarbeitung unverändert. Die ESTree-Schicht ist die, die Oxc erlaubt, einen AST zu emittieren, der der ESTree-Spec entspricht, was Tools wie Rollup, esbuild und die acorn-basierte Loader-Kette von webpack konsumieren.

Die React-Compiler-Einträge

Die beiden React-Compiler-Einträge sind die, die für die Nachricht des Vortags am relevantesten sind. Keep imports referenced only by a computed key (#23586, Boshen) schließt eine echte Korrektheitslücke im Import-Tracking des React Compilers: Ein Import, dessen einzige Verwendung die rechte Seite eines berechneten Schlüssels ist (zum Beispiel obj[SomeImport], wobei SomeImport ein umbenannter Default-Import ist), wurde fallengelassen, was sich in der HIR des React Compilers zu undefiniertem Verhalten kompilierte. Der Fix hält den Import am Leben, sobald ein berechneter Schlüssel auf ihn auflöst.

Borrow binding names in prefilter instead of allocating (#23471, Yunfei He) ist ein Perf-Eintrag, kein Fix. Der Prefilter ist der erste Pass des React Compilers über einen Funktionskörper, um zu entscheiden, ob der Körper ein Kandidat für die Kompilierung ist; der Prefilter allokierte bisher eine String pro Treffer, was sich auf einer großen React-Codebasis mit vielen Komponenten summiert. Das Borrow entfernt die Allokation.

Diese Änderungen fließen in den Upstream-Rust-Workspace aus facebook/react, nicht nur in den Oxc-Fork. Buns native React-Compiler-Integration portiert den Upstream-compiler/crates/-Workspace direkt, also landen die React-Compiler-Einträge von v0.137 in der nächsten Bun-Synchronisierung. Oxlint und oxfmt ziehen die neuesten Crates nach ihrem wöchentlichen Release-Rhythmus, und der oxlint-1.70-Release vor zwei Wochen war der erste, der den Upstream-Port des React Compilers als Rust-Crate auslieferte; v0.137 ist der zweite Crates-Release, der React-Compiler-Performance- und Korrektheitsarbeit trägt.

Die Parser-UX-Arbeit

Zwei Parser-Änderungen zielen auf Developer-Ergonomie statt auf rohe Perf. Parser: add friendly error for adjacent JSX elements (#23378, sapphi-red) ersetzt den kryptischen « unexpected token »-Fehler, den der Parser bisher emittierte, wenn zwei benachbarte JSX-Elemente (z. B. <a /><b /> am Anfang einer Datei ohne expliziten Fragment-Wrapper) nicht geparst werden konnten, durch eine Meldung, die das Problem benennt und auf das fehlerhafte Token zeigt. Parser: treat a line comment after ':' as leading, not trailing (#23515, Dunqing) behebt einen lange bestehenden Kommentar-Zuordnungs-Bug, bei dem ein // foo-Kommentar nach einem : an das vorhergehende Token statt an das nächste gehängt wurde, was Source Maps in manchen Fällen falsch machte.

Zwei Minifier-Korrektheitsfixes, die es wert sind, erwähnt zu werden

Die beiden Minifier-Bugfixes sind klein, aber genau die Sorte, die in der Produktion zuschlägt:

  • Minifier: keep Object introspection calls on a possible Proxy (#23483, Dunqing) hindert den Minifier daran, Object.keys(obj), Object.values(obj), Object.entries(obj) und Object.getOwnPropertyDescriptor(obj, key) zu entfernen, wenn obj ein Proxy sein könnte, weil der Aufruf den ownKeys- oder getOwnPropertyDescriptor-Trap des Proxys auslösen und beliebige Werte zurückliefern kann.
  • Minifier: keep new Map/WeakSet/WeakMap with a string argument (#23470, Dunqing) hindert den Minifier daran, ein new Map([["a", 1]]) zu entfernen, dessen Literal-Argument ein String-schlüsseliges Array reiner Einträge ist, weil die Iterationsreihenfolge des Konstruktors zählt und der Minifier es als No-Op behandelte.

Beide gehören zur selben Familie wie der neue treeshake pure typed arrays-Pass, nur in umgekehrter Richtung: Der neue Pass ist eine Opt-in-Erweiterung dessen, was der Minifier als sicher zu entfernen beweisen kann, und die beiden Fixes sind Korrekturen an Stellen, an denen der Minifier vor v0.137 zu aggressiv war.

Was v0.137 nicht ändert

Der Release ändert weder die Parser- oder Minifier-Standards noch die Transformer-Oberfläche oder die öffentliche API des React Compilers. Die Breaking Changes sind auf die optionale ESTree-Config-Schicht beschränkt. Die APIs der Crates oxc_ast, oxc_parser, oxc_semantic, oxc_transformer, oxc_minifier, oxc_mangler und oxc_react_compiler sind alle rückwärtskompatibel mit v0.136. Der nächste Release der Apps oxlint und oxfmt im wöchentlichen Montags-Rhythmus wird die Perf-Gewinne von v0.137 in den Parser-, Minifier- und React-Compiler-Crates sowie die Entfernung von LiveUsageCollector in oxc_minifier aufgreifen.

Der Release ist auch der zweite, der die neue Konvention des Oxc-Teams trägt, den Body in Abschnitte mit Emoji-Überschriften zu gliedern (💥 BREAKING CHANGES, 🚀 Features, 🐛 Bug Fixes, ⚡ Performance, 📚 Documentation), die Oxc v0.135 eingeführt hat. Das Muster entspricht dem Changelog-Format von Biome und den Vite-8-Release-Notes und erleichtert es, einen Release nach dem zu scannen, was für Ihren Code auf einen Blick zählt.

Häufig gestellte Fragen

Sakana Fugu Verpackt Einen Multi-Agent-Orchestrator Hinter Einer Einzelnen API und Behauptet Frontier-Parität Mit Fable und Mythos

Sakana AI lancierte Fugu am 22. Juni 2026, ein Multi-Agent-Orchestrierungssystem, das als einzelne OpenAI-kompatible API bereitgestellt wird. Zwei Modelle, Fugu und Fugu Ultra, koordinieren einen Pool geschlossener LLMs mittels gelernter Orchestrierung aus zwei ICLR-2026-Papers (TRINITY und Conductor). Fugu Ultra erzielt Benchmark-Werte, die mit Anthropics Fable 5 und Mythos Preview konkurrieren, doch der Launch scharfe Kritik an Kostentransparenz, Closed-Source-Abhängigkeiten und Benchmark-Methodik.

Astro 7.0.0 Stable bringt Vite 8, macht den Rust-Compiler zum Standard, fügt einen Hintergrund-Dev-Server für KI-Code-Agenten hinzu und befördert Routen-Caching, erweitertes Routing und Sätteri in den First-Class-Status

Astro 7.0.0, veröffentlicht am 2026-06-22, liefert den stabilen 7.0-Branch nach zehn Wochen Beta. Die wichtigsten Änderungen: Vite-8-Upgrade, Rust-basierter Astro-Compiler als Standard (der Go-Compiler wird entfernt), Sätteri-Markdown-Pipeline als Standard (remark/rehype ist nicht mehr Teil der Standardinstallation), erweitertes Routing aus dem Experimental-Status befördert (mit src/fetch.ts als neuem Standard-Einstiegspunkt), Routen-Caching aus dem Experimental-Status befördert (cache und routeRules auf oberster Ebene, mit den Providern cacheNetlify() und cacheVercel() in derselben Release), Hintergrund-Dev-Server-Modus für KI-Code-Agenten (astro dev --background, Lockdatei .astro/dev.json, astro dev stop|status|logs), compressHTML: 'jsx' als neuer Standard, das Paket @astrojs/db wird entfernt, und jede offizielle Integration erhält einen Major-Bump (vue 7, react 6, svelte 9, preact 6, solid-js 7, vercel 11, netlify 8, node 11). create-astro@5.1.0, in derselben Release-Welle ausgeliefert, schreibt jetzt eine AGENTS.md-Datei in jedes neue Projekt mit einem CLAUDE.md-Symlink, der darauf zeigt.

Verwandte Artikel

Weitere Berichterstattung zu ähnlichen Themen und Tags.

Oxlint v1.71 und Oxfmt v0.56 liefern die v0.137-Crates-Gewinne aus, bringen 18 neue Linter-Regeln und zähmen die React-Lifecycle-Traversierung mit einem Streamed-Iterator-Refactor
tooling

Oxlint v1.71 und Oxfmt v0.56 liefern die v0.137-Crates-Gewinne aus, bringen 18 neue Linter-Regeln und zähmen die React-Lifecycle-Traversierung mit einem Streamed-Iterator-Refactor

Oxlint apps_v1.71.0 und oxfmt apps_v0.56.0, beide am 2026-06-22 veröffentlicht, schließen den v0.137-Crates-Zyklus auf der Apps-Seite ab. Oxlint v1.71 übernimmt die neue `treeshake pure typed arrays`-Minifier-Passe (#23469), den `prefer-query-selector`-Compound-Selector-Fix, 28 Lint-Bugfixes (größtenteils Yunfei He Fixer-Rewrite-Arbeit), 13 Performance-Einträge, die auf einem Bucketed-Rule-Dispatch-Refactor aufsetzen (#23450, #23452, #23482-#23486, #23489, #23492), sowie den Tokio-nur-für-LSP-Start in oxlint (#23447). Oxfmt v0.56.0 liefert 9 Bugfixes (CRLF-Normalisierung für per `// @ts-ignore` unterdrückten Text in #23701 und #23702, den Member-Chain-Panic-Fix #23698, die Erhaltung von `export default` mit Type-Cast #23697) und 3 Formatter-Performance-Einträge, die Arena-Kopien auf BigInt-, Numeric-Literal- und String-Literal-Text vermeiden. v1.71 ist die erste Apps-Release seit v1.70.0 am 2026-06-15 und die letzte vor der v0.138-Crates-Release, die am Montag 2026-06-29 erscheinen wird.
Bun integriert den React Compiler direkt in seinen Bundler, rund 20x schneller als das Babel-Plugin
tooling

Bun integriert den React Compiler direkt in seinen Bundler, rund 20x schneller als das Babel-Plugin

PR #32504, am 20. Juni 2026 in oven-sh/bun gemergt, macht den Upstream-Rust-Port des React Compilers zu einer eingebauten `bun build`-Transformation hinter `--react-compiler` und `Bun.build({ reactCompiler: true })`. Bun portiert den Upstream-Workspace `compiler/crates/` aus `facebook/react` direkt in eine einzelne Crate `src/react_compiler/` (~62k LOC), anstatt den Weg über Babel, SWC oder Oxc zu gehen, und in einer großen React-Codebasis (rund 860 Komponenten, 1400 Memo-Slots) läuft der Compiler-Durchlauf in 465 ms gegenüber 9,15 s für das Babel-Plugin. Das Feature ist experimentell, standardmäßig deaktiviert und wird zusammen mit `reactCompilerOutputMode` (client oder ssr) und einem `scripts/sync-react-compiler.sh`-Resync-Skript ausgeliefert.
Astro 7.0.0-beta.6 stabilisiert das Routen-Caching und führt JSX-Whitespace-Kompression als Standard ein
tooling

Astro 7.0.0-beta.6 stabilisiert das Routen-Caching und führt JSX-Whitespace-Kompression als Standard ein

Astro 7.0.0-beta.6 (19. Juni 2026) befördert die experimentelle Routen-Caching-API auf stabile Top-Level-Konfiguration. Die Flags experimental.cache und experimental.routeRules entfallen, ersetzt durch eine cache-Konfiguration der obersten Ebene und einen Cache-Helper. Beta.5 (18. Juni) hat „jsx

Kommentare

Anmelden Melden Sie sich an, um an der Diskussion teilzunehmen.

Noch keine Kommentare. Seien Sie der Erste, der seine Gedanken teilt.