четверг, 11 июля 2019 г.

[prog.flame] Предлагаю новый слоган для D: "Fast as C++, safe as Rust, easy as Java"

Намедни в LOR-овском срачике сформулировал свое впечатление от наблюдений за тем, кто, как и откуда переходит на Rust. На мой взгляд, в Rust идут люди, которые всю жизнь программировали на безопасных языках с виртуальной машиной. Ну там Java, Python, Ruby, JavaScript, Erlang, Clojure и т.д. А так же C++ники, которые толком C++ не освоили, а уж о том, что такое современный C++, вообще не имеют никакого понятия.

А потом довелось прочитать серию постов небезызвестного своими "плачами Ярославны" НикиТонского: "С высоты", "С высоты-2" и "С высоты-3". И еще более утвердился в том, что мои наблюдения более-менее коррелируют с действительностью.

Ну реально, как-то незаметно выросло целое поколение (а может уже и не одно), которое не застало медленных компьютеров (действительно медленных, частота процессоров у которых исчислялась даже не мегагерцами). Которые всю жизнь программировали в безопасных средах не только убирающих за тобой мусор, но еще и подтирающих сопли. И у которых рвет шаблон от осознания, что реализация одного и того же алгоритма, но на разных языках программирования, может отличаться в производительности в разы, а то и на порядок. Вот на ровном месте, просто переписали код с Clojure на Rust и бах! В 20 (прописью: в двадцать) раз быстрее.

Это ж, оказывается, за окном есть какой-то другой дивный мир, в котором программы могут не жрать память гигабайтами и не тормозить на гигагерцовых процессорах. Ахринеть, дайте два!

Но ёлки, мы же не можем взять какой-нибудь C++ или Ada, где ты сам за все в ответе, где огромный легаси и странные решения, уходящие своими корнями куда-то в глубину мрачного ХХ-ого века, какие-то ISO-шные стандарты и разные реализации этих самых стандартов, где нет батареек и готовых репозиториев, из которых все нужное автоматически подтягивается по щелчку, где этот ваш богомерзкий ООП во все поля, а столь любимый хипстерами ФП представлен в какой-то совсем уж извращенной форме...

Нет, весь этот хардкор не для нас, таких модных и молодежных. Кто-то же должен и мусор за нами собирать, и сопли наши подтирать. Посему Rust -- вот выбор настоящего миллениала. Ведь если ты последние 5 лет топил за Clojure, а сегодня упоролся древним C++, то тебя не поймут. Да и ты сам себе этого не простишь. А вот если возьмешься за современный Rust, то это же другое дело.

ИМХО, все это надрачивание на Rust имеет ту же самую природу, как и (в прошлом) неожиданный для меня успех языка Go. В современных условиях тормознутые языки с жирными рантаймами оказывают прямое влияние на стоимость владения софтом. Поскольку если для решения бизнес-задач нужно 1000 серверов, то это как-то заметно дороже, чем если бы требовалось всего 100 серверов. И сильно дороже, чем если бы требовалось всего 10 серверов. Посему все те достоинства Java/.NET-а, которые были актуальны в конце 1990-х и начале 2000-х, сейчас уже становятся мало кому нужным гандикапом. Если задачу можно решить на Go c бинарником в 10MiB, вместо аналогичного решения на Java, в котором один только JRE будет раза в три-четыре "тяжелее", то решать ее будут на Go. Или на Rust-е, если при том же самом "весе" оно будет еще и раза в 1.5 шустрее работать.

Но вот что мне сложно понять, так это то, почему хайп возник и раздувается вокруг Rust-а? Ведь, как по мне, так Rust ну совсем не замена языкам для прикладных задач (вроде Java, Ruby, Python, JavaScript и т.д.). Вот совсем. Ибо если на языке программирования нужно изрядно потрахаться чтобы самому, с нуля, с начальными познаниями в языке, сделать простой двусвязный список, то это просто приговор. Ну не может такой язык использоваться широко. Ну потому, что хороших и любящих сложные задачи программистов подавляющее меньшинство.

И вместе с тем мне сложно понять, почему этом фоне не взлетает D. Ведь как замена условным Java-ам и C#-ам он гораздо лучше, чем Rust. Один GC и привычный ООП чего стоит. Плюс реальная иммутабельность и возможность баловаться с ФП сколько влезет (а АлгТД и паттерн-матчинг могут и подвезти со временем, ведь развитие D не связано с таким количеством формальностей, как в том же C++).

Полагаю, одна из причин в том, что авторы D в очередной раз профукали момент. Тогда, когда нужно было кричать, что D -- это лучшая Java для современного мира, чем сама Java, и более мощный Go, чем Go когда-либо сможет стать (что, вероятно, так и будет), Брайт и Ко двинулись совсем в другом направлении: какой-то невнятный betterC, который хер знает кому всрался. Уж простите мне мой французский.

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

Для этих целей мне даже не жалко подарить D-сообществу соответствующий моменту слоган: "Fast as C++, safe as Rust, easy as Java".

PS. А вообще, думается, самое точное описание причин хайпа вокруг Rust-а было мной сделано в начале 2019 ;)

10 комментариев:

Сергей Скороходов комментирует...

Евгений, Вы не правы, в Вас говорит обида. У меня было такое по поводу победы джавы, давно. Прошло, теперь стесняюсь.

eao197 комментирует...

@Сергей Скороходов
Я сам не знаю, что говорит больше: обида, злость, усталость или извращенное чувство юмора. Тут всего намешано.

Алексей комментирует...

Мне тоже до раста очень нравился D, после С++ как глоток свежего воздуха, все эти итераторы, шаблоны, не такие упоротые как в с++ но при этом более мощные, CTFE. Но у D нет киллер фичи, и я вот недавно подумал что если бы в D запилили такой же по эффективности и простоте использования механизм горутин, то это был бы чуть ли не идеальный язык прикладноно программирования. Просто на го очень легко писать какие нибудь сетевые вещи, для которых он и создавался. Но чуть тебе надо что-то посложнее чем заспавнить десяток горутин и ты утыкаешься в отсутствие тех же дженериков, плюс есть возможность отстрелить себе ногу из-за отсутствия синхронизации. А в ди это все есть, но нет инструмента чтобы за пару вечеров написать сервачок который держит десяток тысяч соединений и хорошо себя чувствует.

eao197 комментирует...

@Алексей
А как же vibe.d? Он же, вроде, чуть ли не главный флагман в D сообществе.

Dmitry Popov комментирует...

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

Авторы реально профукали очень много, в маркетинге они откровенно слабы (и осознают это), и в сочетании с другими факторами (недостаточно очевидное отличие от страшного С++, проблемный GC, отсутствие крупного бэкера, отсутствие фокуса и киллер-аппы...) получилось как получилось. Язык оказался секретным оружием нескольких маргинальных компаний и игрушкой для кучки энтузиастов.

Для betterC как ни странно есть ниша, недаром появляются всякие недорасты вроде Zig, Odin, V, Kit и пр. В принципе, их всех дивный betterC с легкостью покрывает, но т.к. это очередная недоделанная фича языка, который сплошь состоит из груды недоделанных фич... В общем, adoption rate предсказуемый.

eao197 комментирует...

@Dmitry Popov:

> Язык оказался секретным оружием нескольких маргинальных компаний и игрушкой для кучки энтузиастов.

Самое любопытное, что в последние недели, размышляя о том, куда катится C++, насколько сегментировано C++ сообщество, сложности проталкивания собственных C++ных лисапедов, хайпа вокруг Rust-а и пр., я все чаще ловлю себя на мысли, что с удовольствием бы попрограммировал на D в каком-нибудь небольшом проекте... Не смотря на все проблемы D.

Эх, мечты-мечты. :)))

Dmitry Popov комментирует...

Насчет Go, имхо, дело совсем не в размере бинарников, сейчас все равно эпоха докера, когда образы по 700 мегов туда-сюда летают после каждого билда, никого это не заботит. Просто сам язык еще проще и дубовее, не надо тратить годы на изучение Спринга и подобных тяжелых фреймворков. Простые и дубовые очень легко взлетают и легко приживаются, на них легко нанимать или учить народ. Всем удобно, кроме страдающих интеллектуалов.

> почему хайп возник и раздувается вокруг Rust-а?

У него есть киллер-фича, которая теоретически многих привлекает. Поэтому хайпа хватит надолго. Как раньше вокруг хаскеля был хайп, потом поутих, надоел. Ну и ваш январский пост очень точен.

> Ну не может такой язык использоваться широко.

А он и не используется широко, и не будет, ибо сложно это на практике. Не надо путать хайп и теоретический интерес ("какой язык вам нравится, в принципе?" "какой язык вы хотели бы изучить в этом году?") с реальным применением на деле ("на каком языке вы написали реальный проект?"). Тут коэффициент конверсии очень невысок. Как не стал массовым Хаскель, не стал D, не станет и Раст. Вот если появится что-то дубовее Го, то легко станет.

PS. Не надо Clojure через s писать, пожалуйста.

eao197 комментирует...

> Не надо Clojure через s писать, пожалуйста.

Спасибо, поправил, вроде бы.

XX комментирует...

Rust - вполне себе замена Java в будущем, плюс он, думаю, откусит львиную долю "пирога" у C/C++. Где нужно писать прикладной код, но требовательный к производительности и безопасности - хорошо подходит Rust. А это почти весь Ынтерпрайз, да и остальной софт тоже :) Так что переход на Rust из Java - вполне себе объясним (сам так перешел).

eao197 комментирует...

@XX:
> Rust - вполне себе замена Java в будущем

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