Не пора ли нам в D?

в 11:52, , рубрики: c++, Программирование

На прошлой неделе Андрей Александреску отрапортовал твиттером о первом коммите на языке D в кодовую базу Фейсбука. «5112 lines of sweet code!» В подробностях, опубликованных на форуме dlang.org, Андрей говорит про серьезные улучшения в производительности, скорости сборки и объеме кода по сравнению со старым на С++. Новость совершенно замечательная для D сообщества, так как она служит подтверждением годности языка в контексте профессиональной разработки.

Естественно, такие новости привлекают внимание разработчиков и за пределами D сообщества. Все же хотят больше производительности и меньше кода. Главный вопрос, если Александреску переписывает код с C++ на D, то не пора ли и нам?

Язык D появился в 2001 году и развивался во многом как альтернатива С++, очищенная от тяжелого наследия последнего. Он собрал массу вещей, считавшихся хиповыми в околоплюсовом сообществе: трейты типов, статические условия, модули. Кое что, как трейты, вошло потом в стандарт С++11, кое что, как модули, до сих пор в мире С++ является предметом обсуждения.

В 2006 году Александреску присоединился к разработке языка, и не напрасно. Для тех, кто читал «Modern C++ Design», D не покажется чужим. Он имеет массу возможностей для статического метапрограммирования. Фактически он настолько метаориентирован, что модульные тесты срабатывают дважды: при компиляции и при выполнении.

D — язык хороший и современный. Модульные тесты, кстати, поддерживаются в нем на уровне языка. Равно как и контрактное программирование или проверка чистоты функций. Понятно, чем он хорош. Но чем он тогда плох, раз только через двенадцать лет активной разработки он подал первую робкую заявку на мейнстримность, и то от лица одного из авторов?

Во-первых, он все-таки сложный. Так не принято, наверное, говорить, но он действительно требует от программиста сосредоточения и понимания внутренней кухни, а многие, и я в том числе, не любят думать головой при программировании. Довольно неприятно, разбираясь со сложным алгоритмом, получить от компилятора сообщение: "(int) Is not an Expression". Приходится задумываться над тем, откуда вообще тут взялся int, какой тест его принес и почему. А хочется ведь задумываться над алгоритмом. Метапрограммирование действительно приносит в программирование еще одно измерение. Но не все умеют и любят им наслаждаться.

Во-вторых, и это следствие первого, сообщество его немногочисленно. Хотя одновременно не так уж и мало: вопросы на StackOverflow, например, пусть не мгновенно, но все-таки находят ответчиков, а большинство вопросов без подвоха вообще гуглится и находится прямо на dlang.org (кстати, маленький совет, гуглить вообще стоит по «dlang», а не «d»). Однако маленькое сообщество — это все же маленькое сообщество. Локальных ивентов по D в ближайшее время не предвидится.

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

В-третьих с половиной: инструменты, IDE, книги, туториалы и т. п. Все есть, но всего мало.

То есть в принципе язык находится на правильном пути. Он давно уже вышел из точки А, и только-только, в лице его авангарда числом 1 (один), дотянулся до точки Б. Это уже повод почитать про него статей и вообще всячески насторожиться. Но стоит ли браться переписывать код с C++ на D в погоне за счастьем и ускорением сборки? Как мне кажется, еще не пора, если только вы не Александреску.

Автор: akalenuk

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js