Обновления и альтернативы в мире Go
Приветствуем всех гоферов этой планеты! Собрали для вас самые интересные новости из мира разработки на языке Go. Зима не помеха — мы не впадаем в спячку, а внимательно смотрим, что происходит. Сейчас расскажем.
Встречаем минорные релизы Go 1.17.6 и Go 1.16.13
Пока всё сообщество предвкушает выход в релиз 1.18 с дженериками, на новогодних праздниках вышло два минорных обновления. Было закрыто несколько возникающих багов, таких как парсинг больших идентификаторов в кодировке ASN.1, некорректную работу детектора «состояния гонки» в macOS Monterey и несрабатывание таймаута на запись в x/net/http2.
Также была исправлена ошибка компилятора Op...LECall and OpDereference have mismatched mem, возникающая при условии записи аргументов LECall в уже занятый блок ввода. Это разрушало цепочку памяти и вызывало сбой. Решением стало создание нового блока перед записью аргументов LECall.
Еще один багфикс решал проблему с резервированием адресного пространства в iOS 14. До появления iOS 14 размер адресного пространства был ограничен 33 битами (8 GiB). В следующих версиях это ограничение было смягчено, но одновременно стало источником возникновения ошибки base outside usable address space в версиях iOS <14, когда возвращаемые адреса оказываются вне диапазона.
Olivia — ищем альтернативу DialogFlow
Распознавание естественного языка — сложная задача, без решения которой невозможно стереть грань между общением компьютера с человеком. Высокое потребление вычислительных ресурсов при этом стало причиной появления сервисов, подобных Google DialogFlow, в отдельно выделенной инфраструктуре, доступ к которой можно получать при помощи API.
Помимо очевидных достоинств, таких как высокая скорость работы, качество распознавания и предсказуемое поведение, такие сервисы имеют ряд недостатков:
- чувствительные данные отправляются по сети на сторонние серверы; инфраструктура стоит денег;
- vendor lock-in;
- закрытый исходный код.
Все это закономерно привело к созданию альтернативного чат-бота Olivia, который написан на Go, имеет открытый исходный код и может быть запущен в любой локальной инфраструктуре. С помощью Olivia можно создать чат-бота, умеющего распознавать естественный язык, правда, русский ещё не поддерживается. Но кто знает — может именно вы сможете добавить его поддержку и внести вклад в развитие.
Компилируем Go-приложения для Nintendo Switch
Разработка для игровых консолей никогда не была простым делом, особенно когда речь заходит о Nintendo Switch. Разработчик Hajime Hoshi, автор библиотеки Ebiten, в своём блоге рассказал, через какие сложности пришлось пройти, чтобы выполнить компиляцию Go-приложения в бинарный формат, который поддерживается Nintendo Switch.
Ранее подобный трюк работал через двойное преобразование. Вначале код компилировался в WebAssembly, а затем преобразовывался в C++. Но выяснилось, что если заменить системные вызовы на функции C, то становится возможным напрямую обращаться к Nintendo Switch API. Такой способ делает возможным прямую компиляцию в ELF-формат, который, как выяснилось, вполне работает на этой игровой консоли, хотя и требует определённых «танцев с бубном».
Основным приёмом стала перезапись файлов Go прямо во время исполнения (опция -overlay) при помощи JSON. Каждый раз создавать JSON вручную было бы нерационально, так что Hajime Hoshi создал приложение Hitsumabushi, автоматически генерирующее нужный JSON для замены системных вызовов.
Библиотека excelize обновилась до версии v2.5.0
Взаимодействие с офисными форматами данных, такими как XLSX, стало проще благодаря обновлённой библиотеке excelize. Новая версия значительно расширила возможности, добавив поддержку 95 новых формул, исправив баг с задвоением изображений внутри одного документа и увеличив производительность некоторых операций. С полным списком исправлений можно ознакомиться в репозитории проекта.
Особо стоит отметить наличие нормальной документации, в том числе и на русском языке. Перевод не идеален, но для каждой функции есть подробное описание и пример использования, что значительно упрощает жизнь разработчикам. Библиотека универсальна и работает со всеми файлами, соответствующими стандарту Office Open XML (OOXML).
Приручение сборщика мусора в Go — кейс Uber
Когда речь заходит о крупной инфраструктуре — даже такая казалось бы тривиальная вещь, как управление сборкой мусора в Go может значительно экономить вычислительные ресурсы. Недавно таким интересным кейсом поделилась компания Uber Engineering: рассказала о том, как им удалось сократить количество задействованных вычислительных ядер при помощи управления сборщиком мусора (использовали библиотеку GOGCTuner с применением финализаторов).
Статическое значение параметра GOGC не подходило из-за особенностей инфраструктуры, так как разные микросервисы имели разный профиль утилизации памяти и, соответственно, разные наборы данных. Так что для автоматизации пришлось динамически рассчитывать значение параметра GOGC, одновременно не допуская ситуаций, при которых OOM-Killer завершит процесс, чтобы спасти ядро от сбоя.
Итогом исследований и экспериментов стало значительное снижение потребляемых вычислительных ресурсов и множество накопленных данных по взаимодействию со сборщиком мусора в Go. Кейс показал, что для большой инфраструктуры такой способ оптимизации несёт существенную выгоду и может быть использован в продакшене.
Поисковой движок Zinc обновился до версии v0.1.4
Elasticsearch — прекрасная поисковая система, используется во множестве высоконагруженных проектов. Но вместе с этим она достаточно сложна для настройки и понимания в целом. В качестве альтернативного варианта существует и активно разрабатывается такое приложение, как Zinc, легковесный поисковой движок. Смысл в том, чтобы предоставить пользователям очень простую в использовании систему полнотекстового поиска без необходимости вникать в архитектуру. Zinc можно развернуть внутри любой облачной или физической инфраструктуры. Он совместим с Elasticsearch API для приёма данных и уже экспериментально умеет хранить индексы в S3-хранилище. Надеемся, что дальнейшее развитие проекта принесёт еще больше возможностей.
Конкурсы для разработчиков
Ruby Quiz
до 28 февраля 2022
Хороший программист обычно знает несколько языков, так что предлагаем проверить себя в нашем новом квизе по языку Ruby.
Его составляли наши опытные разработчики, так что придётся хорошо подумать. Внутри семь вопросов и несколько вариантов ответов, из которых лишь один правильный. Среди тех, кто правильно ответит на все вопросы мы разыграем приятные призы: Apple AirPods Pro, Яндекс.Станцию и увлажнитель от Electrolux.
Митапы
GO meetup
20 апреля 2022 19:00
Рады сообщить, что у нас запланирован отличный Go Meetup, который пройдёт 20-го апреля. Детальная информация о мероприятии будет опубликована позже, следите за нашими новостями.
Вакансии
Удаленка / Офис
Evrone
Мы открыты для новых Go-разработчиков. В Evrone можно работать удалённо с первого дня, мы поддерживаем и оплачиваем участие в Open-source проектах, а расти в грейдах можно с помощью честной системы проверки навыков и менторства.