Стратегии взаимодействия
Прямое совместное использование структур данных и символов очень сложно:
FFI через C ABI гораздо осуществимее:
Другие стратегии:
- Распределённая система (RPC)
- Собственный ABI (например, WebAssembly Interface Types)
Взаимодействие высокой точности
Идеальный сценарий пока находится в экспериментальной стадии.
Два проекта, которые исследуют это, — crubit и Zngur. Первый предоставляет клеящий код с каждой стороны, чтобы совместимые типы беспрепятственно работали между языками. Второй опирается на динамическую диспетчеризацию и импортирует объекты C++ в Rust как объекты трейтов.
Взаимодействие низкой точности работает через C API
Типичная стратегия взаимодействия — использовать язык C в качестве интерфейса. C — это «кодек с потерями». Эта стратегия обычно приводит к сложному коду с обеих сторон.
Другие стратегии менее жизнеспособны в среде с нулевой стоимостью абстракций.
Распределённые системы создают издержки во время выполнения.
Они несут значительные накладные расходы, поскольку вызов метода во внешней библиотеке требует полного цикла сериализации, передачи и десериализации. Вообще говоря, прозрачный RPC — плохая идея: посередине есть сеть.
Собственный ABI, например wasm, требует рантайма или значительных затрат на реализацию.