Size: a a a

Compiler Development

2020 April 04

M

MaxGraey in Compiler Development
numba все таки весьма ограниченный сабсет, а еще не все функции у numba быстрее чем в CPython)
источник

МБ

Михаил Бахтерев in Compiler Development
Илья Чистяков
Есть понимание, почему некоторые языки производительные, а другие не очень? Например питон, руби, js. Js когда-то был тормозом, но потом пришёл гугл. Неужели ускорение стоит так дорого? Внедрять jit? Или это специфика языков. Какие-то проще оптимизировать?
Google имеет кучу пользоваелей, поэтому его решения заметны. А так-то все эти техники довольно давно "академия" предлагала. Но кто знает об "академии"? Нужны масштабные приложения.

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

а

акварель на мету in Compiler Development
Кстати, а где можно почитать про подходы парсинга языка и трансляции его в ассемблер ?
А то эти АСТ мне пока-что совершенно непонятны, кажется не с них начинают.
По идее же есть какие-то простые/примитивные способы парсинга и трансляции ?
источник

МБ

Михаил Бахтерев in Compiler Development
акварель на мету
Кстати, а где можно почитать про подходы парсинга языка и трансляции его в ассемблер ?
А то эти АСТ мне пока-что совершенно непонятны, кажется не с них начинают.
По идее же есть какие-то простые/примитивные способы парсинга и трансляции ?
Это, наверное, очень большая экзотика нынче, чтобы было без AST.
источник

а

акварель на мету in Compiler Development
Михаил Бахтерев
Это, наверное, очень большая экзотика нынче, чтобы было без AST.
тогда как его понять?
источник

МБ

Михаил Бахтерев in Compiler Development
Ну... Попробуйте в Lisp-е или WASM-е чего-нибудь накодить. Возможно, поможет пониманию.
источник

AK

Andrei Kurosh in Compiler Development
акварель на мету
Кстати, а где можно почитать про подходы парсинга языка и трансляции его в ассемблер ?
А то эти АСТ мне пока-что совершенно непонятны, кажется не с них начинают.
По идее же есть какие-то простые/примитивные способы парсинга и трансляции ?
Перевод текста в AST с помощью top-down парсера, а затем в некий стековый байткод путем обхода AST в глубину - это и есть самый простой и примитивный способ
источник

M

MaxGraey in Compiler Development
акварель на мету
тогда как его понять?
AST это дерево. Вершины - это правила, ребра - это символы. Строиться из потока / списка токенов после лексического разбора. Нужен для постороения символьной таблицы, семантического анализа и дальнейшей трансформации (например в IR) или непосредственной генерации целевого низкоуровневого кода. Что здесь сложного?
источник

p

polunin.ai in Compiler Development
MaxGraey
numba все таки весьма ограниченный сабсет, а еще не все функции у numba быстрее чем в CPython)
Numpy != Cpython
источник

а

акварель на мету in Compiler Development
MaxGraey
AST это дерево. Вершины - это правила, ребра - это символы. Строиться из потока / списка токенов после лексического разбора. Нужен для постороения символьной таблицы, семантического анализа и дальнейшей трансформации (например в IR) или непосредственной генерации целевого низкоуровневого кода. Что здесь сложного?
и как его использовать ?
источник

а

акварель на мету in Compiler Development
можно какой-то пример построения ?
источник

p

polunin.ai in Compiler Development
Михаил Бахтерев
Google имеет кучу пользоваелей, поэтому его решения заметны. А так-то все эти техники довольно давно "академия" предлагала. Но кто знает об "академии"? Нужны масштабные приложения.

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

а

акварель на мету in Compiler Development
MaxGraey
AST это дерево. Вершины - это правила, ребра - это символы. Строиться из потока / списка токенов после лексического разбора. Нужен для постороения символьной таблицы, семантического анализа и дальнейшей трансформации (например в IR) или непосредственной генерации целевого низкоуровневого кода. Что здесь сложного?
что значит вершины — правила ?
источник

p

polunin.ai in Compiler Development
акварель на мету
Кстати, а где можно почитать про подходы парсинга языка и трансляции его в ассемблер ?
А то эти АСТ мне пока-что совершенно непонятны, кажется не с них начинают.
По идее же есть какие-то простые/примитивные способы парсинга и трансляции ?
Пишешь транслятор в LLVM IR и все
источник

p

polunin.ai in Compiler Development
акварель на мету
можно какой-то пример построения ?
2 + 3 * 9
Парсится как дерево:
+
2  *
 3 9
источник

а

акварель на мету in Compiler Development
polunin.ai
2 + 3 * 9
Парсится как дерево:
+
2  *
 3 9
хмм
источник

а

акварель на мету in Compiler Development
вроде понятно
источник

G

Gymmasssorla in Compiler Development
акварель на мету
Кстати, а где можно почитать про подходы парсинга языка и трансляции его в ассемблер ?
А то эти АСТ мне пока-что совершенно непонятны, кажется не с них начинают.
По идее же есть какие-то простые/примитивные способы парсинга и трансляции ?
"Language Implementation Patterns"
источник

а

акварель на мету in Compiler Development
акварель на мету
вроде понятно
но как это получить...
источник

а

акварель на мету in Compiler Development
особенно циклы непонятно
источник