LINUX.ORG.RU

Вышли новые версии оригинальных компиляторов языков D2 и D1

 ,


0

2

На днях вышли новые версии оригинальных компиляторов языков программирования D2 и D1 от коллектива авторов.

Как обычно, внесены как изменения и дополнения в стандартную библиотеку D2, так и многочисленные исправления (это касается обоих компиляторов). Некоторые важные изменения:

  • Продолжено улучшение поддержки 64-битных систем Linux, теперь эта поддержка декларируется официально, исправлен ряд ошибок и регрессий, связанных с компиляцией под 64-битную архитектуру.
  • В стандартную библиотеку добавлен модуль std.datetime, заменивший собою модули std.date и std.gregorian.
  • Добавлена поддержка HTML5.
  • Добавлен новый генератор случайных чисел — Xorshift random generator.
  • Исправлены 68 ошибок и регрессий в D2, в том числе и очень старых.

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

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

★★★★★

Проверено: post-factum ()
Последнее исправление: shimon (всего исправлений: 6)
Ответ на: комментарий от zombiegrinder_6000

> Да хотя бы то, что в следующией версии языка сломают совместимость

Это легенды бабушек, не слушайте их. :) Последнее важное изменение касалось строк (char[] отличался от string), всё остальное работало как и прежде. Кроме того, нет смысла отрекаться от языка просто потому, что вы параноидально боитесь ПРИДУМАННЫХ изменений. Ди уже около 3 лет стабилен, ничего страшно радикального в нём не появится. Да и разработчики языка прекрасно понимают ваши опасения - можете написать Уолтеру и он вас успокоит. :)

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

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

http://digitalmars.com/d/2.0/htomodule.html http://digitalmars.com/d/2.0/htod.html import std.c.*;

http://www.digitalmars.com/d/2.0/ctod.html относится только к тем, кто почему-то решил С код сконвертировать на D. Не надо этого делать, надо уметь прозрачно линковаться с Си кодом.

с с++ кодом, действительно, чуть сложнее: http://www.digitalmars.com/d/2.0/cpptod.html --- если конвертировать исходник.

Линковаться сложнее из-за манглинга С++. Стандартный способ (QtD,OpenMorrowind) — генерация C врапперов для С++ кода. В QtD это проще потому что есть патченный QtJambi.

Внезапно, можно использовать llvm компиляторы, clang и ldc и линковаться используя возможности LLVM. Так проще.

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

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

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

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

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

>> А что в D вам мешает писать так же, как в Си??

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

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

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

> Ну и почему ты считаешь что джава «мертворожденная»?

А ты посмотри где сейчас Жаба. :) На десктопе - НОЛЬ, на серверах все уже наелись «иджыбинами» и пишут на чём попало. Мобильный сегмент? Ну разве что... Опять же, чисто коммерчески. А как язык жаба отстаёт даже от Сишарпа, не говоря о Ди. Только не проси меня тратить моё время для ублажения чьего-то любопытства - почитай про Ди, а потом посмотри, что из прочитанного есть в жабе - всплакнёшь. :)

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

С чего бы ему уметь это? dmd это компилятор Волтера Брайта на базе его тулчейна dmc, Digital Mars C++ http://www.digitalmars.com/features.html который есть компилятор, отдельно выдранный и доработанный из Symantec C++, который есть доработанный ещё более мохнатый компилятор С++ (как бы не Zortech C++), который был единолично написан Волтером Брайтом году так в 1986 и был первым настоящим компилятором (а не препроцессором вроде CFRONT)

dmd = DDMD + dmc тулчейн (линкер OPTLINK + make).

DDMD это фронтэнд отодранный от dmd, какое-то время его не было, потом не развивался, сейчас он синхронизирован с dmd. Ещё есть пара компиляторов D на самом D.

ldc = LLVM компилятор + свой фронтэнд, но по они регулярно синхронизируют его с DDMD

gdc = GCC + опять-таки, свой фронтэнд, по-моему, независимый от ddmd, из-за чего и получается такой относительно медленный темп разработки GDC.

Отдельный DDMD + компилятор в виде плагина под gcc 4.5 сильно бы упростил поддержку.

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

> сравним производительность реализации одних и тех же алгоритмов на C и D

кстати да - наличие D тут:

http://shootout.alioth.debian.org/u32/which-programming-languages-are-fastest...

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

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

