Подтвердить что ты не робот

Каковы основные различия между "gc" и "gccgo"?

Каковы основные отличия между двумя популярными компиляторами Go, "gc" и "gccgo"? Производительность сборки? Производительность во время выполнения? Параметры командной строки? Лицензирование?

Я не ищу мнения, которые лучше всего, просто базовый обзор их различий, поэтому я могу решить, что лучше для моих нужд.

4b9b3361

Ответ 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 по-прежнему развивается.