Size: a a a

Compiler Development

2020 March 09

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Даже формально, по-моему, да. Но многих ли вообще интересует строгое формальное описание вычислений? Вопрос риторический. 😊
Компиляторщиков должно интересовать, по идее.
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Компиляторщиков должно интересовать, по идее.
Но легко убедиться, что на самом деле это не так. 😊
источник

SS

Sergey Sverdlov in Compiler Development
Alexander Tchitchigin
"Forth так же неисчерпаем, как и атом!" 😂
Он Ленина... читал
источник

PS

Peter Sovietov in Compiler Development
А что не так с компиляторщиками? В коде хорошего компилятора правила логического вывода очень легко заметить. Есть посылки и есть заключение — таким образом правила преобразований кода задаются.
источник

AT

Alexander Tchitchigin in Compiler Development
Sergey Sverdlov
Он Ленина... читал
"Было бы величайшей ошибкой думать" (с) В. И. Ленин 😊
источник

MM

Mikhail Maltsev in Compiler Development
Antony Polukhin
Похоже что подкрутили коэффициентик, и теперь если 2 функции короткие, то он их не мержит, чтобы избежать накладных расходов на jmp
А вот так мержит даже без jmp: https://godbolt.org/z/eRue38
источник

MM

Mikhail Maltsev in Compiler Development
Причём GCC 9.2 создаёт дополнительный символ, а trunk подправляет место вызова
источник

AZ

Alexander Zaitsev in Compiler Development
Понимаю, что не совсем по компиляторам, но все же. Есть у кого что посоветовать по ast-based форматированию кода? Если уже есть что-то готовое для с++, то вообще шикарно будет
источник

MM

Mikhail Maltsev in Compiler Development
Интересует какая-то умная теория или реализация в виде кода - тоже ок?
источник

MM

Mikhail Maltsev in Compiler Development
Если второе, то есть вот такое:
$ cat test.c
int foo(unsigned long long);
// comment
int main() {
 foo((123ull << 32) | 456ull);
 return 0;
}
$ clang -cc1 -ast-print test.c
int foo(unsigned long long);
int main() {
   foo((123ULL << 32) | 456ULL);
   return 0;
}
Т.е. работает над AST после препроцессора. Находится тут: https://github.com/llvm/llvm-project/blob/master/clang/lib/Frontend/ASTConsumers.cpp#L31
источник

KR

K R in Compiler Development
Mikhail Maltsev
Интересует какая-то умная теория или реализация в виде кода - тоже ок?
Кстати, теория бы не помешала, раз уж все так двинулись на этом форматировании.
источник

AZ

Alexander Zaitsev in Compiler Development
Mikhail Maltsev
Если второе, то есть вот такое:
$ cat test.c
int foo(unsigned long long);
// comment
int main() {
 foo((123ull << 32) | 456ull);
 return 0;
}
$ clang -cc1 -ast-print test.c
int foo(unsigned long long);
int main() {
   foo((123ULL << 32) | 456ULL);
   return 0;
}
Т.е. работает над AST после препроцессора. Находится тут: https://github.com/llvm/llvm-project/blob/master/clang/lib/Frontend/ASTConsumers.cpp#L31
меня интересует не просто вывод AST, а именно форматирование исходного кода, оперируя AST, а не потоком токенов (поток токенов именно в clang-format и uncrustify, например)
источник

AZ

Alexander Zaitsev in Compiler Development
K R
Кстати, теория бы не помешала, раз уж все так двинулись на этом форматировании.
а что делать, если clang-format и uncrustify не подходят :( вот и интересно почитать реализации - мб кто-то по-другому делает. А если делает - то интересно почитать теоретическую часть, сравнение подходов и тому подобные вещи - за этим и прошу
источник

D

Denis in Compiler Development
Alexander Zaitsev
а что делать, если clang-format и uncrustify не подходят :( вот и интересно почитать реализации - мб кто-то по-другому делает. А если делает - то интересно почитать теоретическую часть, сравнение подходов и тому подобные вещи - за этим и прошу
astyle еще можно
источник

AZ

Alexander Zaitsev in Compiler Development
если я правильно понимаю, то rustfmt как раз таки использует AST подход
источник

AZ

Alexander Zaitsev in Compiler Development
Denis
astyle еще можно
он тоже не подходит
источник

KR

K R in Compiler Development
Peter Sovietov
Если одно можно выразить через другое, то это не закрывает вопрос, что же главнее. Особенно, если по историческому старшинству судить :)
Вопрос, что главнее, кмк, закроет хороший курс по разным представлениям вычислений. И формализованным и простым переходам из одного в другое.

Физика довольно давно живёт с разными представлениями в механиках (классической и квантовой). Их просто дают почти одновременно.
источник

AT

Alexander Tchitchigin in Compiler Development
источник

KR

K R in Compiler Development
Alexander Zaitsev
а что делать, если clang-format и uncrustify не подходят :( вот и интересно почитать реализации - мб кто-то по-другому делает. А если делает - то интересно почитать теоретическую часть, сравнение подходов и тому подобные вещи - за этим и прошу
В тексте есть часто некоторая информация, не переходящая в AST. И если вы её сотрёте, вы можете эффективно скрыть часть ошибок. Классическое - при инициализации матриц.

См статьи PVS Studio
источник

AT

Alexander Tchitchigin in Compiler Development
K R
Вопрос, что главнее, кмк, закроет хороший курс по разным представлениям вычислений. И формализованным и простым переходам из одного в другое.

Физика довольно давно живёт с разными представлениями в механиках (классической и квантовой). Их просто дают почти одновременно.
Какие там разные представления в классической и квантовой??? И там, и там либо лагранжиан, либо гамильтониан. 🤔
источник