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

Тогда твое мнение о D очень ценно, несомненно.

А где я его высказал, мнение это?

Я пришел сюда с вопросом о том, где сейчас нужен сложный нативный язык с GC? Ну и где?

В среде ученых, которые программировать обычно не умеют от слова совсем?

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

А где я его высказал, мнение это?

Мне не понятно, зачем кто-то убеждает и себя, и окружающих, что D юзабелен с отключенным GC?

То есть это не мнение, что D бесполезен без GC? Это пук в лужу? Окей тогда.

В среде ученых,

ученые до сих пор на фортране пишут. У нас по крайней мере. А у разрабов уже не стоит вопрос C++ или D. Даже у вчерашних фанатиков С++.

anonymous
()

Языков все больше, ПО все медленнее.

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

То есть это не мнение, что D бесполезен без GC?

Т.е. если я возьму чужую библиотеку на D, в которой активно используются замыкания, классы с полиморфными методами, исключения и RAII, но не смогу все это использовать из-за nogc, то это свидетельство «юзабельности D без GC», я вас правильно понял?

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

А у разрабов уже не стоит вопрос C++ или D. Даже у вчерашних фанатиков С++.

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

Кроме того, я вашего кода на C++ не видел. Может вам к C++ вообще подходить нельзя, ну а D вам все прощает.

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

Может вам к C++ вообще подходить нельзя

C++ вообще близок к write only языку. К нему большинству кто хочет нормальный софт делать подходить близко не стоит.

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

К нему большинству кто хочет нормальный софт делать подходить близко не стоит.

Совершенно с вами согласен. Но мне интересна ниша для D. Ее наличие, и, в случае существования, размер.

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

Дык у меня и получается, что любо подходят C++ (ну и Rust со временем), либо JVM (Java или что-то из Scala/Kotlin/Ceylon/Gosu). Ну или тот же Go. У них у всех экосистема гораздо богаче и развивается активнее.

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

Зоопарка качественных библиотек для всего. Для C++ выбор для того же GUI есть очень широкий. Для JSON-а полно. Для работы с сетью что хочешь. Для БД есть пара-тройка все еще живых библиотек. Собственно, куда не плюнь.

И это только если с C++ сравнивать, не рассматривая JVM.

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

GUI - gtkd, tkd, dlangui - все полноценное и реально работает, для json - std, с сетью? что именно? vibe.d есть, сокеты итд все в std, бд драйверы есть

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

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

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

GUI - gtkd, tkd, dlangui - все полноценное и реально работает

Первые две — это биндинги. Получается всего одна.

Сравните с тем, что есть для C++.

либ может не так много

Кто-то выше говорил, что выбор — это хорошо. Где хваленый выбор? Языку больше 16 лет. Даже D2 уже десятка.

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

Сравните с тем, что есть для C++

зачем? ты их собрался все использовать? или все использовать в рамках одного приложения? чаще всего нужно 1-2 работающих решения

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

Где хваленый выбор?

вначале нужно сознательно сделать выбор в пользу D ;-) сообщество мелкое же, проблема курицы и яйца

Языку больше 16 лет

Много травм по ходу движения: d1>d2, проблемы с лицензией которые решились не так давно, разброд в версиях std. Сейчас то проблем особо никаких у языка нет, бери да пользуйся.

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

а теперь ещё и -betterC подвезли

Этот betterC выглядит как урезанный Rust. И зачем он, если есть Rust, у которого перспектив взлететь в разы больше. Да и либ уже в десятки раз больше.

Mu-ha-ha-haaaaa!!!! :-)

Эпическая битва старого ненужно с молодёжным ненужно! :-)

Ты доставляешь, RazrFalcon, разрешаю тебе пейсать ещио!

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

Для шаблонотворчества может и ок. Но это точно write-only code.

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

Нужен GUI - приходится страдать с Qt. Альтернатив ему нету.

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

Я и не говорю, что D плохой.

Откровенно плохих ёзыкофф вообще мало ... но я верю в пЫонерафф - насочиняют ещё :)

Я когда-то даже хотел его выучить. Но пока собрался - вышел rust, которой больше подходит под мои задачи.

Фигня вопрос! Скоро перепрыгнешь на какой нибудь Nim, а потом на Red, а потом ... так и не доучив предыдущий йозыг :) Вот такие Ыгспёрды и есть основная аудитория - так называемый hype-driven development :) Лемминги мля ...

Ну и rust более живой...
RazrFalcon

Ты главное повторяй почаще :) А то запах у него становится похожим на запах от «D» :-)))) «С» оно заменить не сможет, потому что для замены ржавая программа должна начинаться с unsafe и закачиваться по выходу из этого блока. :-) Ну напупа оно тогда? И да С - это по локоть в железе, и работает везде. Сейчас _нет_ платформ где нету С компилера. ржавчику до такого RazrFalcon до половой зрелости :) С++ ржавый тоже не заменит. Они по сложности друг друга стоят, а про «безопасность» ржавого я уже написал. Вот лет через 10 когда RazrFalcon перепишет все библиотеки на нём - тогда да.

Про D писать не буду, это «герои вчерашних дней»(С)

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

А вот писать код на нем мне не нравится, да и читать тоже.

Ваши вкусы никого не волнуют.

А ваши типо - волнуют всех ?! :-)))) Или ты обиделос? Смотри как секта остро реагирует стоит только на их фетишь криво посмотреть :-)))

RazrFalcon ★★

Дайте ему ещё звезду! Оно же доставляет забесплатно! :-)

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

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

Бреееееехняяяя! :-) Во вторых - лично пока не знаю ни одного примера, чтоб ушли обратно. Во первых - это тупо невозможно! У нас народтт оччень уж «ипон алса» с тулзой разбирающей стримы с геодатой (многопоточный демон) ... Хотя казалось бы - под питоном лежит С\С++ либа которая занимается байтодро*ем ... А нет, бро, не вышел каменный цветок! :-( Пришлось размазывать на мультипроцесс и плодить E2 инстансы ... а это бабки. А потом наши HR-ы «выкрали» парнягу с геймдева 8-) Он оказался маньяком и прикрутил ту же либу к го. А потом и демона переписал :) Теперь у нас ботлнек - снова сеть. Если только напрямую по 10G подключить - то снова упрёшься в проц и память :) Скажи мне почему я должен верить тЭоретикам, а не своим глазам и мониторингу? :-))))

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

Питон не проектировался для производительности. Читай диктатора - «производительность в Питоне достигается подключением с\с++ либ» и точка. Сравни третий со вторым 8-0 Производительностью в нем ___вообще___ не парятся :-( По поводу рук - святая правда. Да только пойди найди этих пряморуких то. И найди бюджет чтоб их нанять. А систему надо вчера. Впрочем это я про индустрию, если ты жаст-фор-фанщик всё что я тут написал для тебя /0 :-) Я и сам, когда жаст-фор-фан лабаю - ни на какие компромисы не иду :)

Как то так ...

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

Что есть жизнь? Ты поднимаешь серьёзные вопросы, на которые многие поколения философов не смогли дать внятного ответа. Но на бытовом уровне даже ребёнок отличит живое от мёртвого

С вакансиями нынче туго стало?))

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

И если по поводу того, что лучше Rust или С++ можно долго спорить, то по поводу Rust vs pure C вывод для многих однозначен: Rust лучше...

.. выбросить! :)

Поправил,

eao197

не благодари! :)

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

D это более адекватный Go

С наследованием и виртуальными методами?

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

Сам Пайк, если не ошибаюсь, говорил о том, что когда в Google осознали, что производительности Python-а не хватает

То надо было обратить внимание jit. Указание типов переменных + немного контролируемой магии позволяют творить чудеса

NextGenenration ★★
()

Что у d lang с следующими вопросами: защита от null на этапе компиляции(если собралось, значит не упадёт), защита от проблем с многопоточностью, развитый макропроцессор, как реализована обработка ошибок, есть ли union типы, есть ли асинхронщина и yield, можно ли создавать именованные кортежи и аргументы с помощью строковых литералов?

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

Ненужное ненужно лезет из могилы

Это ты про С++?

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

А у разрабов уже не стоит вопрос C++ или D.

Можно подумать он раньше стоял.

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

Примитивный макропроцессора(точнее его отсутствие)(по сравнения с растовским), многословный синтаксис, проблемы с нулевыми указателями - вот что нужно в 2017 году

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

Примитивный макропроцессора(точнее его отсутствие)

У D есть продвинутый compile time function evaluation и текстовые mixin-ы. Там надобности в макропроцессоре и нет.

А тут еще и static foreach в новой версии D завезли...

eao197 ★★★★★
()

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

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

P.S. Сколько этих закрытых проектов было - и не вспомнить. Хотя, например Icon или Effel кто-то помнит?

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

У D есть продвинутый compile time function evaluation и текстовые mixin-ы. Там надобности в макропроцессоре и нет.

Макропроцессор - избавление от boilerplate. Нет нужды прописывать тело свойства - достаточно небольшой пометки от макропроцессора. Нет нужды в boilerplate для мемоизации - достаточно небольшой пометки макропроцессора. И так далее.

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

В D это достигается за счет шаблонов, рефлексии, CTFE и mixin-ов. Если хотите, можете считать это другой формой макросов.

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

Effel кто-то помнит?

А что, Eiffel кто-то уже закрыл?

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

Хотя, например Icon или Effel кто-то помнит?

Такое чудище как Effel сложно забыть

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

В D это достигается за счет шаблонов, рефлексии, CTFE и mixin-ов

Мне нужно применить к функции другую функцию. Как это будет выглядеть?

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

P.S. Сколько этих закрытых проектов было - и не вспомнить.

Хорошо помню проект Windows :-) Отличный проект :-) Никаким открытым проектам типа Linux за ним не угнаться :-) Лол :-)

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

Вас не затруднит привести пример того, чего вы хотите?

Вот просто функция

def fib(n):
	if n < 2:
		return n
	return fib(n-2) + fib(n-1)
Добавили макрос, он свершил магию и функция стала мемоизируемой. Тело переписывать не пришлось, это сделал компилятор
@memoize
def fib(n):
	if n < 2:
		return n
	return fib(n-2) + fib(n-1)

NextGenenration ★★
()

А есть ли рантайм D в виде пакетов для тех же Дебиана, Федоры, Минта (желательно в стандартных репозиториях)? Или каждую прогу для распространения в бинарниках надо собирать статически?

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

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

Примитивный макропроцессора
по сравнения с растовским

Растовский скоро на мороз выкинут, ибо кривоват.

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

У тебя библиотека на 500 методов. Ты будешь для каждого метода создавать алиас? Важное напоминание: если макропроцессор позволяет скрыть ставшую ненужной заготовку метода, то тут придётся не только алиасы создавать, но и заготовки скрывать.

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