На днях представлен релиз языка программирования Go 1.15. Как известно, изначально это был проект компании Google, который вышел за пределы корпорации и стал развиваться при поддержке сторонних разработчиков. Код проекта распространяется под лицензией BSD.
Достоинств у Go много, о них не раз писали на Хабре. Среди прочих стоит отметить то, что Go изначально разрабатывался в качестве проекта многопоточного программирования с возможностью создания программ и сервисов, способных работать на многоядерных системах. В версии 1.15 появилось немало ожидаемых нововведений.
Полный список новшеств здесь, а основные перечислим ниже:
- Оптимизирована работа компоновщика. Это относится как к общей производительности, так и к сокращению потребления памяти и упрощению сопровождения кода. Результат виден сразу. Так, при тестировании в ОС с использованием исполняемых файлов ELF компоновка типового набора крупных Go-приложений стала выполняться на 20% быстрее. При этом потребление памяти снижается на 30%.
- Разработчики оптимизировали компилятор, так что теперь размер генерируемых исполняемых файлов снизился в среднем на 5%. Главным образом, за счет прекращения использования ряда метаданных для сборщика мусора и удаления неиспользуемых метаданных.
- Runtime оптимизирован в плане распределения мелких объектов на системах с большим числом ядер CPU, одновременно сокращены задержки. При сбоях теперь выводятся значения с числовыми и строковыми типами вместо показа адреса.
- В компиляторе и ассемблере появился флаг -spectre для включения защиты от атак класса Spectre.
- Поле CommonName в сертификатах X.509 объявлено устаревшим.
- Разработчики могут перечислять несколько прокси в команде go в переменной окружения GOPROXY.
- В утилите vet появилось предупреждение о попытке преобразования из string(x) в том случае, если x — целочисленный тип, отличный от rune или byte.
- В утилиту objdump добавлен флаг -gnu для поддержки вывода дизассемблерных дампов в синтаксисе GNU assembler.
- Появился новый пакет time/tzdata, который дает возможность встроить в программу БД с информацией о часовых поясах.
- В стандартной библиотеке появилось много разных улучшений.
Как видим, проект активно развивается. Он не теряет своей главной особенности — гибридности, где сочетается высокая производительность компилируемых языков с достоинствами языков скриптовых.
pin2t
Вот что мне нравится в подходе разработчиков языка Go так это то, что они не меняют язык с каждым релизом, пока ещё отмазываются от «улучшателей» языка и предложений вида «А давайте давайте добавим ещё вот такую фичу, я видел видел в другом языке». Это прям прекрасно, язык остается простым и понятным. Из-за этой простоты и понятности я думаю Go постепенно будет отгрызать долю рынка у Java в корпоративном мире.
MayRiv
Вот только темплейтов как не было, так и не будет
eandr_67
Пока ещё нет. Но будут: go.googlesource.com/proposal/+/refs/heads/master/design/go2draft-type-parameters.md
pin2t
Ну и ничего страшного, как-то обходятся уже 8 лет как. В Java темплейты тоже не сразу появились, тоже долгое время без них как-то обходились. И это как раз одно из спорных изменений в Java, потому что способствует появлению ненужных абстракций и излишнему оверинжинирингу.
В Go предпочитают простые алгоритмы и простые структуры данных, которые реализуются быстро и без ошибок под конкретный тип.
blind_oracle
Я написал десятки тысяч строк довольно разных программ и библиотек на сабже и помню лишь пару мест где подумал — "вот тут бы дженерики!". Я не говорю что они вообще не нужны, но нужны довольно редко и в 99% при разработке библиотек.