- ภาษาสคริปต์และเอนจินรันไทม์ ที่สามารถฝังลงในแอปพลิเคชัน Rust ได้อย่างง่ายดาย
- ออกแบบมาเพื่อให้เพิ่มลอจิกแบบไดนามิกผ่านสคริปต์ภายนอก หรือสร้าง DSL แบบกำหนดเองได้
- มีความเข้ากันได้กับ Rust สูง พร้อมสถาปัตยกรรมที่คำนึงถึงทั้งประสิทธิภาพ ความปลอดภัย และความสามารถในการขยาย
- ทำงานได้บน ทุกแพลตฟอร์มที่ Rust รองรับ ตั้งแต่ Rust 1.66.0+ ขึ้นไป (WASM,
no-std)
- ไวยากรณ์ เป็นภาษากำหนดชนิดแบบไดนามิกที่คล้าย JavaScript + Rust
- ประสิทธิภาพ: บน Linux VM แบบคอร์เดียว 2.6GHz ใช้เวลา 0.14 วินาทีในการรันวนซ้ำ 1 ล้านครั้ง
- การผสานรวมกับ Rust แบบเนทีฟ: รองรับฟังก์ชัน ชนิดข้อมูล getter/setter เมธอด และ indexer ของ Rust
- สามารถส่งค่าของ Rust เข้าไปในสคริปต์เป็นตัวแปร/ค่าคงที่ได้ (ใช้
Scope)
- รองรับ ชนิดข้อมูล หลัก: บูลีน จำนวนเต็ม จำนวนทศนิยม
Decimal สตริง อักขระยูนิโค้ด อาร์เรย์ ไบต์อาร์เรย์ และ object map
- สามารถเรียกฟังก์ชันที่นิยามในสคริปต์ Rhai จาก Rust ได้
- ลดการพึ่งพาไลบรารีให้น้อยที่สุด (ใช้เพียงไม่กี่ไลบรารี เช่น smallvec, thin-vec)
- เอนจินแบบ re-entrant: ทำให้รองรับ
Send + Sync ได้ผ่าน sync
- มีความสามารถในการคอมไพล์และปรับแต่ง AST ให้เหมาะสม
- รองรับ ระบบปลั๊กอิน และการขยาย API แบบใช้แมโคร
- รองรับการโอเวอร์โหลดฟังก์ชัน/โอเปอเรเตอร์ ฟังก์ชันพอยน์เตอร์ การทำ currying คลोजเชอร์ และบางส่วนของ OOP pattern
- มีระบบโมดูล ทำให้จัดองค์ประกอบฐานโค้ดแบบไดนามิกได้
- รองรับ
serde serialization/deserialization (ทางเลือก)
- มี อินเทอร์เฟซดีบัก ให้ใช้งาน
ความปลอดภัยและความมั่นคง
- รับประกัน Don’t Panic: หากเกิด panic จะถือว่าเป็นบั๊ก และระบบโฮสต์ยังคงปลอดภัย
- การรันแบบแซนด์บ็อกซ์: ไม่สามารถเปลี่ยนแปลงสภาพแวดล้อมภายนอกได้ เว้นแต่จะอนุญาตไว้อย่างชัดเจน
- ป้องกันการโจมตีที่เป็นอันตราย: บล็อก stack overflow ข้อมูลที่มากเกินไป และการรันไม่สิ้นสุด
- สามารถติดตามสถานะความคืบหน้าของการรันและยุติการทำงานด้วยตนเองได้
- ผ่านการตรวจสอบด้วย Miri แล้ว
สำหรับผู้ที่ต้องการสร้างภาษาคัสตอม
- สามารถใช้ Rhai เป็น DSL ได้
- ปิดใช้งานฟีเจอร์ภาษาบางอย่าง เช่น loop ได้
- ปิดหรือจำกัดคีย์เวิร์ด/โอเปอเรเตอร์ได้
- เพิ่มโอเปอเรเตอร์และไวยากรณ์แบบกำหนดเองได้
แหล่งข้อมูลเพิ่มเติม
ใบอนุญาต
- เลือกใช้ได้ระหว่าง Apache 2.0 หรือ MIT
- โค้ดที่มีการร่วมพัฒนาจะใช้สัญญาอนุญาตแบบคู่โดยปริยาย
3 ความคิดเห็น
ถ้ากำลังมองหาภาษาสคริปต์อยู่ ใน are we game yet มีลิสต์อยู่พอสมควรครับ
https://arewegameyet.rs/ecosystem/scripting/
ในลิสต์นั้นไม่มี แต่ช่วงนี้ผมไปถาม GPT มาแล้วก็เจอภาษาสคริปต์ชื่อ koto ด้วย เลยลองดูผ่าน ๆ แป๊บหนึ่ง แล้วรู้สึกว่าอันนี้ก็ดูน่าสนใจเหมือนกันครับ
https://koto.dev/
พอค้นไปเรื่อย ๆ ก็เจออีกตัวชื่อ roto แต่ยังไม่ได้ดูละเอียดว่ามันเป็นแบบไหน แค่รู้สึกว่าชื่อองค์กรที่ทำคุ้นตามากครับ
https://github.com/NLnetLabs/roto
มีตัวอย่างการวัดเวลาใน wasm playground อยู่ แต่ก็ไม่ได้เร็วเลยนี่?
เนื่องจากมันเป็นภาษาที่มีจุดประสงค์เพื่อการทำสคริปต์ จึงเป็นเรื่องปกติที่มันจะไม่เร็วมากนัก