cari
Rumahpembangunan bahagian belakangGolangSaya 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?

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);
}

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!

Kenyataan
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
GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah?GO Language Pack Import: Apakah perbezaan antara garis bawah dan tanpa garis bawah?Mar 03, 2025 pm 05:17 PM

Artikel ini menerangkan mekanisme import pakej Go: Dinamakan import (mis., Import & quot; fmt & quot;) dan import kosong (mis., Import _ & quot; fmt & quot;). Dinamakan import membuat kandungan pakej boleh diakses, sementara import kosong hanya melaksanakan t

Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego?Bagaimana untuk melaksanakan pemindahan maklumat jangka pendek antara halaman dalam kerangka beego?Mar 03, 2025 pm 05:22 PM

Artikel ini menerangkan fungsi Newflash () Beego untuk pemindahan data antara halaman dalam aplikasi web. Ia memberi tumpuan kepada menggunakan NewFlash () untuk memaparkan mesej sementara (kejayaan, kesilapan, amaran) antara pengawal, memanfaatkan mekanisme sesi. Limita

Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go?Bagaimana cara menukar senarai hasil pertanyaan mysql ke dalam slice struktur tersuai dalam bahasa Go?Mar 03, 2025 pm 05:18 PM

Artikel ini memperincikan penukaran yang cekap hasil pertanyaan MySQL ke dalam kepingan struct go. Ia menekankan menggunakan kaedah imbasan pangkalan data/SQL untuk prestasi optimum, mengelakkan parsing manual. Amalan terbaik untuk pemetaan medan struct menggunakan tag db dan robus

Bagaimana saya menulis objek dan stub untuk ujian di GO?Bagaimana saya menulis objek dan stub untuk ujian di GO?Mar 10, 2025 pm 05:38 PM

Artikel ini menunjukkan penciptaan dan stub di GO untuk ujian unit. Ia menekankan penggunaan antara muka, menyediakan contoh pelaksanaan mengejek, dan membincangkan amalan terbaik seperti menjaga mocks fokus dan menggunakan perpustakaan penegasan. Articl

Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO?Bagaimana saya boleh menentukan kekangan jenis tersuai untuk generik di GO?Mar 10, 2025 pm 03:20 PM

Artikel ini meneroka kekangan jenis adat Go untuk generik. Ia memperincikan bagaimana antara muka menentukan keperluan jenis minimum untuk fungsi generik, meningkatkan keselamatan jenis dan kebolehgunaan semula kod. Artikel ini juga membincangkan batasan dan amalan terbaik

Bagaimana cara menulis fail dalam bahasa Go dengan mudah?Bagaimana cara menulis fail dalam bahasa Go dengan mudah?Mar 03, 2025 pm 05:15 PM

Artikel ini memperincikan penulisan fail yang cekap di GO, membandingkan OS.WriteFile (sesuai untuk fail kecil) dengan os.openfile dan buffered menulis (optimum untuk fail besar). Ia menekankan pengendalian ralat yang teguh, menggunakan penangguhan, dan memeriksa kesilapan tertentu.

Bagaimana anda menulis ujian unit di GO?Bagaimana anda menulis ujian unit di GO?Mar 21, 2025 pm 06:34 PM

Artikel ini membincangkan ujian unit menulis di GO, meliputi amalan terbaik, teknik mengejek, dan alat untuk pengurusan ujian yang cekap.

Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya?Bagaimana saya boleh menggunakan alat pengesanan untuk memahami aliran pelaksanaan aplikasi saya?Mar 10, 2025 pm 05:36 PM

Artikel ini meneroka menggunakan alat pengesanan untuk menganalisis aliran pelaksanaan aplikasi GO. Ia membincangkan teknik instrumentasi manual dan automatik, membandingkan alat seperti Jaeger, Zipkin, dan OpenTelemetry, dan menonjolkan visualisasi data yang berkesan

See all articles

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

MantisBT

MantisBT

Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

VSCode Windows 64-bit Muat Turun

VSCode Windows 64-bit Muat Turun

Editor IDE percuma dan berkuasa yang dilancarkan oleh Microsoft

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma