FFI всегда unsafe.
Это я понял, хочу понять причину 🙂
Потому что раст не знает что на "той" стороне. Может там фигня какая-то с UBшками
потому что внутри вызова может быть уб по правилам языка. ты передал не тот параметр или вызвал в неправильный момент. https://docs.rs/nix/0.22.1/nix/unistd/fn.sysconf.html - вот без unsafe
Т.е. это применимо к любым биндингам которые внаружу?
да. т.к. компилятор не знает как правильно, он исходит из пессимистичного правила. поэтому и unsafe.
Под капотом все равно unsafe ;( ссылку че-то не могу скинуть
ну и что? внутри ансейф, а снаружи сейф.
Под капотом unsafe будет в любом случае, что винда, что линукс в основном на C/C++ написаны.
Ну, по моей логике тогда смысла в лишней обертке нет, в любом случае есть риск. Могу ошибаться офк
В худшем случае придётся править не все места сразу, а только внутренность обёртки. И много людей обычно проверяет лучше, чем один.
Обёртка проверена N-ным числом других разработчиков и, вероятно, протестирована. Как минимум в этом смысл :)
unsafe - это обязательно для любой FFI функции. дальше ты пишешь обертку, если можешь написать safe версию - вперед. в данном случае написали.
существование одной FFI функции, которую можно всегда безопасно вызвать, не означает, что мы все функции считаем безопасными. а дальше уже работа человека - сказать компилятору, что это норм. и делается это добавлением unsafe. читай это как "trust me", а не как "здесь идет уб и все небезопасно".
смысл ансейфа в том что он разбивает код на блоки которым нужен человеческий пригляд и те где нет. В стд когда я последний раз смотрел ансейфа был 0.1% от общего объема кода. Это в СТД, где куча базовых оберток делается для котороых компилятор как раз не помогает ничем. В обычном коде этот процент у меня обычно в районе 0 ровно. Это значит что такой код в тысячу(!) раз проще саппортить, потому что в тысячу раз меньше мест где что-то может криво быть написано
Ну, я для этих целей и интересовался, почему ffi всегда unsafe. Стараюсь его, конечно, максимально избегать.
потому что раст не может предоставить никаких гарантий для кода написанного не на расте
Обсуждают сегодня