Pull to refresh

Место для D

Reading time 6 min
Views 3.3K
Original author: Andrei Alexandrescu
На хабре уже публиковался перевод статьи The Case For D за авторством Андрея Александреску. Перевод, к сожалению, был сделан на скорую руку, без посторонней помощи и советов, что не могло не отразиться на его качестве. Позднее был коллективно создан более качественный и, главное, верный перевод, который мы и хотим показать. Старый перевод будет удалён, чтобы не создавать путаницы.

Андрей Александреску — Место для D [ссылка на pdf]
(статья посвящена D — «системному языку высокого уровня», одним из разработчиков которого является сам Александреску)

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

Участники: Volfram, naryl, karbin — перевод; maxter — грамматика и орфография; eldar, digited, Nekuromento, karbin, RISC — технические вопросы. ( Они будут рады ответить на любые вопросы, если им предоставить такую возможность ;) )


D FAQ


Что за путаница с компиляторами и библиотеками, что мне в итоге использовать?

Строго говоря, никакой путаницы нет. Достаточно разобраться в том, что, как и у любого достаточно широко используемого языка, у D есть несколько реализаций.
Сейчас существует две ветви языка:
  • D1.0 — стабильная ветка языка, развитие функционала которого искусственно заморожено и он подвергается только исправлению ошибок
  • D2.0 — развивающаяся в данный момент ветка языка, куда периодически вносятся изменения функционала и новые возможности. Эта ветвь жертвует некоторой обратной совместимостью с D1.0 ради большей выразительности. Планируется, что добавление новых возможностей будет заморожено в этой ветке вместе с выходом книги Александреску «The D Programming Language» (март 2010).

В планах находится D3.0, но о нём пока известно не слишком много. Известно лишь, что его разработка начнётся только после перехода D2.0 в стабильное состояние и разработки инструментария к нему.
Имеется два активно развивающихся компилятора DMD и LDC:
  • DMD — написан первоначальным создателем языка Волтером Брайтом (Walter Bright) и является, по сути, определением языка. Компилятор существует в версиях для D1.0 и D2.0. Есть поддержка для x86 Linux, x86 FreeBSD 7.1, x86 Windows и x86 Mac OSX 10.5
  • LDC — проект, использующий front-end от DMD и LLVM в качестве back-end'а. Благодаря LLVM, LDC уже способен генерировать код часто более производительный, чем код генерируемый DMD. Компилятор поддерживает D1.0, хотя есть эксперементальная ветка поддерживающая D2.0. Существует в версиях для x86 и x64 Linux. Поддержка Windows на данный момент ограничена (не работает механизм исключительных ситуаций) из-за внутренних проблем LLVM (эта информация, впрочем, не достоверна).

Для D1.0 существует две несовместимые стандартные библиотеки. Точнее стандартная (Phobos) и альтернативная (Tango). Phobos развивался слишком медленно и сообщество, не довольное подобных ходом событий, создало новую библиотеку, вскоре развившуюся до индустриального качества. В связи с этим в мире D1.0 возникла некоторая путаница, т.к. некоторые библиотеки и проекты поддерживали Phobos, в то время как другие использовали Tango, что автоматически создавало проблемы при необходимости использования проектов, требующих разные библиотеки.
В мире D2.0 такой проблемы не существует. Phobos вырос, возмужал и окреп, в то время как Tango все еще не портирована на D2.0. Также Phobos использует в качестве своей основы библиотеку druntime, основанную на коде Tango, что позволит в будущем их бесконфликтное сожительство в одном проекте.
Так что, если вам нужен совет, какой компилятор и библиотеку вам использовать, то всё просто:
Для D1.0 используйте DMD в Windows и LDC в Linux, а Tango в качестве основной библиотеки (большинство проектов использует именно её)
Для D2.0 используйте DMD и Phobos.

Почему же тогда нету задокументированного стандарта языка?

Как уже говорилось, по сути, определением языка является компилятор DMD. Было бы очень нерациональной тратой времени писать стандарт для D2, учитывая скорость, с которой он меняется. Для D1 существует неофициальное описание на сайте wiki4d и, видимо, авторы языка считают это достаточной временной альтернативой, пока не произойдёт стабилизация D2. По некоторой информации, есть договор между Вальтером и Андреем приурочить к выходу книги «The D Programming Language» не только заморозку добавления новых возможностей в D2, но и выпуск официальной спецификации языка.

Какие существуют IDE, чем они отличаются?

Существуют две основных IDE:
  • Descent — плагин к Eclipse.
  • Poseidon — IDE полностью написанное на D.

Poseidon, к сожалению, давно не обновлялся, однако остается полностью готовым к использованию. Имеет встроенную хорошую поддержку дебаггера. IDE поддерживает D1.0
Descent же развивается активно и творит чудеса вроде отладки шаблонов и полного семантического анализа кода, выявляя ошибки еще во время написания кода. Плагин полностью поддерживает D1.0 и имеет экспериментальную поддержку D2.0

