172 похожих чатов

Может кто-нибудь на пальцах обьяснить почему libc::sysconf всегда unsafe?

18 ответов

20 просмотров

FFI всегда unsafe.

Artem-Shmakov Автор вопроса
Roman
FFI всегда unsafe.

Это я понял, хочу понять причину 🙂

Artem Shmakov
Это я понял, хочу понять причину 🙂

Потому что раст не знает что на "той" стороне. Может там фигня какая-то с UBшками

Artem Shmakov
Это я понял, хочу понять причину 🙂

потому что внутри вызова может быть уб по правилам языка. ты передал не тот параметр или вызвал в неправильный момент. https://docs.rs/nix/0.22.1/nix/unistd/fn.sysconf.html - вот без unsafe

Artem-Shmakov Автор вопроса
Roman
потому что внутри вызова может быть уб по правилам...

Т.е. это применимо к любым биндингам которые внаружу?

Artem Shmakov
Т.е. это применимо к любым биндингам которые внару...

да. т.к. компилятор не знает как правильно, он исходит из пессимистичного правила. поэтому и unsafe.

Artem-Shmakov Автор вопроса
Roman
потому что внутри вызова может быть уб по правилам...

Под капотом все равно unsafe ;( ссылку че-то не могу скинуть

Artem Shmakov
Под капотом все равно unsafe ;( ссылку че-то не мо...

ну и что? внутри ансейф, а снаружи сейф.

Artem Shmakov
Под капотом все равно unsafe ;( ссылку че-то не мо...

Под капотом unsafe будет в любом случае, что винда, что линукс в основном на C/C++ написаны.

Artem-Shmakov Автор вопроса
Roman
ну и что? внутри ансейф, а снаружи сейф.

Ну, по моей логике тогда смысла в лишней обертке нет, в любом случае есть риск. Могу ошибаться офк

Artem Shmakov
Ну, по моей логике тогда смысла в лишней обертке н...

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

Artem Shmakov
Ну, по моей логике тогда смысла в лишней обертке н...

Обёртка проверена N-ным числом других разработчиков и, вероятно, протестирована. Как минимум в этом смысл :)

Artem Shmakov
Ну, по моей логике тогда смысла в лишней обертке н...

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

Traveller Kolsky
В худшем случае придётся править не все места сраз...

существование одной FFI функции, которую можно всегда безопасно вызвать, не означает, что мы все функции считаем безопасными. а дальше уже работа человека - сказать компилятору, что это норм. и делается это добавлением unsafe. читай это как "trust me", а не как "здесь идет уб и все небезопасно".

Artem Shmakov
Ну, по моей логике тогда смысла в лишней обертке н...

смысл ансейфа в том что он разбивает код на блоки которым нужен человеческий пригляд и те где нет. В стд когда я последний раз смотрел ансейфа был 0.1% от общего объема кода. Это в СТД, где куча базовых оберток делается для котороых компилятор как раз не помогает ничем. В обычном коде этот процент у меня обычно в районе 0 ровно. Это значит что такой код в тысячу(!) раз проще саппортить, потому что в тысячу раз меньше мест где что-то может криво быть написано

Artem-Shmakov Автор вопроса
Αλεχ Zhukovsky
смысл ансейфа в том что он разбивает код на блоки ...

Ну, я для этих целей и интересовался, почему ffi всегда unsafe. Стараюсь его, конечно, максимально избегать.

Artem Shmakov
Ну, я для этих целей и интересовался, почему ffi в...

потому что раст не может предоставить никаких гарантий для кода написанного не на расте

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта