Poénnak indult, végül megvalósították: A Fish Shell 4.0 már Rustban újraírva érkezik

Két évvel ezelőtt ridiculousfish, a fish-shell vezető karbantartója egy humorosnak szánt pull requestet nyitott, amely az egész fish projekt újraírását javasolta C++-ból Rust nyelvre. Ez a javaslat nemcsak hogy népszerű lett, hanem végül meg is valósult. A Fish shell 4.0 bétájának megjelenésével, amely szinte teljesen Rust alapú, a csapat összegzi az átállás tapasztalatait.

Poénnak indult, végül megvalósították: A Fish Shell 4.0 már Rustban újraírva érkezik

Motiváció az átíráshoz

A váltást a C++-szal kapcsolatos fájdalompontok motiválták, mint a nehézkes eszközkészlet, a bonyolult szálbiztonság, valamint a közösségi támogatás hiánya. A C++ nyelv ergonómiája is sokszor problémát jelentett, különösen a biztonsági és kezelhetőségi szempontokban. A shell fejlesztői szerint a Rust nemcsak élvezetesebb és biztonságosabb nyelv, hanem sokkal jobb eszköztámogatást is nyújt, például a rustup segítségével.

„Theseus hajója”

Az átállás fokozatosan, „Theseus hajója” módszerrel történt, azaz egyes komponenseket külön-külön írtak át Rust nyelvre, miközben a program végig működőképes maradt. Ez a megközelítés lehetővé tette a folyamatos tesztelést és a felhasználói kiadások fenntartását. Az átállás során azonban nehézségek is adódtak, például az autocxx eszköz korlátai miatt, amely a C++ és Rust közötti interfészt kezelte.

14 hónap munkájának az eredménye

A projekt 14 hónapot vett igénybe, és a munka nagy részét mindössze hét fejlesztő végezte. A fish fejlesztői elismerik, hogy a Rust sem tökéletes: például a portolási problémák és a platform-specifikus implementációk kezelése nehézkes lehet. Ennek ellenére a Rust nyelv rugalmassága és modern szemlélete lehetővé tette az olyan új funkciók fejlesztését, mint a párhuzamos végrehajtás, amely a fish jövőjét is meghatározza.

A fish 4.0 megjelenése tehát nemcsak technológiai frissítést jelent, hanem a projekt fejlesztési filozófiájának megújulását is tükrözi. Az új irány célja, hogy a fish ne csak erősebbé és hatékonyabbá váljon, hanem a közösség számára is vonzóbb legyen.

Az átállás számokban kifejezve

A projekt nagyságát talán a statisztikai számokkal lehetne a legjobban körülírni:

  • 1155 fájl módosult, 110247 új sor került beillesztésre, és 88941 sor törlésre került (a fordítások nélkül számolva).
  • 2604 commit készült, amelyeket több mint 200 szerző hozott létre.
  • 498 problémát oldottak meg.
  • A kód alapja 57 ezer sor C++ volt, amit 75 ezer sor Rust kóddá alakítottak át, valamint 400 sor C kóddal egészítették ki.

További részletek a fish blog oldalán olvashatóak.