Так же недавно был начат подающий надежды проект Code Poet.

Языку уже 10 лет, почему всё так плохо (грустно, печально, не вдохновляюще)?

Для начала стоит определиться, что считать моментом рождения языка и какие к нему должны быть требования.
По хорошему, неправильно говорить, что языку 10 лет. Прежде чем мы получили готовый к использованию компилятор и стандартную библиотеку прошло много времени, и именно этот момент, как мне кажется, и стоит считать рождением языка. Язык прошел через долгие предродовые муки и, сформировавшись, явился на свет.
Потом, совершенно не уместна фраза «почему так плохо». Как «так плохо»?
Почему язык не является флагманом промышленности? Потому что за ним не стоит денежный мешок. Язык создается и поддерживается сообществом ради сообщества. А промышленности нужны гарантии, что язык не исчезнет и через 10 лет, что он будет стабилен, что будет предоставлять возможности, которые требует индустрия. D не может дать этих гарантий. Неизвестно, хорошо это или нет, но я ( мы :) ) буду его использовать, если у меня ( нас :) )будет такая возможность.
Почему до сих пор нет хорошего инструментария и отлаженной цепи разработки? Создание хорошего инструментария требует больших затрат сил и времени. Далеко не все готовы тратить свое время на что-то что может перестать существовать через пару лет, но те, кто решается, помогают D двигаться дальше, обращая все новых людей. Волтер Брайт собирался после приведения D2.0 в стабильное состояние (что произойдет очень скоро) заняться созданием вещей, упрощающих жизнь D разработчика.

Какие планы по развитию языка у авторов?

О планах в целом было немного рассказано в предыдущих ответах.
Касательно D2.0 в ближайшем будущем будет добавлено следующее:
  • Новая более мощная перегрузка операторов
  • В библиотеку Phobos добавятся механизмы для обмена сообщениями, что значительно облегчит написание параллельного кода.

Для D3.0 запланировано следующее:
  • AST макросы.
  • система типов, предложенная Бартошем Милевски (Bartosz Milewski), как средство против «гонок» данный (data races).

Так же о развитии языка можно почитать здесь (тырк).

Какие реальные программы уже написаны на D и в полной мере работоспособны?

Сложно назвать список, т.к. программ на самом деле много и они все разные.
Просто что бы не оставаться голословным:
  • интерпретаторы скриптовых языков MiniD и Monster, а также интерпретатор Lisp
  • системы сборки xfbuild и DSSS
  • браузер серверов игр, использующих «движок» Quake 3 — Monster Browser
  • есть игры, есть редакторы кода и IDE, есть множество разнообразных библиотек.

Список множества текущих open-source проектов на D можно посмотреть здесь: (тырк). Не пугайтесь того, что половина из них заброшена — это компенсируется их количеством. Всё-таки open-source есть open-source :).

Есть ли тесты производительности (относительно С++)

Есть, но, к сожалению, shoutout исключил D из последних тестов и результаты не очень актуальны, но даже они дают представление, что D практически не отстает по производительности от C++.
По этой ссылке можно взглянуть на сравнительные тесты разных компиляторов D по множеству параметров.

А что бы такого интересного почитать по этой теме?

http://prowiki.org/wiki4d/wiki.cgi?FrontPage
http://dprogramming.ru
http://www.digitalmars.com/d/
http://www.digitalmars.com/webnews/newsgroups.php?search_txt=&group=digitalmars.D
http://www.dsource.org
http://ru.wikibooks.org/w/index.php?title=D

Я хочу помочь развитию языка, что я могу сделать?

Прежде всего, обратить внимание на соответствующий раздел wiki4d. Вот краткая выдержка оттуда в переводе:
Компиляторы. Многие считают, что D невозможно воспринимать всерьёз, покуда не будет создано хотя бы несколько полноценных компиляторов. Вы можете влиться в разработку LDC, поучаствовать в убеждение Вальтера реализовать ещё что-нибудь в DMD или, быть может, оживить почти мёртвый проект GDC.
Дебаггеры. Пока что не существует ни одного в полной мере рабочего дебаггера для D. Но стоит присмотреться как минимум к разработке патча для gdb для поддержки схемы именования D.
Документация. Её никогда не бывает мало.
Библиотеки. Пройдя по вышеприведённой ссылке можно найти целые тематические «виш-листы».

А что вы думаете о Go? :)

Go — интересный, но пока еще слишком молодой проект. Он, конечно, привнесет свежую струю в разработку серверных программ, но на звание системного языка не годится (по крайней мере, в том значении, в каком мы понимаем термин «системный язык»). Через год-полтора, пожалуй, можно будет второй раз взглянуть на Go, что бы оценить проделанную работу и решить для себя необходимость использования этого языка.
Tags:
Hubs:
+22
Comments 56
Comments Comments 56

Articles