The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Релиз языка программирования Go 1.16, opennews (??), 17-Фев-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


50. "Релиз языка программирования Go 1.16"  +9 +/
Сообщение от Аноним (50), 17-Фев-21, 16:23 
Мне этот язык не нравится, чисто с админской стороны.

Есть, например, небольшая программка на Go. Небольшая - зависимостей 10-15. Вопрос, который меня убил - как ее собрать в пакет?

Изучив то что было на тот момент в Go 1.14 по вытягиванию зависимостей, я был в ужасе.
Получается, что чтобы собрать программу текст которой содержит внешние зависимости от других библиотек, мне нужно... скачать их из какого-попало гитхаба/гитлаба и прочего.

В гитхабе оно привязывается к тегу ну или бранчу... не важно. Главное что признаком нужной версии в конечном итоге является хэш коммита. НО! Пакетный менеджер Go видит тег, а не хеш. То есть теоретически если программа prog1 версии 0.1.0 требует библиотеку lib1 версии 1.0.4, то 1.0.4 будет тегом, который разработчики lib1 могут поменять.

Видимо программистов на Go не учили что такое "релиз" и, типа, это нормально зацепиться зависимостью на какой-то бранч в который в конечном итоге могут закоммитить и что-то поломать. И вот эта байда по всему Go.

Fedora, например, решает проблему так:
1. Написать спек для каждой библиотеки, от которой зависит программа так, чтобы результирующий SRPM проверял не только тег, но и хэш коммита
2. Писать спек rpm который будет тянуть код для сборки программы не из git, а из специально оформленных SRPM-пакетов с кодом зависимостей.

В этой схеме получается, что есть тьма-тьмущая пакетов, которые используются только как зависимости, но отдельно не собираются. Каждый из них нужно сопровождать, отслеживая факт "фикса", когда разрабы поменяли либы, поменяли тег или когда приложение затребовало другую версию в связи с обновлением. Кроме того надо тянуть в репозиторий зоопарк из версий одной и той же либы.

Судя по обсуждениям и объяснениям, RedHat решил себе столько работы придумать, потому что не уверен в том, что завтра, послезавтра или через 5 лет программа из репозитория соберется, если у нее есть внешние бесконтрольные зависимости. Debian, как я понял из новостей про kubernetes решил что "и так сойдет", но я не проверял, это не точно.

Просто если дать Go-компилятору волю, он именно в инет на git полезет за своими зависимостями. Какие-то идеи по надежному сопровождению, гарантии, повторяемость сборки летят псу под хвост, если не обмазаться сотнями SRPM-ок на Go... с одной стороны. С другой стороны, работы на пустом месте оно создаёт так много, что лучше программы на Go просто не поставлять ни в составе дистров, ни в собственных корпоративных репозиториях. Только бинарно, построив отдельную специфичную для Go систему сборки и тестирования.

У питона, например, таких проблем нет, потому что питоновское барахло имеет релиз.

Если у вас на предприятии кто-то хочет писать на Go программу, которую нужно сопровождать Вам, постарайтесь донести до менеджмента, что наличие кода на Go увеличивает нагрузку на техподдержку. Микросервисы в кубиках пусть пишут, но не больше. Благо, с ними девопсы мучаются в отдельном CI/CD, а не техподдержка.

Ответить | Правка | Наверх | Cообщить модератору

58. "Релиз языка программирования Go 1.16"  +/
Сообщение от Сейд (ok), 17-Фев-21, 16:53 
Особенно интересно собирать RPM для программы на Go в Fedora Copr. Перед этим нужно собрать нужные для компиляции зависимости, но ещё перед этим нужно собрать вторые зависимости для компиляции первых зависимостей.
Ответить | Правка | Наверх | Cообщить модератору

80. "Релиз языка программирования Go 1.16"  +/
Сообщение от Анончик (?), 17-Фев-21, 18:02 
Так не нужно запускать go get -u и не будет вам обновлений на зависимости.
Ну а вообще да если исходить из необходимости опакечивания то нужен отдельный тулинг для этого. Увы и ах, тулинг написанный под си тут не очень подходит из коробки
Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

85. "Релиз языка программирования Go 1.16"  –1 +/
Сообщение от Аноним (-), 17-Фев-21, 18:32 
> Если у вас на предприятии кто-то хочет писать на Go программу, которую нужно сопровождать Вам, постарайтесь донести до менеджмента, что наличие кода на Go увеличивает нагрузку на техподдержку. Микросервисы в кубиках пусть пишут, но не больше. Благо, с ними девопсы мучаются в отдельном CI/CD, а не техподдержка.

После секса с python 2/3 у нас на предприятии поднялся вопрос на какую платформу мигрировать окончательно чтобы больше не получать проблемы, простои и убытки. Нужно было выбрать максимально надёжный язык, гибкий, предсказуемый и не подкидывающий неожиданностей ЯП. Выбрали perl5 и ни разу не пожалели об этом. Чуть изучив XS стало ясно что на perl вообще можно сделать все что нужно и как того требуется. В обнимку с XS и Си мы смогли легко подцепиться к драйверам оборудования исходников которых производитель никогда не даст. Ну а то насколько "каквамугодно" позволяет perl разворачивать проекты - это фантастика. Раньше perl использовался только для админских задач, а теперь на нём строится весь dataflow в бизнессе.

PS: Как допилим проект и выйдем на закрытие задач по бизнесу - буду настаивать на хороший донат для perl. Он определенно заслуживает это!

Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

88. "Релиз языка программирования Go 1.16"  +4 +/
Сообщение от Аноним (5), 17-Фев-21, 18:53 
Чёт котолампа.
Ответить | Правка | Наверх | Cообщить модератору

89. "Релиз языка программирования Go 1.16"  +/
Сообщение от Аноним (5), 17-Фев-21, 19:08 
Я имею в виду даже не котолампа, а копипаста. Я уже видел это именно в таком набросном изложении.
Ответить | Правка | Наверх | Cообщить модератору

110. "Релиз языка программирования Go 1.16"  +/
Сообщение от Аноним (-), 17-Фев-21, 21:34 
> Я имею в виду даже не котолампа, а копипаста.

Логическая нестыковка по контексту. Следовательно, либо сообщения #88 и #89 писались разными анонимами, либо плоховато в голове у анона.

Не знаю что вы и где видели, но вот вам реальный "котоламповый" кусок кода из error.xsh :


MODULE = DriverIO                PACKAGE = DriverIO::Error

# комбинированный код+ошибка
U32 RawCode(arg)
    U32 arg;
    CODE:
        RETVAL = raw_error_code(arg);
    OUTPUT:
        RETVAL

# xs_error_code set XS_ERROR_CODE_FLAG
void SetXSErrorCode(arg)
    U32 arg;
    CODE:
        set_xs_error_code(arg);

AV* GetCode()
    INIT:
        AV* av = newAV();
        SV* flags = newSVuv(get_error_code_flags());
        SV* code  = newSVuv(error_code_no_flags(0));
    CODE:
        av_push(av, flags);
        av_push(av, code);
    RETVAL = av;
    OUTPUT:
        RETVAL

U32 Success()
    CODE:
        RETVAL = test_success();
    OUTPUT:
        RETVAL

U32 IsDriverError()
    CODE:
        RETVAL = test_driver_error();
    OUTPUT:
        RETVAL

U32 IsXSError()
    CODE:
        RETVAL = !test_driver_error();
    OUTPUT:
        RETVAL

Ответить | Правка | Наверх | Cообщить модератору

139. "Релиз языка программирования Go 1.16"  +/
Сообщение от Аноним (139), 18-Фев-21, 01:26 
XS и развертывание - это как раз минусы перла. Особенно в последние годы упала стабильность интерфейса XS.
Даже в PHP API для написания расширений намного проще, чем XS.
Сам язык медленный. Далеко не все происходит в сишной части. Не такой тормоз, как питон, но все равно.

Если подобного плана языки сравнивать, у Lua и развертывание, и написание биндингов проще даже не в разы - на порядок. За счет JIT можно писать производительный код даже прямо на языке.

Ответить | Правка | К родителю #85 | Наверх | Cообщить модератору

240. "Релиз языка программирования Go 1.16"  +/
Сообщение от Аноним (-), 19-Фев-21, 10:44 
Что там у перла упало в последние годы ?
Ответить | Правка | Наверх | Cообщить модератору

122. "Релиз языка программирования Go 1.16"  +8 +/
Сообщение от valyala (?), 17-Фев-21, 22:18 
Откройте для себя `go mod vendor`. Нормальные проекты, написанные на Go, собираются без лазанья в интернет за зависимостями, т.к. все нужные зависимости уже заботливо сложены в репозитории в папку `vendor` с помощью `go mod vendor`. См., например, https://github.com/VictoriaMetrics/VictoriaMetrics/ .
Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

263. "Релиз языка программирования Go 1.16"  +/
Сообщение от Capra (ok), 20-Фев-21, 21:14 
Только хотел написать, что мешает сделать локальный срез необходимых репозиториев?
Ответить | Правка | Наверх | Cообщить модератору

138. "Релиз языка программирования Go 1.16"  +2 +/
Сообщение от a (??), 18-Фев-21, 00:58 
>> Пакетный менеджер Go видит тег, а не хеш

балабол-неосилятор. Как скажешь так и будет. Хоть тег, хоть хеш коммита.

Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

142. "Релиз языка программирования Go 1.16"  +1 +/
Сообщение от Аноним (141), 18-Фев-21, 02:06 
Еще один не осилил, но критикует.

Принцип тут ровно такой же, как и везде - если ты не разработчик, не дергай обновление зависимостей по сети. Читать про go mod vendor.

Ничего такого специфичного в системе сборки go нет, от всяких там gradle принципиально не отличается. А поставлять внутри предприятия конечно надо бинари, собранные на собственном билд-сервере.

Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

178. "Релиз языка программирования Go 1.16"  +/
Сообщение от Брат Анон (ok), 18-Фев-21, 10:49 
> Видимо программистов на Go не учили что такое "релиз" и, типа, это
> нормально зацепиться зависимостью на какой-то бранч в который в конечном итоге
> могут закоммитить и что-то поломать. И вот эта байда по всему
> Go.

Вы сейчас какую-то откровенную фигню написали. Посмотрите вот сюда:
> golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad // indirect

Здесь ВООБЩЕ нет никаких тегов. Дата коммита с точностью до микросекунды и хэш от коммита.
"Какой-то бранч"?))) Ну ка, пример в студию, как вы сможете зацепить бранч НЕ МАСТЕР?)) Ой, простите.. НЕ ПРАЙМЕРИ))

Прижде чем постить абсолютно неправильное понимание пакетного менеджера в го и демонстрировать свою безграмотность -- поговорите хотя бы с джуниуром для приличия.

Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

209. "Релиз языка программирования Go 1.16"  +/
Сообщение от Ordu (ok), 18-Фев-21, 20:06 
> Ну ка, пример в студию, как вы сможете зацепить бранч НЕ МАСТЕР?

А по хешу коммита разве нельзя?

Ответить | Правка | Наверх | Cообщить модератору

236. "Релиз языка программирования Go 1.16"  +1 +/
Сообщение от Брат Анон (ok), 19-Фев-21, 10:35 
>> Ну ка, пример в студию, как вы сможете зацепить бранч НЕ МАСТЕР?
> А по хешу коммита разве нельзя?

Нет, нельзя, если не указана ветка репы. Но если программист сам себе стреляет в ногу -- тут никакой доктор не поможет. Более того, я бы на месте доктора и не стал бы помогать.

Ответить | Правка | Наверх | Cообщить модератору

226. "Релиз языка программирования Go 1.16"  +1 +/
Сообщение от Митя Трансформатор (?), 19-Фев-21, 03:15 
>Микросервисы в кубиках пусть пишут, но не больше.

Так а больше и не надо. Весь продакшен давно в кубике. Контейнер крутится - лавеха мутится.

Ответить | Правка | К родителю #50 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру