10 คะแนน โดย xguru 2023-11-18 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • ช่วยให้สร้างซอฟต์แวร์แบบ 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 ความคิดเห็น

 
ahwjdekf 2023-11-18

ทำสิ่งที่คล้ายกับ Rust ด้วย Rust งั้นเหรอ ??

 
regentag 2023-11-18

การจัดการแพ็กเกจต้องพึ่งพา Github นี่ก็แอบไม่ค่อยโอเคนะครับ อยากให้คำนึงถึงสภาพแวดล้อมที่ไม่สามารถเชื่อมต่ออินเทอร์เน็ตได้บ้าง…

 
xguru 2023-11-18
ความคิดเห็นบน Hacker News
  • โมเดล concurrency ของ Inko ได้แรงบันดาลใจจาก Erlang และ Pony และใช้ process แบบ lightweight

    • process แยกจากกันและสื่อสารกันผ่าน message
    • process และ message ถูกกำหนดด้วย class และ method และ compiler รับประกันความถูกต้องผ่านการตรวจสอบ type
    • ข้อมูลถูกส่งข้ามระหว่าง process แบบมีเจ้าของเพียงหนึ่งเดียว ทำให้ data race เป็นไปไม่ได้ และไม่จำเป็นต้อง deep copy
    • รองรับ channel แบบหลายผู้ผลิตและหลายผู้บริโภค ทำให้สื่อสารระหว่าง process ได้โดยไม่ต้องมีการอ้างอิงถึงกันอย่างชัดเจน
  • หากต้องการเพิ่มแพ็กเกจ Inko จะต้องสร้าง GitHub repository

    • package manager ของ Inko รองรับ Git repository อื่น ๆ เช่น GitLab ด้วย แต่ระบบรายชื่อถูกจัดทำขึ้นโดยใช้ GitHub repository
    • มีการแสดงความกังวลต่อแนวโน้มที่ชุมชนต้องพึ่งพาผลิตภัณฑ์ของ Microsoft และ Git
  • มีการให้ลิงก์ไปยังการพูดคุยเกี่ยวกับ Inko:

    • "Show HN: Inko 0.10.0 – build concurrent software with confidence" (กันยายน 2022, 3 ความเห็น)
    • "Inko 0.5.0 released, featuring the first steps towards a self-hosting compiler" (กันยายน 2019, 7 ความเห็น)
    • "Inko (a gradually-typed object-oriented programming language) 0.4.0 released" (พฤษภาคม 2019, 1 ความเห็น)
    • "Show HN: Inko – A safe and concurrent object-oriented programming language" (สิงหาคม 2018, 45 ความเห็น)
  • มีการตั้งคำถามถึงความคล้ายกับ Rust:

    • ถามว่า Inko คล้าย Rust มากพอจนไม่มีเหตุผลให้เลือก Inko แทน Rust หรือไม่
    • ต้องการตัวอย่างว่าโปรแกรมแบบใดที่เขียนยากหรือยุ่งยากใน Rust แต่เขียนได้ง่ายใน Inko
  • มีการแสดงความสนใจใน Inko และหวังว่ามันจะเป็น Golang ที่อยากได้:

    • ดูเหมือนว่า Inko เริ่มต้นบน GitLab พร้อมกับการกล่าวถึงความหวังให้มันเป็น Golang ที่อยากได้ และความจำเป็นของ GC
    • มีคำถามถึงจุดแตกต่างจาก Gleam และความสนใจในแนวทางใช้ประโยชน์จาก ecosystem ของ JVM
  • มีการแชร์เกร็ดน่าสนใจว่าชื่อ Inko ในภาษาเตลูกูแปลว่า "อีกหนึ่ง"

  • มีการพูดคุยถึงความแตกต่างด้านไวยากรณ์กับ Rust:

    • มีการเปรียบเทียบรายละเอียดความต่างด้านไวยากรณ์ระหว่าง Rust กับ Inko
    • มีการกล่าวถึงความต่างเล็ก ๆ เช่น การประกาศฟังก์ชันและการเขียน generic
  • มีการประเมินเชิงบวกต่อการตัดสินใจด้านการออกแบบของ Inko:

    • ไวยากรณ์ที่คล้ายภาษาในตระกูล C/Java ช่วยให้หลายคนคุ้นเคยได้ง่าย
    • มีการตั้งคำถามต่อการตั้งชื่อส่วนของการจัดการข้อผิดพลาด
  • มีการกล่าวถึงความจำเป็นของ prebuilt binary:

    • มีการพูดถึงความยากในการคอมไพล์จากปัญหา LLVM และผลที่ทำให้ความสนใจใน Inko ลดลง
  • มีการเพิ่มลิงก์ไปยังการพูดคุยที่เกี่ยวข้องเพิ่มเติม