URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 97934
[ Назад ]

Исходное сообщение
"Вышла версия 2.066 компилятора языка D"

Отправлено opennews , 19-Авг-14 10:23 
Вышла (http://dlang.org/download.html) версия 2.066 кроссплатформенного компилятора языка программирования D (http://ru.wikipedia.org/wiki/D_%28%D1%8F%...: Digital Mars D (DMD (http://dlang.org/)). Язык D использует статическую типизацию, обладает синтаксисом, схожим с C/C++, и обеспечивает производительность компилируемых языков, при этом заимствуя некоторые полезные возможности динамических языков в области эффективности разработки и обеспечения безопасности. Например, предоставляется поддержка ассоциативных массивов, косвенное определение типов, автоматическое управление памятью, средства параллельного программирования и т.п.

Краткий список изменений (http://dlang.org/changelog.html?2.066):

-  Изменения в компиляторе DMD и языке:


-  Опция "-w" теперь выводит предупреждение про неиспользованное значение, возвращаемое pure-функцией. Так как pure-функции не могут иметь побочных эффектов, то подобный код, скорее всего, возник из-за невнимательности.

-  Опция "-noboundscheck" объявлена устаревшей и заменена на опцию "-boundscheck={on|safeonly|off}". Это позволяет гибко управлять проверками на выход из диапазона массивов в режиме -release (раньше включить проверку на выход из диапазона для relese-режима было невозможно).

-  Добавлена опция "-vgc", которая выводит места, где программа неявно выделяет память (это могут быть изменения размеров динамических массивов, объединения строк и т.п.). Опция использует новый атрибут "@nogc" для анализа.

-  Добавлена опция "-vcolumns", которая в диагностических сообщениях включает вывод не только номера строки, но и позиции в строке.

-  Добавлена опция "-color", которая расцвечивает диагностические сообщения об ошибках и предупреждения.

-  Добавлена языковая конструкция extern (C++, namespace), позволяющая использовать прямые вызовы функций C++ из пространств имён.

-  Добавлена возможность перегружать оператор многомерного слайсинга (multi-dimensional slicing).

-  Добавлен новый трэйт: __traits(getFunctionAttributes). Он позволяет получить атрибуты функции, такие, как "pure", "nothrow", "@safe" и пр.

-  Улучшен механизм автоматического определения типов в шаблонах. Шаблон вида "void foo(T)(T[] arr, T elem)" теперь может быть вызван как "foo(a, 1)", если a определено как "short[] a". Раньше было необходимо явно приводить 1 к типу short.

-  Операции Read-Modify-Write на разделяемых (shared) переменных объявлены устаревшими. Вместо "foo += 2" теперь следует использовать "atomicOp!"+="(foo, 2)".

-  Добавлена поддержка конструкторов для встроенных типов: "auto foo = long(1)".

-  Изменения в стандартной библиотеке


-  В модуле core,time операция Duration.get объявлена устаревшей и заменена на универсальный шаблон Duration.split, позволяющий более гибко управлять получением нужных частей временного промежутка. Duration.get всегда вычисляла все части (недели, дни, часы, минуты, секунды и т.д.), но возвращала только запрошенные; Duration.split вычисляет только то, что запросил пользователь. Вдобавок Duration.split может возвращать значения как в out-переменных, так и структуру с запрошенными полями.

-  Некоторые свойства встроенных типов заменены на библиотечные функции. Благодаря универсальному синтаксису вызова функций (http://dlang.org/function.html#pseudo-member) программисту не надо исправлять код. Такая замена позволяет более гибко управлять деталями реализации встроенных типов - динамических массивов и ассоциативных массивов.

-  Типы-ключи ассоциативных массивов теперь нуждаются в операции opEqu (сравнение на идентичность), а не в операции opCmp (сравнение "больше-меньше-равно").

URL: http://forum.dlang.org/thread/lstig7$utn$1@digitalmars.com
Новость: http://www.opennet.ru/opennews/art.shtml?num=40406


Содержание

Сообщения в этом обсуждении
"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 19-Авг-14 10:23 
Надо на D systemd переписать - больше линукс инноваций!

"Вышла версия 2.066 компилятора языка D"
Отправлено Resonance , 19-Авг-14 10:26 
Единственный шанс сделать язык нужным - портировать на Android/iOS. Нативить на плюсах не в кайф.

"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 19-Авг-14 10:33 
У D практически не осталось явных преимуществ перед C++. Сегодня C++14 вышел, ещё дальше толкнул развитие языка.

"Вышла версия 2.066 компилятора языка D"
Отправлено Resonance , 19-Авг-14 10:50 
> У D практически не осталось явных преимуществ перед C++. Сегодня C++14 вышел,
> ещё дальше толкнул развитие языка.

Ну вот тут не соглашусь, пакетная организация кода чего только стоит в D, а так же не нужно разделять на .cpp и .h исходники. Да и вообще С++ слишком переусложнен. Вот пример кода с хабра:
int& (*fpi)(int*) = [](auto* a) -> auto& { return *a; }; // OK
Все понятно?


"Вышла версия 2.066 компилятора языка D"
Отправлено nib , 19-Авг-14 11:33 
а чем тут можно напугать?

"Вышла версия 2.066 компилятора языка D"
Отправлено Сука , 19-Авг-14 11:34 
да

"Вышла версия 2.066 компилятора языка D"
Отправлено RazrFalcon , 19-Авг-14 11:36 
>> а так же не нужно разделять на .cpp и .h

какой ужас


"Вышла версия 2.066 компилятора языка D"
Отправлено Пиони , 19-Авг-14 11:44 
Это непонятно только тем, кто на C++ никогда толком и не писал :)

"Вышла версия 2.066 компилятора языка D"
Отправлено Наноним , 19-Авг-14 11:49 
> int& (*fpi)(int*) = [](auto* a) -> auto& { return *a; }; // OK

Кто ни будь, разтолкуйте, интересно стало =)


"Вышла версия 2.066 компилятора языка D"
Отправлено Пиони , 19-Авг-14 12:09 
Слева - переменная fpi, которая является указателем на функцию, принимающую в качестве аргумента указатель на int, и возвращающая ссылку на int.

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

В случае с fpi сущность будет иметь тип int.


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 19-Авг-14 12:12 
указатель на функцию принимающую указатель на int и возвращающую ссылку на int который указывает на нафиг никому не нужную лямбда функцию которая принимает указатель на автоматический тип (в данном случае int) и возвращает ссылку на автоматический тип (в данном случае int).

все эти последние C++ стандарты просто мусор для ленивых чудаков которые замусоривают язык из за того что им проще писать auto, а не полный тип и они не осилили pthread_create и восторгаются тупыми как и они сами лямбда функциями


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 19-Авг-14 12:18 
pthreads лежат гораздо ниже уровнем, чем C++11 threads. Первыми пользуются либо студенты, либо авторы параллельных библиотек. Auto в некоторых случаях удобен, хотя бы при создании итератора.

"Вышла версия 2.066 компилятора языка D"
Отправлено Пиони , 19-Авг-14 12:25 
Привет чудакам, которые любят писать везде тип, а потом много рефакторить, от чудаков которые используют auto, для автоматическое дедукции и отдают себя радостям жизни

"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 20-Авг-14 07:06 
Привет любителям auto, пишущим такой код, в который без IDE, всплывающими подсказками позволяющей узнавать типы переменных, лучше даже не смотреть.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 12:38 
> язык из за того что им проще писать auto

google:dlang+voldemort+types. вперёд сделать это без auto.


"Вышла версия 2.066 компилятора языка D"
Отправлено Crazy Alex , 19-Авг-14 14:35 
Тут до людей еще не дошло, что auto - это механизм абстракции. Что интересно, в скриптовых  языках они этот механизм обычно вполне ценят.

"Вышла версия 2.066 компилятора языка D"
Отправлено Vkni , 19-Авг-14 15:30 
> Тут до людей еще не дошло, что auto - это механизм абстракции.
> Что интересно, в скриптовых  языках они этот механизм обычно вполне
> ценят.

Это вывод типов для бедных. В OCaml'е аналог функции (с учётом того, что ссылок нет), выглядел бы так:

let fpi = fun (a:int) -> a;;

Сделать нормальный вывод типов мешает совместимость с языком Цэ - автоматическое приведение типов.


"Вышла версия 2.066 компилятора языка D"
Отправлено Crazy Alex , 19-Авг-14 17:04 
А что такое вывод типов? Это и есть механизм абстракции. Когда всё, что мне надо знать - что то, что я получу от функции, имеет нужный мне интерфейс (соответствует концепту). И, соответственно, мой код сможет с этим работать.

"Вышла версия 2.066 компилятора языка D"
Отправлено Vkni , 19-Авг-14 17:15 
> А что такое вывод типов? Это и есть механизм абстракции.

Угу. Кстати, auto - это те же шаблоны, только сделанные в другом виде. :-) Т.о. для описания одного и того же у C++ теперь есть 2 похожих частично перекрывающихся механизма.


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 04:28 
всё на свете шаблоны, только в разных видах.

