Маленькая рефлексия о C и ++

Apr 30, 2014 23:55

Пристально посмотрел на код компилятора C и список «фич» языка и, кажется, только сейчас осознал как всё грустно.
наверное, ничего нового для кого-то не скажу )

effectiveness, questionnaire, computer, c, thoughts, c++, software

Leave a comment

morfizm May 1 2014, 07:27:06 UTC
Приходи работать в Гугл, we do not use C++ exceptions, всё прямолинейно.

Reply

morfizm May 1 2014, 11:12:28 UTC
Вопросы с памятью можно решить глобально на уровне управления процессами. Кончилась память -> immediate death. Это самое лучшее решение out of memory из всех возможных.

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

Тут ещё важный вопрос - чью энергию вы пытаетесь сэкономить - того, кто напишет этот код в первый раз, или того, кто будет этот код сопровождать и смотреть на него в дебаггере? Энергия первого никому не интересна, потому что это незначительная часть в общем производственном процессе.

Reply

_winnie May 1 2014, 11:19:17 UTC
> Кончилась память -> immediate death. Это самое лучшее решение
> понимаешь, что они исполняются одна за другой, а не каким-то волшебным образом прыгая в случайных направлениях

Имеено так. Только нужно добавить:
"исполняются одна за другой или обрываются от immediate death".
"immediate death" на уровне процесса OS или на каком-то другом уровне - не особо интересная подробность.

Reply

morfizm May 1 2014, 11:21:29 UTC
Возражаю: это довольно интересная подробность, потому что это довольно серьёзный boundary. Например, когда процесс умер, больше не нужно исполнять деструкторы.

Кроме того, ты точно знаешь, что никакой код в этом процессе уже не выполнится, т.е. не будет ситуаций, когда какой-нибудь цикл перейдёт на следующую итерацию имея half-baked intermediate state, потому что предыдущая была прервана пойманным exception'ом.

Reply

_winnie May 1 2014, 11:50:52 UTC
half-baked state - это не особенность исключений. У обработка ошибок кодами возврата - тоже самое.

Можно ли взять и сконвертить строку в int в середине функции? А хрен его знает, можно ли сделать return в середине функции.

Reply

_winnie May 1 2014, 11:47:42 UTC
> Тут ещё важный вопрос - чью энергию вы пытаетесь сэкономить

Исхожу из того, что код 1 раз пишется, 10 раз отлаживается, 100 раз рефакторится, 1000 раз читается глазами коллег.

Код с исключениями вместо кодов - сильно экономит ресурсы для "рефакторится" и "читается".

Если какой-то код закладывается на конкретные положения return в середине функции, а не на исключение в любой точке функции - то его сложнее рефакторить. И вообще лапшу из if сложнее рефакторить. Переставил break или return не туда - всё, приехали, half-baked state.

Reply

morfizm May 4 2014, 23:25:19 UTC
"100 раз рефакторится". "Код с исключениями вместо кодов - сильно экономит ресурсы для "рефакторится" и "читается ( ... )

Reply

ex_juan_gan May 1 2014, 14:56:57 UTC
Про монады типа знать не положено.

Это же все через flatmap.

Reply

_winnie May 1 2014, 15:05:39 UTC
Если надо уметь работать с 20 гигабайтами memory mapped строк, упаковаными по хафману, или показывать 60 FPS в видеоигре (около 20 миллионов тактов CPU на кадр), то про монады знать не положено.

Reply

ex_juan_gan May 1 2014, 21:01:19 UTC
Это вы зря...

Reply

archaicos May 2 2014, 04:35:30 UTC
Расскажи как тогда чтобы не зря? Carmack тут как-то говорил, что перенёс не то Wolf3d, а не то Doom на Haskell и вроде заработало. Но это старый код, старые объёмы памяти, не показательно.

Reply


Leave a comment

Up