Rust adalah bahasa pemrograman sistem yang menjamin keamanan memori tanpa garbage collector. Pada Course ini, kita akan mempelajari Rust mulai dari variabel dan ownership, pola idiomatik seperti iterator dan trait, hingga membangun REST API yang utuh dengan tokio dan axum.
Seluruh contoh kode pada Course ini diuji menggunakan Rust stable. Apabila Anda menggunakan versi Rust yang berbeda, hasil eksekusi beberapa contoh dapat sedikit berbeda, terutama pada bagian yang memanfaatkan fitur terbaru.
Bab 1 Pengenalan Rust
Pahami keunggulan Rust: keamanan memori tanpa garbage collector, performa, dan toolchain modern.
Buka → # Instalasi RustPasang Rust melalui rustup dan verifikasi instalasi rustc serta cargo di sistem Anda.
Buka → # Memulai dengan CargoGunakan cargo untuk membuat, membangun, menjalankan, dan memeriksa proyek Rust.
Buka → # Anatomi Program PertamaBedah program hello world baris demi baris mulai dari fn main hingga makro println!.
Buka → # Model Kompilasi RustPahami perbedaan rustc dan cargo, direktori target, serta hasil kompilasi debug dan release.
Buka → # Membaca Pesan Error KompilatorPelajari cara membaca diagnostik kompilator Rust dengan kode error, penjelasan, dan saran perbaikan.
Buka → # Rustup dan ToolchainKelola versi toolchain, komponen, dan target kompilasi silang menggunakan rustup.
Buka →Bab 2 Dasar Sintaks
Buat variabel dengan let, pahami perbedaan immutable dan mutable, serta alasan Rust memilih keamanan.
Buka → # Tipe Data SkalairKenali tipe integer, floating point, boolean, dan char beserta ukuran memorinya.
Buka → # Tipe Data KompositGunakan tuple dan array untuk mengelompokkan beberapa nilai dalam satu variabel.
Buka → # Shadowing VariabelDeklarasikan ulang variabel dengan nama sama untuk transformasi nilai secara bertahap.
Buka → # KonstantaGunakan const untuk nilai tetap yang dievaluasi saat kompilasi dengan tipe eksplisit.
Buka → # Operator Aritmetika dan PerbandinganGunakan operator aritmetika dan perbandingan beserta aturan tipe datanya di Rust.
Buka → # Operator Logika dan BitwiseBedakan operator logika short-circuit dari operator bitwise yang memproses bit demi bit.
Buka → # Konversi Tipe dengan asKonversikan tipe primitif menggunakan as dan pahami risiko kehilangan presisi.
Buka → # Type InferencePahami cara kompilator menentukan tipe variabel tanpa anotasi eksplisit.
Buka → # Perilaku Integer OverflowPahami apa yang terjadi saat integer meluap di mode debug dan release beserta metode checked.
Buka →Bab 3 Kontrol Alur
Tulis percabangan kondisional dengan if, else if, dan else tanpa tanda kurung.
Buka → # loop Tak BerhinggaJalankan blok kode berulang tanpa henti dengan loop dan keluar dengan nilai return.
Buka → # whileUlangi blok kode selama kondisi terpenuhi dengan while.
Buka → # for dan RangeIterasi koleksi dan rentang angka dengan for menggunakan idiom for x in.
Buka → # break dan continueHentikan perulangan lebih awal atau lewati satu iterasi dengan break dan continue.
Buka → # Label LoopKendalikan perulangan bersarang dengan label dan break bernama.
Buka → # match DasarGunakan match untuk pencocokan pola yang mencakup seluruh kemungkinan nilai.
Buka → # if sebagai EkspresiManfaatkan if dan blok sebagai ekspresi yang menghasilkan nilai untuk inisialisasi variabel.
Buka →Bab 4 Fungsi
Buat fungsi dengan fn, beri nama dengan snake case, dan panggil dari fungsi lain.
Buka → # Parameter dan ArgumenKirim data ke fungsi melalui parameter dengan tipe eksplisit.
Buka → # Nilai Kembali dan returnKembalikan nilai dari fungsi dengan tipe kembali dan kata kunci return.
Buka → # Ekspresi dan StatementBedakan ekspresi yang menghasilkan nilai dari statement yang tidak.
Buka → # Blok sebagai EkspresiGunakan blok bersarang untuk menghitung nilai sementara sebelum diikat ke variabel.
Buka → # Fungsi Utama mainPahami titik masuk program, exit code, dan argumen baris perintah pada fungsi main.
Buka → # Scope Variabel di FungsiTelusuri masa hidup variabel dari deklarasi hingga akhir scope.
Buka → # Banyak Jalur ReturnTulis fungsi dengan beberapa cabang yang selalu mengembalikan nilai berbeda.
Buka →Bab 5 Ownership dan Memory
Bedakan alokasi memori di stack yang cepat dari heap yang fleksibel.
Buka → # Aturan OwnershipPahami tiga aturan ownership yang menjadi fondasi manajemen memori Rust.
Buka → # Move SemanticsPelajari perpindahan kepemilikan nilai saat variabel di-assign atau dikirim ke fungsi.
Buka → # Copy dan CloneBedakan tipe yang disalin murah dari tipe yang butuh clone eksplisit.
Buka → # Ownership di FungsiTelusuri bagaimana pemanggilan fungsi memindahkan atau menyalin nilai.
Buka → # Referensi dan BorrowingPinjam nilai tanpa mengambil kepemilikan menggunakan referensi.
Buka → # Aturan BorrowingPahami aturan satu referensi mutable atau banyak referensi immutable.
Buka → # Mutable ReferenceUbah nilai pinjaman melalui referensi mutable dengan batasan keamanannya.
Buka → # Dangling ReferenceLihat bagaimana kompilator menolak referensi ke nilai yang sudah tidak valid.
Buka →Bab 6 Slice dan Referensi
Pahami slice sebagai tampilan pinjaman atas rangkaian elemen di memori.
Buka → # String SliceGunakan &str untuk meminjam potongan teks dari String atau string literal.
Buka → # Array dan Vector SliceBuat slice dari array dan Vec beserta notasi rentangnya.
Buka → # Slice sebagai ParameterTerima parameter berupa slice agar fungsi berlaku untuk banyak tipe data.
Buka → # Kapan Menggunakan SlicePutuskan antara meminjam dengan slice atau memindahkan kepemilikan penuh.
Buka →Bab 7 String dan Teks
Pahami string literal yang tersimpan di binary dan tipe pinjaman &str.
Buka → # Tipe StringKenali String sebagai teks yang tumbuh di heap dengan kepemilikan penuh.
Buka → # Membuat dan Mengubah StringBangun teks bertahap dengan push_str, insert, dan operator plus.
Buka → # Mengapa String Tidak Bisa DiindeksPahami representasi UTF-8 dan alasan Rust menolak akses indeks langsung.
Buka → # Iterasi StringTelusuri teks per karakter, per cluster grafem, dan per byte dengan hati-hati.
Buka → # Memotong dan Menggabungkan StringGunakan slice, split, dan concat untuk memanipulasi teks secara aman.
Buka → # Formatting dengan format!Susun teks dengan placeholder {}, debug {:?}, dan format macro.
Buka → # Escape dan Raw StringSisipkan karakter khusus dengan escape dan gunakan raw string untuk teks mentah.
Buka →Bab 8 Struktur Data
Definisikan struct bernama untuk mengelompokkan data yang saling berkaitan.
Buka → # Tuple StructGunakan tuple struct untuk tipe ringkas tanpa nama field.
Buka → # Unit StructManfaatkan struct tanpa data sebagai penanda tipe atau trait implementation.
Buka → # Metode dengan implLengkapi struct dengan metode yang mengakses datanya melalui self.
Buka → # Associated FunctionsBuat fungsi konstruktor dan helper pada impl tanpa instance self.
Buka → # Enum DasarDefinisikan varian nilai bernama untuk merepresentasikan pilihan terbatas.
Buka → # Enum dengan DataSimpan data berbeda pada setiap varian enum seperti pesan bertipe.
Buka → # OptionGantikan null dengan enum Option untuk nilai yang mungkin tidak ada.
Buka → # Struct dan DeriveTurunkan kemampuan Debug dan PartialEq secara otomatis dengan derive macro.
Buka → # Memilih Struct atau EnumTentukan bentuk data yang tepat antara record dan variasi.
Buka →Bab 9 Pattern Matching
Gunakan beberapa pola sekaligus, rentang nilai, dan guard pada satu arm.
Buka → # Destructuring StructUraikan field struct langsung ke variabel lokal melalui pola.
Buka → # Destructuring EnumEkstrak data di dalam varian enum langsung pada arm match.
Buka → # Destructuring TuplePecah tuple menjadi komponen variabel dengan pola tuple.
Buka → # if letTangani satu pola tertentu tanpa menulis match lengkap.
Buka → # while letTerus memproses selama pola tetap cocok dengan while let.
Buka → # Binding dengan @Uji nilai sekaligus mengikatnya ke variabel memakai operator @.
Buka → # ref dan ref mut di PolaBuat referensi atau referensi mutable dari bagian data yang diuraikan.
Buka → # Exhaustiveness CheckingPahami jaminan kompilator bahwa semua kemungkinan pola telah tertangani.
Buka →Bab 10 Koleksi
Buat vector, baca elemen dengan indeks dan get, serta pahami batas indeks.
Buka → # Vec: Update dan RemoveTambah, sisipkan, dan hapus elemen vector dengan aman.
Buka → # Vec: IterasiTelusuri elemen vector dengan iter, iter_mut, dan into_iter.
Buka → # Vec dan OwnershipPahami kepemilikan elemen di dalam vector saat vector dipindahkan.
Buka → # HashMap: DasarSimpan pasangan kunci-nilai dengan HashMap dan akses nilainya.
Buka → # HashMap: Entry APIPerbarui nilai secara atomik dengan entry API idiomatik.
Buka → # HashMap: Iterasi dan UpdateTelusuri dan ubah isi HashMap termasuk kasus kunci tidak ada.
Buka → # HashSetKelola himpunan nilai unik dengan operasi gabungan dan irisan.
Buka → # BTreeMapGunakan peta terurut ketika urutan kunci menjadi kebutuhan.
Buka → # Memilih KoleksiPetakan kebutuhan data Anda ke struktur koleksi standar yang tepat.
Buka →Bab 11 Penanganan Error
Bedakan error yang dapat dipulihkan dari bug yang harus menghentikan program.
Buka → # panic!Hentikan program saat terjadi bug fatal dengan panic dan pahami unwind.
Buka → # ResultKembalikan hasil operasi yang bisa gagal dengan enum Result.
Buka → # unwrap dan expectGunakan pintasan penanganan error dengan pesan yang berarti.
Buka → # Keluarga unwrap_orBerikan nilai cadangan dengan unwrap_or, unwrap_or_else, dan unwrap_or_default.
Buka → # map dan map_errUbah nilai sukses atau error di dalam Result tanpa membuka bungkusnya.
Buka → # Operator Tanya ?Propagasi error dengan ringkas menggunakan operator tanya.
Buka → # Result di mainKembalikan Result dari fungsi main dengan Box<dyn Error>.
Buka → # Enum Error KustomDefinisikan tipe error aplikasi sebagai enum dengan data konteks.
Buka → # Kapan panic vs ResultTentukan strategi error: hentikan program atau pulihkan dengan Result.
Buka →Bab 12 Generics
Lihat duplikasi fungsi yang identik dan kenali kebutuhan generics.
Buka → # Fungsi GenerikParametrisasi tipe parameter pada fungsi dengan <T>.
Buka → # Struct GenerikSimpan tipe apa pun di dalam struct dengan type parameter.
Buka → # Enum GenerikKenali enum generik bawaan seperti Option dan Result.
Buka → # Method GenerikImplementasikan method untuk struct generik dengan atau tanpa parametrisasi.
Buka → # Trait BoundBatasi tipe parameter dengan trait agar operasi tertentu tersedia.
Buka → # Multiple Bounds dan whereKombinasikan beberapa trait bound dengan notasi + dan klausa where.
Buka → # MonomorphisasiPahami bagaimana generics dikompilasi menjadi kode tipe spesifik.
Buka →Bab 13 Traits
Nyatakan kontrak perilaku bersama sebagai trait dengan signature method.
Buka → # Implementasi TraitPenuhi kontrak trait untuk tipe Anda dengan impl Trait for Type.
Buka → # Default ImplementationSediakan implementasi bawaan yang bisa dipakai atau diganti.
Buka → # Override Implementasi DefaultGanti perilaku bawaan trait dengan versi spesifik tipe Anda.
Buka → # Trait Bound pada FungsiTerima tipe apa pun yang memenuhi trait tertentu sebagai parameter.
Buka → # impl Trait sebagai ArgumenTulis parameter generik dengan sintaks singkat impl Trait.
Buka → # impl Trait sebagai ReturnKembalikan tipe konkret yang dijaga abstrak dengan impl Trait.
Buka → # Derive MacroBangun implementasi Debug, Clone, dan PartialEq otomatis dengan derive.
Buka → # Orphan RulePahami aturan koherensi implementasi trait untuk tipe asing.
Buka → # Operator OverloadCustom operator aritmetika dengan implementasi trait std::ops.
Buka →Bab 14 Lifetime
Lihat kasus nyata referensi tidak valid yang ditolak borrow checker.
Buka → # Anotasi Lifetime di FungsiDeskripsikan hubungan umur referensi parameter dan nilai kembali.
Buka → # Lifetime pada Field StructSimpan referensi di struct dengan batasan lifetime eksplisit.
Buka → # Lifetime ElisionPahami aturan otomatis yang menghilangkan anotasi pada pola umum.
Buka → # Lifetime di MethodGunakan elision dan anotasi lifetime pada impl block.
Buka → # Lifetime 'staticPahami referensi yang hidup sepanjang program dan kesalahpahamannya.
Buka → # Lifetime BoundsKombinasikan lifetime dengan trait bound untuk kendali lebih presisi.
Buka →Bab 15 Polimorfisme
Kenali dyn Trait sebagai tipe runtime yang menyembunyikan tipe konkret.
Buka → # Box<dyn Trait>Simpan trait object di heap dengan Box untuk kepemilikan penuh.
Buka → # Static vs Dynamic DispatchBedakan pemanggilan method yang diikat saat kompilasi dan saat runtime.
Buka → # Object SafetyPahami syarat trait agar bisa dipakai sebagai trait object.
Buka → # dyn Trait dalam KoleksiSimpan banyak tipe berbeda dalam satu vector trait object.
Buka → # Enum sebagai AlternatifCapai polimorfisme dengan enum ketika himpunan tipe tertutup.
Buka → # Memilih PendekatanTimbang performa, fleksibilitas, dan ergonomi antara generik dan dyn.
Buka →Bab 16 Smart Pointers
Alokasikan nilai tunggal di heap dengan Box<T>.
Buka → # Box untuk Struktur RekursifBatasi ukuran tipe rekursif seperti linked list dengan Box.
Buka → # Deref dan DerefMutPahami deref coercion yang membuat smart pointer transparan dipakai.
Buka → # Trait DropJalankan pembersihan sumber daya saat nilai keluar dari scope.
Buka → # Rc: Reference CountBagikan kepemilikan read-only ke banyak pemilik dengan Rc.
Buka → # RefCell: Interior MutabilityUbah data lewat referensi immutable dengan pemeriksaan runtime.
Buka → # Kombinasi Rc dan RefCellBangun struktur data bersama yang bisa diubah dengan Rc<RefCell<T>>.
Buka → # Weak dan Siklus MemoriPutuskan siklus referensi yang menyebabkan kebocoran memori.
Buka →Bab 17 Closure
Tulis fungsi anonim ringkas dengan pipe syntax dan inferensi tipe.
Buka → # Menangkap LingkunganAkses variabel di sekitar closure secara immutable maupun mutable.
Buka → # Fn, FnMut, FnOncePahami tiga trait closure dan strategi penangkapan masing-masing.
Buka → # Closure dengan movePindahkan kepemilikan variabel ke dalam closure untuk thread dan iterator.
Buka → # Closure sebagai ParameterTerima closure dengan impl Fn atau generik bound.
Buka → # Mengembalikan ClosureKembalikan closure dari fungsi dengan impl Fn atau Box.
Buka → # Closure di IteratorLihat closure bekerja pada map, filter, dan adapter lainnya.
Buka →Bab 18 Iterator
Pahami trait Iterator dan method next sebagai jantung iterasi.
Buka → # iter dan into_iterBedakan tiga bentuk iterasi: pinjam, pinjam mutable, dan pindahkan.
Buka → # Lazy EvaluationPahami iterator yang tidak bekerja sebelum consumer menjalankannya.
Buka → # Adapter mapUbah setiap elemen dengan closure pada adapter map.
Buka → # Adapter filterSaring elemen berdasarkan predicate dengan filter.
Buka → # Menggabungkan AdapterRangkai adapter bertingkat membentuk pipeline data deklaratif.
Buka → # Consumer collect dan sumKumpulkan hasil iterator ke koleksi atau agregat angka.
Buka → # zip, enumerate, dan LainnyaPadukan dua iterator, beri nomor, dan jelajahi adapter bawaan lain.
Buka → # Iterator KustomImplementasikan trait Iterator untuk tipe buatan sendiri.
Buka →Bab 19 Modul dan Visibilitas
Kelompokkan fungsi dan tipe dalam modul bersarang dengan keyword mod.
Buka → # Path: crate, self, superAkses item antar modul dengan path absolut dan relatif.
Buka → # useBawa nama ke scope dengan use dan as untuk alias.
Buka → # pub dan VisibilitasBuka akses item privat menjadi publik secara bertingkat.
Buka → # pub use: Re-exportPublikasikan item modul dalam sebagai bagian antarmuka publik.
Buka → # Modul File TerpisahPindahkan modul ke berkas sendiri dengan anotasi path file.
Buka → # Struktur Proyek IdiomatikSusun modul utama, modul util, dan biner mengikuti konvensi komunitas.
Buka → # pub(crate) dan Visibilitas LanjutanBatasi visibilitas pada crate ini saja dengan pub(crate).
Buka →Bab 20 Crates dan Cargo
Bedakan crate biner yang dieksekusi dari crate pustaka yang diimpor.
Buka → # Package dan Cargo.tomlPahami anatomi manifest proyek dan metadata paketnya.
Buka → # Dependensi dari crates.ioTambahkan pustaka eksternal dan gunakan dalam kode.
Buka → # Versi dan SemVerBaca requirement versi caret dan tilde beserta resolusi cargo.
Buka → # Fitur FeaturesKompilasi kondisional dengan fitur opsional pada crate.
Buka → # Profil dev dan releaseAtur optimasi, debug info, dan flag linker tiap profil build.
Buka → # WorkspaceSatukan banyak crate dalam satu workspace dengan target dibagikan.
Buka → # Build Script build.rsJalankan kode saat build untuk generate kode atau set environment.
Buka → # Perintah Cargo BermanfaatGunakan cargo tree, cargo update, dan cargo doc dalam alur kerja.
Buka → # Publikasi ke crates.ioSiapkan metadata, versi, dan publikasikan crate pertama Anda.
Buka →Bab 21 Testing
Pahami pembagian peran kompilator dan test dalam menjamin kualitas.
Buka → # Unit Test dan mod testsTulis test di samping kode dengan atribut test dan cfg(test).
Buka → # Macro assert!Nyatakan kondisi yang harus benar dengan assert dan pesan galat kustom.
Buka → # assert_eq! dan assert_ne!Bandingkan nilai pada test dan baca laporan perbedaannya.
Buka → # should_panicUji kode yang sengaja mengalami panic dengan expected message.
Buka → # Test dengan ResultTulis test yang mengembalikan Result agar ? bisa dipakai.
Buka → # Integration TestUji antarmuka publik crate dari direktori tests terpisah.
Buka → # Doc TestJadikan contoh di dokumentasi sebagai test yang ikut diverifikasi.
Buka →Bab 22 Dokumentasi
Gunakan komentar // untuk catatan internal yang tidak masuk dokumentasi.
Buka → # Doc Comment ItemDokumentasikan fungsi, struct, dan modul dengan ///.
Buka → # Doc Comment Crate //!Tulis ringkasan crate dan modul induk dengan //!.
Buka → # rustdoc dan cargo docHasilkan dan telusuri dokumentasi HTML API Anda.
Buka → # Bagian Dokumentasi StandarSusun dokumentasi dengan section Arguments, Panics, dan Examples.
Buka →Bab 23 Kualitas Kode
Format seluruh proyek secara otomatis dengan cargo fmt.
Buka → # Konfigurasi rustfmtSesuaikan gaya format melalui rustfmt.toml.
Buka → # clippy DasarJalankan linter clippy dan perbaiki saran idiomatiknya.
Buka → # Kategori Lint clippyPahami kelompok lint correctness, style, dan pedantic beserta levelnya.
Buka → # Integrasi CIJalankan fmt, clippy, dan test otomatis di GitHub Actions.
Buka →Bab 24 Koncurrency
Pahami concurrency di atas thread sistem operasi milik Rust.
Buka → # spawn dan joinLuncurkan thread baru dan tunggu hasilnya dengan handle join.
Buka → # Closure move di ThreadPindahkan kepemilikan data ke thread dengan closure move.
Buka → # Channel mpscKirim nilai antar thread lewat channel multi-producer single-consumer.
Buka → # Channel Banyak ProducerCloning transmitter untuk mengirim dari beberapa thread sekaligus.
Buka → # Mutex DasarLindungi data bersama dengan mutex dan lock yang otomatis dibebaskan.
Buka → # ArcBagikan kepemilikan data antar thread dengan Arc atomic refcount.
Buka → # Trait Send dan SyncPahami marker yang menentukan tipe mana yang boleh lintas thread.
Buka → # Deadlock dan PencegahanKenali pola deadlock dan aturan praktis menghindarinya.
Buka →Bab 25 Pemrograman Async
Pahami batas thread untuk I/O dan model tugas ringan async.
Buka → # async fnDefinisikan fungsi asinkron yang mengembalikan Future.
Buka → # .awaitMenunggu hasil future tanpa memblok thread dengan await.
Buka → # Runtime tokioJalankan kode async di atas scheduler tokio dengan runtime.
Buka → # Spawn TaskLuncurkan tugas independen di runtime dengan tokio::spawn.
Buka → # I/O AsyncGunakan tokio::fs dan operasi jaringan non-blocking.
Buka → # select!Menangguhkan beberapa future dan merespons yang selesai lebih dulu.
Buka → # Error di AsyncTangani galat future dan gabungkan error lintas tugas.
Buka →Bab 26 Unsafe Rust
Kenali lima kemampuan unsafe dan tanggung jawab yang menyertainya.
Buka → # Blok dan Fungsi unsafeTandai bagian kode yang memakai operasi berisiko tinggi.
Buka → # Raw PointerKenali *const T dan *mut T yang tanpa jaminan borrow checker.
Buka → # Dereferensi Raw PointerAkses nilai lewat raw pointer di dalam blok unsafe.
Buka → # Static MutableAkses dan ubah variabel static mut dengan risiko race data.
Buka → # Safe AbstractionBungkus kode unsafe menjadi API yang tetap aman dipakai.
Buka → # FFI dengan externPanggil fungsi pustaka C dari Rust dengan keyword extern.
Buka →Bab 27 Macros
Pahami kebutuhan metaprogramming yang tak terjawab oleh fungsi.
Buka → # macro_rules! DasarDefinisikan macro deklaratif dengan pola dan ekspansi.
Buka → # Repetisi di MacroProses daftar argumen berulang dengan $(...),*.
Buka → # Fragment SpecifierKendalikan jenis token yang ditangkap pola seperti expr dan ident.
Buka → # Makro StandarBedah println!, vec!, dan format! sebagai macro sehari-hari.
Buka → # Macro ProseduralKenali derive, attribute, dan function-like proc macro.
Buka →Bab 28 Tipe Lanjutan
Bungkus tipe primitif agar mendapat tipe identitas dan validasi sendiri.
Buka → # Type AliasBeri nama ringkas untuk tipe panjang dengan type.
Buka → # Tipe Never !Pahami tipe ! untuk kode yang tidak pernah menghasilkan nilai.
Buka → # Sized dan UnsizedBedakan tipe berukuran tetap dari tipe slice yang tak berukuran.
Buka → # PhantomDataSimpan type parameter hantu untuk type safety tanpa data runtime.
Buka → # From dan IntoKonversi antar tipe idiomatik dengan trait From dan Into.
Buka → # TryFrom dan TryIntoKonversi yang bisa gagal dengan Result pada TryFrom.
Buka →Bab 29 Desain API
Terapkan prinsip kemudahan dipakai dan sulit disalahgunakan.
Buka → # Builder PatternSusun konfigurasi bertahap dengan builder yang memvalidasi saat build.
Buka → # Typestate PatternPaksa urutan pemanggilan API lewat perpindahan tipe state.
Buka → # Mengonsumsi selfHentikan pemakaian lanjutan dengan method yang mengambil self.
Buka → # Newtype untuk Validasi DomainJaga aturan bisnis lewat tipe yang hanya berisi nilai sah.
Buka → # Desain Error pada APIEkspos error publik yang informatif tanpa membocorkan detail internal.
Buka → # Rust API GuidelinesIkuti konvensi penamaan dan dokumentasi komunitas Rust.
Buka →Bab 30 Serde dan Serialisasi
Kenali kerangka serialisasi serde dan crate serde_json.
Buka → # Derive Serialize DeserializeTurunkan kemampuan konversi struct ke format data otomatis.
Buka → # Parsing dan Serialize JSONBaca JSON menjadi struct dan tulis struct menjadi teks JSON.
Buka → # Atribut rename dan skipSesuaikan nama field dan sembunyikan data sensitif dari JSON.
Buka → # Atribut default dan flattenIsi field opsional dan ratakan struktur JSON bersarang.
Buka → # serde_json::ValueTangani JSON tak berstruktur dengan tipe Value dinamis.
Buka →Bab 31 Logging dan Observabilitas
Gantikan println debug dengan sistem logging yang terkendali.
Buka → # Crate logPakai facade log dengan level error warn info debug trace.
Buka → # env_loggerAktifkan log lewat variabel lingkungan dengan env_logger.
Buka → # Tracing DasarInstrumen kode dengan span dan event dari crate tracing.
Buka → # tracing-subscriberPasang subscriber dengan filter RUST_LOG dan format output.
Buka →Bab 32 Optimasi dan Deployment
Bandingkan performa biner debug dan release beserta flag optimasinya.
Buka → # LTO dan Codegen UnitsPompakan optimasi lintas crate dengan pengaturan lanjutan di profil.
Buka → # Strip dan Ukuran BinerKecilkan biner dengan strip symbol dan pengaturan panic abort.
Buka → # Cross CompilationBangun biner untuk sistem operasi lain dengan rustup target.
Buka → # Docker untuk Aplikasi RustKemas biner release dalam image Docker multi-stage yang kecil.
Buka → # Benchmark SederhanaUkur waktu eksekusi dengan Instant dan hindari jebakan pengukuran.
Buka →Bab 33 Ekosistem
Temukan dan menilai crate berdasarkan unduhan, dokumentasi, dan umur.
Buka → # anyhow dan thiserrorSederhanakan error aplikasi dengan anyhow dan error library dengan thiserror.
Buka → # clap untuk CLIBangun aplikasi CLI berargumen dengan parser clap.
Buka → # rand dan chronoHasilkan angka acak dan olah waktu dengan crate standar komunitas.
Buka → # Konvensi KomunitasIkuti budaya kode idiomatik, review, dan RFC proses Rust.
Buka → # Sumber Belajar LanjutanLanjutkan perjalanan dengan buku resmi, std docs, dan komunitas.
Buka →