author Ahmad Muhardian

Belajar Rust #01: Mengenal Bahasa Pemrograman Rust


Tutorial Belajar Rust Untuk Pemula

Halo-halo!

Selamat datang di tutorial belajar pemrograman Rust untuk pemula.

Pada tutorial ini, kamu akan belajar dasar-dasar pemrograman Rust..

..mulai dari membuat program Hello World,

Hingga memahami dasar-dasar yang perlu kamu ketahui di Rust.

Intinya, kamu harus berani memulai dari sekarang juga.

Jangan tunda-tunda, agar kamu bisa cepat menguasai bahasa pemrograman Rust.

Oke.

Langsung saja kita mulai ya!

Apa itu Rust?

Rust adalah bahasa pemrograman.

Semua orang sudah tahu itu!

Tapi bahasa pemrograman yang seperti apa?

Nah ini baru menarik kita bahas..

Rust adalah bahasa pemrograman yang menggunakan multi-paradigma. Artinya, kita bisa menulis kode rust dengan gaya OOP (Object Oriented Programming), Function, Prosedural, dan sebagainya.

Jadi, apapun paradigma yang akan kamu gunakan.. kamu bisa pakai di Rust.

Ini tidak seperti Java yang hanya menganut paradigma OOP aja. Mau bikin program Hello World saja, harus bikin class.

Sungguh ribet ya si Java.. 😏

Rust itu cepat dan aman

Selain multi-paradigma, Rust juga merupakan bahasa pemrograman yang cepat dan aman.

Aman dari apa?

Kata ‘aman’ di sini biasanya ditujukan untuk Memory Safety dan Type Safety.

Nah, biasanya ada beberapa bug yang sering terjadi terkait dengan penggunaan memori dan tipe data.

Contohnya seperti bug Null Pointer yang terjadi saat program dijalankan (runtime).

Rust tidak akan membiarkan ini terjadi saat runtime. Program akan dicek saat compile time, dan akan memberikan error jika ada bug tersebut.

Ini tentu akan lebih aman, daripada kita membiarkan program berhasil di-compile..

..tapi pas dijalankan malah error.

Jadi intinya:

Rust merupakan bahasa pemrograman yang aman, performanya cepat, dan mendukung multi-paradigma.

Oke sekarang kita bahas:

Gimana sih Sejarahnya Rust bisa ada?

Rust awalnya dikembangkan oleh pegawai Mozilla bernama Graydon Hoare.

Awalnya di tahun 2006, Graydon Hoare menjadikan Rust sebagai personal project dengan nama rust fungi.

Eh tapi di tahun 2009, Mozilla mulai memberikan dukungan dengan mensponsori project ini.. dan di tahun yang sama, compiler Rust yang awalnya dibuat dengan bahasa OCamel ditulis ulang dengan bahasa Rust itu sendiri.

Compiler Rust yang baru bernama rustc dan berhasil meng-compile dirinya sendiri di tahun 2011.

Lalu di tahun 2012, Compiler Rust dirilis versi pre-alpha-nya..

..dan di tahun 2015, Versi stabil yakni Rust 1.0 dirilis. Yay! 🎉

Pada tahun 2020, Rust menjadi bahasa pemrograman yang paling banyak disukai programmer menurut survey Stack Overflow. 1

hasil survey stack overflow 2020

Luar biasa memang Rust.

Lalu..

Pada tanggal 8 Februari 2021 organisasi baru bernama Rust Foundation dibentuk. Organisasi ini yang akan menangani project dan masa depan Rust. Organisasi ini dibentuk oleh lima perusahaan besar, yakni: AWS, Huawei, Google, Microsoft, dan Mozilla. Kemudian selanjutnya Facebook juga bergabung.

Lalu di tahun 2021, Google mengumumkan untuk men-support Rust sebagai bahasa alternatif C/C++ di Android.

Rust masih terus dikembangkan hingga saat ini.

Fitur unggulan yang ditawarkan Rust

Berikut ini beberapa unggulan yang ditawarkan Rust: 2

1. Memory Safety

Seperti yang sudah kita bahas tadi, Rust aman dari bug memori seperti Null Pointer saat runtime. Karena Null Pointer dicek saat compile time.

Rust tidak akan meng-compile program yang mengandung Null Pointer. Sehingga kita tidak perlu khawatir dengan Null Pointer saat Runtime.

Contoh:

fn main() {
    
    // membuat variabel tapi tidak mengisinya
    let a: u8;
    
    print!("Hello World!");
    
}

Pada contoh ini, kita membuat variabel a dengan tipe data unsigned integer 8 bit, tapi tidak pernah mengisinya.

Maka saat di-compile, pasti akan terjadi error.

warning: unused variable: `a`
 --> src/main.rs:4:9
  |
4 |     let a: u8;
  |         ^ help: if this is intentional, prefix it with an underscore: `_a`
  |
  = note: `#[warn(unused_variables)]` on by default

Ini yang saya maksud Rust itu aman.

2. Memory Managment

Rust nggak pakai memori manajemen seperti garbage collection yang mengatur penggunaan memori secara otomatis.

Rust menggunakan manajemen memori RAII (Resource Aquisition is initialization). Teknik manajemen memori ini akan menghapus resource seperti object dan variabel di akhir scope.

Ini akan membuat penggunaan memori lebih efisien, soalnya nggak ada resource yang dibiarkan sia-sia berada di memori jika sudah selesai dipakai.

Contoh:

fn main() {

    // ini contoh scope
    {
      // membuat variabel score
      let score: u8 = 19;
      print!("Nilai score adalah {}", score);
    } // <- variabel score dihapus di sini karena scope berakhir di sini
    
    // mencoba mengakses variabel score di luar scope
    // tapi hasilnya akan error, karena sudah dihapus dari memori
    print!("Score mu adalah {}", score);
}

Tiap scope diakhiri dengan tutup kurung kurawal } dan di sana akan terjadi pembersihan memori.

3. Ownership

Tiap data atau resource di Rust hanya punya satu pemilik. Artinya, jika kita memindahkan nilai ke variabel lain.. maka pointer-nya akan dipindahkan ke variabel tersebut.

Contoh:

fn main() {
    
    let a = String::from("Petani Kode");
    
    print!("nilai a adalah {}\n", a);
    
    let b = a;
    
    print!("nilai b adalah {}\n", b);
    
    // mencoba mengakses variabel `a` tapi ia sudah dihapus
    // karena pointernya udah dipindah ke `b`
    print!("nilai a adalah {}\n", a);
    // ^-- jadi ini akan error
    
}

Awalnya variabel a melakukan pointing ke object string Petani Kode, kemudian kita pindahkan ke b.

Sekarang yang punya string Petani Kode adalah si b dan si a mencoba mengaksesnya, tapi akan terjadi error. Karena si a sudah tidak memiliki string Petani Kode lagi.

Ownership sebenarnya bertujuan untuk menghemat penggunaan memori. Dari pada meng-copy data β€œPetani Kode” ke b rust lebih baik memindahkan pointernya saja.

4. Tipe Data dan Polimorfisme

Rust mendukung banyak tipe data. Mulai dari tipe data primitif, scalar type, Compound Type, dan Custom Tipe data.

Tipe data primitif di Rust:

  • Signed integers: i8, i16, i32, i64, i128 dan isize (pointer size)
  • Unsigned integers: u8, u16, u32, u64, u128 dan usize (pointer size)
  • Float: f32, f64
  • char: karakter seperti 'a', 'Ξ±' dan '∞' (ukuran tiap karakter: 4 bytes)
  • bool yakni true dan false
  • dan type data unit (), yang mana hanya bisa diisi dengan tuple kosong: ()

Tipe data Compound di Rust:

  • arrays, contoh: [1, 2, 3]
  • tuples, contoh: (1, true)

Custom tipe data dapat dibuat dengan Struct dan Enum.

Selain mendukung banyak tipe data, di Rust kita juga bisa membuat polimorfisme pada fungsi dengan generic.

Contohnya:

// type T must have the "Ord" trait
// so that ">" and "<" operations can be done
fn max<T: Ord>(a: &[T]) -> Option<&T> {
    let mut result = a.first()?;
    for n in a {
        if *n > *result {
            result = &n;
        }
    }
    Some(result)
}

5. Macros

Macro ini seperti prosedur yang memungkinkan kita untuk melakukan meta programming di Rust.

Macro biasanya dipakai agar kita tidak mengulang-ulang kode yang sama, Don’t Repeat Yourself (DRY).

6. Interface untuk C dan C++

Rust punya foreign function interface (FFI) yang memungkinkan kita untuk menjalankan kode yang ditulis dalam bahasa C/C++ di dalam program Rust dan begitu juga sebaliknya.

Contohnya:

#[cxx::bridge]
mod ffi {
    unsafe extern "C++" {
        include!("cxx-demo/include/blobstore.h");

        type BlobstoreClient;

        fn new_blobstore_client() -> UniquePtr<BlobstoreClient>;
    }
}

fn main() {
    let client = ffi::new_blobstore_client();
}

Pada contoh ini kita memanggil fungsi new_blobstore_client(). Fungsi ini merupakan fungsi yang ditulis dengan bahasa C++.

Apa yang bisa dibuat dengan Rust?

Rust sendiri sudah banyak digunakan untuk membuat aplikasi keren seperti:

  • Deno – Runtime Javascript dan Typescript;
  • Figma – Aplikasi Desain vektor berbasis web;
  • Discord – Aplikasi chat yang menggunakan Rust di backend;
  • Polkadot – Blockchain Platform yang dibuat dengan Rust;
  • dan masih banyak lagi.

Intinya:

Rust merupakan bahasa general-purpose. Bisa dipakai buat bikin aplikasi CLI, GUI Desktop, Web, Game, IoT, Blockchain, SmartContract, dan sebagainya.

Apa Selanjutnya?

Sejauh ini kita sudah berkenalan dengan Rust.

Tenang saja jika kamu belum paham contoh-contoh kode yang saya tampilkan di atas..

Nanti kita akan bahas lebih dalam lagi di tutorial berikutnya.

Untuk saat ini tutorialnya sampai di sini dulu.

Selanjutnya silakan pelajari tentang:

Selamat belajar!

Daftar isi tutorial

  1. Belajar Rust #01: Mengenal Bahasa Pemrograman Rust
  2. Belajar Rust #02: Install dan Setup Rust di Komputermu
  3. Belajar Rust #03: Memahami Sintaks Dasar Rust
  4. Belajar Rust #04: Fungsi Input dan Output di Rust (Coming soon)
  5. Belajar Rust #05: Variabel dan Tipe Data di Rust (Coming soon)
  6. Belajar Rust #06: Operator di Rust (Coming soon)
  7. Belajar Rust #07: Percabangan di Rust (Coming soon)
  8. Belajar Rust #08: Perulangan di Rust (Coming soon)
  9. Belajar Rust #09: Struktur Data List di Rust (Coming soon)
  10. Belajar Rust #10: Struktur Data Struct di Rust (Coming soon)
  11. Belajar Rust #11: Tipe Data Enum di Rust (Coming soon)
  12. Belajar Rust #12: Fungsi di Rust (Coming soon)
  13. Belajar Rust #13: Memahami Pointer di Rust (Coming soon)
  14. Belajar Rust #14: Memahami Macro di Rust (Coming soon)
  15. Belajar Rust #15: Error Handling di Rust (Coming soon)
  16. Belajar Rust #16: Crates dan Cargo di Rust (Coming soon)
  17. 🚧 Work in Progress 🚧

    Maaf jika ada link yang belum aktif. Link tersebut masih dalam draft atau sedang dikerjakan. Do'akan agar penulis tetap sehat dan tulisannya cepat terbit πŸ™. Kamu juga bisa memberikan dukungan dengan mentrakteer kopi β˜• supaya penulis kuat begadang, hehe.