ΠŸΡƒΡΠΊΠ°Π½Π΅ Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Go 1.18

ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π΅Π½Π° Π΅ вСрсията Π½Π° Π΅Π·ΠΈΠΊΠ° Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ Go 1.18, ΠΊΠΎΠΉΡ‚ΠΎ сС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π° ΠΎΡ‚ Google с участиСто Π½Π° общността ΠΊΠ°Ρ‚ΠΎ Ρ…ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΠ΅Ρ‚ΠΎ ΡΡŠΡ‡Π΅Ρ‚Π°Π²Π° високата производитСлност Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½ΠΈΡ‚Π΅ Π΅Π·ΠΈΡ†ΠΈ с Ρ‚Π°ΠΊΠΈΠ²Π° прСдимства Π½Π° скриптовитС Π΅Π·ΠΈΡ†ΠΈ ΠΊΠ°Ρ‚ΠΎ Π»Π΅ΠΊΠΎΡ‚Π° Π½Π° писанС Π½Π° ΠΊΠΎΠ΄, Π±ΡŠΡ€Π·ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ Π³Ρ€Π΅ΡˆΠΊΠΈ. ΠšΠΎΠ΄ΡŠΡ‚ Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° сС разпространява ΠΏΠΎΠ΄ BSD Π»ΠΈΡ†Π΅Π½Π·.

Π‘ΠΈΠ½Ρ‚Π°ΠΊΡΠΈΡΡŠΡ‚ Π½Π° Go сС основава Π½Π° ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈΡ‚Π΅ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° Π΅Π·ΠΈΠΊΠ° C с някои Π·Π°Π΅ΠΌΠΊΠΈ ΠΎΡ‚ Π΅Π·ΠΈΠΊΠ° Python. Π•Π·ΠΈΠΊΡŠΡ‚ Π΅ доста ΠΊΡ€Π°Ρ‚ΡŠΠΊ, Π½ΠΎ ΠΊΠΎΠ΄ΡŠΡ‚ Π΅ лСсСн Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΈ Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅. Go ΠΊΠΎΠ΄ΡŠΡ‚ сС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π° Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Π΄Π²ΠΎΠΈΡ‡Π½ΠΈ изпълними Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚ СстСствСно Π±Π΅Π· ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»Π½Π° машина (ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€Π°Π½Π΅, отстраняванС Π½Π° Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ подсистСми Π·Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС са ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈ ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ ΠΏΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС), ΠΊΠΎΠ΅Ρ‚ΠΎ позволява постиганС Π½Π° производитСлност, сравнима с C ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ‚Π΅.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π΅Π½ с ΠΏΠΎΠ³Π»Π΅Π΄ Π²ΡŠΡ€Ρ…Ρƒ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΡ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΈ Π΅Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π°Ρ‚Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° многоядрСни систСми, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»Π½ΠΎ осигуряванС Π½Π° срСдства, Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π·Π° ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΈ изчислСния ΠΈ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΠ°Ρ€Π°Π»Π΅Π»Π½ΠΎ изпълнявани ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ. Π•Π·ΠΈΠΊΡŠΡ‚ ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° осигурява Π²Π³Ρ€Π°Π΄Π΅Π½Π° Π·Π°Ρ‰ΠΈΡ‚Π° срСщу ΠΏΡ€Π΅Π²ΠΈΡˆΠ°Π²Π°Π½Π΅ Π½Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ‚Π΅ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΏΠ°ΠΌΠ΅Ρ‚ ΠΈ прСдоставя Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ.

