Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram
Поднимем Devuan на вершину Distrowatch! Просто перейдите по ссылке один раз в день.

Выпуск компилятора языка D 2.113

Новости собранные из разных RSS источников
Аватара пользователя
root:#
Site Admin
Сообщения: 2430
Зарегистрирован: Вт ноя 08, 2022 3:27 pm
Благодарил (а): 60 раз
Поблагодарили: 28 раз

Выпуск компилятора языка D 2.113

Сообщение root:# »

Выпуск компилятора языка D 2.113
Опубликован релиз DMD 2.113, эталонного компилятора для языка D. Код компилятора распространяется под свободной лицензией BSL (Boost Software License). Поддерживаются системы Linux, Windows, macOS и FreeBSD. Язык D использует статическую типизацию, обладает синтаксисом, схожим с C/C++, и обеспечивает производительность компилируемых языков. Язык D также заимствует некоторые возможности динамических языков, полезные для повышения эффективности разработки и обеспечения безопасности. Например, имеется поддержка: ассоциативных массивов, косвенного определения типов, автоматического управления памятью, средств параллельного программирования, шаблонов, компонентов для метапрограммирования. Опционально доступен сборщик мусора. В программах на языке D можно использовать библиотеки на языке C, а также некоторые библиотеки на C++ и Objective-C. Среди изменений в выпуске 2.113:
  • Новый экспериментальный движок Data Flow Analysis ("-preview=fastdfa"), который пытается отслеживать состояние переменных по ходу выполнения функции. Движок анализирует может ли указатель быть null, инициализирована ли переменная, какие значения переменная потенциально может иметь и как состояние меняется после выражений "if", циклов и присваиваний. Также он обнаруживает чтение неинициализированных переменных. Причём анализ умеет проходить через указатели: void readFromUninit() @system { int val1 = void; int val2 = val1; // error int* ptr = &val1; int val3 = *ptr; // error } Добавлен новый типаж, обрабатываемый на этапе компиляции (compile-time trait) "__traits(needsDestruction, T)", который позволяет определять типы, требующие сложного уничтожения. class C { ~this(); } struct S { ~this(); } static assert(!__traits(needsDestruction, C)); static assert(__traits(needsDestruction, S)); static assert(!__traits(needsDestruction, S[0])); static assert(__traits(needsDestruction, S[1])); Появилась опциональная проверка, производимая на этапе выполнения, "-check=nullderef=on", позволяющая вместо состояния "crash" получить контролируемую ошибку, которую можно обработать через механизмы core.exception. Добавлен вывод длины статических массивов. Используя символ "$", вывод длины будет происходить автоматически: int[$] arr = [1, 2, 3]; // int[3] arr = [1, 2, 3]; Улучшена реализация "pragma(inline, true)" - компилятор теперь рассматривает такие функции в отдельной стадии "inlining", что важно для высокопроизводительного и шаблонного кода. Улучшен режим диагностики "-vgc", который отслеживает операции, требующие выделения памяти через сборщик мусора. В новой версии реализовано точное определение местоположения вложенной функции и переменной, из-за которых создаётся замыкание (closure). Добавлен новый синтаксис "with(auto x = expression())", который можно применять когда результат выражения нужно временно использовать как объект контекста. Появился механизм для перехвата необработанных исключений, которые выходят за пределы потока. Например, можно глобально или для конкретного потока перехватить исключение и решить, что с ним делать до остановки выполнения из-за фатальной ошибки: логировать; завершить процесс;- передать дальше; выполнить собственную runtime policy. filterThreadThrowableHandler = (ref Throwable t) { ... }; В пакетный менеджер dub добавлена опция "-timeout для использования "dustmite" - инструмента по поиску минимального кода с примером проблемного поведения компилятора.
На основе DMD 2.113 выпущен компилятор LDC 1.43, в который добавлено множество улучшений.
  • Реализована поддержка LLVM 22. Существенно улучшена поддержка "WebAssembly". Добавлены поддержка сборщика мусора и исключений. Теперь "DRuntime" и "Phobos" (стандартная библиотека) поддерживают WASI Preview 1, WASI Preview 2 и Emscripten. Кросс-компиляция в "LDC" стала проще и появились готовые дополнения, которые можно указывать при сборке через опцию "-mtriple=" Windows x86_64-windows-msvc i686-windows-msvc Android aarch64-linux-android30 armv7a-linux-androideabi29 x86_64-linux-android29 i686-linux-android29 WASI wasm32-unknown-wasip1 wasm32-unknown-wasip2 Emscripten wasm32-unknown-emscripten Оператор @restrict теперь работает для динамических массивов, что помогает делать авто-векторизацию: @ldc.attributes.restrict float[] foo(float[] a, float[] b) { float[] c; c[] = a[] * b[]; return c; } Улучшена поддержка встроенного ассемблера в стиле "DMD": "asm { naked; }", для которого реализована возможность применять встроенные в компилятор оптимизации, включая "LTO". В "LDC" добавлена поддержка "dcompute", который теперь умеет внутри вызывать "PTX" и "SPIR-V" для работы на GPU. Ведётся работа по поддержке графических API "metal" и "directx".
Дополнительно можно отметить разработку ряда интересных проектов на языке D:
  • В области разработки игр (GameDev) были следующие обновления: в движке Parin улучшена поддержка WASM и добавлены примеры для WASI. В Steam выпущена демонстрация новой игры Rhythm Game Studio, реализованная на D с использованием "SDL3". В области веб-разработки представлен проект crate, упрощающий разработку CRUD веб-приложений. Проект по описанной модели данных позволяет автоматически создавать интерфейсы для протоколов REST, JSON:API, GraphQL и MCP. В области графических интерфейсов разрабатывается написанный на языке D порт "XOrg/XLibre" - xenia. Графический тулкит Sciter получил возможность использовать D вместе с логикой на JS/HTML. Для работы с аудио появились нативные обвязки для LV2 и JACK Audio Connection Kit. Для профессиональных разработчиков аудио-плагинов продолжается развитие библиотеки dplug. Представлен проект синтезатора звука на WASM4. Улучшена поддержка системы сборки Bazel, что упростило сборку смешанных приложений с кодом на C++. Представлены приложения, упрощающие работу с ключами шифрования: neverstored и hideout. В сентябре в Лондоне прошла конференция Dconf2026. Представлены доклады о развитии языка D и проектах, связанных с ним.

Источник: https://www.opennet.ru/opennews/art.shtml?num=66399