Shell populer Fish telah mencapai versi 4.0.0, menandai tonggak penting dengan kode intinya yang sepenuhnya ditulis ulang dalam bahasa Rust. Dirilis pada 27 Februari 2025, pembaruan besar ini mewakili hampir dua tahun kerja pengembangan yang mencakup lebih dari 2.600 commit oleh lebih dari 200 kontributor.
Penulisan Ulang dengan Rust
Perubahan paling signifikan dalam Fish 4.0 adalah penulisan ulang lengkap kode intinya dari C++ ke Rust. Upaya besar ini melibatkan perubahan pada 1.155 file dengan lebih dari 110.000 baris penambahan dan hampir 89.000 penghapusan. Meskipun skala perubahan ini besar, tim Fish menekankan bahwa seharusnya tidak ada dampak langsung pada pengguna - sebuah pencapaian luar biasa mengingat sifat komprehensif dari penulisan ulang ini.
Saya merasa ini cukup mengesankan, bahwa mereka menulis ulang seluruh inti Fish, tetapi semuanya tetap berfungsi persis dengan cara yang sama (kecuali beberapa hal kecil yang berubah dengan cara yang tidak signifikan, yang mereka sebutkan).
Kode yang ditulis ulang telah berkembang dari sekitar 55.000 baris C++ menjadi 75.000 baris Rust. Menurut diskusi komunitas, sebagian besar peningkatan ini dapat dikaitkan dengan preferensi pemformatan Rust, yang cenderung menyebarkan kode di beberapa baris, serta penambahan fitur baru. Beberapa pengguna mencatat bahwa versi Rust membangun sedikit lebih lambat dan menghasilkan binary yang lebih besar - sekitar 4,3 MB dibandingkan dengan 2,4 MB untuk versi C++ sebelumnya.
Perbandingan Fish 4.0 vs 3.x
Fitur | Fish 4.0 | Fish 3.x |
---|---|---|
Bahasa inti | Rust | C++ |
Ukuran kode | ~75.000 baris | ~55.000 baris |
Ukuran binary | 4,3 MB | 2,4 MB |
Waktu build (release) | ~37 detik | ~23 detik |
Dependensi | Rust 1.70+, kompiler C | Kompiler C++, kompiler C |
Dependensi ncurses | Tidak (memerlukan terminfo) | Ya |
Perubahan Penting di Fish 4.0
- Sistem notasi tombol baru
- Variabel dalam posisi perintah yang mengembang ke kata kunci subperintah kini dilarang
- Fitur qmark-noglob diaktifkan secara default (? tidak lagi berfungsi sebagai glob karakter tunggal)
- Encoding keyboard modifyOtherKeys dari XTerm dan protokol keyboard kitty kini diminta
- Konfigurasi web ditulis ulang menggunakan Alpine.js
Mengapa Pengguna Menyukai Fish
Fish telah mendapatkan popularitas terutama karena fitur-fitur intuitifnya yang berfungsi dengan baik tanpa konfigurasi tambahan. Diskusi komunitas menyoroti bahwa sistem penyelesaian otomatis shell yang sangat baik adalah fitur yang paling dihargai, tidak memerlukan konfigurasi manual. Aspek lain yang dipuji termasuk sistem tema/prompt yang efisien dan manajemen plugin melalui oh-my-fish.
Banyak pengguna menyebutkan bahwa mereka terus menggunakan Fish untuk penggunaan shell interaktif sambil tetap menulis skrip dalam Bash atau shell POSIX untuk portabilitas. Pendekatan hibrid ini memungkinkan mereka mendapatkan manfaat dari fitur-fitur ramah pengguna Fish sambil mempertahankan kompatibilitas dengan sistem di mana Fish tidak diinstal.
Pertimbangan Kompatibilitas
Sebuah poin umum yang diangkat dalam diskusi adalah gesekan sesekali saat menyalin perintah Bash ke Fish karena perbedaan sintaks. Beberapa pengguna telah mengembangkan solusi kreatif, seperti skrip yang secara otomatis mengarahkan perintah Bash melalui instance Bash yang persisten ketika ditempel ke Fish.
Penulisan ulang juga menghasilkan beberapa perubahan yang tidak kompatibel ke belakang, termasuk sistem notasi kunci baru, perubahan pada penanganan variabel dalam posisi perintah, dan mengaktifkan fitur qmark-noglob secara default (artinya ? tidak lagi bertindak sebagai glob karakter tunggal). Selain itu, Fish sekarang meminta pengkodean keyboard modifyOtherKeys XTerm dan peningkatan progresif protokol keyboard kitty.
Untuk Distributor dan Pengembang
Peralihan ke Rust berarti perubahan signifikan dalam dependensi. Fish sekarang memerlukan Rust 1.70 atau lebih tinggi, sementara tidak lagi membutuhkan kompiler C++ (meskipun kompiler C masih diperlukan untuk beberapa kode penghubung dan pengujian). CMake tetap menjadi sistem build yang direkomendasikan dengan versi 3.5 sebagai versi minimum yang didukung.
Perubahan penting lainnya adalah Fish tidak lagi bergantung pada pustaka ncurses, meskipun masih menggunakan database terminfo. Para pembuat paket disarankan untuk menambahkan dependensi pada paket yang berisi database terminfo mereka alih-alih curses.
Konfigurasi berbasis Web juga telah ditulis ulang untuk menggunakan Alpine.js, mewakili upaya modernisasi lain di samping penulisan ulang inti.
Saat Fish 4.0 diluncurkan di berbagai pengelola paket dan platform, ini menjadi contoh mengesankan bagaimana penulisan ulang besar dapat dicapai sambil mempertahankan pengalaman pengguna yang membuat perangkat lunak tersebut populer sejak awal. Bagi pengguna yang mempertimbangkan untuk mencoba Fish atau meningkatkan dari versi sebelumnya, transisi seharusnya luar biasa lancar meskipun ada perubahan substansial di balik layar.
Referensi: fish 4.0.0 (dirilis 27 Februari 2025)