Die Version der Systemprogrammiersprache Nim 2.2.8 wurde vorgestellt. Nim ist eine statisch typisierte, kompilierte Programmiersprache mit einer Syntax, die von Python inspiriert ist, und bietet Metaprogrammierungsfunktionen auf Lisp-Niveau. Die Sprache wird in C, C++ und JavaScript kompiliert und gewährleistet eine Leistung auf C-Niveau bei gleichzeitig hoher Ausdruckskraft von Hochsprachen. Der Code des Projekts wird unter der MIT-Lizenz bereitgestellt.
Die Möglichkeiten von Nim umfassen ein auf dem AST basierendes Makrosystem während der Kompilierung, Unterstützung für generische Programmierung mit Konzepten, Mehrfachdispatch, deterministische Speicherverwaltung mit Unterstützung für verschiedene Strategien (ARC/ORC, refc, Markieren-und-Sichten), integrierte Unterstützung für async/await für asynchrones Programmieren und FFI für einfache Integration mit C/C++/JavaScript. Nim wird als Systemsprache positioniert, die für die Entwicklung von eingebetteten Systemen bis hin zu Webanwendungen geeignet ist,Server, mit einem Fokus auf Effizienz, Speichersicherheit und Benutzerfreundlichkeit.
Die Version 2.2.8 wurde vier Monate nach der Version 2.2.6 veröffentlicht und umfasst 89 Commits mit Fehlerbehebungen und Verbesserungen. Die wichtigste Verbesserung dieser Version ist die signifikante Erhöhung der Stabilität des Standard-Speicherallokators bei aktiver Nutzung von Multithreading. Laut den Entwicklern gehört die Notwendigkeit einer Umgehungslösung wie „-d:useMalloc“ für Multithread-Code der Vergangenheit an. Die Benutzer werden gebeten, ihr Feedback zu hinterlassen.
Unter den behobenen Fehlern:
- SIGBUS beim Iterieren über eine konstante Tabelle aufgrund der vorzeitigen Zerstörung von temporären Objekten;
- SIGSEGV mit schließenden Iteratoren;
- falsche Generierung von C-Code bei der Initialisierung von .global innerhalb einer Methode;
- Fehler bei der Verarbeitung von finally in einem schließenden Iterator bei vorhandenem try..except;
- falsches Name Mangling im C++-Stil bei Verwendung von —debuginfo;
- langsame Ausführung von setLen beim Reduzieren der Sequenzgröße aufgrund übermäßiger Speicherbereinigung;
- Fehlende setLenUninit für den Modus „—mm:refc“;
- Hängenbleiben bei der Verarbeitung von Term-Rewriting in großen Dateien;
- SIGSEGV bei der Verwendung von Distinkt-Typen mit Zuordnung in Heap-Objekte im refc-Modus;
- Fehlerhafter Zugriff auf m_type in Hooks für verallgemeinerte Distinct-Typen unter ARC/ORC/ATOMICARC;
- Kompilierungsfehler beim Übergeben eines Tupels mit „items“ aus dem Konzept;
- Rekursive Konzepte führten zu einem Compiler-Segfault;
- Fehlerhafte Generierung von HTTPS-Anfragen über HTTP-Proxy in httpclient;
- Unbestimmtes Verhalten bei der shl-Operation;
- Truncation von langen Ganzzahlliteralen ohne Warnung;
- Compilerabstürze bei einer Reihe fehlerhafter generischer Instanziierungen;
- Ein neuer Modus —styleCheck:warn wurde hinzugefügt.
Quelle: opennet.ru
