Neue Version der Nim-Programmiersprache 0.20

fand statt Veröffentlichung der Systemprogrammiersprache Nim 0.20.0. Die Sprache verwendet statische Typisierung und wurde unter Berücksichtigung von Pascal, C++, Python und Lisp entwickelt. Nim-Quellcode wird in eine C-, C++- oder JavaScript-Darstellung kompiliert. Anschließend wird der resultierende C/C++-Code mit einem beliebigen verfügbaren Compiler (Clang, GCC, ICC, Visual C++) in eine ausführbare Datei kompiliert, wodurch Sie eine Leistung erreichen können, die der von C nahe kommt, wenn Sie die Betriebskosten nicht berücksichtigen der Müllsammler. Ähnlich wie Python verwendet Nim Einrückungen als Blocktrennzeichen. Metaprogrammierungstools und Funktionen zum Erstellen domänenspezifischer Sprachen (DSLs) werden unterstützt. Projektnummer geliefert unter der MIT-Lizenz.

Die Veröffentlichung von Nim 0.20 kann als Veröffentlichungskandidat für die erste stabile Version 1.0 angesehen werden, einschließlich mehrerer kompatibilitätsverletzender Änderungen, die erforderlich sind, um den ersten stabilen Zweig zu bilden, der den Status der Sprache festschreibt. Version 1.0 wird als stabile, langfristig unterstützte Version angepriesen, die garantiert die Abwärtskompatibilität im stabilisierten Teil der Sprache aufrechterhält. Separat wird im Compiler auch ein experimenteller Modus verfügbar sein, in dem neue Funktionen entwickelt werden, die möglicherweise die Abwärtskompatibilität beeinträchtigen.

Von den in Nim 0.20 vorgeschlagenen Änderungen können wir Folgendes hervorheben:

  • „Nicht“ ist nun immer ein unärer Operator, d.h. Ausdrücke wie „assert(not a)“ sind jetzt ungültig und nur „assert not a“ ist zulässig;
  • Harte Prüfungen für die Konvertierung von Ganzzahlen und reellen Zahlen zur Kompilierungszeit sind aktiviert, d. h. Der Ausdruck „const b = uint16(-1)“ führt nun zu einem Fehler, da -1 nicht in einen vorzeichenlosen Ganzzahltyp konvertiert werden kann;
  • Das Entpacken von Tupeln für Konstanten und Schleifenvariablen wird bereitgestellt.
    Beispielsweise können nun Zuweisungen wie „const (d, e) = (7, „eight“)“ und „for (x, y) in f“ verwendet werden;

  • Standardmäßige Initialisierung von Hashes und Tabellen bereitgestellt. Beispielsweise können Sie nach der Deklaration von „var s: HashSet[int]“ sofort „s.incl(5)“ ausführen, was früher zu einem Fehler führte;
  • Der Informationsgehalt von Fehlern bei Problemen im Zusammenhang mit dem „Case“-Operator und Array-Index außerhalb der Grenzen wurde verbessert;
  • Es ist verboten, die Tabellenlänge während der Iteration zu ändern.

Source: opennet.ru

Kommentar hinzufügen