ProIT: медіа для профі в IT
2 хв

Go 1.23 надходить зі швидшим часом створення PGO

author avatar ProIT NEWS

Компанія Google випустила Go 1.23 — останню версію своєї популярної мови з відкритим кодом для системного програмування.

Оновлення скорочує час збірки при використанні оптимізації, керованої профілем (PGO), і покращує продуктивність PGO на архітектурах 386 та amd64. Про це повідомляє Info World.

Go 1.23 можна завантажити для багатьох платформ, включно з Linux, macOS і Windows, із go.dev.

До Go 1.23 включно великі проєкти могли спостерігати збільшення часу збірки на понад 100% при увімкненні PGO. У Go 1.23 накладні витрати повинні становити одиниці відсотків, заявили в Google.

Для архітектур 386 та amd64 компілятор використовуватиме певну інформацію від PGO для вирівнювання деяких гарячих блоків у циклах з метою покращення продуктивності.

Також компілятор зменшує використання стека для застосунків. У Go 1.23 значно скорочено накладні витрати часу збірки при побудові з оптимізацією на основі профілювання.

Згідно з нотатками до випуску, компілятор у Go 1.23 також зменшує використання стека для Go-застосунків. Це досягається шляхом перекриття слотів кадрів стека локальних змінних у непересічних областях функції.

У разі зміни мови експеримент «range-over-func» із Go 1.22 стає частиною мови у Go 1.23. Тепер у конструкції «range» у циклі «for-range» можна використовувати ітераторні функції кількох типів як вирази для діапазону.

Також Go 1.23 попередньо підтримує використання узагальнених типів для псевдонімів.

Щодо покращення інструментів, то інструментарій у Go 1.23 може збирати статистику використання даних і розподілу. Такі дії допомагають команді Go зрозуміти, як використовується інструментарій і наскільки добре він працює. Це називається Go Telemetry.

Інші нововведення в Go 1.23:

  • Додано експериментальну підтримку OpenBSD на 64-бітній архітектурі RISC-V.
  • Для стандартної бібліотеки змінилися реалізації time.Timerта time.Ticker.Таймери та тікери, на які більше не посилається програма, стають відразу доступними для збору сміття, навіть якщо їх методи Stop не були викликані. Також канал таймера, пов’язаний із Timer абоTicker, тепер є небуферизованим із ємністю 0.
  • Для стандартної бібліотеки новий пакет unique пропонує засоби для канонізації значень, такі як «інтернування». Новий пакет iter надає базові функції для роботи з користувацькими ітераторами. Пакет slicesдодає кілька функцій, які працюють з ітераторами.
  • Інструмент трасування тепер краще переносить частково пошкоджені трасування, намагаючись відновити будь-які дані трасування, якщо це можливо. Особливо корисним це вважається під час перегляду трасування, зібраного під час збою програми.
  • Для рантайму відстеження помилок, що друкується після незробленої паніки або іншої фатальної помилки, тепер другий і наступні рядки помилки відступають на один таб, щоб його можна було чітко відрізнити від стеку першої горутини.
  • Для команди go новий прапор go env-changed змушує команду друкувати лише ті налаштування, ефективне значення яких відрізняється від значення за замовчуванням, що було б отримано в порожньому середовищі без попереднього використання прапора -w.
  • Лінкер тепер забороняє використання директиви //go:linknameдля посилання на внутрішні символи у стандартній бібліотеці, не позначені //go:linkname у їхніх визначеннях. Лінкер також забороняє посилання на ці символи з асемблерного коду. Водночас деякі терміни можуть потребувати додаткового контексту або уточнення залежно від конкретного використання.

Читайте також на нашому сайті: Genkit for Go від Google забезпечує розробку ШІ-застосунків мовою Go.

Підписуйтеся на ProIT у Telegram, щоб не пропустити жодної публікації!

Приєднатися до company logo
Продовжуючи, ти погоджуєшся з умовами Публічної оферти та Політикою конфіденційності.