React Native’de Rust tabanlı modülleri saf C++ TurboModule ile entegre etmeyi mümkün kılan Craby aracını tanıtıyoruz.
Dokümantasyon: https://craby.rs
GitHub: https://github.com/leegeunhyeok/craby
Craby nedir?
Craby, Rust ile yüksek performanslı native modüller yazarken TypeScript - Rust - C++ tam yığınında tip güvenliğini korumayı sağlayan bir geliştirme aracıdır. React Native TurboModule’ün platforma özgü katmanları (ObjCTurboModule/JavaTurboModule) olmadan, saf C++ TurboModule ile doğrudan entegre olarak en yüksek performansı hedefler.
Performans
Diğer çözümlerle benchmark karşılaştırması (benchmark’a bakın):
- ExpoModules’a göre 20-80 kat daha hızlı
- Standart TurboModules’a göre 15-20 kat daha hızlı
- NitroModules’a (Swift/Kotlin tabanlı, C++ değil) göre %25~30 daha hızlı
Bu, aşırı uç throughput testidir (100 bin çağrı) ve gerçek kullanım ortamında sonuçlar farklı olabilir; lütfen bunu yalnızca referans olarak değerlendirin.
Başlıca özellikler
- Otomatik kod üretimi: API’yi TypeScript ile tanımladığınızda Rust/C++ binding’leri otomatik oluşturur
- Tip güvenliği: TypeScript, Rust ve C++ arasında derleme zamanında tip kontrolü
- Zero-Cost FFI: Rust-C++ birlikte çalışabilirliğinde overhead’i cxx üzerinden en aza indirir
- Basit API: Yalnızca Rust implementasyonuna odaklanın, gerisini Craby halleder
Kullanım örneği
// 모듈 스키마 정의 (TypeScript)
interface Spec extends NativeModule {
add(a: number, b: number): number;
}
// 실제 모듈 구현 (Rust)
#[craby_module]
impl CalculatorSpec for Calculator {
fn add(&mut self, a: Number, b: Number) -> Number {
a + b
}
}
Tüm bridging kodları Craby tarafından otomatik oluşturulur; kullanıcıların yalnızca gerçek modülü (Rust) implemente etmesi yeterlidir.
Daha fazla ayrıntı için dokümantasyona/GitHub deposuna göz atabilirsiniz; her türlü geri bildirime her zaman açığız!
5 yorum
Güzel bir proje. Yıldız ekledim!!
Canavar Geunhyeok Bey…
Gerçekten çok etkileyici insanlar var..
Vay... acaba bu aracı yapmaya başlamanızın özel bir nedeni var mıydı? Ben de böyle bir şey yapmak istiyorum ama herkesin bunu hangi motivasyonla yaptığını merak ediyorum.
Son zamanlarda New Architecture’a geçmemiz gereken bir durum ortaya çıktı; TurboModule’un iç uygulamasını incelerken “buna böyle yaklaşırsak fazlasıyla mümkün olabilir” fikrinden yola çıkarak başlamış olduk!