Внесение вклада в 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.