metaclass: (Default)
[personal profile] metaclass
Второй день созерацию результаты "отсутствия монады IO, нечистоты и опциональной ленивости" в F#. Читаю из базы данных структуру данных ленивым образом - какой-то только, прости меня господи, херни не творится при этом. То значение прочитается после закрытия DataReader из которого оно читается, то команда окажется закрытой уже. Хорошо хоть в контексте коннекта и транзакции я уверен - вся работа происходит внутри их.

Предполагаю, что при определенном уровне сложности проще все будет сделать неленивым и всасывать в память, чем разбираться в стеках вызовов в которых половина фреймов - из автосгенеренных классах с малопонятными именами. Отладчиком по большей части этого всего пройтись невозможно - он не работает.

Date: 2010-03-28 05:30 pm (UTC)
From: [identity profile] vp.livejournal.com
Ээээ.. Хотели ? Отгребите! :)

Date: 2010-03-28 06:16 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Знаешь в чем зло?
Что альтернатива - сесть и 99% времени заниматься работой уровня "студент второго курса на полставки". Т.е., неделями писать "таблица -> поля -> CRUD-запросы -> гуй редактора -> печатная форма"хN, не приходя в сознание.
Я лучше это же самое время подолблюсь с кодогенератором, который сильно отличается от всего того, что мы обычно делаем, а потом сгенерю все на нем. И потом каждый раз когда будут парить мозг всякой ересью - буду опять генерить.

Date: 2010-03-28 05:37 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
Ребе, не читайте данных. Передайти в то, что их читает, функцию для свертки (fold) и сверните. Чудес сильно поубавиться.

Date: 2010-03-28 05:46 pm (UTC)
From: [identity profile] metaclass.livejournal.com
О, а ведь таки это мысль.

Функция там будет, конечно, зело ужасная, т.к. там внутри чтения еще несколько вложенных чтений, но скорее всего это должно помочь.

Date: 2010-03-28 06:30 pm (UTC)
From: [identity profile] gds.livejournal.com
fold посоветовали, он хороший, но будут заморочки в случаях, когда данных много, а остановиться надо рано (исключение кидать? возвращать Continue of result_t | Stop?).
Ещё есть with-идиома, где открытие и освобождение ресурса явные (освобождение -- опционально), и в читающую функцию передаётся уже открытый "дескриптор" (то есть, он не выбросится просто так, при сборке мусора). Это полезно ещё корректной обработкой исключений, если они вдруг используются в фа-диезе.
Но самое грамотное тут -- коиндуктивные данные (в окамле это модуль Stream и stream parsers). Есть и удобства а-ля "ленивые списки" (те самые stream parsers), есть и теория под ними, есть и гарантии о количестве используемых ресурсов (в отличие от ленивых списков), хороши и комбинаторы поверх них.
И соглашусь -- ленивый подход тут плох.

Date: 2010-03-28 07:05 pm (UTC)
From: [identity profile] nealar.livejournal.com
У Олега был специальный такой fold, который может на любом шаге оборвать вычисление и выйти. Правда, не знаю, на какие языки оно переносимо сходу, а на какие - с бубном.

Date: 2010-03-28 08:00 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Особо в этом комментарии радует, что все кому надо - знают, о каком Олеге идет речь и где это искать :))

Date: 2010-03-29 04:20 pm (UTC)
From: [identity profile] lastwalrus.livejournal.com
Ну значит тебе еще рано в секту :))

Date: 2010-03-29 06:18 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Так я тоже знаю о чем речь :)

Date: 2010-03-29 08:39 pm (UTC)
From: [identity profile] alpha-cygnus.livejournal.com
А я не знаю. Доктор, что со мной? Не, а правда, что за Олег? Может я всё же знаю, но не знаю, что знаю?

Date: 2010-03-30 05:53 am (UTC)
From: [identity profile] nealar.livejournal.com
Олег Киселёв http://okmij.org/ftp.

Всё, теперь ты - наш :))))

Date: 2010-03-28 08:04 pm (UTC)
From: [identity profile] gds.livejournal.com
если брать в общем, у Олега есть delimited call/cc, там не только fold может оборвать вычисление, а вообще любая функция. Хорошая штука, но из-за бубна как раз не понравилась.

Date: 2010-03-28 08:35 pm (UTC)
From: [identity profile] nealar.livejournal.com
delimited continuations я ещё не курил.
Прям щаз пытаюсь понять, как сделан Takusen и насколько это практично: http://okmij.org/ftp/Haskell/fold-stream.lhs
From: [identity profile] nealar.livejournal.com
Сначала читать вот это: http://okmij.org/ftp/papers/LL3-collections-enumerators.txt

Я начал с предыдущей ссылки, и это было неправильно.
From: [identity profile] metaclass.livejournal.com
А, во. Я как раз не мог понять с чего там начинать - слишком много не совсем организованных ссылок.

Date: 2010-03-28 10:16 pm (UTC)
From: [identity profile] lionet.livejournal.com
Олеговые Iteratees надо заюзать, да. Как раз он пишет о том на что ты наткнулся: ленивость и внешние ресурсы работают плохо друг с другом. Альтернатива - Iteratees.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Nov. 21st, 2025 03:12 am
Powered by Dreamwidth Studios