Projekt I/O: Budowa programu wiersza poleceń
Ten rozdział to podsumowanie wielu umiejętności, których nauczyłeś się do tej pory, oraz eksploracja kilku dodatkowych funkcji biblioteki standardowej. Zbudujemy narzędzie wiersza poleceń, które będzie współpracować z plikowym i wierszowym wejściem/wyjściem, aby przećwiczyć niektóre pojęcia Rust, które masz już opanowane.
Szybkość, bezpieczeństwo, pojedynczy plik binarny i wsparcie międzyplatformowe Rust sprawiają, że jest to idealny język do tworzenia narzędzi wiersza poleceń. Dlatego w naszym projekcie stworzymy własną wersję klasycznego narzędzia wyszukiwania wiersza poleceń grep (globally search a regular expression and print). W najprostszym przypadku grep wyszukuje w określonym pliku określony ciąg znaków. Aby to zrobić, grep przyjmuje jako argumenty ścieżkę do pliku i ciąg znaków. Następnie odczytuje plik, znajduje w nim wiersze zawierające argument ciągu znaków i wypisuje te wiersze.
Po drodze pokażemy, jak sprawić, by nasze narzędzie wiersza poleceń korzystało z funkcji terminala, których używa wiele innych narzędzi wiersza poleceń. Odczytamy wartość zmiennej środowiskowej, aby umożliwić użytkownikowi skonfigurowanie zachowania naszego narzędzia. Będziemy również wypisywać komunikaty o błędach do standardowego strumienia błędów konsoli (stderr) zamiast standardowego wyjścia (stdout), aby na przykład użytkownik mógł przekierować udane dane wyjściowe do pliku, nadal widząc komunikaty o błędach na ekranie.
Jeden z członków społeczności Rust, Andrew Gallant, stworzył już w pełni funkcjonalną, bardzo szybką wersję grep, nazwaną ripgrep. W porównaniu, nasza wersja będzie raczej prosta, ale ten rozdział da ci podstawową wiedzę, której potrzebujesz, aby zrozumieć rzeczywisty projekt, taki jak ripgrep.
Nasz projekt grep połączy wiele pojęć, których nauczyłeś się do tej pory:
- Organizowanie kodu (Rozdział 7)
- Używanie wektorów i ciągów znaków (Rozdział 8)
- Obsługa błędów (Rozdział 9)
- Używanie cech i czasów życia tam, gdzie jest to stosowne (Rozdział 10)
- Pisanie testów (Rozdział 11)
Ponadto pokrótce przedstawimy domknięcia, iteratory i obiekty cech, które Rozdział 13 i Rozdział 18 omówią szczegółowo.