Keluaran bahasa pengaturcaraan Go 1.18

Keluaran bahasa pengaturcaraan Go 1.18 dibentangkan, yang sedang dibangunkan oleh Google dengan penyertaan komuniti sebagai penyelesaian hibrid yang menggabungkan prestasi tinggi bahasa yang disusun dengan kelebihan bahasa skrip seperti kemudahan menulis kod , kelajuan pembangunan dan perlindungan ralat. Kod projek diedarkan di bawah lesen BSD.

Sintaks Go adalah berdasarkan unsur biasa bahasa C dengan beberapa pinjaman daripada bahasa Python. Bahasanya agak ringkas, tetapi kodnya mudah dibaca dan difahami. Kod Go disusun ke dalam fail boleh laku binari berdiri sendiri yang berjalan secara asli tanpa menggunakan mesin maya (profil, modul penyahpepijatan dan subsistem pengesanan masalah masa jalan lain disepadukan sebagai komponen masa jalan), yang membolehkan prestasi setanding dengan program C.

Projek ini pada mulanya dibangunkan dengan fokus kepada pengaturcaraan berbilang benang dan operasi yang cekap pada sistem berbilang teras, termasuk menyediakan cara peringkat operator untuk mengatur pengkomputeran selari dan interaksi antara kaedah yang dilaksanakan selari. Bahasa ini juga menyediakan perlindungan terbina dalam terhadap blok memori yang terlalu diperuntukkan dan menyediakan keupayaan untuk menggunakan pengumpul sampah.

Versi baharu menambah sokongan untuk fungsi dan jenis generik (generik), dengan bantuan pembangun boleh menentukan dan menggunakan fungsi yang direka untuk berfungsi dengan beberapa jenis sekaligus. Anda juga boleh menggunakan antara muka untuk mencipta jenis gabungan yang merangkumi pelbagai jenis data. Sokongan untuk generik dilaksanakan tanpa memecahkan keserasian ke belakang dengan kod sedia ada. // Jumlah nilai set, berfungsi untuk jenis int64 dan float64 berfungsi SumIntsOrFloats[K setanding, V int64 | float64](m peta[K]V) V { var s V untuk _, v := julat m { s += v } return s } // Pilihan lain dengan definisi jenis generik: jenis Antara muka nombor { int64 | float64 } func SumNumbers[K setanding, V Number](m map[K]V) V { var s V for _, v := julat m { s += v } return s }

Penambahbaikan lain:

  • Utiliti untuk ujian kod kabur disepadukan ke dalam kit alat standard. Semasa ujian kabur, aliran semua kemungkinan kombinasi rawak data input dijana dan kemungkinan kegagalan semasa pemprosesannya direkodkan. Jika urutan ranap atau tidak sepadan dengan respons yang dijangkakan, maka tingkah laku ini berkemungkinan besar menunjukkan pepijat atau kelemahan.
  • Sokongan tambahan untuk ruang kerja berbilang modular, membolehkan anda melaksanakan arahan pada berbilang modul sekaligus, membolehkan anda membina dan menjalankan kod dalam berbilang modul secara serentak.
  • Pengoptimuman prestasi yang ketara telah dibuat untuk sistem berdasarkan pemproses Apple M1, ARM64 dan PowerPC64. Mendayakan keupayaan untuk menggunakan daftar dan bukannya timbunan untuk menghantar argumen kepada fungsi dan mengembalikan hasilnya. Pembukaan gelung sebaris dipertingkat oleh pengkompil. Semakan jenis dalam pengkompil telah direka bentuk semula sepenuhnya. Sesetengah ujian menunjukkan peningkatan 20% dalam prestasi kod berbanding keluaran sebelumnya, tetapi kompilasi itu sendiri mengambil masa kira-kira 15% lebih lama.
  • Dalam masa jalanan, kecekapan mengembalikan memori yang dibebaskan kepada sistem pengendalian telah ditingkatkan dan operasi pemungut sampah telah dipertingkatkan, yang tingkah lakunya menjadi lebih boleh diramal.
  • Pakej baharu net/netip dan debug/buildinfo telah ditambahkan pada perpustakaan standard. Sokongan untuk TLS 1.0 dan 1.1 dilumpuhkan secara lalai dalam kod klien. Modul crypto/x509 telah berhenti memproses sijil yang ditandatangani menggunakan cincang SHA-1.
  • Keperluan untuk persekitaran dalam Linux telah dibangkitkan; untuk berfungsi, anda kini perlu mempunyai kernel Linux sekurang-kurangnya versi 2.6.32. Dalam keluaran seterusnya, perubahan serupa dijangka untuk FreeBSD (sokongan untuk cawangan FreeBSD 11.x akan dihentikan) dan sekurang-kurangnya FreeBSD 12.2 akan diperlukan untuk berfungsi.

Sumber: opennet.ru

Tambah komen