Keluaran bahasa pengaturcaraan Go 1.22 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 Oberon. Bahasanya agak ringkas, tetapi kodnya mudah dibaca dan difahami. Kod Go disusun ke dalam fail boleh laku binari berasingan yang dilaksanakan 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.
Antara perubahan dalam keluaran baharu:
- Sokongan untuk mentakrifkan julat integer telah ditambahkan pada gelung "untuk", sebagai contoh, untuk lelaran melalui nilai dari 0 hingga 9, kini anda boleh menggunakan gelung "untuk i := julat 10 {...}".
- Menambahkan sokongan eksperimen (GOEXPERIMENT=rangefunc) untuk fungsi julat kepada untuk gelung, membolehkan anda menentukan fungsi sebagai lelaran. Contohnya, "untuk i, x := hirisan julat. Ke belakang (s) {...}"
- Menyelesaikan isu lama mengenai gelung yang menyebabkan panggilan ke coroutine (goroutine) untuk berkongsi pembolehubah gelung merentas lelaran. Contohnya, nilai kod := []rentetan{"a", "b", "c"} untuk _, v := nilai julat { go func() { fmt.Println(v) done < - true }() } kini akan mengeluarkan "a", "b" dan "c", dan bukan hanya "c", seperti sebelum ini.
- Pengurusan memori dalam masa jalan telah dioptimumkan, yang membawa kepada peningkatan prestasi sebanyak 1-3% dan pengurangan penggunaan memori dalam kebanyakan aplikasi sebanyak 1%.
- Kerja diteruskan untuk memasukkan pengoptimuman dalam pengkompil berdasarkan hasil pemprofilan kod (PGO - Pengoptimuman berpandukan Profil), yang membolehkan mengambil kira ciri yang ditentukan semasa pelaksanaan program. Dalam versi baharu, pengkompil menggunakan alat penyahvirtualan untuk menggantikan panggilan tidak langsung pelbagai kaedah dengan pelaksanaan blok sebaris yang dikembangkan.
- Apabila PGO didayakan, perubahan tambahan meningkatkan prestasi kebanyakan program sebanyak 2-14%.
- Pelaksanaan eksperimen (GOEXPERIMENT=newinliner) yang dipertingkatkan bagi mekanisme penyebarisan panggilan telah ditambahkan pada pengkompil, menggunakan heuristik untuk memisahkan operasi penting dan tidak penting.
- Pakej "math/rand/v2" telah ditambahkan pada pustaka standard, yang menawarkan API yang lebih holistik dan menggunakan algoritma yang lebih pantas untuk menjana nombor rawak pseudo.
- Pakej net/http.ServeMux telah menambahkan keupayaan untuk menentukan kaedah dan topeng dalam templat, contohnya, templat “GET /static/{id}/” akan digunakan pada permintaan dengan kaedah HTTP “GET” dan akan menyimpan nilai segmen kedua laluan yang diminta dalam pengecam " id".
- Pakej pangkalan data/sql telah menambah sokongan untuk jenis Null[T], membolehkan anda mengimbas lajur yang boleh menjadi NULL. Menambah fungsi Concat pada pakej hirisan untuk menggabungkan berbilang hirisan apa-apa jenis.
- Dalam arahan untuk bekerja dengan ruang kerja (koleksi modul), adalah mungkin untuk menggunakan direktori "vendor", yang mengandungi kebergantungan kepada kandungan ruang kerja. Direktori dicipta apabila melaksanakan perintah "go work vendor" dan digunakan dalam arahan binaan apabila pilihan "-mod=vendor" ditetapkan (membolehkan secara lalai jika terdapat direktori vendor).
Perubahan dalam tingkah laku utiliti.
- go get tidak lagi disokong di luar modul dalam mod GOPATH lama (iaitu dengan GO111MODULE=off). Perintah binaan lain, seperti go build and go test, akan terus berfungsi untuk program GOPATH warisan selama-lamanya.
- go mod init tidak lagi cuba mengimport keperluan modul daripada fail konfigurasi untuk alatan vendor lain (seperti Gopkg.lock).
- go test -cover sekarang mencetak ringkasan liputan untuk pakej dilindungi yang tidak mempunyai fail ujian sendiri. Sebelum Pergi 1.22, adakah laporan sampul ujian untuk pakej sedemikian? mymod/mypack [tiada fail ujian]
dan kini mulai Go 1.22, fungsi dalam pakej dianggap tidak dilindungi: liputan mymod/mypack: 0.0% daripada pernyataan Nota: jika pakej tidak mengandungi kod boleh laku sama sekali, kami tidak boleh melaporkan peratusan liputan yang bermakna; untuk pakej sedemikian, go test akan terus melaporkan fail ujian yang hilang.
- Antara muka web alat surih telah dikemas kini sedikit sebagai sebahagian daripada kerja untuk menyokong pengesan baharu, membetulkan beberapa isu dan meningkatkan kebolehbacaan pelbagai halaman. Antara muka web kini menyokong penerokaan jejak dalam paparan selamat benang. Pemapar surih kini juga memaparkan tempoh penuh semua panggilan sistem. Penambahbaikan ini hanya digunakan untuk melihat jejak yang dihasilkan oleh program yang dibina pada Go 1.22 atau lebih baru. Keluaran masa hadapan akan membawa beberapa penambahbaikan ini pada jejak yang dihasilkan oleh versi lama Go.
- Masa jalan kini menyimpan metadata pengumpulan sampah berasaskan jenis lebih dekat dengan setiap objek timbunan. Perubahan ini juga mengurangkan overhed memori kebanyakan program Go sebanyak kira-kira 1% dengan menyahduplikasi metadata berlebihan. Dalam sesetengah atur cara, peningkatan mungkin lebih kecil kerana perubahan ini melaraskan sempadan kelas saiz pengagih memori, jadi sesetengah objek boleh dialihkan ke kelas saiz yang lebih tinggi. Kesan daripada perubahan ini ialah alamat beberapa objek yang sebelum ini sentiasa dijajarkan pada sempadan 16 bait (atau lebih tinggi) kini hanya akan dijajarkan pada sempadan 8 bait. Sesetengah atur cara yang menggunakan arahan pemasangan yang memerlukan alamat memori dijajarkan melebihi 8 bait dan bergantung pada kelakuan penjajaran sebelumnya bagi pengalokasi memori mungkin gagal, tetapi kami menjangkakan program sedemikian jarang berlaku. Program sedemikian boleh dibina dengan GOEXPERIMENT=noallocheader dengan pilihan untuk kembali kepada model metadata lama dan memulihkan tingkah laku penjajaran sebelumnya, tetapi pemilik pakej harus mengemas kini kod pemasangan mereka untuk mengelakkan andaian penjajaran, kerana penyelesaian ini akan dialih keluar dalam keluaran akan datang .
- Seperti yang dinyatakan dalam nota keluaran Go 1.20, Go 1.22 kini memerlukan versi akhir Go 1.20 atau lebih baru untuk binaan awal. Kami menjangkakan Go 1.24 memerlukan versi akhir Go 1.22 atau lebih baru untuk binaan awal.
Asal (go.dev)
Sumber: linux.org.ru
