LINUX.ORG.RU

DMD 1.041 и DMD 2.026

 , , ,


0

0

К новому релизу свободного официального компилятора свободного языка программирования D, разрабатываемого несколькими гуру C++ в свободное время произошли следующие изменения:

  • Опубликован исходный код всего компилятора, включая backend. Большая часть под GPL или Artistic License, но часть - Public Domain и DMD License.
  • Увеличена точность математических функций на MacOS X и в три раза увеличена их скорость на всех платформах.
  • Возможность обьявлять структуры вложенные в функции с доступом к контексту. (Только DMD 2.026)
  • Множество исправленных ошибок.

DMD 1.041 Changelog

DMD 2.026 Changelog

Прямая ссылка на архив DMD 1.041

Прямая ссылка на архив DMD 2.026

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

★★★★★

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

Отрывок из лирического вступления к лицензии DMDL:

"The Software was not designed to operate after December 31, 1999." :D

И вот ещё из новостной группы:
Walter Bright wrote:
> dsimcha wrote:

> > Purely out of curiosity, with regard to the DMD source, what changed that all of the sudden caused you to release the full source?


> I've been intending to for a while, it took a while for me to clean it up, check all the licenses, and get it into a presentable form.


> Essentially, it's pretty obvious that the world has changed, and closed source is no longer acceptable for a mainstream product that people will be relying on. Open source is the future, and it's past time for dmd to join the party!

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

Потерпи. :) Как смогу построить из исходников выложу. Пакет dmd-bin - deprecated. :D

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

Придётся подождать пару дней. Проблемы с makefile'ами. Автор обещал исправить.

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

Это я правильно понял, что официальный DMD теперь можно добавлять в дистрибутивы GNU/Linux?

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

> Это я правильно понял, что официальный DMD теперь можно добавлять в дистрибутивы GNU/Linux?
Только в Gentoo. :) Лицензия на DMD содержит ровно одно ограничение. Запрет на перераспространение в каком бы то ни было виде. Других ограничений, включая модификацию и распространение патчей под какой хочешь лицензией, нет. Подробности по уже данной выше ссылке: http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.ann...

p.s. Шоман! Метки тоже иногда стОит проверять ;)

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

Чем вообще D лучше C++? Что в нём есть такого, чего нет в крестах? Кроме ненужного GC, разумеется. Не тролль, мне правда интересно умных людей послушать.

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

Руки так и чешутся отправить в поиск. Не помню точно где и когда но помню, что отвечал на этот вопрос уже 4 раза только на ЛОРе.

В общих чертах: динамические массивы, правильный, но отключаемый сборщик мусора, правильное метапрограммирование и compile-time evaluation, отсутствие текстового препроцессора и множественного наследования.

За что такое пренебрежение GC? Много лишнего личного времени? Ни Deadlock ни OpenMW GC не отключают и как ни странно внезапных тормозов замечено не было.

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

"Правильное" - по сравнению с C++. Вообще программы на D пишутся немного в другом стиле. Лучше попробовать, чем медитировать над списком фичей.

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

>Только в Gentoo. :) Лицензия на DMD содержит ровно одно ограничение. Запрет на перераспространение в каком бы то ни было виде.

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

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

> Это ведь бинарные дистры пролетают.
flashplayer в убунте тоже с оф. сайта качается.

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

Таки сходите по ссылкам в комментариях.

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

>> Это ведь бинарные дистры пролетают.
> flashplayer в убунте тоже с оф. сайта качается.


Закрытый апплет для развлекухи и компилятор языка это не совсем одно и то же.

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

> Таки сходите по ссылкам в комментариях.


А я ходил :)

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

Похоже единственный выход - долбить Symantec петициями.

Digital Mars имеет право по этой лицензии передавать право перераспространения другим организациям. Примером тому tango, поставляющаяся с бинарным dmd уже больше года.

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

Мдя... даж нинаю что и сказать %) Надо же было такой косяк допустить))) ну ничо я всёравно гентушник

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

>В общих чертах:

Спасибо. Пара вопросов (беглое гуление результатов не дало):

>динамические массивы

Это что-то отличное от std::vector.resize()? Изменение размеров "на месте", без копирования в новое место? Если нет, то чем динамические массивы лучше?

>compile-time evaluation

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

>отсутствие текстового препроцессора

Хорошо.

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

Плохо.

>За что такое пренебрежение GC?

Не нужен. Абсолютно лишняя сущность. И даже вредная, т.к. утечки указывают также и на семантические ошибки в программе, GC такие ошибки спрячет. Бывало со мной такое, с тех пор такие языки разлюбил.

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

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

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

> Это что-то отличное от std::vector.resize()? Изменение размеров "на месте", без копирования в новое место?
Если есть возможность то да. И оператор slice. Пример:
auto s = "hello world"; // между словами три пробела
s[0 .. 7] = "goodbye"; // s == "goodbye world"

