αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž—αžΆαžŸαžΆαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Go 1.16

αž€αžΆαžšαž…αŸαž‰αž•αŸ’αžŸαžΆαž™αž—αžΆαžŸαžΆαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈ Go 1.16 αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž αžΆαž‰ αžŠαŸ‚αž›αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ„αž™ Google αžŠαŸ„αž™αž˜αžΆαž“αž€αžΆαžšαž…αžΌαž›αžšαž½αž˜αž–αžΈαžŸαž αž‚αž˜αž“αŸαž‡αžΆαžŠαŸ†αžŽαŸ„αŸ‡αžŸαŸ’αžšαžΆαž™αž€αžΌαž“αž€αžΆαžαŸ‹αžŠαŸ‚αž›αžšαž½αž˜αž”αž‰αŸ’αž…αžΌαž›αž‚αŸ’αž“αžΆαž“αžΌαžœαžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαžαŸ’αž–αžŸαŸ‹αž“αŸƒαž—αžΆαžŸαžΆαžŠαŸ‚αž›αž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž‚αž»αžŽαžŸαž˜αŸ’αž”αžαŸ’αžαž·αž“αŸƒαž—αžΆαžŸαžΆαžŸαŸ’αž‚αŸ’αžšαžΈαž”αžŠαžΌαž…αž‡αžΆαž—αžΆαž–αž„αžΆαž™αžŸαŸ’αžšαž½αž›αž“αŸƒαž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αžΌαžŠαŸ” αž›αŸ’αž”αžΏαž“αž“αŸƒαž€αžΆαžšαž’αž—αž·αžœαžŒαŸ’αžαž“αŸ αž“αž·αž„αž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαž€αŸ†αž αž»αžŸαŸ” αž›αŸαžαž€αžΌαžŠαž‚αž˜αŸ’αžšαŸ„αž„αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αŸ‚αž€αž…αžΆαž™αž€αŸ’αžšαŸ„αž˜αž’αžΆαž‡αŸ’αž‰αžΆαž”αŸαžŽαŸ’αžŽ BSD αŸ”

αžœαžΆαž€αŸ’αž™αžŸαž˜αŸ’αž–αŸαž“αŸ’αž’αžšαž”αžŸαŸ‹ Go αž‚αžΊαž•αŸ’αž’αŸ‚αž€αž›αžΎαž’αžΆαžαž»αžŠαŸ‚αž›αž’αŸ’αž›αžΆαž”αŸ‹αžŸαŸ’αž‚αžΆαž›αŸ‹αž“αŸƒαž—αžΆαžŸαžΆ C αž‡αžΆαž˜αž½αž™αž“αžΉαž„αž€αžΆαžšαžαŸ’αž…αžΈαž˜αž½αž™αž…αŸ†αž“αž½αž“αž–αžΈαž—αžΆαžŸαžΆ Python αŸ” αž—αžΆαžŸαžΆαž‚αžΊαž˜αžΆαž“αž›αž€αŸ’αžαžŽαŸˆαžŸαž„αŸ’αžαŸαž” αž”αŸ‰αž»αž“αŸ’αžαŸ‚αž€αžΌαžŠαž‚αžΊαž„αžΆαž™αžŸαŸ’αžšαž½αž›αž’αžΆαž“ αž“αž·αž„αž™αž›αŸ‹αŸ” αž€αžΌαžŠ Go αžαŸ’αžšαžΌαžœαž”αžΆαž“αž…αž„αž€αŸ’αžšαž„αž‡αžΆαž―αž€αžŸαžΆαžšαžŠαŸ‚αž›αž’αžΆαž…αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αžΆαž“αžαžΆαž˜αž”αŸ’αžšαž–αŸαž“αŸ’αž’αž‚αŸ„αž›αž–αžΈαžšαžŠαŸ‚αž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž–αžΈαžŠαžΎαž˜αžŠαŸ„αž™αž˜αž·αž“αž”αŸ’αžšαžΎαž˜αŸ‰αžΆαžŸαŸŠαžΈαž“αž“αž·αž˜αŸ’αž˜αž·αž (αž‘αž˜αŸ’αžšαž„αŸ‹ αž˜αŸ‰αžΌαžŒαž»αž›αž”αŸ†αž”αžΆαžαŸ‹αž€αŸ†αž αž»αžŸ αž“αž·αž„αž”αŸ’αžšαž–αŸαž“αŸ’αž’αžšαž„αžŸαŸ’αžœαŸ‚αž„αžšαž€αž”αž‰αŸ’αž αžΆαž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž•αŸ’αžŸαŸαž„αž‘αŸ€αžαžαŸ’αžšαžΌαžœαž”αžΆαž“αžŠαžΆαž€αŸ‹αž”αž‰αŸ’αž…αžΌαž›αž‡αžΆαžŸαž˜αžΆαžŸαž’αžΆαžαž»αž–αŸαž›αžŠαŸ†αžŽαžΎαžšαž€αžΆαžš) αžŠαŸ‚αž›αž’αž“αž»αž‰αŸ’αž‰αžΆαžαž±αŸ’αž™αž˜αžΆαž“αžŠαŸ†αžŽαžΎαžšαž€αžΆαžšαž”αŸ’αžšαŸ€αž”αž’αŸ€αž”αž‘αŸ…αž“αžΉαž„αž€αž˜αŸ’αž˜αžœαž·αž’αžΈ C αŸ”

