Size: a a a

Compiler Development

2021 May 18

ZB

Zalim Bashorov in Compiler Development
Опыт показал, что так проще делать трансформации, особенно если в языке (пока) нет чего-то типа линз.
источник

AK

Andrei Kurosh in Compiler Development
Так у вас дерево мутируется in-place, или копируется перед мутацией?
источник

ZB

Zalim Bashorov in Compiler Development
целиком не копируется, но есть случае когда нужно поддерво скопировать, например чтобы заинлайнить
источник

ZB

Zalim Bashorov in Compiler Development
мутируется in-place
источник

AK

Andrei Kurosh in Compiler Development
источник

PS

Peter Sovietov in Compiler Development
Это не совсем аналог. Сопоставление с образцом в Рефале значительно мощнее. На примерах простых компиляторов это уже заметно.
источник

MO

Mar Ort in Compiler Development
В частности здесь копирование необходимо из-за типовой подстановки
источник

ZB

Zalim Bashorov in Compiler Development
прям размечанных задач нет, но если расскажешь что именно интересно можем собрать пул
* в компиляторе Kotlin/JS сейчас, в основном, нужно чинить баги, недоделки
* есть разный тулинг от конвертора TS деклараций в Kotlin до итеграции с JS тулами типа webpack
* в Kotlin/Wasm большое разнообразие задач — поддержка фич, оптимизации, тулинг

Пиши! Найдем задачу по вкусу!
источник

ДК

Дмитрий К in Compiler Development
Кстати, что думаете про эту штуку, как формат представления AST?
источник

TS

Timur Safin in Compiler Development
Обычно такие low profile тикеты помечают в githubе меткой "good first issue"
источник

ZB

Zalim Bashorov in Compiler Development
у нас есть тег Up For Grabs, но там в основном про IDE https://youtrack.jetbrains.com/issues?q=%23kotlin%20tag:%20%7BUp%20For%20Grabs%7D%20&u=1
источник

А

Алексей ayaye :)... in Compiler Development
я правильно понимаю, что описано в основном текстовое представление. а внутреннее представление гомогенное без описания предлагаемого способа обработки/трансформации?
источник

А

Алексей ayaye :)... in Compiler Development
для AST как раз внутреннее представление важно и способ его обработки.
лично я предпочитаю статическую типизацию => гетерогенные деревья. обрабатывать можно хоть визитером
источник

ДК

Дмитрий К in Compiler Development
Внутреннее да, гомогенное. Там есть примеры обработки. Тут больше про трансформации. И даже DSL для трансформаций.
источник

ДК

Дмитрий К in Compiler Development
Гомогенное представление ведь тоже может быть статически типизировано. Хотя в своей либе я это ещё не реализовал.
источник

ДК

Дмитрий К in Compiler Development
У гетерогенных деревьев есть такая проблема, что их сложно обрабатывать обобщённым кодом. А многие виды обработки не зависят от конкретного языка.
источник

А

Алексей ayaye :)... in Compiler Development
как? для всех Expr, Stmt и прочих узлов будет использован один тип данных
источник

А

Алексей ayaye :)... in Compiler Development
если типы узлов наследовать от общего корня, то у всех узлов получится общий интерфейс, который можно обрабатывать обобщенным кодом. а вот наоборот тяжелее :)
источник

ДК

Дмитрий К in Compiler Development
Да, что-то типа: Node< Type, Kids >
Например:

type Expr = Number | Sum | ...
type Sum = Node< '+', Expr[] >
type Number = Node< 'number', [ Data ] >
type Data = Node< '', [] >
источник

А

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

Поэтому нам хватит всего двух типов узлов.

   Struct Node
   Data Node

Структурные узлы служат для описания иерархии, а узлы данных хранят сырые бинарные данные.
источник