Skip to Content
Основные понятияАрхитектура ядра ржавчины

Архитектура ядра Rust

Чтобы гарантировать абсолютную совместимость между Android и iOS и достичь высочайшего уровня производительности, основная логика Tracelet полностью написана на Rust. Сюда входят конечный автомат, механизм синхронизации HTTP, уровень персистентности SQLite и расчеты бюджета батареи.


Почему Руст?

Написание основного движка на Rust решает несколько важных проблем при кроссплатформенном фоновом выполнении:

  1. Ноль несоответствий. Полагаясь на единую общую базу кода, а не на отдельные реализации Swift и Kotlin, мы гарантируем идентичное поведение iOS и Android при любых условиях. Если ошибка исправлена, то она исправлена ​​везде.
  2. Бесстрашный параллелизм. Фоновый механизм синхронизации работает безупречно при больших многопоточных нагрузках. Строгий компилятор Rust гарантирует свободу гонок данных, избегая ошибок параллелизма, когда местоположения записываются и загружаются одновременно в фоновых потоках.
  3. Производительность и безопасность. Rust обеспечивает производительность уровня C и практически нулевое потребление памяти, что делает его идеальным для фонового выполнения с ограничением заряда батареи. Он гарантирует безопасность памяти без сборщика мусора, гарантируя, что фоновый механизм никогда не выйдет из строя из-за нулевых указателей или ошибок нехватки памяти.

Как это работает: привязки UniFFI

Tracelet использует UniFFI (универсальный интерфейс внешних функций) Mozilla, чтобы преодолеть разрыв между Rust и собственными платформами.

  1. Определение: Мы определяем основной API в Rust (например, методы для запуска отслеживания, синхронизации данных или обработки обновлений местоположения).
  2. Генерация: UniFFI автоматически анализирует код Rust и генерирует безопасные идиоматические привязки Swift для iOS и Kotlin привязки для Android.
  3. Выполнение: Когда плагин Flutter вызывает собственный код iOS/Android, собственный код вызывает сгенерированные UniFFI привязки, которые плавно выполняют базовую логику Rust.

Поскольку привязки генерируются автоматически, не требуется вручную поддерживать JNI (собственный интерфейс Java) или код моста Objective-C. Он полностью типобезопасен.


Предварительно скомпилированные двоичные файлы (Rust Toolchain не требуется)

Общая проблема Rust в мобильной разработке — это то, что разработчикам приходится устанавливать набор инструментов Rust, настраивать цели кросс-компиляции и терпеть длительное время сборки.

Tracelet решает эту проблему, распространяя предварительно скомпилированные двоичные файлы.

Когда вы добавляете плагин tracelet в свой проект Flutter, вам не нужно устанавливать Rust на свой компьютер. Конвейер CI/CD Tracelet автоматически создает и публикует собственные библиотеки для каждого выпуска.

Android-подборка

  • Код Rust скомпилирован в собственную общую библиотеку (.so) для всех основных архитектур Android (arm64-v8a, armeabi-v7a, x86, x86_64).
  • Эти библиотеки вместе с созданными привязками Kotlin упаковываются в архив Android (.aar).
  • Когда вы создаете приложение Flutter, Gradle автоматически загружает предварительно созданный .aar из репозитория Tracelet.

iOS-компиляция

  • Код Rust скомпилирован в статическую библиотеку (.a) для iOS-устройств (arm64) и симуляторов (arm64, x86_64).
  • Эти библиотеки объединяются вместе со сгенерированными привязками Swift в Apple XCFramework (TraceletCore.xcframework).
  • Когда вы запускаете pod install, CocoaPods (или диспетчер пакетов Swift) автоматически загружает предварительно скомпилированный TraceletCore.xcframework непосредственно из помеченного выпуска GitHub.
⚡

Этот предварительно скомпилированный дистрибутив гарантирует, что ваши сборки Flutter будут молниеносно быстрыми, а ваши конвейеры CI/CD будут работать «из коробки», не требуя специальных настроек Rust.

Last updated on