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

Сужу по форуму, как заметил большинство c/c++ в раст не хотят, сплош либо критика, либо не хотят учить/переходить

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

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

Меня «испугала» сложность синатксиса. По опыту чем он сложнее и «богаче» тем хуже авторы продумали язык. Возьми те же шаблоны в плюсах или лямбды в джаве.

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

И чем проще синтаксис тем легче выполняется твое «правило».

static foreach - логичное продолжение синтаксиса после static if (вычисления времени компиляции).

Ну и далее логичным продолжением будет static class, static function, static int, static main, static D. Вопрос теперь - зачем нужно два языка? Некоторые люди поняли это еще 50 лет назад, сделали лисп, но видимо это не до всех доходит.

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

Сужу по форуму, как заметил большинство c/c++ в раст не хотят, сплош либо критика, либо не хотят учить/переходить

Есть еще и другой фактор: Rust пока еще слишком молод, не оброс мясом в достаточной степени.

Мне, например, не нравится синтаксис Rust-а и еще более не нравятся упоротые Rust-оманы, но пока это единственный язык, на который можно уйти с плюсов там, где нужна скорость и полный контроль. Просто очень не хочется бегать по граблям, которые пока еще не найдены и не устранены первыми пользователями языка. Вот годика через 2-3, когда основной хайп схлынет, вполне можно будет брать Rust вместо C++ (смотря какой тогда будет C++).

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

Казалось бы, вот есть C++, который отлично под такие задачи подходит. Причем подходит с самого его рождения. Ну помучаешься месяц-два, пока изучать будешь в минимально-необходимом объеме. Зато потом профит. Уж не знаю, как на счет Fortran-а, но уж Pascal точно можно будет выбросить.

:) В минимальном объеме он ничем не лучше, даже хуже Паскаля и, тем более, Фортрана.

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

В минимальном объеме он ничем не лучше, даже хуже Паскаля

За Фортран в вычислительных задачах ничего не скажу, а вот по поводу Паскаля сказочки рассказывайте кому-нибудь, кто никогда на Паскале не программировал.

Ну и минимально-необходимый объем у нас, видимо, сильно разный.

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

Казалось бы, вот есть C++, который отлично под такие задачи подходит.

Нет и никогда не подходил - чисто для вычислений рулит матлаб.

Вообще, надо внимательно читать истоки: С++ создавался не как язык, а как «ООП-нашлёпка» над Си (чем Труп-страуса очень гордился - малыми затратами на реализацию). Поэтому ни о какой элегантности речи не шло (отсюда и такой похабный синтаксис).
«Хорошо летают только красивые самолеты!» (с) А.Н.Туполев

Причем все это можно было сделать 15 лет назад

Эволюция. Не имеет значения, кто вышел первым из воды - важно, кто пережил динозавров!

Разработчики D насрали на своих пользователей когда через полгода после релиза D 1

Посмотрим на это с другой стороны: разрабы венды не насрали на юзеров и тащили свою compatibility-помойку вплоть до Win7, пока полностью не выпилили ДОС-режим. Казалось бы, ЧЕГО РАДИ? А с языком - ещё хуже, стоит оставить гнилой прототип, как ты тут же увязнешь в кривых программах, которые и будут НЕ ЛУЧШЕ С++! В данном случае отказ был вполне оправдан, эта точка отсечения не была так болезненна, как ты описываешь - она куда лучше, чем урод-гибрид Питон-2 + Питон-3.

«Чтобы написать хорошую программу, её надо переписать минимум один раз» (ц) ИТ

Там, где нужен нейтив без GC, D лично мне не нужен. Т.к. я не хочу терять основные плюшки языка в режиме nogc

D без GC ни на бит не хуже С++. Только при этом сравни гигантский объём GC программ и «системные» узкопрофильные программы. D не создавался как «новый ассемблер», но даёт возможность поковыряться на уровень ниже. И то чисто «под давлением общественности» (я про режим nogc).

язык D конкурирует с гораздо лучше развитыми экосистемами Java, Go и .NET

Неправомерное сопоставление «язык - платформа». Так или иначе, нет языка - нет платформы. Плохой язык - тухлая платформа (Java и .NET это доказали). Go - вообще такой же новичок, как и Rust, платформой там и не пахнет.
Так что Ди тут вообще как «росток дуба среди овса» - он молод, но когда он вырастет, остальные под тихое завывание сожрут галстук. :)

есть ли где-то сейчас серьезная ниша для сложного нативного языка с GC

