А вот теперь пример безумия
В мире жабы(в смысле языка програмирования) есть какая-то тонкая шиза, которая порождает миллиарды фреймворков.
Вот пример про логгирование. Ну блин, как можно столько наворотить на пустом месте?
Самая хохма там - это то, что некоторые упоминают использование логгеров через дополнительный уровень абстракции. Мне иногда для вывода в текстовый лог и на экран юзеру приходится делать обвязку, дословно дублирующую интерфейс логгера, и меня это напрягает, потому что это натурально тупая копипаста. А народ такое массово использует и не парится.
По-моему, избавление от шизы надо начать с сжигания GoF и фаулера на костре из их книжек. А затем внедрять в мейнстримные языки всякую функциональщину, вроде функций высшего порядка, каррирования и вывода типов, после чего половина врапперов, фасадов и прочего копипастного мрака становится не нужна.
Вот пример про логгирование. Ну блин, как можно столько наворотить на пустом месте?
Самая хохма там - это то, что некоторые упоминают использование логгеров через дополнительный уровень абстракции. Мне иногда для вывода в текстовый лог и на экран юзеру приходится делать обвязку, дословно дублирующую интерфейс логгера, и меня это напрягает, потому что это натурально тупая копипаста. А народ такое массово использует и не парится.
По-моему, избавление от шизы надо начать с сжигания GoF и фаулера на костре из их книжек. А затем внедрять в мейнстримные языки всякую функциональщину, вроде функций высшего порядка, каррирования и вывода типов, после чего половина врапперов, фасадов и прочего копипастного мрака становится не нужна.
no subject
no subject
no subject
no subject
Он хотел сказать WriterT w IO a :)
no subject
no subject
no subject
no subject
no subject
no subject
Ну и в log.txt потом (наверное) прочитаем:
no subject
no subject
no subject
no subject
Если, к примеру, взять апач: пришёл запрос, ушёл запрос, кончилась память.
Все они и так в IO, нет никаких проблем.
Есть конечно в программах какие-то долгие и сложные вычисления без взаимодействия с миром, но если мы доверяем функции, которая их выполняет, то логи внутри неё нам не нужны.
no subject
no subject
А откуда берётся то, что у неё на входе? Это либо пакеты из сети, либо файлы с диска, лбо пользовательский ввод, либо последствия многопоточности.
Всё это выполняется в IO.
Т.е. перед выполнением "больших сложных вычислений" мы из IO естественным образом можем положить в лог всё, что нам потребуется для отладки.