Haskell (GHC) и память
От: Schade Россия  
Дата: 08.02.08 15:49
Оценка:
Что-то не получилось найти ответ на такой вопрос:
Допустим, у нас обычное десктопное приложение, которое может запросить много памяти (не в силу неправильного обращения с хаскелем, не space leak, а ввиду действий пользователя). Много — это возможно больше, чем влазит в адресное пространство на 32-х битной машине.
Нормальным поведением приложения в таком случае могло бы быть например такое — запрошенная пользователем операция должна завершиться с ошибкой, но приложение — продолжить работу без потери данных. Т.е. нужно отловить исключение OutOfHeap. И тут выясняется, что GHC "currently does not throw OutOfHeapException". Создаем, для примера, большое кол-во IOUArray — после где-то 1,8 гб процесс тупо завершается с ошибкой, позволяя только утешительный приз — вывести собственное сообщение об ошибке (OutOfHeapHook). В то же время, например, mallocBytes из Foreign.Marshal.Malloc кидает исключение, которое успешно перехватывается. Получается, что при большом объеме выделенной памяти приложение может благополучно уйти не попрощавшись.
Поиск в сети показывает, что с разработчиками GHC этот вопрос обсуждался лет 8 назад — и с тех пор ничего не изменилось. И, судя по всему, мало кого это волнует, т.е. шансов что кто-либо этим озаботится в ближайшее время мало.

Может я чего-то недопонимаю и эту ошибку как-то можно отловить?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.