Buka rilis 1.22

Bahasa pemrograman Go versi 1.22 sedang dirilis. Google, dengan masukan dari komunitas, sedang mengembangkan solusi hibrida yang menggabungkan performa tinggi bahasa pemrograman terkompilasi dengan keunggulan bahasa skrip, seperti kemudahan penulisan, pengembangan yang cepat, dan perlindungan kesalahan. Kode proyek didistribusikan di bawah lisensi BSD.

Sintaks Go didasarkan pada elemen-elemen umum bahasa C, dengan beberapa penyertaan dari Oberon. Bahasa ini relatif ringkas, namun mudah dibaca dan dipahami. Kode Go dikompilasi menjadi berkas biner yang dapat dieksekusi secara mandiri yang berjalan secara native, tanpa memerlukan mesin virtual (subsistem profiling, debugging, dan deteksi masalah runtime lainnya terintegrasi sebagai komponen runtime), sehingga menghasilkan kinerja yang sebanding dengan program C.

Proyek ini dirancang dari awal dengan mempertimbangkan pemrograman multithread dan operasi yang efisien pada sistem multi-inti, termasuk perangkat tingkat operator untuk mengatur komputasi paralel dan interaksi antar metode yang dieksekusi secara bersamaan. Bahasa ini juga menyediakan perlindungan bawaan terhadap kelebihan memori dan mendukung pengumpulan sampah.

Perubahan dalam rilis baru meliputi:

  • Dukungan untuk mendefinisikan rentang bilangan bulat telah ditambahkan ke loop “for”, misalnya, untuk melakukan iterasi melalui nilai dari 0 hingga 9, Anda sekarang dapat menggunakan loop “for i := range 10 {...}”.
  • Menambahkan dukungan eksperimental (GOEXPERIMENT=rangefunc) untuk fungsi rentang ke loop for, memungkinkan Anda menentukan fungsi sebagai iterator. Misalnya, "untuk i, x := rentang irisan. Mundur (s) {...}"
  • Masalah lama dengan for loop yang menyebabkan pemanggilan goroutine berbagi variabel loop di seluruh iterasi telah teratasi. Misalnya, kode values ​​​​:= []string{"a", "b", "c"} for _, v := range values ​​​​{ go func() { fmt.Println(v) done <- true }() } sekarang akan mencetak "a", "b", dan "c", alih-alih hanya "c", seperti sebelumnya.
  • Optimalisasi manajemen memori runtime telah dilakukan, menghasilkan peningkatan kinerja sebesar 1-3% dan pengurangan 1% dalam konsumsi memori di sebagian besar aplikasi.
  • Pekerjaan berlanjut pada penerapan optimasi yang dipandu profil (PGO) dalam kompiler, dengan mempertimbangkan fitur runtime. Versi baru kompiler ini menggunakan alat devirtualisasi untuk menggantikan pemanggilan metode tidak langsung dengan eksekusi inline yang diperluas.
  • Dengan PGO diaktifkan, perubahan tambahan meningkatkan kinerja sebagian besar program sebesar 2-14%.
  • Implementasi perbaikan mekanisme pemanggilan penyisipan yang eksperimental (GOEXPERIMENT=newinliner) telah ditambahkan ke kompiler, menggunakan heuristik untuk memisahkan operasi yang penting dan tidak penting.
  • Paket "math/rand/v2" telah ditambahkan ke pustaka standar, menyediakan API yang lebih koheren dan algoritma pembuatan angka pseudo-acak yang lebih cepat.
  • Paket net/http.ServeMux kini mendukung penentuan metode dan masker dalam templat. Misalnya, templat "GET /static/{id}/" akan diterapkan pada permintaan dengan metode HTTP "GET" dan akan menyimpan nilai segmen kedua dari jalur yang diminta dalam pengenal "id".
  • Paket database/sql kini mendukung tipe Null[T], yang memungkinkan pemindaian kolom yang mungkin bernilai null. Paket irisan kini memiliki fungsi Concat untuk menggabungkan beberapa irisan dari tipe apa pun.
  • Perintah untuk bekerja dengan ruang kerja (kumpulan modul) kini mendukung penggunaan direktori "vendor", yang berisi dependensi pada konten ruang kerja. Direktori ini dibuat saat menjalankan perintah "go work vendor" dan digunakan dalam perintah build ketika opsi "-mod=vendor" ditentukan (diaktifkan secara default jika direktori vendor tersedia).

Perubahan perilaku utilitas.

  • "go get" tidak lagi didukung di luar modul dalam mode GOPATH lama (yaitu, dengan GO111MODULE=off). Perintah build lainnya, seperti "go build" dan "go test", akan tetap berfungsi untuk program GOPATH lama tanpa batas waktu.
  • go mod init tidak lagi mencoba mengimpor persyaratan modul dari berkas konfigurasi untuk alat vendor lain (seperti Gopkg.lock).
  • go test -cover sekarang mencetak data ringkasan cakupan untuk paket yang tercakup yang tidak memiliki berkas uji sendiri. Sebelum Go 1.22, go test -cover akan melaporkan data ringkasan cakupan untuk paket tersebut: mymod/mypack [tanpa berkas uji]

    dan sekarang, sejak Go 1.22, fungsi dalam suatu paket dianggap tidak tercakup: cakupan mymod/mypack: 0.0% dari pernyataan Catatan: Jika suatu paket tidak memuat kode yang dapat dieksekusi sama sekali, kami tidak dapat melaporkan persentase cakupan yang berarti; untuk paket tersebut, go test akan terus melaporkan berkas pengujian yang hilang.

  • Antarmuka web alat pelacakan telah sedikit diperbarui sebagai bagian dari dukungan untuk pelacak baru. Beberapa masalah telah diatasi dan keterbacaan berbagai halaman telah ditingkatkan. Antarmuka web kini mendukung pemeriksaan pelacakan dalam tampilan yang aman untuk thread. Penampil pelacakan kini juga menampilkan durasi penuh semua panggilan sistem. Peningkatan ini hanya berlaku untuk pelacakan yang dihasilkan oleh program yang dibangun dengan Go 1.22 atau yang lebih baru. Dalam rilis mendatang, beberapa peningkatan ini akan diterapkan pada pelacakan yang dihasilkan oleh versi Go yang lebih lama.
  • Runtime sekarang menyimpan metadata pengumpulan sampah berbasis tipe lebih dekat ke setiap objek heap. Perubahan ini juga mengurangi jejak memori sebagian besar program Go sekitar 1% dengan mendeduplikasi metadata yang redundan. Peningkatan ini mungkin lebih kecil pada beberapa program, karena perubahan ini menyesuaikan batas kelas ukuran alokasi memori, sehingga beberapa objek dapat dipindahkan ke kelas ukuran yang lebih tinggi. Konsekuensi dari perubahan ini adalah alamat beberapa objek yang sebelumnya selalu disejajarkan pada batas 16-byte (atau lebih tinggi) sekarang hanya akan disejajarkan pada batas 8-byte. Beberapa program yang menggunakan instruksi assembly yang mengharuskan alamat memori disejajarkan lebih besar dari 8 byte dan bergantung pada perilaku penyelarasan sebelumnya dari alokasi memori mungkin gagal, tetapi kami perkirakan program semacam itu akan jarang terjadi. Program semacam itu dapat dibangun dengan GOEXPERIMENT=noallocheaders dengan opsi untuk kembali ke model metadata lama dan memulihkan perilaku penyelarasan sebelumnya, tetapi pemilik paket harus memperbarui kode assembler mereka untuk menghindari asumsi penyelarasan, karena solusi ini akan dihapus pada rilis mendatang.
  • Sebagaimana disebutkan dalam catatan rilis Go 1.20, Go 1.22 kini membutuhkan versi final Go 1.20 atau yang lebih baru untuk versi awal. Kami perkirakan Go 1.24 akan membutuhkan versi final Go 1.22 atau yang lebih baru untuk versi awal.
    Asli (go.dev)

Sumber: linux.org.ru

Beli hosting yang andal untuk situs dengan perlindungan DDoS, server VPS VDS 🔥 Beli hosting website andal dengan perlindungan DDoS, server VPS VDS | ProHoster