Compilatore del linguaggio D versione 2.100

Gli sviluppatori del linguaggio di programmazione D hanno presentato il rilascio del compilatore di riferimento principale DMD 2.100.0, che supporta i sistemi GNU/Linux, Windows, macOS e FreeBSD. Il codice del compilatore è distribuito sotto la BSL gratuita (Boost Software License).

D è tipizzato staticamente, ha una sintassi simile a C/C++ e fornisce le prestazioni dei linguaggi compilati, prendendo in prestito alcuni vantaggi in termini di efficienza di sviluppo e sicurezza dei linguaggi dinamici. Ad esempio, fornisce supporto per array associativi, inferenza di tipo, gestione automatica della memoria, programmazione parallela, un garbage collector opzionale, un sistema di modelli, componenti di metaprogrammazione, la possibilità di utilizzare librerie C e alcune librerie C++ e Objective-C.

Tra le novità della nuova release:

  • Il vecchio stile di sovraccarico degli operatori utilizzato nel ramo D1 è stato interrotto. Sostituisce opNeg, opAdd_r, opAddAssign, ecc. sono arrivati ​​opUnary, opBinary, opBinaryRight e opOpAssign. Il vecchio stile di sovraccarico degli operatori è stato deprecato nel 2019 e genererà un errore a partire dalla versione 2.100.
  • La parola chiave delete è stata deprecata dal 2018. Invece di eliminare, dovresti utilizzare la funzione destroy o core.memory.__delete.
  • È stato implementato un nuovo attributo @mustuse che può essere applicato ai tipi struct e union come metodo alternativo di gestione degli errori quando il codice non è in grado di gestire le eccezioni (ad esempio, nei blocchi @nogc). Se un'espressione contrassegnata con l'attributo @mustuse non viene utilizzata nel codice, il compilatore genererà un errore.
  • Per gli array statici è consentito l'utilizzo della proprietà ".tupleof" per ottenere la sequenza di valori (lvalue) di ciascun elemento dell'array. void foo(int, int, int) { /* … */ } int[3] ia = [1, 2, 3]; foo(ia.tupleof); // analogo foo(1, 2, 3); float[3] fa; fa.tupleof = ia.tupleof; // l'assegnazione semplice fa = ia restituisce un errore assert(fa == [1F, 2F, 3F]);

Fonte: opennet.ru

Aggiungi un commento