LINUX.ORG.RU

Сложности сопровождения rust

 


0

5

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

У меня возник вопрос к опытным кодерам - о какой «сложности» они говорят? Может быть код становится сложнее поддерживать или просто у них синдром утёнка, или какие еще проблемы есть в сопровождение раста при длительной разработке?

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

А научиться писать можно даже на Пердле, если есть желание

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

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

На сколько помню при начале разработки чуть ли не главный лозунг был «сделаем компилируемый лисп с синтаксисом с/с++». Плюс много выпиленных физических и система макросов из листа заимствовались напрямую. Читал в каком то интервью где-то на стадии 0.1х. Пруф, к сожалению, не найду

small-entropy
()
Ответ на: комментарий от Siborgium

Лучше сторонний кодогенератор. Чтобы не мелочиться. Это кстати очень >показательно: раст настолько беспомощен, что самые элементарные вещи в нем >приходится делать макросами (суть сторонней кодогенерацией).

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

Макросы кратно увеличивают время компиляции, не кешируются,

ну так они новый код делают, которой тоже надо компилировать как и любой другой дополнительный код, в чём и смысл макросов

исполняют произвольный код на расте в ходе исполнения,

дак это в плюс вроде, значит дают больше возможностей, плюсовики же вон гордятся тьюринг полнотой шаблонов

Какие «такие»? Сишные макросы убоги, но какое отношения это имеет к >метапрограммированию? Хоть трех.

у плюсов и одних нормальных нету

Кого это волнует? Откуда взята статистика? Кто сказал, как правильно, а как >неправильно?

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

Почему из-за того, что кто-то может использовать что-то «неправильно», приседать с макросами должны все?

не приседать а использовать по прямому назначению, это цель их существования by design, в отличие от шаблонной магии

zurg
()
Последнее исправление: zurg (всего исправлений: 2)

Обычно причина другая. Называется «решение проблем инструментом Х которых... не было пока не появился инструмент Х» (формальную доказуху надежности он не решает примерно... никак, а внешними средствами верифаить код можно было и до него... примерно всем, кому не лень (и кто и раньше умел доказывать теоремы в рамках теории надежности)). И ноль новых знаний (только новый виток хайпа от детишек, которые теоремы доказывать не будут примерно никогда, а надеются что «инструмент Х просто исправит все», т.е. системные ошибки их ДНК проектирования).

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

Ага, Линус Торвальдс не даст соврать. Правда С++ на тот момент существовал как >С с классами, и его не тащила толпа фанбоев с корпорацией за спиной и на волне >хайпа.

Что до «вполне себе» системного языка – на этот позор в его загончике можно >полюбоваться по ссылке

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

Но про несистемность С++ нужно побольше рассказать.

я про си говорил, плюсы да системны, у них есть продвинутая типизация, но так же есть и сишная часть с ХЗ типизацией она же «что есть что нет» типизация; по идее, у системного языка должна быть максимально строгая и умная( достаточно гибкая) система типов: ада вот удовлетворяет этому, раст, обероны ещё вроде есть, плюсы с натяжкой, а вот си тут каким боком.

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

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

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

раст в ядре

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

zent
()
Последнее исправление: zent (всего исправлений: 1)

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

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

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

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

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

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

У системных плюсов есть очень большая проблема: людей которые способны писать на плюсах корректно работающий код - исчезающе мало

это проблема не языка, а того что по теме «как писать на плюсах» нет ни одной нормальной книги и ни одной нормальной статьи. Особенно бесят всякие умники, которые начитаются у какого-нибудь Страуструпа про полиморфизмы с виртуальными функциями, и начинают тебя этому учить.

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

А ты не задавался вопросом «А почему такой статьи/книжки нет?». Подумай на досуге. Судя по тому, что ты там дальше написал, C++ ты даже и близко не знаешь, хотя и думаешь что.

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

https://pvs-studio.com/en/blog/posts/0324/

Лол. Чего еще ожидать от продавцов анализатора для C++? Это их дойная корова, а Rust им мешает. Конечно же они будут увещевать что C++ «это надолго».

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

Интересный взгляд на вещи )

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

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

У него и своя диагностика компилятора лучше чем у любого компилятора C++ и линтер в комплекте хороший.

А что до анализатора от PVS у компиляторов C++ (включая от M$) этого не было? Я вот отчетливо помню что было. Но тем не менее PVS каким-то образом появился и занял серьезную нишу.

Речь же всегда не про то «что есть вообще», а про «лучшее из того что есть». А лучшее сейчас это PVS.

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

Ну что-то можно придумать всегда, какие-то экзотические сценарии, но кто за это платить будет? Все интересные проверки уже давно сделаны. Borrow checker вообще целые классы ошибок свёл на нет.

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

Эм не все так просто.

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

