Size: a a a

Compiler Development

2020 March 21

СЛ

Сергей Лапынин in Compiler Development
Например можно на С++ написать ТАКОЕ, что даже gcc начинает испытывать трудности
источник

PS

Peter Sovietov in Compiler Development
polunin.ai
а за какое сейчас парсится? n*log(n)?
Вы совершили алгоритмический прорыв, судя по всему. Поскольку привычные для этого чата Эрли, GLR и CYK работают за O(n^3).
источник

AT

Alexander Tchitchigin in Compiler Development
Сергей Лапынин
Например можно на С++ написать ТАКОЕ, что даже gcc начинает испытывать трудности
Ну, к написанию своих языков это имеет мало отношения.
А грамматика C++ всё равно ни в какие формализмы не влазит - по-любому руками придётся разбирать. 🤷‍♀️
источник

PS

Peter Sovietov in Compiler Development
polunin.ai
в общем я к тому что для компиляторов время парсинга занимает очень мало времеин по сравнению с другими частями, и тут скорость парсинга не важна даже если будет n^2 времени, так как оно будет чувствоваться на файлах >10к строк.
Время разбора вполне может занимать и половину всего времени компиляции. Сужу по некоторым чужим и своим компиляторам. А у Вас откуда информация?
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
Вы совершили алгоритмический прорыв, судя по всему. Поскольку привычные для этого чата Эрли, GLR и CYK работают за O(n^3).
Я только подзабыл, n - это что там? Мне почему-то кажется, что входную строку GLR всё равно один раз читает. Но работы производит не константное количество на токен.
источник

AK

Andrei Kurosh in Compiler Development
Сергей Лапынин
Например можно на С++ написать ТАКОЕ, что даже gcc начинает испытывать трудности
Много где можно перенапрячь систему. Как в недавнем меме - “Everybody gangsta until a JSON file is 700GB”
источник

IJ

Igor 🐱 Jirkov in Compiler Development
polunin.ai
в общем я к тому что для компиляторов время парсинга занимает очень мало времеин по сравнению с другими частями, и тут скорость парсинга не важна даже если будет n^2 времени, так как оно будет чувствоваться на файлах >10к строк.
Ну такие файлы не то, чтобы редкость
источник

IJ

Igor 🐱 Jirkov in Compiler Development
Особенно если речь идет о сгенерированных файлах  с кодом
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
Я только подзабыл, n - это что там? Мне почему-то кажется, что входную строку GLR всё равно один раз читает. Но работы производит не константное количество на токен.
n — длина разбираемой строки
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
n — длина разбираемой строки
Что-то мне кажется такую оценку можно и уточнить. Как минимум - считать токены, а не символы. 😊
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
Что-то мне кажется такую оценку можно и уточнить. Как минимум - считать токены, а не символы. 😊
А что это даст для _худшего_ случая? В формализме КСГ вообще нет отдельного понятия токенов :)
источник

A

Andrey in Compiler Development
Peter Sovietov
Вы совершили алгоритмический прорыв, судя по всему. Поскольку привычные для этого чата Эрли, GLR и CYK работают за O(n^3).
CF-грамматики можно парсить за время умножения матриц (на практике O(n^log2(7)) Штрассеном)
источник

SS

Sergey Sverdlov in Compiler Development
Alexander Tchitchigin
Что-то мне кажется такую оценку можно и уточнить. Как минимум - считать токены, а не символы. 😊
Разве это существенно? Длина лексемы ограничена, поэтому в смысле О-большого это одно и то же. Хотя про токены говорить естественней в таком разговоре.
источник

p

polunin.ai in Compiler Development
Peter Sovietov
Время разбора вполне может занимать и половину всего времени компиляции. Сужу по некоторым чужим и своим компиляторам. А у Вас откуда информация?
ну я пишу в основном на Rust сейчас, там парсинг 50к+ строк занимает 31 мс
источник

p

polunin.ai in Compiler Development
это 0,07% от общего времени компиляции
источник

AT

Alexander Tchitchigin in Compiler Development
Sergey Sverdlov
Разве это существенно? Длина лексемы ограничена, поэтому в смысле О-большого это одно и то же. Хотя про токены говорить естественней в таком разговоре.
Я знаю, но для меня разница всё равно есть. 😊
Всё-таки читать символы из внешнего источника и манипулировать токенами в памяти - не одно и то же.
источник

PS

Peter Sovietov in Compiler Development
Andrey
CF-грамматики можно парсить за время умножения матриц (на практике O(n^log2(7)) Штрассеном)
Да, хотя это, скорее, чисто теоретический результат.
источник

VM

Victor Miasnikov in Compiler Development
Сергей Лапынин
Например можно на С++ написать ТАКОЕ, что даже gcc начинает испытывать трудности
Конечно, войны американской и европейской школ ЯП уже предмет анекдотов про их "бессмысленность и беспощадность", но в речи некоторых лауреатов премии Тьюринга можно прочитать:

не стоит делать грамматику языка программирования "под компьютер".

Т.е. надо делать максимально простой.

(

И, IMHO, мастерство создателя ЯП в  этом.

)
источник

PS

Peter Sovietov in Compiler Development
polunin.ai
это 0,07% от общего времени компиляции
Тут любопытно, что принимается за общее время — этап LLVM туда входит?
источник

p

polunin.ai in Compiler Development
Peter Sovietov
Тут любопытно, что принимается за общее время — этап LLVM туда входит?
нет
источник