Информация об изменениях

Сообщение Re[11]: Рекурсивные функции от 22.05.2015 11:06

Изменено 22.05.2015 11:49 agat50

Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, agat50, Вы писали:


Q>>>>Не уверен. Идеальный пример для local functions — рекурсивные функции.

S>>>За которые в шарпе на сегодня прилетает минус в премию, если они используются без веских на то оснований Ибо платформы разные, а вот StackOverflowException практически везде обрабатывается как corrupted state exception, т.е. пипец котёнку.

A>>Ага, именно, даж поймать где вылетело никак до сих пор. Они это фиксить так и не собираются вроде?

S>С извращениями только. Или стек исключения (если сумели записать), или отладкой memory dump.
S>Меня в своё время это адски и неимоверно раздражало: любая, даже неявная рекурсия — потенциальная точка отказа для всего процесса. Блин.

Ну да, в дебаггере на продакшне очень удобно — иначе стек никак не поймать вроде, в unhandled для appdomain оно не долетает точно. Столкнулся на async void — очень уж понравилось некоторые вещи через рекурсию делать. И через пару недель работы тихая смерть. Хрен кстати вычистишь — решарпер все рекурсии не находит, только пофайлово, графы смотреть в 2012й ещё нельзя да и неявные не найти. Неужели это так сложно — добавить проверку в CLR на оставшийся стек и выбрасывть что-нибудь нормальное. На производительности никак не скажутся пара инструкций.
Re[11]: Рекурсивные функции
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, agat50, Вы писали:


Q>>>>Не уверен. Идеальный пример для local functions — рекурсивные функции.

S>>>За которые в шарпе на сегодня прилетает минус в премию, если они используются без веских на то оснований Ибо платформы разные, а вот StackOverflowException практически везде обрабатывается как corrupted state exception, т.е. пипец котёнку.

A>>Ага, именно, даж поймать где вылетело никак до сих пор. Они это фиксить так и не собираются вроде?

S>С извращениями только. Или стек исключения (если сумели записать), или отладкой memory dump.
S>Меня в своё время это адски и неимоверно раздражало: любая, даже неявная рекурсия — потенциальная точка отказа для всего процесса. Блин.

Ну да, в дебаггере на продакшне очень удобно — иначе стек никак не поймать вроде, в unhandled для appdomain оно не долетает точно. Столкнулся на async void — очень уж понравилось некоторые вещи через рекурсию делать. И через пару недель работы тихая смерть. Хрен кстати вычистишь — решарпер все рекурсии не находит, только пофайлово, графы смотреть в 2012й ещё нельзя да и неявные не найти. Неужели это так сложно — добавить проверку в CLR на оставшийся стек и выбрасывть что-нибудь нормальное. На производительности никак не скажутся пара инструкций.

Причем самому это мониторить тоже нельзя — стектрейсы всех потоков не получить кроссплатформенно.