8 платформ, нативный UI, общая бизнес-логика на Rust и Kotlin. Проект
KMP & Rust демонстрирует способы взаимодействия библиотек Rust и Kotlin с нативными платформами и тестирует разницу в производительности языков. На всех платформах тестовая функция запускается асинхронно и проверяет:
- Интенсивные вычисления в цикле
- Работу с динамической памятью
- Вычисления с плавающей запятой
Результаты:
-
Web (React): Rust ~1290ms, Kotlin ~5971ms
-
Android (Jetpack Compose): Rust ~1599ms, Kotlin ~1516ms
-
Aurora OS (Qt/QML): Rust ~1285ms, Kotlin ~1472ms
-
Linux (Gnome): Rust ~1498ms, Kotlin ~1743ms
-
iOS (SwiftUI): Rust ~1179ms, Kotlin ~1308ms
-
macOS (SwiftUI): Rust ~1138ms, Kotlin ~1288ms
-
HarmonyOS (ArkUI): Rust ~3616ms, Kotlin — нет поддержки
-
Windows (WPF): Rust ~1147ms, Kotlin ~5799ms
Rust:- Минимальный разброс между платформами
- Предсказуемая производительность
- Широкая поддержка платформ
- Минимальный overhead
- Понятное подключение к платформам
- Отсутствие привязок к конкретным платформам
Kotlin:- Удобство использования на некоторых платформах
- Отличная оптимизация в Android
- Ограниченная поддержка платформ
- Молодые и медленные таргеты (Wasm/MinGW)
- Замедляющие абстракции и runtime
- Сложности работы с C-библиотеками
Итог: Rust — отличный кандидат для создания библиотеки с общей бизнес-логикой. Он стабилен, прост и поддерживает широкий выбор платформ. KMP хорош в Android и iOS/macOS благодаря генерации привязок к платформе — в Rust это нужно делать руками. С другой стороны, C-библиотеки в KMP — это ужасно. В общем: Rust — blazing fast 🚀, Kotlin — как получится.