Size: a a a

Compiler Development

2020 November 29

K

Kir in Compiler Development
MrSmith
Я вот писал транслятор си АСТ в  llvm ir, придерживаясь конвенции что у меня на вход дано изначально верное АСТ. Сейчас вот думаю, как бы описать правила что есть верное АСТ, что бы инкркментно проверять стало ли АСТ верным. Какие есть идеи?
Насоветываю мутные типы: разработать систему типов для входа и для выхода, вычислять типы и того и другого и проверять, что они соответствуют.
источник

E

EgorBo in Compiler Development
я подумал "мутные типы" это про людей
источник

AT

Alexander Tchitchigi... in Compiler Development
"Мутные семейства типов". Про людей. 😂
источник

а

а это кто in Compiler Development
я подумал это про типы)
источник

PS

Peter Sovietov in Compiler Development
Kir
Насоветываю мутные типы: разработать систему типов для входа и для выхода, вычислять типы и того и другого и проверять, что они соответствуют.
Компиляторщики так не говорят! Не "типы" — а абстрактные значения. Не "вычислить типы" — а реализовать алгоритм восходящего обхода AST с абстрактными вычислениями, к примеру ;)
источник

PS

Peter Sovietov in Compiler Development
А вы знали, что старинный компилятор Turbo Pascal имел собственный IR, в отличие от решений, вдохновленных Виртом?
Один исследователь разобрал ассемблерный код tpc.exe, перевел его на Паскаль и выложил в интернете.
Я прекрасно понимаю, что любителей археологии в области компиляторных технологий гораздо меньше, чем, скажем, исследователей компьютерных ретроигр, но, все же :)
http://direct.turbopascal.org/
источник

Miss Очепятка... in Compiler Development
Peter Sovietov
А вы знали, что старинный компилятор Turbo Pascal имел собственный IR, в отличие от решений, вдохновленных Виртом?
Один исследователь разобрал ассемблерный код tpc.exe, перевел его на Паскаль и выложил в интернете.
Я прекрасно понимаю, что любителей археологии в области компиляторных технологий гораздо меньше, чем, скажем, исследователей компьютерных ретроигр, но, все же :)
http://direct.turbopascal.org/
Нету там IR
источник

M

MaxGraey in Compiler Development
Miss Очепятка
Нету там IR
Что то простое все же было: http://direct.turbopascal.org/intermediate-code
источник

Miss Очепятка... in Compiler Development
Это отладочная информация, а не IR
источник

KR

K R in Compiler Development
Alexander Tchitchigin
В rustc обнаружение, восстановление и отображение ошибок наверняка тщательно написано руками, без генераторов.

Для LR на Rust есть отличная работа Лоуренса Тратта: https://tratt.net/laurie/blog/entries/automatic_syntax_error_recovery.html Но можно этот подход перенести и на другие системы. Что-то лучше из автоматического вряд-ли есть.
Насколько я понимаю, у него весь пафос в том, что подход очень общий, и его можно вставить даже в bison.
источник

PS

Peter Sovietov in Compiler Development
Miss Очепятка
Это отладочная информация, а не IR
Автор целый сайт создал с разбором кода в подтверждение своей информации. А что у Вас за источники? :)
источник

Miss Очепятка... in Compiler Development
Peter Sovietov
Автор целый сайт создал с разбором кода в подтверждение своей информации. А что у Вас за источники? :)
Так Вы исходный код посмотрите все станет на свои места.
источник
2020 November 30

PS

Peter Sovietov in Compiler Development
Miss Очепятка
Так Вы исходный код посмотрите все станет на свои места.
То есть автор сам не понимает, что пишет? Откуда тогда уверенность, что исходный код правильный? Это, скорее, риторические вопросы :)
источник

E

EgorBo in Compiler Development
ого, ир для паскаля, кто-нибудь уже пробовал сделать ллвм бэк
источник

DP

Dmitry Ponyatov in Compiler Development
EgorBo
ого, ир для паскаля, кто-нибудь уже пробовал сделать ллвм бэк
лолвм васик'вильнюс
источник

PS

Pavel Samolysov in Compiler Development
А кто-нибудь нашёл этот код, например на гитхабе, или он присутствует только в примерах на сайте, а целиком скачать нельзя?
источник

M

MaxGraey in Compiler Development
Pavel Samolysov
А кто-нибудь нашёл этот код, например на гитхабе, или он присутствует только в примерах на сайте, а целиком скачать нельзя?
это вопррос не ко мне)
источник

M

MaxGraey in Compiler Development
Очень странное решение у LLVM все еще использовать аж 4 не парируемые ALU операции там, где можно обойтись всего одним imul)
https://godbolt.org/z/zPjedG

Кто знает почему так?
источник

M

MaxGraey in Compiler Development
imul на большинстве платформ - это ~2.5 такта и 1 RCP, кроме Zen2/3 у которого 2 и 1 соответственно

в вариантах с 4-мя ALU операциями в итоге получаем 3-4 такта и 1-2 RCP
источник

RE

Roman Elizarov in Compiler Development
Подозреваю что это с еще каких-то древних intel-ов. Просто никто не запарился обновить на современные, где быстрое умножение.
источник