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

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

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

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

Базы уже давно написаны и отлично работают. Протоколы новые я тоже не помню особо. Все это в режиме maintance. В редком случае появляется нечто новое, тот же cockroachdb и ряд других, а вот на уровне инфраструктуры и сети вокруг нее поле не паханно.

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

Вокруг Раст больше хайпа да. А вот писать код на нем мне не нравится, да и читать тоже.

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

Как минимум меня, школяра, волнуют. Интересны мнения разных людей, пусть и полярные

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

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

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

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

Ваши задачи никого не волнуют :-)

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

Докеры, кубернетесы, все от хашикорп, Кафка, Кассандра и ещё куча всего, что не так давно появилось. В этой индустрии есть деньги и спрос.

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

кубернетесы

Что-то модным стало стал этот кубернетес :-) Пубертатный период что-ли наступил? :-)

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

вообще-то история была немного другой, пайк об этом сам писал в своём блоге. го изначально задумывался как замена с++ который был «слишком сложный» и «слишком небезопасный» (фанаты раста напряглись), поэтому они подумали и замутили го который «как с++ с батарейками». но что произошло потом не предвидел никто. с++ники посмотрели на го, почесали яйца и забили, а массово повалили питонщики, рубисты и прочий подобный люд, которому нужна была МОЩ, но они не могли осились си или с++.

это всех напрягло, пайк даже посокрушался немного у себя в блоге, но на последней стадии переживания горя всё равно наступает принятие и они решили, что так в общем-то тоже ничего.

с тех пор оно как-то так и крутится. питонщики переписывают на го то, где как им кажется, не хватает МОЩИ, ну и вообще интересно же попробовать этот язык, как он вообще, всё такое. потом это, как правило, приходится переписывать обратно на питон, но уже по-человечески, чтобы оно не тормозило. проблема же не в том, что питон тормозит, а в том, что у некоторых людей руки растут из жопы.

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

Он почти работает и манаджит контейнеры, видимо период да

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

Так это все прекрасно показывает, что Ди там и не нужен. Джава, Го, ща вот Растоманы начнут подтягиваться. И все это языки с гораздо большим комьюнити.

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

всё по памяти, это всё давно было.

вот например: https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html (2012 год)

I was asked a few weeks ago, «What was the biggest surprise you encountered rolling out Go?» I knew the answer instantly: Although we expected C++ programmers to see Go as an alternative, instead most Go programmers come from languages like Python and Ruby. Very few come from C++.

остальное сами ищите.

anonymous
()

Те, кто пишут на D, расскажите каким IDE вы пользуетесь? Если я правильно понял Coedit является наиболее развитым.

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

Спасибо! Я раньше этого рассказа не читал.

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

ты не поверишь, но в куче проектов на C++ не используются шаблоны

Скорее не используются самописные шаблоны.

anonymous
()

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

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

Многий зоопарк на нем уже переписали с с++ и жавы.

Очень интересно. В какой предметной области, если не секрет?

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

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

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

Я подписан на их блог.

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

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

Хочешь - используешь, не хочешь - nogc тогда.

И те же лямбды с замыканиями идут лесом. Нефиг-нафиг. Вроде как сам Александреску не так давно признавал, что stdlib в D не приспособлен к nogc.

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

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

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

Видите ли, мне D без GC вообще не интересен. Это язык с GC и многие его плюшки являются именно что следствием наличия GC.

мне gc тоже не мешает, удобно же

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

выбор это хорошо

umren ★★★★★
() автор топика

Опять супермегаохерительнозачапатый язык убица всех языков?

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

GC не мешает. Во-первых он не мешает. Во-вторых в расчетных задачах он нафик не нужен и отключается. Предвидя вопрос. std в расчетных задачах тоже не нужен. Ну и у нас уже есть все нужные инструменты, которые работают без GC

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

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

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

Да это даже не смешно:

Although C++ classes and COM classes will still work, D polymorphic classes will not, as they rely on the garbage collector.

Exceptions, typeid, static construction/destruction, RAII, and unittests are removed.

Весь этот хайп вокруг betterC явно намекает на то, что сам полноценный D не могут спозицонировать так, чтобы привлечь достаточное количество пользователей: кому-то не нравится наличие GC (для тех есть C++/Rust/Ada), кому-то не хватает экосистемы JVM или .NET-а. Вот и получается, что нужно продолжать искать свое место под Солнцем. Отсюда и попытка сделать вид, что D можно использовать ну вот как C, только лучше. Но и здесь провал: Rust 1.0 зарелизили два года как. И если по поводу того, что лучше Rust или С++ можно долго спорить, то по поводу Rust vs pure C вывод для многих однозначен: Rust лучше. Так что зачем кому-то betterC от полумертвого D, если можно спокойно брать и использовать модный и молодежный Rust?

Так что D без GC — это только чтобы на форумах потрындеть. На практике он мало кому нужен даже в D community.

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

И сколь у тебя опыта юзания D? на сколько большие проекты пришлось на нем делать?

Мой опыт юзания D закончился в середине 2007-го года, когда Брайт и Александреску заявили о разработке D2, который не будет совместим с D1. Тогда стало понятно, что нет смысла уходить с C++ на D. Можно сказать, что не ошибся.

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

ну то есть нет от слова совсем. Тогда твое мнение о D очень ценно, несомненно. Продолжай держать нас в курсе.

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

А при чём тут опыт? Вот у меня нет опыта разработки на JS, но это не делает JS нормальным языком.

RazrFalcon ★★★★★
()
Последнее исправление: RazrFalcon (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.