Verëffentlechung vun der Go Programméiersprooch 1.18

D'Verëffentlechung vun der Go 1.18 Programméierungssprooch gëtt presentéiert, déi vu Google mat der Participatioun vun der Gemeinschaft als Hybridléisung entwéckelt gëtt, déi d'High Performance vu kompiléierte Sprooche kombinéiert mat sou Virdeeler vu Skriptsproochen wéi Einfachheet vum Code ze schreiwen , Vitesse vun Entwécklung a Feeler Schutz. De Projet Code gëtt ënner der BSD Lizenz verdeelt.

Dem Go seng Syntax baséiert op vertraute Elementer vun der C Sprooch mat e puer Prêten aus der Python Sprooch. D'Sprooch ass zimmlech präzis, awer de Code ass einfach ze liesen a verstoen. Go Code gëtt a Stand-alone binär ausführbar Dateien zesummegesat, déi natiirlech lafen ouni eng virtuell Maschinn ze benotzen (Profiling, Debugging Moduler, an aner Runtime Problem Detectioun Subsystemer sinn als Runtime Komponenten integréiert), wat d'Performance vergläichbar mat C Programmer erlaabt.

De Projet ass ufanks entwéckelt mat engem Auge fir Multi-threaded Programméierung an effizient Operatioun op Multi-Core Systemer, dorënner d'Bedreiwer-Niveau Mëttele fir d'Organisatioun vun parallele Informatik an Interaktioun tëscht parallel ausgefouerten Methoden z'organiséieren. D'Sprooch bitt och e gebaute Schutz géint iwwerallokéiert Erënnerungsblocken a bitt d'Fäegkeet fir e Gerempels ze benotzen.

В новой версии добавлена поддержка обобщённых функций и типов (дженериков), при помощи которых разработчик может определить и использовать функции, предназначенные для работы сразу с несколькими типами. Также предоставлена возможность использования интерфейсов для создания комбинированных типов, охватывающих несколько типов данных. Поддержка дженериков реализована без нарушения обратной совместимости с существующим кодом. // Суммирование значений набора, работающее для типов int64 и float64 func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Другой вариант с обобщённым определением типа: type Number interface { int64 | float64 } func SumNumbers[K comparable, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Aner Verbesserungen:

  • В штатный инструментарий интегрированы утилиты для fuzzing-тестирования кода. В ходе fuzzing-тестировании осуществляется генерация потока всевозможных случайных комбинаций входных данных и фиксация возможных сбоев в процессе их обработки. Если какая-то последовательность приводит к краху или не соответствует ожидаемой реакции, то такое поведение с высокой вероятностью свидетельствует об ошибке или уязвимости.
  • Добавлена поддержка могомодульных рабочих пространств, позволяющих выполнять команды сразу для нескольких модулей, что позволяет одновременно собирать и запускать код в нескольких модулях.
  • Проведена значительная оптимизация производительности для систем на базе процессоров Apple M1, ARM64 и PowerPC64. Включена возможность использования регистров вместо стека для передачи аргументов в функции и возврата результата. Улучшено inline-развёртывание циклов компилятором. Полностью переделана проверка типов в компиляторе. В отдельных тестах по сравнению с прошлым выпуском отмечается повышение производительности кода на 20%, но сама компиляция стала выполняться примерно на 15% дольше.
  • В runtime повышена эффективность возвращения освобождённой памяти операционной системе и улучшена работа сборщика мусора, поведение которого стало более предсказуемым.
  • В стандартную библиотеку добавлены новые пакеты net/netip и debug/buildinfo. В клиентском коде по умолчанию отключена поддержка TLS 1.0 и 1.1. В модуле crypto/x509 прекращена обработка сертификатов с подписью на базе хэша SHA-1.
  • Подняты требования к окружению в Linux, для работы теперь необходимо наличие ядра Linux как минимум версии 2.6.32. В следующем выпуске аналогичные изменения ожидаются для FreeBSD (будет прекращена поддержка ветки FreeBSD 11.x) и для рабты потребуется наличие как минимум FreeBSD 12.2.

Source: opennet.ru

Setzt e Commentaire