Project I/O: Bikin Program Command Line
Bab ini adalah rangkuman dari banyak skill yang udah kita pelajari sejauh ini dan sebuah eksplorasi ke beberapa fitur standard library lainnya. Kita bakal bikin alat (tool) command line yang berinteraksi sama file dan input/output dari command line buat melatih beberapa konsep Rust yang sekarang udah kita kuasai.
Kecepatan, keamanan, output binary tunggal, dan dukungan lintas platform
bikin Rust jadi bahasa yang ideal buat bikin alat command line, jadi buat
project kita ini, kita bakal bikin versi kita sendiri dari alat pencarian
command line klasik grep (globally search a regular expression
and print). Di skenario penggunaan paling sederhana, grep mencari string
tertentu di dalam file yang ditentukan. Buat ngelakuin itu, grep menerima
path (jalur) file dan sebuah string sebagai argumennya. Lalu dia ngebaca
file tersebut, nyari baris-baris di file itu yang mengandung argumen string
tadi, terus mencetak baris-baris itu.
Di sepanjang jalan, kita bakal nunjukin gimana cara bikin alat command line
kita memakai fitur terminal yang dipakai sama banyak alat command line
lainnya. Kita bakal ngebaca nilai dari environment variable buat ngebolehin
user mengonfigurasi perilaku alat kita. Kita juga bakal mencetak pesan error
ke stream konsol standard error (stderr) bukannya standard output
(stdout) sehingga, misalnya, user bisa me-redirect (mengalihkan) output
yang sukses ke sebuah file tapi tetap bisa melihat pesan error di layar.
Salah satu anggota komunitas Rust, Andrew Gallant, udah bikin versi grep yang
berfitur lengkap dan kenceng sekali, namanya ripgrep. Sebagai perbandingan,
versi kita bakal lumayan sederhana, tapi bab ini bakal ngasih kita beberapa
pengetahuan dasar yang kita butuhin buat paham project dunia nyata kayak
ripgrep.
Project grep kita bakal nggabungin sejumlah konsep yang udah kita pelajari
sejauh ini:
- Mengorganisasi kode (Bab 7)
- Memakai vectors dan strings (Bab 8)
- Menangani errors (Bab 9)
- Memakai traits dan lifetimes di tempat yang tepat (Bab 10)
- Nulis pengujian (tests) (Bab 11)
Kita juga bakal ngenalin secara singkat closures, iterators, dan trait objects, yang bakal dibahas lebih detail di Bab 13 dan Bab 18.