Size: a a a

Compiler Development

2021 April 15

KJ

Katrin Jeil in Compiler Development
работать с сегментами PE
источник

KJ

Katrin Jeil in Compiler Development
с таблицей экспорта и импорта
источник
2021 April 16

AG

Alex Gryzlov in Compiler Development
а есть ли какие нибудь популярные статьи, посты и тексты на тему использования многопоточности при реализации компилятора?
источник

а

а это кто in Compiler Development
да кстати интересная тема. C/C++ легко параллелизуется по юнитам компиляции, а вот в других компиляторах наверное что-то более сложное придумать можно
источник

к

кана in Compiler Development
Мне тоже интересна эта тема.

Путь у меня есть N модулей, компилировать модуль X можно только при условии что все модули, от которых X зависит, уже скомпилированы (потому что для компиляции X нужен выхлоп анализа из этих модулей - контекст).

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

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

И так пока граф не опустеет.
источник

к

кана in Compiler Development
и это выглядит ужасно некрасиво все
источник

AS

Anatoly Shirokov in Compiler Development
А зачем что-то с графом делать? Там же нужна топологическая сортировка и некий контроллер, который, проходя граф в топологическом порядке пускает в воркеры независимые ветки
источник

к

кана in Compiler Development
ну, моя первая реализация была такая: я граф превращал в список этапов, где этап это список модулей, которые могут быть скомпилированы параллельно.

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

D

Danya in Compiler Development
Я может быть сейчас предложу фигню, но
Почему сначала не пройтись по всем модулям, собрать информацию об интерфейсах, которые они предоставляют
А потом уже компилировать каждый модуль отдельно, подглядывая в собранную инфу
Оба варианта можно делать многопоточно
Но это довольно очевидное решение, значит я что-то упускаю.. но что?
источник

к

кана in Compiler Development
мне нужна не только информация об интерфейсах, нужна целиком информация после компиляции
источник

D

Danya in Compiler Development
А зачем?
источник

к

кана in Compiler Development
там не просто компилятор, это достаточно сложный транслятор из одного языка в другой
источник

D

Danya in Compiler Development
Но и я не конкретно про твой случай, а в целом
источник

к

кана in Compiler Development
а в общем случае да, это хорошее решение
источник

к

кана in Compiler Development
но например первый этап сбора интерфейса тоже нельзя делать многопоточно в лоб, а тоже только по зависимостям
источник

к

кана in Compiler Development
например если у функции не указан тип, и его нужно вывести из тела, которое использует функции из зависимостей
источник

[

[BRM]White Rabbit in Compiler Development
В си транслируешь?
источник

к

кана in Compiler Development
нет, это в хаскель)
источник

к

кана in Compiler Development
это рабочий проект, не то что я делаю с эрлангом
источник

EL

Evgeny Link in Compiler Development
Подскажите, есть ли какой-нибудь *простой* (я смотрю на тебя, LLVM) compiler backend? Трансляцию в Си (упаси боже) не предлагать
источник