Препроцессоры на Go: нарушение границ или сила -toolexec

Инфраструктура и эксплуатация

GO
Теория

Доклад принят в программу конференции

Мнение Программного комитета о докладе

Марк расскажет, как решить проблему шаблонного кода, автоматически модифицируя исходники перед компиляцией стандартными инструментами Golang. Немного черной магии -toolexec — и вот уже Go взламывается изнутри, а трейсинг вставляется сам.

Целевая аудитория

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

Тезисы

В Go, насколько мы знаем, отсутствуют встроенные механизмы препроцессинга — у нас нет ни стандартного препроцессора, ни системы макросов. Но значит ли это, что нельзя написать свой?

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

В ходе доклада мы с вами: * узнаем о методе встраивания в компилятор (и почему сами авторы Go добавили это в язык); * выясним, какие фазы компиляции представляют наибольший интерес; * наметим общее решение для препроцессинга и научимся обманывать компилятор; * столкнемся с проблемами восстановления импортов и героически их решим; * рассмотрим работу кеширования во время компиляции в Go и как нам это поможет; * применим все это на практике; * рассмотрим, конечно же, проблемы и ограничения такого подхода.

Марк Чолак

Независимый эксперт

8 лет опыта коммерческой разработки на бэкенде в FoodTech-сегменте.
Молниеносно решает проблемы бизнеса и коллег.

Видео