>В Object Pascal были какие-то оригинальные идеи? А CTFE и шаблоны там были?

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

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

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

segfault





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

>Линк на документацию можно?

Если приглядеться, второе предложение поясняет первое.

Капитан, самому можно и сборку мусора можно написать.

Вот и ответ на вопрос о циклических ссылках.

anonymous
()

Не понятно, какую нишу он собирается занять. Поэтому за столько лет никто им всерьез и не заинтересовался. Как по мне, нынче все попилено C, Java и Python.

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

>> В Object Pascal были какие-то оригинальные идеи? А CTFE и шаблоны там были?

насчет хлоротрифтороэтилена (CTFE) не знаю

отличнаяшутка.жпг

шаблоны

Хм, и давно в Object Pascal появились шаблоны?

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

Ну то есть не существует готовых реализаций смарт-пойтнеров, работающих с циклическими структурами, о чем и речь.

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

>Хм, и давно в Object Pascal появились шаблоны?

Уже давненько

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

> А учитывая «Си-совместимость» Ди, ваши существующие либы даже не надо переписывать - их можно портировать!

да и просто слинковать можно:

gcc -c sqlite.c -o sqlite.o
dmd mysqlite-CRUD.d sqlite.o -o MEGA-CRUD-APP
./MEGA-CRUD-APP


или, gdc -c ... / ldc mysqlite-CRUD.d -o mysqlite-CRUD.ll -output-ll
(или *.bc -output-bc).

Кстати, llvm умеет конвертировать BC код в C.

ldc:

version(build) pragma(link,«sqlite»);

pragma (intrinsinc,...)


врапперы (sqlite.d) нужно писать, если мы хотим ООП интерфейс к С либам (как в С++).
Если не хотим, а хотим только уметь линковаться, в С++ нужно написать хедер с extern «C» { #include «c-header» }; , а в D нужно написать module foo; extern (C): и вручную скопипастить c-header. Это так сложно?

вон к примеру, враппер к SDL: http://www.dsource.org/projects/ldc/browser/demos/sdl.d

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

хотя надёжнее не скопипастить, а прогнать через htod

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

разные компиляторы, разные бекенды, разные оптимизации. Пока что у LDC лучше всех с качеством оптимизированного кода, за ним идёт gdc, за ним референсный dmd. Зато dmd самый быстрый.

anonymous
()

что ж, потыкаем веточкой

jtootf ★★★★★
()

ИМХО уже давно назрела необходимость языка, который может выполняться как скрипт, интерпретироваться в виде байткода, компилироваться в нативные бинари и работать поверх JVM/Mono(.net)... Пока что такой язык это питон (хоть я его и не очень жалую).

Потенциально, таким языком мог быть D, что есть гуд, но что там с байткодом? .net порт устарел, JVM не держится. Буду рад если ошибся в каком-то пункте.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от n01r

да, его кажется собирали под Arm. Какая-то японская игрушка под Arm через gdc собиралась.

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

из довольно объёмного кода есть Deadlock — Quake подобная игрушка на D by team0xf ( h3r3tic и остальные), линкер xfbuild by team0xf, компиляторы на самом D, QtD.

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

> В Object Pascal были какие-то оригинальные идеи? А CTFE и шаблоны там были?

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

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

> выполняться как скрипт, интерпретироваться в виде байткода, компилироваться в нативные бинари
OCAML что ли? Хотя я его синтаксис, если честно, так и не осилил.

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

> разные компиляторы, разные бекенды, разные оптимизации

но ведь должен быть стандарт? когда я пишу на С++ для linux/mac - я знаю, что тут лучше всего взять gcc, для win - Visual C++, а для D получается не так?

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

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

Речь о том, что утверждение «в C++ нет сборки мусора» не верно. Из коробки нет, но кому надо - пишут, а кому надо и не хочется писать - гуглят. Только, как показывает практика, мало кому это надо и проблема циклических ссылок совсем не так фатальна.

Конкретно по смарт-поинтерам: shared_ptr/weak_ptr отлично работают с циклическими структурами.

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

> Речь о том, что утверждение «в C++ нет сборки мусора» не верно.

Просто у тебя свое, глубоко личное, понимание этого утверждения как «если можно написать, значит есть».

В стандарте языка есть GC? Нет. В какой-нибудь распространенной реализации есть? Нет. Значит, ее нет в языке Си++

Конкретно по смарт-поинтерам: shared_ptr/weak_ptr отлично работают с циклическими структурами.

Ссылку на документацию можно?

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

тогда уж под мак надо брать не g++, а родной objective-C clang компилятор.

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

стандартный референсный компилятор — это DMD от автора языка, который мы тут обсуждаем.

стандартных рантайм библиотек 2 — от Брайта и Александреску и от сообщества. Стандартных инструментов сборки тоже 2 или больше.

Просто в D сам DMD/phobos от автора не сильно лучше ldc/tango от сообщества, с точки зрения кодогенерации. Это как под мак сравнивать для Objective C приложений gcc и clang — clang лучше, а gcc легаси. и т.п. это распыляет сообщество, но чем больше выбора, тем лучше.

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

CTFE = compile time function execution.

Паскаль высчитывает выражения во время компиляции. А эта штука, конечно полезна, но польза от нее мизерна.. Зато сомневаюсь что компилятор D хоть чуть-чуть приближаеться к компиляторам Паскаля по скорости компиляции) И тем более сомневаюсь что он далеко ушел от С++ в этом плане..

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

