четверг, 19 ноября 2020 г.

[prog.flame] В этих наших Интернетиках уже начали закапывать Rust?

Как я могу видеть, новость о том, что экспериментальный браузерный движок Servo, который долгое время был флагманской разработкой на Rust-е, передан под крыло Linux Foundation, вызвала разговоры о том, что к Rust-у постепенно приближается северный пушной зверек. Типа сперва Mozilla выгнала команду разработчиков Rust-а на мороз, теперь вот Servo отправили в могильник. И светлое будущее, о котором так много говорили растофанаты, неизбежно сменяется унылым настоящим с беспросветными перспективами...

Мое отношение к ситуации вокруг Rust-а после всего, что происходит с Mozilla, можно выразить известным афоризмом: Rust рискует простудится на наших похоронах.

Или, другими словами, Rust скорее всего переживет многих, кто ждет его смерти. Как это уже случилось с COBOL-ом и Fortran-ом.

Да, Rust лишается хорошей крыши. И вряд ли обретет другую такую же.

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

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

Так что если со временем популярность и распространенность Rust-а окажется на уровне нынешней популярности и распространенности Ruby, то Rust спокойно проживет еще не одно десятилетие.


Есть несколько моментов, которые лично меня заставляют думать о том, что будущее у Rust-а все-таки не такое радужное, как многим рисуется (хотя и быстрая смерть Rust-у не грозит).

Во-первых, это величина хайпа, который все еще сопровождает Rust. Я ничего подобного не могу припомнить со времен пришествия Java. Но там-то были миллионы долларов, целенаправлено вложенных Sun-ом в маркетинг. В случае же с Rust-ом хайп генерируют восторженные пользователи. И это странно. Ну не может быть у Rust-а такой армии активно использующих его программистов. Большая часть раздувателей хайпа -- это просто сочувствующие, не написавшие на Rust-е ничего сложнее очередного HelloWorld-а.

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

Во-вторых, это ниша применения Rust-а.

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

Поэтому полагаю, что для многих Rust является отдушиной после мира Java, C#, Python-а, JavaScript-а и Ruby. Которые либо не слишком быстрые, либо слишком тяжелые (в плане run-time). И Rust у этих людей вызывает восторг потому, что пока что не видно хорошего, простого и удобного языка с GC, который бы компилировался в нативный код и не требовал бы таскать за собой многомегабайтные JVM/.NET.

Таким языком мог бы в свое время стать D. Но не стал.

Зато таким становится Go. Хотя Go все-таки пока слишком убог и не нравится тем, кто привык к традиционному ООП, полноценным генерикам (шаблонам) и синтаксическому сахару.

В общем, думаю, что если бы на данный момент были полноценные и кросс-платформенные условные JavaNative, C# Native или KotlinNative, то и интерес к Rust-у со стороны нынешних JavaScript-еров и Python-истов был бы гораздо меньше.

А вообще, вот этот пост почти что двухлетней давности еще не утратил своей актуальности ;)

24 комментария:

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

Раст это очень неплохая попытка сделать наконец замену С/C++, это нельзя не приветствовать - но запросто может оказаться что эта попытка не взлетит. Лично меня от активного использования раста останавливает его скорость компиляции - и судя по тому что они никак это не могут победить - это проблема глубоко в дизайне языка. А идея с borrow checker неплоха, если взлетит - было бы хорошо, хотелось бы иметь в руках современный язык хотя бы для embedded development

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

@Left
Мне кажется, что Rust стал успешным экспериментом не только из-за borrow checker-а и внедрения удобных АлгТД и паттерн-матчинга в обычный ЯП. Но из-за того, что показал, насколько хорошо в мире C и C++ иметь нечто подобное Cargo.

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

Про полноценный JavaNative: мне кажется, Женя, что ты забыл пару строчек притики Graal-я вставить для раскрытия темы

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

@goncharenko
Я просто про Graal ничего не знаю, поэтому и сказать ничего не могу.

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

Думаю, у Раста есть шанс стать (сюрприз, сюрприз) языком для веб бэкенда. Небольшой правда. Я вижу это по наворачиванию функциональщины на сомнительные языки типа java. То есть есть неглупые люди, которые пишут большие проекты, и ограниченность языка их начинает доставать.
Я не согласен по поводу GC. Введение GC в язык это такая же заплатка, как слабая типизация. Просто по поводу типизации уже есть большая теоретическая база, а в управлении ресурсами - конь не валялся. И Растовский подход может быть первым шагом, но не окончательным решением.

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

@sergegers

Не думаю, что GC -- это заплатка. Это совсем другой подход к управлению памятью, который значительно облегчает жизнь разработчику. Что как раз и требуется за пределами той относительно узкой ниши, в которой живут и будут жить C, C++, Ada. И для которой позиционировался Rust.

Для управления ресурсами в языках с GC можно другие подходы применять. Как using в C# или scope(exit) в D.

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

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

