Saya Mencuba Setiap Bahasa Pengaturcaraan Panas
Dalam siaran ini, saya akan cuba membandingkan GoLang, Zig dan Rust. Dan mengapa Rust memenangi perbandingan ini (untuk saya).
Masa Cerita!
Saya menulis 3 projek saya dalam GoLang, Zig & Rust. Projek ini cukup besar untuk mendapatkan idea yang baik tentang asas bahasa, kekurangan dan sama ada terdapat masalah dengan bahasa, rangka kerja atau ekosistem.
PETUA: jangan ragu untuk melompat ke bahagian TLDR untuk mendapatkan jawapan terkutuk itu.
GoLang
Saya mula membina alatan pembangun beberapa bulan lalu, pada mulanya dengan GoLang.
Yang pertama ialah pengurusan pangkalan data asas & utiliti migrasi (dbdaddy) dan saya benar-benar seronok bekerja dengan GoLang.
Walaupun ini adalah percubaan pertama saya dengan GoLang membina sesuatu yang lebih serius daripada Advent Of Code & 1 bilion masalah cabaran baris, Saya terkejut kerana saya mengambil masa kurang daripada seminggu untuk menjadi mahir dalam hal itu .
Zig
Selama ini, saya bermain-main dengan Zig di sebelah (tiada yang terlalu serius). Saya mendengar tentang Redis menukar lesen mereka kepada lesen "bukan sumber terbuka secara teknikal".
Dan saya terfikir sendiri: betapa sukarnya membina redis sumber terbuka baharu dalam zig?
Maju Cepat 2 bulan kemudian: sial.
Idea asas di sebalik "GbCache" ialah cache dalam memori berasaskan LRU tetapi sumber kebenaran sebenar adalah untuk disimpan pada cakera bersama-sama dengan ciri seperti pemberitahuan untuk perubahan kunci/nilai tertentu yang disebabkan dan jelas sekali TTL diperuntukkan kepada kunci.
Sungguh mengagumkan betapa jelasnya Zig, yang menjadikannya lebih mudah dan lebih mudah untuk digunakan.
Saya memulakan GbCache dari perspektif "jika ia pergi ke HyperScale™ esok, bolehkah ia mengendalikan beban?"
Perspektif ini mendorong saya untuk menolak GoLang kerana jika saya tidak dapat membuat alasan dengan pasti tentang peruntukan memori, saya tidak akan mempunyai kawalan sepenuhnya ke atas kelajuan.
Melakukan perkara dari perspektif ini merupakan pengalaman pembelajaran yang sangat hebat kerana tiba-tiba anda mula melihat semua titik dalam program anda yang mungkin meledak, kehabisan memori atau mungkin menjadi halangan —laluan panas dalam kod anda.
Disebabkan keterlaluan Zig, saya pasti di mana & bila saya memperuntukkan ingatan.
Tetapi... Zig BUKAN bahasa yang selamat untuk ingatan pada penghujung hari dan saya seorang lelaki yang mempunyai masalah kemahiran sebesar Everest.
masuk karat
Dalam 2 tahun kebelakangan ini, saya telah mencuba dan berhenti marah pada Rust sebanyak 3 kali. Berasal dari latar belakang JavaScript di mana kami mempunyai bajillion gb ram dalam macbook m69 max kami, saya tidak pernah sangat memahami sebab Rust mempunyai peraturan tersebut, dan masuk dengan gembar-gembur mungkin merupakan sudut yang tidak baik untuk melihatnya .
Walaupun saya marah-berhenti beberapa kali, Rust masih berada di dalam fikiran saya, sintaksnya yang pelik, peraturan ingatan yang mengecewakan dan sepanjang hayat yang membingungkan.
Tetapi sesuatu menimpa saya semasa menulis Zig... Saya sudah menjejaki semua peraturan memori dan jangka hayat ini tetapi sebagai overhead mental.
Saya mula melihat corak dan boilerplate dalam kod Zig saya cuba melakukan apa yang telah dilakukan oleh Rust.
karat
Semasa membina klien CLI untuk SFS (nama SFW - "Simple File Storage"), saya memutuskan untuk mencuba sekali lagi Rust.
Kali ini semasa membaca buku karat, saya mula merasakan "mengapa" semua itu.
Perkara paling asas yang saya suka tentang Rust ialah pemilikan & berasaskan peminjaman model mental ingatan.
Walaupun model ingatan yang dimiliki & dirujuk ini adalah khayalan, ia adalah model mental yang mudah untuk difikirkan dan dikenakan lebih sedikit overhed di atas kepala saya.
Berbeza dengan model memori mental klasik yang ditanggung oleh bahasa seperti C & Zig di kepala anda. Perlu menjejaki peruntukan memori individu & jangka hayatnya di kepala saya? tidak terima kasih!
TLDR
GoLang
- CEPAT (seperti 5 MAU anda akan memerlukannya lmao)
- boleh dipercayai
- mudah bodoh, bahasa tidak pernah berdiri di antara anda & matlamat anda
- ekosistem pakej yang hebat
Zig
- CEPAT BERBANGKIT
- sederhana bodoh
karat
- CEPAT BERBANGKIT
- boleh dipercayai
- ekosistem pakej yang hebat
Semuanya
- pengendalian ralat yang menakjubkan
Jika anda seorang jurutera bahagian belakang biasa setiap hari dan suka melakukan nombor pada prestasi pecut mereka, pilihan terbaik anda mungkin GoLang.
"tetapi syarikat saya tidak menggunakan GoLa—"
"tinggalkan syarikat, tinggalkan, gunakan kerja yang betul untuk alat itu. tinggalkan syarikat."
Bagi saya, GoLang adalah seperti perkahwinan yang diatur di mana anda tidak pernah merasakan tergesa-gesa itu dalam hati anda tetapi ia tidak pernah mengecewakan anda, ia adalah teman hidup anda dan anda boleh bertaruh sepanjang hidup anda ia.
Tetapi kawan saya jika anda mencari untuk tergesa-gesa itu teruskan membaca!
Karat Puran
bu— tetapi saya mahu tergesa-gesa itu... saya mahu merasakan hati saya meletup apabila melihat sekilas pandang pada sintaks mata mereka... saya mahu berasa seperti berada di syurga apabila saya bersama mereka dan dalam neraka apabila saya tidak...
Mari kita lihat sekilas contoh keselamatan berbilang benang dalam Rust.
use std::thread; fn main() { let mut counter = Box::new(0); // 32-bit integer allocated on the heap let mut handles = vec![]; for _ in 0..10 { let handle = thread::spawn(|| { *counter += 1; // trying to edit the value }); handles.push(handle); } for handle in handles { handle.join().unwrap(); // WAITING FOR ALL THE THREADS TO COMPLETE } println!("Result: {}", *counter); }
Kami mempunyai nilai yang diperuntukkan timbunan dan terdapat 10 utas yang cuba mengubah suainya secara bebas.
Kod ini tidak selamat mengakses pembolehubah pembilang kerana semua urutan akan cuba mengubah suai pembilang secara serentak.
Dalam bahasa lain, kod yang serupa dengan senang hati akan disusun dan dijalankan.
Jika anda pernah bekerja dalam persekitaran berbilang benang sebelum ini, fikiran pertama anda mungkin menggunakan "mutex" untuk menghalang keadaan perlumbaan dalam mengemas kini pembolehubah kaunter.
Tetapi mudah untuk terlepas perkara kecil seperti ini dalam pangkalan kod besar kerana kesilapan manusia.
Karat tidak akan membiarkan program ini disusun.
Disebabkan oleh peraturan pemilikan & peminjaman, pengkompil akan mengesan bahawa anda boleh berubah meminjam kaunter dalam urutan pertama dalam lelaran pertama gelung for... ok sehingga sekarang... lelaran kedua juga mahu meminjam kaunter secara selari? tidak selamat! timbulkan RALAT MASA KOMPILE!!.
merujuk atau "meminjam" nilai daripada pemiliknya dengan tujuan untuk mengubah/ubah suai dipanggil "pinjam boleh ubah"
use std::thread; fn main() { let mut counter = Box::new(0); // 32-bit integer allocated on the heap let mut handles = vec![]; for _ in 0..10 { let handle = thread::spawn(|| { *counter += 1; // trying to edit the value }); handles.push(handle); } for handle in handles { handle.join().unwrap(); // WAITING FOR ALL THE THREADS TO COMPLETE } println!("Result: {}", *counter); }
Dalam situasi seperti ini, bahasa lain tidak memberi anda sebarang ralat sama sekali. Tanggungjawab anda untuk memeriksa ketepatannya, Karat menghalangnya.
Konstruk seperti ini tersebar di seluruh bahasa membantu anda untuk tidak menembak diri sendiri (selalunya).
Kesimpulan
BERGANTUNG!
Saya sangat berharap ada bahasa yang jawapan dan walaupun GoLang hampir sama dengan itu, ia sangat bergantung pada kes penggunaan anda dan yang paling penting, pasukan anda.
bagi saya, Rust senang bekerjasama (buat masa ini, mana tahu... hehe)
orang di TigerBeetle mengambil peluang Zig dan mereka gembira dengannya.
Primeagen lebih gembira dengan Zig.
untuk Jarred Sumner, Zig tidak mengapa, dia menulis Bun dalam Zig.
Mitchell Hashimoto (lelaki di belakang HashiCorp) sedang menulis hantu dalam Zig, istilah PANTAS MENYAKITKAN—
.
.
.
tunggu...
Atas ialah kandungan terperinci Saya Mencuba Setiap Bahasa Pengaturcaraan Panas. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Pergi bahasa berfungsi dengan baik dalam membina sistem yang cekap dan berskala. Kelebihannya termasuk: 1. Prestasi Tinggi: Disusun ke dalam Kod Mesin, Kelajuan Berjalan Cepat; 2. Pengaturcaraan serentak: Memudahkan multitasking melalui goroutine dan saluran; 3. Kesederhanaan: sintaks ringkas, mengurangkan kos pembelajaran dan penyelenggaraan; 4. Cross-Platform: Menyokong kompilasi silang platform, penggunaan mudah.

Golang lebih baik daripada C dalam kesesuaian, manakala C lebih baik daripada Golang dalam kelajuan mentah. 1) Golang mencapai kesesuaian yang cekap melalui goroutine dan saluran, yang sesuai untuk mengendalikan sejumlah besar tugas serentak. 2) C Melalui pengoptimuman pengkompil dan perpustakaan standard, ia menyediakan prestasi tinggi yang dekat dengan perkakasan, sesuai untuk aplikasi yang memerlukan pengoptimuman yang melampau.