И в D2 векторные операции:
auto x = [1, 2, 3, 4, 5];
auto y = x[] + 5;
// x[] - сокращение от x[0 .. $], что в свою очередь сокращение от x[0 .. x.length]. Части массива, отрезанные opSlice всегда присваиваются и изменяются по значению. Сами массивы - по ссылке.
x = y; // по ссылке
x[] = y[]; по значению
x[] = 0; // обнулить каждый элемент массива

>> compile-time evaluation

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

Практически есть с несколькими очевидными ограничениями и одним неочевидным - из массивов при компиляции допускается использовать только строки.

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

> Плохо.

Очевидно есть множественное наследование для интерфейсов. А реализацию интерфейса по-умолчанию можно предоставить с помощью template mixin'а.

>> За что такое пренебрежение GC?

> Не нужен. Абсолютно лишняя сущность. И даже вредная, т.к. утечки указывают также и на семантические ошибки в программе, GC такие ошибки спрячет.

Это, конечно, правда, но:
1. GC можно использовать для ловли утечек памяти. :)
2. Без GC невозможно реализовать делегаты. Поэтому пересмотрите свои слова насчёт абсолютно лишней сущности: (Код на D2) http://paste.dprogramming.com/dpi9wprm С C++0x получишь только segfault'ы. :P

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

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

> Есть смысл смотреть в его сторону человеку, всю жизнь писавшему на шарпе?
Быстрее стартап, в разы меньше жрёт памяти и не требует больших рантаймов. В наличии шаблонное метапрограммирование. Никаким образом не зависит от какой-либо корпорации.

Но человеку, всю жизнь писавшему на шарпе я бы посоветовал сначала Haskell, потом Prolog.

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

Пролог изучали в институте, успешно сдал лабы. Хотя понятно, что для того, чтобы реально овладеть языком, стоит хотя бы одну полноценную программу написать. Другое дело, что ЧТО писать и главное ЗАЧЕМ на прологе я пока еще не представляю. Какие-то сугубо академические задачи на нем у меня в инсте решаются. Про хаскелл много слышал хорошего, но не щупал.

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

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

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

а мне шарповский синтаксис напоминает джавовский, что в принципе не удивительно:D

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

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

Делегат - анонимная функция, вычисляющаяся в контексте обьявления. Выше по ссылке есть отличный пример использования для определения генераторов случайных чисел: http://paste.dprogramming.com/dpi9wprm Для делегатов, обьявленных в методе доступ к полям объекта тоже имеется.

> И да, есть ли ивенты наподобии?


Только на уровне библиотеки. Перегрузка операторов (включая оператор() )позволяет сделать интерфейс полностью аналогичный .NET'овскому.

> Пролог изучали в институте, успешно сдал лабы.

Поздравляю! У нас был один предмет, где нужно было одни и те же задачи решать на C++, Haskell и Prolog. На Prolog 80% студентов забили. На Haskell - 40%.

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

> LLVM D Compiler

Можно пощупать LDC 0.9, но лучше ждать 1.0. Лицензия LLVM - University of Illinois Open Source License. LDC - BSD License.

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

Я вот когда себе искал замену С++, рассматривал много языков компилируемые в native code.

Смотрел и на D , и на haskell, и на prolog.

В итоге вибрал ocaml.

Причины: 1. Полная поддержка всех парадигм программирования: ООП (с множественным наследованием), фунциональное программирование, императивное программирование.

2. Языку уже не мало лет, куча кода и lib написано. Что наглядно подтверждает http://www.google.com/codesearch. Если сравнить с количеством напиcанным на D, то остается языку D только посочувствовать.

3. Есть и интерпретатор, и компилятор в байт-код, и в native code.

4. Сборщик мусора разуемеется.

6. Type inference. не надо указывать типы используемых переменных компилятор сам догадается.

7. Есть крутейший предпроцессор, который позволяет вводить новые конструкций языка. С помощью этого предпроцессора например либа PGOcaml на этапе компиляции стучится к БД и проверяет наличие указаных таблиц, типы столбцов и т.д. Полный улет. Проверка выдаваемого XHTML кода на соотвествие DTD на этапе компиляции.

Как челу, который пишет на С#, то F# (клон ocaml) будет близок и все знакомые либы будут доступны.

cdome
()

При рассмотрении исходников backend'а онаружилось, что зависимость от libstdc++-v3 была вызвана случайным (???) включением <new.h> вместо <new>.

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

Векторные операции это хорошо. Еще бы сделали в D какой-нибудь аналог OpenMP и можно будет уже серьезными вещами на нем заниматься.

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

>7. Есть крутейший предпроцессор, который позволяет вводить новые конструкций языка. С помощью этого предпроцессора например либа PGOcaml на этапе компиляции стучится к БД и проверяет наличие указаных таблиц, типы столбцов и т.д. Полный улет. Проверка выдаваемого XHTML кода на соотвествие DTD на этапе компиляции.

Предпроцессор зело зло!

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

>Если есть возможность то да

Зависит от реализации и погоды на Марсе, как я понимаю. Гарантий верности указателей на элементы массива нет.

