Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

I/O-проект: создание программы командной строки

Эта глава одновременно повторяет многие навыки, которые вы уже изучили, и знакомит с еще несколькими возможностями стандартной библиотеки. Мы создадим инструмент командной строки, который работает с файлами и вводом-выводом командной строки, чтобы попрактиковаться в некоторых концепциях Rust, уже имеющихся в вашем арсенале.

Скорость Rust, безопасность, сборка в единый бинарный файл и кроссплатформенная поддержка делают его отличным языком для создания инструментов командной строки. Поэтому в этом проекте мы сделаем собственную версию классического поискового инструмента командной строки grep; его название происходит от английского globally search a regular expression and print. В самом простом случае grep ищет указанную строку в указанном файле. Для этого grep принимает в аргументах путь к файлу и строку. Затем он читает файл, находит в нем строки, содержащие переданную строку, и печатает эти строки.

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

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

Наш проект grep объединит несколько концепций, которые вы уже изучили:

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

Мы также кратко познакомимся с замыканиями, итераторами и трейт-объектами, которые подробно рассматриваются в главе 13 и главе 18.