- Auf der jüngsten 108. TC39-Sitzung wurden 9 Vorschläge, die die Zukunft von JavaScript prägen sollen, in den jeweiligen Standardisierungsstufen vorangebracht
- Zu Stage 4 (endgültige Freigabe) gehören Funktionen wie
using, Array.fromAsync und Error.isError, die Entwicklerproduktivität und Sicherheit erhöhen
- In Stage 3 bis 1 werden verschiedene nützliche Funktionsvorschläge diskutiert, darunter unveränderliche ArrayBuffer, Seeded Random, clamp, Verbesserungen an NumberFormat und Random-Funktionen
- Deno treibt die Einführung und Erprobung neuer Standards aktiv voran, und einige Funktionen sind bereits in Deno und aktuellen Browsern verfügbar
- Die Standardisierungsdiskussionen werden fortgesetzt, und es wird erwartet, dass sich das JavaScript-Ökosystem sicherer und kompakter weiterentwickelt
Aktuelle Standardisierungstrends bei TC39 und wichtige neue JavaScript-Funktionen
Stage 4: Funktionen vor der offiziellen Übernahme
Explizites Ressourcenmanagement (using)
- Mit der
using-Deklaration wird sichergestellt, dass Ressourcenobjekte wie Dateien oder Netzwerk-Sockets beim Ende ihrer Lebensdauer automatisch aufgeräumt werden
- Das Konzept ist von Sprachen wie C# und Python inspiriert; Objekte implementieren dazu die Methoden
[Symbol.dispose]() oder [Symbol.asyncDispose](), die beim Verlassen des Blocks aufgerufen werden
- Die automatische Bereinigung erfolgt auch bei Ausnahmen und verringert so das Risiko von Ressourcenlecks, etwa bei Datei-Handles
- Bereits unterstützt in Chrome 134, Firefox 134, Deno v2.3 usw.; in Deno kann es sofort praktisch für Dateien, Sockets und mehr eingesetzt werden
Array.fromAsync
- Eine Standardmethode, die asynchrone Iterables in ein Array umwandelt und dabei ein Promise zurückgibt
- Sammelt Werte aus async generatoren und ähnlichen Quellen der Reihe nach und liefert das endgültige Array-Ergebnis als Promise
- Die Nutzung ähnelt dem bestehenden synchronen
Array.from und unterstützt eine Mapping-Funktion sowie thisArg
- Unterstützt von allen großen Browsern, Node v22 und Deno ab v1.38
Error.isError
- Eine eingebaute Funktion, mit der sich einfach feststellen lässt, ob ein Wert ein echtes Error-Objekt ist
- Funktioniert auch in komplexen Fällen wie cross-realm oder bei Subclass-Fehlern zuverlässig
- Erhöht die Verlässlichkeit bei Polyfills und der Entwicklung von Bibliotheken
Stage 3: Unveränderliche ArrayBuffer
Immutable ArrayBuffer
- Für
ArrayBuffer sollen die Methoden transferToImmutable() und sliceToImmutable() ergänzt werden, um Unveränderlichkeit zu unterstützen
- Ein unveränderlicher Buffer kann nach seiner Erstellung weder verändert noch detached werden, was sicheres Teilen zwischen Threads und Workern sowie bessere Performance ermöglicht
- In Deno und ähnlichen Umgebungen lässt sich das bei der Verarbeitung binärer Daten effizient nutzen, ohne unnötige Kopien zu erzeugen
Stage 2: Neue vorgeschlagene Funktionen
Random.Seeded
- Ein seed-basierter PRNG (
Random.Seeded(seed)), mit dem sich über mehrere Ausführungen hinweg dieselbe Zufallssequenz erzeugen lässt
- Nützlich für Bereiche mit hoher Reproduzierbarkeit, etwa Spiele oder Simulationen
- Bietet im Gegensatz zu
Math.random() erweiterte Funktionen wie die Angabe eines Seeds und das Klonen des Zustands
Number.prototype.clamp
- Eine Methode zur Begrenzung numerischer Werte, die einen Wert automatisch auf einen angegebenen Mindest- bis Höchstbereich einschränkt
- Ersetzt das bisherige Muster
Math.min(Math.max(x, min), max) in kürzerer und klarerer Form
Stage 1: Vorschläge in der frühen Diskussion
Keep Trailing Zeros
- Eine neue Option für
Intl.NumberFormat, mit der sich das Beibehalten oder Entfernen von Nullen nach dem Dezimalpunkt fein steuern lässt
- Verbessert die Ausdrucksmöglichkeiten in UIs, etwa bei Geldbeträgen oder festen Nachkommastellen
Comparisons
- Ziel ist die Standardisierung einer menschenfreundlichen Darstellung von Werten und der Diff-Ausgabe, ähnlich wie bei
util.inspect in Node.js
- Sorgt für Konsistenz in Test-Frameworks, bei Konsolenausgaben und ähnlichen Bereichen
Random Functions
- Einführung eines neuen
Random-Namespace mit einer Sammlung sicherer und kompakter Funktionen rund um Zufall, Sampling und Shuffle
- Hilft, Off-by-one-Fehler zu vermeiden, und unterstützt verschiedene Erfassungs- und Sampling-Muster auf intuitive Weise
Die Zukunft von Deno und des JavaScript-Ökosystems
- Deno beteiligt sich aktiv an der Standardisierungsdiskussion und übernimmt neue Funktionen schnell in die Praxis
- Beispiele: async context propagation, integriertes OpenTelemetry, neue Muster für Ressourcenmanagement
- Nach September sind weitere TC39-Sitzungen geplant, in denen die Standardisierungsgespräche fortgesetzt werden
- JavaScript-Entwickler werden künftig eine noch leistungsfähigere, sicherere und komfortablere Sprachumgebung erleben können
3 Kommentare
await operations proposal
Wann kommt das endlich...
Wann wird Pattern Matching wohl hinzugefügt?
Es gibt zwar Signals in Stage 1, aber bis zur offiziellen Einführung scheint es noch ein weiter Weg zu sein.