LINUX.ORG.RU

Чисто технические причины НЕ любить Rust [holywar mode activated]

 , ,


3

9

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


Ответ на: комментарий от MyTrooName

Не передёргивай.

Первая фраза («Вот только такой .h содержит только интерфейс») — про .h, который идёт совместно с .o. А никак не про STL.

Miguel ★★★★★
()
Ответ на: комментарий от MyTrooName

Sigh.

В этой фразе подразумевались сигнатуры типов функций и переменных, этим файлом экспортируемых.

Miguel ★★★★★
()

Что-то я не пойму, легковесные потоки выбросили, изкоробочные футуры убогие чуть менее, чем полностью - как вообще предполагается писать нормальный асинхронный код в последней надежде человечества?

anonymous
()
Ответ на: комментарий от anonymous

как вообще предполагается писать нормальный асинхронный код в последней надежде человечества?

Не лишай человечество надежды - останься в Node.js.

tailgunner ★★★★★
()
Ответ на: комментарий от Miguel

2) AST дженерика запихивается прямо в скомпилированный объектный файл — чтобы можно было использовать с другим типом. Применительно к C++ — это как если бы .o содержал в себе полную копию .h.

применительно к С++, .h на темплейтах содержит в себе интерфейс вместе с реализацией, и я не вижу большой проблемы выкинуть .h, а реализацию отправить в .o

MyTrooName ★★★★★
()
Ответ на: комментарий от tailgunner

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

anonymous
()

Исключения в расте вводить собираются или уже есть они ? А то вродебы как были заявлены но похоже в 1.0 alpha толи випиляли толи есще не завезли ...

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

zaz ★★★★
()
Ответ на: комментарий от zaz

сключения в расте вводить собираются или уже есть они ?

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

А вообще чтото они его кардинально переделывают довольно регулярно

ну так только что в бету вошли. кардинально до 2.0 больше не будут

MyTrooName ★★★★★
()
Ответ на: комментарий от DarkEld3r

На них не смотрят те, кто привык лисповый код читать.

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

anonymous
()
Ответ на: комментарий от DarkEld3r

Если код отформатирован нормально, то они помогают его читать и всё. Ну а кашу из кода и на лиспе изобразить можно.

Разница в том, что в лиспе есть некоторый простой и четкий набор правил форматирования, по которым форматируется 99% кода. В случае запятых такого нет.

anonymous
()
Ответ на: комментарий от no-such-file

рубит тонны бабла

в смысле на ruby бабло делает?

rupert ★★★★★
()
Ответ на: комментарий от rupert

На всех известных мне линуксах точно работает.

У unix-оидов с давних пор под кроссплатформенностью понимается лишь способность их софта работать под разными версиями одного и того же unix-а...

Между тем существует и нормальное понятие кроссплатформенности, подразумевающее работоспособность под разными ОС и на разных аппаратных архитектурах.

eao197 ★★★★★
()
Ответ на: комментарий от cyanide_regime

Да мне не интересно мнение фанбоев ржавчины, пишущих на ней без месяца неделю (а пока только такие тут и возникают).

По моему, чтобы начинать писать на языке, не достигшем ещё даже версии 1.0, надо иметь определённое количество «увлечённости». Так что интересно было бы послушать как раз фанбоев, которые разочаровались в языке.

Ну и судя по гитхабу ozkriff начал писать два месяца назад. Не так уж мало.

Лично мне весьма нравятся некоторые «синтаксические фичи», ну и borrow checker. Про неприятные моменты тут тоже писал. Но «окончательное сравнение» делать не возьмусь.

DarkEld3r ★★★★★
()
Ответ на: комментарий от Miguel

Так и отлично. Когда надо — используют extern «C» и всё хорошо.

Дык, если у плюсов был бы переносимый ABI - разве это плохо?

DarkEld3r ★★★★★
()
Ответ на: комментарий от anonymous

Если ты пишешь на лиспе, то ты привык читать лисповый код.

Естественно. Об этом и пытался сказать. Пишу на С++ и никаких проблем с запятыми у меня нет - претензии на эту тему выглядят так же смешно как скобкофобия от лисп-хейтеров.

DarkEld3r ★★★★★
()
Ответ на: комментарий от anonymous

Разница в том, что в лиспе есть некоторый простой и четкий набор правил форматирования, по которым форматируется 99% кода. В случае запятых такого нет.

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

DarkEld3r ★★★★★
()
Ответ на: комментарий от MyTrooName

вроде, не собирались и не будут

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

ну так только что в бету вошли. кардинально до 2.0 больше не будут

$ equery l -i rust
 * Searching for rust ...
[IP-] [  ] dev-lang/rust-1.0.0_alpha2:1.0

Это у меня порты старые или он все же alpha пока ?

zaz ★★★★
()
Ответ на: комментарий от zaz

Это у меня порты старые или он все же alpha пока ?

Старые:

rustc -V
rustc 1.0.0-beta (9854143cb 2015-04-02) (built 2015-04-02)

DarkEld3r ★★★★★
()
Ответ на: комментарий от DarkEld3r

Ну и судя по гитхабу ozkriff начал писать два месяца назад. Не так уж мало.

Два месяца — это вообще ни о чем.

eao197 ★★★★★
()
Ответ на: комментарий от DarkEld3r

Неплохо (ну, если закрыть глаза на то, что плюсы — это абсолютное зло). Но вот если бы в этот ABI пролезали детали реализации (как в Itanium-ной реализации, см. выше по треду), то было бы гораздо хуже, чем сейчас.

Miguel ★★★★★
()
Ответ на: комментарий от MyTrooName

нет возможности композиции, т.е. по сути все, что можно сделать с растовским фьючером - это заблокироваться на нем до завершения операции

anonymous
()
Ответ на: комментарий от eao197

Два месяца — это вообще ни о чем.

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

Да и вообще, больше важен размер проекта, чем его «древность». Можно делать по коммиту в неделю, а можно активно развивать.

DarkEld3r ★★★★★
()
Ответ на: комментарий от Miguel

Но вот если бы в этот ABI пролезали детали реализации (как в Itanium-ной реализации, см. выше по треду), то было бы гораздо хуже, чем сейчас.

Почему?

DarkEld3r ★★★★★
()
Ответ на: комментарий от zaz

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

компилятор заставит чекать. man Result. ну и есть сахар на макросах (man try!), который немного упрощает. хотя проблема, конечно, остается, но в рамках концепции раста исключения - плохое решение.

порты старые

по видимому. вообще, до беты было принято на nightly сидеть, а не из реп дистрибутива таскать

MyTrooName ★★★★★
()
Ответ на: комментарий от DarkEld3r

Гм. Потому что это детали реализации.

Miguel ★★★★★
()
Ответ на: комментарий от DarkEld3r

Да и вообще, больше важен размер проекта, чем его «древность». Можно делать по коммиту в неделю, а можно активно развивать.

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

По времени работы с языком. Бытует мнение, что на нормальное освоение языка, т.е. на то, чтобы на языке как на «родном», используя присущие языку идиомы и приемы, нужно от 6 до 12 месяцев плотной работы. До этого времени на новом языке пишут как на предшественнике, только с другим синтаксисом и набором библиотек.

eao197 ★★★★★
()
Ответ на: комментарий от loz

Странные у тебя шутки. Это даже однозначно распарсить нельзя)

ozkriff
()
Ответ на: комментарий от DarkEld3r

Да потому что не хочется иметь очередной буст или хуже того - собственную библиотечку utils/common, которая кочует из проекта в проект. Ну это при условии, что оно востребовано будет.

Я не очень понял, с чего новый «буст или utils/common должны возникнуть» и почему «содержимое будет копипастится». По сложности подключения - сам знаешь, всего-то надо в cargo.toml в секцию [dependencies] дописать wrapping_macros = "*". Про «непонятное будущее» - не верится, что популярные библиотеки без поддержки останутся.

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

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

Конкретно этот макрос совсем не факт что так уж много кому реально нужен - разве много кода на переполнение завязано?

ozkriff
()
Ответ на: комментарий от eao197

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

Имхо, это довольно сильно зависит от того насколько язык заставляет «думать по новому». Раст, конечно, не хаскель какой-нибудь, но и писать совсем как на С++ не получится.

DarkEld3r ★★★★★
()

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

Тред читать лень, этот зеленый джентльмен уже выложил свой мифический вброс? Если выложит — кастаните плз, если нет — не беспокойте, просто перечеркните ему, пожалуйста, ник. Заранее спасибо.

t184256 ★★★★★
()
Ответ на: комментарий от DarkEld3r

Имхо, это довольно сильно зависит от того насколько язык заставляет «думать по новому». Раст, конечно, не хаскель какой-нибудь, но и писать совсем как на С++ не получится.

A language that doesn't affect the way you think about programming, is not worth knowing.
-- Alan Perlis

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

Либо не дает. Но тогда нафиг он нужен?

eao197 ★★★★★
()
Ответ на: комментарий от t184256

Вот это да. Платным подписчикам?

У него свой блог, он регулярно там пишет. Бывает, что просишь о чем-то рассказать подробнее, он вскоре выкладывает подробный ответ отдельным интересным постом. За время общения с ТС он ни разу на меня лично впечатления LOR-овского тро-ло-ло не произвел. Ну тут уж каждый пусть сам для себя решает.

PS. Официальный релиз Rust 1.0 вроде как назначен на май. Если тормозилловцы опять что-нибудь просрут, то это будет ни чем иным, как еще одной причиной не изучать Rust ;)

eao197 ★★★★★
()
Последнее исправление: eao197 (всего исправлений: 2)
Ответ на: комментарий от ozkriff

Я не очень понял, с чего новый «буст или utils/common должны возникнуть» и почему «содержимое будет копипастится».

Да хотя бы потому, что ради макросов/функций такого уровня библиотеку тащить не особо хочется. Проще скопипастить или самому написать. А если оно в стандарте или в популярной библиотеке, которую и так использовать будешь, то этого делать не придётся.

Но я так понял, что атрибут всё-таки будет в стандарте?

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

Честно говоря, не понимаю чем «большая стандартная библиотека» плоха.

DarkEld3r ★★★★★
()
Ответ на: комментарий от eao197

он ни разу на меня лично впечатления LOR-овского тро-ло-ло не произвел.

Так блогом он, в том числе, «пиарит себя». А прийти на другой ресурс и нагадить там - значит нормально? Пообещать список и развязать дискуссию, а потом сбежать я иначе назвать не могу. Готов спорить, что итоговый список будет творческим пересказом содержимого темы. Собственно, по ссылке там очередной бред про итераторы.

Если тормозилловцы опять что-нибудь просрут, то это будет ни чем иным, как еще одной причиной не изучать Rust ;)

Глупости. Уж лучше исправить всё до релиза, чем выпустить сырую версию ради того, чтобы успеть к дате.

DarkEld3r ★★★★★
()
Последнее исправление: DarkEld3r (всего исправлений: 1)
Ответ на: комментарий от anonymous

Жизненный цикл любой новости о ЯП на ЛОРе.

  • Публикуется новость о языке программирования;
  • (1 стр.) Набегают анонимусы, охотники за шкворцом, неосиляторы и просто мимокрокодилы с криками «нинужно», «а зачем X, когда есть Y», «чем это лучше Z» и т.п.;
  • (2-4 стр.) Просыпаются компетентные в теме ЛОРовцы и обсуждают тему;­
  • (5-10 стр.) Набегают ёбн­­у­тые лиспофанбои и скатывают тему в лиспосрач;
  • (10-15 стр.) Лиспофаги озалуплены, общими усилиями адекватных регистрантов и анонимусов;
  • (15- стр.) Просыпается quasimoto и начинает обсуждать сам с собой монады, коммутативные диаграммы, стрелки, 2-стрелки, 3-стрелки, декартово замкнутые категории, аппликативные функторы, анаморфизмы, катаморфизмы, эпиморфизмы, параморфизмы, моноиды, полугруппы, когомологии и топосы Гротендика.
anonymous
()
Ответ на: комментарий от DarkEld3r

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

Не мне быть адвокатом asfikon-а. Могу лишь сказать за себя: у меня нет оснований считать, что у человека не было списка, про который он говорил и что этот список не будет обнародован. Но я с asfikon-ом общался и вне LOR-а. Так что мое мнение базируется не на одной конкретной LOR-овской теме.

Что до самой идеи такого списка, то лично мне она кажется крайне странной. Любой ЯП — это совокупность каких-то идей, которые авторы считают важными и нужными (насколько удачными — это отдельный вопрос, т.к. тут не все может определяться желаниями авторов). Соответственно, технические претензии к возможностям языка — это либо непонимание целей авторов языка, либо же попытки притащить язык в несвойственную для него область. Например, низкоуровневость C/C++ — это большое достоинство для систем реального времени, но огромный недостаток для экспертных систем. С другой стороны — возможности записи логических правил на Prolog-е — это большой плюс для написания экспертной системы, но нифига не достоинство в нише высокопроизводительных видеоконвертеров.

Так что поиск фатальных технических недостатков в языке лишен смысла. Можно искать моменты, которые можно было бы улучшить или сделать удобнее. Но это не будет что-то принципиальное, имхо.

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

eao197 ★★★★★
()
Ответ на: комментарий от anonymous

Ну что, какой вердикт вынесли уважаемые лоровцы?

«годен к нестроевой службе»

rupert ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.