Внесение вклада в frontend gccgo

Введение

Это некоторые замечания о внесении вклада в frontend gccgo для GCC. Для получения информации о внесении вклада в части Go, отличные от gccgo, см. Внесение вклада в проект Go. Для информации о самостоятельной сборке gccgo, см. Настройка и использование gccgo. Для получения более подробных сведений о процессе разработки с использованием frontend gccgo, см. файл HACKING в репозитории gofrontend.

Юридические предварительные условия

Вы должны следовать правилам авторского права Go для всех изменений в frontend gccgo и связанной библиотеке libgo. Код, который является частью GCC, а не gccgo, должен следовать общим правилам внесения вклада в GCC.

Код

Основные исходные тексты frontend gccgo можно найти по адресу https://go.googlesource.com/gofrontend. Они отражены в https://github.com/golang/gofrontend. Основные исходные тексты не могут быть собраны самостоятельно, а только в связке с GCC (в будущем могут поддерживаться и другие компиляторы). Изменения, внесённые в frontend gccgo, также применяются к репозиторию исходного кода GCC, размещённому на gcc.gnu.org. В репозитории gofrontend, каталог go отражается в каталоге gcc/go/gofrontend в репозитории GCC, а каталог gofrontend libgo отражается в каталоге libgo в GCC. Кроме того, каталог test из основного репозитория Go отражается в каталоге gcc/testsuite/go.test/test в репозитории GCC.

Изменения в этих каталогах всегда передаются из основных исходных текстов в репозиторий GCC. Файлы не должны изменяться в репозитории GCC, кроме как путём изменения их в основных исходных текстах и последующего отражения.

Frontend gccgo написан на C++. Он следует стандартам кодирования GNU и GCC для C++. При написании кода для frontend следует следовать форматированию окружающего кода. Практически весь код, специфичный для GCC, не находится в самом frontend, а находится в исходных текстах GCC в каталоге gcc/go.

Библиотека среды выполнения для gccgo в основном совпадает с библиотекой в основном репозитории Go. Код библиотеки в репозитории Go периодически объединяется в каталог libgo/go репозитория gofrontend и затем в репозитории GCC, используя скрипт оболочки libgo/merge.sh. Соответственно, большинство изменений в библиотеке должны вноситься в основной репозиторий Go. Файлы вне каталога libgo/go являются специфичными для gccgo; тем не менее, некоторые файлы в libgo/runtime основаны на файлах в каталоге src/runtime основного репозитория Go.

Тестирование

Все патчи должны быть протестированы. Патч, который вводит новые ошибки, неприемлем.

Для запуска тестовой сборки gccgo выполните команду make check-go в вашем каталоге сборки. Это запустит различные тесты в gcc/testsuite/go.* и также запустит тестовую сборку libgo. Эта копия тестов из основного репозитория Go запускается с использованием скрипта DejaGNU, находящегося в gcc/testsuite/go.test/go-test.exp.

Большинство новых тестов должны быть отправлены в основной репозиторий Go для последующего отражения в репозитории GCC. Если необходимы специфические тесты для gccgo, они должны находиться в каталогах gcc/testsuite/go.go-torture или gcc/testsuite/go.dg в репозитории GCC.

Отправка изменений

Изменения в интерфейсе Go должны следовать тому же процессу, что и для основного репозитория Go, только для проекта gofrontend и списка рассылки gofrontend-dev@googlegroups.com, а не для проекта go и списка рассылки golang-dev@googlegroups.com. Эти изменения будут затем объединены с исходными кодами GCC.

GoRu.dev Golang на русском

На сайте представлена адаптированная под русский язык документация языка программирования Golang