Проєкт з введенням/виведенням: створення програми командного рядка

Цей розділ підсумовує багато навичок, які ви отримали досі, та досліджує ще декілька можливостей стандартної бібліотеки. Ми розробимо інструмент командного рядка, що взаємодіятиме введенням/виведенням до файлів і командного рядка, щоб потренуватися з уже вивченими концепціями 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 і 17 .