Я работаю над системой макросов для Python (как обсуждалось здесь), и одна из вещей, которые я мы рассматривали единицы измерения. Хотя единицы измерения могут быть реализованы без макросов или с помощью статических макросов (например, определение всех ваших единиц заранее), я играю с идеей разрешить динамическое расширение синтаксиса во время выполнения.
Для этого я рассматриваю возможность частичной оценки кода во время компиляции. Если синтаксический анализ данного выражения завершается неудачей из-за того, что макрос для его синтаксиса недоступен, компилятор останавливает оценку функции/блока и генерирует код, который у него уже есть, с заглушкой, в которой находится неизвестное выражение. Когда эта заглушка попадает во время выполнения, функция перекомпилируется с текущим набором макросов. Если эта компиляция завершится ошибкой, будет выдана ошибка синтаксического анализа, поскольку выполнение не может быть продолжено. Если компиляция прошла успешно, новая функция заменяет старую и выполнение продолжается.
Самая большая проблема, которую я вижу, заключается в том, что вы не можете найти ошибки синтаксического анализа, пока не будет запущен затронутый код. Однако это не повлияет на многие случаи, например. групповые операторы, такие как [], {}, () и ``, по-прежнему должны быть сопряжены (требование моего токенизатора/парсера списка), а синтаксис верхнего уровня, такой как классы и функции, не будет затронут, поскольку их «время выполнения» действительно время загрузки, когда оценивается синтаксис и генерируются их объекты.
Помимо сложности реализации и описанной выше проблемы, какие проблемы связаны с этой идеей?