Что делать с предупреждением: блок `extern` использует тип `u128`, который не является FFI-безопасным

#c #rust #ffi #unsafe

#c #Ржавчина #ffi #небезопасно

Вопрос:

Я использовал ящик bindgen для создания привязок из Rust к библиотеке C, но я получаю целую кучу предупреждений о том, что:

 warning: `extern` block uses type `u128`, which is not FFI-safe
= note: 128-bit integers don't currently have a known stable ABI
  

Что я могу сделать с этим предупреждением? Я предполагаю, что мне нужно предпринять какие-то действия, чтобы исправить это, или я могу это проигнорировать?

Комментарии:

1. смотрите rust-lang / rust #54341 — короче говоря, вы не можете сделать это безопасно в данный момент.

2. Я видел проблемы, но, честно говоря, я не понимаю, что это значит. Означает ли это, что он может работать, иметь неожиданное поведение или что именно?

3. Это означает, что поведение не определено. Это может сработать, это может вызвать системное исключение, это может незаметно вызвать некорректное поведение. Кроме того, любой написанный вами код может работать на одной версии rustc, а не на другой, или может работать по-разному на разных платформах. Причина, по которой это небезопасно использовать, заключается в том, что компилятор не дает гарантии, что эти типы пересекут границу FFI способом, понятным внешнему коду. Короче говоря: если вам нужно отправить 128 бит через FFI, сделайте это, используя какой-либо другой метод на данный момент (например, пару u64 ).