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

я делаю свой процессор

okay.jpg

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

Чо за процессор?

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

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

Зависит от задач. Вот Apple в Swift сделала ARC потому, что из-за gc будет интерфейс лагать и батарейка дохнуть.

Если не ошибаюсь, в objective-c тоже был GC в какой-то момент, а потом его выпилили.

Для серверов, где отзывчивость роли не играет, - сойдёт и GC.

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

Отличия Фортрана 2003 от 90 (95 пришёл мимо меня). 2008 не осилил целиком, признаюсь.

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

16 не нужно по тем же причинам.

7 бит достаточно.

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

Если не ошибаюсь, в objective-c тоже был GC в какой-то момент, а потом его выпилили

там сейчас тоже ARC

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

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

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

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

Хороший язык, гораздо лучше ублюдочного мутанта С++, но не взлетит. Ибо для системного программинга не годится из-за GC. А вот Раст взлетит, потому-что предлагает уникальные фишки, которых нет ни у одного языка.

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

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

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

да да да. среди мозиллы и пары фанатиков.

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

Ибо для системного программинга не годится из-за GC.

Т.е. по твоему если в языке есть gc и он не системный, то не взлетит? Странно, почему все новые языки которые взлетали, не были системными и в них gc/arc?

А вот системного языка без gc который взлетел за последние 20 лет я не помню

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

И че? Какая разница что происходит в двух компаниях в мире? Или вы собрались примкнуть к их зубрам?

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

только не понятно зачем вы их в пример ставите

Отличный пример для:

a) прикладной ниши, в которой у С++ мало конкурентов;

b) нового проекта, который начали и с нуля сделали на C++ в современных условиях.

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

А при чем здесь пул разработчиков?

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

И то, и другое не верно. Чем меньше людей в C++ном проекте, тем лучше.

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

Странно, почему все новые языки которые взлетали, не были системными и в них gc/arc?

Ну давайте посмотрим на те из них, которые a) статически типизируемые и b) компилируемые (не суть важно в нативный код или в JVM/MSIL). Что из этого взлетело за последние 20 лет? Какие вложения туда были сделаны? Кто за этим стоял?

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

вы еще верите в городские легенды про то, что софт на C++ можно разрабатывать только большими командами, и только если каждый член в команде легко читает исходники Boost-а.

Верю. А вот историй про «мы посадили пару студентов за Go» и они нам сделали крутой проект - валом. К C++ без команды зубров с минимум 10 лет опыта судя по легенде подходить вообще нельзя.

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

А вот историй про «мы посадили пару студентов за Go» и они нам сделали крутой проект - валом.

Можно хоть одну?

судя по легенде

okay.jpg

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

Чем меньше людей в C++ном проекте

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

anonymous
()

Кстати, системный язык с GC - Oberon, сделано черти знает когда уже.

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

Можете показать пальцем, где там ««мы посадили пару студентов за Go» и они нам сделали крутой проект»?

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

А вот историй про «мы посадили пару студентов за Go» и они нам сделали крутой проект - валом.
Ссылка на десяток бложиков.

Ору!

У Go, кроме докера, ничего нету.

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

Потом найдите мне такое же для c++.

Посмотрите на пакеты в лине. 90% на C/C++ и написаны студентами.

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

Откройте любую и почитайте.

Ну как же можно так подставляться :) Берем любую: Moving a team from Scala to Golang. Scala по сложности немногим уступает C++ (если уступает), и Scala-разработчиков, которые явно не дураки, пересаживают на Go.

Где обещанные студенты, я вас спрашиваю?

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

Scala по сложности немногим уступает C++

Да лаадно. Скала просто «другой» язык, но осваивается сильно проще с++.

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

Может он осваивается и проще. Но писать на нем код, сопровождать который смогут только гуру, можно ничуть не хуже, чем на C++. О чем говорилось в Интернетах уже не раз и не два. Даже по ссылке выше на это жалуются.

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

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

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

Ну понятие «взлетело» довольно сложное. Вот C# взлетел однозначно и теперь заинмает нишу Явы и плюсов одновременно, причём его перспективы даже получше Явы, на мой взгляд. Скала взлетела, хотя не так популярна. ГуглоГо взлетел, хотя пока летает низко. Окамл взлетел, хотя число успешных применений невелико. Очевидно, что языковая ситуация продолжает фрагментироваться, так как число языков растёт, число разработчиков и программистов-непрофессионалов тоже растёт, число типов задач тоже растёт. Реально, даже 0,1% это дофига. А многим почему-то кажется, что язык успешен только, если на нём пишут 20% разработчиков.

Вот Фортран современный, кстати, пример того, как язык не удался. Стандарт 90/95 был реально классным и прорывным, очень моного было принесено из алголоподобных языков правильного (хотя строки нормальные так и не сделали). Но 2003/2008 уже переусложнён. А главная причина в том, что старые бибилиотеки вроде Лапака написаны на FixedForm, т.е. по сути на 77 старндарте. А это значит, что слинковать новый код с ними проще в D, чем в современном Фортране, где нужно передать 17 параметров разных итпов, чтобы решить задачу на МНК. Был такой проект Lapack95, но закончился и по факту из современных дистрибутивов выпилен.

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

Ну понятие «взлетело» довольно сложное.

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

ГуглоГо взлетел, хотя пока летает низко. Окамл взлетел, хотя число успешных применений невелико.

Если сравнивать востребованность Go и OCaml-а, то OCaml не больно-то и взлетел. За пределами очень низкой прослойки разработчиков его никто в глаза не видел.

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

Допустим, программа вызывает метод write и отправляет мегабайт данных через сокет. То, что программа написана на Си, магическим образом ускоряет интернет?

Допустим, музыкальная композиция состоит из одной ноты ми пятой октавы. Исполнение этой композиции музыкантом с классическим консерваторским образованием сделает её чем-то лучше, чем оное от сантехника Васи?

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

Вот C# взлетел однозначно и теперь заинмает нишу Явы и плюсов одновременно,

Только в области формошлёпства под винду. На лине он появился совсем не давно. Поэтому на серверах Java.

Окамл взлетел

На нём уже написали что-то нужное, не считая пары проектов от facebook?

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

Ну как бы финансовые приложения пишут за деньги. Ещё трейсеры лучей для расчётов оптических эффектов. Компилятор Ржавчины был на нём изначально, как и многие другие компиляторы.

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

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

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

Т.е. вы, когда говорите о «взлетевших» языках, даже понятия не имеете о том, что же именно и где «взлетело». Вполне ожидаемо.

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

вы, когда говорите о «взлетевших» языках, даже понятия не имеете о том, что же именно и где «взлетело»

what?

не взлетит. Ибо для системного программинга не годится из-за GC

на tiobe гляньте языки «не для системного программинга с gc», сколько вы видите? сколько из них взлетело за 20 лет последних? теперь дайте список системных языков без gc которые взлетели за последние 20 лет

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

Ничего, что на вашем tiobe С/С++ в топ 3? И это после 15 страниц вашего нытья о том, что у них нет области применения.

У всех гоферов проблемы с формальной логикой?

Я вам даже страшное скажу, всё языки в топ 10 старше 20 лет.

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

what?

Это у вас нужно спросить. Вы заявили, буквально:

Странно, почему все новые языки которые взлетали, не были системными и в них gc/arc?

Но когда вас просишь перечислить эти языки, вы ничего сказать не можете. Мол, идите и сами смотрите. Это говорит о том, что вы сами ни одного примера привести не можете.

Точно так же, как и с ««мы посадили пару студентов за Go» и они нам сделали крутой проект».

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

Ничего, что на вашем tiobe С/С++ в топ 3?

это у вас проблемы с логикой, причем тут c++?

всё языки в топ 10 старше 20 лет.

по вашему быть старше это взлететь? javascript взлетел когда по вашему например?

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