นักพัฒนา OCaml ถกเถียงเรื่องช่องว่างด้านประสิทธิภาพ ขณะที่เครื่องมือ Refactoring ใหม่เปิดตัวใน Merlin

ทีมชุมชน BigGo
นักพัฒนา OCaml ถกเถียงเรื่องช่องว่างด้านประสิทธิภาพ ขณะที่เครื่องมือ Refactoring ใหม่เปิดตัวใน Merlin

ชุมชน OCaml กำลังคึกคักไปด้วยการอภิปรายเกี่ยวกับประสิทธิภาพของภาษาและการปรับปรุงเครื่องมือต่างๆ หลังจากการประกาศความสามารถด้าน refactoring ใหม่ใน Merlin ซึ่งเป็น language server ยอดนิยมของ OCaml แม้ว่านักพัฒนาจะเฉลิมฉลองการสนับสนุน editor ที่ดีขึ้น แต่การเปรียบเทียบประสิทธิภาพที่น่าแปลกใจได้จุดประกายการถกเถียงเกี่ยวกับตำแหน่งการแข่งขันของ OCaml

เครื่องมือ Refactoring ใหม่แสดงให้เห็นความหวัง แต่ยังมีคำถามเรื่องการสนับสนุน Editor

ฟีเจอร์การแยกนิพจน์ (expression extraction) ที่เพิ่งเปิดตัวใน Merlin เป็นก้าวสำคัญไปข้างหน้าสำหรับเครื่องมือพัฒนา OCaml ความสามารถด้าน refactoring นี้สามารถแยกส่วนของโค้ดออกเป็นฟังก์ชันหรือค่าคงที่แยกต่างหากได้อย่างชาญฉลาด พร้อมจัดการกับสถานการณ์ที่ซับซ้อนเช่นตัวแปรอิสระและ side effects เครื่องมือนี้แสดงให้เห็นการวิเคราะห์ที่ซับซ้อนโดยใช้ thunks สำหรับนิพจน์ที่ไม่บริสุทธิ์ และสร้างพารามิเตอร์ฟังก์ชันโดยอัตโนมัติสำหรับตัวแปรที่อาจจะอยู่นอกขอบเขต

อย่างไรก็ตาม ข้อเสนอแนะจากชุมชนเผยให้เห็นความกังวลที่ยังคงมีอยู่เกี่ยวกับการแยกส่วนของระบบนิเวศ editor นักพัฒนาบางคนรู้สึกว่าเครื่องมือของ OCaml ยังคงเน้นไปที่ Emacs มากเกินไป ซึ่งอาจจำกัดการนำไปใช้ในหมู่โปรแกรมเมอร์ที่ชอบ editor อื่นๆ เช่น VSCode ทีมพัฒนาได้ตอบสนองโดยเน้นย้ำความมุ่งมั่นของพวกเขาต่อความเข้ากันได้ข้าม editor ผ่านการสนับสนุน Language Server Protocol แม้ว่าฟีเจอร์ขั้นสูงเช่นการตั้งชื่อแบบกำหนดเองยังคงต้องการการนำไปใช้เฉพาะ editor

ฟีเจอร์ Refactoring ใหม่ของ Merlin

  • การสกัด expression ไปยัง top-level bindings
  • การตรวจจับ free variable อัตโนมัติและการกำหนดพารามิเตอร์
  • การจัดการ impure expressions อย่างชาญฉลาดโดยใช้ thunks
  • รองรับการสกัด constants, expressions และ code blocks ที่ซับซ้อน
  • การรวมเข้ากับ LSP ทั้งแบบ code actions และ custom requests

การทดสอบประสิทธิภาพเผยให้เห็นความแตกต่างด้านความเร็วอย่างมีนัยสำคัญ

การเปรียบเทียบประสิทธิภาพที่น่าทึ่งที่สมาชิกชุมชนแชร์ได้ทำให้หลายคนในแวดวงการเขียนโปรแกรมเชิงฟังก์ชันต้องตกใจ ในการทดสอบที่เกี่ยวข้องกับการคำนวณทางคณิตศาสตร์บน M4 Mac Studio , OCaml แสดงช่องว่างด้านประสิทธิภาพที่สำคัญเมื่อเปรียบเทียบกับภาษาอื่นๆ การทดสอบวัดการนับรอบสำหรับ signed permutations โดย C++ และ Rust นำหน้าด้วยคะแนนสัมพัทธ์ 100 และ 99 ในขณะที่ OCaml ได้คะแนน 48 - น้อยกว่าครึ่งหนึ่งของความเร็วของผู้นำ

สิ่งที่อาจน่ากังวลมากกว่าสำหรับชุมชน OCaml คือ F# - ญาติใกล้ชิดของ OCaml บนแพลตฟอร์ม .NET - ได้คะแนน 96 ซึ่งเกือบสองเท่าของประสิทธิภาพของ OCaml การเปิดเผยนี้ได้กระตุ้นให้เกิดการอภิปรายเกี่ยวกับกลยุทธ์การปรับปรุงประสิทธิภาพและว่าการพิจารณาด้านประสิทธิภาพควรมีอิทธิพลต่อการเลือกภาษาสำหรับโปรเจกต์ที่ต้องการการคำนวณเข้มข้นหรือไม่

F# เป็นญาติใกล้ชิดมากกับ OCaml F# อ่านได้ชัดเจนกว่า OCaml และเร็วกว่าสองเท่า

ผลการทดสอบประสิทธิภาพ ( M4 Mac Studio , n=10 signed permutations)

  • C++ : 100 (เป็นค่าอ้างอิง)
  • Rust : 99
  • F : 96
  • OCaml : 48
  • Chez Scheme : 41
  • Swift : 34
ความหลากหลายของเครื่องมือเป็นสัญลักษณ์ของการอภิปรายที่ดำเนินอยู่เกี่ยวกับการเพิ่มประสิทธิภาพการเขียนโปรแกรม ซึ่งแสดงถึงการแสวงหาความสามารถในการแข่งขันของ OCaml ในโลกของการเขียนโปรแกรมเชิงฟังก์ชัน
ความหลากหลายของเครื่องมือเป็นสัญลักษณ์ของการอภิปรายที่ดำเนินอยู่เกี่ยวกับการเพิ่มประสิทธิภาพการเขียนโปรแกรม ซึ่งแสดงถึงการแสวงหาความสามารถในการแข่งขันของ OCaml ในโลกของการเขียนโปรแกรมเชิงฟังก์ชัน

ชุมชนแสวงหาความสมดุลระหว่างฟีเจอร์และพื้นฐาน

ช่วงเวลาของการอภิปรายเหล่านี้เน้นย้ำถึงความท้าทายทั่วไปในการพัฒนาภาษาโปรแกรมมิ่ง: การสร้างสมดุลระหว่างฟีเจอร์เครื่องมือขั้นสูงกับการปรับปรุงประสิทธิภาพหลัก แม้ว่านักพัฒนาจะชื่นชมความสามารถด้าน refactoring ที่ซับซ้อน แต่บางคนกำลังตั้งคำถามว่าทรัพยากรอาจจะถูกจัดสรรไปยังการปรับปรุงประสิทธิภาพและการพัฒนาภาษาพื้นฐานได้ดีกว่าหรือไม่

การตอบสนองของชุมชนแสดงให้เห็นความปรารถนาทั้งประสบการณ์นักพัฒนาที่ดีขึ้นและประสิทธิภาพรันไทม์ที่แข่งขันได้ สมาชิกบางคนกำลังสำรวจ refactoring ที่ช่วยด้วย AI เป็นแนวทางทางเลือก ในขณะที่คนอื่นๆ เน้นความจำเป็นในการสนับสนุนการดีบักที่ดีกว่านอกเหนือจากฟีเจอร์ breakpoint ทดลองในปัจจุบัน

ระบบนิเวศการพัฒนา OCaml ดูเหมือนจะอยู่ที่ทางแยก โดยมีความก้าวหน้าด้านเครื่องมือที่น่าประทับใจเช่นฟีเจอร์ refactoring ใหม่ของ Merlin ที่แสดงให้เห็นสภาพแวดล้อมการพัฒนาที่ซับซ้อนของภาษา ในขณะที่การทดสอบประสิทธิภาพแสดงให้เห็นพื้นที่ที่การปรับปรุงพื้นฐานสามารถเสริมสร้างตำแหน่งของ OCaml ในแวดวงการเขียนโปรแกรมเชิงฟังก์ชันที่มีการแข่งขัน

อ้างอิง: Internship Report: Refactoring Tools Coming to Merlin