LINUX.ORG.RU
ФорумTalks

Насколько «сложно» сделать JIT-компилятор?

 


1

1

V8 - js от гугла, там есть JIT. PyPy - реализация python - там есть JIT.

Они все делают каждый свой фирменный JIT? Нет, ясно что специфика языка добавляет свою логику, например если динамическая типизация, то там переменная - это структурка с полем «тип», а в статической такого может не быть и т.п.

Вопрос наверное больше про оптимизатор. Скажем, надо сгенерить машинный код для перебора элементов в цикле. Или надо перемножить 2 вектора. JIT вставит векторную инструкцию или будет перебирать? JIT сможет понять что вот эту функцию можно вообще не реализовывать, она никогда не вызывается и т.п.

Т.е. интересно, тот код, который пишет в память байтики машинного кода, он у всех свой домашний? Или юзаются какие-то LLVM-подобные штуки, которые для большинства JIT-компиляторов разных языков давно уже дают что-то одного типа?

Ответ на: комментарий от cantus

Зачем нужен JIT? Ну ты даешь! Взять тот же JavaScript - JIT, это единственное, что заставляет тонны говнокода выполняться за более-менее адекватные (если к ним можно применить это понятие) промежутки времени.

Meyer ★★★★★
()

Похоже это таки довольно сложно, если судить по ситуации которая сейчас разворачивается вокруг Ruby.
Создатель языка даже призывал специалистов по JIT вливаться в разработку и пока только некая команда из IBM экспериментирует в этом направлении, но IBM пилит какую-то штуку типа llvm, а не полноценный форк руби.
Вроде ещё есть какие-то активные проекты на эту тему, но пока слишком много критических проблем с GIL/C-Api.

Exmor_RS ★★★
()
Ответ на: комментарий от commagray

Титулярная епархия Римско-Католической церкви.

int64
()

юзаются какие-то LLVM-подобные штуки

Выполнение кода JIT-компилятором состоит из двух этапов: компиляция и исполнение. Если они вместе занимают меньше времени, чем использование интерпретатора, тогда толк есть. Я думаю, что свои велосипеды пилят для того, чтобы больше контролировать фазу компиляции, чего с LLVM делать сложнее.

i-rinat ★★★★★
()
Ответ на: комментарий от cantus

Расскажите в крации зачем он вообще нужен.

В аочую

Igron ★★★★★
()
Ответ на: комментарий от cantus

Расскажите в крации

Куда-куда?

зачем он вообще нужен

Совсем кратко: для повышения производительности. Команды VM динамически компиллируются в машинный код, исполняемый примерно как и обычный нативный.

Psych218 ★★★★★
()

Есть проблемы с реализацией, в JS влили тонны бабок корпоративные вендоров, там запилили и оно даже работает. А с py/Ruby в их нишах нет такого спроса и желания вложиться пока.

Valeg ★★★
()

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

В качестве общего развития можно посмотреть на древние GNU Lightning и libjit

buddhist ★★★★★
()
Ответ на: комментарий от cantus

А совсем в крацее?

Данная технология работает на Божьей Благодати неизвестным нам образом.

Sociopsih ★☆
()

Когда приходилось разбираться с сорцами AMXModX, внутри, в интерпретаторе языка Pawn я нашёл очень простой для понимания jit. Совсем простым языком — каждое выражение преобразуется в эквивалентный машинный код и далее исполняется именно он, что и дает прирост производительности.

Можешь почитать его в оригинальных сорцах Pawn: https://github.com/compuphase/pawn

a1batross ★★★★★
()
Последнее исправление: a1batross (всего исправлений: 1)

Пишу уже третий жит, сложностей никаких.

Deleted
()

где-то на 30% сложнее чем интерпретатор с компилятором писать..

Thero ★★★★★
()
Ответ на: комментарий от NextGenenration

Кристаль, Эликсир да — но экосистему под них придётся очень долго переписывать. Ну и точно не знаю, но возможно при использовании кристала отпадут любимые рельсовиками отладочные консоли, через которые можно подключиться в работающее приложение и делать там всякие repl штуки.

Exmor_RS ★★★
()
8 июля 2019 г.
Ответ на: комментарий от cantus

Отцы-основатели ни о каком жите не знали.

Прекрасно знали. Куча пословиц есть про жито.

utf8nowhere ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.