LINUX.ORG.RU
ФорумTalks

Тяжёлые рациональные препятствия использования Rust вместо C++

 


0

5
  1. Язык, ограничивающий работу с сырой памятью, сырыми аллокациями, сырым владением - уже есть внутри C++: это такое его подмножество, где аллокации заменены на make_shared-подобное, сырая память/ресурсы - на всякие там контейнеры/инкапсуляции/RAII, владение - на смартпоинтеры и подобное. Если я как-то «нормально» знаю C++, включая и «сырое» и «хорошее», то получается мне не надо осваивать никакой другой язык, чтобы начать пейсать не-говно. Зачем вводить в инструментарий что-то ещё, если такое уже есть? Отказаться от C++ в пользу Rust - это какой-то сложный манёвр, совершаемый гораздо проще не уходя от C++ и не ДОБАВЛЯЯ ничего нового, а только УБИРАЯ что-то: достаточно отказаться от ЧАСТИ C++, не изучая ничего нового вообще. Не пиши на C++ и пиши на Rust - это строго сложнее и страннее, чем «пиши на С++, но без сырых указателей и сырых аллокаций». Rust уже есть внутри C++, что моментально заненужнивает какой-то отдельный Rust. Более того, для начала можно даже не ходить так далеко как отказ от куска C++, а взять свежайший C++ компилятор, врубить последний стандарт, врубить все параноидальные warning по максимуму, приравнять их к ошибкам компиляции (-Werror) и компилятор подробно расскажет тебе, какая ты дура, пока не перепишешь нормально.

  2. Ясно, что Rust нужен, чтобы набрать много макак с рынка, которые ПРИ ЖЕЛАНИИ не смогут сломать память. Теоретически, вредное подмножество Rust (unsafe) в разы меньше, чем вредное подмножество C++. По задумке, ревьюить Rust - проще, ведь надо просто отследить наличие unsafe, а ревьюить C++ макака не может. Ну ХЗ - в статический анализатор кода запихнул правила забраковки кода с сырыми указателями в С++ и готово. Ну и последний совет из пункта (1) даст 100 лет строгача с конфискацией за малейшую попытку побега - всё как в Rust: небезопасненько: не соберётся.

  3. Но Rust не простой, под него макака не подходит изначально. Rust варится в такой же задротской атмосфере, как и C++. Для макак инструмент надо ещё более тупой - что-то типа JS, где «что ни написал - всё работает», а к памяти доступа ВООБЩЕ нет ни через какое волшебное слово (unsafe). Если надо, чтобы быстро исполнялось, то в бинарный код мы уж как-нибудь скомпилируем/оттранслируем любой кал - в пределе (в прекрасной России будущего) волшебные оптимизаторы LLVM разрулят всё неоптимальное, что макака написала. Транслируем любой макачий кал в строго корректный машинногенерируемый С++ и его скомпиляем.

  4. Даже из принципа нужности управления битиками в крайне узкоспециальной части проекта мне не нужно много гениев. А это «мало гениев» я наберу с рынка вообще без проблем - и по зарплате там не сильно важно в чём он там гений - C++, Rust. Rust-задроты даже больше просят из-за модности.

  5. Супер железное правило, которое не перебивается вообще ничем логически: если вы затеяли лабать что-то уровня собственной СУБД с транзакциями и запутались в циклических ссылках, то вы уже давно перешли порог гениальности, после которого вам уже вообще насрать на чём это пишется. Эпичный баг, который вы будете искать дольше суток, с утечками/циклическими ссылками/порчей памяти вы в этом большом проекте поймаете за жизнь 2 раза от силы, остальное проблемное какой угодно сложности вы в дебаггере отловите за пару часов и это будет случаться раз в полгода - вообще экономически не повод менять инструмент. Да и то, затрачиваемое время на поиск багов растянется только потому, что на вашем уровне развития вы не могли пройти мимо очередного срача «C++ vs Rust» и отвлеклись на 4 часа от дебаггера.

UPDATE

Мне накидали в панаму разумных куёв, поэтому давайте выведем топик на новый уровень. Напишите не суперсложный кусок кода на C++, который потенциально вызывает проблемы и тот же кусок кода на расте, который никак не бомбанёт.



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

Говорят, чем дольше ты используешь Руст, тем больше ты превращаешься в транслезбиана. Это правда?

rupert ★★★★★
()

взять свежайший C++ компилятор, врубить последний стандарт, врубить все параноидальные warning по максимуму, приравнять их к ошибкам компиляции (-Werror) и компилятор подробно расскажет тебе, какая ты дура, пока не перепишешь нормально.

Вот когда это будет во всех С++ компиляторах из коробки, тогда и приходи. А пока, даже чтобы врубить все параноидальные warning по максимуму, потрахаться приходится.

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

А давай поскоратим и порефлексируем, что ты написал и зачем:

  1. Ты бог С++, а раст - сложный. Писать безопасно можно на чём угодно, просто держи правила написания кода в уме, полагаться на компилятор сложнее и страннее. Но если дурак, включи все варнинги в компиляторе С++, будет не хуже Раста.
  2. Раст нужен макакам, макаки в С++ не могут.
  3. Раст слишком сложен макакам, им нужно ещё проще. Например, можно генерировать С++ из JS, результат будет быстрым.
  4. Гении С++ дешевле, чем гении Раста.
  5. Если вы пишете что-то сложное и путаетесь в собственном коде, то вы уже гений и не иначе, и вам всё равно на чём писать. Пишите не на Расте, ведь вы быстро продебагаете все проблемы с кодом, затратив всего по паре часов на каждую.
