LINUX.ORG.RU

DMD 2.015 & DMD 1.031

 , ,


0

0

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

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

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

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

★★★★★

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

> Долой класс ориентированное ООП!

оно тебе жить мешает? :)

lester ★★★★
()

А какой компилятор лучше - dmd или gdc? Интересует прежде всего поддержка стандартов.

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

>хватит оффтопить. тут говноплюсы обсуждаютс

Сорри, но можно еще раз за офтопить. Чем отличается диспетчер процессов от планировщика процессов? Загуглить сходу не получилось, так что в ртфмстве пжалуста не обвинять.

anonymous
()

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

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

>> Ну и вопрос, на который не ответил Анонимус I - представь себе глубоко вложенные вызовы функций, и тебе нужно поменять тип где-то в глубине.

> Эксперты по некоторым ООП языкам советуют пользоваться свободными функциями в одном нэймспейсе с классом который они обслуживают, а не членами классов, поскольку свободные функции легче переносят такие встряски. Видимо все же есть разница.

Мне тоже нравятся "чистые" функции, но я всё же не вижу принципиальной разницы между ними и методами. А если нет принципиальной разницы, значит, грабли остаются на месте.

>> Ну и вообще такие вещи решаются грамотной организацией процесса разработки, работой с заказчиком и прочими нетехническими мерами.

> Угу угу. Предварительное проектирование, грамотная организация процесса разработки, работа с заказчиком, невиноватым дадим пирожок с плки, виноватых накажем итд итд.

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

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

> auto i = arr.iterator;

> Нафига мне здесь писать тип i?

Угу, особенно когда итератор надо взять от чего-нибудь типа std::tr1::unordered_map < std::vector < std::pair < ClassA , std::vector < std::string > > >, ClassB, Hash1 <...> > ...

Конечно можно ввести typedef, но бывает лень.

Быстрей бы фича с auto в С++ появилась.

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

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

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

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

за дерево из 15 наследований архитекторов (или быдлокодеров ? ) надо за яйца подвешивать

Reset ★★★★★
()

А мне понравился язык. Как раз недавно из любопытства ковырял. И tango - достаточно приятная библиотека к нему.

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

А если наследовать не от родиля напрямую а от расширенного типа, расширенного типа? И так несколько раз. Потом унаследовать от перекрестого смешивания этих классов в разной пропорции с перегруженными виртуальными методами и вызвать метод, который неоднозначно определяется в разных предках?

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

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

Perl6 и Javascript рулят?
BTW, какие ещё есть языки с прототипами?

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

>Мне тоже нравятся "чистые" функции, но я всё же не вижу принципиальной разницы между ними и методами.

Если меняешь сигнатуру функции - ломаешь всех кто инклудил один .h файл. Меняешь сигнатуру метода базового класса - ломаешь все нижестоящие .h файлы с производными классами, сами производные классы и всех кто их использовал.

BTW не вижу проблем пометить функцию как deprecated и медленно ее вычистить.

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

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

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

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

> Если меняешь сигнатуру функции - ломаешь всех кто инклудил один .h файл. Меняешь сигнатуру метода базового класса - ломаешь все нижестоящие .h файлы с производными классами, сами производные классы и всех кто их использовал.

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

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

>>Мне тоже нравятся "чистые" функции, но я всё же не вижу принципиальной разницы между ними и методами.

>Если меняешь сигнатуру функции - ломаешь всех кто инклудил один .h файл. Меняешь сигнатуру метода базового класса - ломаешь все нижестоящие .h файлы с производными классами, сами производные классы и всех кто их использовал.

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

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

>> Если меняешь сигнатуру функции - ломаешь всех кто инклудил один .h файл. Меняешь сигнатуру метода базового класса - ломаешь все нижестоящие .h файлы с производными классами, сами производные классы и всех кто их использовал.

>[...skipped...]

Поучи жену щи варить.

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

ты уже не первый любитель щей( кстати гадость еще та - неужели тебя жена таким кормит? сочуствую :) ), а имел я ввиду только то, что такая задача должна встречаться крайне редко, и даже если встречается, то как я уже писал - берешь нормальный IDE, правой кнопочкой на методе и там выбираешь рефакторинг

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

>Разницы между "инклудил один .h файл" и между "все нижестоящие h файлы с производными классами, сами производные классы и всех кто их использовал" я просто не вижу.

