[plug] [обсуждение плана]

Вячеслав Козырев weautify at gmail.com
Mon Mar 19 21:27:28 MSK 2018


> Входит ли сюда интерфейс доступа к результатам анализов?

Полагаю, да.

> Есть ли между этими задачами зависимости, или все четверо готовы начать
одновременно?

Старался как раз придумать так, чтобы задачи были более-менее независимыми.

19 марта 2018 г., 20:48 пользователь Eugene Sharygin <eush at ispras.ru> написал:
> Вячеслав Козырев <weautify at gmail.com> writes:
>
>> Похоже, примерный план на ближайшие две недели следующий.
>>
>> В QBE закидывается куча проходов в нужном порядке, один человек это парсит и
>> дает второму, второй запускает их по очереди. Третий пишет интерфейс
>> реализации прохода,
>
> Входит ли сюда интерфейс доступа к результатам анализов?
>
>> а четвертый - его спецификацию в виде прохода, который просто печатает
>> в файл функцию (для тестирования работоспособности).
>
> Есть ли между этими задачами зависимости, или все четверо готовы начать
> одновременно?
>
>> После этого, в зависимости от затраченного на вышесказанное времени, можно
>> реализовать более интеллектуальный пайплайн с зависимостями от других
>> проходов. И одну неделю потратить на реализацию динамических библиотек.
>>
>> 18 Мар 2018 г. 21:02 пользователь "Eugene Sharygin" <eush at ispras.ru> написал:
>>
>>     Vladislav Ivanishin <vlad at ispras.ru> writes:
>>
>>     > Привет!
>>     >
>>     > Eugene Sharygin <eush at ispras.ru> writes:
>>     >
>>     >> Привет,
>>     >>
>>     >> Vladislav Ivanishin <vlad at ispras.ru> writes:
>>     >>
>>     >>> Добрый день,
>>     >>>
>>     >>> Вячеслав Козырев <weautify at gmail.com> writes:
>>     >>>
>>     >>>> Начну, пожалуй.
>>     >>>>
>>     >>>> Первое, что стоит сказать, есть проблема, связанная с тем, что без
>>     >>>> механизма подключения плагинов работа над собственно плагинами
>>     >>>> несколько осложняется. Однако больше двух человек работать над ним,
>>     >>>> пожалуй, не смогут - это будет перебор.
>>     >>>> Поэтому предлагается взять двум человечкам работы над механизмом
>>     >>>> подключения плагинов, а двум другим тем временем отдельно заниматься
>>     >>>> плагинами с поправкой на то, чтобы плагины работали сами по себе
>>     (как
>>     >>>> в работе по курсу "конструирование компиляторов"). Затем, когда
>>     работа
>>     >>>> над механизмом подключения плагинов будет закончена, можно начинать
>>     >>>> нормально оформлять плагины и делать новые уже сразу плагинами.
>>     >>>> Вопрос, как распределить работу на этом этапе практикума, остаётся
>>     >>>> открытым.
>>     >>>>
>>     >>>> Мне хочется заниматься подключением плагинов поначалу, и считаю, что
>>     >>>> на это можно отвести две недели - их должно быть более чем
>>     достаточно.
>>     >>>> После этого все будут заниматься сборкой плагинов. Вопрос, какие
>>     >>>> плагины реализовать, остаётся открытым.
>>     >>>
>>     >>> В принципе, реализация чего-либо как плагина должна быть
>>     >>> простой. Т.е. нужно просто взять имеющийся проход (из домашнего
>>     задания)
>>     >>> и воспользоваться интерфейсом, который нужно создать.
>>     >>>
>>     >>> Обычно соглашения для плагинов выглядят примерно так. Плагин
>>     собирается
>>     >>> как динамическая библиотека, и в нём обязательно определена функция
>>     (или
>>     >>> несколько) с известным именем, например, `onload'. А qbe должен
>>     >>> научиться в командной строке распознавать что-нибудь вроде
>>     >>> -plug=path-to-plugin.so (может быть и что-то более сложное, к
>>     примеру,
>>     >>> плагин может принимать параметры, тогда они должны задаваться там же
>>     --
>>     >>> интерфейс вам надо продумать). Соответственно, если в командной
>>     строке
>>     >>> такое встретилось, то в какой-то момент qbe должен вызвать
>>     >>> dlopen(path_to_plugin,...), затем dlsym(..., "onload") и вызвать
>>     >>> полученную функцию по указателю. Функция же onload в плагине может
>>     >>> использовать интерфейсы из all.h. Как-то так всё срастается.
>>     >>>
>>     >>> На самом деле, это упрощённое описание интерфейса. К примеру, вы
>>     хотите
>>     >>> иметь какой-то оптимизационный проход в виде плагина. Если все
>>     действия
>>     >>> производить в `onload', получится, что qbe должен знать, в какой
>>     именно
>>     >>> момент вызывать onload (при том, что он не должен знать наперёд,
>>     какие
>>     >>> плагины будут написаны). Поэтому нужна какая-то система хуков.
>>     Например,
>>     >>> onload будет вызываться достаточно рано и куда-то записывать
>>     callback'и,
>>     >>> которые qbe вызовет, когда придёт время. А время придёт, когда
>>     наступит
>>     >>> какое-то событие (например, завершится проход с определённым именем,
>>     >>> которое задаёт плагин). Таким образом, в вашу задачу входит
>>     определение
>>     >>> набора событий, где будут расставлены хуки, и патчинг qbe
>>     >>> соответствующим образом.
>>     >>>
>>     >>> В qbe (когда он используется не как библиотека, а как компилятор)
>>     >>> выполняется ряд проходов (см. main.c). Возможно, есть смысл
>>     переписать
>>     >>> их вызовы в новой концепции, т.е. определить единый интерфейс для
>>     всех
>>     >>> этих проходов и добавить менеджер проходов.
>>     >>
>>     >> Было бы хорошо иметь не только интерфейс, позволяющий встраиваться в
>>     >> основной пайплайн QBE (IR -> Asm), но и возможность запустить цепочку
>>     >> проходов в отдельности (IR -> IR). Пожалуй, для целей курса это было
>>     бы
>>     >> даже полезнее.
>>     >
>>     > Да, это основное. Я не подумал, что в func() в main.c проходы IR -> asm
>>     > тоже вызываются. Тогда единым интерфейсом все из них объединять
>>     наверное
>>     > не стоит.
>>     >
>>     > Если делать новый отдельный пайплан для IR -> IR преобразований, там не
>>     > будет предустановленных проходов, и все преобразования должны будут
>>     > предоставляться плагинами?
>>
>>     Можно и с предустановленными (-O0, -O1), но я думаю, что основным
>>     вариантом использования пока можно считать изначально пустой пайплайн, в
>>     который все проходы добавляются пользователем.
>>
>>     > И тогда можно обойтись без набора событий, а
>>     > порядок вызова проходов будет определяться порядком следования плагинов
>>     > в командной строке.
>>
>>     --
>>     Regards,
>>     Eugene Sharygin,
>>     ISP RAS.
>>
>
> --
> Regards,
> Eugene Sharygin,
> ISP RAS.


More information about the plug mailing list