LINUX.ORG.RU
ФорумTalks

В чем смысл Rust?

 , , , ,


0

4

Зачем нужен Rust, если на Си с условным valgrind можно писать код без утечек и битья памяти переполняющимися буферами?

Перемещено dataman из general



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

Если бы это была единственная его цель, я бы не был против его.

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

И Десять лет критической уязвимости в Rust .

Разве это не исправили давно?

cve-rs/Cargo.toml

rust-version = "1.69.0"

А сейчас актуальная версия растищки 1.92.

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

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

Любитель Си и Valgrind этого не догоняет. Такие тут на ЛОРе сишники.

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

Нет. Valgrind работает только в рантайме, и проверяет запущенный код. Если какая-то функция не была вызвана в данной сессии запуска, она и не будет проверена.

Каждая функция запускается хотя бы раз за время разработки программы для проверки ее логической работоспособности.

Кроме того, под Valgrind вы можете запускаться на одних данных, и, к примеру, выхода за границы массива не будет. А в работе кто-то запустит на других данных, и тогда на, казалось бы, проверенном Valgring коде можно словить сегфолт.

Это какой говнокод надо написать, чтобы так было? Хотя в теории, конечно, можно.

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

Зачем всех? Достаточно самых скилловых, которые никогда не ошибаются, вот например:

firkax: В чем смысл Rust? (комментарий)

Sm0ke85: Mergiraf -- новый движок разрешения конфликтов в коде (комментарий)

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

Сишную программу можно 1 раз скачать в сурцах и по флешке 100 раз отправлять знакомым, а с Rust такое не прокатит.

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

Чтобы был язык с явно выраженной концепцией владения.

Чтобы что? Чтобы мозг ломать нормальным разработчикам?

Зачем нужен питон, «если на Си можно»?

В точку. Либо bash, либо Си.

Большая часть сишного кода никогда не проверялась валграйндом.

Не проблема Си.

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

Чтобы что?

Чтобы можно было писать программы в парадигме явного владения.

Чтобы мозг ломать

Как будто что-то плохое

нормальным

Неочевидно

В точку. Либо bash, либо Си.

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

Не проблема Си.

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

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

выборочно

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

в Rust нормальную логику программы реализовать невозможно

Я его и не изучал.

/0

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

Лично опрашивал всех писателей на Си об использовании valgrind?

По опросам у жителей Виллабаджо х*й 25см.

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

hippi90 ★★★★★
()

Чтобы valgrind поймал проблему, нужно активировать блок кода/конкретные условия, когда она возникает. Если это не хрестоматийный пример с забытым free в пару к malloc в main, то проблему поймать не так уж просто. С проблемами многопоточного доступа к общим данным вообще всё плохо, ловить их в рантайме - играть в лотерею. Rust закрывает больше (и частично другие) вопросов, чем Valgrind. Если ты это не понимаешь, ты не пользовался всерьёз ни Rust, ни Valgrind.

Плюс система типов. В C слишком слабая, в C++ слишком нагромождённая, в Rust сделали достаточно фичасто, но почище чем шаблоны.

А ещё прикольные enum, которые могут нести данные и иметь оптимизацию размера (Option<bool> имеет размер 1 байт и это общая фича enum, а не обработка частного случая в компиляторе).

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

valgrind бесполезен в высоконагруженных приложениях, т.к. он слишком сильно замедляет работу тестируемого приложения. Если проблема возникает, например, при race condition, то без валгринда она может воспроизводиться, а с валгриндом - уже нет.

Вообще в идеале отсутствие проблем должно быть гарантировано на этапе написания кода. Valgrind, asan, etc. этого не делают.

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

Чем на расте

Где-то можно посмотреть?

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

Вам «средства есть» или писать программы так, чтобы автоматом всё пучком было?

У си много проблем, но жаловаться на скорость?.. Тем более алиасинг и проверки на NULL. Это может впечатлять, только если не задумываться, как бы это проявилось в реальном коде.

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

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

Каждая функция запускается хотя бы раз за время разработки программы для проверки ее логической работоспособности.

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

Кроме того, под Valgrind вы можете запускаться на одних данных, и, к примеру, выхода за границы массива не будет. А в работе кто-то запустит на других данных, и тогда на, казалось бы, проверенном Valgring коде можно словить сегфолт.

Это какой говнокод надо написать, чтобы так было? Хотя в теории, конечно, можно.

Возьми любой легаси, ты там такого понасмотришься. Сделали массив в 10 интов, забыли сделать проверку на длину вводимых данных. Проверили на 10 значениях, Valgrind сказал Ok. В продакшене пользователь ввел 12 значений, и система легла.

Xintrea ★★★★★
()

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

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

Можно, но очень осторожно. Хотя и на Java можно писать так, что память течь будет.

Так там даже и стараться не надо. Оно само. Java сожрёт всё что есть и попросит ещё.

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

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

Вот именно это многих и отталкивает от Раста.

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

Что говорить, пока я не проверил сколько то лет назад код Inkscape Cppcheck-ом, его тоже никто не проверял, хотя он к тому времени годами жил уже, не то что валграйндом, а даже на грубые ошибки статическим анализатором. По итогу я закинул несколько багов и вроде как 1 фикс, может 2, не помню уже, который теперь где-то там работает. Валграйндом уверен его вообще никто никогда не проверял. Не знаю ещё, исправили ли там уязвимости в коде, связанные с buffer overflow, я их не репортил, просто видел краем глаза, кому охота, можете поискать их, наверняка найдёте.

PS

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

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

Но я сталкивался с желанием собрать одну поделку на Rust.

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

Типа того, кто-то под массив «количество стран в мире» отвёл 1000 значений. Кто ж знал, что в 21 веке их десятки тысяч будет насчитываться.

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

Сразу видно настоящих инженеров в этих «многих».

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

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

Статистика не может давать никаких выводов, кроме вероятностных.

Вероятностные выводы даёт не статистика а прогнозирование. А статистика - это свершившийся факт.

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

Это какой говнокод надо написать, чтобы так было? Хотя в теории, конечно, можно.

Давай, я тебе напишу.

# include <stdio.h>

void main (void)
{
    int b[1], a;

    scanf("%d", &a);

    printf ("%d\n", b[a]);

    printf ("OK\n");
}
  
./a.out
0
0
OK
./a.out
10000
Bus error
./a.out
20000
Segmentation fault

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

Вероятностный свершившийся факт. Столько-то процентов прог с битьём памяти. И эти проценты - совсем не 100. Так что прекращай сказки рассказывать.

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

/0

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

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

но не защищает от ошибок вида 2+2=5

Как и Rust.

rcldev
() автор топика
Ответ на: комментарий от ya-betmen

А в чем проблема использовать valgrind? Он поддерживает больше архитектур, чем Rust, в котором, говорят, скоро 32-битный x86 выкинут.

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

Работает, но через жопу.

Не работает совсем, ибо где-то с года 23-го rustc никак без Интернета не собрать.

Где все эти северокорейские самсунги?

У жителей КНДР.

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

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

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

Разве это не исправили давно?

Не давно, а недавно. Просто трапы в команде разработки Rust каждую неделю новые версии создают, где, кстати, ломают обратную совместимость со старым кодом на Rust.

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

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

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

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

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

А если не запускается

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

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

См. выше.

Сделали массив в 10 интов

Тут и без запуска понятно даже обезьяне, что это дыра.

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

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

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

Там говорят есть cargo vendor и rustup установщики оффлайн, а ещё cargo build --offline и ключ --frozen. Но я не проверял, это гугловский искуственный идиот говорит и я склонен ему верить по данному вопросу.

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