Rust 101: Hello Rust

Rust adalah bahasa pemrograman yang diciptakan oleh Graydon Hoare di Mozilla Research. Bahasa ini secara sintaks mirip C++ tapi dirancang dengan manajemen memori yang lebih baik tanpa mengorbankan kecepatan. Rust bersifat generik & bisa dipake untuk membuat software mulai dari OS sampe browser, dari embedded-systems sampe Cryptocurrency. Beberapa proyek-proyek high-profile yang pake Rust antara lain NPM, Firefox, dan Dropbox.

Dalam artikel kali ini, saya bahas sedikit tentang Rust. Mulai dari instalasinya.

Instalasi

Kita bisa instal Rust pake installer resmi dari websitenya. Kalo pake Mac, bisa juga pake Homebrew. Yang pake Windows, bisa coba instal pake Chocolatey.

$ brew install rustup
$ rustup-init

... bla bla bla

1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
> 1

Untuk mastiin instalasi udah bener, kita coba bikin Hello world.

// file: hello.rs
fn main() {
  println!("Hello, world!");
}

Terus compile pake rustc.

$ rustc hello.rs
$ ./hello
Hello, world!

Kalo windows, mungkin begini ya.

> rustc hello.rs
> hello.exe
Hello, world!

Kalo ada pesan error, “rustc not found” atau semacamnya, pastikan lagi direktori cargo/bin/ yang dibuat oleh installer ada di system-path.

Cargo

Selain menginstal rustc, installer juga menginstal package-manager yang dinamai Cargo. Jadi kalo untuk Node/JavaScript ada NPM, di Rust ada Cargo. Selain sebagai package-manager, Cargo juga berfungsi sebagai bootstrap, mirip create-react-app.

$ cargo new hello-rust        
$ cd hello-rust

Perintah cargo new menghasilkan direktori baru bernama hello-rust yang isinya udah lengkap dengan Git.

Buka file src/main.rs, isinya udah Hello World.

fn main() {
    println!("Hello, world!");
}

Jadi cara bikin proyek pake Cargo ada dua. Kita bisa pilih salah satu:

  1. Kita jalanin perintah: cargo new <nama-proyeknya>. Nanti dia akan membuat direktori baru sesuai argumen <nama-proyeknya>. Contohnya ky di atas.
  2. Bikin dulu direktori proyeknya terus di dalam direktori itu kita jalanin cargo init.

Masih di dalam direktori proyek, kita jalanin perintah cargo run untuk mengkompilasi & jalanin outputya. Bisa diliat dari lognya, perintah ini jalanin compiler dalam modus debug.

$ cargo run
  Compiling hello-rust v0.1.0 (/Users/boss/Desktop/hello-rust)
    Finished dev [unoptimized + debuginfo] target(s) in 2.16s
     Running `target/debug/hello-rust`
Hello, world!

Hasil kompilasinya ada di direktori target/debug/. Untuk kompilasi dalam modus release, kita jalanin perintah cargo build. Outputnya nanti ada di direktori target/release/.

$ cargo build --release
   Compiling hello-rust v0.1.0 (/Users/boss/Desktop/hello-rust)
    Finished release [optimized] target(s) in 0.19s

Sekarang kita coba bikin modul.

// file: src/hello.rs
pub fn say() {
  println!("Hello Rust");
}

Terus modul itu kita “impor” di src/main.rs.

// impor
mod hello;

fn main() {
    hello::say();
}

Jalanin cargo run.

$ cargo run
   Compiling hello-rust v0.1.0 (/Users/boss/Desktop/hello-rust)
    Finished dev [unoptimized + debuginfo] target(s) in 0.22s
     Running `target/debug/hello-rust`
Hello Rust

Cargo.toml & Cargo.lock

Di dalam direktori proyek kita ada file Cargo.toml & Cargo.lock. File yang pertama berisi informasi tentang proyek/aplikasi kita termasuk paket/modul apa yang kita perlukan (dependency) mirip package.json di NodeJS. File yang kedua, mirip package-lock.json, isinya tentang detil paket yang jadi dependency.

[package]
name = "hello-rust"
version = "0.1.0"
authors = ["Anggie Bratadinata <anggie.bratadinata@gmail.com>"]
edition = "2018"
[dependencies]

Input dari Command-Line

Berikutnya, kita coba untuk memproses input dari command-line. Ubah src/hello.rs & src/main.rs seperti di bawah:

// file: src/hello.rs
pub fn say(name: String) {
  println!("Halo, {}", name); // #1
}
// file: src/main.rs
use std::io;
mod hello;

fn main() {
    println!("Masukkan nama Anda...");
    let mut arg = String::new(); // #2

    io::stdin().read_line(&mut arg) // #3
        .expect("Ga bisa baca input! :( "); // #4

    hello::say(arg);
}

Keterangan:

  • #1 : Karakter {} adalah placeholder. Mirip template-string di JavaScript.
  • #2 : Bikin variabel arg yang sifatnya mutable. Semua variabel bersifat konstan kecuali kalo kita bikin nggak konstan pake keyword mut.
  • #3 : Karakter & artinya kita kirim variabel arg ke fungsi read_line() dengan cara pass-by-reference.
  • #4 : .expect() dijalanin kalo ada error. Mirip fungsi catch di Promise-nya JavaScript.
$ cargo run
   Compiling hello-rust v0.1.0 (/Users/boss/Desktop/hello-rust)
    Finished dev [unoptimized + debuginfo] target(s) in 0.31s
     Running `target/debug/hello-rust`
Masukkan nama Anda...
Boss
Halo, Boss

Sekian dulu. Kapan-kapan lanjut lagi.

Also in this category ...


Leave a Reply

Your email address will not be published. Required fields are marked *