Rust VS Go, bahasa apa yang harus dipilih developer di tahun 2023?

Sumber: InfoQ

Di tahun 2023, kami memiliki seribu alasan untuk mempelajari Rust.

Pada tanggal 7 Agustus, Rust Foundation merilis hasil Laporan Survei Rust 2022. Laporan tersebut menunjukkan bahwa tingkat adopsi Rust terus meningkat. Lebih dari 90% responden survei menyatakan bahwa mereka adalah pengguna Rust; Rust digunakan untuk mayoritas pengkodean bekerja di , peningkatan yang signifikan sebesar 51,8% dibandingkan tahun sebelumnya.

Tidak diragukan lagi bahwa Rust semakin menjadi fokus pengembang dengan keamanan memori dan kinerja konkurensi yang sangat baik. Namun, sulit juga untuk mengabaikan Go, pemain yang relatif "veteran" yang pernah terpilih sebagai bahasa pemrograman tahun ini.

Lahir pada tahun 2009, bahasa Go telah menarik banyak perhatian karena model konkurensinya yang unik dan keunggulan kinerja yang kuat. Perlu dicatat bahwa, seperti bahasa Rust, pencipta bahasa Go juga "membenci" C++, dan Go juga merupakan bahasa cloud native yang dominan.

Dalam survei pengembang Stack Overflow 2022, di antara 70.000 tanggapan atas pertanyaan "bahasa pemrograman yang membuat orang suka dan benci", programmer jelas lebih suka Rust, 86% dari mereka mengatakan mereka menyukai Rust, dan 64% mengatakan mereka menyukai Go. Menghadapi status Rust yang panas, beberapa pengembang bertanya dalam hati: Apakah Go masih layak dipelajari di tahun 2023?

Rust VS Go, bahasa apa yang harus dipilih pengembang pada tahun 2023?

Rust VS Go, bahasa apa yang harus dipilih pengembang pada tahun 2023?

Selain itu, dalam dua hari terakhir, apakah akan memilih Rust atau Go juga menjadi topik hangat di Hacker News:

Rust VS Go, bahasa apa yang harus dipilih pengembang pada tahun 2023?

Seorang netizen yang mendukung Rust berkata: "Saya juga sudah lama bermasalah dengan pilihan ini. Pada akhirnya, Rust menang. Pertama, saya merasa Rust lebih dekat dengan hal-hal di era Pascal sebelumnya, dan Anda dapat mengontrol semuanya ; kedua, jika wasm dan teknologi terkait adalah wabah besar, Rust akan menjadi pilihan yang lebih aman; lalu, kita sudah memiliki Python untuk pengembangan cepat, jadi masuk akal untuk memilih sesuatu yang sedikit lebih ekstrim, dan Go berada di jalan tengah. Terakhir, Rust harus digunakan untuk Core dan high-profile, jadi sepertinya tidak bisa dihilangkan."

Pengembang lain yang tidak setuju berkata, "Saya telah mengembangkan Go selama hampir sepuluh tahun, tetapi baru-baru ini saya juga mencoba Rust. Saya pikir saat ini ada beberapa preferensi wajib dan menyesatkan untuk Rust, dari pengalaman saya di Dari pengalaman di berbagai startup, termasuk saya saat ini, Go sejauh ini merupakan pilihan terbaik untuk pengembangan backend! Perhatikan, performa, fungsionalitas, atau lainnya...kedua bahasa ini sangat, sangat mirip!"

Saya harus mengatakan bahwa Go dan Rust jelas merupakan bahasa pemrograman yang sangat baik. Mereka modern, kuat, serbaguna, dan memberikan kinerja yang luar biasa. Tapi sungguh tidak masuk akal untuk langsung membandingkan Go dan Rust, siapa yang lebih baik, karena masing-masing bahasa pemrograman mewakili serangkaian trade-off yang mendalam di baliknya. Bahasa yang berbeda akan dioptimalkan untuk kebutuhan yang berbeda, jadi ketika kita memilih bahasa, kita juga harus mempertimbangkan masalah apa yang ingin kita gunakan untuk menyelesaikannya. Jadi kita akan mulai dari skenario yang berlaku dari bahasa Go dan Rust, dan mendiskusikan "cara" desain Go dan Rust.

Meskipun Rust dan Go sangat berbeda dalam sintaks dan gaya, keduanya adalah alat kelas satu untuk membuat perangkat lunak. Mari kita mulai analisis spesifik di bawah ini.

Go vs. Rust: Kemiripan

Rust dan Go memiliki banyak kesamaan, itulah sebabnya orang sering membandingkan keduanya. Tujuan apa yang sama-sama mereka miliki?