"Вышла версия 2.066 компилятора языка D"
Отправлено Crazy Alex , 21-Авг-14 18:43 
Э... вывод типов - да. Но шаблоны? Чего ради?

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

В том же D, вон, есть, как минимум, три способа сделать что-то при выходе из скопа - RAII аналогичный плюсам, finally как в джаве и свой оператор scope(exit). И обычно крайне очевидно, что когда применять. Хотя если упереться рогом можно было бы оставить только один механизм - но писать было бы явно менее удобно.


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 21-Авг-14 18:55 
scope() вообще мегаофигенен, как по мне: всяческие освобождения можно писать сразу рядом с захватом и не напрягаться, что что-то забыл, не листать код.

"Вышла версия 2.066 компилятора языка D"
Отправлено ями , 19-Авг-14 14:12 
Господи, шо это?

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 14:23 
> Господи, шо это?

это перл.

хотя… нет, перл понятней.


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 19-Авг-14 21:14 
это не C++, а C. На C++ будет как-то так: std::function<int& (int*)> fpi = ...

"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 19-Авг-14 22:51 
Твоя ирония понятна, собрат аноним, но в С нет ни замыканий, ни вывода типов.

"Вышла версия 2.066 компилятора языка D"
Отправлено rob pike , 19-Авг-14 23:24 
> в С нет ни замыканий

Вопрос не так однозначен. http://okmij.org/ftp/cpp-digest/#pointer-closure

> ни вывода типов

И аппликативных функторов тоже нет. Вот ведь ужас-то какой.


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 20-Авг-14 11:15 
> Вопрос не так однозначен. http://okmij.org/ftp/cpp-digest/#pointer-closure

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

> И аппликативных функторов тоже нет. Вот ведь ужас-то какой.

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


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 20-Авг-14 00:45 
Плохой пример. Откройте книжку Шаблоны С++ - именно они причина, почему Александреску сказал "хватит" С++. С++ неверен by design - слишком много к нему присобачивали design-костылей. В итоге получилось пугало: ни красоты ни лаконичности. Мне кажется у него нет будущего и это уже агония: все ушли в C, Java/Python/C# и т.д. Кто-то прекрасно себя чувствует в Erlang, ML/HAskell... Впереди восхождение Rust, Go, D. Нет смысла инвестировать так много времени в язык, отдача от которого так низка. Вспомните ошибку компиляции шаблонов - в 100 строк и романтика сразу пропадет.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 05:15 
но всё это перекрывается тем, что на C++ уже написано огромное количество кода, и переписать его на другом языке часто попросту нереально по трудозатратам. а вот постепенно чистить и улучшать, используя новые фичи C++ — вполне возможно.

"Вышла версия 2.066 компилятора языка D"
Отправлено chinarulezzz , 19-Авг-14 12:34 
c++ пухнет, а не развивается.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 12:37 
> У D практически не осталось явных преимуществ перед C++.

ага. кроме отсутствия идиотского legacy и нормальной системы шаблонов, а не того инфернального ужаса, который в цпп.


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 19-Авг-14 17:24 
Теперь инфернальные ужасы C++ и легаси есть и в D - ведь можно подцеплять С++ код :).

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 04:27 
> Теперь инфернальные ужасы C++ и легаси есть и в D - ведь
> можно подцеплять С++ код :).

не весь, шаблоны нельзя пока. Уолтер по этому поводу думает, но дело непростое.


"Вышла версия 2.066 компилятора языка D"
Отправлено Yaisis , 19-Авг-14 18:47 
Сколько бы С++ не развивали, основной его синтаксис уже вряд ли изменится. Обрастёт он всеми возможностями, что есть и в других языках, но это нагромождение символов так и останется. В D изначально внедряли всё новое и поэтому код в нём более наглядный.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 05:06 
> В D изначально внедряли всё новое

lolwut?!


"Вышла версия 2.066 компилятора языка D"
Отправлено Kodir , 19-Авг-14 21:27 
Жирный плюсовый троль, ты хоть Ди в глаза-то видел??

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 12:36 
> Единственный шанс сделать язык нужным - портировать на Android/iOS. Нативить на плюсах
> не в кайф.

конечно, как же иначе. почти 150 contributors, большое живое комьюнити, фэйсбук — это всё фигня, язык «нинужен». а вот как только его на говнодроид заточат (конечно, это будет не анонимус: ему надо готовенькое; присоединиться к уже существующему проекту анонимус тоже не хочет — хотя gdc умеет генерировать код для ARM, и проект портирования именно на говнодроид есть) — так сразу нужен станет.

тьфу.


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 19-Авг-14 15:15 
Смешно везде этот фейсбук пихают. То PHP с фейсбучными ускорялками, то вот D. Невдомёк вам что они просто с жиру бесятся и прикручивают под свои задачи инструменты которые для этого не подходят просто потому что могут. Почти 150 контрибуторов и про живое коммунити это вы рассмешили. Был ровно один интересный проект на D - openmw. Так давно на C++ переехал, потому что D не нужен.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 15:18 
ок. не нужен. проходи мимо.

"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 20-Авг-14 04:16 
А поговорить?!

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 04:26 
> А поговорить?!

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


"Вышла версия 2.066 компилятора языка D"
Отправлено yet another anonymous , 19-Авг-14 12:05 
Позиционирование D какое-то мутное.

Если C --- достаточно низкоуровневый язык, C++ --- мультипарадигменный, позволяющий выбирать уровень абстракции/модель в зависимости от задачи, то D --- "ещё один язык с C-подобным синтаксисом".


"Вышла версия 2.066 компилятора языка D"
Отправлено Пиони , 19-Авг-14 12:16 
Как я понимаю, язык D позиционировался как "Нормальный C++", но т.к. C++ уже имеет огромную аудиторию, и в последнее время стал развиваться шустрее, впитывая многие преимущества D, он постепенно оставляет D без преимуществ

Еще сделают в С++ import - цены ему не будет
http://llvm.org/devmtg/2012-11/Gregor-Modules.pdf


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 12:39 
> D --- "ещё один язык с C-подобным синтаксисом".

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


"Вышла версия 2.066 компилятора языка D"
Отправлено yet another anonymous , 19-Авг-14 15:09 
> ценное экспертное мнение от знатока ди, чо. хоть «приветмир»-то сделал? про что-то поглубже я и не спрашиваю, из цитаты уровень очевиден.

Именно так: я не нашел ответа на "зачем мне нужен D? для каких задач D будет эффективен/полезен?", поэтому дальше "hello, world!" и нескольких простых оценочных задач интереса не возникло.

Основное впечатление: в язык надергано "специальных случаев" на вкус авторов. Какую целевую область они при этом хотят прикрыть (и какой ценой) --- осталось непонятным. (Точнее, осталось понятным, что авторы языка этим вопросом совсем не заморачивались).


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 15:16 
перевожу: «изучать я ничего не хочу, чем этот ваш автомобиль лучше лошади — не понимаю. куда сено совать — не ясно. дымит, воняет. правила какие-то учить заставляют. фигня, короче, не понимаю, зачем эти автомобили придумали.»

"Вышла версия 2.066 компилятора языка D"
Отправлено Mihail Zenkov , 19-Авг-14 13:40 
> D --- "ещё один язык с C-подобным синтаксисом".

Скорее аналог C++ с более адекватным синтаксисом.


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 13:47 
> Скорее аналог C++ с более адекватным синтаксисом.

в общем-то, это и была оригинальная идея. повыкидывать legacy и сделать нечто вроде «c++ done right». а потом туда пришёл Александреску и добавил: «and templates done right».


"Вышла версия 2.066 компилятора языка D"
Отправлено anonymous , 19-Авг-14 19:14 
>> Скорее аналог C++ с более адекватным синтаксисом.
> а потом туда пришёл Александреску и добавил:
> «and templates done right».

Я не пойму, ты сейчас серьёзно пишешь или иронизируешь?


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 04:35 
> Я не пойму, ты сейчас серьёзно пишешь или иронизируешь?

совершенно серьёзно. и, в общем-то, по фактам: оно примерно так и было. одна из мегафич D — действительно удобные шаблоны, которые не выглядят белибердой, которые удобно использовать, которые можно не только писать, но и читать без труда. также Александреску ответственен за довольно большую часть std.algorithm (и не только).

а начиналось у него всё с того, что: «я попробую, вдруг интересное что?» мне сейчас лень статью об этом искать, но по-моему, она где-то в доббсе была.


