metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2012-06-16 09:06 pm

Стектрейсы функциональщины

К этому: http://jdevelop.livejournal.com/1969110.html
Вообще, в F# та же проблема. Когда функциональный язык сделан поверх не способствующей тому платформы, стеки вызовов превращаются в кромешный ад.
Причем, если при этом фигурирует ленивость - можно сразу вешаться, т.к. найти источник ошибки, не натыкав во все места принудительную активизацию всех ленивых величин, практически нереально (при работе с БД и утеканием итераторов из открытых запросв это еще обычно и ошибку вылечит).
Альтернатива, видимо - некая визуализация потоков данных и показ "откуда пришла эта хрень".

А еще нужно внутренности жабы и дотнета исключать из стек-трейса, заменяя "известную последовательность" вызовов одной строкой типа "кложурь долбится в интероп за полем".

[identity profile] alexott.livejournal.com 2012-06-16 06:30 pm (UTC)(link)
ну вот так и отлаживаем :-) в кложуре есть проблема с тем, что часть кода ленивая и откуда пришла основная бага - не всегда понятно

[identity profile] blackyblack.livejournal.com 2012-06-16 06:37 pm (UTC)(link)
Да знаем мы, как вы отлаживаете. В репле набиваете построчно и смотрите, где сломается.

[identity profile] alexott.livejournal.com 2012-06-16 06:39 pm (UTC)(link)
в моем текущем проекте, репл не особо помогает, поскольку многотредовость и т.п.

[identity profile] metaclass.livejournal.com 2012-06-16 06:52 pm (UTC)(link)
Не, я обычно пишу программу и поэтапно запускаю, смотрю чтобы не сломалось.

[identity profile] blackyblack.livejournal.com 2012-06-16 06:57 pm (UTC)(link)
С кложурью у меня так не получалось.

[identity profile] blackyblack.livejournal.com 2012-06-16 06:37 pm (UTC)(link)
Надо в стектрейсы дописывать параметры для функции и комментарии к функциям. Тогда будет ничё так.

[identity profile] metaclass.livejournal.com 2012-06-16 06:51 pm (UTC)(link)
Я до сих пор не понимаю, почему так не делают, хотя бы в отладочном режиме.

[identity profile] blackyblack.livejournal.com 2012-06-16 06:59 pm (UTC)(link)
Может ява этого тупо не умеет?

[identity profile] antilamer.livejournal.com 2012-06-16 07:18 pm (UTC)(link)
Дебаггеры-то умеют, хотя и не всегда. Могли бы и в API вынести.

[identity profile] vinslivins.livejournal.com 2014-01-22 06:08 am (UTC)(link)
да, кстати, старая тема. никогда не понимал, какая техническая в этом проблема?)

[identity profile] w00dy.livejournal.com 2012-06-16 06:46 pm (UTC)(link)
ребе, это ещё вменяемый стектрейс. А вот когда у вас там пачка inner exception с DynamicInvoke, вот это жопа полнейшая. Только понимае того что там творится спасает (особенно если это что-то самописное)

[identity profile] gds.livejournal.com 2012-06-16 07:06 pm (UTC)(link)
1. можно фильтровать всякое из внутренностей.

2.
> функциональный язык сделан поверх не способствующей тому платформы
> принудительную активизацию всех ленивых величин

Тут, как бы, вопрос будет независимо от платформы. Рекомендую на х-е покодить, будет ровно тот же опыт, если брать реальные задачи (хотя бы ту же работу с БД). Лентяйка, чо. Не связано с функциональностью языка программирования, связано именно с ленивостью.

3.
> при работе с БД и утеканием итераторов

iteratees для простой работы -- самое то. Даже для clojure применить можно.

[identity profile] nicka-startcev.livejournal.com 2012-06-16 07:15 pm (UTC)(link)
и на что только не идут люди, чтоб не делать нормальные логи..

[identity profile] gds.livejournal.com 2012-06-16 07:37 pm (UTC)(link)
кстати да. Только понятие "лог" в ленивом языке -- оно как бы очень размыто.

[identity profile] nivanych.livejournal.com 2012-06-17 07:09 am (UTC)(link)
Иначе говоря, в _чистом_ ленивом языке приходится делать всякие Writer'ы, и соответственно, при нужде в логах, получаем какбе и уже другую функцию.
Но можно же и unsafePerformIO! ;-)
А что делают в чистом энергичном языке? Там это понятие не размыто?

[identity profile] antilamer.livejournal.com 2012-06-16 07:19 pm (UTC)(link)
Отладку ленивости можно чуть упростить - https://github.com/jkff/htrace/blob/master/Debug/HTrace.hs

[identity profile] theiced.livejournal.com 2012-06-16 07:44 pm (UTC)(link)
перл, закапывайте.

[identity profile] antilamer.livejournal.com 2012-06-16 07:51 pm (UTC)(link)
В смысле? Мне это реально помогло за час найти проблему, которую я до этого отлаживал два дня.

[identity profile] zamotivator.livejournal.com 2012-06-17 01:07 am (UTC)(link)
По-моему во всём этом есть что-то глобально неправильное

[identity profile] nivanych.livejournal.com 2012-06-17 03:56 am (UTC)(link)
Неправильно то, что до сих пор, мало уделяли внимания ресурсной семантике и её типизации.
А порой, она весьма нетривиальная.

[identity profile] antilamer.livejournal.com 2012-06-17 06:44 am (UTC)(link)
Какая уж там типизация в кложуре-то.

[identity profile] nivanych.livejournal.com 2012-06-17 06:53 am (UTC)(link)
Я так понял "во всём этом" ;-)

[identity profile] metaclass.livejournal.com 2012-06-17 06:55 am (UTC)(link)
В F# с типами, конечно, чуть получше, но с стек-трейсами та же печаль.

[identity profile] antilamer.livejournal.com 2012-06-17 07:19 am (UTC)(link)
Ну да, они предназначались для примитивных случаев использования функций. Можно попробовать почитать ресерч про стектрейсы в функциональных языках и попытаться сэмулировать...

[identity profile] thesz.livejournal.com 2012-06-17 07:32 pm (UTC)(link)
Ещё раз повторю, что в ghc 7.4.1 всё нормально с трейсами.

Рекомендую.

[identity profile] zamotivator.livejournal.com 2012-06-17 02:18 pm (UTC)(link)
Километровые стек-трейсы, глобальные энергичные форсеры ленивости, отладка по два дня, чтобы понять где проблема

[identity profile] antilamer.livejournal.com 2012-06-17 04:47 pm (UTC)(link)
Ну, первое из этого - результат использования примитивного средства, не предназначавшегося для программ со столь обильным и разносторонним использованием понятия "функция". Хотя я признаю, что альтернативы ему нет - как нет альтернативы, ну скажем, приборной панели с регистрами в виде лампочек и рычажков - при повышении уровня языка отладка на низком уровне становится сложнее, зато обычно упрощается на высоком уровне.

Второе и третье - одно и то же, и я и сам не уверен, приносит ли ленивость на нынешнем уровне развития технологий в среднем больше вреда или пользы. С удовольствием покодил бы на языке типа Хаскелла, только без ленивости.

[identity profile] freiksenet.livejournal.com 2012-06-17 04:59 pm (UTC)(link)
Это кстати проблема чисто кложури и Ф-шарпа, а не ФП в целом. В коммон лиспе одни из самых лучших стэк трейсов, с инспектором и возможностью в любом окне стека чтото переопределить и запустить с этого момента (это уже в слайм). С улучшением компилятора думаю всё будет ок.

[identity profile] thesz.livejournal.com 2012-06-17 07:30 pm (UTC)(link)
Если что, то стек трейсы в современном Хаскеле (ghc 7.4.1) вполне ничего себе так.