Можно ли вызывать функции C или C ++ в Rust? Если да, то как это сделать?
Rust может ссылаться на / вызывать функции C через свои FFI, но не функции C ++.
Хотя я не знаю, почему нельзя вызывать функции C ++, возможно, это связано с тем, что функции C ++ сложно.
Rust не поддерживает это напрямую, искажение символов функции C ++ определяется реализацией, поэтому ему потребуется большая поддержка Rust для обработки этой функции. Это не невозможно, но, вероятно, этого не произойдет.
Тем не менее, Rust утверждает, что поддерживает язык C. Очевидно, что это легче поддерживать, так как он «только» должен поддерживать вызовы функций C. Это тоже поведение, определяемое реализацией, но это не сильно меняет ситуацию, и люди соглашаются работать вместе, чтобы разделить одно и то же соглашение. у вас не будет проблем с использованием C в качестве посредника на общей платформе.
Итак, чтобы вызвать C ++ из Rust, вы должны пройти мимо C.
Чтобы позвонить C из Rust, документы показывают этот пример:
extern "C" {
fn abs(input: i32) -> i32;
}
fn main() {
unsafe {
println!("Absolute value of -3 according to C: {}", abs(-3));
}
}
Для вызова C ++ из C, документы показывают этот пример:
// This C++ function can be called from C code
extern "C" void handler(int) {
std::cout << "Callback invoked\n"; // It can use C++
}
Чтобы преобразовать этот пример в наш пример в Rust, это дает:
#include <cstdlib>
#include <cinttypes>
extern "C" std::int32_t abs(std::int32_t n) {
return std::abs(static_cast<std::intmax_t>(n));
}