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