Вопросы с памятью можно решить глобально на уровне управления процессами. Кончилась память -> immediate death. Это самое лучшее решение out of memory из всех возможных.
Ментальная энергия экономится, когда ты видишь последовательность написанных строчек и понимаешь, что они исполняются одна за другой, а не каким-то волшебным образом прыгая в случайных направлениях, когда прыжок инициирован где-то в глубине вызовов в одной из строчек.
Тут ещё важный вопрос - чью энергию вы пытаетесь сэкономить - того, кто напишет этот код в первый раз, или того, кто будет этот код сопровождать и смотреть на него в дебаггере? Энергия первого никому не интересна, потому что это незначительная часть в общем производственном процессе.
> Кончилась память -> immediate death. Это самое лучшее решение > понимаешь, что они исполняются одна за другой, а не каким-то волшебным образом прыгая в случайных направлениях
Имеено так. Только нужно добавить: "исполняются одна за другой или обрываются от immediate death". "immediate death" на уровне процесса OS или на каком-то другом уровне - не особо интересная подробность.
Возражаю: это довольно интересная подробность, потому что это довольно серьёзный boundary. Например, когда процесс умер, больше не нужно исполнять деструкторы.
Кроме того, ты точно знаешь, что никакой код в этом процессе уже не выполнится, т.е. не будет ситуаций, когда какой-нибудь цикл перейдёт на следующую итерацию имея half-baked intermediate state, потому что предыдущая была прервана пойманным exception'ом.
> Тут ещё важный вопрос - чью энергию вы пытаетесь сэкономить
Исхожу из того, что код 1 раз пишется, 10 раз отлаживается, 100 раз рефакторится, 1000 раз читается глазами коллег.
Код с исключениями вместо кодов - сильно экономит ресурсы для "рефакторится" и "читается".
Если какой-то код закладывается на конкретные положения return в середине функции, а не на исключение в любой точке функции - то его сложнее рефакторить. И вообще лапшу из if сложнее рефакторить. Переставил break или return не туда - всё, приехали, half-baked state.
Если надо уметь работать с 20 гигабайтами memory mapped строк, упаковаными по хафману, или показывать 60 FPS в видеоигре (около 20 миллионов тактов CPU на кадр), то про монады знать не положено.
Расскажи как тогда чтобы не зря? Carmack тут как-то говорил, что перенёс не то Wolf3d, а не то Doom на Haskell и вроде заработало. Но это старый код, старые объёмы памяти, не показательно.
Reply
Ментальная энергия экономится, когда ты видишь последовательность написанных строчек и понимаешь, что они исполняются одна за другой, а не каким-то волшебным образом прыгая в случайных направлениях, когда прыжок инициирован где-то в глубине вызовов в одной из строчек.
Тут ещё важный вопрос - чью энергию вы пытаетесь сэкономить - того, кто напишет этот код в первый раз, или того, кто будет этот код сопровождать и смотреть на него в дебаггере? Энергия первого никому не интересна, потому что это незначительная часть в общем производственном процессе.
Reply
> понимаешь, что они исполняются одна за другой, а не каким-то волшебным образом прыгая в случайных направлениях
Имеено так. Только нужно добавить:
"исполняются одна за другой или обрываются от immediate death".
"immediate death" на уровне процесса OS или на каком-то другом уровне - не особо интересная подробность.
Reply
Кроме того, ты точно знаешь, что никакой код в этом процессе уже не выполнится, т.е. не будет ситуаций, когда какой-нибудь цикл перейдёт на следующую итерацию имея half-baked intermediate state, потому что предыдущая была прервана пойманным exception'ом.
Reply
Можно ли взять и сконвертить строку в int в середине функции? А хрен его знает, можно ли сделать return в середине функции.
Reply
Исхожу из того, что код 1 раз пишется, 10 раз отлаживается, 100 раз рефакторится, 1000 раз читается глазами коллег.
Код с исключениями вместо кодов - сильно экономит ресурсы для "рефакторится" и "читается".
Если какой-то код закладывается на конкретные положения return в середине функции, а не на исключение в любой точке функции - то его сложнее рефакторить. И вообще лапшу из if сложнее рефакторить. Переставил break или return не туда - всё, приехали, half-baked state.
Reply
Reply
Это же все через flatmap.
Reply
Reply
Reply
Reply
Leave a comment