เชลล์ยอดนิยม 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 หรืออัปเกรดจากเวอร์ชันก่อนหน้า การเปลี่ยนผ่านควรจะราบรื่นอย่างน่าทึ่งแม้จะมีการเปลี่ยนแปลงที่สำคัญภายใต้ฮู้ดก็ตาม