Слишком сферическая аналогия в вакууме - давно видать на плюсах не кодил. Там зависимости между модулями намного плотнее чем в чистых Сях. Вплоть до предоставления непосредственно кода клиенту кода в .h файле.

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

> Слишком сферическая аналогия в вакууме - давно видать на плюсах не кодил.

Давай конкретней. Здесь речь не идет о деталях, которые старый Си++-кодер может забыть.

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

> Вплоть до предоставления непосредственно кода клиенту кода в .h файле.

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

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

>берешь нормальный IDE, правой кнопочкой на методе и там выбираешь рефакторинг

Неужели под Линукс есть нормальная IDE для С++? Эклипс+CDT меня совсем не впечатлил в этом отношении.

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

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

Для шаблонов конечно.

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

к сожалению лучше Eclipse нет :(, у меня проект создан под Visual, xCode 3.1, Eclipse, потому в случае такой надобности я скорее всего сделаю это в оффтопике или xCode

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

> Будет глядеть, будем. Вот выйдет версия 2, вот подтянется gdc, и поглядим :)

Есть мнение, что GDC уже не подтянется т.к. LLVMDC превзошёл его по всем параметрам. Осталось последние баги выковырять. Ещё есть мнение, что LLVMDC станет новым образцовым компилятором. Мнения неподтверждённые.

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

> ни разу не было такой необходимости

Значит ты писал не на плюсах, а на подмножестве плюсов.

Как реализовать шаблоны вне .h файлов и inline'ы может расскажешь?

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

> Наследование строго не рекомендуется использовать везде где это возможно.

Честно говоря, со временем всё больше убеждаюсь, что ООП вообще лучше не использовать, если это возможно

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

> - встроенная поддержка списков - встроенная поддержка регулярных выражений - лямбда-выражения и функции высших порядков - возможность расширения классов и объектов (пусть даже не динамическая, как в руби или питоне, а как в C# 3.0) - систему метапрограммирования, например как в Nemerle - компактность языка

Встроенная поддержка регулярных выражений была где-то в районе версии 0.060. Потом выбросили за ненадбностью. Остальное в той или иной степени есть или планируется.

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

> Впрочем, CDT5 неплох

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

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

> А какой компилятор лучше - dmd или gdc? Интересует прежде всего поддержка стандартов.

dmd - reference compiler, только он не умеет динамические библиотеки делать.

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

> Значит ты писал не на плюсах, а на подмножестве плюсов

я не ставил себе за цель использовать все :)

> Как реализовать шаблоны вне .h файлов

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

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

> Категория OpenSource, а компилятор проприетарный.

Распознавалка свободная. А кодогенераторов свободных - как минимум gcc(gdc) и llvm(llvmdc).

(Когда уже народ осилит поиск?)

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

>Как реализовать шаблоны вне .h файлов может расскажешь?

Это реально. Пишешь тело шаблона в .cpp файле, потом в этот же файл добавляешь явные инстанциации шаблона по мере их появления. Круто, да?

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

я еще один не осиливший :) есть ли где-то вменяемые и достоверные тесты по сравнению производительности скомпилированного кода С\С++\D ?

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

> есть ли где-то вменяемые и достоверные тесты по сравнению производительности скомпилированного кода С\С++\D ?

Вменяемее и достовернее http://shootout.alioth.debian.org не знаю.

(Означает ли этот вопрос, что Вы близки к скачиванию компилятора?)

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

На данный момент по их результатам производительность gdc совпадает с gcc. 0_o Обычно он _чуть_ медленнее код генерит.

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

Если в планах есть писать проги, курить это:

http://www.dsource.org/projects/tango
http://www.dsource.org/projects/dsss
и компилятор первой ветки.

Если играться, то http://rosettacode.org/wiki/Category:D и компилятор второй ветки.

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

С памятью пробемы из-за GC, хотя у Джавы с памятью проблемы ровно в 10 раз больше. По чистому процессорному времени DMD уступает gcc на 10-30%, gdc - на 0%. Проверь числа в правом столбце на странице с результатами.

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

Может еще и про export вспомнишь, который поддерживается всего лишь одним компилятором? Может не городить костыли, а делать все по-людски, чтоб потом у других с твоим кодом проблем не было ?

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

Лучше даже не просто компилятор первой ветки, а именно 1.029. Это последняя версия, у которой не обнаружили новых багов. :(

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