Fish Shell ซอฟต์แวร์ shell กลุ่มเดียวกับ Bash และ PowerShell ออกเวอร์ชั่น 4.0 Beta 1 เป็นเวอร์ชั่นแรกที่พอร์ตฟังก์ชั่นแกนกลางไปยังภาษา Rust นับเป็นความเปลี่ยนแปลงขนาดใหญ่ในเวอร์ชั่นหลักครั้งนี้ ฟีเจอร์เดียวแก้ไข 126 ไฟล์ มีการ commit ใน pull request ถึง 50 รายการ รวมเวอร์ชั่น 4.0 มีการแก้ไขไฟล์ 1155 ไฟล์ เพิ่ม 110,247 บรรทัด ลบ 88,941 บรรทัด
ridiculousfish หนึ่งในนักพัฒนาหลักของ Fish เสนอแนวทางนี้เมื่อต้นปี 2023 ระบุเหตุผลว่า "ไม่มีใครชอบ C++ หรือ CMake จริงๆ หรอก" เพราะกระบวนการเซ็ตอัพยุ่งยาก การใช้ C++ ทำให้นักพัฒนาใหม่ๆ เข้าร่วมได้ยาก และ Rust ยังเปิดทางให้สามารถรันงานแบบ concurrent ได้อย่างปลอดภัยขึ้นในอนาคต
Fish เป็น shell ที่เน้นฟีเจอร์ช่วยเหลือผู้ใช้อย่างหนักเพื่อให้เป็นมิตรกับผู้ใช้ที่สุดเท่าที่เป็นไปได้ ตัว shell มีความสามารถ syntaxhighlight และ autosuggest ในตัว ที่ผ่านมาฟีเจอร์เหล่านี้ไม่ลดประสิทธิภาพ shell ลงเพราะรันใน thread แยกออกไป แต่พอทีมงานต้องการรันงานเป็น multithread จริงๆ กลับพบว่ายากมาก ฟังก์ชั่นในภาษา C++ จำนวนมากไม่เป็น thread-safe การพอร์ตไปใช้ Rust จะทำให้การอิมพลีเมนต์ฟีเจอร์เหล่านี้ได้ง่ายขึ้น แถม Rust มีแนวทางพยายามทำ error message ให้อ่านง่าย ซึ่งตรงกับ Fish
ที่มา - Fish Shell Blog
Comments
เพิ่งอ่านมีมนี้ใน fb พอดี
ผมใช้ fish ด้วย 3 เหตุผล
1. bash บนแมคมันเก่า เห็นว่ากันว่าเปลี่ยน license เลยไม่เอาตัวใหม่มาลง
2. zsh มันช้า ยิ่งลงของเยอะยิ่งช้า
3. อยากลอง
แต่บางงาน อาจจะไม่ได้มี first party support เช่น rvm
เคยจะลองเอามาใช้แทน zsh ผมเจอ inline export แตกรัว ๆ เลย ไม่รู้ว่าตอนนี้แก้ได้หรือยัง
กลับไปซบ oh-my-zsh เหมือนเดิม
คือแบบว่าอยากจะด้อย c++ ให้ได้
ว่า unsafe memory ไม่ได้ เพราะรู้ว่ามี counterpart
เลยต้อง ไปเอาเรื่อง concurrency แทน ซึ่งก็ไม่รู้อีกว่า
API support concurrency ของ c++ มันเยอะจนใช้ไม่ถูก
คนใช้ bash เข้ามาอ่านแบบเงียบๆ ^^
..: เรื่อยไป
คนที่ชื่นชม c++/cmake ก็เหมือนคนที่ชม linux
ทั้งคู่เป็น alpaca
มันคงจะดีกว่านี้ถ้าไม่ใช้ shell
คนใช้ Rust นี่บางทีก็ดูเหมือนคนใช้ Apple อยู่นะครับ 555
เอาจริง ๆ ผมไม่แน่ใจว่ากระบวนการเซ็ตอัพยุ่งยากที่ว่าคืออะไรแฮะ
ถ้าใช้ CMake จริง ๆ มันแค่สั่ง
CMake -G "Unix Makefile"
แล้วCMake --build <build_dir>
ก็หมดละมั้ง (ผมจำคำสั่งจริง ๆ ไม่ได้หรอก 555 แต่ปรกติอันแรกก็รันทีเดียว อันหลังจริง ๆ รันmake
เฉย ๆ ก็ได้ผลเหมือนกัน)dependency จะใช้ Conan หรือ VCPKG หรืออะไรก็แล้วแต่ เพิ่มไปอีกคำสั่งนึงก็จบละ
แน่นอนว่ามันอาจจะไม่ใช่แบบคำสั่งเดียวจบเหมือนบางภาษา แต่มันก็ไม่ได้ยุ่งยากมากมายอะไรขนาดนั้น (ถ้าทำเป็นนะ)
ส่วนเรื่องภาษา C++ ผมคิดว่าตราบใดที่เราอยู่กับ style การเขียนที่เราตั้งไว้มันก็ไม่ได้ยากขนาดนั้น ที่ผ่านมาคือหลาย ๆ คนชอบเอาหลาย ๆ แบบมาผสมกันแล้วกลายเป็นว่าโปรเจคซับซ้อนกว่าที่ควรเป็นแค่นั้นเอง ของ Rust คือบังคับรูปแบบการเขียนที่ compiler เลยก็ดีเหมือนกัน เหมือนกับไม่ต้องมาเถียงกันว่าเขียนแบบไหนดีกว่าแบบไหนเพราะโดนบังคับไปเลย C++ มันมีตัวเลือกเยอะไปคนเลยทะเลาะกันเรื่องตัวเลือกนี่ล่ะ