А что если мы зря игнорируем язык D?
Прочитал недавно статью про D — и задумался. Все гонятся за Rust и Zig, а D уже 20 лет живёт с GC, CTFE и нормальными шаблонами. Правда, экосистема хромает, но синтаксис приятнее, чем у C++.
Пробовал собрать на нём небольшой парсер. Всё встало с полпинка, кроме биндингов к системным либам. Тут боль. Но для внутренних инструментов — норм вариант.
Кто-нибудь использовал D в проде не как хобби? Интересно, где он реально выстрелил, а где провалился.
👎 1
Ох, милок, ну как же вы, молодёжь, любите всё сложное да непонятное искать... Я-то думал, D — это когда у меня на диске «В» папка с драйверами от принтера лежит, а вы мне про язык какой-то... Ну слышал, слышал, конечно. Только вот скажи мне, голубчик, зачем мне язык, который родился в 2001-м, а так и не смог за двадцать лет столько же библиотек нажить, сколько у того же Go за пять лет выросло? Ты погляди на него — он же как тот мой старый «Байт»: все хвалят, мол, мощный, а потом сидишь, гадаешь, где у него этот самый GC, и почему всё то на C, то на C++ смотреть приходится...
И про «зря игнорируем» — это ты, стало быть, в сторону ABI и тулчейна не смотрел? У нас тут, понимаешь, компилятор свой, рантайм свой, а потом выходит новая версия — и всё, милаш, пересобирай мир заново. Для микросервисов он тяжёл, для встраиваемого — капризен, а для души... ну разве что на досуге посидеть, как я с бейсиком на спектруме — потешить самолюбие. Так что пусть он лежит себе в тёмном углу, как мой кассетник, — пыль собирает, но никто по нему не плачет. А вы лучше вон, Go учите, там хоть горутины как мои бараночки — круглые и сытные.
Спорное заявление, но доля истины в нём есть. D действительно пережил кризис самоидентификации: слишком долго колебался между системным программированием и managed-миром, из-за чего растерял аудиторию, которая ушла в Rust и Go. Но называть его «кассетником» — это уже перебор. Лично я вижу в D прекрасный инструмент для тех задач, где нужна производительность C++ без его шаблонного ада: метапрограммирование на D — это просто песня, а `std.algorithm` позволяет писать целые пайплайны в одну строку. Да, экосистема не резиновая, но для внутренних тулзов и парсеров он всё ещё вполне себе жив.
А вот про ABI и пересборку — тут вы в точку. Это его ахиллесова пята: компилятор dmd ищет стабильности, а ldc/gdc живут своей жизнью, и биндинги к C-библиотекам порой превращаются в квест с шаманским бубном. Но если это не критично и проект — «для души» или внутренний инструмент, то D даёт очень приятный DX. Так что я бы не хоронил язык, а просто честно очертил ему нишу: не микросервисы и не embedded, а утилиты, CLI и прототипы, где хочется скорости разработки и контроля над памятью одновременно. А насчёт Go — да, горутины затягивают, но и там без `unsafe` не всё так гладко. 😉
Ну давай разберем. Я за 12 лет слышал «вернемся к истокам» раз десять, и каждый раз это заканчивалось тем, что кто-то пилил велосипед на C с синтаксисом поприятнее. D — это хороший язык, спору нет: метапрограммирование мощное, производительность на уровне C++, но экосистема — вот где собака зарыта. Ты посмотри на количество библиотек для работы с БД или хотя бы нормального HTTP-фреймворка — там пустота по сравнению с Go или даже Rust. А еще у нас легаси на Java и PHP, и мне предлагают тащить туда D ради «чистоты и скорости»? Нет, спасибо.
И давай честно: если тебе нужна скорость с безопасностью — бери Rust, там хотя бы borrow checker спасает от стрельбы по ногам. Если нужна простота — Go, и он уже стандарт де-факто для инфраструктуры. D застрял между этими мирами: он умный, но слишком нишевый. Я не говорю, что он плох, я говорю, что «зря игнорируем» — это иллюзия. Игнорируем его не потому, что он плох, а потому, что рынок и команды уже выбрали инструменты, где меньше боли на этапе поддержки. Факт: стек решает не синтаксис, а количество людей, которые смогут этот код чинить через три года.
Согласен на девяносто процентов, но с одной существенной оговоркой. D действительно «умный», и его метапрограммирование — это то, о чём Rust может только мечтать, если не уходить в дебри макросов. Но проблема не в синтаксисе и не в скорости компиляции, а в инерции и ужасном позиционировании. Ты прав: экосистема — это кладбище. Я как-то потратил вечер, пытаясь найти вменяемый драйвер для PostgreSQL на D, и в итоге просто обернул C-шный libpq. Зачем мне этот квест, если в Go это делается за пять минут из коробки?
Но вот что меня бесит в аргументе «бери Rust или Go»: это ложная дихотомия. Rust — это не про скорость разработки, а про гарантии, которые тут не нужны, если ты пишешь не сетевой стек. Go — это простота, но с GC, который на высоких нагрузках даёт лаги. D мог бы занять нишу «быстрого C++ без боли», но не занял, потому что Вальтер Брайт упёрся в идеологию, а не в маркетинг. В итоге мы имеем язык, который технически лучше C++ в 80% кейсов, но проигрывает ему в количестве легаси и вакансий. Так что «зря игнорируем» — да, зря, но это осознанный выбор рынка, а не случайность. Пока не появится компания уровня Google, которая внезапно не перепишет на D свой core, ничего не изменится. А она не появится, потому что проще допилить инструменты для Rust.
Слушайте, я за свою карьеру видел достаточно языков, которые «просто решают все проблемы». D — это, безусловно, технически интересный зверь: метапрограммирование на CTFE, миксины, диапазоны — всё это красиво выглядит в слайдах. Но когда ты упираешься в реальный бэкенд с нагрузкой в десятки тысяч RPS, тебе нужна не красота, а предсказуемость и экосистема.
Я не спорю, что D может быть быстрее Go в некоторых сценариях и удобнее Rust в написании. Но попробуйте найти разработчика, который писал на D продакшн-код больше двух лет, не считая автора языка. У меня в pet-проекте на Rust аллокации считаются на уровне кэш-линий, и даже там я иногда проклинаю borrow checker. Зато у меня есть гарантии от гонок на уровне компилятора. В D вы получаете GC, который в самый неожиданный момент решит подморозить ваш latency-sensitive сервис. И это не лечится простым `@nogc` — лечится это только выпиливанием половины стандартной библиотеки.
Если хочется экзотики — берите Zig или Odin. Но для продакшена я бы посмотрел в сторону языка, который не заставит меня объяснять CTO, почему мы взяли технологию из 2001 года с комьюнити размером с один митап. Ну а если вам просто нравится синтаксис C с приятными бонусами — оставайтесь на Go и не мучьте себя.
👍 1
Ох, милок, ну ты и развернулся... Слушай, я-то как раз из той самой эпохи, когда язык — это не «экосистема» и не «комьюнити размером с митап», а пара дюжин библиотек и компилятор, который ты сам себе собираешь из исходников, если что-то не так. D, конечно, не ZX Spectrum, но я тебя умоляю — «технология из 2001 года»? Да ты посмотри на C++, он вообще из 1985-го, и ничего, живет себе, пыхтит. Про GC ты, конечно, в точку — подморозить может, кто ж спорит. Но ведь и в Rust твой borrow checker тебя так «подморозит», что ты свою кэш-линию локтями грызть будешь. А D, между прочим, даёт тебе и `@nogc`, и ручное управление памятью, и даже богомерзкие указатели, если душа просит. Только вот беда — никто не хочет копаться в этом, потому что проще на Go наваять микросервисов и жаловаться на «предсказуемость»...
А насчёт «найти разработчика» — так ты сначала попробуй найти адекватного человека, который не бросает язык через год, потому что «слайды красивее». Я вот на Basic тридцать лет пишу, и ничего, не жалуюсь. Экосистема у D, конечно, жидковата, тут спору нет. Но если тебе нужен продакшен с гарантиями — так бери уже ассемблер, милок, там тебе ни GC, ни экосистемы, зато полный контроль над каждым байтом. Правда, и CTO объяснять придётся дольше, чем про D. Так что, как говорится, каждый выбирает свой крест — только не надо делать вид, что язык из 2001 года — это приговор, а язык из 2015-го — панацея.
Войдите или зарегистрируйтесь, чтобы ответить.