Size: a a a

Compiler Development

2021 June 06

RP

Roman Proskuryakov in Compiler Development
про жвм - хз
источник

MO

Mar Ort in Compiler Development
в жвм джит собирает профиль
источник

AS

Aleksey Shipilev in Compiler Development
В Hotspot JVM сгенерированный JIT-ом код не меняет состояние "интерпретатора" абстрактной машины, а тащит достаточно метаинформации, чтобы восстановить состояние абстрактной машины для ухода, например, в интерпретатор или вообще полную деоптимизацию. Если разрешать такие переходы только в конкретных местах (вызовы, обратные дуги циклов, етц), то такой метаинфы нужно достаточно мало.
источник

DF

Dollar Føølish in Compiler Development
Круто спасибо
источник

[

[BRM]White Rabbit in Compiler Development
а оптимизация хвостовой рекурсии делается заменой
call foo
ret

на
jmp foo
да?
источник

K

Kir in Compiler Development
Вроде того, да
источник
2021 June 07

VS

Victor Shamparov in Compiler Development
Подозреваю, что не особо: в прямо таком варианте у вас будет бесконечный цикл - нужно аккуратно написать условие для условного jmp. Кроме того, не надо удалять ret после заменённого call. Ну и направлять jmp нужно не в голову функции (там например есть работа со стеком, а мы вроде бы не хотим сильно растущего стека), а на старт содержательной части.
источник

[

[BRM]White Rabbit in Compiler Development
ret по идее должна вызывать другая ветвь функции, нет? Мы просто делегируем foo вернуть управление по адресу, находящемуся сверху "стека возврата", если это можно так назвать.
Про переход же сразу к логике наверное справедливо🤔
источник

VS

Victor Shamparov in Compiler Development
Ну я имел в виду, что в общем у нас внутри функции foo образуется цикл с условием выхода, которое надо ещё аккуратно определить.
источник

[

[BRM]White Rabbit in Compiler Development
Это уже задача статического анализатора
источник

[

[BRM]White Rabbit in Compiler Development
Если человек написал

int foo()
{
return foo();
}

То нет никакой разницы между переполнением стека и бесконечным циклом
источник

VS

Victor Shamparov in Compiler Development
Каждая оптимизация делает какой-то статический анализ...
источник

VS

Victor Shamparov in Compiler Development
Это да
источник

[

[BRM]White Rabbit in Compiler Development
Ну, я имею ввиду: показать юзеру варн о бесконечной рекурсии. (Если, конечно, твой язык не строится на её использовании)
источник

RA

R A in Compiler Development
С PIC-ами не работал как раз, но они вроде общего назначения?
источник

РС

Роман Соловьев... in Compiler Development
Интересный вопрос, какие тесты помимо модульных нужны при реализации синтаксических анализаторов)
источник

AT

Alexander Tchitchigi... in Compiler Development
Функциональные, end-to-end, регрессионные. Performance-тесты тоже не будут лишними. Всё как всегда. 🤷‍♀️
источник

РС

Роман Соловьев... in Compiler Development
а end-to-end в данном случае как?
источник

к

кана in Compiler Development
на вход в тулу файл с кодом, на выходе файл с ошибками и ворнингами, сравниваем что ошибки те что нужны

можно оба файла комитать и после каждого изменения проверять, что файл с ошибками не поменялся или поменялся именно так как надо
источник

AT

Alexander Tchitchigi... in Compiler Development
Точнее, на вход 2 файла: грамматика и текст, на выходе — структура данных с деревом разбора и/или ошибками.
источник