LINUX.ORG.RU

DMD 2.020 и DMD 1.036

 , ,


0

0

20 октября вышла новая версия компилятора DMD. Наряду с традиционным большим количеством багфиксов есть несколько значительных изменений:

  • В обоих ветках улучшена производительность ассоциативных массивов.
  • Разрешён возврат значений из функций по не-константной ссылке. (Ранее был запрещён вообще)
  • Стандартная библиотека Phobos была отделена от рантайма. Появилась возможность нормально использовать Phobos и Tango в одной программе. Точнее, появится с предстоящим релизом Tango.
Автор предупреждает, что в этом релизе произошло большое количество изменений в коде и вероятно появление ошибок.

>>> Changelog D2

>>> Changelog D1

>>> Подробности

★★★★★

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

Упс... Поправьте дату на 20 октября.

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

>22 октября вышла

Э... А в каком они часовом поясе? :)

(надо же, прямо в мой ДР ;) )

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

>0_o Кто-нибудь знает, что значит immutable?

В данном контексте, как я понимаю, неизменяемый после создания объект.

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

А когда-то была?

LDC (бывший LLVMDC) почти допилили. Обещают релиз LDC 1.0 через пару недель. LLVM есть почти везде, уступая только gcc.

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

>>0_o Кто-нибудь знает, что значит immutable?

>В данном контексте, как я понимаю, неизменяемый после создания объект.

То же что и final?

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

>То же что и final?

Не уверен. В случае final у Java объект переписать нельзя, но изменять его можно. Т.е. получается просто константная ссылка на объект.

А immutable, кажется, это когда весь объект модифицировать потом уже нельзя.

Но это моё ИМХО :)

KRoN73 ★★★★★
()

Клево! Пойду обновлюсь!

Кстати, 2.0 уже перевели в статус stable?

>Стандартная библиотека Phobos была отделена от рантайма


ну наконец-то! ждем-с реакции от gdc!

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

>В том-то и дело, что в спецификации языка слова immutable *нет*. 0_o

да. из changelog ссылки тоже нету.

И самое главное - нету ссылки на загрузку! На фтп есть только вендовый зип: http://ftp.digitalmars.com/dmd.2.020.zip, дебы отсутствуют.

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

> под макось сборки нет! нафиг это подтверждать.

Это какбэ двойной намек на то, что макось не нужна.

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

Этот "Вендовый зип" на самом деле мультиплатформенный пакет. :D Там и под линь бинарники лежат... и исходники.

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

Еще одно анонизменное поделие созданное исключительно в угоду троллям с ЛОРа... 8)

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

>0_o Кто-нибудь знает, что значит immutable? (naryl)

Когда первым постом идёт такое заявление (я тоже не знаю, что это такое, но naryl-то вроде как всё знает ;) ), то меня не покидает ощущение, что я ещё сплю =)

Новость хорошая. К несчастью я слишком ленивый чтобы учить этот язык. Хотя, кто знает, кто знает...

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

> А что такое DMD?

Компилятор для языка D.

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

>ну наконец-то! ждем-с реакции от gdc!

недождетесь!

<quote> Vincent Richomme wrote: > Hi, > > I am a bit worried because it seems GDC is not evolving anymore and in > particular there haven't been a release for a long time. > Is there still a maintainer ? > When could we see an official support for GCC 4.2,4.3 and 4.4 ?

People will undoubtedly tell you that it's not dead, that the maintainer works in spurts, yadda yadda .. Me, I consider it dead until proven otherwise. Don't wait for updates. </quote>

<quote> Mosfet wrote: > Hi, > > Could Mr Friedman tell us if he plan to work on GDC or if he has > completely gave up the project. > > Thanks Time since last SVN commit: 80 days. Longest previous timeout between SVN commits: 85 days. Time from SVN commit to impatient users thinking "Mr. Friedman" gets paid to do this and as such should be conforming to their every whim substantially faster rather than having a life: Usually about 30 days. - Gregor Richards </quote>

и т.п.

Фридман плюнул на ето слюною, а больше никто не хочет. И прально.

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

>>ну наконец-то! ждем-с реакции от gdc!

>недождетесь!

Ёбте, разработчик GDC присоеденился к разработчикам LDC и теперь делает этот компилятор. http://www.dsource.org/projects/ldc

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

<цитата> Винсент Richomme написал:> Здравствуйте,>> Я немного беспокоюсь, поскольку GDC, не развивается больше и в> частности, не было выпущено новых версий в течение длительного времени. > Есть еще сопровождающий? > Когда мы увидим официальной поддержки GCC 4.2,4.3 и 4.4?

Люди, несомненно, будет сообщать Вам о том, что проект не умер, что сопровождающий работает рывками, бла-бла-бла .. Как по мне, так я считаю, что мертв, пока не доказано иное. Не стоит ждать обновлений. </ цитата>

