Fish Shell 4.0 เปิดตัวแล้ว: โค้ดหลักถูกเขียนใหม่ด้วย Rust โดยไม่มีผลกระทบต่อผู้ใช้

BigGo Editorial Team
Fish Shell 4.0 เปิดตัวแล้ว: โค้ดหลักถูกเขียนใหม่ด้วย Rust โดยไม่มีผลกระทบต่อผู้ใช้

เชลล์ยอดนิยม Fish ได้ก้าวสู่เวอร์ชัน 4.0.0 ซึ่งเป็นก้าวสำคัญโดยโค้ดหลักทั้งหมดได้ถูกเขียนใหม่ด้วย Rust เปิดตัวเมื่อวันที่ 27 กุมภาพันธ์ 2568 การอัปเดตครั้งใหญ่นี้เป็นผลงานการพัฒนาเกือบสองปีครอบคลุมกว่า 2,600 คอมมิตโดยผู้มีส่วนร่วมมากกว่า 200 คน

การเขียนใหม่ด้วย Rust

การเปลี่ยนแปลงที่โดดเด่นที่สุดใน Fish 4.0 คือการเขียนโค้ดหลักทั้งหมดใหม่จาก C++ เป็น Rust การดำเนินงานขนาดใหญ่นี้เกี่ยวข้องกับการเปลี่ยนแปลงไฟล์ 1,155 ไฟล์ด้วยการเพิ่มบรรทัดกว่า 110,000 บรรทัดและลบเกือบ 89,000 บรรทัด แม้จะมีการเปลี่ยนแปลงในระดับนี้ ทีม Fish ได้เน้นย้ำว่าไม่ควรมีผลกระทบโดยตรงต่อผู้ใช้ - ซึ่งเป็นความสำเร็จที่น่าทึ่งเมื่อพิจารณาถึงลักษณะการเขียนใหม่อย่างครอบคลุม

ผมคิดว่านี่น่าประทับใจมาก ที่พวกเขาเขียนโค้ดหลักของ Fish ใหม่ทั้งหมด แต่ทุกอย่างยังคงทำงานได้เหมือนเดิมทุกประการ (ยกเว้นสิ่งเล็กๆ น้อยๆ ที่เปลี่ยนแปลงเพียงเล็กน้อย ซึ่งพวกเขาได้ระบุไว้)

โค้ดที่เขียนใหม่มีขนาดเพิ่มขึ้นจากประมาณ 55,000 บรรทัดของ C++ เป็น 75,000 บรรทัดของ Rust ตามการสนทนาในชุมชน การเพิ่มขึ้นส่วนใหญ่นี้เป็นผลมาจากรูปแบบการจัดวางของ Rust ซึ่งมักจะกระจายโค้ดออกเป็นหลายบรรทัด รวมถึงการเพิ่มฟีเจอร์ใหม่ ผู้ใช้บางคนสังเกตว่าเวอร์ชัน Rust สร้างได้ช้ากว่าเล็กน้อยและสร้างไบนารีที่ใหญ่กว่า - ประมาณ 4.3 MB เทียบกับเวอร์ชัน C++ ก่อนหน้านี้ที่มีขนาด 2.4 MB

การเปรียบเทียบระหว่าง Fish 4.0 และ 3.x

คุณสมบัติ Fish 4.0 Fish 3.x
ภาษาหลัก Rust C++
ขนาดโค้ด ~75,000 บรรทัด ~55,000 บรรทัด
ขนาดไบนารี 4.3 MB 2.4 MB
เวลาในการคอมไพล์ (รุ่น release) ~37 วินาที ~23 วินาที
การพึ่งพา Rust 1.70+, คอมไพเลอร์ C คอมไพเลอร์ C++, คอมไพเลอร์ C
การพึ่งพา ncurses ไม่มี (ต้องการ terminfo) มี

การเปลี่ยนแปลงที่สำคัญใน Fish 4.0

  • ระบบสัญลักษณ์คีย์บอร์ดใหม่
  • ตัวแปรในตำแหน่งคำสั่งที่ขยายเป็นคำสำคัญของคำสั่งย่อยถูกห้ามใช้
  • เปิดใช้งานคุณสมบัติ qmark-noglob โดยค่าเริ่มต้น (? ไม่ได้ทำหน้าที่เป็น glob ตัวอักษรเดียวอีกต่อไป)
  • มีการร้องขอการเข้ารหัสคีย์บอร์ด modifyOtherKeys ของ XTerm และโปรโตคอลคีย์บอร์ดของ kitty
  • การตั้งค่าเว็บถูกเขียนใหม่โดยใช้ Alpine.js

เหตุผลที่ผู้ใช้ชอบ Fish

