Ленивость+побочные эффекты
Второй день созерацию результаты "отсутствия монады IO, нечистоты и опциональной ленивости" в F#. Читаю из базы данных структуру данных ленивым образом - какой-то только, прости меня господи, херни не творится при этом. То значение прочитается после закрытия DataReader из которого оно читается, то команда окажется закрытой уже. Хорошо хоть в контексте коннекта и транзакции я уверен - вся работа происходит внутри их.
Предполагаю, что при определенном уровне сложности проще все будет сделать неленивым и всасывать в память, чем разбираться в стеках вызовов в которых половина фреймов - из автосгенеренных классах с малопонятными именами. Отладчиком по большей части этого всего пройтись невозможно - он не работает.
Предполагаю, что при определенном уровне сложности проще все будет сделать неленивым и всасывать в память, чем разбираться в стеках вызовов в которых половина фреймов - из автосгенеренных классах с малопонятными именами. Отладчиком по большей части этого всего пройтись невозможно - он не работает.
no subject
no subject
Что альтернатива - сесть и 99% времени заниматься работой уровня "студент второго курса на полставки". Т.е., неделями писать "таблица -> поля -> CRUD-запросы -> гуй редактора -> печатная форма"хN, не приходя в сознание.
Я лучше это же самое время подолблюсь с кодогенератором, который сильно отличается от всего того, что мы обычно делаем, а потом сгенерю все на нем. И потом каждый раз когда будут парить мозг всякой ересью - буду опять генерить.
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
Прям щаз пытаюсь понять, как сделан Takusen и насколько это практично: http://okmij.org/ftp/Haskell/fold-stream.lhs
если кто пойдёт по порочному пути
Я начал с предыдущей ссылки, и это было неправильно.
Re: если кто пойдёт по порочному пути
no subject