Skip to content

Instantly share code, notes, and snippets.

@olonho
Created February 8, 2024 11:29
Show Gist options
  • Save olonho/2eefc4e5c58e0b896abf0feb06aca4fd to your computer and use it in GitHub Desktop.
Save olonho/2eefc4e5c58e0b896abf0feb06aca4fd to your computer and use it in GitHub Desktop.
# Больше интеропов, хороших и разных
## Введение
* Необходимость интеропа в практических проектах
* переиспользование кода
* разные характеристики производительности языков
* интерфейсы к ОС
* Виды интеропа
* межязыковой (например Java/Kotlin, JavaScript/TypeScript, C/C++)
* межрантаймовый (например Java/C++)
* межкомпьютерный (RMI, REST и т.п.)
* Основные проблемы
* выразительная сила
* трудоемкость
* производительность
* управление памятью
* Подходы:
* lingua franca (C ABI/API, JVM, CLR)
* язык описания интерфейсов (IDL) + генерированный код взаимодействия
## Истории из собственного опыта, краткий обзор и компромиссы
* Sun RPC
* Java JNI
* Mozilla XPCOM
* VirtualBox XIDL
* Kotlin/Native C и Objective C интероп
* Попытка Kotlin/Native C++ интероп
* Compose Multiplatform Skia интероп
* Универсальный TS/JVM/WASM интероп
## Универсальный TS/JVM/WASM интероп - зачем, как, что получилось
### Задача
* Вызывать несколько различных библиотек на С++ скомпилированных в различные архитектуры (native, WASM)
* Из нескольких управляемых сред выполнения (V8, JSCore, JVM, browser) с сильно различными механизмами интеропа
* С высокой производительностью
* С удобной для программиста на высокоуровневом языке моделью исполнения
* качественный API на высокоуровневом языке
* автоматическое управление памятью
* Умопостигаемой отладкой и профилированием
### Подходы к решению
* Контроль данных ходящих через границу
* Peer объекты
* Ограничение взаимодействия с ВМ
* Ограничения на обратные вызовы (callback)
* Разделение языковых и рантаймовых мостов
* Автоматические конверторы для дозволенных типов
* Автоматическое управление памятью, инициированное managed стороной (finalization queues)
### Практическая реализация
* Высокоуровневое API
* Управление памятью
* Конверторы для типов
* Вариации для разных VM
* Любопытные наблюдения:
* представление указателей
* строки
* синхронные и асинхронные обратные вызовы
* интеграция с циклом обработки событий
* асинхронность, конкурентность и интероп
### Результаты
* Продуктовый механизм для написания кода с интеропом
* Высокая производительность взаимодействия
* Малое количество копирований памяти
* Расширяемость
* Что стоило бы улучшить
### Дальнейшее развитие
* Комбинация с IDL
* Способы повышения производительности
* Чем могут помочь компиляторы и системы выполнения
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment