Rilascio del compilatore del linguaggio D 2.100

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

Il linguaggio D utilizza la tipizzazione statica, ha una sintassi simile a C/C++ e offre le prestazioni dei linguaggi compilati, attingendo però ad alcune utili funzionalità dei linguaggi dinamici in materia di efficienza nello sviluppo e sicurezza. Ad esempio, offre supporto per array associativi, definizione indiretta dei tipi, gestione automatica della memoria, strumenti per la programmazione parallela, un garbage collector opzionale, un sistema di template, componenti per la metaprogrammazione, la possibilità di utilizzare librerie in linguaggio C, e alcune librerie in C++ e Objective-C.

Tra le novità della nuova versione:

  • Il supporto per il vecchio stile di sovraccarico degli operatori utilizzato nel ramo D1 è stato interrotto. Al posto di opNeg, opAdd_r, opAddAssign, ecc., sono ora disponibili opUnary, opBinary, opBinaryRight e opOpAssign. Il vecchio stile di sovraccarico degli operatori è stato dichiarato obsoleto nel 2019 e a partire dalla versione 2.100 genererà un errore.
  • Il supporto per la parola chiave delete, dichiarata obsoleta a partire dal 2018, è stato interrotto. Invece di delete, utilizzare la funzione destroy o core.memory.__delete.
  • È stato implementato un nuovo attributo @mustuse, applicabile ai tipi struct e union come metodo alternativo per la gestione degli errori, quando nel codice non è possibile utilizzare le eccezioni (ad esempio, nei blocchi @nogc). Se l'espressione contrassegnata con l'attributo @mustuse non viene utilizzata nel codice, il compilatore genererà un errore.
  • Per gli array statici, è consentito l'uso della proprietà «.tupleof» per ottenere una sequenza di valori (lvalue) per ogni elemento dell'array. void foo(int, int, int) { /* … */ } int[3] ia = [1, 2, 3]; foo(ia.tupleof); // equivalente a foo(1, 2, 3); float[3] fa; fa.tupleof = ia.tupleof; // semplice assegnazione fa = ia ha generato un errore assert(fa == [1F, 2F, 3F]);

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster