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:
- Kita jalanin perintah:
cargo new <nama-proyeknya>
. Nanti dia akan membuat direktori baru sesuai argumen<nama-proyeknya>
. Contohnya ky di atas. - 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 keywordmut
. - #3 : Karakter
&
artinya kita kirim variabelarg
ke fungsiread_line()
dengan cara pass-by-reference. - #4 :
.expect()
dijalanin kalo ada error. Mirip fungsicatch
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 ...
- » Mengenal Hook di ReactJS
- » JS : Pemrograman Asinkron
- » End-to-end Testing dengan The Intern
- » Cara Mudah Pakai Environment Variable dengan Webpack
- » ReactJS : Higher Order Component