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)
Ответ на: комментарий от eao197

Если вам не нравится производительность написанного на плюсах Хрома

Скажи, если к текущей скорости добавились бы паузы на сборку мусора в 1 мс, то кто бы это заметил?

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

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

Ну вот публичный релиз Rust-а случился только 2 года назад. И за это время ничего значимого и сравнимого с Хромом по масштабу и сложности в дикой природе не появилось.

Это, может быть ничего и не говорит о пригодности Rust-а к большим разработкам. Но точно говорит о том, что труда в проекты масштаба Хрома нужно вложить столько, что вам вообще не снилось. И плюсы используются в том же Хроме потому, что они были пригодны к такому применению уже очень давно. И за прошедшее время адекватной замены так и не появилось. Да если Rust таковой и будет, то a) он появился совсем недавно и b) для замены плюсов ему потребуется еще не один год.

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

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

Смотря что, ваш К.О.

Разного рода скрипты и вспомогательные инструменты, от которых не требуется производительность, я делаю на Ruby. Если нужно будет делать что-то для Ынтырпрайза, то на Java. Если какой-то сложный кросплатформенный GUI, то на C++. По поводу остального нужно смотреть по обстоятельствам.

Сейчас я больше читаю.

Школьник-теоретик? Но мнение имеет, да.

Скажи, если к текущей скорости добавились бы паузы на сборку мусора в 1 мс, то кто бы это заметил?

С чего уверенность, что паузы были бы в 1мс? На уроках информатики сосед по парте напел?

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

Да если Rust таковой и будет, то a) он появился совсем недавно и b) для замены плюсов ему потребуется еще не один год.

Этим всё сказано. До тех пор пока возможно продолжать писать на крестах на них и будут продолжать писать

Ну вот публичный релиз Rust-а случился только 2 года назад

Кроме rust есть(и были) и другие языки. Я читал про то что cyclone безопаснее чем c. Он появился в 2001 году. Информации о нём не так уж и много. По сути те кто уже мог начать писать безопасный код в к примеру 2002 году этого не делали. И опять таки, стоит сказать о выходе нового языка как сразу же прибегут те кто отрицает их необходимость и предпочитает писать по старинке на плюсах/си

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

Школьник-теоретик?

Предпочитаешь набивать шишки чтоб узнавать новое?

С чего уверенность, что паузы были бы в 1мс?

Современные сборщики мусора весьма и весьма эффективнее чем их предыдущие варианты

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

Предпочитаешь набивать шишки чтоб узнавать новое?

Простите мне мой французский, но я предпочитаю не тратить время на малолетних дебилов (с) за бесплатно. Разговор перестал иметь хоть какой-то смысл.

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

за бесплатно

Ты хочешь сказать, что если тебе заплатить 1000 долларов ты сможешь сказать что-то реально ценное, не применяя слов типа «школьник», «малолетних»

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

если к текущей скорости добавились бы паузы на сборку мусора в 1 мс, то кто бы это заметил?

Ты так говоришь, будто где-то гарантируются стабильно короткие паузы независимо от быдлокода. Жава-софт посмотри, ну оно все тормооозииит же, хотя по бенчмаркам жаба не особо уступает плюсам. Или вот кто-то кидал ссылку как свифт эпично тормозит, хоть там и ARC.

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

Жава-софт посмотри

https://habrahabr.ru/post/245333/

свифт эпично тормозит

(сарказм)безусловно причина того что для ускорения сборки программ на swift рекомендуют разбивать строки на части виновата сборка мусора

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

Если какой-то сложный кросплатформенный GUI, то на C++

так оно все в вебе уже, кроме динозавров фотошопов, кадов, 3д софта и прочего «для специалистов»

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

До тех пор пока возможно продолжать писать на крестах на них и будут продолжать писать

вот да, пока такие как eao197 сопротивляются, химера продолжает жить и почковаться стандартами

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

Ты так говоришь, будто где-то гарантируются стабильно короткие паузы независимо от быдлокода

в go

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

кроме динозавров фотошопов, кадов, 3д софта и прочего «для специалистов»

Ну и чем это не «сложный кросплатформенный GUI»? Или для вас Google Doc является образцом сложности «современного» GUI?

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

а что гугл док простой гуй?

Если сравнивать какой-нибудь нынешний Google Drawing с CorelDraw образца 1995-го года, то таки да. Не просто простой, а убогий.

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

У некоторых сишников вообще проблемы с ЧСВ. Подход раста, с запретом отстреливания ног, для них не приемлем.

Я сталкивался с кадрами, которые почти все предупреждения компилятора отключали. Мол они лучше знают. Конечно есть шанс, что так оно и есть, но зачастую это просто космический быдлокод, который работает только на машине автора.

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

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

Святая толстота.

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

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

Ну вот переведут лису на раст - посмотрим. А пока rust медленнее C/C++.

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

гуглодок сливает даже либре, что говорить про MS Office. Запилили таблички, которые ничего не умеют, но тормозят как ААА игры и довольны. Зато на веб2.0.

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

ну да, именно поэтому гугл док так сильно сливал мс оффис и они побежали свой гуглодок сделать ака офис365?

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

Если он будет лучше - да.

Я не смогу обеспечить кросплатформенность(например). Вообще я насмотревшись на недостатки wpf задумался как сделать лучше. Возможно я когда нибудь займусь этим. Какие требования предъявишь?

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

Когда-то я хотел посмотреть на llvm биндиг. Не нашёл актуальной версии, и вообще она была у кого-то на github-е. sdl2 отсутствовала, только sdl1. Кстати конкретно с gtk всё более менее хорошо.

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

Уже ненужно

В том то и дело, что далеко не всегда один человек может выполнить хотя-бы такой объём работы.

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

так что скоро будут D биндинги к либе на расте

если растоман потрудится сделать c api, то нет проблем

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

блокноту пауза даже в 20 мс ничего не сделает

Это чтобы курсор рандомно тормозил. Полезная фича. Реализована во всех жабоIDE.

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

тогда пофиг вообще на самом деле

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