นักพัฒนา Ruby ถกเถียงความจำเป็นของตัวจัดการภาษาใหม่เมื่อเครื่องมือ rv เกิดขึ้น

ทีมชุมชน BigGo
นักพัฒนา Ruby ถกเถียงความจำเป็นของตัวจัดการภาษาใหม่เมื่อเครื่องมือ rv เกิดขึ้น

ชุมชน Ruby กำลังคึกคักไปด้วยการพูดคุยเกี่ยวกับ rv เครื่องมือจัดการภาษาใหม่ที่สร้างด้วย Rust ซึ่งมีเป้าหมายที่จะปฏิวัติวิธีที่นักพัฒนาจัดการเวอร์ชัน Ruby และ dependencies สร้างโดย André Arko ผู้ดูแล Bundler มายาวนาน rv สัญญาว่าจะรวมฟังก์ชันการทำงานของเครื่องมือที่มีอยู่หลายตัวเข้าเป็นโซลูชันเดียวที่เร็วและครอบคลุม

ชุมชนตั้งคำถามความเพียงพอของเครื่องมือที่มีอยู่

นักพัฒนา Ruby หลายคนกำลังตั้งคำถามว่า rv แก้ไขปัญหาจริงหรือสร้างความซับซ้อนที่ไม่จำเป็น ไม่เหมือนกับระบบนิเวศของ Python ที่แยกส่วนซึ่ง uv รวมเข้าด้วยกันได้สำเร็จ Ruby มีเครื่องมือที่เป็นผู้ใหญ่และทำงานได้ดีอยู่แล้ว Bundler จัดการ dependency management ได้อย่างมีประสิทธิภาพ และ version managers ต่างๆ เช่น rbenv และ chruby ทำงานได้เชื่อถือได้สำหรับนักพัฒนาส่วนใหญ่

ความสงสัยนี้ฝังลึกในหมู่ Rubyists ที่มีประสบการณ์ซึ่งจำได้ว่าระบบนิเวศของพวกเขาแก้ปัญหาที่นักพัฒนา Python ยังคงต่อสู้อยู่จนกระทั่งเมื่อเร็วๆ นี้ บางคนกังวลว่าการแนะนำเครื่องมืออีกตัวหนึ่งอาจทำให้ภูมิทัศน์เครื่องมือของ Ruby ที่ค่อนข้างเสถียรแตกแยก อาจสร้างนรก version manager ที่รบกวนภาษาอื่นๆ

เครื่องมืออื่นๆ ที่ชุมชนแนะนำ

ตัวจัดการหลายภาษา:

  • mise (เดิมชื่อ rtx) - จัดการ runtime หลายภาษาพร้อมรองรับไฟล์ .tool-versions
  • asdf - ตัวจัดการเวอร์ชันสำหรับหลายภาษาพร้อมระบบ plugin
  • Nix + direnv - สภาพแวดล้อมการพัฒนาที่สามารถทำซ้ำได้

เครื่องมือเฉพาะ Ruby:

  • Bundler - การจัดการ dependency (มาตรฐานปัจจุบัน)
  • rbenv - การจัดการเวอร์ชัน Ruby
  • chruby - การสลับเวอร์ชัน Ruby แบบเบา
  • rvm - การจัดการเวอร์ชันและ gemset ของ Ruby

ประโยชน์ด้านความเร็วและการรวมระบบดึงดูดความสนใจ

แม้จะมีความกังวล แต่คำสัญญาของ rv ในการปรับปรุงประสิทธิภาพอย่างมีนัยสำคัญได้ดึงดูดความสนใจ เครื่องมือนี้มีเป้าหมายที่จะทำให้การติดตั้ง Ruby และการจัดการ dependency เร็วมากจนสามารถทำงานเงียบๆ ก่อนการรันคำสั่งทุกครั้ง การเพิ่มความเร็วนี้มาจากการเขียนด้วย Rust ตามแพทเทิร์นที่ประสบความสำเร็จที่ uv สร้างขึ้นในระบบนิเวศ Python

แง่มุมการรวมระบบนั้นดึงดูดใจนักพัฒนาที่ปัจจุบันต้องใช้เครื่องมือหลายตัวเป็นพิเศษ แทนที่จะจัดการ Ruby version managers แยกกัน Bundler สำหรับ dependencies และเครื่องมือติดตั้ง gem ต่างๆ rv เสนอให้จัดการทุกอย่างผ่านอินเทอร์เฟซเดียว วิธีการรวมนี้อาจทำให้การปฐมนิเทศนักพัฒนาใหม่ง่ายขึ้นและลดภาระทางปัญญาในการจำไวยากรณ์คำสั่งที่แตกต่างกัน

ความชอบเครื่องมือหลายภาษาเกิดขึ้น

ส่วนสำคัญของการพูดคุยเผยให้เห็นว่านักพัฒนาหลายคนชอบเครื่องมือสากลเช่น mise (เดิมชื่อ rtx) หรือ asdf ที่จัดการภาษาโปรแกรมหลายภาษาพร้อมกัน นักพัฒนาเหล่านี้ทำงานข้ามสแต็กเทคโนโลยีที่แตกต่างกันและพบว่าเครื่องมือเฉพาะภาษามีข้อจำกัด

ฉันรู้สึกว่าเครื่องมือประเภทนี้มีประโยชน์ก็ต่อเมื่อ Ruby เป็นภาษาเดียวที่คุณใช้ ฉันต้องจัดการ runtime หลายตัวสำหรับโปรเจกต์ส่วนใหญ่

ความชอบนี้เน้นความตึงเครียดพื้นฐานในเครื่องมือนักพัฒนา: เครื่องมือเฉพาะทางมักให้ฟีเจอร์เฉพาะภาษาที่ดีกว่า ในขณะที่เครื่องมือสากลให้ความสอดคล้องข้ามโปรเจกต์และเทคโนโลยีที่แตกต่างกัน

ระยะเริ่มต้นทำให้เกิดความกังวลเรื่องการใช้งาน

ข้อจำกัดปัจจุบันของ rv ทำให้ความกระตือรือร้นบางส่วนลดลง เครื่องมือนี้ปัจจุบันรองรับเฉพาะ Ruby 3.4.1 และเวอร์ชันที่ใหม่กว่า และฟีเจอร์หลักหลายอย่างยังไม่ได้ใช้งาน นักพัฒนาบางคนกังวลเกี่ยวกับความเข้ากันได้กับรูปแบบ Gemfile.lock ที่มีอยู่และว่า rv จะจัดการ dependency resolution ที่ซับซ้อนซึ่ง Bundler ได้ปรับแต่งมาหลายปีได้อย่างเหมาะสมหรือไม่

การเลือกเขียน rv ด้วย Rust แทนที่จะเป็น Ruby เองได้จุดประกายการถกเถียงเชิงปรัชญาเกี่ยวกับว่าเครื่องมือระบบนิเวศควรสร้างด้วยภาษาเป้าหมายของพวกเขาหรือไม่ แม้ว่า Rust จะให้ประโยชน์ด้านประสิทธิภาพ แต่อาจสร้างอุปสรรคสำหรับนักพัฒนา Ruby ที่ต้องการมีส่วนร่วมในการพัฒนาเครื่องมือ

ความสามารถปัจจุบันของ rv เทียบกับฟีเจอร์ที่วางแผนไว้

สิ่งที่ใช้งานได้ในปัจจุบัน:

  • การสลับระหว่างเวอร์ชัน Ruby ที่ติดตั้งแล้วใน zsh โดยอัตโนมัติ
  • การติดตั้ง Ruby 3.4.x แบบ precompiled บน macOS และ Ubuntu ในเวลาประมาณ 1 วินาที
  • การจัดการเวอร์ชัน Ruby พื้นฐาน

ฟีเจอร์ที่วางแผนไว้:

  • rv exec - รันคำสั่ง CLI พร้อมการติดตั้ง dependency อัตโนมัติ
  • rv tool install - ติดตั้ง gems เป็นเครื่องมือ CLI แบบแยกส่วน
  • รองรับ script ที่มีข้อมูลเวอร์ชัน Ruby และ dependency ฝังอยู่
  • ความเข้ากันได้กับ Bundler อย่างสมบูรณ์และการแก้ไข dependency ที่เร็วขึ้น
  • รองรับ Ruby เวอร์ชันเก่า

สรุป

โปรเจกต์ rv แสดงถึงความพยายามที่ทะเยอทะยานในการทำให้ภูมิทัศน์เครื่องมือของ Ruby ทันสมัยโดยเรียนรู้จากนวัตกรรมในระบบนิเวศอื่นๆ อย่างไรก็ตาม การตอบรับที่หลากหลายของชุมชน Ruby สะท้อนถึงความพึงพอใจกับโซลูชันที่มีอยู่และความระมัดระวังต่อความซับซ้อนที่ไม่จำเป็น ว่า rv จะได้รับการยอมรับอย่างกว้างขวางหรือไม่ขึ้นอยู่กับความสามารถในการส่งมอบประโยชน์ที่น่าสนใจซึ่งมีค่ามากกว่าต้นทุนการเปลี่ยนแปลงสำหรับนักพัฒนาที่สบายใจกับเครื่องมือปัจจุบันแล้ว

อ้างอิง: rv, a new kind of Ruby management tool