Size: a a a

Compiler Development

2020 April 24

a

alekum in Compiler Development
спасибо)
источник

KR

K R in Compiler Development
Ой, там уже начало божественное:

"Дорогой Джон,

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

DP

Dmitry Ponyatov in Compiler Development
нашел наконец объяснение как работают парсер-комбинаторы для школотронов типа меня: все очень примитивно и никакой ФП магии
http://theorangeduck.com/page/you-could-have-invented-parser-combinators
источник

VK

Vladimir Kazanov in Compiler Development
Peter Sovietov
По моим наблюдениям, степени выразительности сопоставления с образцом никогда не бывает достаточно. Поэтому не так уж много толку от встроенной реализации в ЯП. Если конечно речь не о DSL.
К примеру, в том же SNOBOL был откат и работа с образцами, как с объектами первого класса. Но зато не было работы на уровне термов, что есть в "огрызках" :)
а есть какая-нибудь цельная литература на этот счет?
источник

PS

Peter Sovietov in Compiler Development
Vladimir Kazanov
а есть какая-нибудь цельная литература на этот счет?
Даже не знаю... Какое название должно быть у книги, чтобы Вы на нее в этом смысле обратили внимание?
источник

VK

Vladimir Kazanov in Compiler Development
Peter Sovietov
Даже не знаю... Какое название должно быть у книги, чтобы Вы на нее в этом смысле обратили внимание?
хороший вопрос. Мне интересно, как фронтэнды компиляторов реализуют сопоставление с образом. Я видел только отдельные небольшие работы начала 90-х вокруг семейства языков ML, но вдруг вам встречалось что-то основательное.
источник

PS

Peter Sovietov in Compiler Development
Vladimir Kazanov
хороший вопрос. Мне интересно, как фронтэнды компиляторов реализуют сопоставление с образом. Я видел только отдельные небольшие работы начала 90-х вокруг семейства языков ML, но вдруг вам встречалось что-то основательное.
Я во главу угла ставлю предметно-ориентированную нотацию. Ту, которой пользуются в учебниках, при написании научных статей и так далее. И, с этой точки зрения, выразительность некоторой конструкции из ЯП легко определить по степени приближения к научно-профессиональной нотации.

Например, в случае реализации синтаксического анализа такой нотацией будет БНФ. А для сопоставления с образцами-термами используются правила логического вывода. То есть идеальный вариант сопоставления с образцом для преобразования IR должен бы иметь схожий вид.
источник

AT

Alexander Tchitchigin in Compiler Development
Vladimir Kazanov
хороший вопрос. Мне интересно, как фронтэнды компиляторов реализуют сопоставление с образом. Я видел только отдельные небольшие работы начала 90-х вокруг семейства языков ML, но вдруг вам встречалось что-то основательное.
Вы имели в виду "как компиляторы используют сопоставление с образцом (в своих исходниках для реализации определённой логики)" или "как компиляторы компилируют сопоставление с образцом в объектном языке"? Потому что @true_grue отвечал на первый вопрос, а не на второй.
источник

PS

Peter Sovietov in Compiler Development
А, да, я был невнимателен :)
источник

VK

Vladimir Kazanov in Compiler Development
Alexander Tchitchigin
Вы имели в виду "как компиляторы используют сопоставление с образцом (в своих исходниках для реализации определённой логики)" или "как компиляторы компилируют сопоставление с образцом в объектном языке"? Потому что @true_grue отвечал на первый вопрос, а не на второй.
Как используют я, конечно, видел.  А вот как это реализуется - вот это интересней, и не так важно, объектный язык или функциональный.
источник

AT

Alexander Tchitchigin in Compiler Development
Vladimir Kazanov
Как используют я, конечно, видел.  А вот как это реализуется - вот это интересней, и не так важно, объектный язык или функциональный.
"Объектный язык" я имел ввиду в логическом смысле, в противовес "мета-языку". 😂
источник

AT

Alexander Tchitchigin in Compiler Development
А так бы написал именно "объектно-ориентированный". 😊
источник

PS

Peter Sovietov in Compiler Development
Vladimir Kazanov
Как используют я, конечно, видел.  А вот как это реализуется - вот это интересней, и не так важно, объектный язык или функциональный.
Есть классические оптимизации в духе объединения общих вершин, то есть работаем уже не с деревом, а с DAG. Но, чем гибче у нас PM, тем сложнее осуществлять подобные улучшающие преобразования статически. В общем случае желателен JIT-компилятор.
источник

VK

Val Krylov in Compiler Development
Peter Sovietov
Я у себя пишу seq(ident, sym("="), let(X=expr)) и вот оно, связывание метапеременной со значением.
И оно вполне себе первоклассное, поскольку я могу, например, написать:

X = let(X=expr)
seq(ident, sym("="), X)

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

list_of(f, delim) ::= f (delim f)*
Я тоже делал подобное на Python когда-то, но применявшиеся (expr & _.X), как аналог упомянутого let(X=expr), напрягали тем, что колхозится собственная система идентификаторов. Т.е. снова не "расширение языка", а "язык сбоку". Даже рассматривал вариант засабмитить в виде PEP синтаксис (as X), передающий в качестве параметра ячейку, связанную с переменной X, но для first class patterns требовалось не только это, а учитывая упорство Гвидо даже по поводу switch+case - решил туда не лезть.
источник

PS

Peter Sovietov in Compiler Development
Vladimir Kazanov
хороший вопрос. Мне интересно, как фронтэнды компиляторов реализуют сопоставление с образом. Я видел только отдельные небольшие работы начала 90-х вокруг семейства языков ML, но вдруг вам встречалось что-то основательное.
Есть много работ в духе этой: http://www.inf.puc-rio.br/~roberto/docs/ry08-4.pdf То есть это очень похоже на то, что Вы делали для регулярных выражений в своей серии статей :)
источник

PS

Peter Sovietov in Compiler Development
Val Krylov
Я тоже делал подобное на Python когда-то, но применявшиеся (expr & _.X), как аналог упомянутого let(X=expr), напрягали тем, что колхозится собственная система идентификаторов. Т.е. снова не "расширение языка", а "язык сбоку". Даже рассматривал вариант засабмитить в виде PEP синтаксис (as X), передающий в качестве параметра ячейку, связанную с переменной X, но для first class patterns требовалось не только это, а учитывая упорство Гвидо даже по поводу switch+case - решил туда не лезть.
А я, в целом, вижу пользу от введения «собственной системы идентификаторов». Они оказываются нужны, к примеру, для правил высшего порядка, и для реализации отката, когда переменные текущей области видимости меняют свои значения. Но я изначально планировал «глубоко встроиться» в хост-язык и не хотел даже к Питоновской специфике сильно привязываться.
источник

VK

Vladimir Kazanov in Compiler Development
Peter Sovietov
Есть много работ в духе этой: http://www.inf.puc-rio.br/~roberto/docs/ry08-4.pdf То есть это очень похоже на то, что Вы делали для регулярных выражений в своей серии статей :)
Интересно. Действительно, похоже.
источник

VK

Vladimir Kazanov in Compiler Development
чуть более теоретически корректно оформлено 😊
источник

M

MaxGraey in Compiler Development
В BEAM-based языках прибыло:
https://gleam.run/
источник

AG

Alex Gryzlov in Compiler Development
а чем отличается от того же эликсира?
источник