Опубликован релиз 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;
#endifint sqr(int x) { return x * x; }
--world/utils.c:
#if __IMPORTC__
__module world.utils;
#endifint 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 pointauto 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






