Fish 4.0: Theseus의 물고기
프로젝트 배경
- 약 2년 전, Fish의 주요 유지보수자인 @ridiculousfish가 Fish를 C++에서 Rust로 전환하는 PR을 열었음.
- Fish는 과거에도 C에서 C++로 전환한 경험이 있지만, Rust로의 전환은 훨씬 더 큰 프로젝트였음.
- Fish 4.0 베타 버전은 C++ 코드가 전혀 없고 거의 100% 순수 Rust로 구성됨.
C++에서의 문제점
-
도구 및 컴파일러 차이: C++의 도구는 좋지 않으며, 최신 C++ 표준을 채택하는 것은 패키저와 기여자들에게 복잡함을 초래함.
-
스레드 안전성: Fish의 내부 명령어 실행은 현재 직렬로 이루어지며, 비동기 프롬프트나 비차단 완성 기능을 추가하기 위해서는 병렬 처리가 필요함.
-
언어의 복잡성: C++의 헤더 파일, 템플릿, 문자열 처리 등이 복잡하고 안전하지 않음.
-
커뮤니티: C++는 많은 기여자를 끌어들이지 못함.
Rust의 장점
-
재미와 흥미: Fish는 취미 프로젝트로, 재미있고 흥미로운 언어가 필요함.
-
훌륭한 도구: Rust의 도구는 사용하기 쉽고, 컴파일러 오류 메시지가 뛰어남.
-
좋은 언어 설계: Rust의 포인터와 옵션 시스템은 C++보다 훨씬 안전함.
-
병렬 처리 지원: Rust의 Send와 Sync는 안전한 병렬 처리를 가능하게 함.
플랫폼 지원
- Rust는 macOS, Linux, BSD 등 주요 플랫폼을 지원하며, Fish는 UNIX 셸로 Windows 지원은 고려하지 않음.
포팅 과정
- Fish는 "Theseus의 물고기" 방식으로 C++에서 Rust로 단계적으로 전환함.
- autocxx를 사용하여 C++와 Rust 간의 바인딩을 생성하고, 한 번에 하나의 컴포넌트를 포팅함.
- 포팅 과정에서 여러 문제를 겪었지만, 대부분 해결함.
타임라인
- 2023년 1월 28일 첫 PR이 열리고, 2024년 1월 마지막 C++ 코드가 제거됨.
- 2024년 12월 17일 첫 베타 버전이 출시됨.
Rust의 단점 및 실수
- Rust의 이식성 문제와 로컬라이제이션 문제를 겪음.
- 포팅 과정에서 몇 가지 실수를 저질렀지만, 대부분 쉽게 해결됨.
포팅의 장점
- curses 라이브러리를 사용하지 않게 되어, 빌드 시의 문제를 줄임.
- Fish 패키지를 자체 설치 가능하게 만들어, 사용자가 쉽게 사용할 수 있게 함.
현재와 미래
- Fish 4.0은 성공적으로 포팅되었으며, 성능이 향상됨.
- Fish는 여전히 UNIX 셸로, Rust로의 전환을 통해 새로운 기능을 추가할 수 있게 됨.