Последние версии компиляторов D

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Группа разработчиков LDC закрыла ушедший год версией 1.19.0 компилятора D, использующего LLVM, а основная команда начала новый год версией 2.090.0 эталонного компилятора DMD. И если вы еще не слышали, не так давно появились важные новости о D-компиляторе на базе GCC, GDC. Наверстываем!

LDC 1.19.0


Этот релиз содержит обновление компилятора LDC до версии D фронтэнда 2.089.1, которая была текущей версией на момент выпуска, сразу после католического Рождества. Собранные сборки основаны на LLVM 9.01.

Среди основных моментов в этом релизе — некоторая симпатия к Android. Готовая библиотека DRuntime/Phobos теперь доступна для всех Android таргетов. Этот релиз может использоваться в сочетании с проектом D Android Адама Руппе, сборником вспомогательных программ и интерфейсов, сейчас в бете близкой к завершению, для разработки на D под Android с LDC.

Пользователи Windows обнаружат, что поставляемые в комплекте библиотеки линковки на базе MinGW были обновлены. Теперь они являются производными от файлов .def из пакета MinGW-w64 7.0.0. Эти библиотеки позволяют использовать системные библиотеки Windows без необходимости установки Windows SDK.

DMD 2.090.0


Последняя версия DMD была объявлена 7 января. Она вышла с 10 крупными изменениями и 71 закрытым багом, любезно предоставленными 48 соавторами.

С этим релизом теперь возможно больше с lazy-параметрами. D давно поддерживает ленивые параметры:
Аргумент lazy-параметра не вычисляется до вызова функции. Аргумент обрабатывается только если/когда параметр вычисляется внутри функции.
Следовательно, lazy-аргумент может быть выполнен 0 или более раз.
Под капотом они реализуются как делегаты. Теперь можно добраться до базового делегата, взяв адрес параметра, что ранее было запрещено.

import std.stdio;

void chillax(lazy int x)
{
    auto dg = &x;
    assert(dg() == 10);
    writeln(x);
}

void main()
{
    chillax(2 * 5);
}

Этот релиз также делает устаревшей идиому D, используемую теми, кто сталкивается с необходимостью различать финализацию (недетерминистическое разрушение объектов, обычно инициируемое сборщиком мусора) и нормальную деструкцию (детерминистическое разрушение объектов) изнутри деструктора класса или структуры.

При нынешнем состоянии GC, осуществление любых GC-операций во время финализации запрещено. Однако в D не предусмотрены раздельные финализаторы и деструкторы. Существует только ~this, который называется деструктором, несмотря на то, что исполняет обе роли. Это иногда создает трудности при реализации деструкторов для типов, которые предназначены как для GC, так и для не-GC аллокаторов. Любое обращение к GC при очистке может привести к ошибке InvalidMemoryOperationError. Отсюда вытекает необходимость вышеупомянутого обходного пути.

Теперь можно вызвать статическую функцию GC, core.memory.GC.inFinalizer, чтобы получить ваше состояние в деструкторе. Она возвращает true, если текущий поток выполняет финализацию, и в этом случае вы не желаете совершать никаких действий, затрагивающих операции с GC. (Я ждал чего-то подобного, прежде чем писать следующую статью в моей серии про GC).

GDC


Благодаря упорному труду Иена Буклау, Йоханнеса Пфау и всех волонтеров, которые поддерживали и вносили свой вклад на протяжении многих лет, GDC был принят в GCC 9 в конце 2018 года и стал доступен в составе комплекта GCC 9.1, выпущенного в мае прошлого года. GCC 9.2 был выпущен в августе прошлого года. Эта версия GDC реализует версию 2.076 фронтенда D. Вы можете собрать ее самостоятельно или установить оттуда же, откуда вы обычно берете GCC 9.x.

От переводчика


Данный выпуск блога практически полностью перекрыл блок из готовящейся статьи по надежному программированию, посвященной в т.ч.D, ну за исключением критики и состоянию дел с IDE, потому подвернулся исключительно удачно.
Источник: https://habr.com/ru/post/483440/


Интересные статьи

Интересные статьи

Статья о том, как упорядочить найм1. Информируем о вакансии2. Ведём до найма3. Автоматизируем скучное4. Оформляем и выводим на работу5. Отчитываемся по итогам6. Помогаем с адаптацией...
На днях представлен релиз языка программирования Go 1.15. Как известно, изначально это был проект компании Google, который вышел за пределы корпорации и стал развиваться при подд...
Но если для интернет-магазина, разработанного 3–4 года назад «современные» ошибки вполне простительны потому что перед разработчиками «в те далекие времена» не стояло таких задач, то в магазинах, сдел...
Бизнес-смыслы появились в Битриксе в начале 2016 года, но мало кто понимает, как их правильно использовать для удобной настройки интернет-магазинов.
В 1С Битрикс есть специальные сущности под названием “Информационные блоки, сокращенно (инфоблоки)“, я думаю каждый с ними знаком, но не каждый понимает, что это такое и для чего они нужны