Microsoft entwickelt den TypeScript-Compiler in der Programmiersprache Go neu

Anders Hejlsberg, der Hauptarchitekt von TypeScript und Schöpfer der Programmiersprachen C#, Delphi und Turbo Pascal, hat ein Projekt zur Erstellung eines neuen Compilers für TypeScript — typescript-go (tsgo) — vorgestellt, das in Go entwickelt wird. Wie der alte Compiler wird auch das neue Projekt unter der Apache 2.0-Lizenz veröffentlicht.

Der ursprüngliche TypeScript-Compiler ist in TypeScript geschrieben und wird in JavaScript transpiliert, was Probleme mit der Skalierbarkeit bei der Verwendung in sehr großen Projekten verursacht. Entwickler sind gezwungen, mit langen Ladezeiten und Verzögerungen bei der Codeüberprüfung in integrierten Entwicklungsumgebungen zu leben und opfern dabei den Komfort der Entwicklung, indem sie in Editoren Funktionen zur Codeüberprüfung deaktivieren. In der Ökosystem ist auch ein Bedarf an einem Konsolenwerkzeug entstanden, das eine schnelle Kompilierung des Codes zur Überprüfung seiner Funktionsfähigkeit ermöglicht.

Die Einführung eines nativen Compilers und die Entwicklung von Tools für TypeScript sollen die Build-Geschwindigkeit erheblich steigern, den Speicherverbrauch senken und die Startzeit von Code-Editoren verkürzen. Die hohe Leistung der Tools wird den Entwicklungsprozess in modernen Code-Editoren erleichtern, eine schnelle Codeüberprüfung des gesamten Projekts ermöglichen und fortschrittliche Refactoring- und Analyse-Techniken bieten, deren Umsetzung zuvor aufgrund des Ressourcenverbrauchs zu kostspielig war.

Laut den Entwicklern von TypeScript wird das neue Toolset eine Verringerung der Build-Zeit um das Zehnfache ermöglichen. In seiner aktuellen Form benötigt der neue Compiler tsc 7,5 Sekunden, um den Code-Basis des VS Code-Projekts zu bearbeiten, während der alte Compiler dafür 77,8 Sekunden benötigte. Bei der Code-Basis von Playwright verringerte sich die Ladezeit von 11,1 auf 1,1 Sekunden, bei TypeORM von 17,5 auf 1,3 Sekunden, date-fns von 6,5 auf 0,7 Sekunden, tRPC von 5,5 auf 0,6 Sekunden und rxjs von 1,1 auf 0,1 Sekunden.

Die Entwicklung des neuen Compilers wird seit Oktober 2024 von einem Team von 9 Mitarbeitern bei Microsoft vorangetrieben. Zum aktuellen Stand ist bereits ein funktionierender Prototyp für Testzwecke verfügbar. Eine Vorabversion des neuen Command-Line-Tools mit der neuen Implementierung von tsc, die die Typüberprüfung unterstützt, soll bis zur Jahresmitte veröffentlicht werden. Die erste voll funktionsfähige Version, die in der Lage ist, Projekte zu kompilieren und LSP-Dienste für Entwicklungsumgebungen bereitzustellen, ist für Ende des Jahres vorgesehen.

Der Branch TypeScript 6.x wird weiterhin mit dem alten Compiler geliefert und umfasst separate Änderungen zur Vorbereitung auf die Migration zur neuen Implementierung. Der erste Release, der auf das neue Tool umgestellt wird, ist TypeScript 7. Für einige Zeit werden die Codebasen von TypeScript 6.x und TypeScript 7.x parallel betreut und coexistieren, bis der Branch TypeScript 7 einen reifen Zustand erreicht, der bereit ist, das alte Tool vollständig zu ersetzen.

Vor Beginn der Projektarbeit untersuchten die Entwickler die Möglichkeit, verschiedene Programmiersprachen einzusetzen, und experimentierten mit Prototypen in unterschiedlichen Sprachen. Schließlich fiel die Wahl auf die Programmiersprache Go, da sie sich als optimale Lösung für die Neuimplementierung des Codes des alten Compilers erwies. Im Vergleich zu Sprachen wie Rust ähnelt Go in Semantik und Struktur dem TypeScript, was eine beibehaltene Verwendung bestehender Muster bei der Portierung ermöglicht. Die Verwendung von Go vereinfacht die Übertragung von Änderungen zwischen den Codebasen und reduziert den Aufwand für die gleichzeitige Wartung der alten und neuen Versionen.

Die Programmiersprache Go bietet eine hohe Leistungsfähigkeit, ist auf Multithreading ausgelegt und optimiert für die Nutzung von Mehrkernsystemen. Sie verfügt über eingebaute Schutzmechanismen gegen Speicherprobleme. Der Preis für eine sichere Speicherverwaltung ist ein Garbage Collector, der zu Verzögerungen während der Ausführung führen kann. Für einen Compiler sind solche Verzögerungen jedoch unbedeutend.

Alternativen wie Rust wurden ebenfalls in Betracht gezogen, jedoch unterscheiden sie sich konzeptionell zu stark von TypeScript. Die Verwendung dieser Sprache hätte das Portieren in die Entwicklung eines Compilers von Grund auf verwandelt, was es schwierig gemacht hätte, vollständige Kompatibilität mit dem alten Compiler zu erreichen. Bereits in der alten Codebasis gelöste Probleme müssten neu angegangen werden, was deutlich mehr Zeit und Ressourcen erfordert hätte.

Die Sprache TypeScript erweitert die Möglichkeiten von JavaScript und bleibt dabei vollständig rückwärtskompatibel, was die Migration bestehender Anwendungen nach TypeScript erleichtert. Die endgültige Anwendung in TypeScript wird zu gewöhnlichem JavaScript kompiliert, das in jedem modernen Webbrowser ausgeführt oder mit Plattformen wie Node.js, Bun und Deno verwendet werden kann. Im Gegensatz zu JavaScript bietet TypeScript Mittel zur expliziten Typdefinition sowie Unterstützung für die Verwendung vollständiger Klassen und Module. Die statische Typisierung hilft, viele Fehler während der Entwicklung zu vermeiden, ermöglicht den Einsatz zusätzlicher Optimierungstechniken, vereinfacht das Debugging und macht den Code lesbarer sowie einfacher zu erweitern und zu warten.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster