Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apakah kelemahan bahasa go?

Apakah kelemahan bahasa go?

青灯夜游
青灯夜游asal
2022-12-21 19:36:387208semak imbas

Kelemahan bahasa go: 1. "Kelemahan prestasi" yang disebabkan oleh pilihan laluan teknikal Go ialah bahasa pengaturcaraan GC Dalam sesetengah situasi di mana prestasi sangat sensitif, anda masih perlu berhati-hati semasa memilih Pergi. 2. "Kaedah ungkapan tunggal" dan pengendalian ralat eksplisit agak "lapuk". majoriti komuniti bersetuju, ia pasti akan diterima pakai dan ditambah pada bahasa Go telah mengakibatkan kelemahan dalam komuniti dan "perpecahan" antara komuniti Go dan pasukan teras Go

Bahasa Go mempunyai sintaks yang mudah, termasuk sintaks seperti C Sintaks bahasa tersebut Jika pembaca telah menguasai dua atau tiga bahasa pengaturcaraan, ia hanya mengambil masa beberapa hari untuk mempelajari bahasa Go, malah pembangun baharu. boleh menulis program Bahasa berprestasi tinggi dalam beberapa minggu

2 Percuma dan cekap

Kelajuan kompilasi bahasa Go adalah lebih baik daripada Java dan C++. mempunyai kecekapan operasi yang hampir dengan bahasa C dan kecekapan pembangunan yang hampir dengan PHP Boleh dikatakan bahawa bahasa Go Ia menyepadukan dengan sempurna kecekapan operasi dan kecekapan pembangunan

Pada masa yang sama, bahasa Go juga menyokong semua pengaturcaraan semasa paradigma, termasuk pengaturcaraan prosedur, pengaturcaraan berorientasikan objek, pengaturcaraan berorientasikan antara muka, dan pengaturcaraan berfungsi boleh digabungkan secara bebas mengikut keperluan 3 Pustaka standard yang berkuasa adalah sangat stabil dan pelbagai, termasuk rangkaian, sistem, penyulitan, pengekodan, grafik dan aspek lain Rangkaian dan perpustakaan sistem adalah sangat praktikal, membolehkan pembangun tidak bergantung pada perpustakaan pihak ketiga apabila membangunkan program besar 4. . Penggunaan mudah

Tidak perlu menggunakan mesin maya, bahasa Go boleh dikeluarkan secara langsung sebagai fail boleh laku binari Selain itu, bahasa Go mempunyai pemaut sendiri dan tidak bergantung pada mana-mana pengkompil atau pemaut yang disediakan oleh sistem, fail boleh laku binari yang disusun boleh dijalankan dalam hampir mana-mana persekitaran sistem >

5 Sokongan asli untuk concurrency

Bahasa Go ialah bahasa yang sangat cekap yang menyokong konkurensi dari bahasa tersebut. lapisan dan sangat mudah untuk digunakan. Konkurensi bahasa Go adalah berdasarkan Goroutine, yang serupa dengan utas , tetapi ia bukan satu utas, ia adalah kaedah yang ringan untuk penjalinan dalam bahasa Go rendah, hanya beberapa ribu bait memori tambahan

Biasanya hos desktop biasa menjalankan ratusan daripadanya Satu urutan akan terlebih muatan, tetapi hos yang sama boleh menjalankan ribuan atau bahkan puluhan ribu Goroutine dan saluran -kaedah concurrency berasaskan boleh berkomunikasi antara satu sama lain melalui saluran untuk memaksimumkan penggunaan sumber CPU.

6. Kestabilan yang kukuh

Bahasa Go mempunyai semakan kompilasi yang kuat, piawaian pengekodan yang ketat dan kestabilan yang kukuh Selain itu, bahasa Go juga menyediakan kitaran hayat perisian (seperti pembangunan, ujian, penggunaan, penyelenggaraan , dsb.), seperti: alat go, go fmt, go test, dsb.

7. Pengumpulan sampah

Apabila membangun menggunakan bahasa Go, pembangun hanya perlu memberi perhatian kepada aplikasi memori, dan tidak perlu risau tentang pelepasan memori, kerana bahasa Go telah dibina- dalam Runtime digunakan untuk mengurusnya secara automatik. Walaupun GC (Pengumpulan Sampah, mekanisme kutipan sampah) tidak sempurna pada masa ini, ia sudah cukup untuk menghadapi kebanyakan situasi yang dihadapi semasa pembangunan, membolehkan pembangun lebih fokus pada perniagaan Pada masa yang sama, bahasa Go juga membenarkan pembangun untuk Kerja ini dioptimumkan.

Kelemahan Go

1. "Kekurangan prestasi" yang disebabkan oleh pilihan laluan teknikal

Seperti yang kita sedia maklum. , Go penuh dengan sampah Ia adalah bahasa pengaturcaraan kitar semula, jadi tidak kira betapa singkatnya masa STW (Stop The World) Go dan betapa kecilnya kelewatan GC, ia masih tergolong dalam bahasa pengaturcaraan kelas GC dan tergolong dalam kem yang sama sebagai Java dan C# Pada masa yang sama, ia secara semula jadi berkaitan dengan C, Garis jelas dilukis antara C++ dan bahasa pengaturcaraan seperti Rust yang menguruskan memori secara manual dan tidak mempunyai beban GC masa jalan. Walaupun niat asal bahasa Go adalah untuk menjadi bahasa pengaturcaraan peringkat sistem, walaupun prestasi masa jalan Go boleh memenuhi keperluan 99.99% keadaan, walaupun trilion trafik Baidu [forwarding engine BFE], pangkalan data siri masa [influxdb], dan pangkalan data hubungan teragih [ TiDB] dan projek sensitif prestasi lain telah memilih untuk dilaksanakan dalam Go, tetapi tidak dapat dinafikan bahawa dalam beberapa situasi yang sangat sensitif prestasi, anda masih perlu berhati-hati apabila memilih Go.

2 "Kelemahan ekspresi" yang ditimbulkan dengan mematuhi falsafah reka bentuk sendiri

1) Kaedah ungkapan "Tunggal"

Ramai pembangun telah beralih ke kem Go daripada bahasa lain Orang ramai mengadu bahawa Go mempunyai terlalu sedikit helah dan tidak banyak rutin Sebab mengapa Go menunjukkan "kelemahan ekspresi" berpunca daripada prinsip dalam falsafah reka bentuknya: "Ia menyokong bahawa terdapat hanya satu atau beberapa cara untuk menulis sesuatu." Prinsip ini tidak memenuhi keperluan psikologi sesetengah pembangun untuk menunjukkan kemahiran mereka, jadi Go dikritik sebagai bahasa yang hanya digunakan oleh pengaturcara dengan kelayakan biasa-biasa sahaja.

[Go 1.18 akan menambah generik (parameter jenis)], yang boleh dianggap sebagai "pampasan" untuk "keburukan" tersebut. Walau bagaimanapun, bagi kami Gophers yang telah lama mengiktiraf nilai dan falsafah reka bentuk Go, kami sangat bimbang bahawa [generik], yang telah meningkatkan keupayaan ekspresif Go dengan banyak, akan menjadi "tempat pembiakan" untuk muslihat dan muslihat.

2) "Lapuk" pengendalian ralat eksplisit

Sejak hari ia dilahirkan, bahasa Go tidak menyediakan struktur berasaskan pengecualian seperti bahasa pengaturcaraan arus perdana seperti C++, Java, dan Python. Daripada mekanisme pengendalian ralat cuba-tangkap-akhirnya, pereka Go percaya bahawa pengecualian gandingan kepada struktur kawalan program akan membawa kepada kekeliruan kod. Go menyediakan mekanisme pengendalian ralat yang mudah berdasarkan perbandingan nilai ralat, yang "memaksa" setiap pembangun Go untuk memberi perhatian dan mengendalikan setiap ralat secara eksplisit dengan pengendalian ralat yang jelas Ia juga akan memberikan lebih keyakinan kepada pembangun Go kod. Walau bagaimanapun, kegigihan falsafah reka bentuk ini telah diejek oleh banyak pembangun dari bahasa lain sebagai "ketinggalan zaman" dan dipanggil "mekanisme purba dari setengah abad yang lalu." (Nota pengarang: Mekanisme pengendalian ralat yang digunakan semasa bahasa C dilahirkan pada tahun 1970-an)

Pasukan pembangunan Go juga telah "tergoncang". [Go Draf mekanisme baharu untuk pengendalian ralat]. Komuniti Go juga telah mengadakan perbincangan panjang dan juga "pertengkaran" mengenai isu ini Gopher Dave Cheney yang terkenal bersuara, Rob Pike bercakap, dan William Kennedy, seorang jurulatih Go yang terkenal dan salah seorang pengarang bersama ". Go Language Practical Combat" Selepas cadangan percubaan pasukan Go diumumkan, mereka menerbitkan surat terbuka kepada komuniti Go yang menentang rancangan percubaan itu. Akhirnya, kumpulan yang menegaskan falsafah reka bentuk Go mendapat kelebihan, dan cadangan cuba telah ditolak dan tidak disertakan dalam [versi Go 1.13]!

3. "Kelemahan Niche" yang menyimpang daripada arus perdana

Reka bentuk awal mekanisme pengurusan pergantungan pakej Go memang mempunyai beberapa "kecacatan", yang berpunca daripada repositori kod dalaman yang besar dalam Google dan Kesan model pembangunan trunk. Bahasa Go di luar Google telah mendengar suara dari aspek yang berbeza Mekanisme pengurusan pakej Go tidak dapat memenuhi keperluan komuniti sejak sekian lama. Akibatnya, terdapat percubaan untuk menambah baik pengurusan pergantungan pakej seperti [mekanisme vendor] dan [dep].

Pada awal tahun 2018, tepat apabila kebanyakan orang gopher menganggap bahawa dep akan "secara semula jadi" dinaik taraf kepada sebahagian daripada rangkaian alat go rasmi, Russ Cox, ketua teknikal pasukan teras Go dan salah seorang ahli awal pasukan teras Go Beliau menerbitkan [tujuh artikel] secara berterusan di blog peribadinya, secara sistematik menerangkan penyelesaian teknikal pasukan Go kepada "pengurusan pergantungan pakej": [vgo], pendahulu modul go.

Idea utama vgo termasuk: Versi Import Semantik dan Pemilihan Versi Minimum, yang bertentangan dengan peraturan pengurusan kebergantungan pakej semasa bahasa pengaturcaraan arus perdana, terutamanya [Pilih Versi Minimum (MVS)], yang baharu mendekati dan menyimpang dari arus perdana!

4. "Kelemahan komuniti" yang disebabkan oleh "pemusatan demokrasi" pasukan teras Go

Tidak seperti penggunaan meluas cadangan komuniti pasukan Rust untuk "meningkatkan ciri bahasa", Go adalah seperti satu lagi ekstrem : Pasukan teras Go mempunyai kawalan penuh ke atas evolusi bahasa Melainkan majoriti masyarakat bersetuju, ia pasti akan diterima pakai dan ditambah kepada bahasa Go yang saya secara berseloroh memanggilnya "pemusatan demokrasi", iaitu kuasa mengundi sebenar sebenarnya terletak pada Go Pasukan teras mewakili sebilangan kecil orang dalam komuniti.

Pertikaian antara dep dan vgo pada awal 2018 adalah manifestasi tipikal "kelemahan" ini. Projek dep yang komuniti telah bekerja keras untuk membina selama lebih daripada setahun telah "diperah" oleh vgo, yang telah direka oleh Russ Cox dan beberapa orang lain yang meluangkan sedikit masa untuk memfokuskan pada kedudukannya piawaian alat pengurusan pergantungan pakej telah menjadi "batu loncatan" untuk kejayaan modul Go. Walaupun ternyata keputusan pasukan Go untuk menggunakan modul go adalah betul, "perpecahan" yang disebabkan oleh perkara ini antara komuniti Go dan pasukan teras Go memang wujud, supaya dalam dua tahun lalu, pasukan teras Go telah bekerja. sukar untuk meningkatkan hubungan dengan komuniti Go, menyeragamkan dan mentransmisikan proses mencadangkan, menyemak dan menerima cadangan Go.

5 Selepas kegagalan serangan habis-habisan, "kelemahan fungsi" yang disebabkan oleh kegagalan jangkaan

Selepas keluaran Go 1.5, Go telah menarik perhatian ramai disebabkan oleh pengurangan ketara dalam bootstrapping dan kelewatan GC secara beransur-ansur meningkat sehingga ia memenangi Bahasa Pengaturcaraan Terbaik TIOBE untuk kali kedua pada awal 2017, yang menjadikan bahasa Go agak "meningkatkan". dunia: bukan sahaja mengawal pasaran asli awan mereka sendiri dengan tegas, untuk menduduki pasaran peringkat perusahaan Java, kita juga mesti mengalahkan lawan sedia ada pada terminal (android. ios) dan bahagian hadapan (js).

Sesetengah orang mungkin menganggap kenyataan saya di atas tidak masuk akal, tetapi ia tidak berasas. Bahasa Go benar-benar telah membuat pencapaian hebat dalam aspek terminal dan bahagian hadapan Sesiapa yang mengetahui sejarah Go tahu bahawa pasukan Go pernah mempunyai pembangun sepenuh masa yang mengambil bahagian dalam [projek gomobile](, yang bertujuan untuk membina teknologi Go. stack pada Android dan iOS , untuk mencapai tujuan menulis aplikasi terminal dalam bahasa Go

Di bahagian hadapan, [projek gopherjs] boleh menyusun kod go ke dalam kod js dan menjalankannya dalam penyemak imbas utama pengarang gopherjs turut membantu projek go Natively menyokong webassembly dan menyokong kompilasi go into webassembly untuk dijalankan dalam penyemak imbas

.

Walau bagaimanapun, percubaan di atas akhirnya gagal untuk "berjaya". Jadi Go secara beransur-ansur tenang dan kembali ke medan perang utama di mana ia mahir, kembali ke bidang aplikasi peringkat perusahaan, infrastruktur, perisian tengah, perkhidmatan mikro, aplikasi baris arahan, dsb., dan mendapat sokongan lebih ramai pembangun dalam bidang-bidang ini.

Walau bagaimanapun, kegagalan serangan habis-habisan menyebabkan ramai pembangun dengan alasan bahawa "fungsi Go adalah lemah". .

[Cadangan berkaitan: Pergi tutorial video, Pengajaran pengaturcaraan]

Atas ialah kandungan terperinci Apakah kelemahan bahasa go?. 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