Size: a a a

Compiler Development

2021 March 16

РС

Роман Соловьев... in Compiler Development
Есть ли инструменты где настраивается что и во что преобразовывать и оно преобразовывает)
источник

РС

Роман Соловьев... in Compiler Development
универсальный транслятор получается)
источник

VS

Victor Shamparov in Compiler Development
Роман Соловьев
Есть ли инструменты где настраивается что и во что преобразовывать и оно преобразовывает)
Так-то под определение подходит GCC: на вход - много ЯП относительно высокого уровня, на выход - бинарники для разных архитектур на выбор.
источник

M

MaxGraey in Compiler Development
Роман Соловьев
Есть ли инструменты где настраивается что и во что преобразовывать и оно преобразовывает)
Такие расплывчивые формулировки вам самомму не дадут даже направления поиска. Нужен source-to-source транслятор (он же транспилятор) или high-level -> low-level. Может low-level -> high-level трансляция (оно же дисассемблирование)? low-level -> low-level (бинарная трансляция)?
источник

РС

Роман Соловьев... in Compiler Development
MaxGraey
Такие расплывчивые формулировки вам самомму не дадут даже направления поиска. Нужен source-to-source транслятор (он же транспилятор) или high-level -> low-level. Может low-level -> high-level трансляция (оно же дисассемблирование)? low-level -> low-level (бинарная трансляция)?
source-to-source/high-level-high-level)
источник

M

MaxGraey in Compiler Development
Роман Соловьев
source-to-source/high-level-high-level)
Универальных нету. Да даже специализированные оставляют желать лучшего. Это очень сложная тема. Лучшее что пока придумали это задействовать AI:
https://ai.facebook.com/blog/deep-learning-to-translate-between-programming-languages/
источник

D

Danya in Compiler Development
Alexander Tchitchigin
AST специфичен для каждого конкретного языка — его нельзя сделать "портабельным" между языками, как LLVM IR (в большой степени).
А у кланга разве более менее не так? Там конечно c, c++, obj-c, obj-c++ — в каком-то смысле похожие языки, но все равно
источник

A

Alex in Compiler Development
Peter Sovietov
Это уж точно!
Вы не поверите, но я пошёл сохранять курс 512 к себе локально, и нашёл эти сохранённые курсы! Могу в какой-нибудь репозиторий добавить
источник
2021 March 17

РС

Роман Соловьев... in Compiler Development
MaxGraey
Универальных нету. Да даже специализированные оставляют желать лучшего. Это очень сложная тема. Лучшее что пока придумали это задействовать AI:
https://ai.facebook.com/blog/deep-learning-to-translate-between-programming-languages/
кайф, спасибо! Если знаешь ещё подобные инструмент - накидай пожалуйста
источник

NK

ID:0 in Compiler Development
В традиционных алгоритмах распределения регистров на основе задач упаковки в контейнеры или раскраски графов трудно учесть дополнительные ограничения на доступ к регистрам.

Речь идет об архитектурах с нерегулярным доступом к регистрам (register aliasing, ограничения на использование конкретных регистров в командах). И это относится к x86, но в еще большей мере — к DSP-процессорам и другим специализированным архитектурам.

За последние 3 десятилетия исследователи предложили несколько подходов к проблеме, в том числе метод на базе задачи о квадратичном присваивании (quadratic assignment problem, или QAP), верней частном ее случае: partitioned boolean quadratic optimization problem, или PBQP.

Бернард Шольц (Bernhard Scholz) в работе 2002 года сформулировал распределение регистров как задачу PBQP и показал, что метод позволяет моделировать особенности сложных архитектур. PBQP - NP-полная задача, поэтому впоследствии для метода были разработаны эффективные эвристики, делающие время поиска решений приемлемым.

Интересным метод является не только из-за применимости к отдельным архитектурам:

- возможно регулировать время работы решателя, то есть алгоритм становится прогрессивным;
- решатель может как искать оптимальные решения, так и быстро находить субоптимальные при помощи эвристик;
- алгоритм пытается избегать применения эвристики и в большинстве случаев предлагает оптимальные решения.

Наилучшие относительно других подходов результаты PBQP показывает именно в нерегулярных архитектурах, ради которых решатель PBQP был реализован сначала в libfirm, после - и в LLVM.