> тогда уж под мак надо брать не g++, а родной objective-C clang компилятор.

только когда он будет официально, т.е. с четвертой версии xCode и судя по всему с 10.7.0

стандарт на что ?


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

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

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

В стандарте языка есть GC? Нет. В какой-нибудь распространенной реализации есть? Нет. Значит, ее нет в языке Си++

В моем понимании что-то есть, если это существует в реальности. В твоем понимании что-то есть, если оно прописано в стандарте или наличествует в libstdc++. Очевидно, у кого из нас понимание личнее.

Ссылку на документацию можно?

Подвох какой-то что ли: http://www.boost.org/doc/libs/1_46_0/libs/smart_ptr/smart_ptr.htm

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

> В моем понимании что-то есть, если это существует в реальности. В твоем понимании что-то есть, если оно прописано в стандарте или наличествует в libstdc++

кстати в С++0х «узаконили» smart_ptr и weak_ptr

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

> язык то один, но уже имеет две версии и время от времени что-то меняется,

причём в таком состоянии он уже довольно долго.

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


вот фронтенд DDMD и есть стандартный компилятор для D.
А тулчейны, в котором он реализован, разные:
dmd = DDMD собранный gcc слинкованный ld + ld на линуксе, фри и макоси; dmd = DDMD собранный dmc и слинкованный OPTLINK + OPTLINK на винде;
ldc = свой простой бекенд с бекпортированным туда DDMD, собранный gcc + llvm + ld;
gdc = свой сложный бекенд с бекпортированным туда DDMD, собранный gcc + ld.

из систем сборки сейчас практически стандартен xfbuild.

есть много нюансов -


всё-таки не понял, на что стандарт-то. Стандартная реализация ? Ну да, можно считать ей dmd. Референсная реализация спек языка. Лучшая кодогенерация и тулчейн с минимумом глюков — есть и другие варианты.

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

>>Ссылку на документацию можно?

Подвох какой-то что ли: http://www.boost.org/doc/libs/1_46_0/libs/smart_ptr/smart_ptr.htm

Никаких подвохов. Просто когда я процитирую это:

Because the implementation uses reference counting, cycles of shared_ptr instances will not be reclaimed.

я хочу, чтобы цитата пришла со ссылки, которую дал ты.

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

> QtD
OMG. У языков, претендующих на звание высокоуровневых, такие простейшие вещи должны быть в наличии. Qt в данном случае должен рассматриваться исключительно как GUI toolkit. Хороший пример - Python.

PayableOnDeath
()
Ответ на: комментарий от I-Love-Microsoft

> ИМХО уже давно назрела необходимость языка, который может выполняться как скрипт, интерпретироваться в виде байткода, компилироваться в нативные бинари и работать поверх JVM/Mono(.net)... Пока что такой язык это питон (хоть я его и не очень жалую).

Не только питон, но и разные реализации схемы подходят под это дело. Куда уж без лиспа? ;)

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

есть практически всё, что относится к сети: сокеты, HTTP/FTP/mail, HTTP сервер, CGI/xSP сервер, сервер приложений и т.п.
Наиболее толковой стандартной библиотекой является Tango, http://www.dsource.org/projects/tango/wiki/ChapterNetworking, впрочем в D2 Phobos тоже кое-чему научился.

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