LINUX.ORG.RU

Релиз D 2.076.0

 ,


1

6

Команда разработчиков D с великим удовольствием объявляет о выходе новой стабильной версии DMD: 2.076.0

D — это язык программирования общего назначения, мультипарадигменный, быстрый, стабильный.

Поддержка static foreach

import std.conv: to;

static foreach(i; 0 .. 10)
{

    // ‘static foreach’ не добавляет вложенной области видимости
    // (так же как и в ‘static if’).
    
    // следующее объявление mixin находится в области видимости модуля
    mixin(`enum x` ~ to!string(i) ~ ` = i;`); // объявляет десять переменных x0, x1, …, x9..., x9
}

import std.range: iota;
// все типы по которым можно итерироваться обычным ‘foreach’
// так же поддерживаются ‘static foreach’
static foreach(i; iota(10))
{
    // используем объявления сгенерированные ранее в 'static foreach'
    pragma(msg, "x", i, ": ", mixin(`x` ~ to!string(i)));
    static assert(mixin(`x` ~ to!string(i)) == i);
}

void main()
{
    import std.conv: text;
    import std.typecons: tuple;
    import std.algorithm: map;
    import std.stdio: writeln;

    // у 'static foreach' есть две формы: объявление и инструкция
    // (так же как у 'static if').
    static foreach(x; iota(3).map!(i => tuple(text("x", i), i)))
    {
        // создает три локальных переменных x0, x1 и x2
        mixin(text(`int `,x[0],` = x[1];`));

        scope(exit) // внутри области видимости 'main'
        {
            writeln(mixin(x[0]));
        }
    }
    
    writeln(x0," ",x1," ",x2); // результат выполнения
}

Улучшения -betterC

Много улучшений было добавлено к новой опции компилятора dmd -betterC, программы скомпилированные с -betterC не будут ссылаться на неиспользуемые части рантайм, asserts реализованы как C <assert.h> вызовы, а phobos (прим. пер. стандартная библиотека) не слинкована по умолчанию.

Хотите знать больше про Better C? Вам сюда.

Добавлена поддержка AVX2

Компилятор теперь может генерировать инструкции AVX2. Поддержка автоматически распознается с помощью -mcpu=native.

Изменения в стандартной библиотеке

std.base64.Base64URLNoPadding позволяет кодирование/декодирование без смещения

import std.base64 : Base64URLNoPadding;

ubyte[] data = [0x83, 0xd7, 0x30, 0x7b, 0xef];
assert(Base64URLNoPadding.encode(data) == "g9cwe-8");
assert(Base64URLNoPadding.decode("g9cwe-8") == data);

std.digest.digest переименовано в std.digest.

std.meta.Stride добавлен, позволяет выбрать подмножество шаблона по размеру шага и отступу

alias attribs = AliasSeq!(short, int, long, ushort, uint, ulong);
static assert(is(Stride!(3, attribs) == AliasSeq!(short, ushort)));
static assert(is(Stride!(3, attribs[1 .. $]) == AliasSeq!(int, uint)));

Был добавлен Config.detached флаг для spawnProcess, он позволяет запускать новые процессы независимо от текущего процесса. Нет нужды ждать их завершения, ведь они никогда не станут зомби процессами! Попытки вызвать std.process.wait или std.process.kill на обособленом процессе бросит исключение.

Теперь можно использовать std.range.chunks с непрямыми диапазонами, но с ограничениями, налагаемыми этими диапазонами.

import std.algorithm.comparison : equal;

int i;

// генератор не сохраняет состояние, так что он не может быть прямым диапазоном
auto inputRange = generate!(() => ++i).take(10);

// мы все еще можем его обработать по частям, но только за один проход
auto chunked = inputRange.chunks(2);

assert(chunked.front.equal([1, 2]));
assert(chunked.front.empty); // итерация по чанку сьедает его
chunked.popFront;
assert(chunked.front.equal([3, 4]));

Теперь std.socket.UnixAddress поддерживает абстрактные адреса. UNIX сокеты обычно идентифицируются по пути. Linux поддерживает непереносимое расширение этой схемы, известное как абстрактный адрес сокета, которое независимо от файловой системы. Начинается абстрактный адрес с нулевого байта.

auto addr = new UnixAddress("\0/tmp/dbus-OtHLWmCLPR");

Добавлена возможность использовать базовый класс когда производится автоматическая реализация интерфейса. Второй шаблон std.typecons.AutoImplement был добавлен, в отличии от существующего он принимает дополнительный параметр. Этот параметр позволяет уточнить класс от которого наследуемся во время автоматической реализация интерфейса.

>>> Подробности

★★★★★

Проверено: Shaman007 ()
Последнее исправление: CYB3R (всего исправлений: 11)
Ответ на: комментарий от RazrFalcon

то есть его там еще и обязательно нужно использовать и нельзя отключить, вы об этом говорите?

umren ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Ясно, то есть по вашему Swift в котором ARC даже нельзя отключить может решать задачи системного уровня как Rust?