Новата вСрсия добавя ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ (generics), с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° ΠΊΠΎΠΈΡ‚ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡŠΡ‚ ΠΌΠΎΠΆΠ΅ Π΄Π° Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π° ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π΄Π° работят с няколко Ρ‚ΠΈΠΏΠ° Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ. Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° Π΅ възмоТно Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ интСрфСйси Π·Π° създаванС Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±Ρ…Π²Π°Ρ‰Π°Ρ‚ мноТСство Ρ‚ΠΈΠΏΠΎΠ²Π΅ Π΄Π°Π½Π½ΠΈ. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° Π³Π΅Π½Π΅Ρ€ΠΈΡ‡Π½ΠΈ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΈ Π΅ Π²Π½Π΅Π΄Ρ€Π΅Π½Π°, Π±Π΅Π· Π΄Π° сС Π½Π°Ρ€ΡƒΡˆΠ°Π²Π° ΠΎΠ±Ρ€Π°Ρ‚Π½Π°Ρ‚Π° ΡΡŠΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ със ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ ΠΊΠΎΠ΄. // Π‘ΡƒΠΌΠΈΡ€Π°Π½Π΅ Π½Π° Π·Π°Π΄Π°Π΄Π΅Π½ΠΈ стойности, Ρ€Π°Π±ΠΎΡ‚ΠΈ Π·Π° Ρ‚ΠΈΠΏΠΎΠ²Π΅ int64 ΠΈ float64 func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Π”Ρ€ΡƒΠ³Π° опция с ΠΎΠ±Ρ‰Π° дСфиниция Π½Π° Ρ‚ΠΈΠΏ: type Number interface { int64 | float64 } func SumNumbers[K comparable, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Π”Ρ€ΡƒΠ³ΠΈ подобрСния:

  • ΠŸΠΎΠΌΠΎΡ‰Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π·Π° тСстванС Π½Π° Ρ„ΡŠΠ·ΠΈΠ½Π³ ΠΊΠΎΠ΄ са ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€Π°Π½ΠΈ Π² стандартния Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ инструмСнти. По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° fuzzing тСстванС сС Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π° ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚ всички възмоТни ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»Π½ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΎΡ‚ Π²Ρ…ΠΎΠ΄Π½ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈ сС записват възмоТни Π³Ρ€Π΅ΡˆΠΊΠΈ ΠΏΡ€ΠΈ тяхната ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°. Ако Π΄Π°Π΄Π΅Π½Π° послСдоватСлност сС сринС ΠΈΠ»ΠΈ Π½Π΅ отговаря Π½Π° очаквания ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€, Ρ‚ΠΎΠ²Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ вСроятно Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° Π³Ρ€Π΅ΡˆΠΊΠ° ΠΈΠ»ΠΈ уязвимост.
  • Π”ΠΎΠ±Π°Π²Π΅Π½Π° Π΅ ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π½ΠΈ пространства, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ Π½Π° мноТСство ΠΌΠΎΠ΄ΡƒΠ»ΠΈ навСднъТ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΅Π΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π΄Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Ρ‚Π΅ ΠΈ ΠΈΠ·ΠΏΡŠΠ»Π½ΡΠ²Π°Ρ‚Π΅ ΠΊΠΎΠ΄ Π² мноТСство ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.
  • НаправСни са Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π½ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π° производитСлността Π·Π° систСми, Π±Π°Π·ΠΈΡ€Π°Π½ΠΈ Π½Π° процСсори Apple M1, ARM64 ΠΈ PowerPC64. Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚Ρ‚Π° Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° рСгистри вмСсто стСка Π·Π° ΠΏΡ€Π΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚Π°. ΠŸΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½ΠΎ Π²Π³Ρ€Π°Π΄Π΅Π½ΠΎ Ρ€Π°Π·Π³Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° Ρ†ΠΈΠΊΠ»ΠΈ ΠΎΡ‚ ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π°. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° Ρ‚ΠΈΠΏΠ° Π² ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° Π΅ напълно ΠΏΡ€Π΅Ρ€Π°Π±ΠΎΡ‚Π΅Π½Π°. Някои тСстовС ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ‚ 20% ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° производитСлността Π½Π° ΠΊΠΎΠ΄Π° Π² сравнСниС с ΠΏΡ€Π΅Π΄ΠΈΡˆΠ½Π°Ρ‚Π° вСрсия, Π½ΠΎ самата компилация ΠΎΡ‚Π½Π΅ΠΌΠ° ΠΎΠΊΠΎΠ»ΠΎ 15% ΠΏΠΎΠ²Π΅Ρ‡Π΅ Π²Ρ€Π΅ΠΌΠ΅.
  • По Π²Ρ€Π΅ΠΌΠ΅ Π½Π° изпълнСниС Π΅ повишСна СфСктивността Π½Π° Π²Ρ€ΡŠΡ‰Π°Π½Π΅ Π½Π° освободСната ΠΏΠ°ΠΌΠ΅Ρ‚ към ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ‚Π° систСма ΠΈ Π΅ ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚Π° Π½Π° ΡΡŠΠ±ΠΈΡ€Π°Ρ‡Π° Π½Π° ΠΎΡ‚ΠΏΠ°Π΄ΡŠΡ†ΠΈ, Ρ‡ΠΈΠ΅Ρ‚ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π΅ станало ΠΏΠΎ-ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄ΠΈΠΌΠΎ.
  • Към стандартната Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° са Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π½ΠΎΠ²ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΈ net/netip ΠΈ debug/buildinfo. ΠŸΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° TLS 1.0 ΠΈ 1.1 Π΅ Π΄Π΅Π°ΠΊΡ‚ΠΈΠ²ΠΈΡ€Π°Π½Π° ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ Π² клиСнтския ΠΊΠΎΠ΄. ΠœΠΎΠ΄ΡƒΠ»ΡŠΡ‚ crypto/x509 Π΅ спрял Π΄Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π²Π° сСртификати, подписани с ΠΏΠΎΠΌΠΎΡ‰Ρ‚Π° Π½Π° SHA-1 Ρ…Π΅Ρˆ.
  • Π˜Π·ΠΈΡΠΊΠ²Π°Π½ΠΈΡΡ‚Π° Π·Π° срСдата Π² Linux бяха повишСни; Π·Π° Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅, Π²Π΅Ρ‡Π΅ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚Π΅ ядро ​​на Linux ΠΏΠΎΠ½Π΅ вСрсия 2.6.32. Π’ слСдващото ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ сС ΠΎΡ‡Π°ΠΊΠ²Π°Ρ‚ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π·Π° FreeBSD (ΠΏΠΎΠ΄Π΄Ρ€ΡŠΠΆΠΊΠ°Ρ‚Π° Π·Π° ΠΊΠ»ΠΎΠ½Π° FreeBSD 11.x Ρ‰Π΅ бъдС прСустановСна) ΠΈ ΠΏΠΎΠ½Π΅ FreeBSD 12.2 Ρ‰Π΅ сС изисква Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ.

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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€