Rumah > pembangunan bahagian belakang > Golang > Saya Mencuba Setiap Bahasa Pengaturcaraan Panas

Saya Mencuba Setiap Bahasa Pengaturcaraan Panas

DDD
Lepaskan: 2024-12-16 10:14:11
asal
552 orang telah melayarinya

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!

sumber:dev.to
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan