Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Стратегии взаимодействия

Прямое совместное использование структур данных и символов очень сложно:

RustC++

FFI через C ABI гораздо осуществимее:

RustCCC++

Другие стратегии:

  • Распределённая система (RPC)
  • Собственный ABI (например, WebAssembly Interface Types)
This slide should take about 5 minutes.

Взаимодействие высокой точности

Идеальный сценарий пока находится в экспериментальной стадии.

Два проекта, которые исследуют это, — crubit и Zngur. Первый предоставляет клеящий код с каждой стороны, чтобы совместимые типы беспрепятственно работали между языками. Второй опирается на динамическую диспетчеризацию и импортирует объекты C++ в Rust как объекты трейтов.

Взаимодействие низкой точности работает через C API

Типичная стратегия взаимодействия — использовать язык C в качестве интерфейса. C — это «кодек с потерями». Эта стратегия обычно приводит к сложному коду с обеих сторон.

Другие стратегии менее жизнеспособны в среде с нулевой стоимостью абстракций.

Распределённые системы создают издержки во время выполнения.

Они несут значительные накладные расходы, поскольку вызов метода во внешней библиотеке требует полного цикла сериализации, передачи и десериализации. Вообще говоря, прозрачный RPC — плохая идея: посередине есть сеть.

Собственный ABI, например wasm, требует рантайма или значительных затрат на реализацию.