1.1, Аноним (1), 11:53, 24/11/2024 [ответить] [﹢﹢﹢] [ · · · ]
| –2 +/– |
> При этом за последние три года в библиотеке было выявлено 57 проблем с корректностью работы, из которых 20 были помечены как уязвимости.
Как же так? Ведь Rust должен был обернуть небезопасные части в загончик unsafe, чтобы как раз не было такого.
Выходит, не помогло? А верифицировать любой код можно, не только Rust.
| |
|
2.3, Аноним (-), 11:57, 24/11/2024 [^] [^^] [^^^] [ответить]
| +7 +/– |
> Ведь Rust должен был обернуть небезопасные части в загончик unsafe, чтобы как раз не было такого.
Так они это и сделали. Поэтому проблемы если возникают, то именно unsafe блоках.
Не считая логических багов. От них только формальная верификация и спасет.
> Выходит, не помогло?
Наоборот, помогло. Посмотри сколько функций и в скольки есть unsafe.
> А верифицировать любой код можно, не только Rust.
Можно. Но в расте тебе нужно будет верифицировать 7.5к функция, а не 35 тысяч как в других языках.
А это почти в 5 раз меньше работы.
| |
|
3.8, Аноним (8), 12:23, 24/11/2024 [^] [^^] [^^^] [ответить]
| –2 +/– |
>А это почти в 5 раз меньше работы.
А вот это вряд ли, потому что каждое включение unsafe на Rust в 5 раз сложнее проверять, чем в других языках.
| |
|
4.9, Facemaker (?), 12:24, 24/11/2024 [^] [^^] [^^^] [ответить]
| +1 +/– |
>каждое включение unsafe на Rust в 5 раз сложнее проверять, чем в других языках
Как вычислялась эта метрика?
| |
|
5.12, Аноним (-), 12:37, 24/11/2024 [^] [^^] [^^^] [ответить]
| +5 +/– |
> Как вычислялась эта метрика?
Методика 'Пальцем в небо' сертифицированного сотрудника 'НИИ Кекспертизы и вбросов' им. Опеннета.
Все утверждения истинны на 146%!
Я бы спросил в чем отличие unsafe rust от обычной сишки, но смысла нет - все равно ответа не получим))
| |
|
4.21, erthink_ (?), 13:15, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
Нет. Ровно наоборот.
Даже если иметь кривые руки, плохую голову и что-то натянуть против раста, то верификация unsafe в его собственных библиотеках потребует в разы меньше усилий чем верификация сишных библиотек со сравнимым функционалом.
В среднем по больнице, unsafe-код в Rust более регулярен и проще (менее комплексный) чем подобный в сишных библиотеках.
Есть и обратный эффект, в unsafe-функциях концентрация странностей/мутностей больше чем в средней glibc. Но это только потому, что в rust есть возможность и стремление отделять мух от котлет, а в glibc любые unsafe операции могут быть в любом месте (в самом безобидном и неожиданном).
Конечно, можно найти зубодробительные unsafe-сценарии, но тогда и сравнивать их надо с аналогичными сишными случаями.
| |
|
|
4.28, erthink_ (?), 13:56, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
> в другом языке есть формально верифицированный компилятор
> https://compcert.org
Нисколько не хочу принизить ценность проекта и достигнутые там результаты, но всё-таки нужно слегка критично читать написанное с осознанием всего комплекса проблем/задач.
Формальная/математическая верификация покрывает часть функционала, т.е. "не всё".
При этом возникает некая проблема/задача верификации "самого верификатора", т.е. доказательства что сформированного списка свойств достаточно для "верифицированного компилятора".
Например, предположим что у вас есть "верифицированный компилятор". В нём могут быть баги ?
- если "нет, багов быть не может", то упомянутый компилятор нельзя назвать верифицированным.
- если "да, баги могут быть", то верификация перестаёт что-либо гарантировать на практике.
Поэтому все подобные верификации всегда с массой уточнений и оговорок "тут рыбу заворачивали, сюда не смотрим" и "если остальное работает верно".
Соответственно, отсутствие "формализированной системы типов" им не только не мешает, но и может помогать (сокращать поверхность).
| |
|
5.42, Аноним (13), 14:54, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
> Поэтому все подобные верификации всегда с массой уточнений и оговорок
там написано вполне ясно
> Such verified compilers come with a mathematical, machine-checked proof that the generated executable code behaves exactly as prescribed by the semantics of the source program.
> Соответственно, отсутствие "формализированной системы типов" им не только не мешает, но и может помогать (сокращать поверхность).
без формального описания не может быть никакой верификации, как это может "помогать" ?
| |
|
|
|
4.33, Аноним (-), 14:21, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
Вот эпичный тред, где люди в течение недели(!) пытались заставить это работать
https://github.com/Speykious/cve-rs/issues/4
Им пришлось написать самописный null_mute, модифицировать transmute() подменив там crate::null_mut на самописный... и даже после этого получается ошибка компиляции
error[E0133]: dereference of raw pointer is unsafe and requires unsafe function or block
error: could not compile 'cve-rs' (lib) due to previous error
| |
|
5.36, Аноним (35), 14:30, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
Не знаю, что ты там компилируешь?
$ cargo install cve-rs
$ ~/.cargo/bin/cve-rs segfault
Segmentation fault (core dumped)
| |
|
|
|
2.6, Аноним (6), 12:03, 24/11/2024 [^] [^^] [^^^] [ответить]
| –1 +/– |
Нет ничего иделаьного! А результат всяко лучше по сравнению с С/C++.
| |
2.7, proninyaroslav (ok), 12:04, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
А теперь представим что unsafe нет, и нужно перелопатить 35к функций, вместо 7500 если бы unsafe был.
| |
|
3.15, 21yosenior (?), 12:48, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
Там и так нужно перелопатить 35к, уб в расте есть везде. Не говоря о том, что многие из этих 35к - хэлворды.
| |
|
4.18, proninyaroslav (ok), 12:59, 24/11/2024 [^] [^^] [^^^] [ответить]
| +1 +/– |
UB в расте не может быть за пределами unsafe блока. Это гарантированно. Все остальное он конечно не гарантирует, например утечки памяти.
| |
|
|
|
|
|
3.19, 21yosenior (?), 13:08, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
Хоть со своей, хоть с чьей-то ещё. Заявляется безопасность кода на языке, а не либы - подучи логику. Ансейфа нет, проблемы есть.
| |
|
4.23, Аноним (23), 13:35, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
>> cve-rs also contains safe reimplementations of:
>> std::mem::transmute
>> std::ptr::null()/null_mut() but for references
>>> pub const unsafe extern "rust-intrinsic" fn transmute<Src, Dst>
>>> Reinterprets the bits of a value of one type as another type.
> Хоть со своей, хоть с чьей-то ещё. Заявляется безопасность кода на языке,
> а не либы - подучи логику. Ансейфа нет, проблемы есть.
Кекспертизм опеннетный, аз из
Да и то, что для появления проблем (т.е. чтобы найти баг в компиляторе - ведь "работатет" оно только с кастомным null/transmute) там целый консилиум корпел не одну неделю (см. обсуждение на гитхабе) - кексперты скромненько умалчивают.
И правда, какая разница: заиметь UB после траха^W написания кастомного null и принудительного каста типа данных - или заиметь UB, просто сложив два числа или забыв пустую строку в конце исходника ...
| |
|
5.26, 21yosenior (?), 13:44, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
Всё, ответов не будет? С одного вопроса потеряться - мощно.
> cve-rs also contains safe reimplementations of
> safe reimplementations
Молодец, умножил на ноль тезисы предыдущего героя. Хоть не зря кучу левого мусора спастил.
| |
|
6.32, Аноним (23), 14:15, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
> Всё, ответов не будет? С одного вопроса потеряться - мощно.
Не суметь прочесть три предложения и сразу перейти к "папа, где море?" - намного уныл^W мощнее.
>> cve-rs also contains safe reimplementations of
>> safe reimplementations
> Молодец, умножил на ноль тезисы предыдущего героя. Хоть не зря кучу левого мусора спастил.
Молодец, обозвал сигнатуру transmute "левым мусором" и не сумел написать ничего по существу ... зато выдал хороший, объемный выхлоп метана - Газпром гордится тобой!
| |
|
|
|
|
|
1.20, Аноним (20), 13:14, 24/11/2024 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> Компания Amazon и организация Rust Foundation представили инициативу
Только один вопрос. Кто им разрешил?
| |
|
2.27, ijuij (?), 13:54, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
Хороший вопрос! Иногда кажется, что разрешение не требуется.
| |
|
3.39, Аноним (20), 14:40, 24/11/2024 [^] [^^] [^^^] [ответить]
| +/– |
Вопрос не праздный. Вспомним Ada, созданный МО. Да, он есть, но связываться с ним как-то не хотелось и не хочется. За Rust также топит МО. И это тоже как бы намекает. Последствия будут, если не сейчас, так потом. Смотреть надо не сиюминутные выгоды, а на перспективу.
Наверное, лучше остаться на относительно свободном C/C++, в том числе для новых проектов.
| |
|
|
|