Rilis bahasa pemrograman Go 1.16

Rilis bahasa pemrograman Go 1.16 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.

Fitur-fitur baru utama yang diperkenalkan di Go 1.16:

  • Menambahkan paket embed, yang menyediakan alat untuk menyematkan file dan direktori arbitrer ke dalam program. Direktif "//go:embed" baru disediakan untuk menentukan file yang akan disematkan pada waktu kompilasi. Misalnya, menentukan β€œ//go:embed test.txt” dalam komentar kode dan kemudian mendeklarasikan variabel β€œvar f embed.FS” akan menyebabkan penyematan file test.txt dan kemampuan untuk mengaksesnya melalui β€œ f”deskripsi. Dengan cara yang sama, Anda dapat menyematkan file dengan sumber daya atau nilai individual dari jenis tertentu yang diperlukan untuk pekerjaan, misalnya, untuk mendapatkan variabel string "s" dari file version.txt, Anda dapat menentukan: import _ "embed ” //go:embed version.txt var s string print
  • Secara default, sistem modul baru dengan dukungan pembuatan versi terintegrasi kini diperlukan, menggantikan manajemen ketergantungan berbasis GOPATH. Variabel lingkungan GO111MODULE sekarang disetel ke "aktif" secara default dan mode modul digunakan terlepas dari keberadaan file go.mod di direktori kerja atau direktori induk. Dalam mode baru, perintah build seperti "go build" dan "go test" tidak mengubah konten go.mod dan go.sum, dan perintah "go install" memproses argumen versi ("go install example.com/[email dilindungi]"). Untuk mengembalikan perilaku lama, ubah GO111MODULE menjadi β€œauto”. Tercatat 96% pengembang telah beralih ke sistem modul baru.
  • Linker telah dioptimalkan. Untuk proyek besar, tata letak kini 20-25% lebih cepat dan memerlukan memori 5-15% lebih sedikit.
  • Kompiler telah menambahkan dukungan untuk perluasan fungsi sebaris dengan definisi singkat dari loop "untuk", nilai metode, dan konstruksi 'sakelar tipe'.
  • Menambahkan dukungan untuk sistem Apple yang dilengkapi dengan chip Apple M1 ARM baru. Menambahkan port netbsd/arm64 dan openbsd/mips64 dengan dukungan untuk NetBSD pada ARM 64-bit dan OpenBSD pada sistem MIPS64. Menambahkan dukungan untuk cgo dan mode β€œ-buildmode=pie” ke port linux/riscv64.
  • Dukungan untuk mode kompilasi x87 telah dihentikan (GO386=387). Dukungan untuk prosesor tanpa instruksi SSE2 kini tersedia melalui mode perangkat lunak "GO386=softfloat".

Selain itu, kami dapat mencatat dimulainya pengujian rilis beta bahasa Dart 2.12, di mana mode aman untuk menggunakan nilai "Null" (null safety) telah distabilkan, yang akan membantu menghindari crash yang disebabkan oleh upaya untuk menggunakan variabel yang nilainya tidak ditentukan dan disetel ke "Null". Mode ini menyiratkan bahwa variabel tidak boleh memiliki nilai nol kecuali variabel tersebut secara eksplisit diberi nilai nol. Mode ini sangat menghormati tipe variabel, yang memungkinkan kompiler menerapkan optimasi tambahan. Kepatuhan tipe diperiksa pada waktu kompilasi, misalnya, jika Anda mencoba menetapkan nilai "Null" ke variabel dengan tipe yang tidak menyiratkan status tidak terdefinisi, seperti "int", kesalahan akan ditampilkan.

Sumber: opennet.ru

Tambah komentar