Im Rahmen der Entwicklung der Version 3.0 der Programmiersprache Nim wird an einem aktualisierten Compiler gearbeitet, der das Zwischenformat NIF (Nim Intermediate Format) verwendet. Der neue Compiler wird mehrere technische Herausforderungen angehen, darunter die Verbesserung der inkrementellen Kompilierung und die Vereinfachung des Abhängigkeitsmanagements zwischen Modulen. Ein Veröffentlichungstermin für Nim 3.0 steht noch nicht fest.
Laut der im Projekt-Repository veröffentlichten NIF-Spezifikation ermöglicht das neue Format die Speicherung von Code als abstrakter Syntaxbaum (AST), wobei Namensräume für integrierte Konstrukte und benutzerdefinierte Namen getrennt werden. Dies bietet Flexibilität beim Hinzufügen neuer Schlüsselwörter und vereinfacht die Integration mit Entwicklungstools.
Der Compiler von Nim 3.0 wird in mehrere Phasen unterteilt:
- Nifler — Umwandlung des Nim-Quellcodes in NIF unter Berücksichtigung von Konfigurationsdateien.
- Nimony — Semantische Analyse, einschließlich Typüberprüfung und Makroauflösung.
- Hexer — Code-Optimierung, einschließlich Inlining von Iteratoren und Unterstützung für das Speichermanagement (ARC/ORC).
- NIFC – Code-Generierung für C/C++ unter Berücksichtigung der Besonderheiten der Zielplattform.
Die wichtigsten Verbesserungen umfassen:
- Inkrementelles Bauen, das die Kompilierung bei teilweisen Codeänderungen beschleunigt.
- Verzicht auf die Notwendigkeit, Prozeduren und Typen im Voraus zu deklarieren.
- Unterstützung für zyklische Abhängigkeiten zwischen Modulen.
- Typüberprüfung für Generics zur Compile-Zeit.
- Behebung von Fehlern in den Kompilierungsphasen, wie z. B. falsche Aufrufe von Destruktoren.
In der Spezifikation wird auch hervorgehoben, dass NIF Informationen über die Positionen der Codeelemente (Zeilen- und Spaltennummern) speichert, was das Debuggen und die Integration mit IDEs erleichtert.
Die Nim-Sprache ist auf die Lösung von Systemprogrammierungsaufgaben ausgerichtet, verwendet statische Typisierung und wurde mit Blick auf Sprachen wie Python, Ada und Modula entwickelt. Der Quellcode in Nim wird in C-, C++-, Objective-C- oder JavaScript-Code kompiliert. Der erzeugte C/C++-Code kann anschließend mithilfe eines beliebigen verfügbaren Compilers (clang, gcc, icc, Visual C++) in eine ausführbare Datei übersetzt werden, was eine Performance nahe C ermöglicht, sofern man die Kosten der Garbage Collection außer Acht lässt. Ähnlich wie in Python werden in Nim Einrückungen als Blockseparatoren verwendet. Es werden Metaprogrammierungsmittel unterstützt und es gibt Möglichkeiten zur Erstellung von domänenspezifischen Sprachen (DSL). Der Code des Projekts wird unter der MIT-Lizenz bereitgestellt.
Quelle: opennet.ru
