Rumah pembangunan bahagian belakang Golang Saya Mencuba Setiap Bahasa Pengaturcaraan Panas

Saya Mencuba Setiap Bahasa Pengaturcaraan Panas

Dec 16, 2024 am 10:14 AM

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?

I Tried Every Hot Programming Language

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...

I Tried Every Hot Programming Language

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);
}
Salin selepas log masuk
Salin selepas log masuk

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);
}
Salin selepas log masuk
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Artikel Panas

<🎜>: Bubble Gum Simulator Infinity - Cara Mendapatkan dan Menggunakan Kekunci Diraja
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Tutorial Java
1675
14
Tutorial PHP
1278
29
Tutorial C#
1257
24
Golang vs Python: Prestasi dan Skala Golang vs Python: Prestasi dan Skala Apr 19, 2025 am 12:18 AM

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.

Golang dan C: Konvensyen vs kelajuan mentah Golang dan C: Konvensyen vs kelajuan mentah Apr 21, 2025 am 12:16 AM

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.

Bermula dengan Go: Panduan Pemula Bermula dengan Go: Panduan Pemula Apr 26, 2025 am 12:21 AM

GoisidealforbeginnersandSuekableforcloudandnetworkservicesduetoitssimplicity, kecekapan, danconcurrencyfeatures.1) installgofromtheofficialwebsiteandverifywith'goversion'.2)

Golang vs C: Perbandingan Prestasi dan Kelajuan Golang vs C: Perbandingan Prestasi dan Kelajuan Apr 21, 2025 am 12:13 AM

Golang sesuai untuk pembangunan pesat dan senario serentak, dan C sesuai untuk senario di mana prestasi ekstrem dan kawalan peringkat rendah diperlukan. 1) Golang meningkatkan prestasi melalui pengumpulan sampah dan mekanisme konvensional, dan sesuai untuk pembangunan perkhidmatan web yang tinggi. 2) C mencapai prestasi muktamad melalui pengurusan memori manual dan pengoptimuman pengkompil, dan sesuai untuk pembangunan sistem tertanam.

Golang vs Python: Perbezaan dan Persamaan Utama Golang vs Python: Perbezaan dan Persamaan Utama Apr 17, 2025 am 12:15 AM

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 dan C: Perdagangan dalam prestasi Golang dan C: Perdagangan dalam prestasi Apr 17, 2025 am 12:18 AM

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.

Perlumbaan Prestasi: Golang vs C Perlumbaan Prestasi: Golang vs C Apr 16, 2025 am 12:07 AM

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.

Golang vs Python: Kebaikan dan Kekejangan Golang vs Python: Kebaikan dan Kekejangan Apr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitseficiencyandcurrency, whilepythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.golang'sdesignencouragescouragescouragescouragescourageSlean, readablecodeanditsouragescouragescourscean,

See all articles