name: rust-programming-expert description: "Expert-level skill for Rust programming (Rust 2024 / v1.85+). Covers memory safety, async, Axum/SQLx, CLI, and optimization in English and Indonesian." author: "Roedy Rustam"
Rust Programming Expert
English
Description
Expert-level guidance for writing high-performance, robust, and memory-safe systems applications using Rust 2024 (v1.85+). This skill outlines advanced practices in ownership, lifetimes, error design, async architectures, backend development, performance tuning, and idiomatic ecosystem patterns.
Trigger Conditions
- Use when bootstrapping or maintaining a production Rust crate, application, or workspace.
- Use when designing data models involving complex lifetimes, smart pointers (
Arc,Rc,RefCell), or zero-copy abstractions (Cow). - Use when building high-concurrency async services with Tokio and Axum.
- Use when interacting with databases safely using compile-time checked SQL with SQLx.
- Use when crafting modern CLI utilities using Clap and Serde.
- Use when migrating or upgrading an existing Rust codebase to the Rust 2024 Edition.
- Use when profiling, optimizing, or debugging compile times, memory footprints, or runtime performance.
Rust 2024 Edition & Core Architecture
Rust 2024 (stabilized in Rust v1.85) enhances language ergonomics, strengthens safety invariants, and introduces native async enhancements:
- Async Closures: Stable
async || {}&AsyncFntraits. - RPIT Lifetimes: RPIT (
impl Traitin return position) captures all in-scope lifetimes by default. Use explicituse<'a, T>syntax if you want to restrict lifetime capturing. - Unsafe Extern:
externblocks and specific attributes (no_mangle) now require theunsafekeyword. - Prelude Additions:
FutureandIntoFutureare now imported automatically.
Language Essentials & Memory Safety
Memory safety in Rust is guaranteed at compile time through the ownership system:
- Ownership & Borrowing: Each value has a single owner. You can have any number of immutable references (
&T) OR exactly one active mutable reference (&mut T) to a value at any given time. - Lifetimes & Smart Pointers: Avoid references (
&T) in struct definitions unless short-lived. UseArc<T>andMutex<T>orRwLock<T>for thread-safe state sharing.
Idiomatic Error Handling
Rust utilizes the Result<T, E> and Option<T> monads:
- Application-level Errors: Use
anyhowfor high-level application contexts where stack traces and arbitrary error wrapping are needed. - Library-level Errors: Use
thiserrorto define precise, structured, and descriptive domain error enums.
Asynchronous Programming (Rust 2024 + Tokio)
- Prefer Tokio Tasks for I/O: Use
tokio::spawnto run light, concurrent tasks that perform asynchronous I/O. - Do NOT Block the Async Runtime: Never run CPU-bound work or synchronous block-I/O directly inside an async worker thread. Use
tokio::task::spawn_blockingto offload heavy calculations.
Production Ecosystem Integrations
- Axum + SQLx: High performance async routing combined with compile-time checked PostgreSQL database queries.
- Clap + Serde: Declarative command-line argument parser and serialization/deserialization.
Optimization & Unsafe Code
- Avoid Heap Allocations: Use slices
&[T]and zero-copyCow<'a, str>wrappers where possible. - Release Profile (
Cargo.toml): Useopt-level = 3,lto = true, andcodegen-units = 1for production. - Sound Unsafe: Only use
unsafewhen absolutely required. Always document with a// SAFETY:block.
Troubleshooting & Common Gotchas / Pemecahan Masalah
- Lifetimes Mismatch: Ensure returned references don't point to local variables. Use owned types or bind output lifetimes to input lifetimes.
- Send / Sync Boundary Failures: Async block elements across
.awaitmust implementSend. Avoid holding synchronous mutex guards across.awaitpoints.
Bahasa Indonesia
Deskripsi
Panduan tingkat ahli untuk menulis aplikasi sistem yang berkinerja tinggi, tangguh, dan aman secara memori menggunakan Rust 2024 (v1.85+). Skill ini menguraikan praktik-praktik lanjutan dalam kepemilikan (ownership), masa hidup (lifetimes), desain error, arsitektur asinkron, pengembangan backend, optimasi performa, dan pola ekosistem yang idiomatis.
Kondisi Pemicu
- Gunakan saat merancang atau memelihara crate, aplikasi, atau workspace Rust tingkat produksi.
- Gunakan saat mendesain model data dengan lifetime yang kompleks, smart pointers (
Arc,Rc,RefCell), atau abstraksi zero-copy (Cow). - Gunakan saat membangun layanan asinkron konkurensi tinggi dengan Tokio dan Axum.
- Gunakan saat berinteraksi dengan database secara aman menggunakan SQL yang diverifikasi saat kompilasi dengan SQLx.
- Gunakan saat merancang utilitas CLI modern menggunakan Clap dan Serde.
- Gunakan saat memigrasikan atau meningkatkan codebase Rust yang ada ke Edisi Rust 2024.
- Gunakan saat melakukan profiling, mengoptimalkan, atau men-debug waktu kompilasi, penggunaan memori, atau kinerja runtime.
Edisi Rust 2024 & Arsitektur Inti
Edisi Rust 2024 meningkatkan ergonomi bahasa, memperkuat invariant keamanan, dan memperkenalkan peningkatan asinkron bawaan:
- Async Closures: Traits
AsyncFndan penulisan closureasync || {}sekarang stabil. Gunakan untuk adapter stream asinkron atau event handler langsung. - RPIT Lifetimes: RPIT (
impl Traitpada posisi return) menangkap semua lifetime dalam scope secara default. Gunakan sintaksis eksplisituse<'a, T>untuk membatasi penangkapan lifetime. - Unsafe Extern: Blok
externdan atribut tertentu (no_mangle) sekarang memerlukan kata kunciunsafe. - Tambahan Prelude:
FuturedanIntoFuturesekarang diimpor secara otomatis.
Dasar Bahasa & Keamanan Memori
Keamanan memori dijamin saat kompilasi melalui sistem kepemilikan (ownership). Ikuti panduan berikut:
- Kepemilikan & Peminjaman: Setiap nilai memiliki satu pemilik. Ketika pemilik keluar dari scope, nilai tersebut dihapus. Anda dapat memiliki banyak referensi immutable (
&T) ATAU tepat satu referensi mutable (&mut T) aktif pada satu waktu. - Lifetimes & Smart Pointers: Hindari meletakkan referensi (
&T) di dalam definisi struct kecuali untuk struct pembantu berumur pendek. GunakanArc<T>(Thread-Safe Shared Reference) danMutex<T>(Mutual Exclusion) untuk berbagi state antar thread.
Penanganan Error yang Idiomatis
Rust menggunakan monad Result<T, E> and Option<T> alih-alih exception tradisional.
- Tingkat Aplikasi: Gunakan
anyhowuntuk pembuatan skrip cepat atau konteks aplikasi tingkat tinggi di mana pelacakan stack dan pembungkusan error acak diperlukan. - Tingkat Library: Gunakan
thiserroruntuk mendefinisikan enum error domain yang tepat, terstruktur, dan deskriptif.
Pemrograman Asinkron (Rust 2024 + Tokio)
- Gunakan Tugas Tokio untuk I/O: Gunakan
tokio::spawnuntuk menjalankan tugas-tugas ringan dan konkuren. - JANGAN Blokir Runtime Asinkron: Jangan pernah menjalankan pekerjaan berat CPU atau I/O sinkron secara langsung di dalam thread pekerja asinkron. Gunakan
tokio::task::spawn_blockingjika diperlukan.
Integrasi Ekosistem Produksi
- Axum + SQLx (Web API Stack): Axum menyediakan framework web asinkron terkemuka, sementara SQLx menyediakan lapisan interaksi database dengan pemeriksaan keamanan SQL pada saat kompilasi.
- Clap + Serde (CLI Stack): Clap v4 menyediakan parser argumen baris perintah deklaratif berbasis makro. Serde menangani serialisasi/deserialisasi dengan lancar.
Optimasi & Kode Unsafe
- Hindari Alokasi Heap: Gunakan
&stralih-alihStringuntuk variabel read-only. GunakanCow<'a, str>ketika variabel hanya sesekali dimutasi. - Konfigurasi Profil Release (
Cargo.toml): Gunakanopt-level = 3,lto = true, dancodegen-units = 1untuk kinerja maksimal. - Kode Unsafe yang Aman: Hanya gunakan
unsafeuntuk memanggil binding C atau struktur data lockless kustom. Selalu sertakan blok// SAFETY:untuk menjelaskan validitas invariant.