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

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

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

Выпуск включает множество изменений за более чем полугодовой период, которые не вошли в предыдущий релиз 2.110, который скорее являлся корректирующим и содержащим только исправления. Среди изменений в выпуске 2.111:

  • Добавлена функция профилирования времени сборки, включаемая через флаг »-ftime-trace» в DMD. Компилятор LDC уже обладал этой функцией. видео с руководством по использовании time-trace.

  • Флаг компилятора »-i» теперь корректно обрабатывает и файлы на языке Си.

  • Шаблонные миксины теперь могут использовать синтаксис присваивания:
        mixin MyMixinTemplate!(Args) myName; // старый стиль
        mixin myName = MyMixinTemplate!(Args); // новый стиль
    
  • Для методов «extern (Objective-C)» теперь автоматически генерируются селекторы, даже если не указан аттрибут »@selector»:
       extern(Objective-C) 
       extern class NSObject {
           static NSObject alloc(); // Generates as "alloc"
           NSObject init(); // Generates as "init"
       }
    
       extern(Objective-C)
       class Fox : NSObject {
           bool fluffy;
    
           @property bool isFluffy() => fluffy; // "isFluffy"
           @property void isFluffy(bool value) { fluffy = value; } // "setFluffy:"
    
           void yip(int a) @selector("bark:") { // "bark:"
               // ...
           }
       
           void doSomething(int a, int b, int c) { // "doSomething:b:c:"
               // ...
           }
       }
    
  • Добавлено placement-выражение «new» для инициализации указанным значением (без GC).
       struct S
       {
           float d;
           int i;
           char c;
       }
      ... 
       S s;
       S* p = new (s) S(3.14, 42, 'X'); // place new object into s
    
  • Новое ключевое слово »__rvalue», позволяющее реализовать move-семантику, использовано для добавления библиотечных примитивов «move» и «forward».

  • Добавлен флаг »-preview=safer», при использовании которого все проверки применяемые в коде »@safe» включаются для всего кода, при этом трудно исправимые части (такие как вызов функций »@system») будут всё ещё разрешены в этом режиме Safer D.

  • Улучшена поддержка классов данных «ref» и «auto ref», которые теперь могут применяться к локальным, глобальных и статическим переменным. Параметры «auto ref» должны теперь определяться только вместе.

  • Реализованы и будут вызывать ошибки несколько изменений, связанные с присвоением статуса «deprecated». Среди них замена «delete» на «destroy», «проваливания» в многозначных «case», самоинициализация переменных.

  • Укороченный синтаксис для определения методов теперь можно использовать и в конструкторах:
       struct Number 
       {
           int x;
    
           void vf(int);
           this(int x) => vf(x);
           this(float x) => this(cast(int) x);
       }
    
  • В runtime добавлены Windows-байндинги к BCrypt.

  • В стандартной библиотеке реализован импорт ODBC 4.0 и расширены методы работы с Unicode, версия которого была увеличена до 16.

  • Новый API для «std.sumtype», где появились три функции «has! T», «get! T» и «tryGet! T».

  • В пакетном менеджере dub исправлена ошибка с «cImportPaths».

Дополнительно можно отметить, что продолжают развиваться крупные проекты с использованием D по разным направлениям:

В области разработки игр (GameDev) развиваются несколько движков. HipremeEngine кросс-платформенный движок, который помимо основных десктопных систем Windows/Linux/macOS поддерживает также iOS/Android/Xbox/WebAssembly/PS Vita. Другой проект — Dagon продолжает развитие 3D движка с обширными возможностями графики.

Графические библиотеки также имеют отличную поддержку в D, где помимо стандартной поддержки OpenGL, развивается поддержку таких библиотек как SDL (включая 3 и 2 версии) и Sokol. Работа с графическими изображениями (decoding/encoding) активно развивается в пакете gamut, который умеет работать с множеством форматов. Есть поддержка как классических PNG, JPEG и BMP, так и более современных JPEG-XL, QOI и QOIX.

В области графических пользовательских интерфейсов (GUI) сформирвоана новая экосистема библиотек gID, предоставляющая обвязки к многим библиотекам, основанным на GObject, включая полную поддержку GTK ¾, Arrow/Parquet, Adw и других. Примеры и список входящих библиотек можно найти в репозитории. Также набирает популярность декларативный фреймворк с применением в играх Fluid.

В области веб-разработки на RISC-V архитектуре продемонстрирована работа фреймворка Serverino. Этот минималистичный и производительный веб-фреймворк без других зависимостей может работать на очень слабых машинах, включая некоторые встраиваемые системы без большого объёма памяти.

Продолжается развитие библиотеки для кукольной 2D-анимации в реальном времени — Inochi2D. Среди недавних новшеств проекта были представлены отдельные библиотеки управления памятью и собственный runtime, которые позволяют использовать многие возможности языка без сборщика мусора.



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

OpenNet прочитано 10573 раза