LINUX.ORG.RU

Лучший компилятор «D» (LDC, DMD, GDC)


0

1

Надоели С++ (работа), Джава и Питон (хобби), решил снова взяться за Ди, посмотреть, что поменялось за пару лет...

В репах дебиана и убунту старые какие-то версии GDC и LDC, хотя LDC ещё, вроде, нормальная, но тем не менее, там зависимость на древнюю LLVM (2.7), (DMD не умеет генерировать 64-бит код для MacOSX, поэтому решил собрать с исходников что-нибудь, чтобы было реально кроссплатформенное).

Не осилил собрать gdc, всё какие-то ошибки — что в линаксах, что в макоси, поэтому не долго мучал и в итоге собрал LDC из trunk. Собралось и под макосью и под линуксом (хотя и пришлось костылей повписывать вроде -ldl, чтобы слинковалось).

Если здесь есть, кто активно пользуется Ди, поясните, стоит ли засесть на версии 1.0, или всё-таки осилить GDC со сборкой версии 2 языка? И насколько активно поддерживается tango?


Насколько я знаю, сейчас для нового кода рекомендуется D2.

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

ставил в федоре dmd с сайта, так он хеллоу ворлд не компиляет

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

Там странная версия, вот что удалось раскопать после установки в share/doc/gdc:

D Front End for GCC - Release 0.30 Last update: July 24, 2011

Changes 0.30:

Support for GCC, 4.5.x and 4.6.x added Removed support for GCC 3.4.x, 4.0.x, 4.1.x Updated D1 to 1.069 Updated D2 to 2.054

Довольно интересно, вроде как GDC ещё же не включили в состав GCC... Опять путаница... Ладно, буду ковырять дальше...

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

Я уже три года как только Common Lisp, Tcl и Erlang.

Но когда последний раз смотрел DMD всё ещё был лучшим с LDC активно его догоняющим. По прогнозам (трёхлетней давности) уже должен обогнать. GDC всегда был глючным и отстающим и интересен только как первый полностью свободный компилятор.

(тред не читал)

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

Кстати, DMD разрабатывает^H^Hлся Брайтом на Убунте, с портированием на оффтопики (оба), так что если что не работает - пишите ему в багтрекер.

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

По поводу gdc - стоит читать ссылку. Фронтенд у него - адаптированный официальный DMD, по версиям от него почти не отстает (ну на 1-2 максимум).

По поводу включения gdc в gcc - там были какие-то политические проблемы - был бы рад, если кто рассказал бы, чем все закончилось.

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

GDC всегда был глючным и отстающим и интересен только как первый полностью свободный компилятор.

Ну собственно теперь уже не тот gdc, старый забросили. Новая «возрожденная» версия - это dmd-шный фронтэнд, портированный на gcc. Вполне себе ничего, кстати.

gizzka ★★
()

Кстати, если надоел Питон, рекомендую глянуть Tcl. А там и до лиспов недалеко. ;)

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

не-не, только что-нибудь компилированное, т.к. нужна обработка графики, игры писать и тп, причём чтобы и компилилось быстро и исполнялось. Почитал спеку Д2 — это идеал, который очень хочется, чтобы был таки стабильным и под все платформы...

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

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

CL, racket

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

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

Гном от этого быстрее не станет, уж поверь.

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

Какие могут быть сомнения? Не знаю ни одного быстрого гномовского гуевого приложения, написанного на си(!) или сипипи. Приходится им замену на питоне писать.

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

Vernat

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

Они вроде бы на Vala потихоньку переписывают.

CrossFire ★★★★★
()

Каковы основные плюсы этого языка по сравнению с C/C++. Как там дела с подключением сишных библиотек?

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

CL в самой популярной своей инкарнации - компилятор в машкод, а не jit. Скорость приличная, даже в сравнении с С. Скобок норм атвечаю!!!11

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

библиотеки Си используются напрямую через объявления вроде

extern(C) int mycfunction(int a, int * b);

struct my_c_compatible_struct { int a; uint b; }

Без всякого оверхеда.

Основные плюсы: http://www.d-programming-language.org/overview.html

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

Главное, чтоб тормозить перестало, а писать никто не заставляет.

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

вроде нашли выход. была статья на opennet`e

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

нативное выполнение всегда будет выстрее чем на виртуальной машине

Где я утверждал обратное, ы?

baverman ★★★
()

>в репах дебиана и убунту старые какие-то версии GDC и LDC, хотя LDC ещё, вроде, нормальная, но тем не менее, там зависимость на древнюю LLVM (2.7), (DMD не умеет генерировать 64-бит код для MacOSX, поэтому решил собрать с исходников что-нибудь, чтобы было реально кроссплатформенное).

Не осилил собрать gdc, всё какие-то ошибки — что в линаксах, что в макоси, поэтому не долго мучал и в итоге собрал LDC из trunk. Собралось и под макосью и под линуксом (хотя и пришлось костылей повписывать вроде -ldl, чтобы слинковалось)


почитал недавно ньюсгруппу news://news.digitalmars.com/digitalmars.d http://www.digitalmars.com/d/archives/digitalmars/D/index.html

интересные треды о состоянии дел за полгода:

1. GDC всё-ж таки собираются сливать с main trunk GCC, ориентировочно в GCC 4.7

http://www.digitalmars.com/d/archives/digitalmars/D/announce/Phoronix_Merging...

см. репо https://bitbucket.org/goshawk/gdc/changesets

2. LDC, LDC2 обновлен. Форк с LDC2 слит назад в LDC.

http://www.digitalmars.com/d/archives/digitalmars/D/State_of_LDC_148791.html

Просто надо его брать не отсюда http://dsource.org/prjojects/ldc и не отсюда https://bitbucket.org/lindquist/ldc/changesets , а вот отсюда https://bitbucket.org/lindquist/ldc/changesets

3. Волтер таки научился пользоваться github-ом и даже иногда реагирует на Pull request-ы , сливает изменения в свой основной форк. Пруфлинк: https://github.com/WalterBright

4. Есть интересный форк DMD с рефлексией:
http://www.digitalmars.com/d/archives/digitalmars/D/Compiler_patch_for_runtim...

https://github.com/CyberShadow

5. deimos и CAPI

http://www.digitalmars.com/d/archives/digitalmars/D/The_CAPI_Manifesto_146765...

https://github.com/D-Programming-Language/deimos

6. Ну и самая радостная для меня новость: это форк Tango под D2 наконец-то стал юзабельным:

http://www.digitalmars.com/d/archives/digitalmars/D/announce/D2_port_of_Tango...


и он основан на druntime, то есть под D2 работает одновременно и фобос2 и танго2. Танго2 совместимо на уровне исходников с Танго1, но лучше брать отсюда https://github.com/SiegeLord/Tango-D2 бранч d2port, а не master — более совместим в tango.net.*

anonymous
()

> В репах дебиана и убунту старые какие-то версии GDC и LDC, хотя LDC ещё, вроде, нормальная, но тем не менее, там зависимость на древнюю LLVM (2.7),

хз что это за версии. LLVM 3.0 на дворе, релиз уже на носу. LDC который на гитхабе обещают переделать под него.

LTO под LDC просто так не работает, в ньюсах был пример от bearophile, что надо отдельно запускать ldc ... .bc ; opt -standart-compile ... .bc > ..._opt.bc; llvm-as ..._opt.bc -o EXE

GDC надо брать с bitbucket ... goshawk. По производительности не сильно хуже, чем LDC

в итоге собрал LDC из trunk. Собралось и под макосью и под линуксом (хотя и пришлось костылей повписывать вроде -ldl, чтобы слинковалось).


да, тоже было такое. Надо брать свежий LDC с гитхаба. Туда слили вместе LDC1 и LDC2.

Если здесь есть, кто активно пользуется Ди, поясните, стоит ли засесть на версии 1.0, или всё-таки осилить GDC со сборкой версии 2 языка? И насколько активно поддерживается tango?


ну что я имею сказать про Tango. В общем, Tango + D1 = олдскул. Хотя за последние полгода-год это тоже показатель: если проект ещё не переписали на D2, значит оно сдохло и никому нафиг не нужно.

Например, DFL (cм. форк на гитхабе), DWT — переписали на D2.

Теоретически, должен работать D2 + Tango2 из бранча d2port из https://github.com/SiegeLord/Tango-D2

Я на своих проектиках попробовал — вроде бы работает. Попробуй на своих.

Кстати, ещё build tools для D2 мало кто обновлял. В ньюсах пишут http://www.digitalmars.com/d/archives/digitalmars/D/build_system_147635.html о форке Scons, CmakeD2, рецепте для Jam (ftjam) и своём велосипеде Drake.

Кстати, появился пакетный менеджер для D2: Orbit, погугли на ньюсах.

Для совместного переключения D1 + Tango1, D1 + Phobos1 , D2 + Phobos2, D2+Tango2 советуют тулзу DVM (погугли на ньюсах).

В общем и целом, D2 + Phobos2 вполне можно пользоваться. Да, несколько не хватает крипто и сети, как было в Tango, но можно погуглить на гитхабе отдельными проектами.

А Phobos2 вполне юзабельный. Некоторые фишки в D2 тоже радуют.

Так что можно поднять старые сорцы и начать переписывать — сначала портируя на D2 + Tango2, потом портируя на Phobos2 с Tango2.

Phobos в целом обновляется чаще, чем Танго — с каждым релизом DMD, да и на гитхабе жизнь есть. А Танго в основном багфиксят для совместимости с новым релизнутым компилятором.

anonymous
()

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

anonymous
()

> Лучший компилятор «D» (LDC, DMD, GDC)

таки вопрос остаётся открытым: http://www.digitalmars.com/d/archives/digitalmars/D/Benchmarks_140039.html http://attractivechaos.github.com/plb/

ещё видел бенчмарки в ньюсах, по которым DMD оказался самым медленным (ЕМНИП, там же, где bearophile с LTO под LDC):

LDC самый быстрый, но GDC тоже не очень от него отстал, в пределах 30%.

Это я про скорость сгенерированного кода.

Вообще уточни, что значит «ЛУЧШИЙ» для тебя. Одно дело скорость сгенерированного кода, другое корректность спецификаций, поддержка библиотек и т.п.

DMD самый правильный, канонiчный и с самыми правильными библиотеками. Что к LDC, что к GDC библиотеки прикручиваются с опозданием на 2-3 недели, хотя сейчас уже GDC развивается чуть ли не быстрее, чем LDC.

А если они сольются-таки с main trunk GCC, и в GCC 4.7 сделают плагин, по образу dragonegg из LLVM — будет вообще супер.

LDC на сегодняшний момент генерирует всё-таки самый быстрый код. Даже LTO можно прикрутить, правда, ручками.

С другой стороны, у GDC, я так думаю, все шансы быть портированным на ARM первым. Кто-то такое уже делал года 3 назад — запускали японскую игрушку на ARM-e из-под GDC. Там основная сложность — портировать стд. библиотеки, например, минимальный огрызок object.d. За последнее время в этом наметился определённый прогресс, погугли на гитхабе SlimD (D2), и всякие ядра ОС на D2, с минимальным runtime. Танго или фобос выкидываются, и пишется своя затычка поверх druntime.

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

>> хотя LDC ещё, вроде, нормальная

:) ldc как раз по определению древняя - там только d1


не надо брать ldc с dsource.org (тем более, он и не работает). И с bitbucket тоже не надо — Lindquist его забросил полгода назад. А вот форк aleksey_prokhin с bitbucket активно пилился. Но сейчас все изменения уже слиты из этого форка с LDC2 в форк LDC1, и эти форки отличаются только разными средами сборки.

Так что добро пожаловать в новый форк LDC на гитхабе: https://github.com/ldc-developers/ldc

Cкандалы? Интриги, расследования http://www.digitalmars.com/d/archives/digitalmars/D/State_of_LDC_148791.html

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

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

вроде бы всё одобрили, теперь вопрос только в том, попадают ли они в окно изменений gcc 4.7 до заморозки перед релизом

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

> Я уже три года как только Common Lisp, Tcl и Erlang

:(( assembla-overlay/d был неплохой. Интересно, где сейчас самый актуальный оверлей для D под Генту?

Что-то было на гитхабе. Да и я в одно рыло накидал летом пару ебилдов под 2.054/1.xx, теперь можно просто копировать.

Хотя там практически полезен был eselect dmd set ...., ну а сейчас DVM и Orbit + патч Scons под D2 вроде бы вполне справляются вместо eselect dmd set ... + dsss + waf под D1.

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

> А там и до лиспов недалеко. ;)

а ты совмести ;-) напиши лисп компилятор на D2 на CTFE :-))

см. например в ньюсах FReD — библиотека разбора регекспов в CTFE. Ещё на гитхабе интересные есть проекты nuisanceofcats http://chilon.net/ : nya nyah и т.п., но они ЕМНИП C++ и LLVM http://chilon.net/nyah/ , хотя идея с PEG парсером интересная: tree buildinh PEGs http://chilon.net/papers/tbpeg.pdf

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

> Каковы основные плюсы этого языка по сравнению с C/C++

D это следующий С++, а Go это следующий C

Как там дела с подключением сишных библиотек?


неплохо — всё линкуется стандартно с С библиотеками, но из хедеров файл с прототипами модулей делать всё-таки надо. Есть тулзы для этого. Но языки всё-таки разные, так что могут быть тонкости. Например, на Гитхабе есть портированные примеры из книжки Ч. Петцольда под С, и NeHe OpenGL туториал. В основном всё переносится, но могут быть тонкости.

Сейчас развивается проект deimos — нечто вроде репозитория основных С библиотек под D.

https://github.com/D-Programming-Language/deimos

То есть, там они собираются отслеживать, чтобы при релизе нового DMD С библиотеки из проекта (а в проекте лежат D прототипы) нормально собирались и линковались.

Пока проектов маловато, ncurses, OpenSSL, SQLite и т.п.

на гитхабе видел зайчатки GTK3 враппера под D.

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

всё хорошо, но я сейчас в командировку уезжаю и времени вообще нет. Может ещё 2,5 анонимуса наберётся ?

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

> 2. LDC, LDC2 обновлен. Форк с LDC2 слит назад в LDC.

http://www.digitalmars.com/d/archives/digitalmars/D/State_of_LDC_148791.html


Просто надо его брать не отсюда http://dsource.org/prjojects/ldc и не отсюда https://bitbucket.org/lindquist/ldc/changesets , а вот отсюда https://bitbucket.org/lindquist/ldc/changesets


obvious fix:

Просто надо его брать не отсюда http://dsource.org/prjojects/ldc и не отсюда https://bitbucket.org/lindquist/ldc/changesets , а вот отсюда https://github.com/SiegeLord/Tango-D2 , здесь бранч d2port — это старый совместимый tango.net.* API, а в master — лежит переделанный.

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

понятное дело никто не застрахован от кривой поделки, но ее всегда можно попрофилировать и отрефакторить

Vernat ★★
()

> Надоели С++ (работа), Джава и Питон (хобби), решил снова взяться за Ди

шило на мыло...

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