Rust di 2025: Menargetkan perangkat lunak fondasional
(smallcultfollowing.com)- Rust merayakan ulang tahunnya yang ke-10 tahun ini dan semakin memantapkan diri sebagai bahasa inti untuk pengembangan perangkat lunak fondasional di masa depan
- Perangkat lunak fondasional berarti lapisan yang menjadi dasar bagi segala sesuatu, seperti kernel sistem operasi, platform cloud, perangkat embedded, dan alat CLI
- Rust menurunkan hambatan dengan menyediakan performa dan keandalan setingkat C/C++ sekaligus sistem tipe yang menjamin keamanan memori
- Misi Rust tidak terbatas pada domain fondasional saja, tetapi juga memberi dampak pada pengembangan aplikasi tingkat atas melalui proyek seperti Dioxus, Tauri, Leptos
- Ke depan, Rust berencana menjadikan interoperabilitas bahasa, perluasan sistem tipe, dan penguatan ekosistem sebagai area investasi utama
Visi Rust: perangkat lunak fondasional
- Visi inti Rust adalah membuat perangkat lunak fondasional lebih mudah ditulis dan dipelihara
- Perangkat lunak fondasional mencakup kernel sistem operasi, infrastruktur cloud, perangkat embedded, alat CLI, dan lain-lain yang menjadi dasar bagi seluruh sistem
- Saat ini sudah diadopsi di berbagai tempat seperti kernel Windows dan Linux, mesin pencarian VSCode yaitu ripgrep, Deno, dan package manager Python uv
- Untuk perangkat lunak seperti ini, performa, keandalan, dan produktivitas sama-sama penting
- Jika fondasinya runtuh, seluruh lapisan di atasnya akan terdampak, sehingga stabilitas menjadi hal yang esensial
- Penurunan performa akan menjadi batas performa lapisan atas, sehingga overhead harus seminimal mungkin
Performa, keandalan, dan produktivitas perangkat lunak fondasional
- Perangkat lunak fondasional, seperti semua perangkat lunak lainnya, memiliki beragam kebutuhan, tetapi setiap unsurnya menjadi jauh lebih penting
- Keandalan adalah prioritas tertinggi. Jika fondasinya gagal, semua yang berdiri di atasnya ikut gagal
- Overhead performa menentukan batas performa lapisan atas, sehingga harus ditekan seminimal mungkin
- Sebelumnya, ada dua pilihan untuk memenuhi kebutuhan tersebut
- C/C++ : memberikan kebebasan besar, tetapi menuntut tingkat ketelitian yang sepadan
- Bahasa tingkat tinggi seperti Java dan Go: memerlukan pola penulisan khusus untuk menjaga performa, sehingga ada batasan dalam penggunaan abstraksi dan kenyamanan
- Rust mengubah pendekatan lama ini dengan menggabungkan abstraksi tanpa biaya (zero-cost abstraction) dan sistem tipe yang menjamin keamanan memori
- Hasilnya adalah alat yang memungkinkan penulisan kode tingkat tinggi secara aman sambil tetap mencapai performa tingkat rendah dan stabilitas memori secara bersamaan
Menurunkan hambatan masuk dan memperkuat kemampuan pengembang
- Dalam presentasi Rust, sistem tipe dan pemeriksaan statis sering diibaratkan sebagai "bayam": baik untuk Anda, tetapi tidak selalu ingin dikonsumsi
- Dalam praktiknya, sistem tipe adalah senjata yang sangat kuat bagi pengembang
- Pemula dapat mempelajari struktur perangkat lunak yang baik melalui proses mempelajari sistem tipe
- Pengembang berpengalaman dapat menemukan kesalahan dalam rancangan strukturnya sendiri dengan lebih cepat
- Pernyataan Yehuda Katz, "Abstraksi yang saya buat saat fokus membantu diri saya di masa depan saat saya lelah," juga merangkum hal ini dengan baik
Area di luar perangkat lunak fondasional
- Meski misi Rust berfokus pada perangkat lunak fondasional, itu bukan berarti area lain diabaikan
- Proyek seperti Dioxus, Tauri, Leptos memperluas penggunaan Rust ke ranah aplikasi tingkat tinggi seperti GUI dan halaman web
- Kekuatan utama Rust pada dasarnya memang berpusat pada perangkat lunak fondasional, tetapi upaya-upaya seperti ini tidak boleh diabaikan
Target ambisius dan pertumbuhan
- Karena perangkat lunak fondasional memerlukan kontrol detail tingkat rendah, aksesibilitas dan ergonomi sering kali dianggap kurang penting
- Justru karena kontrol detail tersebut diperlukan, kegunaan menjadi semakin penting
- Jika pengembang dapat dibantu agar hanya fokus pada bagian yang benar-benar penting, produktivitas bisa meningkat pesat
- Proyek-proyek yang mendorong penerapan Rust di tingkat tinggi memberi peluang untuk membuat pemrograman Rust jauh lebih nyaman
- Peningkatan ini kemudian dapat langsung tercermin juga dalam pengembangan perangkat lunak fondasional
- Intinya adalah meningkatkan kegunaan tanpa kehilangan kendali dan keandalan
Pentingnya dukungan full-stack
- Alasan lain mengapa pengembangan aplikasi tingkat tinggi di Rust terasa nyaman adalah karena seluruh stack dapat dibangun dengan satu teknologi
- Pengembang yang awalnya hanya ingin memakai Rust di sebagian area seperti layanan data plane kini semakin sering memperluasnya ke seluruh area
- Ini karena Rust memiliki produktivitas tinggi dan memungkinkan berbagi library serta kode dalam satu bahasa
- Pada dasarnya, kode yang sederhana akan tetap sederhana dalam bahasa apa pun
Pengalaman pendalaman bertahap (Iterative Deepening)
- Idealnya, pengalaman pertama pengguna Rust harus sederhana, lalu seiring perkembangan proyek, mereka dapat secara bertahap memperluas lebih banyak kontrol secara lokal
- Ini terdengar sederhana, tetapi pada praktiknya merupakan tantangan yang sangat sulit
- Banyak proyek gagal karena hambatan masuk bagi pemula terlalu tinggi, atau karena mempelajari tingkat kontrol yang lebih tinggi menuntut terlalu banyak pengetahuan
- Rust memang tidak selalu berhasil dalam hal ini, tetapi terus berupaya memperbaikinya
Rencana ke depan
- Artikel ini adalah tulisan pertama dari seri ini, dan dalam empat tulisan berikutnya akan dibahas area-area investasi yang diperlukan agar Rust menjadi lebih cocok untuk perangkat lunak fondasional
- Interoperabilitas bahasa yang mulus (smooth language interop) dan ekstensibilitas (extensibility)
- Kejelasan tujuan melalui sistem tipe (clarity of purpose)
- Penguatan ekosistem: pedoman yang lebih baik, alat yang lebih baik, dan pemanfaatan Rust Foundation
- Pada tulisan terakhir, akan dibahas pengelolaan organisasi open source Rust, termasuk cara agar kontribusi dan maintenance menjadi aktivitas yang sebisa mungkin mudah diakses dan menyenangkan
15 komentar
Meski Rust terlihat lumayan bagus, rasanya ini satu-satunya bahasa yang jadi enggan saya dekati karena fandom toksik(?)-nya.
Andai saja C atau C++ punya package manager standar. Setiap melihat Cargo, saya selalu berpikir begitu.
Bayam rasanya enak sekali....
Belakangan ini, nyaris tidak ada tempat yang tidak menggunakan Rust.
Saya bekerja di perusahaan besar, tetapi tidak ada bidang yang menggunakan Rust. Tolong jangan menggiring opini.
Jangan cari gara-gara.
Duh duh duh duh duh duh duh;;
Jangan cari gara-gara ya, serem 😨
Waduh ;;
Duh duh duh duh duh duh;;;
Terlepas dari semuanya, belakangan ini gara-gara para fanatik Rust rasanya sampai muak. Di dunia offline, itu bahkan termasuk yang sangat minor di antara yang minor, tapi di online hampir seperti ISIS... ah, mending mereka ngumpul di satu tempat saja lalu main sesama mereka sendiri...
Bahkan di kalangan fanatik Rust pun, sering kali muncul keraguan apakah mereka sendiri benar-benar memakainya dengan baik.
Tetap saja... kalian suka Rust, kan?
Kalian boleh benci kaum Rust, tapi tolong cintai Rust T_T
Walau sempat kena hantam gara-gara FFmpeg, tetap saja ngomong semua kode harus ditulis dengan Rust dan semacamnya.
Komentar Hacker News
Saat membahas software inti, bagian yang paling disayangkan dari Rust menurut komentar ini adalah ABI. Jika ingin membuat OS dengan Rust dan menyediakan layanan yang kaya, aplikasi seharusnya tetap bisa digunakan tanpa perlu mengompilasi ulang library meskipun OS di-upgrade. Windows menyelesaikan masalah ini dengan COM, Apple dulu dengan dynamic dispatch milik ObjC (dan sekarang dengan Swift ABI), Android dengan JVM dan bytecode. Rust pada praktiknya hampir hanya mendukung
extern "C", sehingga pemanfaatan dynamic library menjadi terbatas. Menyediakan ABI tanpa lapisan VM (JVM, .NET) sangatlah sulit, dan karena detail implementasi yang sudah ditetapkan tidak boleh diubah lagi, wajar jika prioritasnya rendah. Dalam praktiknya, model seperti ini yang benar-benar berhasil hanya Swift dan COM. Jika Rust mengadopsi ABI yang lengkap, bahasa ini akan mendekati bahasa yang hampir sempurna. (Jika dependensi dikelola dalam bentuk biner, waktu kompilasi juga akan jauh berkurang)dlopen) antar-Rust, ada alat seperti stabby dan abi_stable, dan keduanya bekerja cukup baik. Untuk interoperabilitas antarbahasa yang lebih umum, crABI (proposal crABI) bisa menjadi alternatif masa depan. Namun ini bukan masalah yang bisa diselesaikan Rust sendirian; dukungan dan kerja sama dari berbagai komunitas lain seperti bahasa lain dan distribusi Linux juga dibutuhkan. Disebutkan juga bahwa karena Rust adalah bahasa yang secara eksplisit memilih cara I/O dan alokasi memori, arsitektur seperti Swift yang menyelesaikan semuanya hanya dengan shared library mungkin tidak cocok sepenuhnya.repr(wasm)/extern "wasm", tetapi dengan memanfaatkan wit-bindgen atau target wasm32-wasip2, ini bisa digunakan tanpa terlalu sulit. Video pengantar Wasm Componentsslices,trait objects, dan sebagainya) bisa diteruskan sebagai antarmuka, tetapi secara realistis semua yang dibutuhkan sudah bisa dilakukan hanya dengan ABIextern "C". Selain itu, dia juga pernah melihat proposal untuk memperluas ABIexternke lebih banyak tipeSangat menyukai Rust, tetapi berharap beberapa masalah kronis yang menjengkelkan juga mendapat lebih banyak perhatian
self-referencing struct. Misalnya, ingin menyimpan source file dan AST hasil parsing dalam struct yang sama, tetapi saat ini itu tidak mudah. Akan bagus jika ada sesuatu seperti offset referenceorphan rule(aturan trait yatim). Alasannya bisa dipahami, tetapi tetap saja aturan ini merepotkan. Bisa diatasi dengan fitur baru (kadang perlu pembungkus 2–3 lapis!), tetapi masih dipertanyakan apakah memang harus beginipartial self borrows(fitur agar metode hanya meminjam sebagian dari struct). Untuk poin 3, menurutnya dukungan yang lebih baik seperti bisa merilis banyak crate sekaligus perlu ada lebih duluorphan rule, ia meminta penjelasan lebih lanjut apakah yang dimaksud adalah Rust perlu memperkenalkan alternatif yang lebih baik, atau hanya perlu fitur yang bisa menggantikan aturan iniorphan rule. Akan bagus jika di application crate aturan ini bisa dinonaktifkan, atau setidaknya dilonggarkan ketika higienitas yang memadai bisa dijamin, misalnya lewat proc macroSambil merenungkan ungkapan “Smooth, iterative deepening”, ada yang berpikir bahwa Rust terlalu menekankan kompatibilitas lintas bahasa sehingga justru berisiko menambah kompleksitas dan mengurangi keamanan. Dalam kasus seperti ini, akan lebih membantu jika yang diganti adalah bagian dasar sistem seperti
libc. Go hampir tidak melakukan pemanggilan lintas bahasa. Google membangun sendiri library inti untuk memperkuat fondasinya, tetapi di Rust ada banyak versi library dasar yang tersebar dan banyak yang belum matangDitekankan bahwa "menghindari alokasi, mencegah GC terpicu" tidak sesuai dengan konsep GC dan JIT modern. GC modern dalam banyak kasus hampir tidak punya
stop-the-world latency, dan penggunaan CPU total untuk GC terutama ditentukan oleh rasio antara resident set dan ukuran heap. JIT punya lebih banyak peluang optimisasi dibanding AOT, dan bisa mengeksplorasinya dengan lebih agresif (berkat speculative optimization). Yang benar-benar penting dalam praktik adalah latensi startup/warm-up dan overhead memori, serta bukan performa worst-case yang memburuk melainkan performa rata-rata. Selain itu, manajemen memori manual juga belum tentu lebih efisien, dan bahkan jika penggunaan RAM nyata naik 3x, perbedaan biayanya bisa nol. Direkomendasikan juga presentasi konferensi ISMM yang membahas topik ini dengan baikAda yang menilai komentar dan diskusi yang ditandai justru menangkap inti persoalan dengan baik. Pertanyaan seperti "mari buat standar bahasa dengan spesifikasi resmi" dan "kita butuh beberapa implementasi" adalah pertanyaan yang penting secara realistis. Khususnya, @infogulch dengan tepat menyoroti bahwa agar bahasa bisa menjadi fondasi industri, spesifikasi resmi itu perlu (komentar rujukan)
published language standard, dan manfaat konkretnya di dunia nyataOrang sering mempertanyakan apakah Rust memang perlu punya spesifikasi, dan hal ini justru dianggap menunjukkan bahwa engineering nyata masih terlalu sedikit dalam software engineering
Menanggapi komentar yang menyebut Rust sebagai "bahasa yang hanya dipakai orang yang ingin terlihat seperti programmer", ada yang mengatakan bahwa dirinya memang orang yang mencintai pemrograman, dan Rust terasa seperti kejutan yang menyegarkan. Ia sama sekali tidak ingin kembali ke masa lalu ketika C++ terasa sangat menyiksa. Selain itu, ia tidak menganggap standar bahasa (donasi spesifikasi Ferrocene) atau jumlah implementasi sebagai hal yang penting. Python dan Java juga berjalan baik dengan bergantung pada satu implementasi utama. C++ justru menjadi makin rumit di tiap platform karena harus mendukung banyak kompilator. Ia juga tidak tahu persis apa yang dimaksud dengan "kekacauan" cargo, dan menurutnya sisi C++ jauh lebih tidak nyaman
repeatable buildyang sepenuhnya lengkap, tetapi memasang cargo saat ini ke bahasa lain hampir mustahil. Sangat sedikit bahasa yang punya infrastruktur sebagus ini