αž‚αž˜αŸ’αžšαŸ„αž„αž“αŸαŸ‡αžαŸ’αžšαžΌαžœαž”αžΆαž“αž”αž„αŸ’αž€αžΎαžαž‘αžΎαž„αžŠαŸ†αž”αžΌαž„αžŠαŸ„αž™αžŸαž˜αŸ’αž›αžΉαž„αž˜αžΎαž›αž€αžΆαžšαžŸαžšαžŸαŸαžšαž€αž˜αŸ’αž˜αžœαž·αž’αžΈαž–αž αž»αžαŸ’αžŸαŸ‚ αž“αž·αž„αž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžΆαžšαž”αŸ’αžšαž€αž”αžŠαŸ„αž™αž”αŸ’αžšαžŸαž·αž‘αŸ’αž’αž—αžΆαž–αž›αžΎαž”αŸ’αžšαž–αŸαž“αŸ’αž’αž–αž αž»αžŸαŸ’αž“αžΌαž› αžšαž½αž˜αž‘αžΆαŸ†αž„αž€αžΆαžšαž•αŸ’αžαž›αŸ‹αž˜αž’αŸ’αž™αŸ„αž”αžΆαž™αž€αž˜αŸ’αžšαž·αžαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž€αžšαžŸαž˜αŸ’αžšαžΆαž”αŸ‹αžšαŸ€αž”αž…αŸ†αž€αžΆαžšαž‚αžŽαž“αžΆαž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž› αž“αž·αž„αž’αž“αŸ’αžαžšαž€αž˜αŸ’αž˜αžšαžœαžΆαž„αžœαž·αž’αžΈαžŸαžΆαžŸαŸ’αžαŸ’αžšαž”αŸ’αžšαžαž·αž”αžαŸ’αžαž·αž”αŸ‰αžΆαžšαŸ‰αžΆαž‘αŸ‚αž›αŸ” αž—αžΆαžŸαžΆαž“αŸαŸ‡αž€αŸαž•αŸ’αžαž›αŸ‹αž“αžΌαžœαž€αžΆαžšαž€αžΆαžšαž–αžΆαžšαžŠαŸ‚αž›αž—αŸ’αž‡αžΆαž”αŸ‹αž˜αž€αž‡αžΆαž˜αž½αž™αž”αŸ’αžšαž†αžΆαŸ†αž„αž“αžΉαž„αž”αŸ’αž›αž»αž€αž’αž„αŸ’αž‚αž…αž„αž…αžΆαŸ†αžŠαŸ‚αž›αž”αŸ‚αž„αž…αŸ‚αž€αž›αžΎαžŸ αž“αž·αž„αž•αŸ’αžαž›αŸ‹αž›αž‘αŸ’αž’αž—αžΆαž–αž”αŸ’αžšαžΎαž”αŸ’αžšαžΆαžŸαŸ‹αž§αž”αž€αžšαžŽαŸαž”αŸ’αžšαž˜αžΌαž›αžŸαŸ†αžšαžΆαž˜αŸ”

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°, прСдставлСнныС Π² выпускС Go 1.16:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠ°ΠΊΠ΅Ρ‚ embed, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ срСдства для встраивания Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ². Для указания Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π½Π° этапС компиляции, прСдоставляСтся новая Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΈΠ²Π° Β«//go:embedΒ». НапримСр, ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π² ΠΊΠΎΠ΄Π΅ коммСнтария Β«//go:embed test.txtΒ» ΠΈ объявлСниС слСдом ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«var f embed.FSΒ» ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ Π² Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π½ΠΈΡŽ Ρ„Π°ΠΉΠ»Π° test.txt ΠΈ возмоТности обращСния ΠΊ Π½Π΅ΠΌΡƒ Ρ‡Π΅Ρ€Π΅Π· дСскриптор Β«fΒ». ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„Π°ΠΉΠ»Ρ‹ с рСсурсами ΠΈΠ»ΠΈ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ значСниями ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для получСния строковой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Β«sΒ» ΠΈΠ· Ρ„Π°ΠΉΠ»Π° version.txt ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ: import _ Β«embedΒ» //go:embed version.txt var s string print(s)
  • По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ трСбуСтся использованиС Π½ΠΎΠ²ΠΎΠΉ систСмы ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ с ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ вСрсионирования, которая ΠΏΡ€ΠΈΡˆΠ»Π° Π½Π° смСну срСдствам управлСния зависимостями Π½Π° основС GOPATH. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ окруТСния GO111MODULE Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выставлСна Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«onΒ» ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈ Ρ€Π΅ΠΆΠΈΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ нСзависимо ΠΎΡ‚ присутствия Ρ„Π°ΠΉΠ»Π° go.mod Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ ΠΈΠ»ΠΈ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅. Π’ Π½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ сборочныС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Β«go buildΒ» ΠΈ Β«go testΒ», Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡŽΡ‚ содСрТимоС go.mod ΠΈ go.sum, Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Β«go installΒ» ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ вСрсии (Β«go install example.com/[αž’αŸŠαžΈαž˜αŸ‚αž›αž€αžΆαžšαž–αžΆαžš]Β»). Для возвращСния старого ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ GO111MODULE Π½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«autoΒ». ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ 96% Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΡƒΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ Π½Π° Π½ΠΎΠ²ΡƒΡŽ систСму ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.
  • ΠŸΡ€ΠΎΠ²Π΅Π΄Π΅Π½Π° оптимизация ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΠ°. Для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ выполняСтся Π½Π° 20-25% быстрСС ΠΈ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½Π° 5-15% мСньшС памяти.
  • Π’ компиляторС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° inline-развёртывания Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ с сокращённым ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Ρ†ΠΈΠΊΠ»ΠΎΠ² Β«forΒ», ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ (method values) ΠΈ конструкциями β€˜type switch’.
  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° систСм Apple, оснащённых Π½ΠΎΠ²Ρ‹ΠΌ ARM-Ρ‡ΠΈΠΏΠΎΠΌ Apple M1. Π”ΠΎΠ±Π°Π²Π»Π΅Π½Ρ‹ ΠΏΠΎΡ€Ρ‚Ρ‹ netbsd/arm64 ΠΈ openbsd/mips64 с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ NetBSD Π½Π° 64-разрядных ARM ΠΈ OpenBSD Π½Π° систСмах MIPS64. Π’ ΠΏΠΎΡ€Ρ‚ linux/riscv64 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° cgo ΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ° Β«-buildmode=pieΒ».
  • ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‰Π΅Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Ρ€Π΅ΠΆΠΈΠΌΠ° компиляции x87 (GO386=387). ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° процСссоров Π±Π΅Π· инструкций SSE2 Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ доступна Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ Β«GO386=softfloatΒ».

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π½Π°Ρ‡Π°Π»ΠΎ тСстирования Π±Π΅Ρ‚Π°-выпуска языка Dart 2.12, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ стабилизирован Ρ€Π΅ΠΆΠΈΠΌ бСзопасного использования значСния Β«NullΒ» (null safety), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволят ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ ΠΊΡ€Π°Ρ…ΠΎΠ², Π²Ρ‹Π·Π²Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ°ΠΌΠΈ использования ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΈ выставлСно Π² Β«NullΒ». Π Π΅ΠΆΠΈΠΌ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ значСния, Ссли ΠΈΠΌ явно Π½Π΅ присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null. Π’ Ρ€Π΅ΠΆΠΈΠΌΠ΅ строго ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΡ‹ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ позволяСт компилятору ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ. БоотвСтствиС Ρ‚ΠΈΠΏΠΎΠ² провСряСтся Π½Π° этапС компиляции, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² случаС ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ присвоСния значСния Β«NullΒ» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с Ρ‚ΠΈΠΏΠΎΠΌ, Π½Π΅ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‰ΠΈΠΌ Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ΅ состояниС, Ρ‚Π°ΠΊΠΈΠΌ ΠΊΠ°ΠΊ Β«intΒ», Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° ошибка.

αž”αŸ’αžšαž—αž–: opennet.ru

αž”αž“αŸ’αžαŸ‚αž˜αž˜αžαž·αž™αŸ„αž”αž›αŸ‹