Nim 2.2.8, ett systemprogrammeringsspråk, har släppts. Nim är ett statiskt typat, kompilerat programmeringsspråk med Python-inspirerad syntax och Lisp-liknande metaprogrammeringsfunktioner. Det kompilerar till C, C++ och JavaScript, vilket ger prestanda på C-nivå med uttrycksfullheten hos högnivåspråk. Projektets kod är licensierad under MIT-licensen.
Nims funktioner inkluderar ett makrosystem som arbetar på AST vid kompileringstid, stöd för generisk programmering med koncept, multipel dispatch, deterministisk minneshantering med stöd för flera strategier (ARC/ORC, refc, mark-and-sweep), inbyggt async/await-stöd för asynkron programmering och FFI för enkel integration med C/C++/JavaScript. Nim positioneras som ett systemspråk lämpligt för utveckling från inbyggda system till webb.servrar, med betoning på effektivitet, minnessäkerhet och bekvämlighet för utvecklare.
Version 2.2.8 kom fyra månader efter version 2.2.6 och innehåller 89 commits med buggfixar och förbättringar. Versionens huvudsakliga förbättring är en betydande ökning av stabiliteten hos standardminnesallokeraren vid aktiv användning av multitrådning. Enligt utvecklarna är behovet av lösningen "-d:useMalloc" för multitrådad kod ett minne blott. Användare uppmuntras att ge feedback.
Bland de åtgärdade buggarna:
- SIGBUS vid iterering över en konstant tabell på grund av för tidig förstörelse av temporära objekt;
- SIGSEGV med efterföljande iteratorer;
- Felaktig C-kodgenerering vid initialisering av .global inuti en metod;
- fel bearbetning finally vid stängning av iteratorn med try..except;
- Felaktig namnförvrängning i C++-stil när --debuginfo används;
- setLen är långsam när sekvensstorleken minskas på grund av överdriven minnesrensning;
- brist på setLenUninit för läget "—mm:refc";
- Omskrivning av termer hänger sig på stora filer;
- SIGSEGV vid användning av distinkta typer med tilldelning till heap-objekt i refc-läge;
- Felaktig åtkomst till m_type i hooks för generiska distinkta typer under ARC/ORC/ATOMICARC;
- kompilatorn kraschar vid överföring av tupel med "objekt" från konceptet;
- rekursiva koncept orsakade ett kompilatorsegfault;
- Felaktig generering av HTTPS-förfrågningar via HTTP-proxy i httpclient;
- odefinierat beteende i operation shl;
- avkorta långa heltalsliteraler utan varning;
- kompilatorn kraschar med ett antal felaktiga generiska instansieringar;
- tillagt läge —styleCheck:warn.
Källa: opennet.ru
