Команда IT специалистов выполнит подготовку инфраструктуры для вашего бизнеса.
Внедрение самых передовых решений и технологий.
Поддержка и сопровождение ваших сервисов.
Выполнение работ под "ключ", от покупки сервера, до настройки автоматизации процессов.
8(977)608-78-62 adm@nixm.ru

Инструменты Go

Ответить
Olej

Инструменты Go

Сообщение Olej »

Известно, что существуют 2 линии инструментария программирования на языке Go: а). базовый прект GoLang (который инициирован Google) и б). проект по включению языка Go в число поддерживаемых компилятором GCC ... более интегрированный со средой Linux.

Интересны любые мнения от том, что когда и для чего лучше ... и другое...

Но!
Конкретная проблема:
- при установке в Fedora 23 GoLang 1.5 (всё из стандартных репозитариев) всё ОК
- при последующей установке Go для GCC всё тоже ОК ... но при этом нарушается работа GoLang

Код: Выделить всё

[olej@dell tasks]$ go build -compiler gc hello.go  
hello.go:10:8: cannot find package "fmt" in any of:
    /usr/src/fmt (from $GOROOT)
    /home/olej/2016_WORK/GoBook/src/fmt (from $GOPATH)
package runtime: cannot find package "runtime" in any of:
    /usr/src/runtime (from $GOROOT)
    /home/olej/2016_WORK/GoBook/src/runtime (from $GOPATH)
- если удалить gccgo (dnf remove ...) - работа golang восстанавливается

Что это?

В нескольких предыдущих версиях Go и дистрибутивах Linux такого не наблюдалось.
И можно было использовать компиляторы gc и gccgo параллельно.

P.S. Как я гляжу, понимающие в программировании на этот форум заглядывают редко, но ... чем чёрт не шутит? :D
Olej

Re: Инструменты Go

Сообщение Olej »

Olej писал(а): - если удалить gccgo (dnf remove ...) - работа golang восстанавливается
Как показывает изучение, это связано с переустановкой (неправильной) переменных окружения Go (не путать с переменными окружения Linux!).
При установке (работе) пакета golang:

Код: Выделить всё

[olej@dell gorun]$ go env
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/olej/2016_WORK/GoBook"
GORACE=""
GOROOT="/usr/lib/golang"
GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT=""
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
Но при установке пакета gcc-go (и нарушенной работе компилятора gc)

Код: Выделить всё

[olej@dell gorun]$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/olej/2016_WORK/GoBook"
GORACE=""
GOROOT="/usr"
GOTOOLDIR="/usr/libexec/gcc/x86_64-redhat-linux/5.3.1"
CC="/usr/bin/gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="/usr/bin/g++"
CGO_ENABLED="1"

После удаления gcc-go - работа gc восстанавливается:

Код: Выделить всё

sudo dnf remove gcc-go
...
Где определяются переменные окружения среды Go?
Как можно поменять значения отдельных переменных?
Olej

Re: Инструменты Go

Сообщение Olej »

Olej писал(а): После удаления gcc-go - работа gc восстанавливается:

Код: Выделить всё

sudo dnf remove gcc-go
...
Как оказалось, проблема решилась, и связана она не с изменением в идеологии разработки Go (что было бы крайне неприятно), а с багом сборки ... то ли пакетов Fedora, то ли make install пакета go-lang:
- gcc-go при установке, если ссылка /etc/alternatives/go уже установлена в /usr/lib/golang/bin/go (т.е. golang уже установлен) не должен её переписывать, устанавливать в /usr/bin/go.gcc
- ... должен создавать ссылку только если её там нет
- ... а он это делает тупо в любом случае
- а golang при установке (после gcc-go) ссылку не переписывает
- ну и то же самое с ссылкой /etc/alternatives/gofmt
Теперь это легко поправить (пока не поправят в пакетной системе), делаем (я показываю это на 32-бит Fedora 23 - пути!):

Код: Выделить всё

[root@localhost alternatives]# cd /etc/alternatives
[root@localhost alternatives]# mv go go.gcc
[root@localhost alternatives]# mv gofmt gofmt.gcc
[root@localhost alternatives]# ln -s /usr/lib/golang/bin/go go
[root@localhost alternatives]# ln -s /usr/lib/golang/bin/gofmt gofmt
И теперь всё работает не мешая друг другу:

Код: Выделить всё

[olej@localhost GO]$ go build -compiler gc -o tiny.gc tiny.go
[olej@localhost GO]$ go build -compiler gccgo -o tiny.gcc tiny.go
# command-line-arguments
ar: `u' modifier ignored since `D' is the default (see `U')
[olej@localhost GO]$ ls -l tiny.*
-rwxr-xr-x. 1 olej olej 1905168 Jun  2 12:54 tiny.gc
-rwxr-xr-x. 1 olej olej   25528 Jun  2 12:55 tiny.gcc
-rw-r--r--. 1 olej olej     111 Jun  1 14:23 tiny.go
И можете наслаждаться :D :

Код: Выделить всё

[olej@localhost GO]$ file tiny.*
tiny.gc:  ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, not stripped
tiny.gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=ceea47622da1118f6a98e3febfc687fc80a0d9b2, not stripped
tiny.go:  C source, UTF-8 Unicode text
[olej@localhost GO]$ ./tiny.gc
минимальное приложение
[olej@localhost GO]$ ./tiny.gcc
минимальное приложение
Olej

Re: Инструменты Go

Сообщение Olej »

Этот баг отмечен для Fedora 22 : Red Hat Bugzilla – Bug 1192716.
(на случай если кто столкнётся)
Olej

Re: Инструменты Go

Сообщение Olej »

Olej писал(а):Этот баг отмечен для Fedora 22 : Red Hat Bugzilla – Bug 1192716.
(на случай если кто столкнётся)
Проблема решается легко командой alternatives.
См. сюда: http://rus-linux.net/forum/viewtopic.ph ... 650#p14647
Olej

Re: Инструменты Go

Сообщение Olej »

Подведены итоги 2016-го года:
TIOBE Index for January 2017
January Headline: Google's Go is TIOBE's programming language of 2016
TIOBE rewards the programming language that has gained the most popularity in a year with the programming language of the year award. Without hardly any competition Go has won the award for 2016. Google's Go language won 2.16% in one year. Runner ups Dart (+0.95%) and Perl (+0.91%) follow at a considerable distance. The main drivers behind Go's success are its ease of learning and pragmatic nature. It is not about theoretical concepts such as virtual inheritance and monads but about hands-on experience. Apart from that Go has built-in support for concurrency programming. More and more customers of our company TIOBE are adopting Go in an industrial setting. That is a good indicator.
TIOBE награждает язык программирования, который приобрел наибольшую популярность за год (по динамике). Практически без конкуренции Go завоевал награду на 2016 год. Язык от Google вырос за один год на 2.16%. Идущие следом Dart (+0.95%) и Perl (+0.91%) следуют на значительном расстоянии. Основными факторами успеха Go являются его легкость изучения и прагматический характер. Речь идет не о теоретических понятиях, таких как виртуальное наследование или монады, а про практический опыт. Кроме этого Go имеет встроенную поддержку параллельного программирования. Все больше и больше клиентов компании TIOBE адаптируют Go к промышленным условиям. Что является очень хорошим показателем.
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: Инструменты Go

Сообщение nezabudka »

Тоже заметила этот баг когда изучала программы на асемблере. Компилятор на мой взгляд от гугла работает прекрасно, но
вот приспичило мне для большего понимания программы останавливаться при компиляции на промежуточном ассемблерном файле.
Для этого и установила gcc-go исключительно для этих целей. Долго не могла понять потом кучу ошибок которые выдавал родной
компилятор, тогда гугления не помогли и я методом тыка все таки установила что причина в банальной несовместимости двух
компиляторов, но помучиться пришлось долго. Кстати собирать программы черз gcc-go лучше с линковщиком gold который задается
через параметр к компилятору.
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Аватара пользователя
nezabudka
Местный говорун
Местный говорун
Сообщения: 618
Зарегистрирован: 18 апр 2015, 06:13
Откуда: Ростов на Дону

Re: Инструменты Go

Сообщение nezabudka »

Совсем недавно обнаружила еще вот такую штуковину, но сама не пробовала. На будущее пригодится
https://github.com/go-llvm/llgo
"I invented the term Object-Oriented and I can tell you I did not have C++ in mind." - Alan Kay
Olej

Re: Инструменты Go

Сообщение Olej »

nezabudka писал(а):Совсем недавно обнаружила еще вот такую штуковину, но сама не пробовала. На будущее пригодится
https://github.com/go-llvm/llgo
Это ещё одна любительская ветка LLVM-проекта... довольно давно.
Вряд ли они могут родить что-нибудь существенное сверх 2-х существующих линий развития Go: Golang & GCC.
Ответить

Вернуться в «Другие языки»