LINUX.ORG.RU

DMD 2.015 & DMD 1.031

 , ,


0

0

17 июня вышла новая версия экспериментальной ветки компилятора языка D. Большая часть идей для последней версии, по словам Уолтера Брайта, принадлежит Андрею Александреску. Основные изменения:

  • Шаблонные функции теперь могут автоматически определять свой возвращаемый тип.
  • Возможность указывать ограничения для шаблонных параметров.
  • Шаблонные alias параметры теперь могут быть литералами.

И пара десятков багфиксов, которые также были бэкпортированы в DMD 1.031.

>>> Подробный Changelog по версиям со ссылками на скачивание

★★★★★

Проверено: maxcom ()

Ответ на: комментарий от lester

Всё с помощью виртуальных функций и хитрожопых иерархий наследования делаешь? Статический полиморфизм (реализуемый шаблонами) очень часто бывает полезен (особенно в критических по скорости алгоритмах). Да и городить огород из иерархий не надо (код получается короче, понятнее и быстрее).

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

обычно хватает одного интерфейса, одного Impl, и ес-но прямых потомков порожденных от Impl, для меня такой код и понятный и простой, для более сложных случаев тот же xCode умеет рисовать иерархию классов, так что разобраться в ней так же очень просто, насчет производительности - я часто тестирую код профайлерами, единственное узкое место при наследовании это возможное использование dynamic_cast, но им я пользуюсь только в крайнем случае, в случае же если таки надо, а производительность страдает, можно просто использовать QueryInterface

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

>Ну-ну расскажи-ка дружочек что бывает если у тебя дерево эдак в 15 наследований образовалось, и ВНЕЗАПНО нужно поменять в самом его корне скажем тип возвращаемого значения одной из функций.

> Наследование строго не рекомендуется использовать везде где это возможно. Выходи из леса, почитай да просвятись маленько http://209.85.135.104/search?q=cache:n3H8wk5Ina8J:www.amazon.com/Design-Patterns-Object-Oriented-Addison-Wesley-Professional/dp...

1. Твоя ссылка не работает (запость снова?)

2. Ты так и не ответил, почему смена сигнатуры функции в ОО коде дает больше гемора, чем в не-ОО (а по-моему все поровну)

3. Иерархия в 15 уровней выглядит очень подозрительно... наверно там на каждый чих делали класс.

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

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

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

> Как реализовать шаблоны вне .h файлов
Тело в цпп + явное инстанцирование там же.
> и inline'ы может расскажешь?
За все компиляторы не скажу, но билли уже несколько лет умеет инлайнить функции из объектников. Не считая того, что inline себя изжил.

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

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

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

2gpg * (*) (20.06.2008 22:00:54):

> Такое впечатление, что D половине лора в щи нассал.
> Отрадно смотреть, как отплёвываетесь.

Это на ЛОРе так принято :))))

Кто-то пишет языки, кто-то пишет на языках, а некоторые
ЛОРовцы, коих в угнетающем меньшинстве здесь :))) , поливают
грязью и тех и других. Креатив по-ЛОРовски.

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

> Ты так и не ответил...
А вот почему никто не спросил, каким образом наследование в данном случае влияет на сложность задачи? Функция-то как была одна, так одна и осталась. И что за загадочный корень?..

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

> Мыслить надо позитивно. Любой новый язык считается приемлемым. Пока не доказано обратное

именно поэтому я не писал "D не нужен" и т.п., в отличие от большинства я таки полез по ссылке и нашел, что не устраивает именно меня - отсутствие namespace, ненужные мелкие несовместимости, отсуствие множественного наследования и т.п., лучше сначала поплеваться, а потом использовать, чем сначала пользовать, не осилить, а потом писать везде, что, к примеру, с++ дерьмо( как тут многие и делают ), вобщем проехали

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

> Кто-то пишет языки, кто-то пишет на языках, а некоторые
ЛОРовцы, коих в угнетающем меньшинстве здесь :))) , поливают
грязью и тех и других

есть еще флудеры, которые не вставили ни одного поста по теме( даже по родственным темам ), но зато считают, что они нев%бенно умные и открывают остальным глаза на проиходящее ;)

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

>отсутствие namespace,

Нахрен надо если есть пакеты? Может еще и модульность посредством [sic]#include надо тебе сделать, как в плюсах?

>ненужные мелкие несовместимости,

С быдлоплюсами? Нахрена?

>отсуствие множественного наследования

Множественное наследования интерфейсов есть.

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

>> С быдлоплюсами? Нахрена?

>вы бы по ссылке сходили, а то ерунду разговариваете

я Ъ.

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

> именно поэтому я и спросил какое он право имеет называться D, к примеру С++ обратно совместим с С - т.е. является его продолжением

А имеет ли язык C обратную совместимость с языком B?

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

нет( хотя и очень похож ), но он не имел такую популярность как С ( который уже вполне самодостаточен и "обкатан" ), в настоящее же время создано огромное кол-во С-подобных языков, и я по своей наивности полагал, что D должен быть в большей степени похож на С, чем они, и мне уже обьяснили, что это не так ;)

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

>> чем D лучше/хуже

>Мыслить надо позитивно. Любой новый язык считается приемлемым. Пока не доказано обратное.

Т.е. ты хочешь сказать, что изучаешь все новые языки ???????

А вот я конечно не так крут как ты, и изучаю только те, которые считаю в чем-то лучше остальных...

Да, вот вопрос знатокам Д. То что оператор . там перегружается -- это позитив. А как там с лямбдами? Вот например скаловское:

val nameHasUpperCase = name.exists(_.isUpperCase)

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

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

>>отсуствие множественного наследования

>Множественное наследования интерфейсов есть

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

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

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

замыкания есть в альфа-версии. в стабильной можно обращаться к внешним переменным, но они не захватываются и при уничтожении фрейма получается UB. пишется примерно так:

name.exists((x) { return x.isUpperCase; });

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

> замыкания есть в альфа-версии. в стабильной можно обращаться к внешним переменным, но они не захватываются и при уничтожении фрейма получается UB.

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

> name.exists((x) { return x.isUpperCase; });

auto nameHasUpperCase = [далее по тексту]

конечно у контейнера должен быть реализован соответствующий метод exists.

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

> конечно у контейнера должен быть реализован соответствующий метод exists.

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

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

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

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

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

> Без множественного наследования реализации тяжело. Впрочем, говорят миксины это заменяют.

В Ruby - успешно заменяют.

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

> Или должна существовать функция exists, принимающая в качестве первого параметра этот контейнер.

To Be Done :( Сейчас работает только для встроенных динамических массивов.

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

Гм, никогда не использовал эту фичу, на самом деле, но жаль. Впрочем, exists(name, ...) не намного хуже.

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

> Хм, он вроде только для D1?

Именно поэтому пока остаётся DMD.

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

> name.exists((x) { return x.isUpperCase; });

Неееее ребята. Я даже лучше в С++ могу:

nameHasUpperCase=exist(name.begin(), name.end(), isupper(_1));

Вопрос был в контексте перегрузки оператора "."

Насчет _1.isUpperCase() -- очевидно, что оно в плюсах не пойдет, и _1->isUpperCase() -- тоже не пойдет (char это не класс).

А вот если я хочу именно _.isUpperCase() -- причем именно "." и причем без дурного повторения "(х)" -- могу ли я это сделать в Д ?

www_linux_org_ru ★★★★★
()

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

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

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

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

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

bool nameHasUpper = name.exists(&isUpper);

где bool isUpper(char c)

И в C++ в том числе.

Да и не путай языки Д и D. :)

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

> А вот если я хочу именно _.isUpperCase() -- причем именно "." и причем без дурного повторения "(х)" -- могу ли я это сделать в Д ?

Если name - сишная строка, то сможешь после релиза D2 в конце осени:

auto name = "Naryl";
bool nameHasUpper = name.exists(_.isUpper);

Где exists - AST макрос.

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

> закрытое ублюдство DMD отправляется в помойку без вариантов

К твоему сведению DMD - единственный существующий на данный момент полнофункциональный _свободный_ frontend.

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

>Победа на конкурсе телепатов тебе не светит.

>Такая же фигня и с чемпионатом по логике.

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

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

>Если очень хочется компактности то можно замутить что-то вроде. >bool nameHasUpper = name.exists(&isUpper);

Речь идет об анонимных функциях, такая фигня меня опять не устраивает!

Придется снова дооооолго формулировать вопрос:

В С++ можно сделать _1 (это boost::lambda) так, что _1 будет функтор, _1+5 будет тоже функтор, cout<<_1 тоже будет функтор, ... НО _1.my_function() не будет функтором, так как . в плюсах не перегружается. Исправлено ли это в Д, в контексте того факта, что . там как-то перегружается?

>Да и не путай языки Д и D. :)

Мне лень на латиницу переключаться из-за одной буквы :-)

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

http://www.digitalmars.com/d/2.0/operatoroverloading.html#Dot

Если я правильно понял - не решается. Но в новостях о том релизе, когда opDot была введена, было сказано, что эта фича экспериментальная и _будет_ изменена.

Конечно и в D и в C++ можно обернуть "_1.my_function()" в макрос\string mixin.

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

Я говорю не о фронтенде а о компиляторе. DMD распространяется только в бинарной форме и не нужен. А вот фронтенд прикрученный к gcc/llvm - ради бога.

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

> DMD распространяется только в бинарной форме и не нужен.

4.2 DMD запрещено распространять без исходников фронтенда. А бэкенд - не нужен, согласен. Он даже gcc сливает в большинстве случаев.

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

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

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

> Язык - помойка. Понабрали конструкций откуда непопадя.

Очередной анонимный выперд? Смишно.

> Что это за язык, на который стандарта нету и который мутирует от месяца к месяцу?

Не мутирует, а РАЗВИВАЕТСЯ как дай бог каждому! В отличии от долбаного сипипи с его идиотичным "комитетом". Причём развивается ветка 2.0; Не нравятся передовые фичи? Пиши на версии 1.0 или иди в продавцы хотдогов.

> Всем, кому нужен более высокий уровень, чем C++, обратите свое внимание на Ada и Eiffel.

А на Фортран нам не надо переходить? :) Язык D - это серьёзная перспектива для тех, кто не хочет быть засосаным мелкомягким дотнетом. Язык поддерживает столько полезных вещей, что не может не нравиться. Пусть он и не несёт революционно-ортогональных решений (ака Смоллток или ЛИСП), но это и не его цель! D - язык для ПРОМЫШЛЕННОГО программинга с неплохим набором "фич", сильно облегчающим жить прогера. Кто писал на сипипи или джабе (и вообще понимает в программинге), тот оценит. Я бы призвал тех, кому некуда потратить время, на изучение сего языка и расширение его библиотек, тогда D может не просто поигрывать мускулами в сторонке, но и конкретно задавить мелкомягкую .НЕТ-платформу.

matumba ★★★★★
()

Есть вопрос к любителям языка D. Почему язык оставляет некоторые проблемные возможности и языка Си? Например, сходство между '=' и '==' в сочетании с возможностью ошибочно написать if(a=b), вместо if(a==b) сильно напрягает. Кроме того, возможно тихое падение через switch-case, если случайно забыть break. Ещё удивляет решение сохранить в языке скобки () и {} в управляющих конструкциях. По-моему в Oberon-2 более удобная структура управляющих конструкций. И в Python обошлись без этих скобок. Без скобок легче ориентироваться в тексте программы (точно знаешь, что скобки только в выражениях). Эти решения ещё можно понять в C++ с его попыткой сохранить совместимость, но не в D.

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

PS:

Ещё один вопрос вдогонку. Зачем добавили ключевое слово finally? У Бьярне Строуструпа в FAQ-е вполне убедительная альтернатива приведена (RAII).

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

> Есть вопрос к любителям языка D. Почему язык оставляет некоторые проблемные возможности и языка Си?

Для чайника и дрель - "проблема"! Ему проще гвоздиком проковырять.

> Например, сходство между '=' и '==' в сочетании с возможностью ошибочно написать if(a=b), вместо if(a==b) сильно напрягает.

А вам никто и не обещал, что на D может писать любая домохозяйка! Программирование - это вообще, знаете ли, ПРОФЕССИОНАЛЬНАЯ ОБЛАСТЬ. Хочешь научиться писать программы? Добро пожаловать в BASIC, сынок! :) Научишься - можно осваивать и более серьёзные инструменты. Это нормально.

> Кроме того, возможно тихое падение через switch-case, если случайно забыть break.

Если случайно перепутать "фазу" с "землёй" - тоже ничего хорошего не будет. Для этого и существует ВНИМАТЕЛЬНОСТЬ. Фича эта оставлена как в плане совместимости, так и потому, что позволяет создавать более гибкую обработку случаев. Язык не должен вводить лишние ограничения, мешающие мыслить "в лоб".

> Ещё удивляет решение сохранить в языке скобки () и {} в управляющих конструкциях.

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

> По-моему в Oberon-2 более удобная структура управляющих конструкций.

Пишите на Обероне. Вас кто-то неволит? Ди - ему не надо оправдываться за скобочки только потому, что вам нравятся бегин-энды.

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

>> Всем, кому нужен более высокий уровень, чем C++, обратите свое внимание на Ada и Eiffel.

> А на Фортран нам не надо переходить? :)

Любителям D нужно на Eiffel глянуть хотя бы ради того, чтобы увидеть, как должна выглядеть нормальная реализация DBC. Может тогда и желания ставить в один ряд Фортран и Eiffel не захочется.

> Язык поддерживает столько полезных вещей, что не может не нравиться.

Может.

>D - язык для ПРОМЫШЛЕННОГО программинга с неплохим набором "фич", сильно облегчающим жить прогера.

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

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

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

matumba, было бы неплохо увидеть реальные аргументы, вместо отмазок в стиле "используй BASIC".

> Фича эта оставлена как в плане совместимости

О какой совместимости речь? Я думал, что язык D не совместим с Си.

> Скорее, не удивляет, а чисто ваша личная неприязнь. "Скобки" давно доказали своё удобство, проникнув в современные языки аж из Си. Наверное, люди не глупее вас, раз решили их реализовать?

Во-первых, не надо переходить на личности. Во-вторых, я привёл примеры, где их нет.

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

В Oberon-2, Python, BASIC нет begin-end. В Oberon-2 только end. В Python отступы.

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

> В отличии от долбаного сипипи с его идиотичным "комитетом"

отукда столько злости, не нравится - не используй и не читай даже про него

> Пиши на версии 1.0 или иди в продавцы хотдогов

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

> Язык D - это серьёзная перспектива для тех, кто не хочет быть засосаным мелкомягким дотнетом

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

> Язык поддерживает столько полезных вещей, что не может не нравиться

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

> Кто писал на сипипи или джабе (и вообще понимает в программинге), тот оценит

да я вижу вы профи ;)

> D может не просто поигрывать мускулами в сторонке, но и конкретно задавить мелкомягкую .НЕТ-платформу

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

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