Rilascio del compilatore del linguaggio D 2.111

È stato rilasciato DMD 2.111, il compilatore di riferimento per il linguaggio D. Il codice del compilatore è distribuito sotto licenza open source BSL (Boost Software License). Sono supportati i sistemi Linux, Windows, macOS e FreeBSD.

Il linguaggio D utilizza il typing statico, ha una sintassi simile a C/C++ e offre le prestazioni dei linguaggi compilati. Il linguaggio D eredita anche alcune funzionalità dei linguaggi dinamici, utili per migliorare l'efficienza dello sviluppo e garantire la sicurezza. Ad esempio, supporta: array associativi, definizioni di tipo indiretto, gestione automatica della memoria, strumenti per la programmazione concorrente, template e componenti per la metaprogrammazione. Un garbage collector è disponibile facoltativamente. Nei programmi scritti in linguaggio D è possibile utilizzare librerie scritte in C, così come alcune librerie in C++ e Objective-C.

Il rilascio include modifiche di oltre sei mesi che non sono state incluse nel rilascio 2.110, che era principalmente correttivo e conteneva solo fix. Tra le modifiche nella release 2.111:

  • È stata aggiunta la funzione di profilazione del tempo di compilazione, attivabile tramite il flag «-ftime-trace» nel compilatore DMD. Il compilatore LDC aveva già questa funzionalità. Video con guida per l'uso di time-trace.
  • Il flag del compilatore «-i» ora gestisce correttamente anche i file in linguaggio C.
  • È stata aggiunta la possibilità di utilizzare la sintassi di assegnazione nei mixin: mixin MyMixinTemplate!(Args) myName; // vecchio stile mixin myName = MyMixinTemplate!(Args); // nuovo stile
  • Per i metodi «extern(Objective-C)» ora vengono generati automaticamente gli selector, anche se non è specificato l'attributo «@selector»: extern(Objective-C) extern class NSObject { static NSObject alloc(); // Generato come «alloc» NSObject init(); // Generato come «init» } extern(Objective-C) class Fox : NSObject { bool fluffy; @property bool isFluffy() => fluffy; // «isFluffy» @property void isFluffy(bool value) { fluffy = value; } // «setFluffy:» void yip(int a) @selector(«bark:») { // «bark:» // … } void doSomething(int a, int b, int c) { // «doSomething:b:c:» // … } }
  • È stata aggiunta l'espressione placement «new» per inizializzare con un valore specifico (senza GC). struct S { float d; int i; char c; } … S s; S* p = new (s) S(3.14, 42, ‘X’); // colloca nuovo oggetto in s
  • Nuova parola chiave «__rvalue», che consente di realizzare la semantica move. Utilizzata per aggiungere i primitivi di libreria «move» e «forward».
  • È stato aggiunto il flag «-preview=safer», con l'utilizzo del quale tutte le verifiche applicate nel codice «@safe» vengono attivate per tutto il codice, mentre parti difficili da correggere (come le chiamate a funzioni «@system») saranno comunque consentite in modalità Safer D.
  • Migliorato il supporto per le classi di dati «ref» e «auto ref», che ora possono essere applicate a variabili locali, globali e statiche. I parametri «auto ref» devono essere definiti solo insieme.
  • Incluso l'output degli errori per alcune funzionalità che hanno lo stato di deprecate. Tra queste la sostituzione di «delete» con «destroy», «fallimenti» nei casi multipli «case», auto-inizializzazione delle variabili.
  • La sintassi abbreviata per la definizione dei metodi può ora essere utilizzata anche nei costruttori: struct Number { int x; void vf(int); this(int x) => vf(x); this(float x) => this(cast(int) x); }
  • Nel runtime sono stati aggiunti i binding per Windows a BCrypt.
  • La libreria standard ha implementato l'importazione ODBC 4.0 e sono stati ampliati i metodi per la gestione di Unicode, la cui versione è stata aumentata a 16.
  • Nuovo API per «std.sumtype», dove sono state introdotte tre funzioni: «has!T», «get!T» e «tryGet!T».
  • Nel gestore di pacchetti dub è stato corretto un errore con «cImportPaths».

Inoltre, si può notare lo sviluppo di diversi grandi progetti nel linguaggio D:

Nel settore dello sviluppo videoludico (GameDev) si stanno sviluppando diversi motori: HipremeEngine — un motore cross-platform che, oltre ai principali sistemi desktop Windows/Linux/macOS, supporta iOS/Android/Xbox/WebAssembly/PS Vita. Un altro progetto — Dagon, continua a sviluppare un motore 3D con ampie capacità grafiche.

Nel settore delle librerie grafiche, oltre a OpenGL, si sviluppano il supporto per librerie come SDL (comprese le versioni 3 e 2) e Sokol. La gestione delle immagini grafiche (decoding/encoding) si evolve nel pacchetto gamut, che può lavorare con molti formati. C'è supporto per immagini classiche come PNG, JPEG e BMP, così come formati più moderni come JPEG-XL, QOI e QOIX.

Per la costruzione di interfacce grafiche (GUI) è stata formata una nuova ecosistema di librerie gID, che fornisce binding a molte librerie basate su GObject, inclusa la piena supporto per GTK 3/4, Arrow/Parquet e Adw. Esempi e un elenco delle librerie incluse possono essere trovati nel repository. Inoltre, sta guadagnando popolarità il framework dichiarativo Fluid, adatto per l'uso nei giochi.

Nel settore dello sviluppo web, sulla architettura RISC-V è stato dimostrato il funzionamento del framework Serverino. Questo framework web minimalista e performante senza ulteriori dipendenze può operare su macchine molto deboli, comprese alcune sistemi embedded con poca memoria.

Continua lo sviluppo della libreria per l'animazione 2D in tempo reale — Inochi2D. Tra le recenti novità del progetto sono state presentate librerie separate per la gestione della memoria e un runtime proprietario, che consente di utilizzare molte funzionalità del linguaggio senza garbage collector.

Fonte: opennet.ru

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