Rust adalah bahasa pemrograman multi-paradigma tingkat rendah yang diketik secara statis dengan lebih fokus pada keselamatan dan kinerja.

—Gints Dreimanis

Dan:

Go adalah bahasa pemrograman sumber terbuka yang memudahkan pembuatan perangkat lunak yang sederhana, andal, dan efisien.

—golang.org

Keamanan Memori

Baik Go dan Rust termasuk dalam bahasa pemrograman modern yang mengutamakan keamanan memori. Selama beberapa dekade pengembangan bahasa lama seperti C dan C++, menjadi jelas bahwa salah satu penyebab utama kesalahan dan bug adalah akses memori yang tidak aman/salah.

Jadi Rust dan Go masing-masing memberikan solusi yang berbeda, tetapi tujuan keduanya adalah menjadi lebih pintar dan lebih aman dalam hal manajemen memori, dan untuk membantu pengembang menulis program yang benar dengan kinerja luar biasa.

Cepat, dapat dieksekusi dengan ringkas

Keduanya adalah bahasa yang dikompilasi, yang berarti program dapat diterjemahkan langsung ke dalam kode mesin yang dapat dieksekusi, sehingga program dapat digunakan sebagai file biner tunggal. Tidak seperti bahasa yang ditafsirkan seperti Python dan Ruby, kami tidak perlu mengirim juru bahasa dan banyak pustaka/ketergantungan dengan program. Sebagai cerminan langsung dari kekuatan inti ini, program Rust and Go cenderung berjalan lebih cepat daripada bahasa yang ditafsirkan.

Bahasa Tujuan Umum

Baik Rust dan Go adalah bahasa pemrograman tujuan umum yang kuat dan dapat diperluas yang dapat Anda gunakan untuk mengembangkan semua jenis perangkat lunak modern—mulai dari aplikasi web hingga layanan mikro terdistribusi, mikrokontroler tersemat, aplikasi seluler, dan banyak lagi. **Keduanya memiliki perpustakaan standar yang sangat baik dan ekosistem pihak ketiga yang berkembang pesat, ditambah dukungan komersial yang kuat dan basis pengguna yang besar. ** Keduanya telah ada selama bertahun-tahun dan akan terus berkembang di tahun-tahun mendatang. Mempelajari Go atau Rust akan menjadi investasi waktu dan energi yang sangat masuk akal akhir-akhir ini.

Gaya pemrograman pragmatis

