Вышла (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.me/opennews/art.shtml?num=40406
Надо на D systemd переписать - больше линукс инноваций!
Единственный шанс сделать язык нужным - портировать на Android/iOS. Нативить на плюсах не в кайф.
У D практически не осталось явных преимуществ перед C++. Сегодня C++14 вышел, ещё дальше толкнул развитие языка.
> У D практически не осталось явных преимуществ перед C++. Сегодня C++14 вышел,
> ещё дальше толкнул развитие языка.Ну вот тут не соглашусь, пакетная организация кода чего только стоит в D, а так же не нужно разделять на .cpp и .h исходники. Да и вообще С++ слишком переусложнен. Вот пример кода с хабра:
int& (*fpi)(int*) = [](auto* a) -> auto& { return *a; }; // OK
Все понятно?
а чем тут можно напугать?
да
>> а так же не нужно разделять на .cpp и .hкакой ужас
Это непонятно только тем, кто на C++ никогда толком и не писал :)
> int& (*fpi)(int*) = [](auto* a) -> auto& { return *a; }; // OKКто ни будь, разтолкуйте, интересно стало =)
Слева - переменная fpi, которая является указателем на функцию, принимающую в качестве аргумента указатель на int, и возвращающая ссылку на int.Справа - лямбда-функция, которая принимает указатель на сущность любого типа данных, и возвращает ссылку на сущность этого же типа, разыменовывая полученный указатель.
В случае с fpi сущность будет иметь тип int.
указатель на функцию принимающую указатель на int и возвращающую ссылку на int который указывает на нафиг никому не нужную лямбда функцию которая принимает указатель на автоматический тип (в данном случае int) и возвращает ссылку на автоматический тип (в данном случае int).все эти последние C++ стандарты просто мусор для ленивых чудаков которые замусоривают язык из за того что им проще писать auto, а не полный тип и они не осилили pthread_create и восторгаются тупыми как и они сами лямбда функциями
pthreads лежат гораздо ниже уровнем, чем C++11 threads. Первыми пользуются либо студенты, либо авторы параллельных библиотек. Auto в некоторых случаях удобен, хотя бы при создании итератора.
Привет чудакам, которые любят писать везде тип, а потом много рефакторить, от чудаков которые используют auto, для автоматическое дедукции и отдают себя радостям жизни
Привет любителям auto, пишущим такой код, в который без IDE, всплывающими подсказками позволяющей узнавать типы переменных, лучше даже не смотреть.
> язык из за того что им проще писать autogoogle:dlang+voldemort+types. вперёд сделать это без auto.
Тут до людей еще не дошло, что auto - это механизм абстракции. Что интересно, в скриптовых языках они этот механизм обычно вполне ценят.
> Тут до людей еще не дошло, что auto - это механизм абстракции.
> Что интересно, в скриптовых языках они этот механизм обычно вполне
> ценят.Это вывод типов для бедных. В OCaml'е аналог функции (с учётом того, что ссылок нет), выглядел бы так:
let fpi = fun (a:int) -> a;;
Сделать нормальный вывод типов мешает совместимость с языком Цэ - автоматическое приведение типов.
А что такое вывод типов? Это и есть механизм абстракции. Когда всё, что мне надо знать - что то, что я получу от функции, имеет нужный мне интерфейс (соответствует концепту). И, соответственно, мой код сможет с этим работать.
> А что такое вывод типов? Это и есть механизм абстракции.Угу. Кстати, auto - это те же шаблоны, только сделанные в другом виде. :-) Т.о. для описания одного и того же у C++ теперь есть 2 похожих частично перекрывающихся механизма.
всё на свете шаблоны, только в разных видах.
Э... вывод типов - да. Но шаблоны? Чего ради?Но если даже и да - то тем лучше. Если в одном случае удобно одно, а в другом - другое - хорошо, что доступны оба варианта. Я вообще очень ценю богатый синтаксис - позволяет не морочить голову с вопросом "а вот как бы подогнать то, что хочу сказать, под почти подходящие средства языка".
В том же D, вон, есть, как минимум, три способа сделать что-то при выходе из скопа - RAII аналогичный плюсам, finally как в джаве и свой оператор scope(exit). И обычно крайне очевидно, что когда применять. Хотя если упереться рогом можно было бы оставить только один механизм - но писать было бы явно менее удобно.
scope() вообще мегаофигенен, как по мне: всяческие освобождения можно писать сразу рядом с захватом и не напрягаться, что что-то забыл, не листать код.
Господи, шо это?
> Господи, шо это?это перл.
хотя… нет, перл понятней.
это не C++, а C. На C++ будет как-то так: std::function<int& (int*)> fpi = ...
Твоя ирония понятна, собрат аноним, но в С нет ни замыканий, ни вывода типов.
> в С нет ни замыканийВопрос не так однозначен. http://okmij.org/ftp/cpp-digest/#pointer-closure
> ни вывода типов
И аппликативных функторов тоже нет. Вот ведь ужас-то какой.
> Вопрос не так однозначен. http://okmij.org/ftp/cpp-digest/#pointer-closureВ этой статье нет ничего о том, как симулировать замыкания в С — только о том, как симулировать С-подобные операции над указателями с помощью замыканий scheme.
> И аппликативных функторов тоже нет. Вот ведь ужас-то какой.
В комментируемом примере аппликативных функторов, в отличии от вывода типов, не наблюдается, так что сарказм неуместен.
Плохой пример. Откройте книжку Шаблоны С++ - именно они причина, почему Александреску сказал "хватит" С++. С++ неверен by design - слишком много к нему присобачивали design-костылей. В итоге получилось пугало: ни красоты ни лаконичности. Мне кажется у него нет будущего и это уже агония: все ушли в C, Java/Python/C# и т.д. Кто-то прекрасно себя чувствует в Erlang, ML/HAskell... Впереди восхождение Rust, Go, D. Нет смысла инвестировать так много времени в язык, отдача от которого так низка. Вспомните ошибку компиляции шаблонов - в 100 строк и романтика сразу пропадет.
но всё это перекрывается тем, что на C++ уже написано огромное количество кода, и переписать его на другом языке часто попросту нереально по трудозатратам. а вот постепенно чистить и улучшать, используя новые фичи C++ — вполне возможно.
c++ пухнет, а не развивается.
> У D практически не осталось явных преимуществ перед C++.ага. кроме отсутствия идиотского legacy и нормальной системы шаблонов, а не того инфернального ужаса, который в цпп.
Теперь инфернальные ужасы C++ и легаси есть и в D - ведь можно подцеплять С++ код :).
> Теперь инфернальные ужасы C++ и легаси есть и в D - ведь
> можно подцеплять С++ код :).не весь, шаблоны нельзя пока. Уолтер по этому поводу думает, но дело непростое.
Сколько бы С++ не развивали, основной его синтаксис уже вряд ли изменится. Обрастёт он всеми возможностями, что есть и в других языках, но это нагромождение символов так и останется. В D изначально внедряли всё новое и поэтому код в нём более наглядный.
> В D изначально внедряли всё новоеlolwut?!
Жирный плюсовый троль, ты хоть Ди в глаза-то видел??
> Единственный шанс сделать язык нужным - портировать на Android/iOS. Нативить на плюсах
> не в кайф.конечно, как же иначе. почти 150 contributors, большое живое комьюнити, фэйсбук — это всё фигня, язык «нинужен». а вот как только его на говнодроид заточат (конечно, это будет не анонимус: ему надо готовенькое; присоединиться к уже существующему проекту анонимус тоже не хочет — хотя gdc умеет генерировать код для ARM, и проект портирования именно на говнодроид есть) — так сразу нужен станет.
тьфу.
Смешно везде этот фейсбук пихают. То PHP с фейсбучными ускорялками, то вот D. Невдомёк вам что они просто с жиру бесятся и прикручивают под свои задачи инструменты которые для этого не подходят просто потому что могут. Почти 150 контрибуторов и про живое коммунити это вы рассмешили. Был ровно один интересный проект на D - openmw. Так давно на C++ переехал, потому что D не нужен.
ок. не нужен. проходи мимо.
А поговорить?!
> А поговорить?!а для поговорить у меня есть списки рассылок D, там разговоры намного продуктивней получаются.
Позиционирование D какое-то мутное.Если C --- достаточно низкоуровневый язык, C++ --- мультипарадигменный, позволяющий выбирать уровень абстракции/модель в зависимости от задачи, то D --- "ещё один язык с C-подобным синтаксисом".
Как я понимаю, язык D позиционировался как "Нормальный C++", но т.к. C++ уже имеет огромную аудиторию, и в последнее время стал развиваться шустрее, впитывая многие преимущества D, он постепенно оставляет D без преимуществЕще сделают в С++ import - цены ему не будет
http://llvm.org/devmtg/2012-11/Gregor-Modules.pdf
> D --- "ещё один язык с C-подобным синтаксисом".ценное экспертное мнение от знатока ди, чо. хоть «приветмир»-то сделал? про что-то поглубже я и не спрашиваю, из цитаты уровень очевиден.
> ценное экспертное мнение от знатока ди, чо. хоть «приветмир»-то сделал? про что-то поглубже я и не спрашиваю, из цитаты уровень очевиден.Именно так: я не нашел ответа на "зачем мне нужен D? для каких задач D будет эффективен/полезен?", поэтому дальше "hello, world!" и нескольких простых оценочных задач интереса не возникло.
Основное впечатление: в язык надергано "специальных случаев" на вкус авторов. Какую целевую область они при этом хотят прикрыть (и какой ценой) --- осталось непонятным. (Точнее, осталось понятным, что авторы языка этим вопросом совсем не заморачивались).
перевожу: «изучать я ничего не хочу, чем этот ваш автомобиль лучше лошади — не понимаю. куда сено совать — не ясно. дымит, воняет. правила какие-то учить заставляют. фигня, короче, не понимаю, зачем эти автомобили придумали.»
> D --- "ещё один язык с C-подобным синтаксисом".Скорее аналог C++ с более адекватным синтаксисом.
> Скорее аналог C++ с более адекватным синтаксисом.в общем-то, это и была оригинальная идея. повыкидывать legacy и сделать нечто вроде «c++ done right». а потом туда пришёл Александреску и добавил: «and templates done right».
>> Скорее аналог C++ с более адекватным синтаксисом.
> а потом туда пришёл Александреску и добавил:
> «and templates done right».Я не пойму, ты сейчас серьёзно пишешь или иронизируешь?
> Я не пойму, ты сейчас серьёзно пишешь или иронизируешь?совершенно серьёзно. и, в общем-то, по фактам: оно примерно так и было. одна из мегафич D — действительно удобные шаблоны, которые не выглядят белибердой, которые удобно использовать, которые можно не только писать, но и читать без труда. также Александреску ответственен за довольно большую часть std.algorithm (и не только).
а начиналось у него всё с того, что: «я попробую, вдруг интересное что?» мне сейчас лень статью об этом искать, но по-моему, она где-то в доббсе была.
К сожалению самолёт получился слишком тяжёлым. А так хорошо всё начиналось…
> К сожалению самолёт получился слишком тяжёлым.в чём? что именно тебе кажется там ненужным? нет, не сарказм.
в этом вашем цпп есть аналог mixin-ов?
> в этом вашем цпп есть аналог mixin-ов?и ctfe, ага. впрочем, цпп-шники будут говорить, что «нинада». ровно до тех пор, пока в очередном стандарте такое не введут — тогда оно сразу станет Уберфичей.
ну лицемеры они такие. в цпп нет и доли интроспекции d. отвратные шаблоны вообще отдельный разговор
дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.
> дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.А что, Александреску правда в D ушел?
>> дык на то Александреску в ди и пришёл: нормальные шаблоны сделать. и ему таки удалось.
> А что, Александреску правда в D ушел?не то, чтобы «ушёл с концами»: C++ он не бросил, пишет статьи, выступает на конференциях. но в то же время он весьма активный разработчик на D, написал практически весь костяк std.algorithm (это такой дальний родственник алгоритмов из STL, только использует ranges) и ещё много всякой шаблонной магии в D.
книгу, опять же, написал: «The D Programming Language» (TDPL). как и полагается — отличная книга. её даже перевели на русский, и не так уж плохо, скорее даже хорошо.
> не то, чтобы «ушёл с концами»: C++ он не бросил, пишет статьи, выступает на конференциях.Хорошо, что ушел. Плохо, что не бросил C++.
"Не читайте Александреску." (C) А. Степанов.
Ну, constexpr уже весьма близок к ctfe. А вот более гибкая объектная система за счет UFCS и alias this - это уникальные фичи D - особенно когда используются с шаблонами.
по-моему, alias this — это какая-то невнятная мерзопакость. чемодан без ручки. его надо или выкинуть, или уже приделать нормальную ручку и обивку поменять.
А за что так? Как по мне - удобная и контролируемая альтернатива множественному наследованию. Для реализации тех же аспектов - в самый раз, тем более, что с шаблонами его, насколько я помню, уже подружили.
> А за что так?как минимум потому, что alias this допускается только одно. то есть, никакая это не альтернатива, а именно чемодан без ручки.
если уж так надо — есть интерфейсы, их можно присобачивать к классу много. а лучше вообще писать на шаблонах, которые тупо проверяют наличие нужных методов, и тогда совершенно пофиг на типы и наследования: нужные методы есть? ок, поехали. ranges, например.
единственное, что даёт alias this и чего нельзя добиться иначе (и то не всегда, есть нюансы) — неявное преобразование типов. то есть, когда класс A можно использовать как класс B, хоть они и не особо родственники. я, впрочем, считаю, что это лишняя фича, только затрудняющая понимание кода.
То, что alias this единственный - насколько я помню, бага, которая есть в багзилле.А интерфейсы (хоть формальные, хоть проверки через is и тому подобное) - это хорошо, но тогда надо для всего подряд ляпать прокси, если у тебя данный интерфейс реализуется отдельным готовым объектом, от которого ты не хочешь наследоваться. Как примитивный пример - допустим, есть объект и ты хочешь иметь возможность его лочить снаружи. Одно дело - когда ты создал внутри мьютекс, написал alias myMutex this и всё. Другое - когда тебе lock|unlock надо явным образом пробрасывать. Шаблонам оно ортогонально.
> То, что alias this единственный - насколько я помню, бага, которая есть
> в багзилле.и давно. и всем пофигу.
алсо, template mixins. на кой тебе этот alias? спокойно делаешь mixin template и миксинишь его в класс/структуру. с методами lock и unlock. потому что высовывать детали реализации (mutex) наружу — моветон. а для универсальной лочки — опять же шаблон, который проверит наличие нужного метода.
хватит уже крестами мыслить, D — не кресты.
Ну, они неспешно, но всё чинят.mixin template - можно, std.typecons.Proxy. Но это ни хрена не "is a" - то есть оно крякать умеет, но не утка а, скажем, уткоробот. Если у тебя чисто шаблонный код - нормально, но если еть еще и объектные иерархии - ты захочешь иметь возможность именно неявного преобразования. И ещё когда хочется красивые штуки сделать - ну там, ORM прозрачно работающий и тому подобное - тоже очень к месту оно оказывается, именно из-за неявного преобразования.
Я, в общем-то, с чего начинал - в отличие от плюсов в D есть масса вариантов реализовать ООП, и этого в плюсах не будет никогда, в отличие от более-менее человеческих шаблонов или тех же лямбд.
> Ну, они неспешно, но всё чинят.стараемся. ;-)
> если еть еще и объектные иерархии
да ну их нафиг, шаблонная магия вкуснее.
> Я, в общем-то, с чего начинал - в отличие от плюсов в
> D есть масса вариантов реализовать ООП, и этого в плюсах не
> будет никогда, в отличие от более-менее человеческих шаблонов или тех же
> лямбд.ну, по гамбургскому счёту, та же шаблонная магия в крестах есть. вот только писать её — это как удалять аппендикс зубами, с завязанными глазами и связанными руками. их SFINAE вместо нормальных constraints — вообще песня, йопт.
Да я о том, что сделать более человеческие шаблоны в плюсах можно - и даже совместимость не сломать. А вот тот же UFСS со всеми плюшками, которые он даёт шаблонам - в жизни не впихнуть.Шаблонная магия вкуснее, пока тебе реально не нужны виртуальные методы и динамический полиморфизм. Те же виджеты - классика.
Мне, в общем-то, D тем в основном и понравился, что особо нет попыток запихнуть в рамки "истинно правильной веры". Хочешь ООП с деревом классов - бери. Хочешь шаблоны - бери. Хочешь функциональный подход - тоже можно, хотя хаскелистам не понравится. Хочешь перемешать - вперёд.
rdmd тоже крутая штука. я как-то уже и привык скрипты на D писать… ;-)
кстати, ребята сейчас допиливают автотранслятор фронтэнда с c++ на d. и планируют после стабилизации перейти на дишный фронтэнд. оно (ddmd), в принципе, уже даже «приветмиры» собирает. благо, фронтэнд написан без изысков, так что большинство кода вполне автоматически транслируется.
> в этом вашем цпп есть аналог 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
> Не знаю, как в цпп, а в этом нашем С есть примитивный аналогС таким успехом и ассемблер - примитивный аналог Си. :)
Разработчикам не нужны "аналоги", "копии", "обходные пути" - им нужен ПРЯМОЙ инструмент для выражения своих мыслей. Ну и надёжный, конечно - что Ди и сделал как замена таймбомбовому Цэ-пи-пи.Линуксу давно уже нужен нормальный язык, позволяющий хотя бы в 21 веке забыть кошмарный сон "buffer overflow" (а количество этих потенциальных уязвимостей растёт десятикратно с каждой новой перделкой/библиотекой, потому что пишется всё головотяпами-энтузиастами).
> Разработчикам не нужны "аналоги", "копии", "обходные пути" - им нужен ПРЯМОЙ инструмент для выражения своих мыслейТакого человечество не придумало.
Включая язык, секретаршу и энцефалографию.
> Линуксу давно уже нужен нормальный язык, позволяющий хотя бы в 21 веке
> забыть кошмарный сон "buffer overflow" (а количество этих потенциальных уязвимостей растёт
> десятикратно с каждой новой перделкой/библиотекой, потому что пишется всё головотяпами-энтузиастами).Вот в php нет buffer overflow. Как там с безопасностью рассказать или сам знаешь?
>давно уже нужен нормальный языкУже есть. Но с одной стороны legacy, с другой инерция.
Ну да. А еще эксепшны есть. В setjmp.h
это, мягко говоря, соооовсем не то. mixin'ы в D — это геренация кода во время компиляции. проще говоря: mixin(`int a=42;`) во время компиляции будет заменено на «int a=42;».с первого взгляда эта фича кажется бессмысленной, но если узнать, что в ди во время компиляции можно исполнять код на ди (ограничение — нет глобальных переменных; но на функциональщине можно много всего сделать; например, функция toHash(), вычисляющая SuperFastHash, работает как во время компиляции, так и во время исполнения), то mixin'ы сразу становятся намного более интересными. потому что строки для них можно генерировать довольно сложным ди-кодом.
например, парзить дишным кодом во время компиляции некие файлы с диска и на их основе генерировать дишный код (привет, шаблоны страниц в vide.d).
p.s. например, библиотека std.regex активно пользуется этой фичей для того, чтобы превратить регулярку в обычный ди-код. при этом ей хватает мозгов использовать автоматы, когда регулярка без бэктрэйсинга и делать другие разные гитики.конечно, буст тоже нечто подобное умеет на шаблонной магии, но попробуйте почитать код буста для этого, а потом — код std.regex.
кстати, спасибо. как-то я пропустил чудесный ключ «-fplan9-extensions».
Если язык такой бодрый. Почему он не пришел на замену c++? Не думаю что дело исключительно в традициях. PHP же смогли свергнуть. Причем за более короткое время чем существует C++
у тебя хороший ник, точно описывает твой пост.
Видимо чтобы меня поняли, придется изъясняться в школьных традициях вашего сообщества.Этот ваш Дэ задумывался как c++ done right, но в итоге смачно лососнул у c++. О чем говорит текущая его популярность, а вернее его отсутствие. Видать не совсем уж и done right
Язык не так давно немного устаканился. Была революционная 1-я версия, теперь 2-я сильно продвинутая. Может будет и 3-я. Язык D выгребает все самое интересное из других языков и не стесняется самого себя вычищать от анахронизмов. Но в этом его недостаток, нет окончательной стабильности.
> Но в этом его недостаток, нет окончательной стабильности.«окончательная стабильность» — это «dead as a doornail».
убедить Уолтера принять что-то, что ломает совместимость на уровне языка — та ещё задача: он даже неломающим расширениям сопротивляется до последнего.
чуть активней ломают std, но и то не так быстро, чтобы это сильно напрягало. всегда есть время на починку старого кода (компилятор заругается на deprecation), плюс можно привинтить слой совместимости обычно, если очень уж чинить не хочется (или просто взять старый модуль). на практике — ломается не так много, и в основном то, что касается всяких околосистемных вещей — типа запуска процессов, обёрток над clock_gettime() и ты пы.
ходят разговоры про написание «автомигратора», как в Go, но говорят многие, а делать никому не хочется. в принципе, парзер D на D есть, и продвинутый линтер на его основе тоже есть — так что писать не то, чтобы совсем с нуля надо. но пока — благодаря малому количеству «ломающих изменений» — всем проще починить свой код руками и не заморачиваться написанием (и, что намного важнее — дальнейшей поддержкой) такой тулзовины.
Все просто! Потому что Уолтер Брайт не бородат!
> Добавлена языковая конструкция extern (C++, namespace), позволяющая использовать прямые вызовы функций C++ из пространств имён.и как же они умудрились запилить эту фичу при полном отсутствии ABI и linking onvention на плюсовые ф-ии и методы?
> и как же они умудрились запилить эту фичу при полном отсутствии ABI
> и linking onvention на плюсовые ф-ии и методы?для винды: -m64 поддерживает m$vc. -m32 поддерживает dmc. -m32mscoff поддерживает m$vc.
для пигвинуса: gcc 4.
точно так же, как и просто extern (C++).
> точно так же, как и просто extern (C++).вопрос собственно и был про плюсловые вызовы, хрен с этими неймспейсами. В общем, чуваки намутили какую-то костыльную уйню в языке.
> вопрос собственно и был про плюсловые вызовы, хрен с этими неймспейсами. В
> общем, чуваки намутили какую-то костыльную уйню в языке.а что делать, если стандартизаторы цпп до сих пор не озаботились стандартизацией name mangling? прямой вызов цпп-кода без ц-врапперов — фича достаточно удобная и востребованная. приходится вот так вот извращаться.
> а что делать, если стандартизаторы цпп до сих пор не озаботились стандартизацией name mangling?Ты ничего не понял. Этот самый фантазёр (Страуструп т.е.) специально советует всем делать разные name mangling схемы дабы случайно не слиплись разные ABI в одном бинарнике. Проблема только в отсутствии ABI и calling convention'ов, общая name mangling схема совсем не проблема.
> прямой вызов цпп-кода без ц-врапперов — фича достаточно удобная и востребованная. приходится вот так вот извращаться.
и тут ты тоже ничего не понял. Вызвать c++ код нельзя без сишных врапперов, чего тут не понятно? Это просто невозможно сжелать нормально технически, никак, пока не будет ABI на некоторые вещи у плюсов.
И дурачи из DMD сотворили большую уету сделав попытку поддержвать такие хаки у себя в языке.
вот не зря у меня рядом с тобой подпись стоит: «тупорылый уе…н».
да, у тебя не зря - это твой диагноз самому себе, т.е. психологически здоровый человек не будет собирать подписи.
у меня голова не казённая, чтобы каждого идиота помнить поимённо. я понимаю, что ты до сих пор не можешь привыкнуть к тому, чтобы перекладывать подобные задачи на технику — а мне лень каждого дурака запоминать. у меня для этого машина есть, которой один раз сказал — и она трудолюбиво в дальнейшем будет отмечать, что имярек — дурак.
А чем метишь? Я давно какую-нибудь хрень приглядываю, чтобы на вебе по всяким критериям заметки показывала - но пока так и не попалась.
> А чем метишь?самописный userjs. в принципе, его можно превратить в универсальный — сделать хуки с xpath для выборок, ещё по мелочи. движок, в общем-то, там внутри почти универсальный — я его для нескольких сайтов применяю.
это не то, чтобы заметки — скорее нечто вроде «титулов» для форумов всяких. с опциональной заменой постов у «обтитулованых» на всякий herpderp, чтобы ерунду не читать.
желчью метит, не видно чтоли
ошиблись, надо 2.666
> ошиблись, надо 2.666может, и до этого дойдём.
Да ладно тебе, твоё участие в D закончилось hello world'ом, а примазываешься как будто сам в dmd коммитил.
> Да ладно тебе, твоё участие в D закончилось hello world'ом, а примазываешься
> как будто сам в dmd коммитил.извини, Уолтер, не узнал тебя в маске анонима.