"Вышла версия 2.066 компилятора языка D"
Отправлено Anonym0uz , 19-Авг-14 12:31 
К сожалению самолёт получился слишком тяжёлым. А так хорошо всё начиналось…

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 12:42 
> К сожалению самолёт получился слишком тяжёлым.

в чём? что именно тебе кажется там ненужным? нет, не сарказм.


"Вышла версия 2.066 компилятора языка D"
Отправлено анон , 19-Авг-14 13:56 
в этом вашем цпп есть аналог mixin-ов?

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 14:01 
> в этом вашем цпп есть аналог mixin-ов?

и ctfe, ага. впрочем, цпп-шники будут говорить, что «нинада». ровно до тех пор, пока в очередном стандарте такое не введут — тогда оно сразу станет Уберфичей.


"Вышла версия 2.066 компилятора языка D"
Отправлено анон , 19-Авг-14 14:16 
ну лицемеры они такие. в цпп нет и доли интроспекции d. отвратные шаблоны вообще отдельный разговор

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 14:22 
дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.

"Вышла версия 2.066 компилятора языка D"
Отправлено anonymous , 20-Авг-14 01:04 
> дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.

А что, Александреску правда в D ушел?


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 04:39 
>> дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.
> А что, Александреску правда в D ушел?

не то, чтобы «ушёл с концами»: C++ он не бросил, пишет статьи, выступает на конференциях. но в то же время он весьма активный разработчик на D, написал практически весь костяк std.algorithm (это такой дальний родственник алгоритмов из STL, только использует ranges) и ещё много всякой шаблонной магии в D.

книгу, опять же, написал: «The D Programming Language» (TDPL). как и полагается — отличная книга. её даже перевели на русский, и не так уж плохо, скорее даже хорошо.


"Вышла версия 2.066 компилятора языка D"
Отправлено anonymous , 20-Авг-14 10:09 
> не то, чтобы «ушёл с концами»: C++ он не бросил, пишет статьи, выступает на конференциях.

Хорошо, что ушел. Плохо, что не бросил C++.

"Не читайте Александреску." (C) А. Степанов.


"Вышла версия 2.066 компилятора языка D"
Отправлено Crazy Alex , 19-Авг-14 14:40 
Ну, constexpr уже весьма близок к ctfe. А вот более гибкая объектная система за счет UFCS и alias this - это уникальные фичи D - особенно когда используются с шаблонами.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 19-Авг-14 14:46 
по-моему, alias this — это какая-то невнятная мерзопакость. чемодан без ручки. его надо или выкинуть, или уже приделать нормальную ручку и обивку поменять.

"Вышла версия 2.066 компилятора языка D"
Отправлено Crazy Alex , 19-Авг-14 16:59 
А за что так? Как по мне - удобная и контролируемая альтернатива множественному наследованию. Для реализации тех же аспектов - в самый раз, тем более, что с шаблонами его, насколько я помню, уже подружили.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 04:44 
> А за что так?

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

если уж так надо — есть интерфейсы, их можно присобачивать к классу много. а лучше вообще писать на шаблонах, которые тупо проверяют наличие нужных методов, и тогда совершенно пофиг на типы и наследования: нужные методы есть? ок, поехали. ranges, например.

единственное, что даёт alias this и чего нельзя добиться иначе (и то не всегда, есть нюансы) — неявное преобразование типов. то есть, когда класс A можно использовать как класс B, хоть они и не особо родственники. я, впрочем, считаю, что это лишняя фича, только затрудняющая понимание кода.


"Вышла версия 2.066 компилятора языка D"
Отправлено Crazy Alex , 20-Авг-14 14:39 
То, что alias this единственный - насколько я помню, бага, которая есть в багзилле.

А интерфейсы (хоть формальные, хоть проверки через is и тому подобное) - это хорошо, но тогда надо для всего подряд ляпать прокси, если у тебя данный интерфейс реализуется отдельным готовым объектом, от которого ты не хочешь наследоваться. Как примитивный пример - допустим, есть объект и ты хочешь иметь возможность его лочить снаружи. Одно дело - когда ты создал внутри мьютекс, написал alias myMutex this и всё. Другое - когда тебе lock|unlock надо явным образом пробрасывать. Шаблонам оно ортогонально.


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 14:46 
> То, что alias this единственный - насколько я помню, бага, которая есть
> в багзилле.

и давно. и всем пофигу.

алсо, template mixins. на кой тебе этот alias? спокойно делаешь mixin template и миксинишь его в класс/структуру. с методами lock и unlock. потому что высовывать детали реализации (mutex) наружу — моветон. а для универсальной лочки — опять же шаблон, который проверит наличие нужного метода.

хватит уже крестами мыслить, D — не кресты.


"Вышла версия 2.066 компилятора языка D"
Отправлено Crazy Alex , 20-Авг-14 16:25 
Ну, они неспешно, но всё чинят.

mixin template - можно, std.typecons.Proxy. Но это ни  хрена не "is a" - то есть оно крякать умеет, но не утка а, скажем, уткоробот. Если у тебя чисто шаблонный код - нормально, но если еть еще и объектные иерархии - ты захочешь иметь возможность именно неявного преобразования. И ещё когда хочется красивые штуки сделать - ну там, ORM прозрачно работающий и тому подобное - тоже очень к месту оно оказывается, именно из-за неявного преобразования.

Я, в общем-то, с чего начинал - в отличие от плюсов в D есть масса вариантов реализовать ООП, и этого в плюсах не будет никогда, в отличие от более-менее человеческих шаблонов или тех же лямбд.


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 16:40 
> Ну, они неспешно, но всё чинят.

стараемся. ;-)

> если еть еще и объектные иерархии

да ну их нафиг, шаблонная магия вкуснее.

> Я, в общем-то, с чего начинал - в отличие от плюсов в
> D есть масса вариантов реализовать ООП, и этого в плюсах не
> будет никогда, в отличие от более-менее человеческих шаблонов или тех же
> лямбд.

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


"Вышла версия 2.066 компилятора языка D"
Отправлено Crazy Alex , 21-Авг-14 18:34 
Да я о том, что сделать более человеческие шаблоны в плюсах можно - и даже совместимость не сломать. А вот тот же UFСS со всеми плюшками, которые он даёт шаблонам - в жизни не впихнуть.

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

Мне, в общем-то, D тем в основном и понравился, что особо нет попыток запихнуть в рамки "истинно правильной веры". Хочешь ООП с деревом классов - бери. Хочешь шаблоны - бери. Хочешь функциональный подход - тоже можно, хотя хаскелистам не понравится. Хочешь перемешать - вперёд.


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 21-Авг-14 18:41 
rdmd тоже крутая штука. я как-то уже и привык скрипты на D писать… ;-)

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 21-Авг-14 18:44 
кстати, ребята сейчас допиливают автотранслятор фронтэнда с c++ на d. и планируют после стабилизации перейти на дишный фронтэнд. оно (ddmd), в принципе, уже даже «приветмиры» собирает. благо, фронтэнд написан без изысков, так что большинство кода вполне автоматически транслируется.

"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 19-Авг-14 20:18 
> в этом вашем цпп есть аналог mixin-ов?

Не знаю, как в цпп, а в этом нашем С есть примитивный аналог, хоть и не часть стандарта:


$ cat mixin.c
#include <stdio.h>
struct T1 {
        int x;
};
int inc_x(struct T1* t){
        return t->x++;
}
struct T2 {
        int y;
};
int dec_y(struct T2* t){
        return t->y--;
}
struct T {
        struct T1;
        struct T2;
        int z;
};
void main(){
        struct T t = {.x = 42, .y = 11, .z = -4};
        printf("%d\n",inc_x(&t) + dec_y(&t) - t.z);
}

$ gcc -fplan9-extensions mixin.c -o mixin
$ ./mixin
57



"Вышла версия 2.066 компилятора языка D"
Отправлено Kodir , 19-Авг-14 21:33 
> Не знаю, как в цпп, а в этом нашем С есть примитивный аналог

С таким успехом и ассемблер - примитивный аналог Си. :)
Разработчикам не нужны "аналоги", "копии", "обходные пути" - им нужен ПРЯМОЙ инструмент для выражения своих мыслей. Ну и надёжный, конечно - что Ди и сделал как замена таймбомбовому Цэ-пи-пи.

Линуксу давно уже нужен нормальный язык, позволяющий хотя бы в 21 веке забыть кошмарный сон "buffer overflow" (а количество этих потенциальных уязвимостей растёт десятикратно с каждой новой перделкой/библиотекой, потому что пишется всё головотяпами-энтузиастами).


"Вышла версия 2.066 компилятора языка D"
Отправлено rob pike , 19-Авг-14 23:15 
> Разработчикам не нужны "аналоги", "копии", "обходные пути" - им нужен ПРЯМОЙ инструмент для выражения своих мыслей

Такого человечество не придумало.
Включая язык, секретаршу и энцефалографию.


"Вышла версия 2.066 компилятора языка D"
Отправлено angra , 19-Авг-14 23:41 
> Линуксу давно уже нужен нормальный язык, позволяющий хотя бы в 21 веке
> забыть кошмарный сон "buffer overflow" (а количество этих потенциальных уязвимостей растёт
> десятикратно с каждой новой перделкой/библиотекой, потому что пишется всё головотяпами-энтузиастами).

Вот в php нет buffer overflow. Как там с безопасностью рассказать или сам знаешь?


"Вышла версия 2.066 компилятора языка D"
Отправлено chinarulezzz , 20-Авг-14 00:20 
>давно уже нужен нормальный язык

Уже есть. Но с одной стороны legacy, с другой инерция.


"Вышла версия 2.066 компилятора языка D"
Отправлено rob pike , 19-Авг-14 23:16 
Ну да. А еще эксепшны есть. В setjmp.h

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 04:53 
это, мягко говоря, соооовсем не то. mixin'ы в D — это геренация кода во время компиляции. проще говоря: mixin(`int a=42;`) во время компиляции будет заменено на «int a=42;».

с первого взгляда эта фича кажется бессмысленной, но если узнать, что в ди во время компиляции можно исполнять код на ди (ограничение — нет глобальных переменных; но на функциональщине можно много всего сделать; например, функция toHash(), вычисляющая SuperFastHash, работает как во время компиляции, так и во время исполнения), то mixin'ы сразу становятся намного более интересными. потому что строки для них можно генерировать довольно сложным ди-кодом.

например, парзить дишным кодом во время компиляции некие файлы с диска и на их основе генерировать дишный код (привет, шаблоны страниц в vide.d).


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 04:59 
p.s. например, библиотека std.regex активно пользуется этой фичей для того, чтобы превратить регулярку в обычный ди-код. при этом ей хватает мозгов использовать автоматы, когда регулярка без бэктрэйсинга и делать другие разные гитики.

конечно, буст тоже нечто подобное умеет на шаблонной магии, но попробуйте почитать код буста для этого, а потом — код std.regex.


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 05:12 
кстати, спасибо. как-то я пропустил чудесный ключ «-fplan9-extensions».

"Вышла версия 2.066 компилятора языка D"
Отправлено Бутират , 20-Авг-14 10:21 
Если язык такой бодрый. Почему он не пришел на замену c++? Не думаю что дело исключительно в традициях. PHP же смогли свергнуть. Причем за более короткое время чем существует C++

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 10:36 
у тебя хороший ник, точно описывает твой пост.

"Вышла версия 2.066 компилятора языка D"
Отправлено Бутират , 20-Авг-14 10:44 
Видимо чтобы меня поняли, придется изъясняться в школьных традициях вашего сообщества.

Этот ваш Дэ задумывался как c++ done right, но в итоге смачно лососнул у c++. О чем говорит текущая его популярность, а вернее его отсутствие. Видать не совсем уж и done right


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 20-Авг-14 11:20 
Язык не так давно немного устаканился.  Была революционная 1-я версия, теперь 2-я сильно продвинутая.  Может будет и 3-я.  Язык D выгребает все самое интересное из других языков и не стесняется самого себя вычищать от анахронизмов. Но в этом его недостаток, нет окончательной стабильности.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 11:44 
> Но в этом его недостаток, нет окончательной стабильности.

«окончательная стабильность» — это «dead as a doornail».

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

чуть активней ломают std, но и то не так быстро, чтобы это сильно напрягало. всегда есть время на починку старого кода (компилятор заругается на deprecation), плюс можно привинтить слой совместимости обычно, если очень уж чинить не хочется (или просто взять старый модуль). на практике — ломается не так много, и в основном то, что касается всяких околосистемных вещей — типа запуска процессов, обёрток над clock_gettime() и ты пы.

ходят разговоры про написание «автомигратора», как в Go, но говорят многие, а делать никому не хочется. в принципе, парзер D на D есть, и продвинутый линтер на его основе тоже есть — так что писать не то, чтобы совсем с нуля надо. но пока — благодаря малому количеству «ломающих изменений» — всем проще починить свой код руками и не заморачиваться написанием (и, что намного важнее — дальнейшей поддержкой) такой тулзовины.


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 20-Авг-14 14:12 
Все просто! Потому что Уолтер Брайт не бородат!

"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 20-Авг-14 15:26 
> Добавлена языковая конструкция extern (C++, namespace), позволяющая использовать прямые вызовы функций C++ из пространств имён.

и как же они умудрились запилить эту фичу при полном отсутствии ABI и linking onvention на плюсовые ф-ии и методы?


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 15:34 
> и как же они умудрились запилить эту фичу при полном отсутствии ABI
> и linking onvention на плюсовые ф-ии и методы?

для винды: -m64 поддерживает m$vc. -m32 поддерживает dmc. -m32mscoff поддерживает m$vc.

для пигвинуса: gcc 4.

точно так же, как и просто extern (C++).


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 20-Авг-14 15:42 
> точно так же, как и просто extern (C++).

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


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 15:48 
> вопрос собственно и был про плюсловые вызовы, хрен с этими неймспейсами. В
> общем, чуваки намутили какую-то костыльную уйню в языке.

а что делать, если стандартизаторы цпп до сих пор не озаботились стандартизацией name mangling? прямой вызов цпп-кода без ц-врапперов — фича достаточно удобная и востребованная. приходится вот так вот извращаться.


"Вышла версия 2.066 компилятора языка D"
Отправлено all_glory_to_the_hypnotoad , 20-Авг-14 20:34 
> а что делать, если стандартизаторы цпп до сих пор не озаботились стандартизацией name mangling?

Ты ничего не понял. Этот самый фантазёр (Страуструп т.е.) специально советует всем делать разные name mangling схемы дабы случайно не слиплись разные ABI в одном бинарнике. Проблема только в отсутствии ABI и calling convention'ов, общая name mangling схема совсем не проблема.

> прямой вызов цпп-кода без ц-врапперов — фича достаточно удобная и востребованная. приходится вот так вот извращаться.

и тут ты тоже ничего не понял. Вызвать c++ код нельзя без сишных врапперов, чего тут не понятно? Это просто невозможно сжелать нормально технически, никак, пока не будет ABI на некоторые вещи у плюсов.

И дурачи из DMD сотворили большую уету сделав попытку поддержвать такие хаки у себя в языке.


"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 20:42 
вот не зря у меня рядом с тобой подпись стоит: «тупорылый уе…н».

"Вышла версия 2.066 компилятора языка D"
Отправлено all_glory_to_the_hypnotoad , 20-Авг-14 21:50 
да, у тебя не зря - это  твой диагноз самому себе, т.е. психологически здоровый человек не будет собирать подписи.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 21-Авг-14 06:31 
у меня голова не казённая, чтобы каждого идиота помнить поимённо. я понимаю, что ты до сих пор не можешь привыкнуть к тому, чтобы перекладывать подобные задачи на технику — а мне лень каждого дурака запоминать. у меня для этого машина есть, которой один раз сказал — и она трудолюбиво в дальнейшем будет отмечать, что имярек — дурак.

"Вышла версия 2.066 компилятора языка D"
Отправлено Crazy Alex , 21-Авг-14 18:37 
А чем метишь? Я давно какую-нибудь хрень приглядываю, чтобы на вебе по всяким критериям заметки показывала - но пока так и не попалась.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 21-Авг-14 18:47 
> А чем метишь?

самописный userjs. в принципе, его можно превратить в универсальный — сделать хуки с xpath для выборок, ещё по мелочи. движок, в общем-то, там внутри почти универсальный — я его для нескольких сайтов применяю.

это не то, чтобы заметки — скорее нечто вроде «титулов» для форумов всяких. с опциональной заменой постов у «обтитулованых» на всякий herpderp, чтобы ерунду не читать.


"Вышла версия 2.066 компилятора языка D"
Отправлено all_glory_to_the_hypnotoad , 21-Авг-14 20:49 
желчью метит, не видно чтоли

"Вышла версия 2.066 компилятора языка D"
Отправлено anonymous , 20-Авг-14 16:41 
ошиблись, надо 2.666

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 20-Авг-14 16:42 
> ошиблись, надо 2.666

может, и до этого дойдём.


"Вышла версия 2.066 компилятора языка D"
Отправлено Аноним , 21-Авг-14 07:25 
Да ладно тебе, твоё участие в D закончилось hello world'ом, а примазываешься как будто сам в dmd коммитил.

"Вышла версия 2.066 компилятора языка D"
Отправлено arisu , 21-Авг-14 07:48 
> Да ладно тебе, твоё участие в D закончилось hello world'ом, а примазываешься
> как будто сам в dmd коммитил.

извини, Уолтер, не узнал тебя в маске анонима.