Вышла (http://forum.dlang.org/thread/mq9ohk$1c1r$1@digitalmars.com) версия 2.068 кроссплатформенного компилятора языка программирования D (http://ru.wikipedia.org/wiki/D_%28%D1%8F%...: Digital Mars D (DMD (http://dlang.org/)). D — это компилируемый в машинный код язык из семейства си‐подобных, включающий в себя опциональный сборщик мусора, мощную систему метапрограммирования, удобные шаблоны, исполнение D-кода во время компиляции, систему модулей вместо «include». D позволяет без труда использовать библиотеки на языке C, а также имеет возможность использовать некоторые C++-библиотеки и ObjC-библиотеки. Компилятор DDMD поддерживает системы GNU/Linux, Windows, OS X, FreeBSD, и архитектуры x86, x86_64, x64.Основные изменения и новшества версии 2.068:
- Изменения в компиляторе:
- Новый ключ командной строки "-profile=gc" позволяет профилировать выделение памяти.
- Блоки юниттестов (unittest) больше не парсятся, пока не задан ключ командной строки "-unittest".
- Сгенерированые компилятором деструкторы и постблиттеры (postblitter) теперь доступны по именам «__xdtor» и «__xpostblit».
- Изменения в языке:
- Добавлена директива pragma(inline), для указания компилятору на то, что некоторые функции следует инлайнить всегда «pragma(inline, true)» или использовать для них обычные правила «pragma(inline, false)».
- Для функций, тип возвращаемого значения у которых указан как auto, компилятор теперь будет автоматически выводить атрибуты pure, @safe, nothrow, @nogc (раньше это делалось только для шаблонов).
- Парcер теперь позволяет использовать индексированные туплы (структура, существующая только во время компиляции и позволяющая хранить типы) как декларации типов: «T[0].S myvar;». Подробнее см. в http://dlang.org/changelog.html#index-type-followed-ident (описании).
- Аргументы шаблонов теперь могут быть выведены на основе аргументов функции:
<font color="#461b7e">
void previously(T=int) (T t=0) {} // раньше необходимо было так
void now(T) (T t=0) {} // а теперь можно и так
</font>
- Некоторые ошибочные приведения типов, которые раньше определялись на стадии генерации кода, теперь определяются на стадии семантического анализа. Это улучшило сообщения об ошибках и работу CTFE-движка, ответственного за исполнение D-кода во время компиляции.
- Изменения в стандартной библиотеке:
- Множество функций теперь работают с InputRange и OutputRange (абстракциями для получения входных данных и выдачи выходных данных) вместо массивов.
- Модуль std.typetuple был переименован в std.meta. Для обеспечения совместимости std.typetuple сохранён в виде псевдонима std.meta.
- Сущность TypeTuple была переименована в AliasSeq. Для обеспечения совместимости сохранён псевдоним.
- Добавлен CTFE-шаблон hexString, который должен заменить встроенные в язык hex-строки:
<font color="#461b7e">
x"304A314B» // было
hexString!»304A314B» // стало
</font>
- Добавлена CTFE-функция hasUDA для проверки наличия у символов UDA (определяемых пользователем атрибутов времени компиляции).
- Вызовы GC API теперь могут быть отдельно профилированы.
- Переписана работа с синхронизированными (synchronized) объектами в druntime. Починена ошибка с гонкой во время инициализации мьютекса.
- Сгенерированный вручную интерфейсный файл object.di больше не нужен, компилятор использует оригинальный object.d.
- Новая реализация AA (ассоциативных массивов), с новой схемой разрешения конфликтов при совпадении хэшей. Чуть быстрее и лучше дружит с кэшем процессоров.
- Улучшена работа встроенного инструмента code coverage.
- Функция executeShell теперь игнорирует переменную среды SHELL и всегда использует sh.
- Функция byLine (чтение текстового файла построчно) была переписана и значительно ускорена (до трёх раз).
- В пакет std.algorithm добавлены предикаты ordered и strictlyOrdered для проверки, отсортирована ли последовательность значений.
- Шаблон RefCounted использует новый атрибут return, чтобы указать компилятору, что внутренний объект шаблона не может быть использован вне лексического блока (espace checking).
Также следует отметить, что в будущем релизе 2.069 используемый сейчас фронтэнд, написанный на подмножестве языка C++, будет заменён фронтэндом, написаным на языке D. Фронтэнд на языке D делается при помощи полуавтоматической трансляции C++ кода, поэтому до версии 2.069 никаких изменений (кроме очевидных исправлений ошибок) во фронтэнде не будет. Кодовая база библиотек druntime и Phobos, тем не менее, не заморожена.
URL: http://forum.dlang.org/thread/mq9ohk$1c1r$1@digitalmars.com
Новость: https://www.opennet.ru/opennews/art.shtml?num=42756