umren ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

При желании - можно системщину писать

а зачем тогда пишут на c/c++ когда им дейстивительно системщина нужна? тупые что ли?

umren ★★★★★
() автор топика
Ответ на: комментарий от RazrFalcon

Там адаптивный ARC. При желании - можно системщину писать, что успешно и делают.

Шо, уже учишь Swift. Правильно, может даже в жизни пригодится, не то что ржавый.

bread
()
Ответ на: комментарий от ckotinko

сто раз сказано уже: в какого пострадавшего от С++ не ткни, все связаны с вебом

Крестовики не знают что в json можно хранить любые данные, не обязательно из веба?

NextGenenration ★★
()
Ответ на: комментарий от RazrFalcon

Конечно легко. Только в Си это норма, а в С++ - быдлокод.

Важно не на сколько это быдлокод, а на сколько оно собирается. Пока собирается будут быдлокодить

NextGenenration ★★
()
Ответ на: комментарий от ckotinko

Строки это вечная проблема

Какой язык, такие проблемы. Где-то проблемы в не очень удобной библиотеке. В крестах проблемы на ровном месте.

Последний становится все более популярным если бы не сотни софта включая файловую систему которые работают в utf8.

Хоть одно преимущество utf16 перед utf8

Поэтому некоторые запиливают себе свой с++ с блекджеком и шлюхами как это сделали в qt.

Костыль поверх костыля

NextGenenration ★★
()
Ответ на: комментарий от eao197

Поскольку C++ применяется и в системах реального времени, и в GUI приложениях, то очевидно, что не может быть какого-то одного «правильного C++» для всех. В low-latency и real-time областях будет свое подмножество языка и свой набор инструментов, в GUI — свой, в тяжелых вычислениях — свой.

Тогда зачем его толкают в каждую дырку?

NextGenenration ★★
()
Ответ на: комментарий от ckotinko

для большинства языков хватает 16 бит

А оперативки у тебя 640 килобайт?

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

Тогда зачем его толкают в каждую дырку?

Пару-тройку примеров привести вас, конечно же, не затруднит?

eao197 ★★★★★
()
Ответ на: комментарий от umren

Может до первого релиза плюсов он дорастет лет через 100 такими темпами.

Там будут принципиально другие проблемы

NextGenenration ★★
()
Ответ на: комментарий от RazrFalcon

Покажите браузер, AAA игру или прогу уровня Photoshop без использования С/С++.

И откуда они возьмутся, если разработчики создали самоисполняющееся пророчество?

NextGenenration ★★
()
Ответ на: комментарий от eao197

Естественно, что для написания софта, который экономно относится к ресурсам, и имеет приличное быстродействие

хром написан на плюсах. где быстродействие и экономность?

NextGenenration ★★
()
Ответ на: комментарий от eao197

Вы так говорите, как будто это что-то низкое и мерзкое, чем не пристало заниматься уважающему себя белому человеку.

Ты пишешь только драйверы и числодробилки?

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

хром написан на плюсах. где быстродействие и экономность?

А как дела у альтернатив? Кто написан на Java или на C#, или, прастихоспади, на Common Lisp, и имеет большее быстродействие и еще менее прожорлив?

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Достаточно всего лишь дать в 4-ре раза больше оперативы, для того, чтобы GC справлялся с этим самым «интенсивным использованием» и тогда все будет очень даже к месту.

Если идёт активное создание и уничтожение объектов, то gc можно вызывать принудительно

NextGenenration ★★
()
Ответ на: комментарий от eao197

Чем меньше людей в C++ном проекте, тем лучше.

Это не только к крестам относится

NextGenenration ★★
()
Ответ на: комментарий от RazrFalcon

У Go, кроме докера, ничего нету.

у go есть софт, которые не выставлен напоказ

NextGenenration ★★
()
Ответ на: комментарий от eao197

Пару-тройку примеров привести вас, конечно же, не затруднит?

игры, графические приложения это не примеры? Нужно что-то принципиально новое?

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

игры, графические приложения это не примеры?

И на чем же это еще делать? Просветите, пожалуйста.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Не только

И на чём будешь писать не драйвера и не числодробилки?

А вы вообще что-нибудь пишете?

Сейчас я больше читаю. Читаю о чём-то более эффективном и удобном чем то что уже знаю

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

Зачем ты сравниваешь компилируемые в нативный код языки и не?

У меня есть ощущение, что я общаюсь с пьяным дебилом, который способен только на банальные однострочники и тупые встречные вопросы.

Молодой человек, потрудитесь взять на себя труд вести осмысленный диалог.

Если вам не нравится производительность написанного на плюсах Хрома, то покажите любую другую сравнимую с ним по возможностям реализацию на любом другом языке.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

И на чем же это еще делать?

Как минимум на rust

Когда-то читал про такой язык как Cyclone. В том что он не взлетел виноваты именно те кто берут только кресты/си и не хотят брать ничего нового

NextGenenration ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.