• OxCaml คือชุดส่วนขยายที่เปลี่ยนแปลงอย่างรวดเร็ว ซึ่งเพิ่มส่วนขยายเชิงประสิทธิภาพให้กับ OCaml เป็นทั้งคอมไพเลอร์ที่ใช้จริงในโปรดักชันของ Jane Street และพื้นที่ทดลองเพื่อปรับปรุง OCaml
  • มุ่งออกแบบให้ควบคุมพฤติกรรมของโปรแกรมที่มีผลต่อประสิทธิภาพได้อย่าง ปลอดภัย สะดวก และคาดเดาได้ พร้อมผลักภาระความซับซ้อนไปเฉพาะโค้ดที่จำเป็นเท่านั้น
  • โปรแกรม OCaml ที่ถูกต้องทุกโปรแกรมยังถูกต้องใน OxCaml ด้วย โดยมีเป้าหมายให้รู้สึกเหมือนเป็น วิวัฒนาการของ OCaml มากกว่าภาษาใหม่
  • ส่วนขยายแบ่งเป็นด้านต่าง ๆ เช่น concurrency ที่ตัด data race ออกได้แบบ static, การจัดวางหน่วยความจำและการเข้าถึง SIMD, การควบคุม allocation, และฟีเจอร์อำนวยความสะดวกอย่าง polymorphic parameters, include functor, labeled tuples และ immutable arrays
  • แม้เป็นโอเพนซอร์ส แต่ไม่รับประกันเสถียรภาพหรือ backward compatibility ของส่วนขยาย และมีชุดเครื่องมือ OCaml ที่ปรับแก้แล้วให้ใช้ รวมถึง package management ที่เข้ากันได้กับ dune และ opam, LSP, formatter และเครื่องมือสร้างเอกสาร

เป้าหมายและหลักการออกแบบของ OxCaml

  • OxCaml คือชุดส่วนขยายที่เปลี่ยนแปลงอย่างรวดเร็วสำหรับภาษาโปรแกรม OCaml
    • ใช้เป็น คอมไพเลอร์โปรดักชัน ของ Jane Street
    • ยังเป็นพื้นที่ทดลองสำหรับปรับปรุง OCaml ให้เหมาะกับการเขียนโปรแกรมที่เน้นประสิทธิภาพ
    • หวังว่าเมื่อเวลาผ่านไปจะสามารถส่งต่อส่วนขยายบางส่วนกลับเข้า upstream OCaml ได้
  • เป้าหมายการออกแบบหลักคือการควบคุมพฤติกรรมของโปรแกรมที่สำคัญต่อประสิทธิภาพได้อย่าง ปลอดภัย สะดวก และคาดเดาได้
    • ความปลอดภัยถือเป็นคุณสมบัติสำคัญต่อประสิทธิภาพของโปรแกรมเมอร์และการส่งมอบโค้ดที่ถูกต้อง
    • ความสะดวกเน้นการให้พลังในการควบคุมโดยไม่ต้องใส่ annotation มากเกินไป
    • พยายามรักษา type inference ของ OCaml แม้อยู่ใน type system ที่ขยายแล้ว
    • ความคาดเดาได้มุ่งรักษาและปรับปรุงคุณสมบัติที่ทำให้เข้าใจลักษณะด้านประสิทธิภาพได้ง่ายจากการอ่านโค้ด OCaml เพียงอย่างเดียว
    • ใช้แนวทางที่ทำให้รายละเอียดด้านประสิทธิภาพสำคัญแสดงออกมาอย่างชัดเจนในระดับ type
  • ใช้แนวทางแบบ pay-as-you-go คือเพิ่มความสามารถในการปรับแต่งประสิทธิภาพ แต่ไม่บังคับความซับซ้อนเพิ่มเติมกับโค้ดที่ไม่ได้ใช้ความสามารถนั้น
  • โปรแกรม OCaml ที่ถูกต้องทุกโปรแกรมยังถูกต้องใน OxCaml ด้วย
    • OxCaml มีเป้าหมายให้รู้สึกเหมือน OCaml วิวัฒนาการไปเป็นเวอร์ชันที่ดีกว่า มากกว่าจะเป็นภาษาใหม่
    • พยายามรักษาสัมผัสการออกแบบพื้นฐานของ OCaml รวมถึงความปลอดภัย ความง่าย และประสิทธิภาพการทำงานของผู้พัฒนา

ขอบเขตของส่วนขยายและเงื่อนไขการใช้งาน

  • ส่วนขยายของ OxCaml แบ่งเป็นหลายด้าน โดยเน้นการควบคุมประสิทธิภาพและความสะดวกของภาษา
    • Fearless concurrency: ตัด data race ออกแบบ static ผ่านการเพิ่มความสามารถใน type system
    • Layouts: โปรแกรมเมอร์สามารถกำหนดการจัดวางข้อมูลในหน่วยความจำได้ และเข้าถึงส่วนขยายโปรเซสเซอร์ SIMD ได้แบบ native
    • Control over allocation: มีเครื่องมือสำหรับควบคุม allocation เพื่อลดแรงกดดันต่อ GC และทำให้โปรแกรมมีประสิทธิภาพกับ cache และมีพฤติกรรมแบบ deterministic
    • Quality of life: รวมส่วนขยายที่เป็นประโยชน์ต่องานประจำวันด้วย
      • Polymorphic parameters
      • Include functor
      • Labeled tuples
      • Immutable arrays
  • OxCaml เป็น โอเพนซอร์ส และเปิดให้ผู้ใช้เชิงทดลองใช้งาน
    • โดยเฉพาะคาดหวังให้นักวิจัยและผู้ทดลองได้ลองใช้ระบบและให้ feedback
    • ส่วนขยายของ OxCaml มีลักษณะเชิงทดลองสูง จึงไม่รับประกันเสถียรภาพหรือ backward compatibility
    • อย่างไรก็ตาม ยังคงรักษา backward compatibility กับ OCaml
  • เพื่อความสะดวกในการใช้งาน มีชุดเครื่องมือมาตรฐานของ OCaml ที่ปรับแก้แล้วให้ใช้
    • package management ที่เข้ากันได้กับ dune และ opam
    • การเชื่อมรวมกับ editor ผ่าน LSP server
    • การจัดรูปแบบซอร์สโค้ด
    • การสร้างเอกสาร
  • ไลบรารีและเครื่องมือโอเพนซอร์สของ Jane Street จะปล่อยออกมาในสองรูปแบบ
    • เวอร์ชันสำหรับ upstream OCaml เป็นรูปแบบที่นำส่วนขยายของ OxCaml ออกแล้ว
    • เวอร์ชันสำหรับ OxCaml เป็นรูปแบบที่ใช้ส่วนขยายอย่างจริงจัง
    • เนื่องจากไม่ใช่ทุกส่วนขยายจะนำออกได้ ไลบรารีบางส่วนจึงมีให้เฉพาะสำหรับ OxCaml เท่านั้น
    • หากส่วนขยายที่จำเป็นถูกรวมเข้า upstream แล้ว จะปล่อยเวอร์ชันของไลบรารีนั้นที่เข้ากันได้กับ OCaml ออกมา

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น