Что ж, прошло три недели и я-таки заставил. Причём вообще все! Да-да, все большие версии с 1.3 по 1.27! С версиями 1.0, 1.1 и 1.2 тоже можно было бы, но там компилятор плохо оптимизирует выделения памяти, так что потребовалось бы реализовать, например,
runtime.new а этого я делать принципиально не хочу. Эти версии я просто заставил работать на современной FreeBSD.Все изменённые версии компиляторов доступны в моём репозитории. Выбирайте ветку с нужной версией и вперёд. Сразу отмечу, что вам также потребуется мой пакет с заглушками nostd. Вы можете написать и свой, но о нём придётся дать знать компилятору. С версии 1.6 флага
-+ больше недостаточно.Для теста я взял TCP echo-сервер и проверил его со всеми версиями. Всё работает как с тестом problem/0 сайта Protohackers, так и под нагрузкой от tcpkali2. Проверял только на
freebsd/amd64. Может быть для других программ потребуются ещё какие-нибудь заглушки либо же всплывут какие-нибудь косяки, но это уже мелочи по сравнению с возможностью теперь писать на языке Go как и что угодно!Также мои усилия открывают ещё кучу дорог для интересных экспериментов. Например, с какой версией получается самый маленький исполняемый файл, какая версия компилятора лучше оптимизирует, где
runtime.a самый тяжёлый, насколько вообще наличие runtime.a влияет на производительность, как на неё влияют изменения в планировщике при переходе с 1.0 на 1.1 и с 1.13 на 1.14, где самая производительная реализация стандартного net/http ну и так далее. Можно теперь баловаться с этим как угодно.Жду от вас в комментариях, что лично вам было бы интереснее всего проверить на разных версиях.