Ленивость+побочные эффекты
Второй день созерацию результаты "отсутствия монады IO, нечистоты и опциональной ленивости" в F#. Читаю из базы данных структуру данных ленивым образом - какой-то только, прости меня господи, херни не творится при этом. То значение прочитается после закрытия DataReader из которого оно читается, то команда окажется закрытой уже. Хорошо хоть в контексте коннекта и транзакции я уверен - вся работа происходит внутри их.
Предполагаю, что при определенном уровне сложности проще все будет сделать неленивым и всасывать в память, чем разбираться в стеках вызовов в которых половина фреймов - из автосгенеренных классах с малопонятными именами. Отладчиком по большей части этого всего пройтись невозможно - он не работает.
Предполагаю, что при определенном уровне сложности проще все будет сделать неленивым и всасывать в память, чем разбираться в стеках вызовов в которых половина фреймов - из автосгенеренных классах с малопонятными именами. Отладчиком по большей части этого всего пройтись невозможно - он не работает.
no subject
(no subject)
no subject
(no subject)
no subject
Continue of result_t | Stop
?).Ещё есть with-идиома, где открытие и освобождение ресурса явные (освобождение -- опционально), и в читающую функцию передаётся уже открытый "дескриптор" (то есть, он не выбросится просто так, при сборке мусора). Это полезно ещё корректной обработкой исключений, если они вдруг используются в фа-диезе.
Но самое грамотное тут -- коиндуктивные данные (в окамле это модуль Stream и stream parsers). Есть и удобства а-ля "ленивые списки" (те самые stream parsers), есть и теория под ними, есть и гарантии о количестве используемых ресурсов (в отличие от ленивых списков), хороши и комбинаторы поверх них.
И соглашусь -- ленивый подход тут плох.
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
если кто пойдёт по порочному пути
Re: если кто пойдёт по порочному пути
no subject