D-kielen kääntäjän julkaisu 2.100

D-ohjelmointikielen kehittäjät esittelivät julkaisun pääviitekääntäjästä DMD 2.100.0, joka tukee GNU/Linux-, Windows-, macOS- ja FreeBSD-järjestelmiä. Kääntäjäkoodi jaetaan ilmaisella BSL:llä (Boost Software License).

D on staattisesti kirjoitettu, sen syntaksi on samanlainen kuin C/C++, ja se tarjoaa käännettyjen kielten suorituskyvyn, samalla kun se lainaa joitain dynaamisten kielten kehitystehokkuutta ja turvallisuusetuja. Se tukee esimerkiksi assosiatiivisia taulukoita, tyyppipäätelmiä, automaattista muistinhallintaa, rinnakkaisohjelmointia, valinnaista roskakeräystä, mallijärjestelmää, metaohjelmointikomponentteja, mahdollisuuden käyttää C-kirjastoja sekä joitakin C++- ja Objective-C-kirjastoja.

Uuden julkaisun muutoksista:

  • D1-haarassa käytetty vanha operaattorin ylikuormitus on lopetettu. Korvaa opNeg, opAdd_r, opAddAssign jne. tuli opUnary, opBinary, opBinaryRight ja opOpAssign. Vanha operaattorin ylikuormitus poistettiin käytöstä vuonna 2019, ja se aiheuttaa virheen julkaisusta 2.100 alkaen.
  • Poistaavainsana on poistettu käytöstä vuodesta 2018 lähtien. Poistamisen sijaan sinun tulee käyttää tuhoa- tai core.memory.__delete-toimintoa.
  • Uusi @mustuse-attribuutti on otettu käyttöön, jota voidaan soveltaa struct- ja union-tyyppeihin vaihtoehtoisena virheenkäsittelymenetelmänä, kun koodi ei pysty käsittelemään poikkeuksia (esimerkiksi @nogc-lohkoissa). Jos koodissa ei käytetä @mustuse-attribuutilla merkittyä lauseketta, kääntäjä tuottaa virheen.
  • Staattisissa taulukoissa ".tupleof"-ominaisuuden käyttö on sallittua taulukon kunkin elementin arvosekvenssin (lvalue) saamiseksi. void foo(int, int, int) { /* … */ } int[3] ia = [1, 2, 3]; foo(ia.tupleof); // analoginen foo(1, 2, 3); float[3] fa; fa.tupleof = ia.tupleof; // yksinkertainen tehtävä fa = ia johtaa virheeseen assert(fa == [1F, 2F, 3F]);

Lähde: opennet.ru

Lisää kommentti