Bab ini membahas tentang pengetahuan dasar untuk mulai berkenalan dengan Rust. Pembahasan pada bab ini diantaranya adalah :
- Apa itu Rust?
- Instalasi Rust dan paket pendukung lainnya
- Instalasi IDE dan Text Editor
- Command
Rust adalah bahasa pemrograman low-level yang mulai dikembangkan sejak tahun 2006 oleh Graydon Hoare salah seorang engineer di Mozilla. Rust adalah bahasa pemrograman sistem (system programming) yang difokuskan pada tiga tujuan: keamanan, kecepatan, dan concurrency. Rust memelihara tujuan ini tanpa garbage collector yang membuatnya menjadi bahasa yang berguna untuk sejumlah kasus penggunaan bahasa lain. Tidak hanya itu rust juga bahasa dengan general purpose language, bahasa low-level yang bisa membantu kita untuk mengeksplorasi potensi sisi system, embedded system, dan hal-hal kritis terkait performance.
Untuk menginstal rust kita akan menggunakan rustup, namun sebelum itu kita perlu mengetahui apa itu rustup. Rustup adalah official toolchain manajemen dari The Rust Programming Language. Dengan rustup kita dapat dengan mudah : menginstal, mengupdate, mengganti versi compiler (stable, beta, dan nightly) dan mempermudah kita dalam mengkompilasi kode sumber berikut dengan standard library agar aplikasi kita dapat dijalankan platform yang didukung oleh Rust. Untuk menginstal rust sangat mudah sekali, kita hanya perlu menjalankan :
curl https://sh.rustup.rs -sSf | sh
Jika perintah diatas dijalankan rustup akan memberikan pilihan apakah kita akan menginstal rust secara custom atau default.
info: downloading installer
Welcome to Rust!
This will download and install the official compiler for the Rust programming
language, and its package manager, Cargo.
It will add the cargo, rustc, rustup and other commands to Cargo's bin
directory, located at:
/home/<user>/.cargo/bin
This path will then be added to your PATH environment variable by modifying the
profile file located at:
/home/<user>/.profile
You can uninstall at any time with rustup self uninstall and these changes will
be reverted.
Current installation options:
default host triple: x86_64-unknown-linux-gnu
default toolchain: stable
modify PATH variable: yes
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
Pada saat kita menginstal Rust maka kita akan mendapatkan tiga buah tool yaitu : cargo, rustc dan rustup.
- cargo adalah package manager untuk Rust.
- rustc adalah compiler yang digunakan untuk mengkompilasikode sumber ke static binary.
- rustup adalah toolchain manajemen yang sudah kita bahas diatas.
Pada tahap instalasi diatas sebenarnya kita sudah dapat bermain dengan Rust, namun ada "the most useful tools" yang sangat berguna bagi kita yaitu : racer, rustfmt, rustsym.
-
racer
Tool ini berfungsi untuk auto-suggestion pada saat kita menuliskan keyword, library, dan lainnya yang hendak kita pakai. Untuk menginstal racer jalankan perintah :
cargo install racer
Contoh penggunaan racer :
racer complete std::io::R // Output MATCH Read,427,10,/home/<user>/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/io/mod.rs,Trait,pub trait Read MATCH Result,48,9,/home/<user>/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/io/error.rs,Type,pub type Result<T> = result::Result<T, Error>; MATCH Repeat,107,11,/home/<user>/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src/libstd/io/util.rs,Struct,pub struct Repeat
-
rustfmt
Tool ini berfungsi untuk memformat penulisan kode sumber yang kita buat
cargo install rustfmt
-
rustsym
Tool ini berfungsi untuk meng-query atau mencari karakter didalam kode sumber yang kita buat
cargo install rustsym
- Arch
sudo pacman -S atom
atauyaourt atom-editor-git
- Debian/Ubuntu Download file binari pada Website Atom lalu jalankan
sudo dpkg -i atom-amd64.deb
Setelah instalasi text editor selesai kita perlu mengintegrasikan tool tambahan yang sudah kita install tadi seperti : racer, rustfmt dan rustsym ke text editor, untuk menginstalnya cukup jalankan perintah :Jika proses instalasi selesai kita juga perlu setup racer agar dapat berjalan di text editor kita, buka atom text editor lalu masuk ke Preferences atau CTRL+, > Packages klik package racer lalu kita isikan PATH Variable yang dibutuhkan racer contoh :apm install racer apm install rustfmt apm install rustsym
Display Name | Description |
---|---|
Path to the Racer executable | ~/.cargo/bin/racer |
Path to the Rust source code directory | ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src |
Cargo home directory | ~/.cargo/ |
Note:
~
adalah folder HOME user anda.
Pada sub bab ini kita akan membahas tentang penggunaan command line interface dari tool : rustc, rustup dan cargo yang berguna pada saat kita membangun aplikasi.
Rust Compiler (rustc
) adalah tool yang digunakan untuk mengkompilasikode sumber kedalam static-binary karen Rust adalah bahasa pemrogramman ahead-of-time compiled
yang artinya kita mengkompilasiaplikasi kita lalu kita dapat mendistribusikan aplikasi kita dan langsung dapat di-running tanpa harus menginstal Rust terlebih dahulu, tidak seperti bahasa lainnya misalnya .rb
, .py
atau .js
yang mana kita harus menginstal ruby, pyton, atau javascript terlebih dahulu sebelum me-running file tersebut.
Untuk mengkompilasicaranya cukup mudah hanya dengan rustc <nama-file>.rs
. Contohnya terdapat program sederhana yang menampilkan kalimat "Hello!, Aku <3 Rust." dengan nama file hello.rs
seperti dibawah ini :
fn main() {
println!("Hello!, Aku <3 Rust.");
}
maka untuk mengkompilasi file tersebut :
rustc hello.rs
dan untuk menjalankan nya :
./hello
// Output
Hello!, Aku <3 Rust.
bagaimana jika ingin mengganti nama file hasil kompilasi? mudah saja, kita tambahan options -o
diikuti dengan nama file yang kita inginkan lalu nama file kode sumber, contoh :
rustc -o program_pertama hello.rs
ketika menjalankan kembali hasil kompilasi hasilnya akan sama saja.
Rustup digunakan untuk berhubungan dengan toolchain dan kita perlu mengetahui standard penamaan rilis channel toolchain :
<channel>[-<date>][-<host>]
<channel> = stable|beta|nightly|<version>
<date> = YYYY-MM-DD
<host> = <target-triple>
Untuk menggunakan rustup sangat mudah format penulisan nya adalah rustup [FLAGS] [SUBCOMMAND]
, berikut daftar subcommand yang ada :
-
Show digunakan untuk melihat daftar toolchain yang terinstall dan aktif, contoh :
rustup show // Output Default host: x86_64-unknown-linux-gnu installed toolchains -------------------- stable-x86_64-unknown-linux-gnu (default) nightly-x86_64-unknown-linux-gnu active toolchain ---------------- stable-x86_64-unknown-linux-gnu (default) rustc 1.15.1 (021bd294c 2017-02-08)
-
Update digunakan untuk mengupdate toolchain, contoh :
rustup update // Output info: syncing channel updates for 'stable-x86_64-unknown-linux-gnu' info: downloading component 'rustc' 36.4 MiB / 36.4 MiB (100 %) 291.2 KiB/s ETA: 0 s info: downloading component 'rust-std' 50.0 MiB / 50.0 MiB (100 %) 217.6 KiB/s ETA: 0 s info: downloading component 'cargo' 4.7 MiB / 4.7 MiB (100 %) 288.0 KiB/s ETA: 0 s info: downloading component 'rust-src' 27.4 MiB / 27.4 MiB (100 %) 233.6 KiB/s ETA: 0 s info: installing component 'rustc' info: installing component 'rust-std' info: installing component 'cargo' info: installing component 'rust-src' info: syncing channel updates for 'nightly-x86_64-unknown-linux-gnu' info: checking for self-updates stable-x86_64-unknown-linux-gnu updated - rustc 1.16.0 (30cf806ef 2017-03-10) nightly-x86_64-unknown-linux-gnu unchanged - rustc 1.17.0-nightly (0aeb9c129 2017-03-15)
atau bisa juga mengupdate per toolchain, tambahkan saja nama toolchain nya
rustup update nightly // Output info: syncing channel updates for 'nightly-x86_64-unknown-linux-gnu' 282.9 KiB / 282.9 KiB (100 %) 121.6 KiB/s ETA: 0 s info: downloading component 'rustc' 41.0 MiB / 41.0 MiB (100 %) 211.2 KiB/s ETA: 0 s info: downloading component 'rust-std' 65.5 MiB / 65.5 MiB (100 %) 188.8 KiB/s ETA: 0 s info: downloading component 'cargo' 8.6 MiB / 8.6 MiB (100 %) 252.3 KiB/s ETA: 0 s info: installing component 'rustc' info: installing component 'rust-std' info: installing component 'cargo' nightly-x86_64-unknown-linux-gnu updated - rustc 1.17.0-nightly (0aeb9c129 2017-03-15)
-
Default digunakan untuk mengubah default toolchain yang kita gunakan seperti merubah channel toolchain dari
stable
kenightly
, contoh :rustup default nightly // Output info: using existing install for 'nightly-x86_64-unknown-linux-gnu' info: default toolchain set to 'nightly-x86_64-unknown-linux-gnu' nightly-x86_64-unknown-linux-gnu unchanged - rustc 1.17.0-nightly (b1e31766d 2017-03-03)
-
Toolchain digunakan untuk mencari dan menampilkan daftar toolchain yang terinstall.
-
Menampilkan daftar toolchain
rustup toolchain list // Output stable-x86_64-unknown-linux-gnu nightly-x86_64-unknown-linux-gnu (default)
-
Install toolchain
rustup toolchain install beta // Output info: syncing channel updates for 'beta-x86_64-unknown-linux-gnu' 156.4 KiB / 156.4 KiB (100 %) 129.9 KiB/s ETA: 0 s info: downloading component 'rustc' 37.1 MiB / 37.1 MiB (100 %) 224.0 KiB/s ETA: 0 s info: downloading component 'rust-std' 61.6 MiB / 61.6 MiB (100 %) 220.8 KiB/s ETA: 0 s info: downloading component 'cargo' 8.6 MiB / 8.6 MiB (100 %) 281.6 KiB/s ETA: 0 s info: installing component 'rustc' info: installing component 'rust-std' info: installing component 'cargo' beta-x86_64-unknown-linux-gnu installed - rustc 1.17.0-beta.1 (408d49e60 2017-03-14)
-
Uninstall toolchain
rustup toolchain uninstall beta // Output info: uninstalling toolchain 'beta-x86_64-unknown-linux-gnu' info: toolchain 'beta-x86_64-unknown-linux-gnu' uninstalled
-
Link (membuat custom toolchain)
rustup toolchain link custom-toolchain /path/to/my/toolchain/sysroot
-
-
Target digunakan untuk kompilasi ke platform yang dinginkan karena Rust mendukung kompilasi untuk berbagai platform (cross-compilation)
- Menambahkan target
dengan fitur target ini kita dapat membuild aplikasi untuk android dengan cargo dan menambahkan flag
rustup target add arm-linux-androideabi // Output info: downloading component 'rust-std' for 'arm-linux-androideabi' 16.0 MiB / 16.0 MiB (100 %) 172.8 KiB/s ETA: 0 s info: installing component 'rust-std' for 'arm-linux-androideabi'
--target
. Penggunaan Cargo akan kita bahas pada subbab berikutnya. - Melihat daftar target yang terinstall
rustup target list // Output aarch64-apple-ios aarch64-linux-android aarch64-unknown-fuchsia aarch64-unknown-linux-gnu arm-linux-androideabi (installed) ...
- Menghapus (remove) target yang terinstall caranya
rustup target remove <TARGET>
rustup target remove arm-linux-androideabi
- Menambahkan target
-
Component
-
Menambahkan component, untuk menambahkan caranya
rustup component add <COMPONENT>
contoh :rustup component add rust-src
-
Melihat daftar component
rustup component list // Output cargo-x86_64-unknown-linux-gnu (default) rust-docs-x86_64-unknown-linux-gnu rust-src (installed) rust-std-aarch64-apple-ios rust-std-aarch64-linux-android ...
-
Menghapus component, untuk menghapus caranya
rustup component remove <COMPONENT>
contoh :rustup component remove rust-src
-
-
Override digunakan untuk memberitahu compiler agar memakai toolchain tertentu pada direktori proyek secara spesifik.
- Melihat direktori yang telah di override
rustup override list
- Menentukan (setup) toolchain dengan perintah
rustup override set <DIRECTORY>
rustup override set ~/Code/aplikasi-ku
- Menghapus override (unset) toolchain
rustup override unset
-
Run digunakan untuk menjalankan toolchain yang tersedia
- Penggunaan bersamaan dengan compiler.
rustup run nightly rustc ~/Desktop/hello.rs
- Penggunaan bersamaan dengan shell.
rustup run nightly bash
- Penggunaan bersamaan dengan compiler.
-
Which digunakan untuk menampilkan lokasi aplikasi binari yang sedang dijalankan
rustup which rustc // Output /home/<user>/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/bin/rustc
-
Doc digunakan untuk menampilkan dokumentasi Rust
- Buku
rustup doc --book
- Standard Library
rustup doc --std
ketika perintah diatas kita jalankan maka secara otomatis dokumentasi akan ditampilkan dibrowser.
NOTE: Agar kita dapat menggunakan fitur ini, component rust-docs harus sudah terinstall, untuk menginstalnya jalankan perintah
rustup component add rust-docs
. -
Self digunakan untuk memodifikasi rustup seperti mengupdate dan menguninstall
- Update rustup
rustup self update
- Uninstall rustup
rustup self uninstall
-
Set digunakan untuk melakukan pengaturan (settings) pada rustup seperti merubah default host, tapi fitur ini sangat jarang digunakan karena pada saat instalasi rustup, secara otomatis rustup sudah mengatur keperluan ini.
rustup set default-host
-
Completion fitur ini digunakan untuk menambahkan penyempurnaan CLI (command line interface) yang sangat berguna sekali pada saat bermain dengan rustup agar lebih cepat penilaiannya.
- Bash
# rustup completions bash > /etc/bash_completion.d/rustup.bash-completion
- Zsh
$ rustup completions zsh > ~/.zfunc/_rustup
Lalu tambahkan kode dibawah ini didalam file
zshrc
:fpath+=~/.zfunc
- Fish
$ rustup completions fish > ~/.config/fish/completions/rustup.fish
Cargo adalah package manager atau tool yang memudahkan kita dalam menambahkan dan memanajemen paket-paket yang menjadi ketergantuangan (depencies). Untuk itu cargo melakukan empat hal diantaranya :
- Membuat metadata dengan nama file
Cargo.toml
- Menambahkan dependency yang dibutuhkan
- Menjalan
rustc
untuk keperluan kompilasi - Memperkenalkan konvensi untuk membuat bekerja dengan proyek-proyek Rust mudah.
- New digunakan untuk membuat proyek baru
atau jika kita ingin membuat proyek librari
cargo new nama_proyek --bin
jika kita jalankan perintah diatas, maka cargo akan membuatkan direktori dan file-file yang kita butuhkan seperti contoh dibawah ini :cargo new nama_proyek
nama_proyek . ├── .git │ ├── HEAD │ ├── config │ ├── description │ ├── hooks │ ├── info │ ├── objects │ └── refs └── src │ └── main.rs ├── .gitignore └── Cargo.toml 6 directories, 6 files
- direktori proyek yang sesuai dengan nama proyek yang kita sebutkan diatas berikut dengan inisialisasi
git
- file
Cargo.toml
sebagai manifest proyek - direktori
src
sebagai direktori utama kode sumber - file
main.rs
ataulib.rs
jika kita hendak membuat librari
- direktori proyek yang sesuai dengan nama proyek yang kita sebutkan diatas berikut dengan inisialisasi
- Init digunakan untuk menginisialisasi proyek yang sudah dibuat namun belum terintegrasi dengan cargo
atau jika binari proyek
cargo init
cargo init --bin
- Build digunakan untuk mengkompilasi kode sumber kedalam bentuk file binari
hasil kompilasi tersebut akan ditempatkan didalam direktori
cargo build
target
- Run sama halnya
build
pada perintahrun
sebenarnya cargo terlebih dahulu mengkompilasi namun langsung menjalankan hasil kompilasi tersebutcargo run
- Clean digunakan untuk membersihkan direktori/file yang dihasilkan pada saat
build
yakni direktoritarget
cargo clean
- Test ketika bekerja dengan proyek yang cukup besar pastinya kita akan membutuhkan testing, hal ini ditangani oleh cargo maka kita dapat dengan mudah membuat test untuk proyek kita, berikut contoh dari unit testing :
cargo test // Output Finished dev [unoptimized + debuginfo] target(s) in 0.0 secs Running target/debug/deps/<nama_proyek>-46a021ef15e0c20f running 11 tests test containers ... ok test ping ... ok test container ... ok test swarm ... ok test nodes ... ok test services ... ok test networks ... ok test images ... ok test tasks ... ok test volumes ... ok test info ... ok test result: ok. 11 passed; 0 failed; 0 ignored; 0 measured Running target/debug/deps/<nama_proyek>-8a1cf4acd969d628 running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured Doc-tests <nama_proyek> running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured
- Bench digunakan untuk keperluan benchmarking, berikut contoh benchmarck :
Finished release [optimized] target(s) in 29.70 secs Running target/release/deps/<nama_proyek>-53cdfcee641cf7b8 running 2 tests test tests::it_works ... ignored test tests::bench_add_two ... bench: 0 ns/iter (+/- 0) test result: ok. 0 passed; 0 failed; 1 ignored; 1 measured
- Install digunakan untuk menginstal atau menambahkan paket seperti
racer
,rustfmt
danrustsym
yang sudah kita gunakan pada sub bab sebelumnyapaket yang terinstall akan ditempat kedalam direktoricargo install <nama_paket>
/home/<user>/.cargo/bin
- Update digunakan untuk pemutakhiran semua paket depencies pada proyek kita
atau dapat juga mengupdate perpaket
cargo update
cargo update -p <nama_paket>
- Search digunakan untuk mencari paket-paket yang terdapat di registry crates.io
cargo search reg // Output Updating registry `https://github.com/rust-lang/crates.io-index` winreg = "0.4.0" # Rust bindings to MS Windows Registry API cpuprofiler = "0.0.3" # Bindings to google's cpu profiler ecp = "0.1.1" # easily build compiler plugins.
- Publish digunakan untuk mempublikasikan paket yang kita buat ke registry
cargo publish
- Doc digunakan untuk men-generate dokumentasi paket yang kita buat
hasil dokumentasi otomatis akan dibuat didalam direktori
cargo docs
target/doc