Как видишь много цифр, цифры большие и много красненького, что для вывода анализатора кода означает что с проектом все плохо. При этом все собирается и работает, т.е. все найденное это не ошибки синтаксиса или что-то простое и очевидное. Б0льшая часть найденного это «потенциальные» проблемы, которые выстрелят но не сегодня.

Вот один из характерных примеров, на скриншоте под курсором виден текст предупреждения.

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

При этом Java синтаксически проще чем Rust и уж точно на порядки «стандартнее».

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

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

Вот тут ты почти неправ. Для раста вполне можно продавать анализатор unsafe и это будет очень полезное дополнение за компилятором.

upd: примерно этим, ferrous, кстати, заняты совместно с adacore, пилят аналог адовского ravenscar

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

«Видите ли Пух» (C) У раста большая часть подобных линтов делается на уровне средств языка, типов и компилятора. Ну типа при грамотном(что редкость, да) использовании языка, немалого класса проблем можно избежать совсем. Что и подкупает, на самом деле. Из опыта могу сказать, что промудохавшись с ублажением компилятора сколько-то времени, на отладку остаются почти только алгоритмы(я хз как правильно сказать, логические ошибки), а не вот это вот всё типа необработанных исключений. Ну за пределами unsafe, который нужен, на самом деле, не так часто как кукарекают растохейтеры.

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

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

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

«методы а(), б() и c() в проекте нигде не вызываются - можешь удалять»

Чтобы выдавать такие рекомендации, нужно анализировать весь проект целиком, что эта штука и делает. И это круто.

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

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

На неправильное наследование, на неиспользуемые переменные, на границы видимости и тд и тп.

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

А ты видимо не понял о чём я и что есть. Пока сам не посмотришь, так и будешь «а вот то, так тут то» на основе чужих суждений или беглого гугления.

https://rust-lang.github.io/rust-clippy/master/index.html

вот тут имеющиеся линты можно посмотреть.

Dark_SavanT ★★★★★
()

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

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

Если денег куры не клюют, то в целом эту проблему можно даже в достоинство вывернуть - кто смог освоить Rust - тех сразу можно записывать в элиту программистов. Но многим нужны программисты, которым можно платить 60 000 рублей, а 600, т.к. 600 просто нет.

vbr ★★★★★
()
Последнее исправление: vbr (всего исправлений: 3)
Ответ на: комментарий от Dark_SavanT

Да смотрел я, смотрел.

Но все эти правила - локальные, на уровне одного файла с исходником. Также как в линтере для Typescript.

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

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

Неиспользуемые методы тебе линкер расскажет же ж. Но то, что там в основном базовое неудивительно, опенсорц с смутным финансированием.

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

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

Научить расту можно и студента и результат будет сильно лучше чем на си, даже при том, что писать приходится дольше.

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

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

То, что ты хочешь есть в idea в растоплагине

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

alex0x08 ★★★
()

реально опытные люди видят в расте некую системную сложность

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

а теперь умножь это на 20+ лет опыта писанины на С.

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

Тут не знаю, в моём опыте такие места обычно «рефакторятся» сразу после того как вот это вот «тяп-ляп, а тут быстро склонируем» уже компилится и работает.

А если и осталось, значит не сильно волнует, до профилирования в текущем виде может и не дожить вообще.

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

Rust очень сложный язык и многим компаниям не подойдёт… С тем же С такой проблемы нет…

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

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

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

Джаву трудно подвинуть, но раст появляется там где считают деньги. Тот же AWS много делает на нем (bottlerocket и то что поверх). На больших масштабах это очень сильно окупается.

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

том же GNOME

Тот же AWS

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

alex0x08 ★★★
()

Из всего что я понял за эти несколько дней, это то, что раст имеет проблемы в дизайне. Пока твое приложение относительно простое, все выглядит хорошо, но как только начинает упираться в лайфтаймы, начинаются костыли ввиде Rc, RefCell (возможно что-то еще). Раст прекрасен как идея или эксперимент, но реальная часть его проблем решается костылями. Меня с самого начала предостерегло то, что хеллоуворд сделан из макроса. Реально, количество кодогенерации в виде макросов, в языке просто зашкаливает.

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

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

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

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

Научить расту можно и студента и результат будет сильно лучше чем на си, даже при том, что писать приходится дольше.

Может и можно (хотя я сомневаюсь). Но в нашем мире студентов пока учат писать на С. А брать на работу тех, кого ещё надо учить - на такое способны мало компаний.

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

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

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

проблемы обычно из-за таких вот структур,

Почему это не запрещено в языке? Вероятно это нужно. В общем, опять из серии, мол программисты плохие, а язык хороший. Если уж ссылки в структуре приводят к костылям, может нафиг тогда такой язык?

byte1823
() автор топика