I/O loyihasi: Buyruqlar qatori dasturini yaratish(command line)

Ushbu bob siz hozirgacha o'rgangan ko'plab ko'nikmalarning qisqacha mazmuni va yana bir nechta standart kutubxona xususiyatlarining o'rganilishidir. Biz hozirda mavjud bo'lgan Rust tushunchalarini mashq qilish uchun fayl va buyruq qatori kiritish/chiqarish(input/output) bilan o'zaro ta'sir qiluvchi buyruq qatori vositasini(command line tool) yaratamiz.

Rust-ning tezligi, xavfsizligi, bitta ikkilik chiqishi(single binary output) va platformalararo9cross-platform qo'llab-quvvatlashi uni buyruqlar qatori vositalarini(command line tools) yaratish uchun ideal tilga aylantiradi, shuning uchun loyihamiz uchun biz klassik buyruq qatori qidiruv vositasi grep ning o'z versiyasini yaratamiz (globally search a regular expression and print) qidirish. Foydalanishning eng oddiy holatida grep belgilangan faylni belgilangan qator uchun qidiradi. Buning uchun grep o'z argumenti sifatida fayl yo'li(file path) va satrni oladi. Keyin u faylni o'qiydi, o'sha faylda string argumentini o'z ichiga olgan qatorlarni topadi va bu satrlarni chop(print qiladi) etadi.

Yo'l davomida biz buyruq qatori vositasini boshqa ko'plab buyruq qatori vositalari ishlatadigan terminal xususiyatlaridan qanday foydalanishni ko'rsatamiz. Biz foydalanuvchiga vositamizning harakatini sozlash imkonini berish uchun atrof-muhit o'zgaruvchisining qiymatini(environment variable) o'qiymiz. Shuningdek, biz xato xabarlarini standart chiqish (stdout) o'rniga standart xato konsoli oqimiga (stderr) chop qilamiz, shuning uchun, masalan, foydalanuvchi ekranda xato xabarlarini ko'rayotganda muvaffaqiyatli chiqishni faylga yo'naltirishi mumkin.

Rust hamjamiyatining bir a'zosi Andrew Gallant allaqachon grep ning ripgrep deb nomlangan to'liq xususiyatli, juda tez versiyasini yaratgan. Taqqoslash uchun, bizning versiyamiz ancha sodda bo'ladi, ammo bu bob sizga ripgrep kabi real loyihani tushunish uchun zarur bo'lgan asosiy bilimlarni beradi.

Bizning grep loyihamiz siz hozirgacha o'rgangan bir qator tushunchalarni birlashtiradi:

  • Kodni tashkil qilish (7-bobda modullar haqida bilib olganlaringizdan foydalangan holda)
  • Vectorlar va stringlardan foydalanish (to'plamlar(collection), 8-bob)
  • Xatolarni qayta ishlash(handling error) (9-bob)
  • Kerakli hollarda traitlar va lifetimelardan foydalanish (10-bob)
  • Testlar yozish (11-bob)

Shuningdek, biz 13 va 17-boblarda batafsil yoritilgan closurelar, iteratorlar va trait obyektlarini qisqacha tanishtiramiz.