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

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

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

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

Да я вот пытаюсь просто разобраться, а нужен ли вам такой язык в действительности, может пора вам уже на gc перейти, а вы там ерундой маетесь?

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

У вас есть дурная привычка вместо ответов на вопросы давать новые вопросы. Хотелось бы понять из-за чего: большого ума или большой эрудиции.

просто ниша дб, мидлварей и прочего, сейчас весьма сомнительна для нового проекта на плюсах

Yandex как-то у вас забыл спросить, когда сделал ClickHouse. А авторы CouchDB не консультировались с вами, когда в Couchbase переписали ядро на C++. Как и авторы Atom-а переписывают особо тормозные куски на C++.

Так я от вас долждусь примера более симпатичного языка без GC? Или вы продолжите шланговать?

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

Yandex как-то у вас забыл спросить, когда сделал ClickHouse

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

Так я от вас долждусь примера более симпатичного языка без GC? Или вы продолжите шланговать?

Да нету сейчас нормальных языков без GC. Если только сишечка =)

Rust/C++ - оба по мне «такое себе».

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

Да я вот пытаюсь просто разобраться, а нужен ли вам такой язык в действительности, может пора вам уже на gc перейти, а вы там ерундой маетесь?

Вы блин, то говорите про выбор языка под задачу, то начинаете хвостом вилять. Там, где можно писать на языке с GC я спокойно пишу на языке с GC. Но раз вы так неравнодушны к C++ (хотя понятия о нем не имеете), давайте поговорим про языки без GC.

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

2017 я умер и попал в Ад

Там где идет бодрая коммерческая разработка ОС с нуля
там C++ неплохо себя чувствует.
anonymous (06.09.2017 15:40:50)

неплохо себя чувствует
06.09.2017
C++
2017

*hell-bells*

коммерческая разработка ОС с нуля
2017

*facepalm*

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

Там, где можно писать на языке с GC я спокойно пишу на языке с GC

Так и пишите, зачем вам C++? зачем страдать? жизнь короткая штука, что бы постоянно жрать кактус.

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

Так и пишите, зачем вам C++?

Задачи, связанные с C++, гораздо интереснее. Как правило.

зачем страдать?

Я так смотрю, что о страданиях говорят либо те, кто C++ вообще в глаза не видел, либо просто не умеет в C++.

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

Я так смотрю, что о страданиях говорят либо те, кто C++ вообще в глаза не видел, либо просто не умеет в C++.

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

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

либо просто не умеет в C++.

На крестах пишет тот кто не умеет в Си. :)

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

достаточно открыть и полистать стандарт.

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

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

Идиоты, которые собираются изучать язык по его ISO-шному стандарту

ничего себе

пусть лучше закрывают стандарт и идут программировать на чем-то другом.

на чем-то, где можно его прочитать и не умереть?

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

Идиоты, которые собираются изучать язык по его ISO-шному стандарту

Это ты мощно задвинул! :))

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

ничего себе

Добро пожаловать в реальный мир.

на чем-то, где можно его прочитать и не умереть?

Можете перечислить языки, которые вы лично изучили по ISO-шным стандартам?

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

Можете перечислить языки, которые вы лично изучили по ISO-шным стандартам?

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

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

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

Вы мне напоминаете поговорку: когда в руке молоток - всё гвоздь.

Если вы не видите области применения C++, это не значит что её нет.

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

те кто не знает с++, знать его и не хотят, достаточно открыть и полистать стандарт

Знаю нескольких с++ кодеров не листавших не то что стандарт, а даже и ни единого учебника. Так что не надо демонизировать, если ты не разработчик компилятора, все не так страшно. Думаешь кто КДЕ пишет, зубры-джедаи? Да нет, обычные студенты и любители. Криво-косо, но чето у них даже получается.

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

AAA игры

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

аудио/видео плееры ? а зачем тебе тут с++? любую обертку сделай вокруг и все

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

С чего бы? Я umren привел пример системы, для разработки которой применение C++ было бы уместным. Не в смысле, что BIND9 написан на C++, а в смысле, что аналог BIND9 мог бы быть написан на С++.

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

аналог BIND9 мог бы быть написан на С++.

мог бы, вот только не написан и не будет написан

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

Во-первых, вот вам и ниша для C++, которую вы только что вообще не видели.

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

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

а в смысле, что аналог BIND9 мог бы быть написан на С++.

:) Ну он мог быть написан и, например, на Паскале.

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

Во-первых, вот вам и ниша для C++, которую вы только что вообще не видели.

Ниши нету т.к. нету потребителей такого продукта, да и продукта нету.

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

Конечно нет, есть еще куча других. Однако не понятно, что вам дает понимание возможности написания? продукт написан, работает, больше особо не нужно.

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

есть еще куча других. Однако не понятно, что вам дает понимание возможности написания?

Вот как раз наличие кучи других, а так же то, что прогресс не стоит на месте, в том числе и в связанных с DNS стандартах и технологиях.

продукт написан, работает, больше особо не нужно.

