Адрес: ул. Б. Очаковская 32 Москва Россия
Наши официальные канал и чат в telegram

DMD 2.111: новый компилятор для языка D с улучшенным профилированием

Выпущен DMD 2.111 — компилятор для языка D с функцией профилирования сборки, поддержкой ODBC 4.0 и Unicode 16

Новости собранные из разных RSS источников
admin
Site Admin
Сообщения: 69
Зарегистрирован: Вт ноя 08, 2022 3:27 pm
Благодарил (а): 32 раза
Поблагодарили: 19 раз

DMD 2.111: новый компилятор для языка D с улучшенным профилированием

Сообщение admin »

DMD 2.111: новый компилятор для языка D с улучшенным профилированием
Опубликован релиз 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)
    extern class NSObject {
        static NSObject alloc(); // Генерируется как "alloc"
        NSObject init(); // Генерируется как "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
    S* p = new (s) S(3.14, 42, 'X');
    
    Новое ключевое слово "__rvalue", позволяющее реализовать move-семантику. Использовано для добавления библиотечных примитивов "move" и "forward".

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

    Включён вывод ошибок для некоторых возможностей, имеющих статус устаревших. Среди них замена "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-движка с обширными возможностями графики. В области графических библиотек, помимо OpenGL, развивается поддержку таких библиотек как SDL (включая 3 и 2 версии) и Sokol. Работа с графическими изображениями (decoding/encoding) развивается в пакете gamut, который умеет работать со множеством форматов. Есть поддержка как классических изображений PNG, JPEG и BMP, так и более современных JPEG-XL, QOI и QOIX.

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

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

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

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