Выпуск языка программирования Go 1.24

ПослС ΡˆΠ΅ΡΡ‚ΠΈ мСсяцСв Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прСдставлСн Ρ€Π΅Π»ΠΈΠ· языка программирования Go 1.24, Ρ€Π°Π·Π²ΠΈΠ²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Google ΠΏΡ€ΠΈ участии сообщСства. Π―Π·Ρ‹ΠΊ сочСтаСт Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΡΠ²ΠΎΠΉΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΌ языкам, с Ρ‚Π°ΠΊΠΈΠΌΠΈ достоинствами скриптовых языков, ΠΊΠ°ΠΊ простота написания ΠΊΠΎΠ΄Π°, высокая ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ ошибок. Код ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° распространяСтся ΠΏΠΎΠ΄ Π»ΠΈΡ†Π΅Π½Π·ΠΈΠ΅ΠΉ BSD.

Бинтаксис Go основан Π½Π° ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡Π½Ρ‹Ρ… элСмСнтах языка Π‘ΠΈ с ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ заимствованиями ΠΈΠ· языка ΠžΠ±Π΅Ρ€ΠΎΠ½. Π―Π·Ρ‹ΠΊ достаточно Π»Π°ΠΊΠΎΠ½ΠΈΡ‡Π΅Π½, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΊΠΎΠ΄ Π»Π΅Π³ΠΊΠΎ читаСтся ΠΈ воспринимаСтся. Код Π½Π° языкС Go компилируСтся Π² обособлСнныС Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ исполняСмыС Ρ„Π°ΠΉΠ»Ρ‹, выполняСмыС Π½Π°Ρ‚ΠΈΠ²Π½ΠΎ, Π±Π΅Π· использования Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ (ΠΌΠΎΠ΄ΡƒΠ»ΠΈ профилирования, ΠΎΡ‚Π»Π°Π΄ΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ подсистСмы выявлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π½Π° этапС выполнСния ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ runtime-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²), Ρ‡Ρ‚ΠΎ позволяСт Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, сопоставимой с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ Π½Π° языкС Π‘ΠΈ.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ разрабатываСтся с оглядкой Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° многоядСрных систСмах. НапримСр, Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ срСдства для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Ρ… вычислСний ΠΈ взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎ выполняСмыми ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ. Π―Π·Ρ‹ΠΊ Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт встроСнныС срСдства Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ обСспСчиваСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования сборщика мусора.

Π‘Ρ€Π΅Π΄ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π² Π½ΠΎΠ²ΠΎΠΌ выпускС:

  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° полная ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΠΎΠ±ΠΎΠ±Ρ‰Ρ‘Π½Π½Ρ‹Ρ… псСводонимов Ρ‚ΠΈΠΏΠΎΠ² (generic type alias) β€” псСвдоним Ρ‚ΠΈΠΏΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, ΠΊΠ°ΠΊ ΠΈ Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ опрСдСляСмый Ρ‚ΠΈΠΏ (ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ псСвдонима Ρ‚ΠΈΠΏΠ° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ допускаСтся ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‚ΠΈΠΏΠ°). type set[P comparable] = map[P]bool
  • ВнСсСны ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π² runtime, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΠ²Π΅Π»ΠΈ ΠΊ сниТСнию Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π½Π° процСссор Π½Π° 2-3% ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… тСстов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π‘Ρ€Π΅Π΄ΠΈ внСсённых ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ: новая встроСнная рСализация ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Β«mapΒ», основанная Π½Π° использовании Ρ…ΡΡˆ-Ρ‚Π°Π±Π»ΠΈΡ† Swiss Table; ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΠ΅ эффСктивности использования памяти ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ ΠΌΠ΅Π»ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²; новая рСализация mutex, встроСнная Π² runtime.
  • Π’ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Β«goΒ» для Go-ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ отслСТивания исполняСмых зависимостСй (Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… инструмСнтов, написанных Π½Π° языкС Go ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ модуля, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, linter-ΠΎΠ² ΠΈΠ»ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ для форматирования ΠΊΠΎΠ΄Π°). ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ Π² Ρ„Π°ΠΉΠ»Π΅ go.mod производится Ρ‡Π΅Ρ€Π΅Π· Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Ρƒ Β«toolΒ», для добавлСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π² Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Β«go get -toolΒ» (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Β«go get -tool golang.org/x/tools/cmd/stringerΒ»). Для запуска ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π΅ Β«toolΒ», Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Β«go tool имя_ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹Β».
  • Π’ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Β«go buildΒ» ΠΈ Β«go installΒ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° опция Β«-jsonΒ» для Π²Ρ‹Π²ΠΎΠ΄Π° Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° пСрСмСнная окруТСния GOAUTH для задания ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для извлСчСния ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½.
  • Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ Β«go vetΒ» Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½ΠΎΠ²Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ тСстов (test analyzer), Π²Ρ‹ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Π΅ ошибки ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ тСстов, fuzzing-инструмСнтов, ΡƒΡ‚ΠΈΠ»ΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
  • Π’ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², ΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π½Ρ‹Ρ… Π² стандартС бСзопасности FIPS 140-3.
  • Π’ ΠΏΠ°ΠΊΠ΅Ρ‚ testing Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΌΠ΅Ρ‚ΠΎΠ΄ B.Loop для выполнСния тСстов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Β«for b.Loop() { … }Β» вмСсто ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² позволяСт ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ компилятором ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π΅Π»Π° Ρ†ΠΈΠΊΠ»Π° ΠΈ вынСсти ΠΈΠ· Ρ†ΠΈΠΊΠ»Π° стадии настройки ΠΈ очистки тСста.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ‚ΠΈΠΏ os.Root, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмой Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ.
  • Π’ runtime Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ Ρ„ΠΈΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ runtime.AddCleanup, Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΈΠΉ ΠΈ эффСктивный Ρ‡Π΅ΠΌ runtime.SetFinalizer.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ weak c Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ слабых ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π²Π»Π°Π΄Π΅ΡŽΡ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π½Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ счётчик ссылок ΠΈ Π½Π΅ ΠΏΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ освобоТдСнию ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹: crypto/mlkem с Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ°Π»Π³ΠΎΡ€Ρ‚ΠΈΠΌΠΎΠ² ML-KEM-768 ΠΈ ML-KEM-1024 (Kyber), стойких для ΠΏΠΎΠ΄Π±ΠΎΡ€Π° Π½Π° ΠΊΠ²Π°Π½Ρ‚ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅; crypto/hkdf c Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ формирования ΠΊΠ»ΡŽΡ‡Π° Π½Π° Π±Π°Π·Π΅ HMAC (RFC 5869); crypto/pbkdf2 c Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ формирования ΠΊΠ»ΡŽΡ‡Π° Π½Π° Π±Π°Π·Π΅ пароля (PBKDF2, RFC 8018); crypto/sha3 c Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Ρ…ΡΡˆΠ΅ΠΉ SHA-3.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°ΠΊΠ΅Ρ‚ testing/synctest с функциями для тСстирования многопоточности.
  • Π£Π»ΡƒΡ‡ΡˆΠ΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° WebAssembly. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сборки Go-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° WASI (WebAssembly System Interface). Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° go:wasmexport для экспорта Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ для использования Π² WebAssembly.
  • Π’ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρƒ objdump Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° дизассСмблирования для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) ΠΈ S390X (GOARCH=s390x).

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