ขอแนะนำ Craby เครื่องมือที่ช่วยผสานรวมโมดูลที่พัฒนาด้วย Rust เข้ากับ TurboModule แบบ C++ ล้วนใน React Native ได้
ดูเอกสารได้ที่: https://craby.rs
GitHub: https://github.com/leegeunhyeok/craby
Craby คืออะไร?
Craby เป็นเครื่องมือพัฒนาที่ช่วยให้คุณเขียนเนทีฟโมดูลประสิทธิภาพสูงด้วย Rust พร้อมคงความปลอดภัยของชนิดข้อมูลตลอดทั้งสแตก TypeScript - Rust - C++ ได้ โดยไม่ต้องมีเลเยอร์เฉพาะแพลตฟอร์มของ React Native TurboModule (ObjCTurboModule/JavaTurboModule) แต่เชื่อมต่อโดยตรงกับ TurboModule แบบ C++ ล้วน เพื่อดึงประสิทธิภาพสูงสุดออกมา
ประสิทธิภาพ
การเปรียบเทียบเบนช์มาร์กกับโซลูชันอื่น (ดูเบนช์มาร์ก):
- เร็วกว่า ExpoModules 20-80 เท่า
- เร็วกว่า TurboModules มาตรฐาน 15-20 เท่า
- เร็วกว่า NitroModules (พัฒนาด้วย Swift/Kotlin ไม่ใช่ C++) 25~30%
นี่เป็นการทดสอบ throughput แบบสุดขั้ว (เรียกใช้งาน 100,000 ครั้ง) ผลลัพธ์ในสภาพแวดล้อมการใช้งานจริงอาจแตกต่างกัน โปรดใช้เป็นข้อมูลอ้างอิงเท่านั้น
ฟีเจอร์หลัก
- สร้างโค้ดอัตโนมัติ: เมื่อกำหนด API ด้วย TypeScript จะสร้าง Rust/C++ bindings ให้อัตโนมัติ
- ความปลอดภัยของชนิดข้อมูล: ตรวจสอบชนิดข้อมูลระหว่าง TypeScript, Rust และ C++ ตั้งแต่คอมไพล์ไทม์
- Zero-Cost FFI: ลดโอเวอร์เฮดของการทำงานร่วมกันระหว่าง Rust-C++ ให้เหลือน้อยที่สุดผ่าน cxx
- API ที่เรียบง่าย: โฟกัสแค่การพัฒนา implementation ฝั่ง Rust ที่เหลือ Craby จัดการให้
ตัวอย่างการใช้งาน
// โมดูล schema definition (TypeScript)
interface Spec extends NativeModule {
add(a: number, b: number): number;
}
// actual module implementation (Rust)
#[craby_module]
impl CalculatorSpec for Calculator {
fn add(&mut self, a: Number, b: Number) -> Number {
a + b
}
}
Craby จะสร้างโค้ด bridging ทั้งหมดให้อัตโนมัติ และผู้ใช้เพียงแค่พัฒนาโมดูลจริง (Rust) เท่านั้น
รายละเอียดเพิ่มเติมดูได้จากเอกสาร/รีโพซิทอรี GitHub และยินดีรับฟีดแบ็กหลากหลายรูปแบบเสมอ!
5 ความคิดเห็น
เป็นโปรเจกต์ที่ดีมากเลยครับ กดดาวเพิ่มให้แล้ว!!
คุณคึนฮยอกเป็นสัตว์ประหลาดจริง ๆ…
มีคนที่เก่งมาก ๆ เยอะจริง ๆ เลย..
ว้าว... ไม่ทราบว่ามีแรงบันดาลใจอะไรเป็นพิเศษที่ทำให้คุณสร้างเครื่องมือนี้ขึ้นมาหรือเปล่าครับ? ผมเองก็อยากลองทำอะไรแบบนี้ดูเหมือนกัน เลยสงสัยว่าปกติแล้วแต่ละคนมีจุดเริ่มต้นหรือแรงผลักดันอะไรถึงได้สร้างมันขึ้นมาครับ
เมื่อไม่นานมานี้มีสถานการณ์ที่ต้องย้ายไปใช้ New Architecture และระหว่างที่กำลังดูการทำงานภายในของ TurboModule ก็เริ่มจากไอเดียที่ว่า “ถ้าเข้าถึงแบบนี้ก็น่าจะมีความเป็นไปได้มากพอเลยนะ”!