Я читал о библиотеках, написанных людьми для таких языков, как Java и C #, в которых используется переплетение байт-кода для таких вещей, как перехват вызовов функций, вставка кода регистрации и т. Д. Я также читал в макросах Lisp / Clojure в попытаться лучше понять, как их использовать. Чем больше я читаю о макросах, тем больше кажется, что они предоставляют ту же функциональность, что и библиотеки для создания байт-кода. Под функциональностью я подразумеваю способность манипулировать кодом во время компиляции.
Примерами библиотек, которые я просматривал, были AspectJ, PostSharp и Cecil.
Есть ли что-нибудь, что можно сделать с одним, а не с другим? Они действительно решают те же проблемы, или я сравниваю яблоки и апельсины?