Size: a a a

Compiler Development

2020 April 19

ИЧ

Илья Чистяков in Compiler Development
вообще этого нехватает в ide, видимо не просто реализовать такой поиск
источник

DC

Denis Chernikov in Compiler Development
Разве это не реализовано? 🙃
источник

ИЧ

Илья Чистяков in Compiler Development
не видел такого
источник

DP

Dmitry Ponyatov in Compiler Development
было бы круто, открыл окошко в IDE, забил запрос на выборку, и у тебя бац автообновляемое и кликабельное дерево наследования, или структуры программы с нужными деталями
а если оно еще и по файлам умеет само ходить, включая заголовки бинарников, прям вообще красота
источник

KR

K R in Compiler Development
Denis Chernikov
Разве это не реализовано? 🙃
Есть два проекта - phpgrep и gogrep
источник

A

Alex in Compiler Development
Dmitry Ponyatov
А есть системы контроля версий, которые не по строкам работают, а по AST конкретных языков?
правда сам не могу понять, что будет если diff будет считать два куска, отличающихся только пробелами и порядком литералов в сетах, одним и тем же
В своё время делал оптимизацию, которая искала изоморфные участки CFG и сливала их для уменьшения дублирования кода (включая тот момент что в этих кусках разные регистры и надо понять что используются они одинаково). Теоретически можно было бы развить идею до поиска различий на двух cfg, но тут всплывёт много нюансов, связанных с деталями реализации. Для AST такое скорей всего будет попроще, но надо понять зачем такое нужно )
источник

DC

Denis Chernikov in Compiler Development
Alex
В своё время делал оптимизацию, которая искала изоморфные участки CFG и сливала их для уменьшения дублирования кода (включая тот момент что в этих кусках разные регистры и надо понять что используются они одинаково). Теоретически можно было бы развить идею до поиска различий на двух cfg, но тут всплывёт много нюансов, связанных с деталями реализации. Для AST такое скорей всего будет попроще, но надо понять зачем такое нужно )
Давно пора хранить код не в символах, а в смыслах 🙂
источник

MS

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

PS

Peter Sovietov in Compiler Development
Alex
В своё время делал оптимизацию, которая искала изоморфные участки CFG и сливала их для уменьшения дублирования кода (включая тот момент что в этих кусках разные регистры и надо понять что используются они одинаково). Теоретически можно было бы развить идею до поиска различий на двух cfg, но тут всплывёт много нюансов, связанных с деталями реализации. Для AST такое скорей всего будет попроще, но надо понять зачем такое нужно )
Тут первый же нюанс — способ канонизации графа, поскольку изоморфизм графов — операция не слишком быстрая (NP-complete).
источник

PS

Peter Sovietov in Compiler Development
Вообще, задачей сжатия графа с помощью нахождения часто встречающихся подграфов занимаются уже достаточно давно. Но это не lz77 какой-нибудь — тут нужно вычислять очень долго. Хорошо вот со стековым кодом — сжимать приходится обычные подстроки :)
источник

A

Alex in Compiler Development
Такое делается для очень простых случаев и проблем с временем работы там не возникает. Кстати, у меня была мысль для сравнения двух узлов ветвления сделать алгоритм поиска максимальной подстроки чтобы склеить их, но так и она осталась идеей
источник

A

Alex in Compiler Development
Кстати, про "хранить в смыслах" - сейчас есть интересная задача по натягиванию профиля на изменённый cfg ) Так что уже близко ))
источник

ИЧ

Илья Чистяков in Compiler Development
в гитхабе дифы и так подсвечивают какие буквы изменились, и в этом смысле форматирование не доставляет проблем, слияние конфликтов тоже автоматизируются

кажется дифф по AST должен быть мощнее, но не могу придумать пример
источник

МБ

Михаил Бахтерев in Compiler Development
Dmitry Ponyatov
А есть системы контроля версий, которые не по строкам работают, а по AST конкретных языков?
правда сам не могу понять, что будет если diff будет считать два куска, отличающихся только пробелами и порядком литералов в сетах, одним и тем же
источник

KR

K R in Compiler Development
Илья Чистяков
в гитхабе дифы и так подсвечивают какие буквы изменились, и в этом смысле форматирование не доставляет проблем, слияние конфликтов тоже автоматизируются

кажется дифф по AST должен быть мощнее, но не могу придумать пример
Это только в простых случаях работает. Вообще, у ГХ есть хаскальная группа, разрабатывающая библиотеку для обработки языков. Но непонятно, что из этого выйдет.
источник

ИЧ

Илья Чистяков in Compiler Development
K R
Это только в простых случаях работает. Вообще, у ГХ есть хаскальная группа, разрабатывающая библиотеку для обработки языков. Но непонятно, что из этого выйдет.
да, остаются неразрешимые ситуации, и тут уже приходится складывать код по смыслу
источник

KR

K R in Compiler Development
Илья Чистяков
да, остаются неразрешимые ситуации, и тут уже приходится складывать код по смыслу
Это вам сильно повезло с коллегами.
источник

ИЧ

Илья Чистяков in Compiler Development
K R
Это вам сильно повезло с коллегами.
возможно, если просто поменять две строчки местами, магический диф уже не справится)
источник

KR

K R in Compiler Development
Вообще, вся эта автоформатная фигня решается административными средствами. А вот хорошие summary по diff’ам были бы очень полезны:

Такие-то классы изменены, здесь они непосредственно используются и тд
источник

C

Constantine in Compiler Development
https://blog.josephmorag.com/tags/llvm/

Micro C, Part "0" … "3" .

In this series, we will explore how to write a compiler for a small subset of C to LLVM in Haskell. Our language, Micro C, is basically a small subset of real C. We'll have basic numeric types, a real bool type, pointers, and structs. At the end of the series, we'll have a beautiful executable, mcc (Micro C Compiler), that takes one .mc source file and produces and executable.
источник