- ช่วยให้สร้างซอฟต์แวร์แบบ concurrent ได้ง่าย และพัฒนาได้โดยไม่ต้องกังวลเรื่องประสิทธิภาพที่คาดเดาไม่ได้, runtime error, data race และ type error
- มีจุดเด่นอย่างการจัดการหน่วยความจำอัตโนมัติ, move semantics, static typing, concurrency ที่ปลอดภัยด้านชนิดข้อมูล และการจัดการข้อผิดพลาดอย่างมีประสิทธิภาพ
การจัดการหน่วยความจำอัตโนมัติแบบกำหนดได้
- Inko ไม่พึ่งพา garbage collection แต่ใช้การจัดการหน่วยความจำที่อิงกับ single ownership และ move semantics
- ค่าที่เป็นเจ้าของจะถูกลบเมื่อออกจากขอบเขต และสามารถถูกยืมแบบ immutable หรือ mutable ได้
- การใช้ single ownership ช่วยให้ได้พฤติกรรมและประสิทธิภาพที่คาดเดาได้ โดยไม่ต้องเสียเวลาไปกับการตั้งค่า garbage collection
Inko ปลอดภัย
- เมื่อใช้ Inko คุณไม่ต้องกังวลกับข้อผิดพลาดที่พบบ่อยในภาษาอื่น เช่น NULL pointer, use-after-free, runtime error และ data race
- มี Option type สำหรับข้อมูลที่อาจมีหรือไม่มีค่า และรองรับทั้งการอ้างอิงแบบ immutable และ mutable เพื่อจำกัดการเปลี่ยนแปลงได้ตามต้องการ
ทำให้ concurrency เป็นเรื่องง่าย
- Inko ใช้ lightweight process ในการทำ concurrency และใช้โมเดล concurrency ที่ได้รับแรงบันดาลใจจาก Erlang และ Pony
- แต่ละ process ถูกแยกออกจากกันและสื่อสารกันผ่านข้อความ โดยคอมไพเลอร์จะรับประกันความถูกต้องผ่านการตรวจสอบชนิดข้อมูล
- เมื่อมีการส่งข้อมูลระหว่าง process ระบบจะรับประกันความเป็นเอกลักษณ์ของข้อมูล ทำให้ data race เป็นไปไม่ได้
จัดการข้อผิดพลาดอย่างถูกต้อง
- Inko ใช้วิธีจัดการข้อผิดพลาดที่ได้รับแรงบันดาลใจจากบทความ "The Error Model" ของ Joe Duffy
- ข้อผิดพลาดจะแสดงด้วย algebraic type ที่ชื่อว่า "Result" และมีการย่อรูปไวยากรณ์ผ่าน try และ throw
- สำหรับข้อผิดพลาดร้ายแรงที่ไม่สามารถหรือไม่ควรถูกจัดการ ระบบรองรับ "panics" เพื่อหยุดการทำงานของโปรแกรม
มีประสิทธิภาพ
- Inko ไม่ได้มุ่งแข่งขันกับภาษาระดับล่างอย่าง C หรือ Rust แต่ต้องการเป็นทางเลือกที่น่าสนใจสำหรับภาษาอย่าง Ruby, Erlang และ Go
- ใช้คอมไพเลอร์ที่คอมไพล์เป็น native code โดยมี LLVM เป็น backend และให้สมดุลระหว่างเวลาในการคอมไพล์ที่รวดเร็วกับประสิทธิภาพขณะรันที่ดี
- native code จะถูกลิงก์แบบ static เข้ากับไลบรารี runtime ขนาดเล็กที่เขียนด้วย Rust ซึ่งจัดการเรื่อง process scheduling, non-blocking IO เป็นต้น
Pattern matching
- Inko รองรับ pattern matching สำหรับชนิดข้อมูลหลากหลาย เช่น tuple และ algebraic data type
- pattern matching จะถูกคอมไพล์เป็น decision tree และคอมไพเลอร์จะพยายามรักษาขนาดให้เล็กที่สุดเท่าที่เป็นไปได้
- คอมไพเลอร์รับประกันว่าครอบคลุมทุก pattern ที่เป็นไปได้
3 ความคิดเห็น
ทำสิ่งที่คล้ายกับ Rust ด้วย Rust งั้นเหรอ ??
การจัดการแพ็กเกจต้องพึ่งพา Github นี่ก็แอบไม่ค่อยโอเคนะครับ อยากให้คำนึงถึงสภาพแวดล้อมที่ไม่สามารถเชื่อมต่ออินเทอร์เน็ตได้บ้าง…
ความคิดเห็นบน Hacker News
โมเดล concurrency ของ Inko ได้แรงบันดาลใจจาก Erlang และ Pony และใช้ process แบบ lightweight
หากต้องการเพิ่มแพ็กเกจ Inko จะต้องสร้าง GitHub repository
มีการให้ลิงก์ไปยังการพูดคุยเกี่ยวกับ Inko:
มีการตั้งคำถามถึงความคล้ายกับ Rust:
มีการแสดงความสนใจใน Inko และหวังว่ามันจะเป็น Golang ที่อยากได้:
มีการแชร์เกร็ดน่าสนใจว่าชื่อ Inko ในภาษาเตลูกูแปลว่า "อีกหนึ่ง"
มีการพูดคุยถึงความแตกต่างด้านไวยากรณ์กับ Rust:
มีการประเมินเชิงบวกต่อการตัดสินใจด้านการออกแบบของ Inko:
มีการกล่าวถึงความจำเป็นของ prebuilt binary:
มีการเพิ่มลิงก์ไปยังการพูดคุยที่เกี่ยวข้องเพิ่มเติม