Назад
Інтерактивний тур Go 1.27: узагальнені методи та постквантові підписи
SiTech Team2 წთ. საკითხავი

Інтерактивний тур Go 1.27: узагальнені методи та постквантові підписи

VictoriaMetrics опублікувала практичний тур Go 1.27: головна новинка — узагальнені методи, а також спеціалізоване за розміром виділення пам'яті, ML-DSA, пакет uuid і JSON v2 за замовчуванням.

Реліз Go 1.27 наближається, і VictoriaMetrics опублікувала інтерактивний тур змінами — з прикладами, які можна запустити, для кожної функції. Стаття, написана Хесусом Еспіно й датована 31 липня, продовжує серію, започатковану Антоном Жияновим, який писав тур для кожного релізу від Go 1.22 до Go 1.26 і вирішив зупинитися; VictoriaMetrics каже, що переймає естафету.

Узагальнені методи — головна тема релізу

Головна зміна стосується системи типів: оголошення методу тепер може мати власні параметри типу, незалежні від типу отримувача, тож узагальнена операція над типом може жити як метод цього типу, а не як функція рівня пакета. У прикладі туру контейнер Box отримує метод Map, який перетворює Box з int на Box зі string. Одне обмеження залишається: інтерфейси досі не можуть оголошувати методи з параметрами типу, і узагальненим методом не можна задовольнити інтерфейс. Разом із цим приходять дві менші ергономічні зміни: ключем у літералі структури тепер може бути будь-який чинний селектор поля — тобто просунуте поле з вбудованої структури можна задати напряму — а виведення типів функцій поширено на перетворення та складені літерали.

Продуктивність: виділення пам'яті, SIMD і компілятор

Компілятор тепер генерує виклики спеціалізованих за розміром процедур виділення пам'яті, що знижує вартість дрібних виділень (менш ніж 80 байтів) до 30%. Очікуваний загальний виграш — близько 1% у програмах, насичених виділеннями, ціною приблизно 60 КБ додаткового розміру бінарника; вимкнути це можна прапорцем GOEXPERIMENT. Експериментальний портативний пакет SIMD (GOEXPERIMENT=simd) надає типи, незалежні від ширини вектора, і стандартна бібліотека вже ним користується: реалізація мапи на Swiss Table переписала свої хеш-функції на simd-інтринсиках.

Безпека та стандартна бібліотека

Постквантові підписи з'являються у вигляді crypto/mldsa: ML-DSA згідно зі специфікацією FIPS 204 у трьох наборах параметрів, із застосуванням у crypto/x509 і схемах підпису TLS 1.3. Стандартна бібліотека отримує пакет uuid за RFC 9562, де NewV7 створює впорядковані за часом значення, зручні для ключів баз даних. Давно очікуваний encoding/json/v2 виходить з експерименту: він доступний без прапорця збірки, а класичний encoding/json тепер під капотом спирається на реалізацію v2, з можливістю повернути стару поведінку через GOEXPERIMENT;strings і bytes отримують CutLast, а підтримка Unicode стрибає з версії 15 до 17.

Інструменти та менш помітна робота

Серед змін в інструментах: go test тепер за замовчуванням запускає перевірку stdversion vet, go doc може отримати документацію для конкретної версії модуля, а go fix отримує нові модернізатори. Тур також підсвічує те, що легко пропустити: HTTP/2 нарешті є справжнім пакетом, а не згенерованим файлом на 12 226 рядків; каркас HTTP/3 додано в неекспортованому вигляді, а несанкціонованеа несанкціоноване використання //go:linkname ускладнилося.

SSiTech

SiTech — веброзробка з підтримкою AI

Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.