Выпуск кампілятара мовы D 2.100

Распрацоўнікі мовы праграмавання D прадставілі рэліз асноўнага эталоннага кампілятара DMD 2.100.0, які падтрымлівае сістэмы GNU/Linux, Windows, macOS і FreeBSD. Код кампілятара распаўсюджваецца пад свабоднай ліцэнзіяй BSL (Boost Software License).

Мова D выкарыстае статычную тыпізацыю, валодае сінтаксісам, падобным з C/C++, і забяспечвае прадукцыйнасць кампіляваных моў, пры гэтым запазычаючы некаторыя карысныя магчымасці дынамічных моў у вобласці эфектыўнасці распрацоўкі і забеспячэнні бяспекі. Напрыклад, даецца падтрымка асацыятыўных масіваў, ускоснае вызначэнне тыпаў, аўтаматычнае кіраванне памяццю, сродкі паралельнага праграмавання, апцыянальны зборшчык смецця, сістэма шаблонаў, кампаненты для метапраграмавання, магчымасць выкарыстоўваць бібліятэкі на мове C, а таксама некаторыя бібліятэкі на C++ і Objective-C.

Сярод змен у новым выпуску:

  • Спынена падтрымка старога стылю перагрузкі аператараў, які выкарыстоўваецца ў галінцы D1. На змену opNeg, opAdd_r, opAddAssign і да т.п. дашлі opUnary, opBinary, opBinaryRight і opOpAssign. Стары стыль перагрузкі аператараў быў аб'яўлены састарэлым у 2019 годзе і пачынаючы з выпуску 2.100 будзе прыводзіць да высновы памылкі.
  • Спынена падтрымка ключавога слова delete, абвешчанага састарэлым, пачынаючы з 2018 года. Замест delete варта выкарыстоўваць функцыю destroy ці core.memory.__delete.
  • Рэалізаваны новы атрыбут @mustuse, які можа быць ужыты да тыпаў struct і union у якасці альтэрнатыўнага метаду апрацоўкі памылак, калі ў кодзе немагчыма выкарыстоўваць выключэнні (напрыклад, у блоках @nogc). Калі пазначанае атрыбутам @mustuse выраз не выкарыстоўваецца ў кодзе, кампілятар выведзе памылку.
  • Для статычных масіваў дазволена ўжыванне ўласцівасці ".tupleof" для атрымання паслядоўнасці значэнняў (lvalue) кожнага элемента масіва. void foo(int, int, int) { /* … */ } int[3] ia = [1, 2, 3]; foo(ia.tupleof); // аналаг foo(1, 2, 3); float[3] fa; fa.tupleof = ia.tupleof; // простае прысваенне fa = ia прыведзены да памылкі assert(fa == [1F, 2F, 3F]);

Крыніца: opennet.ru

Дадаць каментар