Anonymous
чейн это ? ?
Max
ну поидее в дереве разбора каждая лексема должна быть отображена, т.е. какраз таки "{" как явные ноды дерева, или не?
Не понимаю о чём ты. В том же растовском аст к каждой ноде присобачены её координаты, т.е это гибрид аст и дст.
Маjко
Я решил пока не трогать, потом перепишу на future-async
Vladimir
чейн это ? ?
и точка
Anonymous
точка же не часть оператора
Anonymous
то есть можно скобки засунуть
Vladimir
точка это оператор
Vladimir
почему нет
Anonymous
отдельный
Vladimir
ты наверно не понимаешь что такое ast
наверное (но это не точно)
分解物質
это как enum JSON { I(i64), F(f64), S(String), B(bool), Arr(Vec<JSON>), Obj(HashMap<String, JSON>), } для json
Vladimir
ну
分解物質
ну
分解物質
и как без него
Vladimir
да сложно
Max
и как без него
Однопроходочкой паскальной
Vladimir
кушая кактусы
Max
Vladimir
Ну я типа не спец в компиляторах и хз есть ли в том же паскале (если он однопроходной) оптимизации какие-то?
Anonymous
смотря в каком паскале?
Vladimir
я то понимаю что для модульности и разбиения парсера АСТ нужно, ибо так проще всего обработать исходный код
分解物質
Vladimir
впоросто по то, как формально звучит "мотивация" аст
Max
В однопроходном почти нихрена нет (кроме простейших peephole фигулин) и быть не может. В паскале образном, конечно — Вирт эту тему везде толкать любит в своей лит-ре
分解物質
я то понимаю что для модульности и разбиения парсера АСТ нужно, ибо так проще всего обработать исходный код
не только проще, в случае "сложных" языков проде Rust это необходимо чтобы было возможным
分解物質
не только проще, в случае "сложных" языков проде Rust это необходимо чтобы было возможным
ну там от банальщины вроде раскрытия макроса который ниже по коду определён, до инлайнинга
分解物質
вывод типов тоже требует заглядывания наперёд
Vladimir
кстати тот енам в жсоне, тоже называется AST?
Berkus
впоросто по то, как формально звучит "мотивация" аст
аст это с помощью чего компилятор "видит" и "понимает" твою программу. поиграться с кланговским ast тулингом может быть полезно
Vladimir
или есть какое-то другое название, приминимое только к структурам данных
Berkus
впоросто по то, как формально звучит "мотивация" аст
на аст удобно производить всякие трансформации, т.к. работа с деревьями достаточно понятна
Vladimir
окей, с аст разобрались
Vladimir
нахуй мир?
Vladimir
и mir
分解物質
нахуй мир?
https://blog.rust-lang.org/2016/04/19/MIR.html
Berkus
нахуй мир?
M Intermediate Representation - значит в этом промежуточном представлении удобно делать какие-то вещи
Alex
космическая станция это.
Vladimir
да я понимаю, что "что-то" удобно, вопрос "что"
Vladimir
да и так делают же
Berkus
да я понимаю, что "что-то" удобно, вопрос "что"
по ссылке выше вот написано - судя по картинке бороу чекер и оптимизации
Nikita
да и так делают же
Да и так можно напрямую в машинный код
Nikita
Да вот только неудобно
Berkus
ты можешь использовать любое количество IR в процессе компиляции - какие-то исключительно временно, какие-то доживают до более поздних фаз генерации
Vladimir
так а в чем удобство х) АСТ ж есть, или не теми концепциями оперирует АСТ?
Berkus
да я понимаю, что "что-то" удобно, вопрос "что"
вообще поройся в доках ЛЛВМ, у них много всяких интересных статей было про это - можно презы с devmtg ллвмовских полистать
Nikita
так а в чем удобство х) АСТ ж есть, или не теми концепциями оперирует АСТ?
В мире больше оперируют блоками кода, а для АСТ оставили минимум семантики, т.е. проверку типов
Berkus
так а в чем удобство х) АСТ ж есть, или не теми концепциями оперирует АСТ?
ast высокий уровень, для бороу чекера видимо важно выкинуть информацию ненужную, упростить ноды где возможно и т.д. - в том числе для ускорения работы или для формализуемой доказуемости каких-то постулатов
Vladimir
там такая простыня, и они вроде не особо объясняют почему удобнее. Нет примеров "почему так нельзя на аст"
Vladimir
х)
Vladimir
каждый напишите что можно
Vladimir
а то я не понял
Berkus
IR рождается из какой-то практической необходимости - погоняли, поняли что тормозит - впилили еще один IR
Nikita
Можно всю семантику запихнуть между АСТ и ллвм
Nikita
Можно даже ллвм выкинуть и генерировать сразу машинный код
Nikita
Но зачем?
Vladimir
но ведь хуйня типа match tree_set.get(bla) { Some(x) => {} None => tree_set.insert(bla, y); } в аст низя
Vladimir
вносят дополнительную хуетень, а оно ускоряется
Berkus
вот, в этом и парадокс
не вижу парадокс, ты знаешь основной постулат CS?
Vladimir
?
ну нету ж реализации такой херни без мира
Berkus
"Любую проблему можно решить введением промежуточного слоя, кроме проблемы слишком большого количества промежуточных слоев"
Vladimir
а
Vladimir
ну да
Vladimir
вот я скорее Бритве Оккама доверяю
Vladimir
а расскажи почему низя?
ну еслиб можно, уже реализовали б
Berkus
вот я скорее Бритве Оккама доверяю
а если оккам с хэнлоном на бритвах подерутся, кто кого сборет?