metaclass: (Default)
[personal profile] metaclass
Забыл добавить using для IEnumerator в функции intersperse для IEnumerable.
Убил два часа разбираясь, почему после одного исключения при ленивой загрузке графа объектов из базы в F# дальше начинают сыпаться другие исключения, насчет незакрытого DataReader. Оказалось - расставлял функцией intersperse запятые между именами полей, для отладочной печати списка, имена полей были ленивые и на одном из вызовов сыпалось первое исключение, а sprintf "%A", оказывается, не кидает наверх исключения в ToString(), поэтому прога не валилась, а дальше начинали сыпаться исключения из-за неубитого IEnumerator, внутри которого жил DataReader.
И все это блин в сплошной ленивости и 30-уровневых стеках вызова, из которых две трети - сплошные нечитабельные автосгенерированные компилятором F# замыкания.
В общем, в обычных приложениях отладчик не нужен, а в таких он еще и бесполезен - скачет по программе произвольным образом по причине ленивости. И стеки вызова при исключениях тоже бесполезны, потому что вся программа представляет собой адский граф фильтров для потоков данных из БД в конечный результат.

Date: 2011-02-16 09:27 pm (UTC)
From: [identity profile] theiced.livejournal.com
гыгыгы :)

Date: 2011-02-16 11:11 pm (UTC)
From: [identity profile] avnik.livejournal.com
Юниттесты же.

Date: 2011-02-17 09:09 am (UTC)
From: [identity profile] cp-poster.livejournal.com
"теперь у вас 2 проблемы"

Date: 2011-02-17 04:23 pm (UTC)
From: [identity profile] gds.livejournal.com
> sprintf "%A", оказывается, не кидает наверх исключения в ToString()

А чому?

Date: 2011-02-17 04:40 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Считается отладочной функцией, видимо, чтобы отладка-логи прогу не ломали заведомо.
log4net точно так же работает.

Date: 2011-02-18 09:13 am (UTC)
From: [identity profile] noop.livejournal.com
По жизни везде и всегда отключаю поддержку исключений, так что не могу даже искренне посочувствовать.

Date: 2011-02-18 09:15 am (UTC)
From: [identity profile] metaclass.livejournal.com
"отключаю поддержку исключений" - я не могу понять смысл этой фразы.

Date: 2011-02-18 11:25 am (UTC)
From: [identity profile] noop.livejournal.com
В компиляторах C++/Objective С/Unity (и видимо много где еще) есть возможность отключить поддержку исключений. Что приводит, кроме прочего, к генерации более компактного и быстрого кода.

Date: 2011-02-18 12:00 pm (UTC)
From: [identity profile] metaclass.livejournal.com
В С++, по слухам, исключения не принято использовать.
У меня же C#/F#, где исключения являются общепринятым и стандартным способом обработки ошибок.

Date: 2011-02-18 01:02 pm (UTC)
From: [identity profile] noop.livejournal.com
Слухи верны. Пытаясь использовать исключения, создаешь себе больше проблем, чем решаешь. И более медленный код впридачу. Да и зачем лишний слой сложности там, где ее и до этого было предостаточно? Только мне почему-то показалось, что не так уж все замечательно с исключениями и у тебя. Если результат неудобоварим для дебагера, то это серьезный дефект либо дебагера, либо реализации исключений в выбранном тобой языке. Я-то думал, managed языки для того и используют, чтобы избежать трудноотслеживаемых побочных эффектов.

Date: 2011-02-18 02:05 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Исключения тут как раз нормальные.

Дебаггер неудобоварим по другой причине - массовое использование функций высшего порядка, ленивость и реализация компилятора F#, т.е. стек вызовов просто скачет по всем исходникам туда-сюда, перемежаясь автоматически сгенерированными компилятором методами.

Date: 2011-02-18 02:40 pm (UTC)
From: [identity profile] noop.livejournal.com
Гм. В таких случаях начинаешь думать о декомпозиции, рефакторинге и юнит тестах :)

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 Sep. 3rd, 2025 10:25 am
Powered by Dreamwidth Studios