Size: a a a

Compiler Development

2020 December 11

AT

Alexander Tchitchigi... in Compiler Development
Pavel Samolysov
В книгах по парсерам/лексерам, в той же книге дракона или programming language pragmatics много внимания уделяется восстановлению после сбоев/ошибок. Например, пропустить невнятный токен и пойти дальше. Но мне не понятно зачем так делать, если программист ошибся, то не опасно ли это додумывать за него, типа "ну тут какой-то мусор, пропустим его"? На ум приходит только цель посмотреть дальше, что есть в коде, чтобы сформировать толковое сообщение об ошибке, типа ты написал fe, может хотел fn или у тебя есть функция sum (объявленная ниже), а ты пишешь sub. Что вы думаете по поводу не как восстанавливаться после ошибок, а зачем?
https://tratt.net/laurie/blog/entries/automatic_syntax_error_recovery.html тут примерно всё что есть на эту тему уже написано.
источник

AT

Alexander Tchitchigi... in Compiler Development
Pavel Samolysov
Не понял про тормозной компилятор, типа ему проще отрепортить все ошибки сразу, чтобы программист пофиксил и делал меньше циклов компиляции.
Да.
источник

AT

Alexander Tchitchigi... in Compiler Development
И даже при быстром компиляторе лично мне приятнее видеть все ошибки сразу, а не по одной.
источник

AT

Alexander Tchitchigi... in Compiler Development
Особенно когда они отображаются в IDE.
источник

AT

Alexander Tchitchigi... in Compiler Development
Но про это про всё и ещё пару случаев написано у Тратта.
источник

PS

Pavel Samolysov in Compiler Development
Alexander Tchitchigin
https://tratt.net/laurie/blog/entries/automatic_syntax_error_recovery.html тут примерно всё что есть на эту тему уже написано.
О, спасибо почитаю
источник

PS

Pavel Samolysov in Compiler Development
Alexander Tchitchigin
И даже при быстром компиляторе лично мне приятнее видеть все ошибки сразу, а не по одной.
В с++ это наоборот дико раздражает, так как приходится листать портянку вывода к началу, чтобы понять первопричину. Могут ещё быть наведенные ошибки из-за того, что в начале разобрали не то.
источник

AT

Alexander Tchitchigi... in Compiler Development
Pavel Samolysov
В с++ это наоборот дико раздражает, так как приходится листать портянку вывода к началу, чтобы понять первопричину. Могут ещё быть наведенные ошибки из-за того, что в начале разобрали не то.
Пользуетесь языком, спроектированным через жопу — получайте жопу на каждом шагу. 🤷‍♀️😁
источник

BD

Berkus Decker in Compiler Development
Переслано от Berkus Decker
https://arzg.github.io/lang/ кто-то следит за туториалом по написанию языка?
источник

BD

Berkus Decker in Compiler Development
Переслано от Berkus Decker
уже 14^W15 частей вышло
источник

BD

Berkus Decker in Compiler Development
Переслано от Berkus Decker
источник

BD

Berkus Decker in Compiler Development
сюда наверное? miri теперь детектит дата рейсы

error: Undefined Behavior: Data race detected between READ on Thread(id = 0, name = "main") and WRITE on Thread(id = 1), memory(alloc0,offset=0,size=8)
        -current vector clock = VClock([5])
        -conflicting timestamp = VClock([0, 11])
 --> src/main.rs:56:9
  |
56 |         COUNTER += 1;
  |         ^^^^^^^^^^^^ Data race detected between READ on Thread(id = 0, name = "main") and WRITE on Thread(id = 1), memory(alloc0,offset=0,size=8)
        -current vector clock = VClock([5])
        -conflicting timestamp = VClock([0, 11])
  |
  = help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
источник

NK

ID:0 in Compiler Development
В среде компиляторщиков можно встретить утверждения в духе "SSA это функциональное программирование" и "в теории нет разницы между phi-функциями и базовыми блоками с параметрами". С инженерной же точки зрения различия, все-таки, имеются. В заметке ниже показан пример этих различий со сравнением императивного и функционального подходов к разработке компилятора:

