Реліз мови програмування Go 1.16

Представлений реліз мови програмування Go 1.16, який розвивається Google за участю спільноти як гібридне рішення, що поєднує високу продуктивність компілюваних мов з такими перевагами скриптових мов, як легкість написання коду, швидкість розробки та захищеність від помилок. Код проекту розповсюджується під ліцензією BSD.

Синтаксис Go заснований на звичних елементах мови Сі з окремими запозиченнями з Python. Мова досить лаконічна, але при цьому код легко читається та сприймається. Код мовою Go компілюється в відокремлені бінарні виконувані файли, що виконуються без використання віртуальної машини (модулі профілювання, налагодження та інші підсистеми виявлення проблем на етапі виконання інтегруються у вигляді runtime-компонентів), що дозволяє домогтися продуктивності, порівнянної з програмами мовою Сі.

Проект спочатку розробляється з огляду на багатопоточне програмування та ефективну роботу на багатоядерних системах, у тому числі надаючи реалізовані на рівні операторів кошти для організації паралельних обчислень та взаємодії між методами, що виконуються паралельно. Мова також надає вбудовані засоби захисту від виходу за допустимі області виділених блоків пам'яті та забезпечує можливість використання збирача сміття.

Основні нововведення, представлені у випуску 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 (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

Додати коментар або відгук