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)

Ответ на: комментарий от umren

а можно просто выбирать язык под нишу

Ну вот есть ниша тяжелых вычислений. Думаете, список языков для нее будет длинным? И C++ в нем не будет?

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

Покажите языка не комбайн. Не считая одноклеточного Go, конечно же.

MATLAB.

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

дядя, только после того, как ТЫ покажешь код, который использует твой обжектйзер (а то есть мнение, что это пет-поделка, реклама которой суется везде, к месту и не к месту). Или только тебе тут дозволено NDA прикрываться?

Там, где дело касается операций с матрицами, писать на Pascal и C могут разве что упоротые мазохисты.

GSL уже все написано. Пользоваться просто. По теме есть, что сказать, кроме своей вкусовщины?

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

Ну вот есть ниша тяжелых вычислений. Думаете, список языков для нее будет длинным? И C++ в нем не будет?

Будет конечно, но я бы выбрал другой язык для этого. А в других нишах плюсы уже и не особо нужны. Дайте монстру уже умереть пожалуйста.

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

Go хороший пример. Одноклеточный язык для бекендов. Так же можно провести паралели в других отраслях с языками лидерами.

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

дядя

Неуважаемый аноним, вы изволили высказать свою оценку библиотеке Eigen. Ваши слова можно воспринимать как пук в лужу от какого-то анонимного чмо на LOR-е (коих здесь в изрядном количестве), либо как слова человека, который что-то понимает в теме.

Откуда взять основания думать, что вы что-то понимаете?

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

Откуда взять основания думать, что вы что-то понимаете?

Ого и это заявляет какое-то регистрантсткое чмо, которое не юзало GSL, но мнение про упоротость имеет. Браво, браво. Иди лучше свою пет-поделку пили и рассказываю как она танцует в больших театрах (но мы этого есессно не увидим, ибо NDA). А в тему, где ты не понимаешь ровным счетом ничего, не суйся.

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

Будет конечно, но я бы выбрал другой язык для этого.

И какой?

А в других нишах плюсы уже и не особо нужны.

Благодаря тому, что в 80-х и 90-х мощности компьютеров были не сравнимы с нынешними, С++ был одним из тех языков, на котором можно было делать многое и весьма эффективно. Что и делали.

Сейчас альтернатив хватает, поэтому для C++ остается всего несколько узких ниш. Где они пока и живет (а из остальных еще выжали уже давно). Ну вот не на чем больше Facebook-у делать свой HHVM.

Дайте монстру уже умереть пожалуйста.

Интересно, а вам лично какое до этого дело? Вы же его не используете, так откуда такое желание?

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

Да мой-то код в открытом доступе лежит. Вы-то что из себя представляете? Гавкаете «говно» про Eigen на LOR-е пользуясь анонимностью?

Хотите пример кода на SObjectizer-е? Да не вопрос: http://eao197.blogspot.com.by/2016/05/progc14-sobjectizer.html Маленький кусочек реального проекта. Подробности да, под NDA.

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

Покажите язык не комбайн. Не считая одноклеточного Go

Внезапно, одноклеточная жава. Знаешь такой язычок?

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

И какой?

питон, фортран, си, ну как выше писали ди тоже могет ;)

Интересно, а вам лично какое до этого дело? Вы же его не используете, так откуда такое желание?

так я не хочу с ним внезапно где-то встретится, пора закапывать

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

питон, фортран, си, ну как выше писали ди тоже могет ;)

Из этого списка нормальную альтернативу составляют только Python и D. Fortran и C в нынешние времена замена так себе. С Fortran-ом, небось, только в книжках и сталкивались? ;)

так я не хочу с ним внезапно где-то встретится, пора закапывать

Выглядит как фобия. Такое ощущение, что вы даже C++11 вблизи не видели. Не говоря уже про 14-й и 17-й.

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

Только любой язык растёт в сторону усложнения.

Все рождается, растет, а затем умирает. С++ уже в терминальной фазе.

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

С каких пор Java стала простым языком?

С самого своего рождения. Она намного проще С++ это, надеюсь, не будешь оспаривать?

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

И это нормально. Эволюция же.

Даже автор Rust сказал, что одна из задач - это породить новые языки, реализующие принципы Rust. Идея вечна.

С++ уже в терминальной фазе.

Ага. Начиная с C++98. Уже 20 лет умирает.

C++ ужасен, я это уже не раз повторял, но альтернативы ему, увы. Любой сложный, системный софт придётся писать на плюсах.

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

но альтернативы ему, увы

И чем же D не альтернатива?

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

С Fortran-ом, небось, только в книжках и сталкивались?

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

Выглядит как фобия. Такое ощущение, что вы даже C++11 вблизи не видели. Не говоря уже про 14-й и 17-й.

Да я листал стандарты, какой то ад, вот у меня теперь действительно фобия.

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

Та же участь ждёт Go

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

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

так кода очень много писать будет не нужно

Откуда такая уверенность? Думаете, что сейчас все программирование — это склеивание уже готовых чужих библиотек?

