Skip to content

Создание DSL-компиляторов на Python / Петр Советов (МИРЭА) | Технострим

Петр Советов рассказывает о создании DSL-компиляторов для проблемно-ориентированных архитектур на Python.

Ask about this video. Answers come from its transcript only — with the timestamp, so you can check them.

Generated from the transcript and can be wrong — check the timestamp.

Key Takeaways

  • DSL-компиляторы упрощают создание специализированного ПО для проблемно-ориентированных архитектур.
  • Совместная разработка архитектуры, языка и компилятора повышает эффективность и оптимизацию.
  • Python является удобным языком для разработки DSL-компиляторов и инструментов трансляции.
  • Проблемно-ориентированные архитектуры занимают промежуточное место между универсальными процессорами и ASIC.
  • Создание DSL-компилятора требует учета ограничений языка и специфики аппаратной платформы.

What the video covers

  • Введение в тему DSL-компиляторов и их роль в специализированных процессорных архитектурах.
  • Обзор проблемно-ориентированных архитектур как компромисса между универсальными процессорами и ASIC.
  • Примеры современных проблемно-ориентированных архитектур и соответствующих DSL-компиляторов (Google TPU, Pixel Visual Core, P4).
  • Рассказ о собственном опыте создания компилятора для подмножества C99 и софт-ядра для FPGA.
  • Обсуждение преимуществ совместной разработки архитектуры, языка и компилятора.
  • Технические детали и сложности создания DSL-компилятора, включая этапы компиляции и оптимизации.
  • Использование Python и других инструментов для создания компиляторов и трансляторов.
  • Анализ существующих подходов и поиск альтернативных решений для упрощения разработки DSL-компиляторов.
  • Примеры применения DSL-компиляторов в задачах искусственного интеллекта и обработки данных.
  • Обсуждение перспектив и вызовов в области проблемно-ориентированных архитектур и компиляторов.

Answers

Questions about this video

Что такое DSL-компилятор и зачем он нужен?

DSL-компилятор переводит предметно-ориентированный язык в машинное представление, упрощая разработку специализированного программного обеспечения для проблемно-ориентированных архитектур.

Какие преимущества проблемно-ориентированных архитектур по сравнению с универсальными процессорами и ASIC?

Проблемно-ориентированные архитектуры сочетают программируемость универсальных процессоров с высокой эффективностью и производительностью специализированных ASIC, ориентируясь на узкий класс задач.

Почему Python подходит для создания DSL-компиляторов?

Python удобен для разработки компиляторов благодаря своей выразительности, наличию библиотек для синтаксического анализа и трансформации кода, а также популярности в задачах искусственного интеллекта и обработки данных.

Full Transcript — Download SRT & Markdown

