Comments 9
Партитура "Щелкунчик" для невидимого оркестра профессиональных флейтистов и стеклодувов.
Можно написать токенизатор 1С, чтобы скармливать ast транслятору gcc вместо ast из с++ кода, но зачем?
Вместо аллегории про дирижёра больше подходит пример про теоретика компиляции, не написавшего ни одного компилятора. И тут в качестве MetaAST не дирижёр, а сами ноты же, а точнее, звуковая информация, он их не транслирует, чтобы партию трубы мог исполнить треугольник.
Было бы интереснее, если бы автор попробовал транслировать код какого-нибудь реального проекта с помощью этой тулы, ибо "x + 5" - пример так себе.
пример про теоретика компиляции, не написавшего ни одного компилятора
Автор писал компиляторы.
Было бы интереснее, если бы автор попробовал транслировать код какого-нибудь реального проекта […]
Автор пробовал, но трансляция кода с одного языка на другой — занятие в высшей степени бессмысленное. Вот для особо одаренных цитата прямо из текста выше:
Кросс-языковая трансляция – не главная цель (хотя и она впечатляет). Главная цель – кросс-языковой анализ.
Надо было поставить уровень текста «Сложный», я переоценил, как обычно, местную публику.
Metastatic делает то же самое, но не для диаграмм классов, а для синтаксических деревьев программ. Это не IR, не компилятор, не транспайлер. Это фундамент, на котором все перечисленное может быть построено – один раз, и для всех языков сразу.
Это, конечно же, изрядное хвастовство, и я даже затрудняюсь сказать, это авторское или LLM-ка добавила?
Это, конечно же, изрядное хвастовство […]
Это вы по аватарке надиагнозили?
Никогда не устану удивляться людям, которые огульно готовы обозвать полгода напряженного труда, дошедшего до продакшена, — хвастовством.
Я был излишне краток. Имел в виду во-первых, что называть работу с AST фундаментом - это большая переоценка той роли, которую AST играет в процессе компиляции. А во-вторых, что у интересных языков программирования самое важное будет в той части мета-аст, которая специфична только для этих языков. Я думаю, что универсальный супер-компилятор для тучи языков программирования, backend которого принимает мета-аст, пытающийся абстрагировать все частные случаи конкретных языков, написать не получится.
Я кратко глянул вашу либу, и проверил, что вы мигрировали свой cure на неё, насколько я помню, изначально он её не использовал, либа появилась позже. Хз, насколько вам удобно иметь этот уровень абстракции и распаковывать его, спускаясь к конкретике cure. Также хз, насколько полезен анализ кода, выполняемый на этом высоком уровне абстракции. Не имел в виду, что вы не написали либу или что либа не делает того, что вы описываете. Под хвастовством я имел в виду громкость заявлений.
большая переоценка той роли, которую AST играет в процессе компиляции
При чем тут процесс компиляции вообще? Процесс компиляции — это последнее, ради чего я затевался.
Кроме того, в нормальных современных языках AST играет ключевую роль: компилятор работает только с ним. То, что энтузиасты из раста и голанга не осилили — ну от них никто ничего внятного и не ждал. В плюсах и им подобных — его нет из-за возраста, и лексеры вынужденно переполнены наколеночными адхоками.
Я думаю, что универсальный супер-компилятор для тучи языков программирования, backend которого принимает мета-аст, пытающийся абстрагировать все частные случаи конкретных языков, написать не получится.
Наверняка, а какое отношение это имеет к задаче, которую решаю я?
Хз, насколько вам удобно иметь этот уровень абстракции и распаковывать его, спускаясь к конкретике cure.
Cure использует MetaAST в качестве нативного AST.
Также хз, насколько полезен анализ кода, выполняемый на этом высоком уровне абстракции.
Так спросите, если хз, я растолкую. У меня и примеров использования вагон и маленькая тележка.
Под хвастовством я имел в виду громкость заявлений.
А что мне надо было написать? «Наговнокодил говнобиблиотеку, ни на что не пригодную», чтобы вас устроило?
del
Задумка интересная. Видел похожий проект недавно, оставлю ссылку на всякий.
https://github.com/cqfn/uast - Unified Abstract Syntax Tree
Спасибо.
Это уже не просто «задумка» — на этом MetaAST уже работает статический анализатор https://hexdocs.pm/ragex и целый язык https://cure-lang.org
Unified AST
Это полумертвый, едва начатый и заброшенный проект, который и близко не подбирается к званию «meta»:
ProgramItem <- ClassDeclaration | Statement | ClassItem;Мета не может быть гвоздями прибито к ООП.
Партитура для невидимого оркестра