È stato rilasciato Nim 2.2.8, un linguaggio di programmazione per sistemi. Nim è un linguaggio di programmazione compilato e staticamente tipizzato, con sintassi ispirata a Python e funzionalità di metaprogrammazione simili a Lisp. È compilabile in C, C++ e JavaScript, offrendo prestazioni di livello C con l'espressività dei linguaggi di alto livello. Il codice del progetto è rilasciato con licenza MIT.
Le caratteristiche di Nim includono un sistema di macro che operano sull'AST in fase di compilazione, supporto per la programmazione generica con concetti, dispatch multiplo, gestione deterministica della memoria con supporto per diverse strategie (ARC/ORC, refc, mark-and-sweep), supporto integrato per async/await per la programmazione asincrona e FFI per una facile integrazione con C/C++/JavaScript. Nim si posiziona come un linguaggio di sistema adatto allo sviluppo, dai sistemi embedded al web.server, con particolare attenzione all'efficienza, alla sicurezza della memoria e alla praticità per gli sviluppatori.
La versione 2.2.8 è arrivata quattro mesi dopo la versione 2.2.6 e include 89 commit con correzioni di bug e miglioramenti. Il miglioramento principale della versione è un significativo aumento della stabilità dell'allocatore di memoria predefinito quando si utilizza attivamente il multithreading. Secondo gli sviluppatori, la necessità di ricorrere alla soluzione alternativa "-d:useMalloc" per il codice multithreading è ormai un ricordo del passato. Gli utenti sono invitati a fornire feedback.
Tra i bug risolti:
- SIGBUS durante l'iterazione su una tabella costante a causa della distruzione prematura di oggetti temporanei;
- SIGSEGV con iteratori finali;
- Generazione errata del codice C durante l'inizializzazione di .global all'interno di un metodo;
- errore durante l'elaborazione finale nella chiusura dell'iteratore con try..except;
- Modifica errata del nome in stile C++ quando si utilizza --debuginfo;
- setLen è lento quando diminuisce la dimensione della sequenza a causa dell'eccessiva cancellazione della memoria;
- mancanza di setLenUninit per la modalità "—mm:refc";
- L'elaborazione della riscrittura dei termini si blocca sui file di grandi dimensioni;
- SIGSEGV quando si utilizzano tipi distinti con assegnazione agli oggetti heap in modalità refc;
- Accesso non corretto a m_type negli hook per tipi distinti generici in ARC/ORC/ATOMICARC;
- crash del compilatore durante il passaggio di una tupla con "elementi" dal concetto;
- i concetti ricorsivi hanno causato un segfault del compilatore;
- Generazione errata di richieste HTTPS tramite proxy HTTP in httpclient;
- comportamento indefinito nell'operazione shl;
- tronca i letterali interi lunghi senza preavviso;
- il compilatore si blocca con una serie di istanziazioni generiche errate;
- modalità aggiunta —styleCheck:warn.
Fonte: opennet.ru
