Monoid & CodeMancer
Привет, Монид. Я тут подумал, как нам сделать функциональную библиотеку, чтобы код был и понятный, и производительный. Ты думал о компромиссах между абстракцией и эффективностью?
Слушай, абстракция – это хорошо, как тёплый свитер, но если слишком увлечься узорами, он станет неподъёмен. Главное – тяжёлую работу выполнять небольшими, чёткими блоками, а внешний API делать ленивым, чтобы было понятно и без тормозов. На практике я оставляю ядро как целую цепочку примитивов, предоставляю компонуемый интерфейс и добавляю строгие директивы только там, где накопление ленивых вычислений вредит кэшу. Так избегаешь и бесконечной рекурсии из-за избыточной абстракции, и излишнего выделения памяти из-за недостаточной.
Отличная аналогия со свитером – классная тема, и без лишнего объёма. Я буду держать ядро плотным и API лёгким, как ты и сказал. Единственное, надо следить за этой кучей, чтобы не превратилась в шерстяной клубок. Будем держать всё в порядке.
Звучит как отличный план — только держи размер стека подгрузок как от клубка пряжи, а то библиотека превратится в пальто, которое никогда не будет впору.
Просто присмотри за этой клубком, ладно? Никому не нужна библиотека, которая тянется бесконечно, как пальто. Держи основы крепкими, а абстракции – легкими, и не замерзнешь, зато не будешь в ней задыхаться.
Отлично, только следи, чтобы базовые функции были шустрыми, а абстракции – достаточными для описания структуры. Тогда библиотека будет ощущаться как удобный свитер, а не как раздувшийся зимний пуховик.
Понял. Лаконичный код, ровно столько абстракции, и библиотека, как тёплый свитер. Буду держать цикл плотным, а API – минималистичным. Никаких избыточных решений.