Мы продолжаем публиковать выдержки из дискуссий экспертов, обсудивших важнейшие тенденции в сфере IT. Эти встречи проводились *инстинктивные инструменты в рамках проекта "Техпора" , и один из разговоров касался разработки языка программирования Go. Правильно ли считать Go перспективным языком и что изменилось в нем и экосистеме за последнее время?
Фото Instincttools.ru На эти и другие вопросы были даны ответы Алексей Палажченко – опытный суслик, организатор митапа Golang Moscow и конференции GopherCon Russia, ведущий мастер-классов и подкаста Голанг Шоу , Илья Данилкин – Технический руководитель команды Автокластера, Авито , Олег Ковалёв – Старший инженер-программист, ведущий подкастов GenericTalks , Сергей Новацкий – ведущий разработчик и куратор Go-направления в *инстинктивные инструменты .
Go — довольно молодой язык, но инструменты быстро меняются.
Алексей Палажченко: Если сравнивать Go с Java, я бы сказал, что Go — очень молодой язык.
Недавно ему исполнилось 15 лет. Поэтому нельзя сказать, что оно радикально изменилось и что есть наследие, как в Java, и нужно всё переписывать под новые потоки.
Но при этом инструментарий быстро меняется, несмотря на то, что сам язык остается стабильным.
И если вы сейчас возьмете любую программу, написанную на Go 1.0, то, конечно, вы ее соберете.
Но в некоторых случаях будет сложно начать компиляцию, не говоря уже об интеграции с языком Си и так далее.
Илья Данилкин: Изменился даже стиль самого языка.
То, что мы считали нормальными в версиях 1.6 или 1.5, теперь будет восприниматься как несколько дикое.
Мы постепенно перешли от реализации зависимостей от поставщиков к другим решениям.
Появились нормальные IDE. Язык повзрослел и повзрослел, так сказать.
Среди последних релизов я бы выделил нормальный, официальный релиз модулей.
Фото Google.com Алексей Палажченко: В следующем выпуске будут серьезные изменения в самом языке.
А пока подготовка еще продолжается.
Самое большое изменение заключается в том, что тест Go наконец-то может выводить json. Также произошли улучшения в системе тестирования.
Теперь вы можете создавать временные каталоги.
Но это пока мелочи, говорящие о стабильности языка Go и его консервативности, до следующего релиза.
«Go не настолько изменился, чтобы пришлось делать LTS».
Сергей Новацкий: Каждая основная версия Go поддерживается ровно один год. И непонятно, почему нет долгосрочных LTS-версий.
Не закрывает ли это путь в корпоративный сегмент рынка? Может быть, Go сможет найти больше применения в корпоративном мире при долгосрочной поддержке? Алексей Палажченко: Основная версия Go — Go 1. Сейчас выходят только второстепенные версии.
И это во многом объясняет, почему нет LTS. И я не уверен, что версия поддерживается только год. Да, текущая и предыдущие версии языка официально поддерживаются.
Но все же есть случаи, когда есть поддержка старых версий.
Кстати, что касается LTS, то недавно появилась инициатива по созданию LTS для улучшения использования Go в корпоративном секторе.
И все проголосовали против этой инициативы, потому что решили, что Go уже используется на предприятии и нет необходимости формировать сообщество, чтобы разделить его на две части: одна, которая работает на Java 8, вторая — на Java 17. И вообще, LTS У нас есть релиз — Go 1. После этого релиза язык работает стабильно.
Да, инструментарий меняется, поэтому могут возникнуть трудности с запуском компиляции.
Но в любом случае исходный код можно скомпилировать.
Илья Данилкин: Язык не настолько изменился, чтобы пришлось делать LTS. Проблемой является тот факт, что исправления для CVE не выпускаются или выпускаются редко для более старых версий.
Но это побуждает вас обновиться хотя бы до последней, поддерживаемой на данный момент версии.
Я работал в нескольких разных компаниях, которые разрабатывали Go в качестве основного языка.
«Go не очень хорошо работает на мобильных устройствах»
Алексей Палажченко: Сначала Go позиционировался как язык системного программирования.Но то, что имели в виду авторы Го, отличается от того, что думал о Го остальной мир.
Авторы заявили, что написали язык для «системного программирования».
Разработчики были удивлены, но позже выяснилось, что в Google системное программирование — это язык разработки систем.
Оказывается, Go — это язык для разработки больших, распределенных, отказоустойчивых систем.
Но Go снова меняется, и теперь мы начинаем писать на этом языке целые операционные системы.
И делаем это без больших проблем.
Но Go не очень хорошо работает на мобильных устройствах.
Хотя уже начали появляться нативные реализации Go для ML. Перспективы использования Go на микрокомпьютерах сейчас гораздо выше, чем на мобильных устройствах.
Я, конечно, думаю, что Raspberry Pi – это уже не микрокомпьютер.
У меня только что установлена последняя версия Raspberry Pi, и на ней работает Kubernetes. Это такой монстр, что он мощнее моего компьютера, который был у меня несколько лет назад. И даже если вы возьмете минимальный Raspberry Pi, например Raspberry Pi Zero, Go там все равно работает хорошо.
«Все думали, что Go станет убийцей C++»
Олег Ковалев: Фактически, когда язык был опубликован в 2007-2008 годах, все постоянно говорили, что авторы языка страдают от того, что в будущем будет использоваться C++.И все думали, что Go станет «убийцей» C++, поскольку Google почти полностью написан на C++, и об этом говорили авторы нового языка.
Но как показала практика, на Go перешло больше разработчиков скриптов с Python, Perl и Ruby. В результате C++ остался на месте, так как язык сложно заменить из-за его возможностей.
И использование Go все больше переместилось в Интернет. Еще одна причина бума Go — доступность стандартных пакетов с реализациями HTTP и TCP-серверов.
Можно написать любой http сервер, для этого есть практически всё.
Роутера может и не быть, но на GitHub 30 версий и всегда была возможность выбрать что-то получше.
Недавно вышла статья о том, как выбрать маршрутизацию для своего проекта, и там была целая схема выбора.
«В Go уже давно существуют дженерики».
Алексей Палажченко: В Go уже давно есть дженерики, и с их помощью можно сделать 90% того, что сложно в других языках.
Дженерики — это интерфейс и набор методов.
Вы берете некоторую функцию, которая принимает интерфейс, и передаете ей все, что хотите.
Но в языке нет методов, основанных на базовых типах.
Вы не можете написать какой-то универсальный контейнер или карту, сохраняющую порядок вставки элементов.
Далее у нас есть несколько вариантов.
Вы можете копировать и редактировать одну и ту же реализацию 20 раз для всех основных типов.
Вы можете обернуть это в интерфейс, а затем обертывать и расширять каждый раз, когда вставляете элемент из коллекции.
Конечно, это менее эффективно во время выполнения, но нет необходимости писать реализацию.
И есть третий вариант с использованием дженериков, когда в компиляторе все будет тормозить, но во время выполнения все будет эффективно.
Дженерики не только красивы, но и влияют на производительность.
Конечно, все механизмы так или иначе влияют на производительность, и это либо производительность программистов, либо производительность компилятора и среды выполнения.
Текущая спецификация дженериков не диктует вариант реализации.
Чисто технически можно создать дженерики, которые будут полностью работать во время выполнения.
Но текущая реализация все еще находится в компиляторе.
Фото https://www.geeksforgeeks.org
«Портирование Python на Go — не совсем правильная логика»
Олег Ковалев: Совет, который я бы дал новичкам в Go, заключается в следующем: вам нужно знать три папки.Это «cmd», где должен находиться файл, который «говорит»: «вот главный, я что-нибудь сделаю и оно запустится».
Потом должна быть папка, где «что-то начнется».
Я пошел против системы и называю это «приложением» или «приложением».
И третья папка — «pkg», все пакеты, не имеющие никакого отношения к бизнес-логике, но все же полезные.
Я описал тот минимум, который необходимо иметь в проекте и с которого можно начать.
Потом, по мере роста проекта, вы сами догадаетесь, чего не хватает. Начинать надо с чего-то малого, есть много проектов, где люди переходили с Python, Ruby и Java и применяли опыт другого языка.
А они считали, что Go — плохой язык, там много кода, интерфейсов и не всегда понятно, зачем он нужен.
И тут нужно понимать, что переводить Python на Go — это не совсем правильная логика.
Лучше сделать шаг назад, начать с чего-то более простого, а потом уже набираться опыта.
Go идет вперед, обгоняя таких конкурентов, как Python и Java.
Олег Ковалев: Язык вступает в период зрелости.На этом уже специализируются многие компании, растет сообщество и количество вакансий.
Язык показал, что даже используя один тип цикла и без возможности дженериков, можно построить огромный бизнес, большие команды и интересные проекты.
Все идет к тому, что язык продолжает идти по проторенной дороге, сбивая с толку конкурентов вроде Python и Java. Конечно, конкуренция не такая большая, ведь упомянутые языки тоже развиваются, появляются новые вакансии и проекты.
Алексей Палажченко: В будущем появятся более простые и базовые проекты Go. Там, где раньше люди использовали PHP как самый популярный язык, теперь там будет Go. Язык Go «съест» и Java, и PHP. Если говорить об угрозе Go со стороны Rust, то их перекрытие крайне мало.
Полную версию обсуждения можно прочитать Смотри сюда .
Теги: #python #Интервью #программирование #Go #golang #java #generics
-
Джеймс, Уильям
19 Oct, 24 -
Blu-Ray: Учебник Для Начинающих
19 Oct, 24 -
Cloe — Текстовый Аналог Siri
19 Oct, 24 -
Камунда: Модели Процессов Тестирования
19 Oct, 24