rilascio del linguaggio di programmazione di sistema . Il linguaggio utilizza la tipizzazione statica ed è ispirato a Pascal, C++, Python e Lisp. Il codice sorgente scritto in Nim viene compilato in una rappresentazione C, C++ o JavaScript. Successivamente, il codice C/C++ generato viene compilato in un file eseguibile tramite un qualsiasi compilatore disponibile (clang, gcc, icc, Visual C++), permettendo di raggiungere prestazioni vicine a quelle del C, escludendo il costo dell'esecuzione del garbage collector. Analogamente a Python, in Nim si usano gli spazi per delimitare i blocchi. Sono supportati strumenti di metaprogrammazione e funzionalità per la creazione di linguaggi specifici per il dominio (DSL). Codice del progetto sotto licenza MIT.
Il rilascio di Nim 0.20 può essere considerato un candidato per il rilascio della prima versione stabile 1.0, includendo diverse modifiche che rompono la compatibilità, necessarie per formare il primo ramo stabile che fissi lo stato del linguaggio. La versione 1.0 viene presentata come un rilascio stabile con un lungo periodo di supporto, per il quale sarà garantita la retrocompatibilità nella parte stabilizzata del linguaggio. Inoltre, nel compilatore sarà disponibile una modalità sperimentale in cui si svilupperanno nuove funzionalità che potrebbero rompere la retrocompatibilità.
Tra le modifiche proposte in Nim 0.20 si possono evidenziare:
- «Not» ora è sempre un operatore unario, cioè espressioni del tipo «assert(not a)» ora non sono ammesse e si può utilizzare solo l'indicazione «assert not a»;
- Sono state incluse verifiche rigorose per la conversione tra interi e numeri in virgola mobile durante la fase di compilazione, cioè l'espressione «const b = uint16(-1)» ora genererà un errore, poiché -1 non può essere convertito in un tipo intero non firmato;
- È garantita la decompressione delle tuple per costanti e variabili di ciclo.
Ad esempio, ora è possibile utilizzare assegnamenti come ‘const (d, e) = (7, “otto”)’ e «for (x, y) in f»; - È garantita l'inizializzazione predefinita per gli hash e le tabelle. Ad esempio, dopo la dichiarazione «var s: HashSet[int]», è possibile eseguire immediatamente «s.incl(5)», il che prima generava un errore;
- Migliorata l'informatività degli errori per problemi legati all'operatore «case» e all'uscita dai limiti dell'indice dell'array;
- Non è consentita la modifica della lunghezza della tabella durante l'iterazione.
Fonte: opennet.ru
