Nuova versione del linguaggio di programmazione Nim 0.20

ha avuto luogo rilascio del linguaggio di programmazione del sistema Nim 0.20.0. Il linguaggio utilizza la digitazione statica ed è stato creato pensando a Pascal, C++, Python e Lisp. Il codice sorgente Nim è compilato in una rappresentazione C, C++ o JavaScript. Successivamente, il codice C/C++ risultante viene compilato in un file eseguibile utilizzando qualsiasi compilatore disponibile (clang, gcc, icc, Visual C++), che consente di raggiungere prestazioni vicine al C, se non si tengono conto dei costi di esecuzione il netturbino. Similmente a Python, Nim utilizza il rientro come delimitatore di blocco. Sono supportati strumenti e funzionalità di metaprogrammazione per la creazione di linguaggi specifici del dominio (DSL). Codice del progetto in dotazione con licenza MIT.

La versione Nim 0.20 può essere considerata una candidata per la prima versione stabile 1.0, incorporando diverse modifiche rivoluzionarie all'interoperabilità necessarie per formare il primo ramo stabile che impegnerà lo stato del linguaggio. La versione 1.0 è pubblicizzata come una versione stabile con supporto a lungo termine che garantirà il mantenimento della compatibilità con le versioni precedenti nella parte stabilizzata del linguaggio. Separatamente, il compilatore avrà a disposizione anche una modalità sperimentale in cui verranno sviluppate nuove funzionalità che potrebbero interrompere la compatibilità con le versioni precedenti.

Tra le modifiche proposte in Nim 0.20 ci sono:

  • "Not" ora è sempre un operatore unario, cioè espressioni come "assert(not a)" ora non sono consentite ed è consentito solo "assert not a";
  • Abilitati controlli rigorosi per la conversione di numeri interi e numeri reali in fase di compilazione, ad es. l'espressione "const b = uint16(-1)" ora genererà un errore, poiché -1 non può essere convertito in un tipo intero senza segno;
  • Viene fornito il decompressione delle tuple per costanti e variabili di ciclo.
    Ad esempio, ora puoi utilizzare assegnazioni come 'const (d, e) = (7, "otto")" e "for (x, y) in f";

  • Fornita l'inizializzazione predefinita di hash e tabelle. Ad esempio, dopo aver dichiarato “var s: HashSet[int]” è possibile eseguire immediatamente “s.incl(5)”, che in precedenza portava a un errore;
  • Migliorate le informazioni sugli errori per problemi legati all'operatore "case" e all'indice dell'array fuori dai limiti;
  • È vietato modificare la lunghezza della tabella durante l'iterazione.

Fonte: opennet.ru

Aggiungi un commento