Pull to refresh

Comments 16

А давайте бцдем соревноваться в знаниях систем, нежели англ. языка?

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

Хабр — это комьюнити переводчиков или людей с мозгами?
… resulting native code.
Не это ли самое основное?
Принцип JIT компиляторов как раз в том, что перед вызовом функции (в общем случае) они её компилируют в native код платформы, на которой запущена виртуальная машина. Поэтому последующие вызовы более дешевые.
С циклами та же история. Код тела цикла единажды компилируется и затем все N раз выполняется уже как native.
В Dragon Book про JIT ничего нету, вроде бы.
PS: в репозитории мозилы чёрт ногу сломит, и чтобы найти там код, ответственный за JIT, надо потратить не мало времени…
В последнем Dragon Book есть про JIT.

Но как источник серьезных знаний о компиляторах я бы не стал эту книгу рассматривать. Существуют более глубокие и аккуратно построенные курсы (например, Мучник). А вообще информацию о научных новинках можно и нужно получать из научных статей =)
ВЫ дали ссылку на работу Франца, а вы её сами-то читали? Франц продвигает идею трассирующего JITа, т.е. такого JITa: находит вход в «горячее место» (заголовок цикла), когда исполнение входит в это горячее место он начинает записывать все _исполняющиеся_ инструкции в одну (почти) линейную последовательность. Затем эта линейная последовательность оптимизируется. Собственно это и есть ключевое отличие от классического JITа. В языках с динамической типизацией не получается просто вывести тип произвольной переменной, поэтому классический JIT мало что может (он же еще и ограничен по времени, так что ему глобально думать о типах некогда). Трассирующий JIT же записывает последовательность _специализированных_ инструкций.

Скажем если у нас есть запись
x = z + y.

Там используется трассирующий
Прошу прощения. Какие-то странные shortcut'ы

Скажем если у нас есть код

x = z + y

То обычный JIT скорее всего породит код вида

if (isnumber(z) && isnumber(y))
x = sumNumbers(z, y)
else if (isstring(z) && isnumber(y))
x = concat(z, tostring(y))


Вообщем мотню переходов. Трассирующий же JIT в породит специализированный фрагмент кода с _фиксированными_ типами z и y. И всего двумя проверками на тип, если эти проверки проваляться то произвойдёт деоптимизация, т.е. выход из оптимизированного кода обратно в интерпретатор. Какие типы фиксировать определяется статически: если какой-то цикл постоянно исполнятся так, что в его теле z является строкой, а y — числом, то компиляция случится именно в таких предположениях.

Далее трассирующий JIT может записывать инструкции между вызовами: это позволяет автоматически делать открытую подстановку и специализацию косвенного вызова, что опять же положительно сказывается на производительности.

Спасибо за внимание =)
>новый метод трансляции байт-кода в машинный код на лету.
Это не новый метод, а очень даже старый. (я о direct-threaded program representation, c2.com/cgi/wiki? DirectThreadedCode)
Не вводите людей в заблуждение.
какое отношение это имеет к трассирующим JITам?
эмм… попутал TracingMonkey со SquirrelFish.
Я и не ввожу. Это цитата из статьи другого автора.
пожалуйста поднимите карму — не хватает чуть чуть запостить новый топик.
прошу прощения за оффтоп.
UFO just landed and posted this here
Когда же этот JIT будет стоять в браузере иначально( и во всех )
dustcn.habrahabr.ru/blog/38228/ наш пользователь DustCn описал суть «нововведений». Большое тебе спасибо. Рекомендую почитать.
Что бы описать суть нововведений нужно сходить по ссылочке и ознакомится собственно с техническими подробностями, а он себя этим явно не затруднил.

Я там прокомментировал его «описание».
Спасибо, ребят. К сожалению, моего уровня знания компиляторов не хватит, чтобы дать технически грамотное пояснение.
mraleph сделал существенное дополнение.
Sign up to leave a comment.

Articles