Size: a a a

2021 August 18

VB

Vladimir Berezenko in ru.nim.talks
Походу там как-то криво маппинг на с++ методы делается
источник

f

for(int c; (c = getc... in ru.nim.talks
нет, там все те же самые сравнения строк что и на С бекенде
источник

VB

Vladimir Berezenko in ru.nim.talks
Я про другое. То код который ты приводил, где вызов С++ кода из nim работает значительно медленнее чем вызов этого-же самого кода из чистого С++. Делаю вывод что маппинг C++->nim такой-себе.
источник

VB

Vladimir Berezenko in ru.nim.talks
где-то там есть довольно некислый оверхед
источник

VB

Vladimir Berezenko in ru.nim.talks
мне вот интересно с какими флагами идёт сборка С++ кода...
источник

f

for(int c; (c = getc... in ru.nim.talks
Сгенерированная функция для тестов через case

N_LIB_PRIVATE N_NIMCALL(void, test__MmxJjZjwfP4EJE3DoleJVg_2)(void) {
 /*Opcode evaluation for nim swtich case*/
 {
   tyObject_OpcNim__nttx9cHOA9bajSb35w9aHStFw** instr;
   NI T2_;
   instr = (tyObject_OpcNim__nttx9cHOA9bajSb35w9aHStFw**)0;
   NI i = ((NI) 0);
   T2_ = (instructionsNim__nSOFwcm4xFfHfWHBOYiqXg ? instructionsNim__nSOFwcm4xFfHfWHBOYiqXg->len : 0);
   NI L = T2_;
   {
     while (1) {
       if (!(i < L)) goto LA4;
       instr = &instructionsNim__nSOFwcm4xFfHfWHBOYiqXg->data[i];
       eval__TShPy9aagvuYduOdEj0C0Kg((*(*instr)), aRes__by4aCM7kLnrU5g4Fgk9be0g_2);
       i += ((NI) 1);
     } LA4: ;
   }
 }
}

для вызова методов


N_LIB_PRIVATE N_NIMCALL(void, test__MmxJjZjwfP4EJE3DoleJVg)(void) {
 /* opcode evaluation for CXX*/
 {
   Opc** instr;
   NI T2_;
   instr = (Opc**)0;
   NI i = ((NI) 0);
   T2_ = (instructionsCxx__Zbm6Mj9cYLbBwZXuWmLcaQg ? instructionsCxx__Zbm6Mj9cYLbBwZXuWmLcaQg->len : 0);
   NI L = T2_;
   {
     while (1) {
       if (!(i < L)) goto LA4;
       instr = &instructionsCxx__Zbm6Mj9cYLbBwZXuWmLcaQg->data[i];
       (*(*instr)).eval(aRes__by4aCM7kLnrU5g4Fgk9be0g);
       i += ((NI) 1);
     } LA4: ;
   }
 }
}
источник

f

for(int c; (c = getc... in ru.nim.talks
если почтистить и дифнуть
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
" убрать релиз/danger то цифры" не стоит забывать, что тогда будет минимальная оптимизация от C/C++ компилятора, т.к. -O3 включается только с --opt:speed
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
и -d:release вместе с --overflow_checks:off не нужны с -d:danger :)
источник

f

for(int c; (c = getc... in ru.nim.talks
я тестирую весь код вместе, так что важны только относительные цифры
источник

f

for(int c; (c = getc... in ru.nim.talks
мне нужно периодически проверять без danger/release но так чтобы оно не умирало при умножении в какой-то момент
источник

VB

Vladimir Berezenko in ru.nim.talks
хм. посмотрел код и не понял откуда тогда такой оверхедище? разница-то конская между С++ чистым и С++ из ним.
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
да, только методы в ниме очень медленные с arc/orc :)
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
в десятки раз медленнее чем с refc
источник

VB

Vladimir Berezenko in ru.nim.talks
не может-же быть что взятие указателя на ф-цию из массива и потом вызов её с кастами такой тяжелый...
источник

f

for(int c; (c = getc... in ru.nim.talks
я бы не сказал что это )
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
ну я ещё давно тестил, и там реально разница огромная
источник

f

for(int c; (c = getc... in ru.nim.talks
И у меня проблема в бенчмарке, то что в статусе дает
источник

M(

MIT/Yardanico (alt) in ru.nim.talks
помню nimes тестил с arc (он методы юзал) на arc было фпс 5 когда как на refc было отлично
источник