>s[0 .. 7] = "goodbye"

Всего-лишь более короткая запись для

char [] gb = "goodbye";std::copy(gb, gb+7,s.begin());

>auto y = x[] + 5;

Это вообще не очень хорошая конструкция. Неясно, добавляется ли пятёрка в конец массива или прибавляется ко всем элементам или только к первому.

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

А стратегии как делать?

>GC можно использовать для ловли утечек памяти. :)

У него есть логи/отладочный вывод? Тогда это хорошо.

>Без GC невозможно реализовать делегаты.

Хм. Наверно я чего не понимаю в делегатах (как-то обходился без них раньше), но слышал о реализациях делегатов для плюсов. Например http://www.rsdn.ru/article/cpp/fastdelegate.xml

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

>> Если есть возможность то да

> Зависит от реализации и погоды на Марсе, как я понимаю. Гарантий верности указателей на элементы массива нет.


Да.

>> auto y = x[] + 5;


> Это вообще не очень хорошая конструкция. Неясно, добавляется ли пятёрка в конец массива или прибавляется ко всем элементам или только к первому.


Добавить в конец массива - "y ~= 5"
Прибавить ко всем элементам - "y[] += 5"
Только к первому - "y[0] += 5"

Что может быть неясно?

y += 5; // error несоответствие типов

>> GC можно использовать для ловли утечек памяти. :)


> У него есть логи/отладочный вывод? Тогда это хорошо.


Можно определить свой collection handler, например с
throw new Error("MEMORY LEAK!!!!!!11");

Пример в конце раздела сразу же перед следующим (intrinsic): http://www.dsource.org/projects/tango/wiki/ChapterCore#Exception

> Хм. Наверно я чего не понимаю в делегатах (как-то обходился без них раньше), но слышал о реализациях делегатов для плюсов. Например http://www.rsdn.ru/article/cpp/fastdelegate.xml


Если я ничего не упустил их можно только передавать в функцию, но не возвращать. Такие и в D без GC работают. Отсылаю к примеру, не реализуемому на C++ без серьёзных косылей: http://paste.dprogramming.com/dpi9wprm

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

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

PS Если я правильно понял, что данный пример на C++ можно реализовать как набор функторов.

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

1. Скачать и распаковать исходник интересующей версии.
2. В каталоге src/dmd применить соответствующий патч: http://code.assembla.com/d-overlay/subversion/nodes/dev-lang/dmd/files
3. make -f linux.mak

Собственно компилятор готов. Рантайм и стандартная библиотека:

3a. Для dmd-2.026 в src/druntime/src выполнить chmod u+x build-dmd.sh; ./build-dmd.sh
4. В src/phobos выполнить make -f linux.mak

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

Сравнение быстродействия разных компиляторов:
http://dbench.octarineparrot.com/

Тесты взяты со старого http://shootout.alioth.debian.org 1999г.
По результатам видно, что Symantec'овского backend'а лучше избегать. :) Так же можно сказать, что llvm пока ещё не превосходит gcc на большинстве тестов. frontend у всех трёх компиляторов один

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

D далековат от С, хотя не так, как Objective C. походу так и останется экспериментальным недоязыком. интересный проект Vala, но еще очень сырой. некая ниша между C и Моно.

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

naryl: Спасибо за оверлей и небольшая просьба , можешь добавить в profiles файл repo_name с именем своего оверлея, например:

$ echo "d-alt" > profiles/repo_name

К сожалению имя "d" уже используется, но использующий его оверлей совсем не обновляется =(

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

>Запрет на перераспространение в каком бы то ни было виде.

не нужен

>Других ограничений, включая модификацию и распространение патчей под какой хочешь лицензией, нет.

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

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

> Предпроцессор зело зло!

Дружище, а ты препроцессоры кроме Сишного видел?

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

>динамические массивы,

зачем это в языке? Рамок стандартной библиотеки не хватает?

>правильный, но отключаемый сборщик мусора,

Это даже для голого Це есть.

>правильное метапрограммирование и compile-time evaluation,

плюсег.

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

не осилили ни то, ни другое?

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

> Хотел бы я знать, каким образом можно запретить распостранять патчи.

Патчи разве под derived work не попадают?

>> динамические массивы,

>зачем это в языке? Рамок стандартной библиотеки не хватает?


Вроде нет ничего, что мешало бы реализовать массивы в библиотеке для D2 с интерфейсом аналогичным встроенным. В первой ветке языка это было невозможно по ряду причин. Спасибо за RFE. :)

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

>не осилили ни то, ни другое?


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

Автор языка, кстати, осилил множественное наследование раньше, чем кто бы то ни было.

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

>> динамические массивы,

> зачем это в языке?

Чтобы не делать еще один Си++

>>правильный, но отключаемый сборщик мусора,

>Это даже для голого Це есть.

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

>не осилили ни то, ни другое?

Да ты шутник.

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

> Валу вообще втопку, никакого сравнения с Д не выдерживает :)

а можно подробнее, где именно не выдерживает ?

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