[ON] Выпуск компилятора языка D 2.112

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6001
ОС: gnu/linux

[ON] Выпуск компилятора языка D 2.112

Сообщение rssbot »

Опубликован релиз DMD 2.112, эталонного компилятора для языка D. Код компилятора распространяется под свободной лицензией BSL (Boost Software License). Поддерживаются системы Linux, Windows, macOS и FreeBSD.


Язык D использует статическую типизацию, обладает синтаксисом, схожим с C/C++, и обеспечивает производительность компилируемых языков. Язык D также заимствует некоторые возможности динамических языков, полезные для повышения эффективности разработки и обеспечения безопасности. Например, имеется поддержка: ассоциативных массивов, косвенного определения типов, автоматического управления памятью, средств параллельного программирования, шаблонов, компонентов для метапрограммирования. Опционально доступен сборщик мусора. В программах на языке D можно использовать библиотеки на языке C, а также некоторые библиотеки на C++ и Objective-C.


Среди изменений в выпуске 2.112:
  • Операции над Ассоциативным массивом (хэшмап) реализованы через шаблоны.
  • Битовые поля включены в язык и теперь не нужно использовать отдельный "-preview=bitfields".
  • Висящие операторы "else", указанные без выделения блока фигурными скобками, теперь будет выдавать ошибку вместо предупреждения:

    Код:

    int i, j;
    if (i)
    if (j)
    return 1;
    else
    // Error: else is dangling, add { } after condition `if (i)`
    return 2;
  • Добавлен новый ключ "-extI" для указания внешних путей импорта, который аналогичен параметру пути импорта (-I), за исключением указания на то, что найденный с его помощью модуль находится вне компилируемого в данный момент исполняемого файла. В Windows он используется, когда параметр переопределения dllimport установлен на любое значение, кроме "none", чтобы принудительно импортировать символы внешнего модуля с помощью DllImport.
  • Добавлены модули для C-файлов. Подобно расширению "__import", ключевое слово "__module" переносит объявление модулей из языка D в язык C. Это особенно полезно, когда необходимо импортировать несколько C-файлов с одинаковым именем (например, hello/utils.c и world/utils.c), поскольку оба файла должны быть импортированы с помощью import utils, когда они указаны в командной строке, что приводит к конфликтам.

    Код:


    --hello/utils.c:

    #if __IMPORTC__
    __module hello.utils;
    #endif

    int sqr(int x) { return x * x; }

    --world/utils.c:

    #if __IMPORTC__
    __module world.utils;
    #endif

    int max(int a, int b) { return a > b ? a : b; }

    --app.d:

    import hello.utils;
    import world.utils;

    static assert(sqr(3) == 9);
    static assert(max(3, 5) == 5);
  • Объявлено устаревшим неявное преобразование целых чисел в присваивании значений типа "int op= float".
    Это сделано для предотвращения потенциальных ошибок, когда присваивание "op=" неявно обрезает правую часть выражения от ненулевого значения до нуля.

    Код:

    uint a;
    float b = 0.1;
    a += b; // Deprecation: `uint += float` is performing truncating conversion
  • В runtime добавлены несколько новых шаблонных реализаций.
  • Исправлены ошибки связанные с недокументированным изменением в ABI macOS 15.4.
  • С-макросы теперь преобразуются в шаблоны при работе "ImportC":

    Код:

    import core.sys.posix.stdlib;
    import core.sys.posix.unistd;

    extern(C) int main()
    {
    int status, pid = vfork();
    if (pid == 0)
    {
    // ...
    return 0;
    }

    waitpid(pid, &status, 0);
    if (WIFEXITED(status))
    {
    // ...
    }
    return 0;
    }
  • В стандартной библиотеке реализована функция "lazyCache", которая предоставляет механизм кэширования диапазонов с отложенной оценкой. В отличие от cache, который немедленно оценивает элементы диапазона во время его создания, lazyCache откладывает оценку до тех пор, пока элементы не будут явно запрошены.

    Код:

    auto result = iota(-4, 5).map!(a => tuple(a, expensiveComputation(a)))().lazyCache();
    // No computations performed at this point

    auto firstElement = result.front;
    // First element is now evaluated
  • Улучшена обратная совместимость "getrandom()" на старых версиях Linux и других системах.
  • "std.uni" обновлена до поддержки Unicode 17.
  • В "std.uuid" добавлена поддержка uuid v7 .
  • Новый API для "std.conv", где появились три функции "writeText", "writeWText" и "writeDText".
  • В пакетный менеджер dub добавлена опция "-dest и ключ frameworks.

    Код:

    --Было:

    lflags "-framework" "Cocoa"

    --Теперь можно:
    frameworks "Cocoa" "OpenGL"

Дополнительно можно отметить разработку ряда интересных проектов на языке D:
  • В области разработки игр (GameDev) были следующие обновления: в dvn, движок для создания визуальных новелл, добавлены примеры использования. В порт движка Godot добавлена экспериментальная поддержка экспорта в Web. В Steam выпущена игра The Art of Reflection, реализованная с использованием технологий D и DirectX на собственном движке.
  • В области веб-разработки развивается легковесный планировщик файберов photon, который показал высокие результаты в тесте производительности TechEmpower и вошёл в топ 10 результатов по нескольким тестам (Plaintest, JSON). Данный движок был интегрирован в популярный веб-фреймворк Vibe.D, в результате чего удалось добиться прироста производительности без изменения кода веб-приложений.
  • После анонса о начале разработки нового сборщика мусора на конференции Dconf (видео1, видео2), данное обновление вошло в новый релиз. Новый GC также можно попробовать установить в качестве отдельного пакета. На данный момент поддерживается архитектура x86_64 для OC Linux и Windows. Продолжается работа над поддержкой macOS и других архитектур.


Источник: https://www.opennet.ru/opennews/art.shtml?num=64671
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 27.01.2026 07:19, всего редактировалось 1 раз.
Причина: Updated upstream
Спасибо сказали: