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

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

Сообщение Olej » 01 июн 2016, 19:37

Известно, что существуют 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
 
Стаж: 48 лет 10 месяцев 13 дней

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

Спонсор

Спонсор
 

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

Сообщение Olej » 01 июн 2016, 19:50

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
 
Стаж: 48 лет 10 месяцев 13 дней

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

Сообщение Olej » 02 июн 2016, 13:46

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
 
Стаж: 48 лет 10 месяцев 13 дней

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

Сообщение Olej » 02 июн 2016, 14:08

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

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

Сообщение Olej » 03 июн 2016, 13:38

Olej писал(а):

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

Проблема решается легко командой alternatives.
См. сюда: http://rus-linux.net/forum/viewtopic.php?f=31&t=3866&p=14650#p14647
Olej
 
Стаж: 48 лет 10 месяцев 13 дней

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

Сообщение Olej » 21 янв 2017, 17:55

Подведены итоги 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 к промышленным условиям. Что является очень хорошим показателем.
Olej
 
Стаж: 48 лет 10 месяцев 13 дней

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

Сообщение nezabudka » 21 янв 2017, 19:44

Тоже заметила этот баг когда изучала программы на асемблере. Компилятор на мой взгляд от гугла работает прекрасно, но
вот приспичило мне для большего понимания программы останавливаться при компиляции на промежуточном ассемблерном файле.
Для этого и установила 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
Местный говорун
Местный говорун
 
Сообщений: 614
Фото: 180
Стаж: 3 года 6 месяцев 26 дней
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 147 раз.

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

Сообщение nezabudka » 21 янв 2017, 19:58

Совсем недавно обнаружила еще вот такую штуковину, но сама не пробовала. На будущее пригодится
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
Аватар пользователя
nezabudka
Местный говорун
Местный говорун
 
Сообщений: 614
Фото: 180
Стаж: 3 года 6 месяцев 26 дней
Откуда: Ростов на Дону
Благодарил (а): 286 раз.
Поблагодарили: 147 раз.

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

Сообщение Olej » 21 янв 2017, 20:37

nezabudka писал(а):

Совсем недавно обнаружила еще вот такую штуковину, но сама не пробовала. На будущее пригодится
https://github.com/go-llvm/llgo

Это ещё одна любительская ветка LLVM-проекта... довольно давно.
Вряд ли они могут родить что-нибудь существенное сверх 2-х существующих линий развития Go: Golang & GCC.
Olej
 
Стаж: 48 лет 10 месяцев 13 дней


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

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron