Rilis bahasa pemrograman Go 1.18

Rilis bahasa pemrograman Go 1.18 disajikan, yang sedang dikembangkan oleh Google dengan partisipasi komunitas sebagai solusi hybrid yang menggabungkan kinerja tinggi bahasa yang dikompilasi dengan keunggulan bahasa skrip seperti kemudahan penulisan kode. , kecepatan pengembangan dan perlindungan kesalahan. Kode proyek didistribusikan di bawah lisensi BSD.

Sintaks Go didasarkan pada elemen bahasa C yang familiar dengan beberapa pinjaman dari bahasa Python. Bahasanya cukup ringkas, namun kodenya mudah dibaca dan dipahami. Kode Go dikompilasi menjadi file biner mandiri yang dapat dijalankan yang berjalan secara native tanpa menggunakan mesin virtual (profiling, modul debugging, dan subsistem deteksi masalah runtime lainnya diintegrasikan sebagai komponen runtime), yang memungkinkan kinerja sebanding dengan program C.

Proyek ini awalnya dikembangkan dengan tujuan pemrograman multi-thread dan operasi yang efisien pada sistem multi-core, termasuk menyediakan sarana tingkat operator untuk mengatur komputasi paralel dan interaksi antara metode yang dijalankan secara paralel. Bahasa ini juga memberikan perlindungan bawaan terhadap blok memori yang dialokasikan secara berlebihan dan menyediakan kemampuan untuk menggunakan pengumpul sampah.

Versi baru menambahkan dukungan untuk fungsi dan tipe umum (generik), yang dengannya pengembang dapat mendefinisikan dan menggunakan fungsi yang dirancang untuk bekerja dengan beberapa tipe sekaligus. Dimungkinkan juga untuk menggunakan antarmuka untuk membuat tipe gabungan yang mencakup beberapa tipe data. Dukungan untuk obat generik diterapkan tanpa merusak kompatibilitas dengan kode yang ada. // Jumlah nilai yang ditetapkan, berfungsi untuk tipe int64 dan float64 func SumIntsOrFloats[K sebanding, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Opsi lain dengan definisi tipe umum: type Number interface { int64 | float64 } func JumlahNomor[K sebanding, Nomor V](m peta[K]V) V { var s V untuk _, v := rentang m { s += v } return s }

Perbaikan lainnya:

  • Utilitas untuk pengujian kode fuzzing diintegrasikan ke dalam toolkit standar. Selama pengujian fuzzing, aliran semua kemungkinan kombinasi acak dari data masukan dihasilkan dan kemungkinan kegagalan selama pemrosesannya dicatat. Jika suatu urutan mogok atau tidak sesuai dengan respons yang diharapkan, maka perilaku ini kemungkinan besar mengindikasikan bug atau kerentanan.
  • Menambahkan dukungan untuk ruang kerja multi-modular, memungkinkan Anda menjalankan perintah pada beberapa modul sekaligus, memungkinkan Anda membuat dan menjalankan kode di beberapa modul secara bersamaan.
  • Pengoptimalan kinerja yang signifikan telah dilakukan untuk sistem berbasis prosesor Apple M1, ARM64, dan PowerPC64. Mengaktifkan kemampuan untuk menggunakan register alih-alih tumpukan untuk meneruskan argumen ke fungsi dan mengembalikan hasilnya. Peningkatan pembukaan gulungan inline oleh kompiler. Pemeriksaan tipe di kompiler telah didesain ulang sepenuhnya. Beberapa pengujian menunjukkan peningkatan performa kode sebesar 20% dibandingkan rilis sebelumnya, namun kompilasinya sendiri memakan waktu sekitar 15% lebih lama.
  • Saat runtime, efisiensi pengembalian memori yang dibebaskan ke sistem operasi telah ditingkatkan dan pengoperasian pengumpul sampah telah ditingkatkan, yang perilakunya menjadi lebih dapat diprediksi.
  • Paket baru net/netip dan debug/buildinfo telah ditambahkan ke perpustakaan standar. Dukungan untuk TLS 1.0 dan 1.1 dinonaktifkan secara default dalam kode klien. Modul crypto/x509 telah berhenti memproses sertifikat yang ditandatangani menggunakan hash SHA-1.
  • Persyaratan lingkungan di Linux telah ditingkatkan; agar dapat berfungsi, Anda sekarang harus memiliki kernel Linux minimal versi 2.6.32. Pada rilis berikutnya, perubahan serupa diharapkan untuk FreeBSD (dukungan untuk cabang FreeBSD 11.x akan dihentikan) dan setidaknya FreeBSD 12.2 diperlukan agar dapat berfungsi.

Sumber: opennet.ru

Tambah komentar