Pull to refresh

Разрушая распространённые мифы о D

Reading time 6 min
Views 30K
Оригинальный текст: semitwist.com/articles/article/view/dispelling-common-d-myths
Reddit: www.reddit.com/r/programming/comments/118y4m/dispelling_common_d_myths

Вступление


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

Все эти заблуждения вполне объяснимы. Многие связаны с проблемами, которые играли важную роль в прошлом, так что не удивительно, что эти устаревшие представления продолжают существовать. Мне кажется, что это как раз те области, которые сообщество D должно как можно лучше объяснить остальным программистам. Вот эти темы:

  • Для D есть IDE
  • DSource угасает, но проекты на D активны как никогда ранее
  • Разделения на D1 и D2 больше нет
  • Phobos — стандартная библиотека? А как же Tango?
  • D — open source
  • D позволяет ручное управление памятью
  • Статическая типизация НЕ означает непродуктивность


Для D есть IDE


Были времена, когда едва ли существовали IDE с поддержкой D чуть больше чем банальная подсветка синтаксиса. Но теперь это не так. Если вам по душе полноценные среды разработки, есть три основных варианта, каждый из которых активно поддерживается:


DSource угасает, но проекты на D активны как никогда ранее


С регулярностью в пару месяцев возникают вопросы такого рода: «D мёртв? Я зашёл на DSource и все проекты выглядели устаревшими и неподдерживаемыми, а форумы пусты. Складывается ощущение, что D умирает.»

DSource был де-факто местом для хостинга проектов на D. Обратите внимание — БЫЛ. В настоящее время большинство активных проектов переехало на Github и Bitbucket. На самом деле, даже репозитории с референсным компилятором D и стандартной библиотекой расположены на Github вот уже больше года. И за это время темп разработки значительно ускорился, а не наоборот.

Были некоторые поползновения обновить DSource для того, чтобы было проще найти активные проекты среди умерших ( не стоит забывать, что любой хостинг open-source проектов обречён со временем собирать множество заброешнных ). Но в связи с огромной популярностью, которую получили Github и Bitbucket, ценность усилий в этом направлении сочли незначительной.

Хотя, должен признаться, меня огорчает говорить такое про DSource. Я всегда ценил этот сайт и в своё время его существование было чертовски нужным и полезным для инфраструктуры D1, задолго до того как Github и Bitbucket стали обыденностью для почти каждого open-source программиста. Сайт, сетевой канал и сам хостинг были безвозмездно пожертвованы для сообщества D ( и таковы до сих пор! ), так что мне неприятно говорить о DSource в духе панегирика. Но в любом случае, хотя DSource почти не используются в современной инфраструктуре D, сам язык не только очень и очень жив, он развивается прямо на глазах.

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

Разделения на D1 и D2 больше нет


D2 — это текущее положении дел. D2 уже считается стабильной веткой, D1 — пережиток прошлого. Забудьте про D1, можете даже не тыкать палочкой, оно мертво.

И когда я говорю «мертво» я не имею в виду тот же вид смерти, что можно представить по аналогии с Python 2. Я имею в виду, что практически никто не больше использует D1. Все уже на D2, даже запоздавшие. D1 достаточно мало используется, что его официальная поддержка прекращается в конце этого года ( как было объявлено год назад ). Никого не волнует D1. Всё, точка.

Есть только D2.

( Примечание переводчика: автор немного погорячился тут с «мертво», скорее «никто не использует D1 для новых проектов, это чистый legacy» )

Phobos — стандартная библиотека? А как же Tango?


Возможно вы слышали о противостоянии Phobos vs Tango. Оглядываясь в прошлое, это была несомненная ошибка D, но проблема была идентифицирована и исправлена. Вкратце суть: Phobos является стандартной библиотекой D, точка. Tango теперь является дополнительной и опциональной, но полностью Phobos-совместимой библиотекой. Как-то так.

Но так было не всегда. Немножко истории для тех, кому интересно:

Давным-давно, во времена молодости D1, задолго до того как Андрей Александреску присоединился к команде, состояние стандартной библиотеки Phobos было далеко не лучшим. Она разрабатывалась от и до одним единственным человеком ( Уолтером Брайтом ), который, конечно же, будучи основным разработчиком языка, был слишком занят работой над языком и компилятором. И по ряду причин она тогда не была полноценным open-source.

Поэтому группа талантливых разработчиков собралась и решила исправить эту проблему, создав полноценную стандартную библиотеку. Её назвали Tango и она была настолько лучше незаконченной Phobos, что стала стандартом де-факто.

К сожалению, для нормальной работы Tango пришлось заменить некоторые низкоуровневые части Phobos, связанные со средой времени выполнения. Библиотеки стали несовместимыми — не было никакого способа использовать обе одновременно. Это, само собой, стало настоящим кошмаром для пиара D.

Тем временем, Phobos стал полность open-source, Андрей Александреску взял на себя руководство его разработкой и понемногу Phobos становился краше и законечнней. В некоторых местах он был чертовски хорош, но это не помогало ключевой проблеме несовместимости Phobos и Tango. Но к счастью, сообщество разработчиков D услышало многочисленные жалобы насчёт двух стандартных библиотек и сосредоточилось на решении проблемы.

На тот момент D2 развивался в качестве основной unstable ветки, в то время как D1 стал stable веткой, в которой запрещены изменения, ломающие обратную совместимость. И для D2 вся функциональность, что создавала несовместимость между Phobos и Tango была переработана и вынесена в отдельную сущность Druntime. Так что тперь и Phobos, и Tango используют Druntime и являются полностью совместимыми. Никакого конфликта больше не существует.

Которую из них стоит использовать? Phobos, если у вас не возникло какой-то специфической потребности в функциональности Tango. Как бы то ни было, но Phobos всё-таки является настоящей стандартной библиотекой.

Что может заставить вас обратится к Tango? Те же причины, что и к любой дополнительной библиотеке: если вам больше нравится её дизайн, как вариант. Tango стилистически намного более похоже на Java и может понравиться перешедшим из этого языка. Или вам потребовалось что-то из Tango, чего в Phobos банально нет. Например, в Tango реализован самый быстрый в мире XML парсер. В то же время модуль XML из Phobos входит в число вещей, которые ой как надо бы взять и переписать с нуля. ( Не беспокойтесь, остальная часть Phobos просто великолепна. )

D — open source


Существует 3 основных компилятора для D:
  • DMD: референсный компилятор
  • GDC: использует GCC бэкэнд и находится в процессе включения в основную поставку GCC
  • LDC: использует LLVM


GDC и LDC — самый настоящий open-source, без всяких но, и даже включены в соответствующие разделы репозиториев некоторых дистрибутивов Linux. Стандартная библиотека и среда исполнения, Phobos и Druntime — лицензированы под Boost-лицензией, одобренной Open Source Initiative.

Все исходники DMD доступны на Github. Front-end, который используется так же и GDC c LDC, имеет одобренную OSI Artistic лицензию и так же GPL лицензию.

Единственная вещь, которая формально не является open-source — DMD back-end. Причина — используется вещи, лицензированные в своё время у Symantec и Уолтер не может просто так сменить лицензию. Но исходники публично доступны и pull request'ам всегда рады. Вас беспокоит распространение? Не стоит: просто попросите самого Уолтера. Лицензия обязывает его требовать спрашивать его разрешения ( Прим. переводчика: рад совету, как этот копирастический казус сформулировать по-русски нормально ), но это чисто техническая формальность. Попросите у него, и тут же получите разрешение. Не известно ещё ни одного случая отказа. И да, не забвайте, это касается только DMD, точнее back-end DMD. Всё остальное — open-source без всяких «но», включая два полноформатных компилятора, GDC и LDC.

D — open-source. Не всегда был, но вне всяких сомнений таков сейчас.

D позволяет ручное управление памятью


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

В D есть указатели ( элегантно ограниченные безопасными для памяти доступными операциями в @ safe режиме ) и прямой вызов функций на C. В вашем распоряжении malloc/free и вы можете разместить что угодно в полученной таким образом памяти используя emplace. Или попробуйте стэковые scoped классы. Или счётчики ссылок. Или RAII. Плюс ко всему, сейчас в процессе разработки находится система настраиваемых аллокаторов.

Статическая типизация НЕ означает непродуктивность


D — статически типизированный язык, но это не должно у вас вызывать ассоциации со стилем C++ или Java:
% cat funWithRanges.d
import std.algorithm;
import std.range;
import std.stdio;

void main()
{
	// All done lazily:
	auto squares   = sequence!((a,n) => n^^2)(0);
	auto fibonacci = recurrence!((a,n) => a[n-1] + a[n-2])(1, 1);
	auto fibEven   = fibonacci.filter!(x => x%2 == 0)();

	foreach(v; zip(squares, fibonacci, fibEven).take(6))
		writeln(v[0], "\t", v[1], "\t", v[2]);
}

% rdmd funWithRanges.d
0       1       2
1       1       8
4       2       34
9       3       144
16      5       610
25      8       2584

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

Добавьте ещё разные полезные штуки для параллельных выичслений, простые шаблоны и инструменты метапрограммирования, а так же разные полезности, ставшие уже обыденностью.
Tags:
Hubs:
+68
Comments 56
Comments Comments 56

Articles