Работа с файловой системой (I/O). Создание консольного приложения

В этой главе вы примените все знания полученные в предыдущих, а также познакомитесь с ещё не изученными API стандартной библиотеки. Мы будем создавать консольное приложение, которое будет использовать файл для чтения и записи. Также вы будете использовать возможности командной строки.

Скорость, безопасность, компиляция для множество платформ делает язык Rust удобным для создания консольных приложений. Создадим на Rust аналог приложения grep. Акроним greap расшифровывается, как глобальное средство писка и печати “Globally search a Regular Expression and Print.”. Часто grep используется для поиска файлов содержащих определенный текст. Для этого программа получает имя файла и строку как аргументы командной строки, далее читает файл и ищёт строки в этом файле, которые содержат искомый текст. Результатом работы программы являются строки, в которых были найдены этот текст.

Попутно, мы покажем как применять широко используемые возможности командной строки. Мы будет считывать значения переменной среды для настройки приложения. Также мы будем печатать в поток ошибок (stderr) вместо стандартного потока (stdout). Это удобно в тех случаях, когда пользователь может выбрать направления вывода данных (в файл - при безошибочной работе и на консоль ошибок при каких-либо сложностях в работе программы).

Один из участников Rust-сообщества, Эндрю Галлант (Andrew Gallant) уже реализовал полнофункциональную, очень быстрый аналог программы grep и назвал её ripgrep. Создаваемая же нами программы будет намного проще, но в тоже время вы получите знания для понимания этапов создания подобных проектов.

Создаваемый проект будет использовать ранее изученные концепции:

  • Организация кода в виде модулей (Глава 7)
  • Использование векторов и строк (коллекции, Глава 8)
  • Обработка ошибок (Глава 9)
  • Использование типажей и переменных времени жизни (Глава 10)
  • Написание тестов (Глава 11)

Также мы сообщим о замыканиях, итераторах, объектах-типажах, которые будут подробнее описаны в главах 13 и 17.