Présentation de Craby, un outil qui permet d’intégrer dans React Native des modules basés sur Rust avec des TurboModules C++ purs.
Voir la documentation : https://craby.rs
GitHub : https://github.com/leegeunhyeok/craby
Qu’est-ce que Craby ?
Craby est un outil de développement qui permet d’écrire des modules natifs hautes performances en Rust tout en conservant la sûreté de typage sur toute la stack TypeScript - Rust - C++. Sans les couches spécifiques à la plateforme des React Native TurboModules (ObjCTurboModule/JavaTurboModule), il s’intègre directement à des TurboModules C++ purs pour en tirer les meilleures performances.
Performances
Comparaison de benchmarks avec d’autres solutions (voir les benchmarks) :
- 20 à 80 fois plus rapide qu’ExpoModules
- 15 à 20 fois plus rapide que les TurboModules standards
- 25 à 30 % plus rapide que NitroModules (basé sur Swift/Kotlin, pas sur C++)
Il s’agit d’un test de débit extrême (100 000 appels) ; les résultats peuvent varier en conditions réelles, à considérer uniquement comme référence.
Fonctionnalités principales
- Génération automatique de code : définissez l’API en TypeScript et les bindings Rust/C++ sont générés automatiquement
- Sûreté de typage : vérification des types à la compilation entre TypeScript, Rust et C++
- Zero-Cost FFI : minimise le surcoût d’interopérabilité Rust-C++ via cxx
- API simple : concentrez-vous uniquement sur l’implémentation Rust, Craby s’occupe du reste
Exemple d’utilisation
// Définition du schéma du module (TypeScript)
interface Spec extends NativeModule {
add(a: number, b: number): number;
}
// Implémentation réelle du module (Rust)
#[craby_module]
impl CalculatorSpec for Calculator {
fn add(&mut self, a: Number, b: Number) -> Number {
a + b
}
}
Tout le code de bridging est généré automatiquement par Craby ; l’utilisateur n’a qu’à implémenter le module lui-même en Rust.
Pour plus de détails, veuillez consulter la documentation/le dépôt GitHub, et tous les retours sont les bienvenus à tout moment !
5 commentaires
C’est un bon projet. J’ai ajouté une étoile !!
Monstrueux, Geunhyeok…
Il y a vraiment énormément de personnes incroyablement talentueuses...
Waouh… y a-t-il une raison particulière qui vous a poussé à créer cet outil ? J’aimerais aussi essayer de faire quelque chose comme ça, et je me demandais quelle motivation amène généralement les gens à créer ce genre de chose.
Récemment, nous avons dû passer à la New Architecture. En examinant l’implémentation interne de TurboModule, nous sommes partis de l’idée que « si on l’aborde ainsi, cela semble tout à fait faisable et prometteur ! »