Giới thiệu Craby, một công cụ giúp tích hợp các mô-đun dựa trên Rust với TurboModule C++ thuần trong React Native.
Xem tài liệu: https://craby.rs
GitHub: https://github.com/leegeunhyeok/craby
Craby là gì?
Craby là một công cụ phát triển cho phép viết mô-đun native hiệu năng cao bằng Rust đồng thời duy trì tính an toàn kiểu trên toàn bộ stack TypeScript - Rust - C++. Không cần các lớp theo nền tảng của React Native TurboModule (ObjCTurboModule/JavaTurboModule), nó tích hợp trực tiếp với TurboModule C++ thuần để khai thác hiệu năng tối đa.
Hiệu năng
So sánh benchmark với các giải pháp khác (xem benchmark):
- Nhanh hơn 20-80 lần so với ExpoModules
- Nhanh hơn 15-20 lần so với TurboModules tiêu chuẩn
- Nhanh hơn 25~30% so với NitroModules (dựa trên Swift/Kotlin, không phải C++)
Đây là bài kiểm tra thông lượng ở mức cực đoan (100.000 lần gọi), nên kết quả trong môi trường sử dụng thực tế có thể khác và chỉ nên dùng để tham khảo.
Tính năng chính
- Tự động sinh mã: định nghĩa API bằng TypeScript, sau đó tự động tạo binding Rust/C++
- An toàn kiểu: kiểm tra kiểu tại thời điểm biên dịch giữa TypeScript, Rust và C++
- Zero-Cost FFI: giảm tối thiểu overhead tương tác Rust-C++ thông qua cxx
- API đơn giản: chỉ cần tập trung vào phần triển khai Rust, phần còn lại để Craby xử lý
Ví dụ sử dụng
// 모듈 스키마 정의 (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
}
}
Toàn bộ mã bridging đều được Craby tự động tạo, và người dùng chỉ cần triển khai mô-đun thực tế (Rust).
Để biết thêm chi tiết, vui lòng tham khảo tài liệu/kho GitHub, và mọi phản hồi đa dạng đều luôn được chào đón!
5 bình luận
Dự án hay đấy. Mình đã thêm sao rồi!!
Ngài Geunhyeok quái vật…
Đúng là có rất nhiều người thực sự quá xuất sắc..
Wow... không biết anh/chị bắt đầu làm công cụ này vì lý do gì vậy? Tôi cũng muốn thử làm những thứ như thế này, nên khá tò mò không biết mọi người thường có động lực nào để bắt tay vào làm.
Gần đây xuất hiện tình huống buộc phải chuyển sang New Architecture, và trong lúc xem xét cách triển khai bên trong TurboModule, tôi bắt đầu từ một ý tưởng kiểu như “nếu tiếp cận theo cách này thì hoàn toàn có khả năng đấy!”