Практически все ниши - вендоГУЙ, web-pages, сервисы, базы, что угодно! Не уверен с геймдевом, т.к. не юзал D без GC, но раз D смогли отлучить от коллектора, то 100% можно управлять памятью не хуже С++. Хотя мне кажется, все эти наезды «наши игры портит GC» - унылоговнищенское оправдание криворуких индусов. Игра - она по сложности не больше типичной СУБД - так же вычисления, множество объектов, разве что нет засылки в ускоритель. По-моему, проще управлять состояниями GC, чем писать УГ на «ручном управлении памятью».

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

За Фортран в вычислительных задачах ничего не скажу, а вот по поводу Паскаля сказочки рассказывайте кому-нибудь, кто никогда на Паскале не программировал.

Ну и чем Паскаль хуже то, кроме библиотек?

Ну и минимально-необходимый объем у нас, видимо, сильно разный.

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

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

Нет и никогда не подходил - чисто для вычислений рулит матлаб.

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

На этом, полагаю, разговор можно завершать.

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

Меня «испугала» сложность синатксиса.

Охотно отвечу: сам Уолтер пояснил, что не хочет создавать принципиально новый синтаксис, потому что «си-подобные» доказали свою состоятельность. Но новые плюшки языка не могут вносить другую семантику к привычным элементам, поэтому ДА, УВЫ - иногда приходится жертвовать лаконичностью и вводить новые элементы. На самом деле, не всё так страшно - ВСЮ программу можно написать в привычном си-стиле. Но для плюшек придётся привыкнуть к новым элементам.

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

Ну и чем Паскаль хуже то, кроме библиотек?

Зависит от того, про Паскаль каких времен мы говорим.

В тех Паскалях, что были в 90-х, определение собственных структур данных было тем еще квестом. Сделать на C++ разряженную или треугольную матрицу, которая в работе не отличалась бы от обычной — как нефиг делать. В Паскале это все были бы разные наборы функций. Не говоря уже про отсутствие шаблонов, которые бы позволяли элементарно делать sparse_matrix<complex<double, double>> и sparse_matrix<complex<short, short>>.

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

«Хорошо летают только красивые самолеты!» (с) А.Н.Туполев

Еще есть народная мудрость. На вкус и цвет все фломастеры разные.

Хорошо если вкус есть, то получится летающий самолет.

А если нет, будет агрегат на взлетной полосе 20 лет топтаться, как D.

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

Это только в твоей голове.

Э... Он вообще-то Уолтера цитировал. У тебя неплохой фейл полуился. :-)

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

Считают себе прогнозы погоды, просадки грунта, прочность конструкций и пр.

э, разве не для этого существуют wolfram mathematica, maple, matlab итд? там это делается весьма просто

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

Для этого используют специализированные программы. Например, многие вещи считают по методу конечных элементов и там матлаба нет. Всякие Ansys и ему подобные. Сам по себе матлаб не такой уж и быстрый. Его используют для прототипирования в основном, на сколько я знаю.

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

Чем это лучше чем Ada?

Очень даже существует. Там где RTCA DO-178B / DO-178C и прочие. Вроде как писали типа бортовое ПО Boing 787 разработано на Ada, но сам не видел зуб не дам. Так что авиация, космос и прочие, критически важные приложения, где после F-35, продолжат царствовать С и Ada. Но у нас мало где, но пару контор практикует.

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

Проблема C++ в том, что это один из самых сложных языков на рынке. Ученый, которому нужно тупо матрицы перемножить, просто возьмёт numpy. Ведь только на изучение cmake, для подключения нужной мат. либы, уйдёт больше времени, чем на решение поставленной задачи на питоне.

Я ни разу не питонщик, но рекламировать C++ - бессмысленная затея. Он слишком сложен для прикладных задач для людей, далёких от программирования. Я молчу про указатели и прочую муть, просто представьте сколько времени удёт у человека, чтобы понять зачем нужно разделение на сорцы и хедеры...

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

Ведь только на изучение cmake

Практика показала, что хватает одного вечера. Ну это если человек не совсем деревянный по пояс сверху.

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

Практика показала, что хватает одного вечера. Ну это если человек не совсем деревянный по пояс сверху.

И какая у тебя практика? Человек 150 хотя бы научил?

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

большинство c/c++ в раст не хотят

Я вот хочу. Дальше что?

либо не хотят учить/переходить

Это проблемы человека, а не языка.

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

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

Это да. Системная вещь неудобная для непрограммистов. И это то, чего очень сильно не хватает rust'у.

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

ну не 150, но перевел несколько проектов на него со всяких вижул студий ну и джуны усиливают понять как да что довольно быстро. Но, повторюсь, если не совсем дебилы.

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

Что значит дебилы? Люди не программисты и не собираются ими быть.

Анах им тогда cmake? Я думал мы тут за программистов трем. Для непрограммистов питоны есть. Да и то некоторые плачут, что там все сложно аж капец как.

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

Фу, хоть бы в сторону отошёл, тут же женщины и дети.

Уберите отсюда женщин и детей, они кричат и мешают думать

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

Указателей уже давно нет. Вас обманули.

Совсем совсем? :)

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

э, разве не для этого существуют wolfram mathematica, maple, matlab итд? там это делается весьма просто

Тут уже ответили. Добавлю еще, что бывают ситуации, когда обсчет данных является всего лишь одной из частей программы. Например, в CAD: пользователь поменял тип материала для кабины грузовика, нужно что-то пересчитать, причем быстро.

В последний раз, когда мне о таких вещах рассказывали, речь шла о том, что в MatLab-е делают символьные вычисления. После чего пишут хардкорные реализации полученных формул на C++, и встраивают в C++ные приложения в качестве расчетных модулей.

По поводу расчетов прогноза погоды, вот презентация, например: https://github.com/boostcon/cppnow_presentations_2015/raw/master/files/NWP-Fa... Казалось бы, почему не используется Matematica/MatLab? ;)

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

Проблема C++ в том, что это один из самых сложных языков на рынке.

Проблема в том, что это только половина правды. Вторая половина состоит в том, что если его изучать не как «большее мощный C» и не после С, а сразу как C++, то для большинства прикладных задач он осваивается довольно быстро. Тем же вычислительным математикам от C++ нужно знание основных STL-ых контейнеров, самых простых шаблонов и перегрузки операторов.

Ведь только на изучение cmake, для подключения нужной мат. либы

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

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

При использовании указателей да. Странно что ты этого не знал

С какими-такими указателями? С невладеющими — никакой надобности.

Писать без владеющих указателей можно и нужно уже лет 20 как.

Странно, что вы этого не знали.

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

Так можно написать, но только если вам никто почему-то не показал намного более простой альтернативный вариант:

Создай локальный массив/объект на крестах без указателей и верни его в вызывающую функцию.

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

Берут какую-нибудь готовую IDE и даже не представляют, что у нее там внутри.

До тех пор пока не нужно подключить внешнюю либу, что быстро превращается в ад.

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

Создай локальный массив/объект на крестах без указателей и верни его в вызывающую функцию.

Э... В чем проблема? https://ideone.com/kqWyKZ

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

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

По той причине что новыми стандартами они пытаются прикрыть изъяны предыдущего. Нужно избавится от принудительного цикла с индексом - прикрутили итераторы. Надо поправить другой недостаток - прикрутили ещё что-то. А старое та никуда не делось.

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

Нужно избавится от принудительного цикла с индексом - прикрутили итераторы.

Ёптыть, простите мне мой французский. Вы бы хоть поинтересовались, как STL появилась и на каких языках Степанов ее пытался воплотить. И почему ему удалось это сделать только на C++. И почему STL эффективнее, чем ОО-шные контейнеры из Java.

В общем, матчать подтянуть бы вам.

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

Добавлю еще, что бывают ситуации, когда обсчет данных является всего лишь одной из частей программы. Например, в CAD: пользователь поменял тип материала для кабины грузовика, нужно что-то пересчитать, причем быстро.

ну как писал аноним где-то раньше, в D с этим проблем нет, если нужно чисто чиселки считать, то какие проблемы то?

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

Я понимаю что такая заточка появляется из-за ориентированности на офтопик

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

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

Дык речь не про то, что на D _сейчас_ это можно. Мне было удивительно, почему человек, который хотя бы 15 лет занимается вычислительными задачами, игнорировал C++.

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

быстрее считать будет? сомневаюсь

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

Существует метод класса или не существует известно ещё на этапе компиляции.

За счёт чего вызывается приведённый метод? Или в файле с вызовом функции его вызов прописывается явно?

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

да и это весьма узкая ниша довольно маленьких программ, а писать на расте большие поддерживаемые приложения - удобно ли будет? в бизнес из системщины я уверен, он никогда не пойдет

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

а писать на расте большие поддерживаемые приложения - удобно ли будет?

Пока есть подозрение, что удобнее, чем на плюсах. Но это если люди unsafe не злоупотребляют.

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

писать на расте большие поддерживаемые приложения - удобно ли будет?

Всяко лучше скриптоты с рантайм проверками.

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

Указателей уже давно нет. Вас обманули.

Нет где? Чуть ли не в любой книжке «выучи кресты» обязательно есть пунтк про указатели. Далеко не все могут взять и использовать boost или что-то вроде этого

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