Size: a a a

Compiler Development

2020 April 19

а

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

А

Алексей ayaye :) in Compiler Development
это что ж, код с синтаксическими ошибками в мастер не закоммитить? непорядок! :)
источник

а

а это кто in Compiler Development
Алексей ayaye :)
это что ж, код с синтаксическими ошибками в мастер не закоммитить? непорядок! :)
Да!
источник

а

а это кто in Compiler Development
polunin.ai
Кстати а что с комментариями? Их в АСТ нету, как быть?
Добавить комментарии в AST? Вроде ничего плохого не случится…
источник

ИЧ

Илья Чистяков in Compiler Development
а это кто
Добавить комментарии в AST? Вроде ничего плохого не случится…
редактор придётся ставить под каждый язык, не очень удобно для администрирования
источник

А

Алексей ayaye :) in Compiler Development
так может надо не хранить в AST (хранимые дифы только на размер влияют), а уметь сравнивать AST (а тут уже можно точнее, чем на тексте, дифф делать)?
источник

PS

Peter Sovietov in Compiler Development
Constantine
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.
А вот это очень интересно. К вопросу о "Haskell -- идеальный язык для написания компиляторов" ;)
источник

AK

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

AG

Alex Gryzlov in Compiler Development
Peter Sovietov
А вот это очень интересно. К вопросу о "Haskell -- идеальный язык для написания компиляторов" ;)
и что к этому вопросу имеете добавить? :)
источник

AT

Alexander Tchitchigin in Compiler Development
Andrei Kurosh
Вместо одного универсального инструмента, понимающего почти любой текстовый формат, делать по отдельному инструментарию для каждого языка? Типичный фуллстек-веб проект использует минимум 5 различных языков программирования и разметки. Маслобойка получается
Они там давно орут за то чтобы один язык для всего использовать (например, JS или Clojure) — будет весомый повод чтобы реально так и делать. 😉
источник

PS

Peter Sovietov in Compiler Development
Andrei Kurosh
Вместо одного универсального инструмента, понимающего почти любой текстовый формат, делать по отдельному инструментарию для каждого языка? Типичный фуллстек-веб проект использует минимум 5 различных языков программирования и разметки. Маслобойка получается
Не очень понял, зачем на эту тему отвлеченно рассуждать. IDE, которые работают на уровне AST, существуют давно, просто они не популярны. Но есть же исключение — JetBrains MPS. Для ЯП из среды MPS вполне логично хранить код в виде деревьев, а не текста. Что тут нового?
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
Не очень понял, зачем на эту тему отвлеченно рассуждать. IDE, которые работают на уровне AST, существуют давно, просто они не популярны. Но есть же исключение — JetBrains MPS. Для ЯП из среды MPS вполне логично хранить код в виде деревьев, а не текста. Что тут нового?
Более того, у него нет возможности хранить код в виде текста — только AST.
источник

r

ruv in Compiler Development
Михаил Бахтерев
Определения эквивалентности внутренним способом. Это довольно философски интересно
Про эквивалентность — да, очень интересно. Изящное решение.

С помощью понятия контекста, эквивалентность сводится к универсальному понятию останова: два выражения эквивалентны, если не существует контекста, в котором одно выражение приведет к останову, а другое — не приведет (т.е., приведет к зацикливанию).

Остается очень выпуклым тот факт, что эквивалентность (в общем случае) не вычислима. А обобщение до выражения покрывает и функции (подпрограммы).
источник

r

ruv in Compiler Development
Спасибо за ссылку! Весьма познавательно )

Предложенная формализация позволяет убедительно ответить на вопрос, добавляет ли новая фича ("конструктор") выразительной мощности языку.  Но все-таки, она не позволяет сравнивать разные языки, и даже разные базовые фичи одного языка.

Например, одна фича добавляет выразительной мощности, и другая (независимая от первой) тоже добавляет. А какая добавляет больше? А язык с первой фичей или со второй фичей обладает большей выразительной мощностью?



Кстати, кажется докладчик делает логическую ошибку, когда говорит (момент 32:26), что из сохранения эквивалентности следует, что новая фича не привносит мощности (т.е., она выразима через существующие фичи).

Теорема (она в лекции приведена далее) говорит, что из нарушения эквивалентности следует невыразимость фичи.

И обратное неверно. А верно: из выразимости фичи следует сохранение эквивалентности.
источник

E

Eugene in Compiler Development
Andrei Kurosh
Вместо одного универсального инструмента, понимающего почти любой текстовый формат, делать по отдельному инструментарию для каждого языка? Типичный фуллстек-веб проект использует минимум 5 различных языков программирования и разметки. Маслобойка получается
этот универсальный инструмент слишком низкого качества
источник

p

polunin.ai in Compiler Development
Alexander Tchitchigin
Они там давно орут за то чтобы один язык для всего использовать (например, JS или Clojure) — будет весомый повод чтобы реально так и делать. 😉
Ну если они выберут Rust для всего, то я за. А так ну нафиг
источник

AT

Alexander Tchitchigin in Compiler Development
ruv
Спасибо за ссылку! Весьма познавательно )

Предложенная формализация позволяет убедительно ответить на вопрос, добавляет ли новая фича ("конструктор") выразительной мощности языку.  Но все-таки, она не позволяет сравнивать разные языки, и даже разные базовые фичи одного языка.

Например, одна фича добавляет выразительной мощности, и другая (независимая от первой) тоже добавляет. А какая добавляет больше? А язык с первой фичей или со второй фичей обладает большей выразительной мощностью?



Кстати, кажется докладчик делает логическую ошибку, когда говорит (момент 32:26), что из сохранения эквивалентности следует, что новая фича не привносит мощности (т.е., она выразима через существующие фичи).

Теорема (она в лекции приведена далее) говорит, что из нарушения эквивалентности следует невыразимость фичи.

И обратное неверно. А верно: из выразимости фичи следует сохранение эквивалентности.
> А какая добавляет больше? А язык с первой фичей или со второй фичей обладает большей выразительной мощностью?

Лично мне не понятна практическая значимость "большей выразительности", но, наверное, можно "посчитать" сколько контекстов "сломалось" — кто больше "сломал", тот и выразительнее. 🤷‍♀️😁
источник

AT

Alexander Tchitchigin in Compiler Development
polunin.ai
Ну если они выберут Rust для всего, то я за. А так ну нафиг
Как будто для Rust есть AST-based IDE/diff/VCS/etc... 🤷‍♀️
источник

AT

Alexander Tchitchigin in Compiler Development
Из этих соображений придётся MPS выбирать, как и сделали JetBrains для YouTrack.
источник

p

polunin.ai in Compiler Development
Alexander Tchitchigin
Как будто для Rust есть AST-based IDE/diff/VCS/etc... 🤷‍♀️
Напишем!😁
источник