Created
February 8, 2024 11:29
-
-
Save olonho/2eefc4e5c58e0b896abf0feb06aca4fd to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Больше интеропов, хороших и разных | |
## Введение | |
* Необходимость интеропа в практических проектах | |
* переиспользование кода | |
* разные характеристики производительности языков | |
* интерфейсы к ОС | |
* Виды интеропа | |
* межязыковой (например 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