Fish ได้รับความนิยมเพิ่มขึ้นเนื่องจากฟีเจอร์ที่ใช้งานง่ายและทำงานได้ดีโดยไม่ต้องตั้งค่าเพิ่มเติม การสนทนาในชุมชนเน้นย้ำว่าระบบการเติมคำอัตโนมัติที่ยอดเยี่ยมของเชลล์นี้เป็นฟีเจอร์ที่ได้รับความชื่นชมมากที่สุด โดยไม่จำเป็นต้องมีการกำหนดค่าด้วยตนเอง ลักษณะอื่นๆ ที่ได้รับการชื่นชมรวมถึงระบบธีม/พรอมต์ที่เรียบง่ายและการจัดการปลั๊กอินผ่าน oh-my-fish

ผู้ใช้หลายคนกล่าวว่าพวกเขายังคงใช้ Fish สำหรับการใช้งานเชลล์แบบโต้ตอบ ในขณะที่ยังคงเขียนสคริปต์ใน Bash หรือ POSIX shell เพื่อความเข้ากันได้ วิธีการผสมผสานนี้ช่วยให้พวกเขาได้รับประโยชน์จากฟีเจอร์ที่เป็นมิตรกับผู้ใช้ของ Fish ในขณะที่ยังคงความเข้ากันได้กับระบบที่ไม่ได้ติดตั้ง Fish

ข้อพิจารณาด้านความเข้ากันได้

ประเด็นที่มักถูกยกขึ้นมาในการสนทนาคือความขัดแย้งเป็นครั้งคราวเมื่อคัดลอกคำสั่ง Bash ไปยัง Fish เนื่องจากความแตกต่างของไวยากรณ์ ผู้ใช้บางคนได้พัฒนาวิธีแก้ปัญหาสร้างสรรค์ เช่น สคริปต์ที่จัดการคำสั่ง Bash โดยอัตโนมัติผ่านอินสแตนซ์ Bash ถาวรเมื่อวางลงใน Fish

การเขียนใหม่ยังส่งผลให้เกิดการเปลี่ยนแปลงที่ไม่สามารถย้อนกลับได้บางประการ รวมถึงระบบสัญลักษณ์คีย์ใหม่ การเปลี่ยนแปลงในการจัดการตัวแปรในตำแหน่งคำสั่ง และการเปิดใช้งานฟีเจอร์ qmark-noglob โดยค่าเริ่มต้น (หมายความว่า ? ไม่ได้ทำหน้าที่เป็น single-character glob อีกต่อไป) นอกจากนี้ Fish ตอนนี้ยังร้องขอการเข้ารหัสแป้นพิมพ์ modifyOtherKeys ของ XTerm และโปรโตคอลแป้นพิมพ์ kitty สำหรับการปรับปรุงแบบก้าวหน้า

สำหรับผู้จัดจำหน่ายและนักพัฒนา

การเปลี่ยนไปใช้ Rust หมายถึงการเปลี่ยนแปลงที่สำคัญในการพึ่งพา Fish ตอนนี้ต้องการ Rust 1.70 หรือใหม่กว่า ในขณะที่ไม่จำเป็นต้องใช้คอมไพเลอร์ C++ อีกต่อไป (แม้ว่าคอมไพเลอร์ C ยังคงจำเป็นสำหรับโค้ดเชื่อมต่อและการทดสอบบางอย่าง) CMake ยังคงเป็นระบบการสร้างที่แนะนำโดยรองรับเวอร์ชันต่ำสุด 3.5

การเปลี่ยนแปลงที่สำคัญอีกประการหนึ่งคือ Fish ไม่ได้พึ่งพาไลบรารี ncurses อีกต่อไป แม้ว่าจะยังคงใช้ฐานข้อมูล terminfo ผู้จัดทำแพ็คเกจได้รับคำแนะนำให้เพิ่มการพึ่งพาแพ็คเกจที่มีฐานข้อมูล terminfo แทนที่จะใช้ curses

การกำหนดค่าผ่านเว็บยังได้รับการเขียนใหม่เพื่อใช้ Alpine.js ซึ่งเป็นความพยายามในการทำให้ทันสมัยอีกอย่างควบคู่ไปกับการเขียนโค้ดหลักใหม่

เมื่อ Fish 4.0 เริ่มใช้งานในตัวจัดการแพ็คเกจและแพลตฟอร์มต่างๆ มันเป็นตัวอย่างที่น่าประทับใจของการเขียนใหม่ครั้งใหญ่ที่สามารถทำได้โดยยังคงรักษาประสบการณ์ผู้ใช้ที่ทำให้ซอฟต์แวร์นี้เป็นที่นิยม สำหรับผู้ใช้ที่กำลังพิจารณาลอง Fish หรืออัปเกรดจากเวอร์ชันก่อนหน้า การเปลี่ยนผ่านควรจะราบรื่นอย่างน่าทึ่งแม้จะมีการเปลี่ยนแปลงที่สำคัญภายใต้ฮู้ดก็ตาม

อ้างอิง: fish 4.0.0 (เปิดตัว 27 กุมภาพันธ์ 2568)