4 คะแนน โดย xguru 2025-09-19 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • ภาษาสคริปต์และเอนจินรันไทม์ ที่สามารถฝังลงในแอปพลิเคชัน 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 ได้
  • ปิดหรือจำกัดคีย์เวิร์ด/โอเปอเรเตอร์ได้
  • เพิ่มโอเปอเรเตอร์และไวยากรณ์แบบกำหนดเองได้

แหล่งข้อมูลเพิ่มเติม

  • เว็บไซต์โครงการ: rhai.rs
  • เอกสารทางการ: The Rhai Book
  • มี Playground แบบเว็บให้ใช้งาน (สร้างบน WebAssembly)

ใบอนุญาต

  • เลือกใช้ได้ระหว่าง Apache 2.0 หรือ MIT
  • โค้ดที่มีการร่วมพัฒนาจะใช้สัญญาอนุญาตแบบคู่โดยปริยาย

3 ความคิดเห็น

 
sftblw 2025-09-19

ถ้ากำลังมองหาภาษาสคริปต์อยู่ ใน are we game yet มีลิสต์อยู่พอสมควรครับ

https://arewegameyet.rs/ecosystem/scripting/

ในลิสต์นั้นไม่มี แต่ช่วงนี้ผมไปถาม GPT มาแล้วก็เจอภาษาสคริปต์ชื่อ koto ด้วย เลยลองดูผ่าน ๆ แป๊บหนึ่ง แล้วรู้สึกว่าอันนี้ก็ดูน่าสนใจเหมือนกันครับ

https://koto.dev/

พอค้นไปเรื่อย ๆ ก็เจออีกตัวชื่อ roto แต่ยังไม่ได้ดูละเอียดว่ามันเป็นแบบไหน แค่รู้สึกว่าชื่อองค์กรที่ทำคุ้นตามากครับ

https://github.com/NLnetLabs/roto

 
coremaker 2025-09-19

มีตัวอย่างการวัดเวลาใน wasm playground อยู่ แต่ก็ไม่ได้เร็วเลยนี่?

 
sftblw 2025-09-19

เนื่องจากมันเป็นภาษาที่มีจุดประสงค์เพื่อการทำสคริปต์ จึงเป็นเรื่องปกติที่มันจะไม่เร็วมากนัก