Size: a a a

Compiler Development

2019 October 08

VK

Vladimir Kazanov in Compiler Development
Для отдельных возможностей нужны либы
источник

VK

Vladimir Kazanov in Compiler Development
Да и libc - тоже зависимость, если уж честно прям :-)
источник

EO

Eugene Obrezkov in Compiler Development
А как он решает проблемы с динамической природой языка в AoT?
Он же не может знать какой код сгенерировать на этом этапе.
источник

МБ

Михаил Бахтерев in Compiler Development
Eugene Obrezkov
А как он решает проблемы с динамической природой языка в AoT?
Он же не может знать какой код сгенерировать на этом этапе.
А он и не гененрирует. Там такая же техника, как в qemu.

А, нет, не такая же. Генерируется просто bytecode. Я почему-то думал, что он ещё на лету в машинный транслируется, но, вроде, ничего такого нет.
источник
2019 October 09

VK

Vladimir Kazanov in Compiler Development
Eugene Obrezkov
А как он решает проблемы с динамической природой языка в AoT?
Он же не может знать какой код сгенерировать на этом этапе.
А в чем проблема-то? "Динамическая природа" означает просто, что в рамках каждой операции надо выяснить типы операндов и выполнить соответствующий код.
источник

EO

Eugene Obrezkov in Compiler Development
Vladimir Kazanov
А в чем проблема-то? "Динамическая природа" означает просто, что в рамках каждой операции надо выяснить типы операндов и выполнить соответствующий код.
Я под компиляцией подразумеваю, что из жс был сделан кодген в ассембли конкретного процессора.

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

EO

Eugene Obrezkov in Compiler Development
Михаил Бахтерев
А он и не гененрирует. Там такая же техника, как в qemu.

А, нет, не такая же. Генерируется просто bytecode. Я почему-то думал, что он ещё на лету в машинный транслируется, но, вроде, ничего такого нет.
То есть вы к тому что он все таки не компилирует а просто траслирует в байт-код и потом интерпретирует его же?
источник

МБ

Михаил Бахтерев in Compiler Development
Eugene Obrezkov
То есть вы к тому что он все таки не компилирует а просто траслирует в байт-код и потом интерпретирует его же?
Ну... Если я верно понимаю исходники, то да. Могу ошибаться.
источник

EO

Eugene Obrezkov in Compiler Development
Надеюсь может кто ещё ответит, потому что я так же понимаю.

Это может быть шустрый интерпретатор, да, согласен, но не компилятор
источник

VK

Vladimir Kazanov in Compiler Development
Eugene Obrezkov
Надеюсь может кто ещё ответит, потому что я так же понимаю.

Это может быть шустрый интерпретатор, да, согласен, но не компилятор
Вне зависимости от того, как именно устроен quickjs, представьте себе, например, типичный компилятор в байт код динамического языка. Вот если уберёте диспетчеризацию по опкоду, а вставите в main тело каждого опкода заданной программы, то чем вам не программа на си?

Так, например, Scheme компилируется чаще всего
источник

EO

Eugene Obrezkov in Compiler Development
Vladimir Kazanov
Вне зависимости от того, как именно устроен quickjs, представьте себе, например, типичный компилятор в байт код динамического языка. Вот если уберёте диспетчеризацию по опкоду, а вставите в main тело каждого опкода заданной программы, то чем вам не программа на си?

Так, например, Scheme компилируется чаще всего
Но это же сильно медленнее будет? И без возможности в будущем оптимизировать, так как жит нету
источник

AT

Alexander Tchitchigin in Compiler Development
Eugene Obrezkov
Я под компиляцией подразумеваю, что из жс был сделан кодген в ассембли конкретного процессора.

А там просто выяснить типы операнды не просто, потому что они меняются в рантйме. То есть ты не можешь на этапе компиляции сгенерировать тот код который тебе надо. А перебирать и кодгенить все возможные варианты?..
Это мнимое противоречие. 😊
При компиляции в натив мы точно так же можем использовать boxed значения с тегами типов и проверять их во время выполнения, делая джампы на подходящие для фактического типа функции.
источник

AT

Alexander Tchitchigin in Compiler Development
Eugene Obrezkov
Но это же сильно медленнее будет? И без возможности в будущем оптимизировать, так как жит нету
Медленнее, чем что? 😊
В принципе, оптимизировать в рантайме нативно-скомпилированные тоже можно, но геморройно.
источник

VK

Vladimir Kazanov in Compiler Development
Eugene Obrezkov
Но это же сильно медленнее будет? И без возможности в будущем оптимизировать, так как жит нету
Компиляторы си неплохо с оптимизацией даже таких штук  справляются. Да и нынешние процессоры обзавелись всякими там предсказателями ответвлений и спекулятивным исполнением кода :-)
источник

VK

Vladimir Kazanov in Compiler Development
Вообще, компиляцией дин.языков сто лет народ занимается, техник много.
источник

AT

Alexander Tchitchigin in Compiler Development
Vladimir Kazanov
Компиляторы си неплохо с оптимизацией даже таких штук  справляются. Да и нынешние процессоры обзавелись всякими там предсказателями ответвлений и спекулятивным исполнением кода :-)
Помнится, процессоры ими обзавелись ещё лет 30 назад. 😉
источник

VK

Vladimir Kazanov in Compiler Development
Alexander Tchitchigin
Помнится, процессоры ими обзавелись ещё лет 30 назад. 😉
Ага, но в последние десять лет они стали очень хорошо вложенные ветвления понимать, как в интерпретаторах :-)
источник

EO

Eugene Obrezkov in Compiler Development
Alexander Tchitchigin
Медленнее, чем что? 😊
В принципе, оптимизировать в рантайме нативно-скомпилированные тоже можно, но геморройно.
Чем код генерируемый движками типа V8. Я ж рассматриваю в контексте quickjs.

Просто в соседнем чате человек начал сильно радоваться, что он через quickjs сможет свое express приложение скомпилировать. Вот я и пытаюсь разобраться как quickjs компилирует (не интерпретирует) жс. Фиг с ним уже, с тем экспрессом и целесообразностью его компилировать)
источник

VK

Vladimir Kazanov in Compiler Development
Eugene Obrezkov
Чем код генерируемый движками типа V8. Я ж рассматриваю в контексте quickjs.

Просто в соседнем чате человек начал сильно радоваться, что он через quickjs сможет свое express приложение скомпилировать. Вот я и пытаюсь разобраться как quickjs компилирует (не интерпретирует) жс. Фиг с ним уже, с тем экспрессом и целесообразностью его компилировать)
У  jit свои проблемы: плохая предсказуемость, куча работы параллельно с программой делается, память опять же потребляет.

Обычно есть патологические программы, где он вообще тормозит...
источник

VK

Vladimir Kazanov in Compiler Development
Вон, в Емаксе с трез попыток jit не сделали
источник