Ответ 1
Вы можете увидеть больше в разделе Настройка и использование gccgo":
gccgo, компилятор для языка Go. Компилятор gccgo является новым интерфейсом для GCC.
Обратите внимание, что gccgo не является компилятором gc
Как объясняется в Gccgo в GCC 4.7.1" (июль 2012 г.)
Язык Go всегда определялся спецификацией, а не реализацией. Команда Go написала два разных компилятора, которые реализуют эту спецификацию: gc и gccgo.
- Gc является исходным компилятором, а инструмент go использует его по умолчанию.
- Gccgo - это другая реализация с другим фокусом
По сравнению с gc, gccgo медленнее компилирует код, но поддерживает более мощные оптимизации, поэтому программа, связанная с процессором, созданная gccgo, обычно работает быстрее.
также:
- Компилятор gc поддерживает только самые популярные процессоры: x86 (32-разрядные и 64-разрядные) и ARM.
- Gccgo поддерживает все процессоры, поддерживаемые GCC.
Не все эти процессоры были тщательно протестированы для gccgo, но многие из них, включая x86 (32-разрядные и 64-разрядные), SPARC, MIPS, PowerPC и даже Alpha.
Gccgo также был протестирован на операционных системах, которые не поддерживаются компилятором gc, в частности Solaris.если вы установите команду go из стандартной версии Go, она уже поддерживает gccgo через опцию
-compiler
:go build -compiler gccgo myprog
.
Короче: gccgo: больше оптимизации, больше процессоров.
Однако, прокомментировал OneOfOne (источник), часто происходит десинхронизация между go, поддерживаемая gccgo, и последняя версия выпуска:
gccgo поддерживает только до версии go v1.2, поэтому, если вам нужно что-то новое в 1.3/1.4 (tip) gccgo can not. -
Версия GCC 4.9 будет содержать версию gccgo версии 1.2 (не 1.3).
Графики выпуска для проектов GCC и Go не совпадают, а это означает, что 1,3 будут доступны в ветке разработки, но в следующем выпуске GCC, 4.10, скорее всего, будет версия gccgo версии 1.4.
twotwotwo упоминает в комментариях слайд презентации Брэда Фицпатрика
gccgo генерирует очень хороший код
... но не хватает анализа эвакуации: убивает производительность со многими небольшими выделениями + мусор
... GC не является точным. Плохо для 32-битного.
twotwotwo добавляет:
В другом слайде упоминается, что генерация кода ARM не-gccgo неустойчива.
Предполагая, что это интересный вариант для вашего проекта, возможно, сравните двоичные файлы для вашего варианта использования в вашей целевой архитектуре.
Как peterSO комментарии, Go 1.5 теперь (Q3/Q4 2015) означает:
Компилятор и среда выполнения теперь полностью написаны в Go (с небольшим ассемблером).
C больше не участвует в реализации, поэтому компилятор C, который когда-то был необходим для создания дистрибутива, пропал.
В слайде "Перейти в Go" укажите:
C ушел.
Боковое примечание: gccgo по-прежнему развивается.