Category: философия

(no subject)

Вчера починил свой первый concurrent баг в Кложе. Совершенно банально делал сайд-эффекты в транзакции, а она, глядишь, действительно рестартовалась.

В связи с этим вопрос для умных на тему философии программирования. В Кложе есть функция last, возвращающая последний элемент последовательности. Работает она так — вызывает seq и бежит по получившемуся ISeq (это интерфейс типа итератора/связного списка, посмотреть текущий и взять следующий), пока не упрется в конец. Для векторов она работает точно так же, хотя у них последний элемент можно напрямую взять (random access, размер известен). Спрашивается — почему? Почему не сделать «если вектор, то оптимизация»? Я умный и ответ у Рича Хики прочитал, но интересно, если кто-нибудь еще это понимает.