Впоследствии исследования применимости PBQP в распределении регистров и порождении кода вдохновили эксперименты в применении метода, например, к тестированию памяти или методам машинного обучения.

Понятия регулярности и ортогональности архитектур процессоров в классической работе (1981): https://www.cs.auckland.ac.nz/compsci703s1c/resources/Wulf.pdf

Оригинальная публикация, представляющая PBQP (2002): http://www.complang.tuwien.ac.at/scholz/publications/lctes02.ps.gz

Развитие идей, обновленный алгоритм и новая эвристика (2006): https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.131.4551&rep=rep1&type=pdf

Разработчики libfirm о применении к SSA (2011):  https://link.springer.com/content/pdf/10.1007/978-3-642-19861-8_4.pdf

Неформальный пост от разработчиков libfirm (2011): https://beza1e1.tuxen.de/articles/pbqp.html

Сама задача: https://en.wikipedia.org/wiki/Quadratic_assignment_problem

Тестирование памяти (2020): https://dl.acm.org/doi/fullHtml/10.1145/3427378

Машинное обучение (2018): https://arxiv.org/pdf/1710.01079.pdf

#pbqp #registeralloc #libfirm #llvm
источник

к

кана in Compiler Development
видел кто материал о том, как делать валидатор полноты паттерн матчинга?

интуитивно представляю что нужно какое-то дерево строить по мере обхода паттернов и вырезать из него ноды, а в конце проверить что дерево пустое осталось
источник

a

alez in Compiler Development
Подскажите пожалуйста, как можно синтезировать программы из заданых комбинаторов? Желательно по тестам, а не спецификации. Если нет такого софта, то как можно самому подойти к проблеме? Перформанс не сильно важен так как интересующие программы  -маленькие
источник

ЗП

Зигохистоморфный Пре... in Compiler Development
кана
видел кто материал о том, как делать валидатор полноты паттерн матчинга?

интуитивно представляю что нужно какое-то дерево строить по мере обхода паттернов и вырезать из него ноды, а в конце проверить что дерево пустое осталось
а как понять сколько паттернов возможно? например если сложный паттерн состоящий из других
источник

к

кана in Compiler Development
предполагается, что определения всех типов у нас есть
источник

к

кана in Compiler Development
Зигохистоморфный Препроморфизм
а как понять сколько паттернов возможно? например если сложный паттерн состоящий из других
собственно из-за сложных паттернов я и думаю, что нужно какое-то дерево, чтобы из поддерева выкидывать подпаттерны, или выкидывать все поддерево, если там вайлдкард паттерн
источник

AT

Alexander Tchitchigi... in Compiler Development
alez
Подскажите пожалуйста, как можно синтезировать программы из заданых комбинаторов? Желательно по тестам, а не спецификации. Если нет такого софта, то как можно самому подойти к проблеме? Перформанс не сильно важен так как интересующие программы  -маленькие
Из MSR прилично статей на эту тему. Используя Z3, понятное дело. 😊
источник

EM

Evgenii Moiseenko in Compiler Development
alez
Подскажите пожалуйста, как можно синтезировать программы из заданых комбинаторов? Желательно по тестам, а не спецификации. Если нет такого софта, то как можно самому подойти к проблеме? Перформанс не сильно важен так как интересующие программы  -маленькие
то что вы описываете гуглится по словам "programming by example",
есть довольно неплохой обзор современного состояния дел в области от Microsoft Research
https://www.microsoft.com/en-us/research/wp-content/uploads/2017/10/program_synthesis_now.pdf
источник

K

Kakadu in Compiler Development
кана
видел кто материал о том, как делать валидатор полноты паттерн матчинга?

интуитивно представляю что нужно какое-то дерево строить по мере обхода паттернов и вырезать из него ноды, а в конце проверить что дерево пустое осталось
у Luc Maranget про это статьи етсь
источник

к

кана in Compiler Development
источник

M

MaxGraey in Compiler Development
кана
собственно из-за сложных паттернов я и думаю, что нужно какое-то дерево, чтобы из поддерева выкидывать подпаттерны, или выкидывать все поддерево, если там вайлдкард паттерн
источник