Berkenalan dengan Rust

Bab ini membahas tentang pengetahuan dasar untuk mulai berkenalan dengan Rust. Pembahasan pada bab ini diantaranya adalah :

  1. Apa itu Rust?

  2. Instalasi Rust dan Paket Pendukung

  3. Instalasi Text Editor

  4. Command

1. Apa itu Rust?


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.

2. Instalasi Rust dan Paket Pendukung


Instalasi Rust

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.

  1. cargo adalah package manager untuk Rust.

  2. rustc adalah compiler yang digunakan untuk mengkompilasikode sumber ke static binary.

  3. rustup adalah toolchain manajemen yang sudah kita bahas diatas.

Instalasi paket pendukung

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

Instalasi Text Editor


  • Arch Linux sudo pacman -S atom atau yaourt atom-editor-git

  • Ubuntu / Debian 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 :

$ apm install racer
$ apm install rustfmt
$ apm install rustsym

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 :

Nama Kolom Deskripsi
Path Racer /home/<user>/.cargo/bin/racer
Path kode sumber Rust /home/<user>/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src
Direktori Cargo /home/<user>/.cargo/

Note : Ubah <user> dengan nama user pada komputer anda.

Command


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)

Rust Compiler (rustc) adalah tool yang digunakan untuk mengkompilasikode sumber kedalam static-binary _karena Rust adalah bahasa pemrogramman ahead-of-time compiled yang artinya kita mengkompilasi aplikasi 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, python, atau javascript _terlebih dahulu sebelum me-_running file tersebut.

Untuk mengkompilasi caranya cukup mudah hanya dengan rustc <nama-file>.rs. Contohnya terdapat program sederhana yang menampilkan kalimat "Hello!, Aku <3 Rust." dengan nama file hello.rs 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

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 ke nightly, 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.

    • 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
    
    • Menampilkan daftar toolchain
    $ rustup toolchain list
    
    // Output
    stable-x86_64-unknown-linux-gnu
    nightly-x86_64-unknown-linux-gnu (default)
    
    • Link (membuat custom toolchain)
    $ rustup toolchain link custom-toolchain /path/to/my/toolchain/sysroot
    
  • Component

    • Menambahkan component
    $ 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
    $ 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
    $ 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
    
  • 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

  • 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
    
  • 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 --target. Penggunaan Cargo akan kita bahas pada subbab berikutnya.

    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'
    
    • 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
    rustup target remove arm-linux-androideabi
    

Cargo

Cargo adalah package manager atau tool yang memudahkan kita dalam menambahkan dan memanajemen paket-paket yang menjadi ketergantuangan (dependencies). Untuk itu cargo melakukan empat hal diantaranya :

  1. Membuat metadata dengan nama file Cargo.toml

  2. Menambahkan dependensi yang dibutuhkan

  3. Menjalankan rustc untuk keperluan kompilasi

  4. Memperkenalkan suatu konvensi agar lebih mudah dalam pengembangan

Cargo sendiri mempunyai beberapa subcommand untuk mendukung pengembangan agar lebih mudah dan efisien berikut command-command yang ada pada cargo :

  • New digunakan untuk membuat proyek baru
$ cargo new nama_proyek --bin

atau jika kita ingin membuat proyek library

$ cargo new nama_proyek

jika kita jalankan perintah diatas, maka cargo akan membuatkan direktori dan file-file yang kita butuhkan seperti contoh dibawah ini :

nama_proyek
.
├── .git
│   ├── HEAD
│   ├── config
│   ├── description
│   ├── hooks
│   ├── info
│   ├── objects
│   └── refs
└── src
│   └── main.rs
├── .gitignore
└── Cargo.toml

6 directories, 6 files
  1. direktori proyek yang sesuai dengan nama proyek yang kita sebutkan diatas berikut dengan inisialisasi git

  2. file Cargo.toml sebagai manifest proyek

  3. direktori src sebagai direktori utama kode sumber

  4. file main.rs atau lib.rs jika kita hendak membuat librari

  5. Init digunakan untuk menginisialisasi proyek yang sudah dibuat namun belum terintegrasi dengan cargo

$ cargo init

atau jika proyek yang dibuat akan dijadikan file binari

$ cargo init --bin
  • Build digunakan untuk mengkompilasi kode sumber kedalam bentuk file binari
$ cargo build
  • Run sama halnya build pada perintah run sebenarnya cargo terlebih dahulu mengkompilasi namun langsung menjalankan hasil kompilasi tersebut
$ cargo run
  • Clean digunakan untuk membersihkan direktori/file yang dihasilkan pada saat build yakni direktori target
$ 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 :
$ cargo bench

// Output
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 dan rustsym yang sudah kita gunakan pada sub bab sebelumnya
$ cargo install <nama_paket>

paket yang terinstall akan ditempat kedalam direktori /home/<user>/.cargo/bin

  • Update digunakan untuk pemutakhiran semua paket depencies pada proyek kita
$ cargo update

atau dapat juga mengupdate perpaket

$ 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
$ cargo docs

hasil dokumentasi otomatis akan dibuat didalam direktori target/doc

results matching ""

    No results matching ""