Показать сообщение отдельно
  #2 (permalink)  
Старый 30.06.2013, 22:45
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от Дзен-трансгуманист Посмотреть сообщение
Погоди, то есть, если я пишу object.method(), и таких object'ов с общим прототипом (или свойством-функцией) у меня хотя бы две штуки, то эти вызовы обречены пожизненно прозябать в стеке ВМ?
Хочешь сказать, что классы проигрывают процедурщине by design? Что-то не верится. Или я неправильно понял?
второе

если не совру: если при инлайне меняется контекст, то функция не может быть заинлайнена.

ещё она не инлайнится при вызове функции через call\apply.

Сообщение от Дзен-трансгуманист Посмотреть сообщение
Много кода там, где много неоднозначностей и абстракций.
Стоило мне отрефакторить функцию, заменив условия и установку значения результирующей переменной на простые return'ы, V8 посчитал, что в ней достаточно кода, чтобы её заинлайнить.
Примеров кода надо найти на просторах винта, так что пока верьте на слово

Сообщение от Дзен-трансгуманист Посмотреть сообщение
Как правило, это функционал верхнего уровня, но чем глубже - тем проще. Код, работающий с вычислительными примитивами и базовыми состояниями, обычно достаточно прост и вызывается в последнюю очередь, следовательно, его легко заинлайнить. А верхний код имеет много вложенных вызовов, значит его нельзя инлайнить ранее, чем в нем самом не проинлайнено всё что только можно. А учитывая, что функции даже на макушке стека могут иметь несколько версий машинного кода, то сложность полного покрытия инлайнами всего дерева вариантов растет в геометрической прогрессии по направлению к корню стека, и в такой же прогрессии падает математическое ожидание реюзинга каждой отдельной ветки. Слишком большие затраты времени и памяти на маловероятное ускорение. Ну это я навскидку сказал, а могут быть камни преткновения и покруче.
кстати, я не узнал, что именно инлайнится - подготовленный машинный код или же байткод.

тут я сам хз . но можно чуть попоже порыться в сорцах V8


так то насчёт производительности инлайна помнится мне, что оптимизация (компиляция в машинный код) кода функции давало прироста поболее, чем её инлайн.
походу, тут нужны тесты и пруф линки )
Ответить с цитированием