Флейм
GameDev.ru / Флейм / Форум / Архитектура без исключений (C++) (4 стр)

Архитектура без исключений (C++) (4 стр)

Поделиться
Страницы: 1 2 3 4 5 6 7 Следующая »
return [](){};Участникwww6 дек. 201721:28#45
beejah
> у него есть backtrace
Ну кстати, у крестоэксепшенов тоже в какой-то момент есть backtrace, без него тупо ничего не работало бы, только апи чтобы его достать нет.
beejahПостоялецwww6 дек. 201722:43#46
return [](){};
> Ну кстати, у крестоэксепшенов тоже в какой-то момент есть backtrace,
У крестоэксепшнов - нет. Ни в каком моменте. Они никак по времени жизни не пересекаются.
Ты же сам описывал, как это работает под виндами, например.

> без него тупо ничего не работало бы,
Так оно тупо и не работает.

> только апи чтобы его достать нет.
Случайно забыли, ага. А не потому, что не работает.

Хотя я и сам не понимаю, в чем именно тут принципиальная сложность.

Правка: 6 дек. 2017 22:46

return [](){};Участникwww7 дек. 20170:46#47
beejah
Он проходит по всему стеку вызовов и ему известны адреса функций, никто не мешает сохранить их и потом разрезовить в имена, кроме крестокомитета конечно

Правка: 7 дек. 2017 0:47

-Eugene-Постоялецwww7 дек. 20170:48#48
return [](){};
> и потом разрезовить в имена
Имена, которых нет.
return [](){};Участникwww7 дек. 20170:51#49
-Eugene-
С дебажной инфой есть, да и без нее никто не мешает сохранять имена отдельно в бинарь.
И можно просто выводить адреса, девелопер с дебыжной инфой разрезолвит их позже.

Правка: 7 дек. 2017 0:52

-Eugene-Постоялецwww7 дек. 20170:55#50
return [](){};
Ну т.е. по сути вливать PDB в бинарь.
У нас на работе exe 60 MB, PDB ~ 1 GB. Вот весело то будет обновления юзерам выкачивать.
war_zesПостоялецwww7 дек. 20172:44#51
return [](){};
> Я знаю, что травить нубов не хорошо и я должен сделать лекцию про то что такое
> compilation unit и как работает линковка, но мне лень.
при чем тут compilation unit и линковка? Речь о том что ты не показал код этих функций, и об их содержимом нужно догадываться по коду ассемблера. Я также не вижу в твоем примере ни сравнения исключений с возвращаемыми кодами. Ни тем более их превосходства.

И вообще:

Если не можешь объяснить что-то простым языком – значит ты сам не понимаешь этого в полной мере.
Альберт Эйнштейн


-Eugene-
> Даже я понял. А я не писал движки десять лет.
было заявление что код с исключениями работает быстрее чем проброска кодов. Я же вижу только увеличение количества инструкций. И это на синтетическом коде. в реальности оно будет более масштабно

Правка: 7 дек. 2017 3:24

war_zesПостоялецwww7 дек. 20173:07#52
beejah
> Ты точно не путаешь "оптимальный" и "компактный"?
ну смотри (компилятор clang)
+ Показать

против:

+ Показать

Компактно? да. Наглядно? да. И я не вижу чтобы исключение было быстрее

Правка: 7 дек. 2017 8:20

war_zesПостоялецwww7 дек. 20173:22#53
усложняю пример
extern int i;
extern int i2;

bool foo1()
{
  i += 120;
  if ( i == 210 ) return_false / throw_x;
  i2 = i;
  return true;
}

c return

+ Показать

c throw

+ Показать

Правка: 7 дек. 2017 8:21

nesПостоялецwww7 дек. 20178:16#54
war_zes
Ритурн слишком велИк, чтоб объяснять что-то нам халопам.
Он у нас цэпэпэ боярин.
+ Показать
cNoNimУчастникwww7 дек. 20179:30#55
мне вот интересно через сколько лет, варзес поймет что ретурн показывается стоимость использования исключений, а не стоимость их вызова...

что самое интересно, через сколько лет он поймет что стоимость использования важнее чем стоимость бросания,
потому что это блин исключения

war_zesПостоялецwww7 дек. 20179:56#56
cNoNim
> стоимость использования исключений,
Я ни слова не говорил о стоимости вызова исключения. Ты смотрел мои примеры?

где ты там увидел что я сравниваю стоимость вызова?


Специально для тебя - вот что происходит ПОСЛЕ проверки, БЕЗ выполнения условия этой проверки (блин, то есть когда код НЕ доходит до вызова исключения или ретурна, а продолжает работу внутри функции):


без исключения

 xor     eax, eax

против

с добавлением исключений:

mov     dword ptr [rip + i2], eax
mov     al, 1
pop     rcx

мне вот интересно - когда вы уже начнете читать что вам пишут, а не делать выводы с ваших фантазий?

Правка: 7 дек. 2017 10:01

nesПостоялецwww7 дек. 201710:02#57
Вот вы гребаные умники, вместо того чтоб тупо глумиться на 100500 страниц темы, могли бы по-человечески объяснить, вот уж эта жидомасонская натура...
Panzerschrek[CN]Участникwww7 дек. 201710:07#58
nes
> Вот вы гребаные умники, вместо того чтоб тупо глумиться на 100500 страниц темы,
> могли бы по-человечески объяснить, вот уж эта жидомасонская натура...
Расслабься детка, это флейм
MerrewendПостоялецwww7 дек. 201710:29#59
nes
war_zes
Поясняю:
ретурн обещал вот что: Могу привести пример где компилятор сгенерит более оптимальный код с исключениями чем с ретурн кодами
Окончательный вариант http://www.gamedev.ru/flame/forum/?id=231976&page=2#m17 это и делает.
Естественно, что условие, которое решит возвращать false/кидать исключение - будет одним и тем же. Никто не обещал, что решение о выбросе исключения будет приниматься без if. Поэтому код внутри функций не важен, важны только сигнатуры (noexcept).
Предполагается сценарий, когда вызов следующей функции возможен только при успешном завершении предыдущей. В коде с возвратом нужно проверять результат каждый раз. В коде с исключениями проверка не нужна, успешный ход исполнения бесплатен (неуспешный дорог, но это, блин, исключение, оно бывает только в исключительных обстоятельствах).


war_zes
> c return

        cmp    eax, 210
        jne    .LBB0_2
        ...
.LBB0_2:
        mov    dword ptr [rip + i2], eax
        mov    al, 1
        ret


> c throw
        cmp    eax, 210
        je      .LBB0_2
        mov    dword ptr [rip + i2], eax
        mov    al, 1
        pop    rcx
        ret
.LBB0_2
        ...

Но ведь это одно и то же (je vs jne)

Страницы: 1 2 3 4 5 6 7 Следующая »

/ Форум / Флейм / Программирование

2001—2017 © GameDev.ru — Разработка игр