Так вот, на Rust довольно быстро привыкаешь мыслить управление ресурсами в стиле владения-заимствования, и не только это относится к оперативной памяти. И, когда уже привык, разницы между программированием на Rust и на каком-нибудь промышленном языке с GC (типа Java) уже практически не ощущешь. А вот то, что Rust позволяет в type-driven программирование - ощущается хорошо.

Go будет еще долгое время сильно популярнее Rust, потому что программисты из JavaScript, PHP, Python и пр. идут, прежде всего в него, так как он лучше подходит на роль первого шага в сторону статически типизированных языков. Но что дальше? Go очень слаб в плане языковых возможностей. Поэтому дальше самый адекватный путь - это в Rust.

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

@XX

> Я использую Rust профессионально уже несколько лет подряд (в основном для веб-бекэнда и утилит) и всем доволен.

А как так вышло? Был выбран новый инструмент на текущей работе или же переход на Rust произошел при смене работы?

> Но что дальше? Go очень слаб в плане языковых возможностей. Поэтому дальше самый адекватный путь - это в Rust.

У меня на этот счет другая точка зрения: Go продемонстрировал, что в нынешних условиях сложные языки для массового использования не подходят. Так что скорее появится что-то типа Java Native или какой-то дружественный для посредственных разработчиков D.

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

Я из числа сочувствующих, за развитием Rust наблюдаю с 2014 года.

Чтобы тащить его сейчас в проект — нужно уметь организовать работу удалённых сотрудников, поскольку собрать достаточно растаманов в одном месте — это та ещё задачка. Где брать rust-джунов вообще непонятно, у гофера вот с этим проблем нет. Но это только вопрос популярности, который у меня не вызывает беспокойства. Да и текущий год сделал многое, чтобы удалённая работа стала популярнее.

[ИМХО]
Популярность golang объяснялась низким порогом входа, платой за который стала слабая выразительность — думаю, брать гофер для формошлёпства ни у кого не поднимется рука. У Rust с формошлёпством проблем не будет, выразительность там на уровне. В итоге, go займёт свою нишу (утилиты, коммуникация?), а Rust будет выбором для широкого ряда задач.

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

В общем, Rust "медленно спускается с горы", как в том анекдоте про быков.

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

@eao197

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

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

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

Кстати, хотел еще высказаться насчет хайпа вокруг Rust: а где этот хайп? Я вижу только то, что под любой новостью о Rust на Opennet начинается срач, потому что набегают хейтеры. Растоманы при этом, в своем большинстве, отмалчиваются. Статьи, связанные с Rust на Хабре публикуются довольно редко и только единицы из них собирают большое число комментариев. На YouTube - вообще праздник, если что-то стоящее внимания появляется про Rust. В чем выражается хайп, если он есть? И как его мерить? Мне вот кажется наоборот, что о Rust говорят мало и статей мало пишут, а он достоин большего обсуждения и использования.

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

@Nikita

> Где брать rust-джунов вообще непонятно

В Телеграм-чатике @rust_jobs толпа джунов плачет, что их никуда не берут, всем нужны сеньоры.

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

@XX

> В такой формулировке не понятна причина этого. Я все же думаю, что причина - это переползание со скриптовых языков в компилируемые

Грубо говоря, народ мельчает, а объем сложных задач, для решения которых требуется и высокая квалификация, и мощный инструмент, в относительных числах снижается (имхо). Это где-то до середины 1990-х, может быть до начала 2000-х было понимание, что применение более сложного, но мощного инструмента дает +100500 и к продуктивности, и к качеству. А потом и готовых библиотек/фреймворков прибавилось, и мощность техники увеличилась. И туча людей с никакой квалификацией, которых в начале 1990-х к программированию вообще не подпустили, стала успешно справляться с рутиной.

> С другой стороны, я знаю людей, которые наелись Go потому, что его простота оказалась не способной справляться со сложными концепциями в коде, и вся эта сложность представляется в итоге сильно запутанной лапшой.

А это тоже самое, что в свое время было с VisualBasic-ом и первыми версиями Java. Программирование на них было похоже на программирование на Go сейчас. И ничего, народ толпами начал перебегать с Pascal и C++.

> Кстати, хотел еще высказаться насчет хайпа вокруг Rust: а где этот хайп?

Ну как-то же язык умудряется становится самым любимым по версии StackOverflow, при том, что каких-то громкий и переворачивающих мир (как это было с Ruby-on-Rails) на нем до сих пор нет.

Да и это сейчас на том же reddit-е в /r/cpp поспокойнее стало за счет модераторов. А раньше туда регулярно растоманы прибегали рассказать C++никам как нужно правильно жить :)

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

@XX

> В Телеграм-чатике @rust_jobs толпа джунов плачет, что их никуда не берут, всем нужны сеньоры.

Пробежал глазами. Там плачут не столько джуны, сколько ребята, которые вообще на пороге карьеры стоят. Я же говорю про уверенных джунов, которым формошлёпство доверить можно =]

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

@Nikita:

А какой смысл от формошлепства на Rust-е?

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

Может там PWA на WASM, а для этого Rust - хороший выбор.

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

> А раньше туда регулярно растоманы прибегали рассказать C++никам как нужно правильно жить :)

Интересно, я туда ни разу не заглядывал. А точно туда прибегал кто-то извне, или просто те же плюсовики, кто распробовал Rust, делились впечатлениями?

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

@XX

> А точно туда прибегал кто-то извне, или просто те же плюсовики, кто распробовал Rust, делились впечатлениями?

По разному. Но тут же такое дело: если ты распробовал Rust и у тебя есть возможность уйти от C++ и делать все на Rust-е, то ради Бога, бери и делай. Но твои восторги не помогут если человек продолжает жить с C++. Вот, скажем, я продолжаю пилить SObjectizer на C++. Если мне кто-нибудь начнет рассказывать, насколько крут Rust, то мне это не поможет сделать SObjectizer лучше. И не облегчит мне применение SObjectizer-а в C++ных разработках.

Да, я могу представить, что если отказаться от C++, то можно будет делать тоже самое, но по другому. И не хуже. Может быть даже лучше. Но для этого нужно все начать с нуля.

Не все это могут себе позволить. А раз так, то какой смысл этим людям доказывать свои убеждения в том, что Rust тебе лично хорошо зашел?

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

@eao197

В том смысле, какие преимущества он даёт при формошлёпстве, по сравнению с языком X? Это зависит от выбранного X.

Не стоит ведь уточнять, что под формошлёпством я подразумеваю любые рутинные задачи, а не конкретно GUI/формочки?

В моих глазах, Rust выглядит более успешной формой того, чем пытается быть Scala. А на Scala формошлёпствовать совсем не зазорно, вроде бы.

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

С другой стороны, есть C++ разработчики, которые так и узнали про Rust и выбрали его для своих новых проектов. Я вот тоже сначала свои на C++ писал и Java, но от этих языков не зависел жестко.

Здесь сработало то, что многие евангелисты позиционировали Rust как замену C++, и естественно, плюсовикам это не понравилось, что их стали склонять на другую сторону. Много шума поднялось именно из-за этого конфликта. Но сейчас ситуация другая: активность евангелистов сильно поубавилась, а вот хейта все прибавляется. И это, я думаю, уже не реакция, а свидетельство перехода во вторую фазу принятия неизбежного.

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

@Nikita:

> Это зависит от выбранного X.

Ну вот при наличии Java, C#, Go, Kotlin, Swift, какой смысл формошлепить на Rust-е? Там же нет жестких требований к быстродействию и ресурсоемкости, а вот не очень квалифицированной рабочей силы как раз с избытком.

> А на Scala формошлёпствовать совсем не зазорно, вроде бы.

Вроде бы лишь немногим лучше, чем на Haskell ;)
Ну т.к. Scala не самый лучший язык для применения широкими массами.

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

@eao197

> Там же нет жестких требований к быстродействию и ресурсоемкости, а вот не очень квалифицированной рабочей силы как раз с избытком.

Сам не вижу ничего смертельного, чтобы формошлёпить на чём-то другом.

Поинт-то изначально был в том, что на гофере формошлёпить утомительнее, чем на Rust (когда язык уже знаком) — а дальше слово привязалось. Так что ограничения по ресурсам вполне могут быть, я же под формошлепством написание несложного рутинного кода здесь подразумеваю, безотносительно контекста.

Кроме того, для Rust не нужно быть семи пядей во лбу. Компилятор очень дружелюбный (не всегда, конечно), порядок с документацией по базовым вопросам — сдаётся мне, что с полного нуля воткнуться в Rust будет не сильно сложнее, чем в Java. Это мы просто успели привыкнуть к другим концепциям, поэтому некоторый ступор испытываем.

А так, если в проекте есть задачи, которым хорошо подходит Rust — то можно на нём же формошлёпить ради однородности стэка технологий.


> Ну т.к. Scala не самый лучший язык для применения широкими массами

Так-то, широким массам скриптовые языки вполне подходят. Да и мне обычно тоже =]

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

Haskell — это вот как раз для ситхов, да. А Scala вполне можно использовать как подслащенную Java, слаще чем Kotlin. Если бы Scala могла сносно работать на Android — то была бы сейчас значительно популярнее. Но поезд, увы, ушёл.

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

@Nikita:

> Но сам язык очень даже приятный, при условии, что ограничения не мешают, а в команду не нанимают функциональных ситхов.

Точно такая же проблема у C++. И она не решается.

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

@Nikita

Тут вот на RSDN на удивление толковая тема про Scala и ее перспективы всплыла: http://rsdn.org/forum/philosophy/7890925.flat (пока еще не засрали почитать интересно).

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

@eao197

Ого, как по заказу, спасибо за ссылку.

Еще и dotty к концу года зарелизить обещают, оказывается. Посмотрел в репу — полным ходом пилят.

В обсуждении впечатлил товарищ из банковского сектора, который Python и Scala сравнивал. К слову, Python — один из основных моих инструментов, очень тепло отношусь, однако представить не могу, какой чёрт дёргает людей использовать его там, где цена ошибки нивелирует весь профит от скорости разработки. Анархисты, не иначе, борцы с Системой (типов).