Size: a a a

pro.graphon (and gamedev)

2020 November 21

AT

Anatoly Tomilov in pro.graphon (and gamedev)
Arelav
Ну то есть мне интересно, что в этом плане можно сделать в рантайме такого, что нельзя сделать во время компиляции
В во время компиляции есть единицы трансляции (TU, translation unit). При обычной линковке ничего не поделать. Но если есть LTO (clang/GCC, link time optimization)/LTCG (MSVC, link time code generation) или даже тот же JIT, то все варианты использования известны и некоторые оптимизации становятся возможны
источник

A

Arelav in pro.graphon (and gamedev)
Anatoly Tomilov
В во время компиляции есть единицы трансляции (TU, translation unit). При обычной линковке ничего не поделать. Но если есть LTO (clang/GCC, link time optimization)/LTCG (MSVC, link time code generation) или даже тот же JIT, то все варианты использования известны и некоторые оптимизации становятся возможны
Ну с точки зрения линковки да, но есть же лто как ты сам и написал
источник

AF

Aidar Fattakhov in pro.graphon (and gamedev)
Arelav
Ну с точки зрения линковки да, но есть же лто как ты сам и написал
Jit можно оптимизировать в ходе работы
источник

AF

Aidar Fattakhov in pro.graphon (and gamedev)
Получается такой profile guided optimization + инфа о данных
источник

AP

Alexander Potapov in pro.graphon (and gamedev)
с помощью jit вообще можно генерировать разный код в зависимости от переменных, известных только в рантайме
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
Alexander Potapov
с помощью jit вообще можно генерировать разный код в зависимости от переменных, известных только в рантайме
Только теоретически?
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
Anatoly Tomilov
Только теоретически?
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
Не только
источник

A

Arelav in pro.graphon (and gamedev)
Alexander Potapov
с помощью jit вообще можно генерировать разный код в зависимости от переменных, известных только в рантайме
Ну можно да, например sql запросы компилить, но как это относится к конкретному вопросу с виртуальными методами неоч понятно
источник

AP

Alexander Potapov in pro.graphon (and gamedev)
Anatoly Tomilov
Только теоретически?
нет почему, в шарпах к примеру есть Expressions, которые могу работать с любыми переменными, и при этом jit ом будут преобразовываться в нативный код в момент вызова
источник

U

UsernameAK in pro.graphon (and gamedev)
Arelav
Там типо иф на то какой это объект или как это должно работать? Типо если в два разных объекта?
нет, там однозначно можно вывести тип просто)
источник

U

UsernameAK in pro.graphon (and gamedev)
и оно нагенерило несколько разных версий функции
источник

AP

Alexander Potapov in pro.graphon (and gamedev)
так как нет игры с указателями, теоретически можно проанализировать поток программы и сказать, где какой тип во многих случаях
источник

A

Arelav in pro.graphon (and gamedev)
UsernameAK
и оно нагенерило несколько разных версий функции
И в чем инлайн?
источник

U

UsernameAK in pro.graphon (and gamedev)
Arelav
И в чем инлайн?
... в которых оно заинлайнило разные имплементации метода
источник

A

Arelav in pro.graphon (and gamedev)
UsernameAK
... в которых оно заинлайнило разные имплементации метода
Как произошел выбор между этими разными имплементациямт в тот момент когда конечный тип неизвестен? Ну то есть понятно, что например ты мог создавать объект рядом с вызовом, но такое теоритически ничего не мешает и в компайл тайме соптимизировать
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
Arelav
Как произошел выбор между этими разными имплементациямт в тот момент когда конечный тип неизвестен? Ну то есть понятно, что например ты мог создавать объект рядом с вызовом, но такое теоритически ничего не мешает и в компайл тайме соптимизировать
Известен.
источник

AT

Anatoly Tomilov in pro.graphon (and gamedev)
Ты мог создать в другом TU
источник

U

UsernameAK in pro.graphon (and gamedev)
Arelav
Как произошел выбор между этими разными имплементациямт в тот момент когда конечный тип неизвестен? Ну то есть понятно, что например ты мог создавать объект рядом с вызовом, но такое теоритически ничего не мешает и в компайл тайме соптимизировать
там выводится элементарно, поскольку присваивается эта штука только в конструкторе
источник

A

Arelav in pro.graphon (and gamedev)
UsernameAK
там выводится элементарно, поскольку присваивается эта штука только в конструкторе
Как ты выведешь если у тебя объект полежал в каком то контейнере?
источник