OxCaml: ชุดส่วนขยายสำหรับภาษาโปรแกรม OCaml
(oxcaml.org)- 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 ออกมา
ยังไม่มีความคิดเห็น