<quote> MOSFET написал:> Здравствуйте,>> Может ли г-н Фридман сообщите нам, что если он планирует работать над GDC, или если он> полностью отказался от проекта. >> Спасибо. Время с момента совершения последнего коммита в SVN: 80 дней. Максимальный таймаут между коммитами в SVN: 85 дней. Время с момента последнего изменения SVN заставляет беспокойных пользователей размышлять таким образом, что раз Мистер Фридман получает за это деньги, то должен откликаться на любые их прихоти гораздо быстрее: скажем, в течение 30 дней. - Грегор Ричардс </ цитата>

Я правильно понял?

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

> naryl-то вроде как всё знает ;)

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

Использованы DMD 2.018, Phobos, и доработанный мной svgplot (http://www.dsource.org/projects/svgplot/browser)

Результат показать, к сожалению, не имею возможности.

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

> Автор предупреждает, что в этом релизе произошло большое количество изменений в коде и вероятно появление ошибок.

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

Gharik
()

однако, приятная новость

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

> А кто какой отладчик использует для D ?

Под Линукс - проприетарный Zero Bugs или gdb с патчами, под оффтопик - ddbg.

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

> Задача решена успешно? Какие объёмы?

Решена. Около 4 тысяч строк кода. Что-либо более крупное и\или разрабатываемое несколькими разработчиками нас заставляют писать на Java.

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

А меня вот смущает нарастающая монстроёбищность D. Казалось бы, чего уж проще: объекты, модули, наследование, ну и библиотечки разные. А в результате получается, что одно только описание _базовых_ фич занимает около десятка многостраничных доков, где каждый абзац формулирует небольшие, но важные особенности языка. ГДЕ ВЗЯТЬ ПАМЯТЬ всё это помнить?!? Даже если предположить, что с практикой бóльшая их часть будет использоваться автоматом, остаётся куча ньюансов, которые придётся снова освежать. Одна глава про константность (http://www.digitalmars.com/d/2.0/const-faq.html) отрывает нахер моск. При том, что эту неизменяемость давно и успешно использую в разных языках. Вобщем, получается что-то типа PL/1, где есть ВСЁ, но где нет никого. :)
Если бы не мудаический синтаксис Смоллтока, ставил бы его в пример лаконичной реализации истинного ООП. "Ди" тут стоит на пути в тупик. Моё мнение.

matumba ★★★★★
()

Я вот все не пойму, в чем преимущество перед C# и Java?

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

>KRoN73

Получается что с D всё плохо. Он выигрывает у жабы практически всегда по памяти (ну бык тут практически все у неё выигрывают :) - но вот по скорости значительный отрыв только в "стратап" тесте ....
Тогда сравниваем с "C++ GNU g++" ... и преимуществ не остаётся ...
Ну разве только что сырки короче на 10-20% ...

Пока не убедили, вопрос остаётся в силе:
>Я вот все не пойму, в чем преимущество перед ?

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

> но вот по скорости значительный отрыв только в "стратап" тесте ....

было бы корректнее сравнивать скомпилированную в static D программу, и скомпилированную gcj/Excelsior JET ява программу. Разница будет небольшая

> Тогда сравниваем с "C++ GNU g++" ... и преимуществ не остаётся ... Ну разве только что сырки короче на 10-20% ...

лучшая модульность. D компилируется практически всегда быстро, C++ с шаблонами довольно медленно. Но это было бы корректнее сравнить если бы было что-то вроде KDE на D. или, сравниваем Vala с ldc, компилирующем в C.

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

> Одна глава про константность (http://www.digitalmars.com/d/2.0/const-faq.html) отрывает нахер моск.

по-моему, описано внятнее, чем "константный указатель с константной ссылкой на константу" в С++.

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

> Он выигрывает у жабы практически всегда по памяти (ну бык тут практически все у неё выигрывают :) - но вот по скорости значительный отрыв только в "стратап" тесте ....

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

Будем надеяться, что у D будет не сильно более плохая отлаживаемость. И что кто-ньть возьмётся за разработку экосистемы тулзов. Ибо статически типизированный язык без IDE - это слёзы.

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

> Результат показать, к сожалению, не имею возможности.

А описать своими словами можешь, что-то вроде post mortem, что понравилось в D, что не понравилось, что делал бы по-другому в случае если решал бы задачу, например, на яве?

Делал ли юнит-тесты, и если да, то как их запускал? В Eclipse на Java всё красиво, есть гуй. В Descent что-то есть вроде flute/flectioned для запуска, но оно есть дикий хак, работающий только под венду.
Не очень понравились исключения. По умолчанию, где-то возник эксепшн, и глухо вывалились, приходится все подозрительные места обносить try{..}catch на всякий случай. Нет чего-то вроде SEH в MSVC++, хотя в том же танго есть свой Exception framework.
GUI библиотеку использовал ли, и если да, то какую? DFL под венду вроде симпатичная, Entice опять же, правда GTK фронтэнд толком недопилен.

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

Решение состояло из 3-х частей:
1. библиотека
2. консольный фронтэнд, покрывающий около 40% функциональности библиотеки.
3. гуёвая морда к консольной. На tcl/tk.

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

С Java сравнить очень просто, т.к. первая версия была написана в стиле Java. После внимательнго рассмотрения удалось убрать
около 60% классов и заменить их на делегаты и замыкания. Например, вот реализация генератора случайных чисел с экспоненциальным
распределением:

alias double delegate() Rand;

Rand exponential(double mean) {
    auto next = linear();
    return {
        return -mean * cast(double)log(next());
    };  
}

Где linear - функция, возвращающая замыкание-линейный генератор.

И модуль std.algorithm, целиком написанный Александреску, позволяет, благодаря способности D ковырять строки в шаблонах, в разы
сократить количество изобретаемых велосипедов:
http://rosettacode.org/wiki/Sum_and_product_of_array#D Второй пример.

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

> Так я и на жабе умею.

Так - не умеешь. Запость свой пример на Rosetta Code, обсудим различия. Сторонние библиотеки там использовать разрешается, только шаблоном libheader отметь.

> А че нормальных лямбд нету?


Есть замыкания. Смотри пример с генератором случайных чисел. (обьясните за одно, что такое лямбда и чем отличается) Только не совсем понятно зачем в данном случае использовать замыкание. reduce может и замыкание принять вместо строк, но замыкания никогда не инлайнятся поэтому в моём примере (со строками) будет производительнсть на доли процента выше.

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

>Так - не умеешь.

Tuple r = Collections.<Integer>reduce( "s + e", "s * e" ).apply( 0, 1 ).apply( 1, 2, 3, 4, 5 );

System.out.println( "sum = " + r.nth( 0 ) );
System.out.println( "prod = " + r.nth( 1 ) );

sum = 15
prod = 120

Похоже?

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

>будет производительнсть на доли процента выше.


С чего это заинлайнятся строки и с чего это выше? Их надо вообще разобрать и интерпретировать.

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

К стати забавно - императив императивом а для реализации std.algorithm наш друг Александреску нафигачил набор функциональных костылей functional.d. То есть язык еще не запопуляризировался зато костылей в сторону фанкциональщины уже...

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

> С чего это заинлайнятся строки и с чего это выше?

string mixin. Потому что заинлайнятся.

> Их надо вообще разобрать и интерпретировать.


т.е в apache-commons-jexl реализвали заново то, что уже есть в любом компиляторе?

std.algorithm полагается в этом на компилятор и провдит при компиляции некоторые простые тесты. Например, std.algorithm.sort проверяет, можно ли использовать указанный предикат для сортировки. попытка сделать sort!("a x b")(array) успешно падает при компиляции с ошибкой static assert "Invalid predicate passed to sort".

В случае с Java если я напишу reduce( "s wtf e", "a b" ), среда разработки или, хотя бы, компилятор сможет сообщить об ошибке? Descent for eclipse такие ошибки ловит. Сам не пробовал, т.к. использую vim, но автор где-то снимал эту фичу на видео.

Не против, если я пример на Java опубликую на Rosetta Code?

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

>можно ли использовать указанный предикат для сортировки. попытка сделать sort!("a x b")(array) успешно падает при компиляции с ошибкой static assert "Invalid predicate passed to sort".

Это все шикарно - но это же страшно(в смысле строки). Почему тогда синтаксис на это не такой sort(a,b => a > b), а вместо этого строчный?

>В случае с Java если я напишу reduce( "s wtf e", "a b" ), среда разработки или, хотя бы, компилятор сможет сообщить об ошибке?


Ну умная среда разработки может - а так рантайм эксцепшен.

>Не против, если я пример на Java опубликую на Rosetta Code?


Легко.


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

Да, кстати, а в строках, передаваемых в reduce может быть любой код на Java? Например reduce("myFunkyFunc(s.getHash(), e.getHash())") сработает?

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

> Collections.<Integer>reduce

Кажись где-то ошибка. Либо Collections<Integer>.reduce либо Collections.reduce<Integer>. Или я что-то путаю?

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

> Почему тогда синтаксис на это не такой sort(a,b => a > b), а вместо этого строчный?

reduce!( (int a, int b) {return a + b;} )(0, array);

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

> Ну умная среда разработки может - а так рантайм эксцепшен.


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

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

>Да, кстати, а в строках, передаваемых в reduce может быть любой код на Java? Например reduce("myFunkyFunc(s.getHash(), e.getHash())") сработает?

да

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