Ire programmandi lingua emissio 1.16

Dimissio linguae programmandi Go 1.16 exhibetur, quae augetur a Google participatione communitatis solutionis hybridis quae componit altam observantiam linguarum exaratarum cum tantis commoda linguarum scriptionis ut otium scribendi codicem. celeritas progressionis et erroris praesidium. In codice exertus licentia BSD distribuitur.

Syntaxum Ite in notis elementis linguae C fundatur cum quibusdam e Pythone linguae mutuatis. Lingua satis brevis est, sed codicem facile est legere et intelligere. Ire codicem in solas binarias exsecutabiles tabulas stantes exaravit quae sine usu virtualis machinae currunt (profiling, debugging moduli, et alia problemata deprehensio subsystema runtim sicut partes runtime integrantur), quae permittit ad faciendum comparandum cum C programs.

Proiectum initio evolvit cum oculo ad programmandi multi- plicandi et efficacem operationem in systemata multi-core, incluso modo operante-gradu comparando ad parallelas computandas et commercium inter methodos parallelos effectos ordinandi. Lingua etiam aedificata praebet in tutela contra memoriae caudices nimis partita et facultatem utendi quisquiliarum collectori praebet.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π²Π°, прСдставлСнныС Π² выпускС 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/[Inscriptio protected]Β»). Для возвращСния старого ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ 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Β», Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Π° ошибка.

Source: opennet.ru