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

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

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

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

Основні нововведення, представлені у випуску Go 1.14:

  • Нова система модулів у команді «go» оголошена готовою для повсюдного використання, включена за умовчанням та рекомендована для керування залежностями замість GOPATH. Нова система модулів відрізняється інтегрованою підтримкою версіонування, засобами доставки пакетів та покращеною системою керування залежностями. За допомогою модулів розробники більше не прив'язані до роботи всередині дерева GOPATH, можуть явно визначати залежності з урахуванням версій та створювати повторювані зборки.
  • Додана підтримка вбудовування інтерфейсів з набором методів, що перекривається. Методи із вбудованого інтерфейсу тепер можуть мати ті ж імена та однакові сигнатури, що й у методів у вже присутніх інтерфейсах. Очевидно оголошені методи, як і раніше, залишаються унікальними.
  • Збільшено продуктивність виразу «defer», використання якого тепер майже не відрізняється за швидкістю від прямого виклику відкладеної функції, що дозволяє застосовувати відстрочений запуск функції в чутливому до продуктивності коді.
  • Забезпечено асинхронне витіснення співпрограм (goroutine) - цикли, що не містять виклику функцій, тепер потенційно не можуть призвести до взаємного блокування планувальника або затримки початку складання сміття.
  • Підвищено ефективність системи розподілу сторінок пам'яті, у якій тепер спостерігається значно менше конфліктів блокувань у конфігураціях з більшими значеннями GOMAXPROCS. Як результат зменшилися затримки та підвищилася пропускна здатність при паралельному інтенсивному розподілі великих блоків пам'яті.
  • Оптимізовано блокування та знижено кількість перемикань контексту під час роботи внутрішніх таймерів, що використовуються у функціях time.After, time.Tick, net.Conn.SetDeadline.
  • У команді go за замовчуванням активовано прапор «-mod=vendor», якщо в корені є каталог vendor, призначений для постачання зовнішніх залежностей, прив'язаних до певного постачальника. Додано окремий прапор "-mod=mod" для завантаження модулів з кешу модулів, а не з каталогу "vendor". Якщо файл go.mod доступний лише для читання за умовчанням, забезпечене виставлення прапора «-mod=readonly», якщо відсутній верхній каталог «vendor». Доданий прапор "-modfile=file" для завдання альтернативного файлу go.mod замість наявного в кореневому каталозі модуля.
  • Додана змінна оточення GOINSECURE, під час встановлення якої команда go не вимагає використання HTTPS і пропускає перевірку сертифікатів під час завантаження модулів безпосередньо.
  • У компілятор доданий увімкнений за промовчанням прапор «-d=checkptr» для перевірки коду на відповідність правилам безпечного використання unsafe.Pointer.
  • У постачання включено новий пакет hash/maphash з некриптографічними хеш-функціями для створення хеш-таблиць для довільних байтових послідовностей або рядків.
  • Додана експериментальна підтримка 64-розрядної платформи RISC-V у Linux.
  • Додана підтримка FreeBSD на 64-розрядних системах ARM.

Джерело: opennet.ru

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