Ну посмотрите на Yandex-овский ClickHouse. Казалось бы, СУБД как собак нерезанных, а подишь ты...

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

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

продукт написан, работает, больше особо не нужно.

Нужно еще добавить: и 640Kb хватит для всех.

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

Задачи, связанные с C++, гораздо интереснее. Как правило.

Это какие, например? Написание вирусов, драйверов и числодробилок? В проект с исследовательскими задачами никто С++ в здравом уме не затащит.

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

драйверов и числодробилок?

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

В проект с исследовательскими задачами никто С++ в здравом уме не затащит.

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

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

что меня приводит в мнэ... восторг, так это история с PL/1. Ну, мол, язык умер потому, что был «слишком сложным» и «его стандарт полностью не мог освоить ни один человек».

Н-да...

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

Вот PL/1 прошел мимо меня, об опыте работы с ним я лишь слышал от коллег. И получалось, что если людям нужно было работать на IBM 360 (или его советском клоне ЕС ЭВМ), то от PL/1, не смотря на его сложность, все равно было не уйти. Зато развитие персоналок сняло необходимость работы с мейнфреймами.

PS. Wiki пишет, что последняя стабильная версия вышла в июне 2016-го.

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

смешались в кучу кони, люди...

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

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

Впрочем, никто не мешает комбинировать gc- и -не-gc части.

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

история с PL/1

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

История учит, что она никого, никогда и ничему не учит. :)

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

ага. доклад на «C++ Siberia» --- «C++-14 консоль для сетевого оборудования», по факту — адский парсер на шаблонах. великолепная работа, но ад.

вопрос — «почему не на D, было -бы на два порядка проще?» --- ответ --- «захотелось».

аплодисменты, занавес.

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

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

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

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

я начинал расчётную часть диплома делать на PL/1 (ЕС360/СВМ), когда ЕС-ка стала недоступна (точнее, появилось возможность оккупировать писишку недалеко от установки), пришлось переползти на Си.

И Си и PL/1 на тот момент знал на примерно одинаковом среднем уровне (пляска от задачи), Си был проще, так как возня с микропроцессорами способствует пониманию происходящего, что не скажешь о PL... но делать дело на нём было гораздо дольше.

ИМХО, если бы PL/1 не поторопились *полностью* отставить, история могла бы развиваться немного интереснее :)

ЗЫ: делать расчётную часть на Форте желания не возникло, хотя в управлении железом, очень даже:)

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

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

вот утрировать не надо. Таки современные gc очень далеко ушли от Богемского.

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

и да, gc может работать не менее (скорее, более) эффективно ручного управления, если встроен в изначально заточенный на него язык.

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

На LOR-е уже несколько раз проскакивала PDF-ка с результатами исследований по сравнению эффективности ручного управления памятью и GC. В котором был вывод, что GC показывает сравнимую эффективность ценой 4-х кратного расхода ОП.

Ну и рассказы про «может работать» они хороши до тех пор, пока сравнивается работа с динамической памятью в языке без GC с оной в языке с GC. Но при этом забывается тот факт, что в языке без GC активно используется стек, что значительно снижает надобность в new/delete. А когда надобность в new/delete таки есть, то ее стоимость снижается за счет использования пулов и арен памяти.

Причем у этих механизмов стоимость использования достаточно детерминированная, в отличии от GC.

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

GC показывает сравнимую эффективность ценой 4-х кратного расхода ОП

Откуда 4-ех кратный расход оперативной памяти то? У худших GC он 2-ух кратный.

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

Вот маленькая цитата из статьи Automatic vs. Explicit Memory Management: Settling the Performance Debate:

Comparing runtime, space consumption, and virtual memory footprints, we find that when space is plentiful, the runtime performance of garbage collection can be competitive with explicit memory management, and can even outperform it by up to 4%. We find that copying garbage collection can require six times the physical memory as the Lea or Kingsley allocators to provide comparable performance

Еще была где-то на SlideShare презентация о неявных расходах, которые структуры данных в Java несут из-за наличия GC и ссылочных типов. Но сходу найти ее вновь не могу.

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

Жалкое зрелище. Вы не любите c++ по идеологическим причинам а на очень даже конкретных примерах начинаете шланговать ибо возразить вам нечего. Начинаются рассказы что якобы нет нормальных языков. А такой язык есть и это c++. Вот у вас и бомбит

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

Эта пдфка была от эппла если что. И должна гуглиться по поиску по топикам и тэгу apple

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

Забывают еще и то что если подходы из продвинутых коммерческих java vm где надо 3х памяти уже после того как надо 4х памяти просто так(итого х12) и многопоточность применить к аллокации в с++*, то с и с++ порвут все эти gc вништо.

*) я делаю свой процессор и в силу его архитектуры там выгодно паралелить. Даже однопоточные алгоритмы. Так вот, даже аллокатор можно запаралелить на обычной архитектуре. Маллок сводится к поиску в кэше преаллоцированных блоков и только потом прямому обращению в аллокатору а free просто отдает работу в соседний поток аллокатора.

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