Golang dan Python masing -masing mempunyai kelebihan mereka sendiri: Golang sesuai untuk prestasi tinggi dan pengaturcaraan serentak, sementara Python sesuai untuk sains data dan pembangunan web. Golang terkenal dengan model keserasiannya dan prestasi yang cekap, sementara Python terkenal dengan sintaks ringkas dan ekosistem perpustakaan yang kaya.

Golang lebih baik daripada Python dari segi prestasi dan skalabiliti. 1) Ciri-ciri jenis kompilasi Golang dan model konkurensi yang cekap menjadikannya berfungsi dengan baik dalam senario konvensional yang tinggi. 2) Python, sebagai bahasa yang ditafsirkan, melaksanakan perlahan -lahan, tetapi dapat mengoptimumkan prestasi melalui alat seperti Cython.

Goimpactsdevelopmentpositivielythroughspeed, efficiency, andsimplicity.1) Speed: goCompilesquicklyandrunsefficiently, idealforlargeproject.2) Kecekapan: ITSComprehensivestandardlibraryraryrarexternaldependencies, enhingdevelyficiency.

Golang dan C masing-masing mempunyai kelebihan sendiri dalam pertandingan prestasi: 1) Golang sesuai untuk kesesuaian tinggi dan perkembangan pesat, dan 2) C menyediakan prestasi yang lebih tinggi dan kawalan halus. Pemilihan harus berdasarkan keperluan projek dan tumpukan teknologi pasukan.

C lebih sesuai untuk senario di mana kawalan langsung sumber perkakasan dan pengoptimuman prestasi tinggi diperlukan, sementara Golang lebih sesuai untuk senario di mana pembangunan pesat dan pemprosesan konkurensi tinggi diperlukan. Kelebihan 1.C terletak pada ciri-ciri perkakasan dan keupayaan pengoptimuman yang tinggi, yang sesuai untuk keperluan berprestasi tinggi seperti pembangunan permainan. 2. Kelebihan Golang terletak pada sintaks ringkas dan sokongan konvensional semulajadi, yang sesuai untuk pembangunan perkhidmatan konvensional yang tinggi.

Perbezaan prestasi antara Golang dan C terutamanya ditunjukkan dalam pengurusan ingatan, pengoptimuman kompilasi dan kecekapan runtime. 1) Mekanisme pengumpulan sampah Golang adalah mudah tetapi boleh menjejaskan prestasi, 2) Pengurusan memori manual C dan pengoptimuman pengkompil lebih cekap dalam pengkomputeran rekursif.