Tidak ada bahasa yang terlalu fungsional (seperti Scala atau Elixir), juga tidak sepenuhnya berorientasi objek (seperti Java dan C #). Sebaliknya, meskipun Go dan Rust memiliki fungsi pemrograman fungsional dan berorientasi objek, mereka selalu menekankan orientasi pragmatis-yaitu, memecahkan masalah dengan cara yang paling tepat, daripada memaksa semua orang untuk menggunakan metode tertentu melalui "ideologi", cara melakukan sesuatu. **Tetapi jika Anda sangat menyukai gaya pemrograman fungsional, ada lebih banyak opsi alat terkait di sisi Rust, yang merupakan salah satu keunggulan Rust dibandingkan Go. **

Kita pasti bisa berdebat tentang apa yang dimaksud dengan bahasa yang benar-benar "berorientasi objek". Namun agar adil, gaya pemrograman berorientasi objek yang diharapkan oleh pengguna C++, Java, atau C# tidak benar-benar ada di Go atau Rust.

—Jack Mott

Pembangunan Masif

Rust dan Go menyediakan banyak fitur berguna untuk pemrograman skala besar, sehingga keduanya dapat beradaptasi dengan kebutuhan dunia nyata dari tim pengembangan besar dan basis kode besar. **Misalnya, programmer C telah berdebat selama bertahun-tahun tentang di mana harus meletakkan tanda kurung, dan apakah kode harus diindentasi dengan tab atau spasi; tetapi Rust dan Go sudah menggunakan alat pemformatan standar (Go has gofmt, Rust It is rustfmt) selesaikan ini sepenuhnya masalah. Mereka secara otomatis menulis ulang kode Anda menggunakan gaya yang sesuai.

Bukan karena format khusus ini halus, tetapi programmer **Rust and Go lebih pragmatis dan lebih suka memilih standar implementasi yang seragam. **

gaya gofmt mungkin bukan favorit semua orang, tetapi gofmt memiliki sesuatu untuk semua orang.

—Rob Pike

Keuntungan besar lainnya dari kedua bahasa ini tercermin dalam build pipeline. Keduanya memiliki alat manajemen dependensi dan build standar yang sangat baik, bawaan, dan berperforma baik. Ini berarti bahwa pemrogram tidak perlu bersaing dengan sistem pembangunan pihak ketiga yang rumit, juga tidak perlu mempelajari sistem baru setiap beberapa tahun.

Saya menggunakan Java dan Ruby di awal karir saya, jadi menulis kode Go dan Rust selalu sedikit mengintimidasi dan di luar kendali saya. Tetapi ketika saya masuk ke Google dan melihat layanan yang ditulis dalam Go, saya sangat lega karena saya merasa mudah untuk membangun dan menjalankannya.

Hal yang sama berlaku untuk Karat. Meskipun saya hanya melakukan penelitian pada proyek berskala kecil, saya dapat melihat kemudahan penggunaannya. Saya berharap sistem build yang dapat dikonfigurasi tanpa batas itu akan menjadi masa lalu, sekarang bahasa baru hadir dengan alat build khusus mereka sendiri yang berfungsi di luar kotak, bukankah itu bagus?

—Sam Rose

**Karat atau Pergi? **

Setelah berbicara tentang begitu banyak masalah, dan fakta bahwa kedua bahasa dirancang dengan sangat baik dan kuat, apakah ada hasil dalam kompetisi ini? Atau, karena keduanya adalah pilihan yang sangat baik, mengapa orang masih marah di media sosial, menulis komentar panjang di blog yang mengatakan "Rust is for idiots" atau "Go bukanlah bahasa pemrograman sama sekali" Kata-kata yang kasar?

Tentu saja, beberapa orang hanya ingin melampiaskan emosinya, tetapi ini jelas tidak membantu menyelesaikan masalah yang sebenarnya. Setidaknya dalam hal bahasa apa yang digunakan dalam sebuah proyek, atau bahasa apa yang digunakan untuk masuk ke dunia pemrograman, suara keras jelas tidak membantu membuat pilihan yang tepat.

Mari kembali ke pembahasan orang dewasa dan lihat bagaimana Rust and Go memiliki kekuatan dan kelemahan berdasarkan analisis rasional.

Go vs. Rust: Performa

Seperti disebutkan sebelumnya, program yang dihasilkan oleh Go dan Rust keduanya cepat karena dikompilasi ke kode mesin asli tanpa melalui juru bahasa atau mesin virtual. Namun performa Rust masih lebih baik, bahkan sebanding dengan C dan C++, yang dikenal sebagai tolok ukur performa industri. Dan tidak seperti bahasa kuno ini, Rust juga menyediakan keamanan memori dan mekanisme keamanan konkurensi, sementara hampir tidak memengaruhi kecepatan eksekusi. Rust juga memungkinkan pengembang untuk membangun abstraksi kompleks tanpa menimbulkan penalti kinerja saat runtime.

Sebaliknya, Meskipun performa program Go juga bagus, fokus desain terutama pada kecepatan pengembangan (termasuk kompilasi), daripada tingkat eksekusi. Pemrogram Go lebih menyukai kode yang jelas dan mudah dibaca, sehingga kecepatan larinya sedikit lebih lambat.

Kompiler Go juga tidak menghabiskan banyak waktu untuk menghasilkan kode mesin yang paling efisien, ia lebih mementingkan kompilasi kode dalam jumlah besar dengan cepat. **Jadi dalam benchmark runtime, sering kali program Rust mengalahkan program Go. **

Performa runtime Rust juga sangat konsisten dan dapat diprediksi karena tidak menggunakan pengumpulan sampah. Pengumpul sampah Go sangat efisien dan dioptimalkan untuk menjaga waktu jeda sesingkat mungkin (waktu jeda semakin pendek dengan setiap rilis Go). Tapi bagaimanapun, pengumpulan sampah selalu memperkenalkan beberapa ketidakpastian dalam perilaku program, dan ini bisa menjadi serius atau bahkan sama sekali tidak dapat diterima untuk aplikasi tertentu (seperti sistem tertanam).

Karena tujuan Rust adalah memberi pemrogram kendali penuh atas perangkat keras yang mendasarinya, ** program Rust dapat dioptimalkan secara mendalam untuk mendekati kinerja teoretis mesin yang maksimal. **Ini menjadikan Rust pilihan terbaik untuk kasus penggunaan tertentu di mana kecepatan eksekusi mengalahkan segalanya, seperti pemrograman game, kernel sistem operasi, komponen browser web, dan sistem kontrol real-time.

  • Kesederhanaan

Tidak masalah seberapa kuat bahasa pemrograman jika terlalu sulit untuk dipelajari dan membuat kebanyakan orang keluar. Go tampaknya sengaja dirancang untuk membedakan dirinya dari bahasa yang semakin kompleks seperti C ++: ** Ini memiliki sintaks yang sangat sedikit, kata kunci yang sangat sedikit, dan bahkan tidak banyak fungsi. **

Ini berarti bahasa Go mudah dipelajari, dan Anda dapat menulis berbagai program dengannya setelah sedikit pemahaman.

Go sangat mudah dipelajari. Saya sering mendengar hal ini disebutkan sebelumnya, tetapi setelah menggunakannya saya masih takjub melihat seberapa cepat ini meningkatkan produktivitas. Berkat bahasa Go, dokumentasi dan alat terkait, saya menulis kode yang menarik dan dapat diterapkan hanya dalam dua hari.

—Kesan Awal Rust Programmer tentang Go

Poin kuncinya di sini adalah "kesederhanaan" tiga kata. Tentu saja, sederhana bukan berarti mudah. Tetapi bahasa yang kecil dan sederhana jelas lebih mudah dipelajari daripada bahasa yang besar dan kompleks. Tidak banyak cara untuk mendapatkan satu efek, jadi kode Go berkualitas tinggi hampir selalu terlihat sama. Ini memiliki keuntungan lain: kami dapat dengan cepat memahami apa yang dilakukan oleh layanan yang tidak kami kenal.

Rust VS Go, bahasa apa yang harus dipilih pengembang pada tahun 2023?

**Ontologi inti Go kecil, tetapi pustaka standarnya sangat andal. **Artinya, selain sintaks Go, kurva pembelajaran kita juga harus mempertimbangkan bagian pustaka standar ini.

Di sisi lain, mengalihkan fungsi dari bahasa ke perpustakaan standar berarti setiap orang hanya perlu fokus mempelajari perpustakaan yang terkait dengan kebutuhan pengembangan saat ini. **Go juga dirancang dengan pertimbangan penuh akan kebutuhan pengembangan perangkat lunak skala besar, dan dapat sangat mendukung basis kode besar dan tim pengembangan. **Dalam jenis skenario ini, developer baru harus dapat memulai dengan cepat. Untuk tujuan ini, komunitas Go selalu memprioritaskan kesederhanaan, kejelasan, keserbagunaan, dan keterusterangan program.

Dengan menggunakan bahasa GO, sering kali lebih mudah bagi pengembang junior untuk menjadi produktif, tetapi lebih sulit bagi pengembang tingkat menengah untuk memperkenalkan abstraksi yang rumit dan dengan demikian menimbulkan masalah. Karena karakteristik ini, Rust cenderung kurang menarik dibandingkan Go dalam dunia pengembangan perangkat lunak perusahaan.

— Loris Cro

  • Fungsi

Rust mendukung lebih banyak kompleksitas daripada beberapa bahasa pemrograman lain, sehingga cakupan implementasinya juga lebih besar.

— Devathon

**Rust secara khusus dirancang untuk menyertakan berbagai fitur canggih dan berguna yang membantu pemrogram melakukan lebih banyak hal dengan lebih sedikit kode. **Misalnya, fungsi pencocokan Rust memungkinkan untuk menulis logika fleksibel dan ekspresif dengan cepat:

Rust VS Go, bahasa apa yang harus dipilih pengembang pada tahun 2023?

Tetapi juga karena Rust memiliki banyak pertimbangan desain, lebih sulit untuk dipelajari, terutama pada tahap awal. Tapi tidak apa-apa, C++ atau Java harus banyak dipelajari, dan bahkan tidak menawarkan fitur-fitur canggih Rust seperti keamanan memori. Jadi sangat tidak masuk akal untuk mengkritik suara Rust yang terlalu rumit: ini dirancang untuk menekankan ekspresi dan fungsi yang kaya, kami tidak dapat mengharapkannya menjadi begitu sederhana dan murni sambil memanfaatkan manfaatnya. Jadi tentu saja Rust memiliki kurva belajarnya sendiri. Namun selama kesulitan ini dapat diatasi, akan ada jalan mulus di depan.

Jika Anda siap untuk mempelajari sintaks dan semantik yang lebih kompleks (dan bilah yang lebih tinggi untuk keterbacaan kode) dengan imbalan tingkat kinerja tertinggi, Rust bahkan dapat menyaingi C++ dan D. —Dave Cheney

**Meskipun Rust dan Go saling meminjam beberapa fitur (seperti generik), wajar untuk mengatakan bahwa fitur Rust masih lebih unggul, dan fitur Go relatif kurang. **

  • Konkurensi

Sebagian besar bahasa menyediakan beberapa bentuk dukungan untuk pemrograman bersamaan (yaitu melakukan beberapa operasi pada waktu yang sama), tetapi Go dirancang untuk ini dari bawah ke atas. **Go tidak menggunakan thread sistem operasi, tetapi menyediakan alternatif ringan: goroutine. **Setiap goroutine adalah fungsi Go yang dijalankan secara independen yang dipetakan oleh penjadwal Go ke salah satu utas sistem operasi yang dikendalikan. Artinya, penjadwal dapat mengelola sejumlah besar goroutine bersamaan dengan sangat efisien, sementara hanya menggunakan thread sistem operasi dalam jumlah terbatas.

Oleh karena itu, kami dapat menjalankan jutaan goroutine bersamaan dalam satu program tanpa khawatir menyebabkan masalah kinerja yang serius. Oleh karena itu, **Go adalah solusi lengkap untuk skenario aplikasi serentak berskala besar seperti server web dan layanan mikro. **

Go juga menyediakan saluran untuk goroutine, yang merupakan cara yang cepat, aman, dan efisien untuk berkomunikasi dan berbagi data. Tingkat desain konkurensi Go memang sangat tinggi, dan pengalaman penggunaannya cukup santai dan menyenangkan.

Secara umum, merancang program bersamaan sangat sulit, dan membangun program bersamaan yang andal dan benar dalam bahasa apa pun bukanlah hal yang mudah. Namun, sejak persyaratan ini dipertimbangkan di awal proyek, mekanisme pemrograman konkuren di Go telah dibuat sesederhana mungkin dan terintegrasi dengan baik.

Go membuatnya lebih mudah untuk membangun aplikasi yang didekonstruksi dengan hati-hati yang dapat diterapkan sebagai satu set layanan mikro dan memanfaatkan konkurensi sepenuhnya. Bukan tidak mungkin di Rust, hanya saja lebih sulit untuk diterapkan. Dalam arti tertentu, Rust lebih cocok untuk pemrogram yang tidak boleh membiarkan celah keamanan yang disebabkan oleh masalah memori; namun demikian, ketika mereka melakukan beberapa tugas yang relatif sederhana untuk bahasa lain (termasuk GO), mereka lebih suka Harus membayar usaha lebih. —Sonya Koptyev

Sebaliknya, mekanisme konkurensi di Rust baru saja mendarat dan belum distabilkan, jadi semua orang dipersilakan untuk terus memperhatikan arah pengembangan aktif ini. Ini juga menguntungkan.Misalnya, perpustakaan rayon Rust menyediakan metode yang sangat elegan dan ringan yang dapat mengubah perhitungan berurutan menjadi perhitungan paralel.

Akan sangat menyenangkan memiliki sintaks yang ringan untuk memijah goroutine dan menggunakan saluran. Ini adalah manifestasi langsung dari kekuatan tata bahasa, dan berbagai detail kecil juga membuat pengalaman pemrograman bersamaan Go jauh lebih baik daripada bahasa lain.

—Kesan Awal Rust Programmer tentang Go

Meskipun mungkin tidak mudah untuk mengimplementasikan program bersamaan di Rust, itu masih bisa dilakukan dengan sempurna, dan** program ini juga mendapat manfaat dari jaminan keamanan memori Rust yang dirancang dengan cermat. **Ambil kelas Mutex dari pustaka standar sebagai contoh: di Go, kita mungkin lupa mendapatkan mutex sebelum mengakses sesuatu; tetapi di Rust, tidak perlu khawatir sama sekali.

Go berfokus pada konkurensi sebagai salah satu konsep inti. Ini bukan untuk mengatakan bahwa kami tidak dapat mencapai efek konkurensi yang mirip dengan Go in Rust, tetapi kesulitan penerapannya merupakan ujian bagi programmer. Go berfokus pada konkurensi sebagai salah satu konsep intinya. Ini bukan untuk mengatakan bahwa kami tidak dapat mencapai efek konkurensi yang mirip dengan Go in Rust, tetapi kesulitan penerapannya merupakan ujian bagi programmer.

——Dave Cheney

  • keamanan

Seperti yang telah disebutkan sebelumnya, baik Go maupun Rust memiliki caranya masing-masing untuk mencegah berbagai kesalahan umum pemrograman, terutama masalah yang berkaitan dengan manajemen memori. Tapi **Rust melangkah lebih jauh, dapat dikatakan bahwa tidak ada upaya untuk memastikan bahwa setiap orang tidak membuat kesalahan keamanan yang tidak terduga. **

Kompiler Rust sangat ketat sehingga memeriksa setiap variabel yang kita gunakan, setiap alamat memori yang kita rujuk. Itu menghindari potensi kondisi perlombaan data dan juga memberi tahu Anda tentang perilaku yang tidak ditentukan. Di dunia Rust, masalah konkurensi dan keamanan memori hampir tidak mungkin muncul.

— Mengapa memilih Karat?

Meskipun demikian, pengalaman pemrograman di Rust berbeda dari hampir semua bahasa lain, dan bisa sangat menantang saat pertama kali diperkenalkan. Namun di mata banyak pengembang, upaya ini jelas bernilai uang.

Bagi saya, keuntungan terbesar dari Rust adalah bahwa kompiler telah menjadi asisten saya yang baik, tidak akan melewatkan bug yang terdeteksi (serius, terkadang terasa seperti keajaiban bagi saya).

—Grzegorz Nosek

Banyak bahasa, termasuk Go, juga menyediakan alat untuk membantu pemrogram menghindari kesalahan, tetapi Rust membawa efek ini ke tingkat yang baru. Banyak program yang salah bahkan tidak dapat dikompilasi sama sekali.

Di Rust, berbagai fasilitas perpustakaan membantu pemrogram mencegah kesalahan pengguna. Rust memungkinkan kita untuk menentukan sepotong data dan kemudian menjamin bahwa itu bukan milik atau dirusak oleh hal lain. Saya tidak dapat memikirkan bahasa yang telah menyediakan begitu banyak alat untuk mencegah penyalahgunaan yang tidak disengaja sebelumnya, yang terasa luar biasa. —Sam Mawar

"Melawan pemeriksa pinjaman" adalah suatu keharusan bagi pendatang baru Rust, tetapi sebagian besar, pemeriksa itu sebenarnya bukan musuh. Masalah yang ditemukan memang bug nyata (atau setidaknya bug potensial) dalam kode. Ini mungkin memaksa kami untuk memperbaiki program kami secara mendasar untuk menghindari masalah seperti itu - Jika Anda benar-benar menempatkan kebenaran dan keandalan sebagai prioritas utama Anda, maka persyaratan ketat ini jelas merupakan hal yang baik.

Dari sudut pandang lain, apakah bahasa baru yang tidak mengubah metode pemrograman dapat disebut bahasa baru? Dan saat menggunakan bahasa lain, Rust mengajarkan kita untuk berpikir aman, yang sama pentingnya.

Jika orang memilih Rust, seringkali karena jaminan desain yang diberikannya: keamanan tentang null pointer/balapan data, perilaku runtime yang dapat diprediksi, dan kendali penuh atas perangkat keras. Jika ini tidak masuk akal bagi Anda, Anda tidak perlu menggunakan Rust. Lagi pula, ada harga di balik manfaat ini: sulit untuk memulai. Anda harus menghentikan kebiasaan buruk dan menguasai konsep baru. Pada awalnya, semua orang akan disiksa sampai mati oleh pemeriksa pinjaman.

—Matthew Endler

Kesulitan sebenarnya untuk memulai dengan model pemrograman Rust mungkin bergantung pada bahasa lain apa yang telah Anda gunakan sebelumnya. Pemrogram Python atau Ruby mungkin menganggap Rust terlalu membatasi, tetapi yang lain mungkin menganggap kejelasan dan batasan yang jelas bagus.

Jika Anda seorang programmer C atau C++ dan telah menghabiskan waktu berminggu-minggu mencari bug keamanan memori dalam bahasa tersebut, Anda akan menyukai Rust. Jadi "melawan pemeriksa pinjaman" menjadi "apakah ini masih mungkin dengan kompiler? Keren!"

— Grzegorz Nosek

  • Meningkatkan

Program server saat ini berisi puluhan juta baris kode, ditulis oleh ratusan pemrogram, dan diperbarui hampir setiap hari. Dalam hal desain dan pengembangan, Go sepenuhnya memperhitungkan kebutuhan untuk meningkatkan efisiensi kerja di lingkungan seperti itu. Pertimbangan desain untuk Go meliputi manajemen dependensi yang ketat, kemampuan adaptasi arsitektur perangkat lunak saat sistem berkembang, dan kekokohan lintas batas komponen. — Rob Pike

Saat Anda memecahkan masalah sendirian atau dalam tim kecil, apakah Anda memilih bahasa yang sederhana atau bahasa yang kaya, itu murni masalah preferensi pribadi. Namun, dengan perluasan skala perangkat lunak, kompleksitas, dan perluasan tim, perbedaan antara kedua bahasa tersebut mulai benar-benar muncul.

Untuk aplikasi besar dan sistem terdistribusi, kecepatan eksekusi kode seringkali tidak sepenting kecepatan pengembangan: bahasa seperti Go yang dengan sengaja menekankan desain ramping dapat mempersingkat waktu adaptasi pengembang baru dan memungkinkan mereka untuk berpartisipasi lebih cepat Untuk berkontribusi pada basis kode besar.

Dengan menggunakan bahasa GO, sering kali lebih mudah bagi pengembang junior untuk menjadi produktif, tetapi lebih sulit bagi pengembang tingkat menengah untuk memperkenalkan abstraksi yang kompleks sehingga menimbulkan masalah. Karena karakteristik ini, Rust cenderung kurang menarik dibandingkan Go dalam dunia pengembangan perangkat lunak perusahaan.

— Loris Cro

Kejelasan dan keterbacaan selalu lebih penting daripada keanggunan dalam hal pengembangan perangkat lunak berskala besar. **Keterbatasan Go sebenarnya membuatnya lebih mudah beradaptasi dengan kebutuhan perusahaan dan organisasi besar daripada bahasa yang lebih kompleks dan kuat seperti Rust. **

Rust vs. Go: Perbedaan

Meskipun Rust dan Go adalah bahasa modern yang populer dan banyak digunakan, mereka sebenarnya bukan pesaing karena mereka menargetkan kasus penggunaan yang bisa dibilang sangat berbeda**.

Seluruh pendekatan pemrograman di Go benar-benar berbeda dari Rust, dan fitur ini sangat cocok untuk sebagian orang, tetapi di sisi lain dapat mengganggu orang lain. Yang masuk akal, karena jika Rust dan Go pada dasarnya memecahkan masalah yang sama dengan cara yang pada dasarnya serupa, mengapa kita memerlukan dua bahasa terpisah?

Jadi, bisakah kita mulai dengan pendekatan yang diambil oleh Rust and Go dan menafsirkan esensinya masing-masing? Mari kita coba bersama.

  • pengumpulan sampah

"Untuk mengumpulkan sampah, atau tidak mengumpulkan sampah" selalu menjadi pertanyaan tanpa jawaban yang tepat. Secara umum, pengumpulan sampah dan pengelolaan memori otomatis dapat membantu kami mengembangkan program yang andal dan efisien dengan cepat dan mudah. Jadi untuk beberapa pengembang, ini adalah fitur penting.

Yang lain berpendapat bahwa pengumpulan sampah, dengan overhead kinerja dan jeda globalnya, dapat menyebabkan perilaku runtime yang tidak dapat diprediksi dan menimbulkan latensi yang tidak dapat diterima. Tentu saja ada benarnya pernyataan ini.

Go dan Rust adalah dua bahasa yang sangat berbeda. Meskipun keduanya dapat dengan mudah digambarkan sebagai bahasa sistem atau pengganti C, tujuan dan skenario aplikasinya, gaya desain bahasa, dan prioritas fungsi memang sangat berbeda. Pengumpulan sampah adalah pembeda inti yang besar. Pengumpulan sampah di Go membuat bahasa lebih sederhana, lebih kecil, dan lebih mudah dipahami. Rust tidak memiliki pengumpulan sampah, yang membuatnya sangat cepat (ini sangat cocok untuk pengembang yang tidak hanya membutuhkan throughput tinggi, tetapi juga latensi rendah), dan juga mewujudkan serangkaian fungsi dan pola pemrograman yang tidak dapat dilakukan sama sekali oleh Go ( Di setidaknya tanpa mengorbankan kinerja).

— PingCAP

  • dekat dengan perangkat keras

Sejarah pemrograman komputer dapat dikatakan sebagai proses pengembangan abstrak yang semakin kompleks. Ini memungkinkan pemrogram untuk memecahkan masalah tanpa terlalu memperhatikan bagaimana sebenarnya perangkat keras yang mendasarinya beroperasi. Desain ini membuat program lebih mudah ditulis dan lebih portabel. Tetapi untuk program lain, akses ke perangkat keras dan kontrol yang tepat atas bagaimana program dijalankan lebih penting.

**Tujuan Rust adalah untuk memungkinkan pemrogram untuk "mendekati perangkat keras" dan mendapatkan kembali lebih banyak kontrol; sementara Go menghilangkan detail arsitektural, memungkinkan pemrogram untuk mendekati masalah. **

Kedua bahasa memiliki area aplikasi yang berbeda. Go pandai menulis layanan mikro dan tugas khas "DevOps", tetapi ini bukan bahasa pemrograman sistem. Rust lebih kuat dalam tugas yang menekankan konkurensi, keamanan, dan/atau kinerja, dan memang memiliki kurva belajar yang lebih curam daripada Go.

—Matthew Endler

  • Performa dulu

Faktanya, untuk sebagian besar program, kinerja kurang penting daripada keterbacaan kode. Tetapi jika beberapa proyek benar-benar mengutamakan kinerja, ada banyak pertukaran desain di **Rust yang akan membantu Anda mendorong kecepatan eksekusi kode Anda hingga batasnya. **

Sebaliknya, Go lebih memperhatikan kesederhanaan kode, dan bahkan rela mengorbankan beberapa kinerja runtime demi itu. Namun kecepatan build Go tidak ada bandingannya, yang seringkali bahkan lebih penting untuk proyek kode berskala besar.

Karat bekerja lebih cepat daripada Go. Dalam tolok ukur, Rust memang lebih cepat, dalam beberapa kasus dengan urutan besarnya. Namun sebelum Anda memilih Rust, perjelas: Go tidak ketinggalan di sebagian besar tolok ukur, dan masih mempertahankan keunggulan kinerja dibandingkan bahasa seperti Java, C#, Java, dan Python.

Jika Anda membutuhkan performa terbaik, Anda dapat memilih salah satu dari dua bahasa ini, dan performa kecepatannya tidak akan mengecewakan. Selain itu, jika Anda sedang membangun layanan web yang menangani beban intensitas tinggi dan memerlukan penskalaan vertikal/horizontal yang fleksibel, kedua bahasa tersebut juga dapat memenuhi kebutuhan Anda.

— Andrew Lader

  • Ketepatan

Di sisi lain, jika Anda tidak memaksakan program untuk tidak pernah salah, komprominya akan berbeda. Sebagian besar kode tidak dirancang untuk penggunaan jangka panjang, tetapi beberapa program berjalan dalam produksi selama bertahun-tahun. Menghadapi kenyataan ini, mungkin ada baiknya menginvestasikan sedikit waktu ekstra untuk mengembangkan dan memastikan bahwa program bekerja dengan benar dan andal tanpa menimbulkan beban pemeliharaan yang berat di masa mendatang.

Baik Go dan Rust membantu Anda menulis program yang benar, tetapi dengan cara yang berbeda: **Go menyediakan kerangka kerja pengujian bawaan yang sangat baik, sementara Rust berfokus pada menghilangkan bug runtime melalui pinjam checker. **

Pendapat saya adalah: untuk kode yang harus dirilis besok, gunakan Go; jika itu adalah kode yang harus berjalan stabil dalam lima tahun ke depan, pilih Rust.

— Grzegorz Nosek

Meskipun Go dan Rust cukup baik untuk proyek pengembangan yang serius, yang terbaik adalah memahami sepenuhnya berbagai fitur dan kelebihannya. Singkatnya, tidak masalah apa yang dipikirkan orang lain: **Hanya Anda yang dapat memutuskan bahasa pemrograman mana yang lebih cocok untuk kebutuhan tim dan proyek Anda. **

Jika Anda ingin mempercepat pengembangan, katakanlah Anda memiliki banyak layanan berbeda untuk menulis, atau tim pengembangan itu sendiri besar, maka bahasa Go adalah jawaban yang tepat. Go memberikan perhatian khusus pada desain untuk konkurensi, dan ingin menemukan perilaku akses memori yang tidak aman (seperti halnya Rust), tetapi tidak memaksa Anda untuk mengelola setiap detail satu per satu.

Go itu cepat dan bertenaga, tetapi pada intinya ini membantu pengembang menyingkir dan fokus pada kesederhanaan dan kesatuan. Di sisi lain, jika Anda perlu memeras setiap ons ruang kepala performa, Rust sangat ideal.

—Andrew Lader

Kesimpulan Saya harap artikel ini dapat membantu Anda memahami masing-masing highlight dari Rust and Go. Jika memungkinkan, sebaiknya Anda mencoba kedua bahasa ini sedikit, karena keduanya sangat berguna dalam jalur teknis apa pun, bahkan untuk penggemar pemrograman amatir.

Namun jika Anda hanya menghabiskan waktu mempelajari satu bahasa dengan serius, harap pastikan keahlian dan kecenderungan masing-masing Go dan Rust sebelum menentukan pilihan.

Tentu saja, pengetahuan tentang bahasa pemrograman hanyalah sebagian kecil dari apa yang membuat seorang insinyur perangkat lunak sukses. Selain pemrograman, insinyur harus mahir dalam desain, teknik, arsitektur, komunikasi, dan kolaborasi. Selama semua orang dapat melakukan hal-hal berikut dengan baik, bahasa pemrograman apa pun yang Anda pilih, Anda akan menjadi master rekayasa perangkat lunak yang hebat.

Lihat Asli
  • Hadiah
  • Komentar
  • Bagikan
Komentar
Tidak ada komentar