Size: a a a

Compiler Development

2021 June 05

П

Пух in Compiler Development
А как это работает?
источник

П

Пух in Compiler Development
Или это работает только для стек vs куски в куче?
источник

RA

R A in Compiler Development
В моём случае был 22-битный процессор (думаю, уже достаточный намёк), в котором имелось всего два спецрегистра + небольшой аппаратный стек + режимы отображения на ОП. И ассемблер со всевозможными PCK, DUP, OVR etc.
источник

AT

Alexander Tchitchigi... in Compiler Development
Если весь стек помещается в кеш -- то это просто регистровая машина с большим количеством регистров. Как LuaVM. Она будет работать с той же скоростью, что и обычная регистровая программа, у которой все данные влезли в кеш.
источник

AT

Alexander Tchitchigi... in Compiler Development
Стек на x86/ARM не сильно-то особенный и тоже влазит или не влазит в кеш, как и вся остальная память.
источник

M

MaxGraey in Compiler Development
стек обычно не превышет 64k, что легко вмещается в L2 кэш который у современных процессоров не ниже 128k.
источник

П

Пух in Compiler Development
Это если всё крупное не в стек класть
источник

PS

Peter Sovietov in Compiler Development
21-битный стековый процессор есть, а вот 22-битного что-то вспомню.
источник
2021 June 06

DF

Dollar Føølish in Compiler Development
Извините если новичковый вопрос : вот допустим у нас джит в нашей виртуальной машине. Можно на примере джава. По сути же есть один экстремальный вариант когда вся программа заджиттилась, тогда обращение к структурам виртуальной машины становится не нужно (стеки там всякие, виртуальные регистры) и это помогло бы сократить число обращений к памяти. А есть сценарий когда заджиттился только один метод и его машинный код как я понимаю должен иметь все те же видимые эффекты на структуры самой виртуальной машины как и его прообраз в виде байткода. Как решается этот момент в популярных рантаймах? Уменьшается ли количество сторов в структуры самой вм при меньшей гранулярности джит компиляции?
источник

RP

Roman Proskuryakov in Compiler Development
На самом деле очень сложный вопрос, потому что джит одного метода может быть как локальным, так и корнем дерева всех методов, которые вызываются изнутри этого метода.
Например, в луа джит метода убирает видимые эффекты на ВМ, поэтому у джит методов не работает фьюел для контроля времени выполнения.
Так что сильно зависит от языков и подходов к решению проблем.
источник

DF

Dollar Føølish in Compiler Development
Ого неплохо
источник

DF

Dollar Føølish in Compiler Development
Значит луа таки умеет например
источник

DF

Dollar Føølish in Compiler Development
А это продвинутая технология получается
источник

RP

Roman Proskuryakov in Compiler Development
что именно продвинутое?
источник

DF

Dollar Føølish in Compiler Development
Ну то что оно умеет убирать видимые эффекты
источник

DF

Dollar Føølish in Compiler Development
И потом жить с этим
источник

RP

Roman Proskuryakov in Compiler Development
да вроде наоборот, оставлять видимые эффекты сложнее, т.к. собирать стату во время выполнения байткода сильно проще, чем расставлять эмуляцию в джит и пробрасывать это в вм)))
источник

DF

Dollar Føølish in Compiler Development
Понятно :)
источник

DF

Dollar Føølish in Compiler Development
А как вот вообще если скомпилирован только фрагмент метода в жвм то получается там нативный код будет манипулировать операнд стеком джавовским?
источник

DF

Dollar Føølish in Compiler Development
Я конечно понимаю что всяко быстрее чем интерпретировать байткод но звучит как жесть
источник