http://blog.ezyang.com/2020/10/the-hidden-problem-with-basic-block-procedures-in-ssa/

Добавлю, что нельзя сказать, что одно из этих представлений в общем случае лучше, чем другое, с точки зрения вариантов проводимого анализа (см. также https://news.ycombinator.com/item?id=24872752 ). Но, в целом, можно отметить тенденцию использования базовых блоков с параметрами в высокоуровневых IR и для межпроцедурных преобразований, а phi-функций -- в низкоуровневых представлениях (вплоть до реализации мультиплексоров в описании генерируемой цифровой схемы).

#ssa
источник

Constantine ʕ◔ϖ◔ʔ🦀... in Compiler Development
CS 6120: Advanced Compilers: The Self-Guided Online Course

CS 6120 is a PhD-level Cornell CS course by Adrian Sampson on programming language implementation. It covers universal compilers topics like intermediate representations, data flow, and “classic” optimizations as well as more research-flavored topics such as parallelization, just-in-time compilation, and garbage collection. The work consists of reading papers and open-source hacking tasks, which use LLVM and an educational IR invented just for this class.
There are videos, implementation tasks, and recommended paper reading.

https://www.cs.cornell.edu/courses/cs6120/2020fa/self-guided/
источник
2020 December 12

DP

Dmitry Ponyatov in Compiler Development
hazer_hazer
я не компилирую в машинный код. я пытаюсь обширнее понять машинный код для пользы в сфере вм
вот эту архитектуру Burroughs 5000 ещё можно глянуть: https://people.cs.clemson.edu/~mark/subroutines/b5000.html
деды от неё прям пищали, больше чем от системы команд PDP-11
источник

h

hazer_hazer in Compiler Development
Dmitry Ponyatov
вот эту архитектуру Burroughs 5000 ещё можно глянуть: https://people.cs.clemson.edu/~mark/subroutines/b5000.html
деды от неё прям пищали, больше чем от системы команд PDP-11
403(
источник

DP

Dmitry Ponyatov in Compiler Development
Alexander Tchitchigin
Пользуетесь языком, спроектированным через жопу — получайте жопу на каждом шагу. 🤷‍♀️😁
новый язык-убийса Си — ()()
lisp/llvm со шмакросами... м.б.
источник

a

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

f

for(int c; (c = getc... in Compiler Development
У меня есть конкретное дерево разбора для кода (CST), и соответствующее ему абстрактное (AST), полученное из первого просто выбрасыванием всех вспомогательных токенов.

Мне нужно сделать обратное преобразование - имея AST по нему добавить недостающие токены (и потом в собрать это все обратно в строку). Самый простой вариант это реализовать - написать вручную куда и при каких условиях что нужно добавить, но это достаточно мутный процесс.

У меня была идея распарсить какое-то количество тестового кода, собрать статистику по тому где какие вспомогательные токены встречаются, и на основе этого сгенерировать код для преобразователя из AST в CST. Возможно с какими-то ручными изменениями после.

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

YS

Yaroslav Schekin in Compiler Development
for(int c; (c = getchar()) != EOF;)
У меня есть конкретное дерево разбора для кода (CST), и соответствующее ему абстрактное (AST), полученное из первого просто выбрасыванием всех вспомогательных токенов.

Мне нужно сделать обратное преобразование - имея AST по нему добавить недостающие токены (и потом в собрать это все обратно в строку). Самый простой вариант это реализовать - написать вручную куда и при каких условиях что нужно добавить, но это достаточно мутный процесс.

У меня была идея распарсить какое-то количество тестового кода, собрать статистику по тому где какие вспомогательные токены встречаются, и на основе этого сгенерировать код для преобразователя из AST в CST. Возможно с какими-то ручными изменениями после.

Может быть кто-то встречал что-то похожее и может порекомендовать какие-то статьи на эту тему? Если честно то у меня не очень получилось даже загуглить это, но может быть я не смог сформулировать.
Так, как написано, это просто невозможно, на первый взгляд... нет?
Если Вы уже выкинули комментарии из CST, обратно их уже не вставишь, например.
источник