Обновить

Комментарии 10

Я праильно понимаю, что декораторы в питоне это именно оно и есть, аспектное программирование? Или есть разница (кроме скорости реализации, конечно)

Да, в общем и целом — это оно.

Классический подход — скопировать строчку с вызовом логгера в начало каждого метода, а затем провести остаток дня, проклиная бренность бытия и отсутствие метакопипаста.

Самый классический подход это вставить нужный инклюд в начале файла исходников и вызвать printf() где вам угодно и удобно. Если очень приспичит, обернуть его в какой-то дефайн. То есть логирование это системная функция которая должна быть доступна во всех исходниках приложения без ограничений и без всяких танцев с бубном для доступа к этой системной функции.

printf — это никаким боком не логгинг. Логи в локальной консоли перестали собирать в промышленности примерно 25 лет назад.

Не, ну инструмент интересный, спасибо. Вспомнил про PostSharp, который когда-то пользовался, зашел к ним, а оказалось, что Metalama это их детище! ) Тогда понятно, как получился такой (судя по всему) хороший продукт.

Metalama работает на этапе компиляции, генерируя C#-код, который можно увидеть, отладить и понять без степени в компьютерной магии. 

А насколько близко к "классическому подходу" получается сгенерированный код? И как его найти? Если, скажем, я нахожусь в исходном методе с аспектным атрибутом.

Да, я хотел упомянуть PostSharp, но в суете забылось.

А насколько близко к "классическому подходу" получается сгенерированный код? И как его найти?

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

Спасибо! Как раз в тему.

Странно, что + статье не поставить.

Сейчас должно быть можно. Но зачем?

Созрели вопросы, которые отчасти являются и утверждениями:

1. Правильно ли я понимаю, что АОП можно рассматривать, как некоторую попытку систематизации метапрограммирования? То есть, изначальные негигиенические макросы LISP — это некоторый ну совершенный дикий Северо-Запад. Но есть набор довольно шаблонных применений макросов: Сериализация (механизмы deriving), Cross-cutting concerns (АОП), DSL/eDSL. И, наверное, есть что-то ещё, что я не знаю (кстати, что?). Так?

2. Как всякие пишут в Википедиях, FP сильно ограничивает поле деятельности AOП. Вернее даже не FP, а просто современные языки, в которых есть хотя бы функции высоких порядков. И, скажем, в том же Эликсире подход АОП, реализованный на местных макросах, будет уже не столь полезен. Так? Вообще, в Элексире с вашей точки зрения, где лучше АОП на макросах (см. ваша же Телеметрия — это же и есть АОП), нежели стандартные механизмы языка?

3. Правильно ли я понимаю, что по вашему опыту использования АОП, приемущества в: серьёзной интроспекции функций (вывод в телеметрию локальных переменных, указанных в АОП аннотации, как пример), глобальном действии аннотаций (log на модуль целиком)? А ещё что?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации