Лаборатория языковых инструментов
Генерация кода по типам данных с использованием библиотеки visitors
Для пользовательских типов данных зачастую желательно иметь под рукой функции, которые делают некоторые стандартные операции, например: преобразование в строку, fmap для конкретного типа данных и прочее. Написание такого кода вручную --- не очень сложная задача, но при этом несколько утомительная, так как код, в основном, однотипный. На практике, в основном, используются генераторы такого кода и справляются с этой задачей. Они хорошо работают для генерации того, для чего они предназначены, но если необходимо как-то видоизменить генерируемый код, то часто приходится писать его руками, не используя генератор. При этом существуют генераторы кода, которые позволяют видоизменять части сгенерённого кода, одна из них - библиотека visitors, разработанная Франсуа Потье. Эта библиотека представляет определённый интерес для нас, потому что в рамках лаборатории уже имеется проект (GT), который был придуман независимо и пытается решать те же проблемы сходным способом.
В докладе планируется обсудить
- требования, которым должен удовлетворять хороший генератор кода по типам данных;
- промежуточный (между наивным и библиотекой visitors) вариант генерации кода, который был написан вручную и используется в компиляторе языка OCaml;
- особенности реализации библиотеки visitors.
Материалы к докладу:
1. Документация
2. Доклад на ICFP (с 22-й минуты)
3. Francois Pottier. Visitors Unchained. ICFP 2017
4. Репозиторий
Докладчик --- Дмитрий Косарев.