unC0Rr ★★★★★
()
Ответ на: комментарий от rupert

Говорят, чем дольше ты используешь Руст, тем больше ты превращаешься в транслезбиана. Это правда?

Нет. Но если ты ненавидишь свои гениталии, шансов что тебе понравится Rust гораздо больше.

hateyoufeel ★★★★★
()

Единственное, в чём раст превосходит цепепе, так это в системе сборки и управления зависимостями. Трахаться с CMake это отдельная спецолимпиада, а в cargo всё легко и просто.

cocucka_B_TECTE
()

Короче, есть цепепе для пейзан с RAII, smart pointers и прочих best practices, а есть цепепе для хардкорных поциков, которым нужны кастомные аллокаторы, cache friendly структуры и прочие low latency штуки. Так вот раст, это такой цепепе для пейзан со всратым синтаксисом.

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

Писать безопасно можно на чём угодно

А писать опасно? :)

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

Фанаты C и C++ – почти всегда одни и те же люди. Исключения довольно редки. Разве что какой-нибудь Торовалтос ненавидит C++, и я встречал пачку плюсистов, ненавидящих Си.

hateyoufeel ★★★★★
()

Тяжелые психологические препятствия использования чего-то вместо крутого C++

fixed

unsigned ★★★★
()

Я тебе как менеджер скажу: chrome весь на c++, в mozilla одна из самых геморных частей на rust. И таки разработчиков в разы меньше. Очевидно, rust отлично подходит для того, для чего его придумали. Без него mozillу не успевали бы пилить.

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

Например, можно генерировать С++ из JS, результат будет быстрым.

Ахахахахаха. «Быстрый и мёртвый». Представил бардак (без типов, с допустимыми ошибками) JS помноженный на бардак C++ (ub и память). Это просто офигительно.

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

прошу раскрыть мысль про макак! Кто это такие?

Если судить по темам ТСа, то хорошо зарабатывающие разработчики) Пет-проджекты и зарабатывание денег в вебе. Как можно денег позарабатывать в вебе сейчас? Лендинги клепать или подобное.

goingUp ★★★★★
()

Если я как-то «нормально» знаю C++, включая и «сырое» и «хорошее», то получается мне не надо осваивать никакой другой язык

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

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

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

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

О, прогресс!

Уже вместо крестов. 😁

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

Раст нужен макакам, макаки в С++ не могут
Раст слишком сложен макакам

По-моему уже тут видны взаимоисключающие параграфы.

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

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

cocucka_B_TECTE
()

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

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

apt, nix там например, умеет нсли уж приспичило, а ПМ языка для системного языка это странно.

(сейчас хряснет вселенная, от соседства nix и apt в одном предложении)

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

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

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

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

apt, nix там например, умеет нсли уж приспичило, а ПМ языка для системного языка это странно.

apt говно. Традиционный сценарий: тебе нужно протестировать проект с версией какой-то библиотеки, которая отличается от системной. Nix чуть лучше, но его не все осиливают.

А термин «системный язык» – это просто днище, не надо так в приличном обществе, коим ЛОР несомненно является, выражаться!

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

Ну с++ это всё таки универсальный язык, а не чисто системный. Я на нём пишу прикладные приложения и не хочу зависеть от того, что в системе. Приходится добавлять либы как git submodules в свой проект и трахаться с инклюдами CMake ибо их авторы кто в лес, кто по дрова.

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

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

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

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

James_Holden ★★★★
()

Ясно, что Rust нужен, чтобы набрать много макак с рынка, которые ПРИ ЖЕЛАНИИ не смогут сломать память.

Себя я как понимаю вы к макакам не относите и пишете идеальный код на C/C++ без UB, out of range, use after free и т.п.. А также на ревью вы мрожете в миг заметить любой баг обращения с памятью. Ну вы гений мирового уровня, не иначе.

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

их еще надо правильно выбрать из всего зоопарка

Их всего три. Какие могут быть проблемы?

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

Как тебе это удалось?

ox55ff ★★★★★
()

Подоплека у растобесия экономическая и политическая. Это не вопрос технологий. Так что ненужно тут кому-то чего-то доказывать.

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

Ау, на этом языке написана ОС.

ичо?

Если этот факт неприятен, то можно подрыгать ножками, или попрыгать.

Этот факт нигде не релевантен кроме как в случае разработки этой самой ОС.

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

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

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

плюсах как отсутствовала хоть какая-то вменяемая безопасность, так и продолжает отсутствовать даже с использованием «надстроек

Так в плюсах она присутствует. Дальше нечетал.

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

Я, как не настоящий погромист, предпочту что надо - на Си, а всякий UI - на питоне или там tcl.

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

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

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

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

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

Раз ты не обозначил их, значит их и не было. Бугага.

lesopilorama
() автор топика
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)