Живого Фортрана, я так понимаю, вы в руках не держали.

Да я листал стандарты,

Да уж.

какой то ад

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

Ну, это если не брать в расчет анонимных LOR-овских монстров, которые могут вааще все.

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

По сравнению с чем? Склепать hello world, который не будет падать, - не сложно.

Я Java не знаю в принципе, но то что я слышал не выглядит простым. К примеру: разные реализации jvm(у андроида своя и тд), понимание работы jit/gc, все эти private final static int, рефлексия, исключения, интерфейсы.

Достаточно загуглить Java Quirks и получить ещё большую порцию проблем на голову джуна, который слышал, что java == много денег ни за что.

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

По сравнению с чем?

Ну вы же сказали:

С каких пор Java стала простым языком?

Я так понял, что считаете Java сложным. Вот мне интересно, что же в нем такого сложного.

Я Java не знаю в принципе, но то что я слышал не выглядит простым.

Ну тогда понятно.

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

Думаете, что сейчас все программирование

Вы передергиваете, речь о «интенсивных вычислениях», больше ничего я бы на фортране и не писал

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

Вы передергиваете

Никакого передергивания. Для интенсивных вычислений далеко не всегда хватает использования готовых библиотек.

Даже если бы берете какую-то готовую либу для представления матриц и готовые реализации методов решения СЛАУ, все равно приходится написать порядочно кода для того, чтобы наполнить матрицу нужными значениями.

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

Так этот софт уже написан. Зачем плодить новый? Пускай себе как кобол доживает свои дни в движках игровых.

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

Каким образом из этого следует, что Java простой язык?

Java, наверное, самый простой из ОО-языков. Генерики к нему, правда, как-то криво прикручены (но это мое личное мнение, я Java после появления в ней генериков практически не пользовал).

Со стороны всякие public static final выглядят, может, и непонятно. Но стоит только погрузиться, так все заходит легко и со свистом.

А фокусы с GC приходится принимать во внимания во всех языках с GC. И, опять же, далеко не всем разработчикам нужно эти фокусы и тонкости знать/использовать.

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

Даже если бы берете какую-то готовую либу для представления матриц и готовые реализации методов решения СЛАУ, все равно приходится написать порядочно кода для того, чтобы наполнить матрицу нужными значениями.

Для этого нужен С++? Нет, ну серьезно? :)

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

U4 новый. И написан на плюсах.

Я говорю не про старый софт. А про софт в принципе. Если нужен серьезный, кроссплатформенный софт - выбора нет.

Если под винду и мак есть C# и Swift, то на лине по прежнему С++, ибо Qt.

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

И что из этого следует? Java проще C++? Ну наверное, я хз.

Java простой язык - нет. Go простой. И если посчитать фичи, окажется что Java содержит в десятки раз больше концепций, чем Go.

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

И что из перечисленного мной написано на этих языках?

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

U4 новый.

нифига он не новый, там куча кода с UE1 еще.

Если нужен серьезный, кроссплатформенный софт - выбора нет.

Что значит серьезный? Wolfram Mathematica серьезный софт? на джава писали. Вся бизнес гуйня сейчас в веб ушла, на серверах плюсы тоже особо не нужны. Да вот в супер редком случае может куда-то и можно плюсы присобачить, но от этого надо уходить, инструмент уже слишком неадекватный с бесконечной сложностью.

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

Разупорись. Java куда проще питона, субъективно она где-то на уровне C. И является чем-то вроде C, только для jvm а не железа. Тонкости реализации редко нужны, но когда нужны то есть везде. А quirks в крестах больше и круче, взять какой-нибудь yosek faq или как там его.

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

Любой сложный, системный софт придётся писать на плюсах.

Если именно системный, то наверное, всё же на сишечке.

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

Wolfram Mathematica серьезный софт? на джава писали

Written in: Wolfram Language, C/C++, Java and Mathematica

Вся бизнес гуйня сейчас в веб ушла

При чём тут она. Я про совсем другие области речь веду.

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

С каких пор C стал простым языком?

А с каких пор он стал сложным?

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

С каких пор C стал простым языком?

Ты путаешь сложность языка и сложность программирования.

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

на серверах плюсы тоже особо не нужны

На серверах до недавнего времени никто не экономил. А потом пришли облака, в которых за все нужно платить и, внезапно, шустрый Go с легким рантаймом оказался востребован.

инструмент уже слишком неадекватный с бесконечной сложностью.

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

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

С этим соглашусь. Но для меня одно и то же. Так как он разработчика важен результат.

И «простой» С не позволяет получить хороший результат для сложного проекта.

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

python, в первом приближении, тоже.

Сразу видно, что ты из крестового курятника редко выползаешь. Конечно же пейтон сложнее жабы. Начать с того, что их два несовместимых с очень тонкими различиями. Далее, old style и new style классы, кривые области видимости с заботливо разложенными граблями, хитрожопые методы, обмазанные тухлым сахарком, тонны синтаксиса для частных случаев. Препоганый такой бейсик. И с другой стороны жаба, где только вызовы методов и минимум синтаксиса.

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