00:06
Speaker A
Добрый вечер, я Петр Советoв, и сегодня хотел бы с вами поделиться ника дизель компиляторов. Я принимал участие в нескольких проектах, в рамках которых приходилось работать над созданием некоторых специализированных процессорных архитектур. И так как процессоры специализированные, это обычно было
00:34
Speaker A
приходилось вручную самостоятельно создавать инструментальное ПО, есть компилятор, симулятор, ассемблер. Вот этим я занимался. Соответственно, доклад мой, конечно, не DSN в целом. Да, я думаю, большинство присутствующих прекрасно знают, что это подход очень хороший, популярный в последнее время. Но если мы просто посмотрим на DSL,
01:02
Speaker A
на то, как они используются сегодня, в принципе тут даже само слово, словосочетание DSL компилятор может выглядеть слишком, наверное, тяжеловесно. То есть обычно у нас в один проход, в один шаг транслируется какое-то наше проблемно- или предметно-ориентированное представление во что-то внутреннее. Например, в случае
01:25
Speaker A
Питона может быть какое-то текстовое представление, сразу словари, списки, и всё это уже, собственно говоря, и есть DSL. У меня немножко другая область, о чём идёт речь — проблемно ориентированные архитектуры. Что это такое вообще? И, наверное, начну издалека. В 2017 году известную премию
01:52
Speaker A
Премию Тьюринга получили два компьютерных учёных — Хеннесси и Патерсон. Премия Тьюринга — это самая-самая уважаемая премия в компьютерных науках. За что они получили? За вклад в создание RISC архитектуры, без которой не было бы современных процессоров ARM и ПО и
02:13
Speaker A
подобных, за их учебники. Да, может быть, кто-то их читал — Хеннесси, Патерсона, архитектура компьютерных. Так вот, обычно она, так сказать, или вручение этой премии ещё проходит лекция, где лауреат рассказывает о том, как он, так сказать, перспективы видит своей области. И вот
02:36
Speaker A
Хеннесси и Патерсон говорили примерно следующее: мы вступаем в новую эру — эру проблемно-ориентированных архитектур, которые будут программироваться на проблемно-ориентированных языках, и это будет совместная разработка как программной, так и аппаратной части. Как это вообще говоря выглядит? Вот посмотрите на картинку: есть у нас
03:02
Speaker A
процессор общего назначения — GPP (General Purpose Processor). Это нам всем знакомый процессор, который стоит в ноутбуках, на рабочих столах. С другой стороны, есть так называемые ASIC — микросхемы с какой-то фиксированной функцией. Характерный пример недавний — это вот так называемые
03:25
Speaker A
добытчики криптовалют, например. Чем ASIC лучше универсального процессора? Ну, понятно, он, так сказать, ориентирован на конкретную единственную задачу, поэтому может быть по производительности, по энергоэффективности, по площади на кристалле он явно выиграет. С другой стороны, универсальный процессор предназначен для решения самого широкого
03:51
Speaker A
спектра задач, и на всём этом спектре он демонстрирует какую-то усреднённую, не совсем плохую производительность. Мы не можем использовать только и всегда даже если мы будем использовать специализированные блоки, разместим их на кристалле, то в общем случае нам потребуется слишком много специализированных блоков,
04:12
Speaker A
да, потому что SoC — система на кристалле — предназначена для какого-то класса задач, но задача слишком много, скорее всего, будет. Так вот, какой может быть компромисс? Вот это как раз domain-specific архитектура, то есть проблемно ориентированная архитектура, которая с
04:26
Speaker A
одной стороны всё ещё программируемая, но с другой стороны она ориентирована на узкий класс решаемых задач, соответственно программируется на, так сказать, в таком режиме на каком-то специализированном языке. Насколько это вообще сейчас популярно? Может быть, давайте рассмотрим пример, как
04:47
Speaker A
раз проблема ветеран их архитектурного. Сначала я ещё раз акцентирую внимание на связке, на вот этой вот тройке: у нас есть проблема, интересный язык, у нас есть проблемно ориентированная архитектура, и недостающее звено — это как раз DSL компилятор, который вашу предметную
05:04
Speaker A
нотацию переводит в машинное представление. То есть понятно, что компилятор этот уже будет, наверное, посложнее встроен, чем какой-нибудь красивый конфигурационный файл, для которого внутреннее представление организовано. Тут будет несколько стадий, это будет уже что-то близко к традиционному компилятору, но тем не менее
05:28
Speaker A
доменный компилятор обычно всё-таки устроен проще универсального компилятора в духе GCC и Clang, так далее. Всё-таки ему требуется иметь дело с ограниченным языком. Более того, мы сам язык можем приспособить под нужды нашего компилятора, если мы знаем, что наша архитектура
05:43
Speaker A
хорошо работает с такими методами компиляции. Но нам нужно, например, чтобы у нас не было, допустим, указателей в языке или ещё чего-то. Но давайте уберём, сделаем хороший компилятор, у нас язык маленький, и если у него простой синтаксис, никто не расстроится, чего-то
05:59
Speaker A
там такого не будет. В принципе, доменный компилятор может быть, и при том что он проще устроен, чем GCC, Clang и так далее, он может генерировать более эффективный код, потому что, ну, при должном старании мы можем даже дойти до такого
06:16
Speaker A
оптимизации уровня алгоритмов, что он в универсальном компиляторе. Но это недостижимая мечта. Хорошо, так всё-таки давайте рассмотрим какие-то примеры проблемно ориентированных архитектур. Вот он — гугловский чип, я думаю, известный вам, для задач ускорения, для ускорения машинного
06:40
Speaker A
обучения — Google TPU, вторая версия. Ну, видно, что это какая-то высокая параллельная структура, тут какая-то матрица и специализированных элементов. Сейчас нам интересно просто, что есть некая библиотека TensorFlow, её можно считать DSL-ем или можно считать библиотекой,
06:59
Speaker A
это не суть важно. Есть компилятор специализированный DSL компилятор XLA, который переводит TensorFlow в представление TensorFlow на машинный уровень уже типа, ну, и вот собственно DSL — вот этот, то есть DSL. Давайте рассмотрим ещё один
07:16
Speaker A
пример — та же самая компания Google, вот это ускоритель для задач уже обработки изображений — Pixel Visual Core. Опять же, какая-то параллельная структура и операции внутри. Здесь они показаны, но операции специально выбранные для вот этой узкой задачи обработки изображения, для
07:32
Speaker A
каких-то там свёрток и так далее, фильтров. Есть специальный язык Halide, на котором как раз выражаются, описываются эти задачи, и он не компилятор. Третий пример — немножко из другой области: программируемый сетевой коммутатор был P4, афина, тоже какая-то параллельная конвейерная структура, и эта штука тоже
07:59
Speaker A
программируемая и программируется на языке, который похож и становится стандартом в области описания обработки сетевых пакетов, называется P4. Есть язык специализированный, есть и архитектуры, но и третий важный компонент — это собственно DSL компилятор, он тут тоже есть — P4 compiler.
08:21
Speaker A
Так действительно, архитектуры RISC существуют, и крупные компании уже давно обратили на них внимание, делают свои решения. По поводу моего опыта создания DSL компиляторов: я создал, в частности, компилятор для подмножества C99 — это такой и подобный язык с синтаксисом и
08:46
Speaker A
семантикой, близкой к стандарту C90, для коридорного ускорителя, который был выпущен на кристалле по технологии 28 нанометров. Понятно, что даже крупные компании не всегда себе могут позволить создание своей собственной микросхемы, но есть хорошая альтернатива — те самые FPGA,
09:06
Speaker A
программируемые логические интегральные схемы. Для них я тоже создал ряд инструментальных средств в разных проектах. Это были, в качестве примера, какие-то софт-ядра для FPGA, которые занимались задачей управления, ограниченные по ресурсам, настолько, что стандартные GCC туда
09:30
Speaker A
просто не укладывался. Плюс у них были особые, такие интересные характеристики. Я немножко позже расскажу о конкретном примере такого софт-процессора и о том, как был сделан компилятор для него. И так, вот я выше сказал о том, что в идеале
09:49
Speaker A
было бы хорошо разрабатывать совместно и архитектуру, и язык, и компилятор. Это точка зрения, и сейчас вообще не видим, да, практически, то есть где-то в академических каких-то статьях, учебниках об этом иногда пишут и даже называют этот подход compiler-ink. О чём идёт речь?
10:07
Speaker A
И это итеративный подход, то есть мы ищем в пространстве наших архитектурных вариантов.
10:27
Speaker A
количество тактов до энергопотребление там оценивая может быть не очень точно но все-таки оценили про моделировали смотрим устраивает нас результат если нет выдвигаем новый вариант архитектуры перестраиваем компилятор и повторяем пока так сказать нас не устроил вариант конечно традиционно делается не так
10:47
Speaker A
обычно разрабатывается долго разрабатывается архитектура а потом для нее создается компилятор до в результате у нас нет обратной связи мы не можем например определить еще на этапе поиска нужного варианта архитектура что вот с доступными нам методами компиляции вот такие вот вещи наборе инструкции
11:10
Speaker A
будут плохо работать у нас нет обратной связи повторяюсь хорошо как же нам использовать такой подход компилятор внутри цикла разработки архитектуры ну давайте напомню основные стадии компиляторы да у нас есть лексический и синтаксический разбор семантический анализ какой-то до преобразование уровня промежуточных
11:31
Speaker A
представлений их может быть много как преобразование так и самих промежуточных представлений и в конце у нас порождается целевой код и обратите внимание что в настоящее время особенно в в задачах о которых я говорю лексический и синтаксический анализ это
11:45
Speaker A
самая не интересная область хотя в учебниках да и часто уделяется повышенное внимание потому что она самая формализована да в принципе известно как все это строится но самое интересное да с точки зрения особенно проблем ориентированных архитектур на как раз
12:02
Speaker A
поздней стадии до семантический анализ он в принципе важен для для многих современных языков то есть вот эта вот работа с анализом типов и так далее но эти все остальные стадии менее формализованы мы у нас нет таких хороших инструментов для того
12:21
Speaker A
чтобы их красиво описывать или может быть есть может быть моя них просто не знаю давайте двигаться дальше традиционные средства разработки компиляторов но вот они иногда города называются генераторы компиляторов да и а клипсу рефлекс бизон и так далее но
12:37
Speaker A
это на самом деле просто генераторы синтаксических анализаторов но в некоторых случаях они помогают но обратите внимание что по каким-то причинам например в том же самом джесси elise long вы не встретите использовании генератора синтаксического анализатора там все делается вручную рекурсивный
12:58
Speaker A
спуск да и и к нему добавление какие то почему так делается в принципе вроде бы санта подход хорошим того же самого яко бизон и так далее это внешний dsl но как сказать то что они внешне это тоже не
13:15
Speaker A
всегда удобно и там есть свои проблемы например проблемы с обработкой ошибок и так далее ну давайте все таки дальше двигаться вот у нас есть еще llvm и те же самые джесси вот и ловим казал ты вот как раз система для всех остальных
13:32
Speaker A
стадии компиляции там как раз нет синтаксического анализатора генератор такого а вот для остальных кстати там есть какие-то полезные инструменты ну в принципе да так оно и есть но вспомните нашу задачу до итеративный подход компилятор в цикле разработки нам нужно
13:48
Speaker A
быстро перестраивать компилятор головам хорошая вещь но она слишком тяжеловесны она слишком большая сложная для наших задач то есть вот какой я сделал для себя вывод и начал искать какие-то альтернативные подходы к своей задаче что я нашел я обратился к истории вот
14:12
Speaker A
этот раздел доклада мне очень нравится но я понимаю что история не всем интересно да поэтому я постараюсь как-то покороче это все озвучить вот дашься третий год система meta 2 что это такое за meta 2 это dsl для описания компиляторов который
14:30
Speaker A
еще и описан сам на себе и все это в 20 строчках кода там качестве нотации используется популярное сегодня пик грамматика разбирающийся ражение только обратить внимание пик приобрел популярность в начале двухтысячных а в meta 2 уже все это было ну как
14:51
Speaker A
говорится новое хорошо забытое старое дальше 67 год trimmed а это ещё одна система которая базируется на идеях не то 2 мы здесь уже 2d sl1de цель от meta 2 этого которая как раз пик формализм до для описания на
15:08
Speaker A
количество анализа + 2 dlc для описания приобрел преобразования уровня синтаксического дерева там прямо красиво как вот тут пишут людям функциональных языках программирования с сопоставление с образцом у них это вот на хаски лаком это все изящно получается так вот это было уже в
15:27
Speaker A
седьмом году два dsl достаточно изящно описывали довольно сложные языки описывали компилятор для них идем дальше парсер про то тоже интересная вещь причем было забыто на долгое время и по моему лет 10 назад и из тавы вот эту технику сделал популярным никто иной как
15:50
Speaker A
да глаз кроуфорд автор джейсон если вы помните у него есть еще система джеймс линд да кажется она называется для проверки джаваскрипт кода на корректность на как она какой-то там стиль и так далее так вот для того чтобы джеймс кент ему написать он
16:09
Speaker A
воспользовался вот этой забытой идеи парсера про то по сути там и речь идет о том что мы можем оставаясь в наш в рамках обычного рекурсивного спуска декларативно описывать конструкции с приоритетами прямота в табличном виде у него были описано не просто даже
16:25
Speaker A
обычной операции до плюс минус и так далее но вплоть до и файл и и все прочее то есть не нужна никакая не какая борьба слева или левосторонней рекурсией но это те кто занимается из теорий этих языков может знает хорошо я вот создаваться
16:45
Speaker A
особенно не буду перед лучше ксилеме седьмом году пролог nissan пролог конечно он появился раньше а работа генри ворона это известная личность именно в мире пролога но здесь я много будут не буду говорить но он написал у него работа есть посвященное тому как
17:04
Speaker A
можно описывать компилятор описывать языке с помощью пролога он показывает несколько примеров вот прямо все стадии синтаксический анализ все преобразование порождения кода это вот у него работать вместительного года и смотришь на нее думаешь ничего себе да человек просто из
17:20
Speaker A
будущего и понятно что тогда это могли невеста не воспринять потому что пролог язык не выстроить но сейчас почему бы не писать компилятор на прологе я подумал тем более что вот у неё хорошая фраза спецификация компилятора и то есть и и
17:37
Speaker A
реализация потому что в прологе ничего лишнего в коде вы практически не найдете но понятно что создании компиляторов на прологе это некоторые утопия но идеи какие-то урона вполне можно почерпнуть давайте теперь перенесемся сразу 98 год эта система в стратегов вот расскажу на
17:55
Speaker A
мой взгляд это вот из того что я для себя нашел это близкий к идеалу способ описывать преобразование программ очень мощная аннотации в которой прослеживается и влияние пролога и пик и так далее красиво они называют свой подход стратегическое переписывание термов ну
18:17
Speaker A
если говорить человеческим языком принципе это штука основанное на сопоставление с образцом на уровне деревьев туда же интегрированы обхода деревьев туда же интегрированы механизм откатов и все это в сумме дает больше более мощный эффект чем например использование функциональных обычных
18:38
Speaker A
языков духе а кому или haskell для именно преобразования программ в качестве так сказать подкрепление что называется моим и вот этой фразы в могу предана пример привести есть несколько даже реализации на хаскел стратега несколько версий стратега натаскивает существует так хорошо все же
19:02
Speaker A
на основе то о чём я говорил выше как же быстро создать прототип компилятора вот то что для себя принял за axiom должен быть набор встроенных должен быть набор да и сальдо для начат dsl к то есть и проблемно-ориентированных языков каждый
19:17
Speaker A
для своей фазы компиляции или по-крайней для самых важных фазы компиляции то есть так чтобы красиво без чего-то лишнего писать эти самые фазы компиляции причем это должен быть набор встроенных ds или вот я выше говорил о том что внешне этой
19:33
Speaker A
цели это конечно красиво читаема но если мы имеем дело с набором взаимодействующих проблемно-ориентированных языков нам нужен какой-то нам нужна какая-то основа для всего этого да нам нужно язык реализации которые позволят им хорошо взаимодействовать собственно по поводу языка реализации то есть я должен быть
19:53
Speaker A
реализации высокого уровня который позволяет строить встроенный dsl ну и удобные для быстрый зароботок небольших проектов да может быть питон нам подошел бы кстати говоря питон еще хороший том смысле что а многие интересные алгоритмы компиляции близкие близки к задачам у классическим
20:15
Speaker A
задачам искусство интеллекта и для меня кстати питон это вполне себе язык для задач искусно интелекта я это для себя точно понял когда посмотрел как питер норы когда известный автор учебника по иску стан интеллект как он пишет на питоне человек который вот всю
20:36
Speaker A
жизнь я так поняла программе равна листки он неплохо так сказать перешел на пенобетона и по-моему не испытал никакого дискомфорта ну и наконец третий момент да мы выбираем просты и легко реализуемо алгоритма компиляции просты и легко реализуемые и мы обычно не смотрим вот в
20:53
Speaker A
данном контексте нашей задачи проблемно-ориентированных архитектур мы не не очень-то смотрим на той насколько мы быстро компилируем программ потому что чаще всего у нас небольшие программы до для наших ускорителей для маленьких ядер нужны не очень большие программы соответственно время компиляции для нас
21:11
Speaker A
не так важно то есть мы можем им ну да какой то определенной степени пренебречь но зато получить более изящный более элегантный к реализации красный код почему же я в конце концов пришел набор инструментов вот я бы назвал так рад dsl
21:29
Speaker A
парень проверил что в google он не находится не очень читаем и название но тем не менее что там в основе два внутренних проблем новинки rowan их языка который реализовал в виде библиотек комбинатор of комбинатор я надеюсь большинство здесь или понятно известно
21:47
Speaker A
это как раз классический подход и опять же из функциональных языков программирования на классический подход для создания внутренней встроенных dsl первая библиотека первый модуль нужен для задача лексического синтаксического анализа то есть это тот же самый пик формализм плюс парсер про то для того
22:09
Speaker A
чтобы нам красиво описывать и так сказать обычные грамматики и те моменты которые касаются операции с приоритетами и второй модуль ребра it играет трансформации порождение кода вот как раз здесь это просто я реализовал свою маленькую версию стратега до их и acadia
22:34
Speaker A
ведь деле написал я люблю нить или зации мне кажется что важно чтобы проект снимал если я на одним одни один работаю до чтобы он занимал как можно меньше строк чтобы было легче поддерживать развивать то есть реализация получилось вполне себе
22:50
Speaker A
миниатюрная давай теперь рассмотрим примеры того что же можно сделать с помощью этого набора инструментов вот здесь кавычках название это кто-то не дал ссылку на родит есть так такая задачка что нужно сделать есть программно не которому языке ассемблера для какой-то абстрактной машины нужно
23:16
Speaker A
понять останавливается ли эта программа или ну проверив по-моему стоит 100 тысяч операций или то что она не останавливается в данном случае просто акцентирую внимание на задача синтаксического анализа вот как нам разобрать вот этот простейший ассемблер как это делается с помощью моей
23:33
Speaker A
библиотеке порции надеюсь вам видно вот собственно говоря вся программа разбора начнем с последней строчке то есть программа это помните я говорю пока про комбинаторы всех это от слова sequence программа эта последовательность число за которым идет мы не до множество
23:54
Speaker A
инструкции мы не это то же самое что в привычном я думаю вам формализме регулярных выражений то есть 0 или больше до звездочка инструкция инструкция состоит из имени и множество чисел группа здесь означает что это не просто последовательность результат вот
24:15
Speaker A
это вот всего вот имени и множество чисел будет помещен на стек результатов виде списков далее у нас есть имя но имя у имени достаточно понятно да определение единственно что комбинатор квот означает что вот это вот сам лето то есть несколько букв
24:34
Speaker A
мы цитируем или вырезаем из входного текста и кладём на стек результатов как уже строчку которая состоит из букв букв с числом при примерно то же самое единственное что в конце видите там есть камни на борту что он делает он берет здесь указано один
24:54
Speaker A
аргумент со стеком результатов и конвертирует его стандартной функции питона число то есть строку состоящий из цифр переводе в число ну а ws имеется вполне очевидное для определения и вот собственно мы получили результаты на уровне списка в питон а
25:14
Speaker A
тут уже все иерархия присутствует более сложный пример я сейчас сильно его разбирать не буду потому что помните я а ты говорил что синтаксический анализ не самая важная задача привожу вам примеры как раз на этот симпатичный технический анализ но
25:28
Speaker A
все-таки задача разбора джейсон да это своего рода hello world таких инструментах обязательно надо разобрать джейсон показать на сколько строк он занимает в моем случае вот подчеркнуто последняя строка сначала я делал лексический анализ а потом синтаксический то есть и сначала я
25:47
Speaker A
порождаю последовательность токенов а потом уже всю иерархию разбирают что такое токены токина это просто множество токи надо за которыми какое-то количество пробельных символов и конец строки что такое talking это опять же множество пробелов может быть или не быть
26:04
Speaker A
за которым вот новый комбинатор альтернатива alt оператор строка или число ну и так далее вот например что такое оператор что такое число там все принципе по аналогии реализовано опять же я просто взял грамматику джейсон и в лоб реализовал это на комбинатор ах
26:23
Speaker A
синтаксический анализ опять же последняя строка здесь мы уже получили на вход последовательность токенов и смотрим как с ними работать джейсон в целом это или объект или массив соответственно объект это вот тут указано с фигурные скобки открывающиеся до группа
26:41
Speaker A
из опыт это означает опционально то то есть возможно а может они быть то есть группа из возможного списка чисел до за которым так сказать список разделенных чисел в запятой ну и так далее там вот ночника источников не чисел до это не очень
27:00
Speaker A
хорошо вижу это конечно же член структуры достичь член объектом что такое member указано выше да это строка за которой стоит ставить двоеточие и за которым какой-то значение находится ну и так далее мать массив по аналогии определенно опять же
27:17
Speaker A
это все просто практически механический перевод грамматики на из-за этих комбинатор of a и что такое значение тут тоже указано ну давайте обязательно сравним производительность с чем сравнить я вот выбрал библиотеку который мне нравится тоже своей менее миниатюрностью изящностью funk парсер
27:37
Speaker A
lip что у нас получилось мы использовали в качестве теста twitter джейсон некий файл который больше полу мегабайта до занимает получилось интересно смотрите сначала я проверяю результат и лексического анализа то есть вот adsl этом моя версия с кран и соответственно
27:57
Speaker A
funk партер липская и вот тут я довольно серьезно проигрывая а далее синтаксический анализ почему-то я выиграл да в чем дело оказывается ты же сам для себя говоря оказывается это я выяснил то лексический разбор сон парсер lip реализован с помощью регулярных
28:15
Speaker A
выражений да на питоне а так-то в принципе у меня это все реализовано только силами парсер парс в этот пиво и май получилось так интересно то есть принципе с точки зрения практического и используемости вполне можно использовать мою библиотеку тем более что я и и
28:31
Speaker A
тестировал и на более сложных языках вот я раньше говорил о том что си 99 до потому что даже не подмножество с точки зрения грамматики я полной разбираюсь и 99 и конечно это сложно сравнить с тем как эта задача была бы реализовано на си
28:45
Speaker A
плюс плюс по быстродействию но я сравнивал с какими-то аналогами на питоне есть например проект си парсер который делает примерно то же но я выиграл по моему в 2 или 3 раза так что но при этом я хочу еще раз отметить
29:01
Speaker A
задача именно получить какой-то высокое быстродействие меня не не ставилось идем дальше вот теперь давайте все-таки закончили синтаксическим анализом полностью и рассмотрим как же можно использовать вторую библиотечку rewrite предположим у вас есть устройство на базе никакого to please с чем она занимается считывает данные с
29:21
Speaker A
каких-то датчиков температура вращения вентиляторов управляет множеством разных каких-то периферийных устройств этой диодных лент то есть у нас есть множество простых задач реального времени их очень много и в этом плане традиционны микроконтроллер не очень подходящие решения а вот специализированное софт ядро
29:43
Speaker A
решение более интересные тем более что сейчас принципе недорогие микросхемы в пиджей сравнялись с по стоимости с микроконтроллерами то есть вполне себе можно выбрать что вам нужно нужна гибкость какая специализация или традиционные подходы по поводу софт ядра я единственная скажу что опять же
30:05
Speaker A
разрабатывалась совместно с компилятором с языком это некий 30 битный процессор в со встроенной многопоточность you многопоточность там нужно для интересной вещи мы решили отказаться от стандартных вот для встроенного программирование вещей в духе прерываний прямого доступа к памяти у нас этого ничего нет у нас
30:25
Speaker A
есть потоки и мы через потоки делаем все иное нам этого хватает для всего и при этом памяти конечно него очень очень мало ну 8 килобайт какой тут компилятор сида можно конечно но не в нашем случае и вот я назвал
30:41
Speaker A
компилятор уж но язык тоже уж то есть питон и уж не что такое просто безобидная причем вообще говоря в реальных проектах у нас использовался другой компилятор а вот этот уж я придумал именно когда работал над докладом мне просто подумать как вы же
31:00
Speaker A
можно вести придумать проекта чтобы вообще обойтись без синтаксического анализа я вспомнила в питоне же есть замечательно библиотека с т вот использую как и к ее а дальше уже использую свою собственную разработку то есть входной язык уже это компилируем а
31:16
Speaker A
и подмножество питона компилятор малинки да как тут видно и так то есть что что получается я получаю от модуля с то результат в виде аисты объектов до стандартных тут кстати один не очень приятный нюанс у меня моя моя библиотека работает для
31:33
Speaker A
30 ли второй версии питона а вот оказалось что аисты объекты с вами несовместимого 2 3 версии да там есть некие расхождения что меня немножко растром но не важно хорошо дальше упрашивала упрощение конструкции происходит семантический анализ потом какие-то еще стадии о которых я думаю а
31:53
Speaker A
дальше подробнее скажу так вот у нас есть некая программа да вот этот вот обязательный факториал слева справа это то что делает стандарт библиотека st то что я получаю с помощью вызова соответствующих функций методов с этим работать я не хочу я не хочу
32:11
Speaker A
использовать подход посетителей да вот это все встроенном них у меня есть мой вариант стратега я знаю что эта штука очень мощный поэтому первое что я делаю это обхожу все эти объекты и перевожу их в термы первый вот как выглядит как показано
32:28
Speaker A
здесь по сути если вы знаете что такое с выражение термо это почти то же самое то есть ну вот такой вариант описания дерево синтаксиса но обратите внимание боль читаемый вариант даты слева написано и равно 1 справа написано при
32:42
Speaker A
слой да и стефи к туру р за численное значение 1 ну и так далее все в виде таких вложенных термов что с этим можно делать дальше вот начинает работать моя библиотечка rewrite что здесь указано это целый набор правил то есть вот
33:01
Speaker A
сейчас правило подсвечена если мы встретили это сопоставление по образцу нас происходит по древовидным у добраться на уровне ты термов если мы встретили что есть некая операция бинарная плюс снег некоторыми целочисленными термами x и y обратить внимание что здесь на ходу
33:16
Speaker A
осуществляется сопоставление переменных да с какими-то значениями x и y этого такие вот переменные которые на ходу получили значение так сказать аргументов int термо то переводим этот результатов единственно термин который является суммой x и y да то есть мы сложили константы
33:39
Speaker A
таким образом но и так далее мы можем вычесть константы мы можем проводить упрощение ворожи то есть на уровне переписывания термов можно сделать очень много и вот еще интересная так называемая стратегия как всё это работает если подать на вход
33:55
Speaker A
прямо всю функцию да и и дерево bottom-up это комбинатор который осуществляет стратегию обхода дерева то есть в моей системе стратегий строится из более примитивных стратегии все это мы программируется той bottom-up вот мы обошли дерево с низу вверх до
34:13
Speaker A
и попытались применить на каждом шаге вот этот набор правил таким образом мы упростили все что хотели более интересный пример упрощения замена высокоуровневой for awhile опять же вот такой декларативный вариант описания то есть если встретился терм который по сути с точки зрения питон это for
34:34
Speaker A
какой-то x in range y и с телом z да вот тут это все указано подсвечена то заменить это все на последовательность до присваиваем x0 потом мы вместо for используем уже файл и к телу добавляем присваивание x это у
34:54
Speaker A
нас теперь x + 1 то есть получились for a while ну и опять же в данном случае можно используем комбинатор top-down да вот вот такие вещи удобно обходить сверху вниз ещё пример вот мы у мы работаем сейчас на этапе файл а как набрал
35:10
Speaker A
перевести в низком уровне и представления то что на уровне деревьев мы не можем установлен оставаться бесконечными процессор стыковые поэтому низкого уровня представления тоже стыковая то есть если мы встретили файл вот эти обратить внимание вот здесь вот вот эти комбинатора лет x лет y это вот
35:27
Speaker A
как мне показалось я нашел изящное решение для описания вот этих вот декларации переменных на уровне сопоставление с образцом то есть я просто использую именованные аргументы так вот во что это переводится если мы встретили wild это переводится уже в линейно последовательность то есть
35:45
Speaker A
x это у нас условиях было цикла до после метки у нас добавляется потом голод у ив зиру то есть если у нас x то есть условие было ложным мы переходим на метку или два она там ниже описано далее
35:58
Speaker A
был м2 иначе мы идем выполняем какую-то последовательность y дать тела у нас файл и переходим безусловно переходов члена или один ну вот собственно говоря уже совсем низкий уровень и у меня также есть этот тип холл оптимизации как они еще называются
36:17
Speaker A
оконные дага ласковой оптимизации они проводятся уже на уровне линейного представления то есть если мы встретили какую-то инструкцию за которой идет литерал 0 а потом плюс это уже обратная польская запись до стыковая заменяемые просто на прошу прощения заменяемая просто на x
36:36
Speaker A
ну и второй пример тоже если встретили где-то ног-то заменяемого просто на пустую инструкцию вот пример программы обратить внимание здесь программа у меня состоит как бы из двух частей есть функции которые определены с декоратором хост это означает что данная функция будет
36:58
Speaker A
работать только на так компиляции она нужна например для заполнения каких-то таблиц буферов до внутри мы можем использовать все возможности питона то есть на самом деле вот здесь пойдут на устройство только сайт apple ibook но заполнить таблицу синуса соответствующая функция то есть в
37:16
Speaker A
область данных пойдут вот эти вот собственно говоря буферы а вот главная функция и вот она-то как раз будет моим компилятором переведена в представление для данного процессора здесь я управляю какой-то светодиодной лентой обратить внимание что тут есть обращение к
37:36
Speaker A
собственно говоря операции до функциям который работать с этой лентой например ws sand buff до все это реализовано тоже на уже то есть кот получать настолько ну достаточно эффективным что в принципе вроде как пишем на питания работает довольно довольно быстро то есть сам протокол ww
37:59
Speaker A
с да там по моему 2 мегагерца вполне себе на уже так сказать и выполняется и вот собственно говоря как выглядит результат да вот это вот такое представление я потом еще раз по нему прохожу и уже генерирую совсем уже
38:14
Speaker A
готовый целевой код этот целевой код переводится в оформлять в виде закрученную пакет идет на микросхемой в печей и выведем какой-то световой эффект допустим вот собственно говоря о чем я чем я хотел с вами сегодня поделиться моей библиотекой компилятор уж есть на
38:35
Speaker A
git хоп так что если интересно зайдите посмотрите спасибо большое а пётр отличный доклад о но я напомню для тех кто не знает зал лучший вопрос который петр выберет мы вручим вопрошающему книжку вот у нас есть один желающий пока по
38:56
Speaker A
компилятором книжках рождение пару вопросов раз уж это не не была какая-то специфическая железка этой был фпг то у меня такой вопрос тут была сама цель это экспериментально попробовать или же например уйти от того же самого перелова или видите или писали на более
39:17
Speaker A
высоком уровне ну изначально это коммерческий проект но в коммерческом варианте в качестве входного языка избран java script подобный и только для доклада меня осенило действительно зачем вообще писать синтаксически анализа нас есть замечательный бетон библиотека с еще более замечательно и то
39:37
Speaker A
что сейчас выглядит как демонстрации я думаю что использую потом где-нибудь на более серьезном уровне потому что согласитесь писать на питоне код не никогда не майкро python а вот именно компилируем на кого-то то по моим интереснее чем arduino но мне так
39:51
Speaker A
кажется пример и что вы еще хотели спросить все же то есть я вспомнил видели там конечно есть внутри этот это так сказать как бы мы работаем дуете я занимаюсь инструментальным средствами наши схемотехник пишет код на вич деле мы
40:15
Speaker A
конечно обмениваемся данными и в том числе на питоне и гинер иногда и вич день код и разбирая его вич del qua тоже то есть вот такое взаимодействие да спасибо за доклад собственно очень интересно и достаточно подробно и даже рассказать не ожидал только у меня
40:32
Speaker A
на данном этапе пока один вопрос увидел что у вас под капотом некоторые функции преобразуются в год у насколько мне известно от него пахло мире высоких языках постарались ведь и на и file for почему вы все такие вы решили оставить почему вы не
40:49
Speaker A
использовали те же гифы к примеру потому что простой простой причине потому что голову и веру и так далее это уже считайте что это инструкции машины а без голод у на уровне машинного языка мы никогда не обойдемся вот коля понял красиво
41:12
Speaker A
это спасибо за доклад такой вопрос а какая целевая аудитория вот этой библиотеки и мы связаны вопрос думали ли вы на тему подкладывания соломки то есть на этапе компиляции предупреждать штамм бесконечный цикл попытка деления на ноль и так далее так далее ну да и кстати
41:33
Speaker A
любопытный момент действительно когда я воспользовался модулем а с т р а с т и я думал что мы конечно был наивно с моей стороны думал что питон будет хотя бы чуть-чуть помогать в плане семантического анализа пришлось мне этот семантический анализ
41:48
Speaker A
самому делать то сейчас у меня уж делает больше проверок чем обычный питон вот и первый вас от ваш вопрос было чем заливают а целевая аудитория да но смотрите конечно я понимаю что здесь не не сидят люди которые разрабатывать свои
42:04
Speaker A
микросхемы и split сам тоже наверняка не все работают но в принципе если у вас есть задача создания сложного dsl компилятора то есть где уже само слово компилятор появляется есть нет несколько стадий его работы то есть вы например должны какой-то статический анализ
42:22
Speaker A
привести например на корректность вашего кода да какие то доказать вещи там а если вы ещё должны тренировать какой то эффективный код для какого-то другого вот например представление от не обязательно машина и представление обязательно это какой-то процессор просто оптимизированная какая-то вот
42:37
Speaker A
версия в другом на другом языке то на мой взгляд должен тут уже можно подумать использование более сложных средств чем например те же самый пик до парсеры которые есть питоне или пел y и так далее которые решают только синтаксической задач на тактического
42:54
Speaker A
анализа а дальше у вас есть вот эти вот визитеры посетителей вот с ними работаете всего за доклад легко ли отлаживать фрирайд rolls ну это интересный конечно вопрос дело вот в чем этот самый bright основан как как в прологе то есть у вас
43:20
Speaker A
есть несколько вот как назвать интернате вы и мы откатываемся и там есть такой локальный откаты а откат если ни одна из альтернатив не подошла мы откатываемся на уровень выше и для отладки я просто сделал специальный терм который например
43:36
Speaker A
выводит на экран от какой-нибудь как бы аналог принты для аналога пролога то есть вот когда мы откатились проверили все варианты тут я могу стоять мой вариант который всегда исполняется и вот он как раз выдаст на каком месте проблема и в чем вот вот такого рода
43:51
Speaker A
отладка например все за доклад вот вы показали несколько оптимизаций возможных я вопрос если у вас какие-то мысли планы на то чтобы оптимизировать на уровне контров роль графа там мощной оптимизация типа раскрутки циклобутан и и и прочие такие что ну а рядом больших
44:19
Speaker A
компиляторов используются потому что за счет них очень большой прирост производительностью бывает да вы совершенно правы и конечно же серьезно компиляторах которые я делал больше стадий и там есть то о чем вы говорили да и перевод так называемые представление с ада наверняка вам
44:38
Speaker A
знакомы и распределение регистров и выбор инструкции непростой если у нас архитектуры близкой например ковалев да там свои нюансы но здесь вот как раз вот простой пример и более того я еще не не готов наверное как-то формализовать остальной стадии
44:56
Speaker A
вот эти вот сложные стадии я их делаю как в виде надстройки надрал dsl но она пока пока нет ни кристаллизовалась настолько чтобы это был еще одним красивым dsl в комплекте до в общем чтобы можно было эти стадии красиво описывать я пока
45:11
Speaker A
еще ну видимо на пути к этому у нас остались вопросы незаданные желающих нет но спасибо большой а пётр подожди еще еще не уходил и тебе надо выбрать из украшающих которые тебе задавали вопросы лучшего чтобы наши ребята чудесные вручили книжечку
45:34
Speaker A
собственно последний вопрос по поводу более сложных компиляторов мне понравился и все остальные вопрос тоже конечно от нас тебе благодарность спасибо и чудесная москву python конф термокружка чтоб ты писала компиляторы наслаждаюсь горячими напитками
Topics:DSL-компиляторпроблемно-ориентированная архитектураPythonспециализированные процессорыFPGAкомпиляторRISCGoogle TPUPixel Visual CoreP4 язык

Get More with the SozAI App

Transcribe recordings, audio files, and YouTube videos — with AI summaries, speaker detection, and unlimited transcriptions.

Or transcribe another YouTube video here →