Size: a a a

Compiler Development

2020 January 01

M

MaxGraey in Compiler Development
Есть много хороших программ написанных на perl, php, delphi, vba, coffeescript, groovy. Можно делать хорошие программы на любом языке, хоть на brainfuck. Язык это лишь инструмент, он может быть удобным и быстрым или нет. От этого ценность конечной программы не сильно то и зависит, точно так же как ты можешь пользоваться любимым сайтом, а под его копотом будет портянка из jquary написанная одним индусским студентам 10 лет назад.

Большинство математиков не умеют программировать и хоршо если знают матлаб, пайтон или паскаль, но при этом алгоритмы, которые они на них выражают вряд ли станут сильно лучше если их переписать на rust, ocaml, haskell или что тебе больше нравиться? =) На одном ЯП они просто станут короче но менее читабильны, на другом вербознее, но понятнее, но это все равно будет весьма субъективно, может для кого то будет все с точностью да наоборот
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Кстати, чат. А вот реально нам пораскинуть мозгами и написать какую-нибудь менее занудную и более практичную спецификацию IR, чем LLVM. Организовать какой-нибудь  pep-процесс? Может быть 2 или 3 IR таргета? Чтобы не было так мучительно больно из-за LLVM? Имею в виду, что раз нет универсального IR записать спеки двух-трёх видов с максимальным перекрытием, чтобы авторы бэкендов выбирали наиболее удобный себе.
Кроме LLVM уже сейчас имеются WASM и CraneLift, не считая "мелких брызг"...
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Кроме LLVM уже сейчас имеются WASM и CraneLift, не считая "мелких брызг"...
cranelift это же ssa?
источник

M

MaxGraey in Compiler Development
Михаил Бахтерев
cranelift это же ssa?
да, ssa-based. Они рассматривали идею с VSDG-based но в последствии отказались:

«For example, one of the challenges for dependence-graph-oriented IRs like the VSDG is getting good enough memory dependence information. But if we can get high-quality aliasing information directly from the Rust front-end, we should be in great shape. As another example, it's often harder for superoptimizers to reason about control flow than expression graphs. But, graph-oriented IRs like the VSDG represent control flow as control dependencies. It's difficult to say how powerful this combination will be until we try it, but if nothing else, it should be very convenient to express pattern-matching over a single graph that includes both data and control dependencies.»
источник

PS

Peter Sovietov in Compiler Development
Неубедительные объяснения :)
источник

МБ

Михаил Бахтерев in Compiler Development
Вроде же, наоборот, написали, что всё хорошо. Нет?
источник

PS

Peter Sovietov in Compiler Development
А по поводу LLVM. До него был тот же SUIF. У академистов и предметников постоянно что-то новое происходит. Я просто предлагаю более внимательно оглядеться вокруг :)
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Неубедительные объяснения :)
Мне тоже так показалось, боюсь им просто не хватило экспертизы, (R)VSDG весьма новое направление и еще нету полноценного кодогенератора в природе, в основном одна теория.
источник

AT

Alexander Tchitchigin in Compiler Development
Dmitry Ponyatov
Тут нужна какая-то глобальная идея, на уровне абстрактной алгебры и упоротого хаскеля - как уложить одну модель (вычислительную), в рамки произвольно выбранной другой модели (описывающей архитекутуру, или модель языка программтрования)
"Compiling to Categories" (c) Conal Elliot? 😉
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Мне тоже так показалось, боюсь им просто не хватило экспертизы, (R)VSDG весьма новое направление и еще нету полноценного кодогенератора в природе, в основном одна теория.
Но графовые IR развиваются с 80-х. Вовсе необязательно было брать именно VSDG.
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
"Compiling to Categories" (c) Conal Elliot? 😉
Так это очередная КАМ.
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Но графовые IR развиваются с 80-х. Вовсе необязательно было брать именно VSDG.
Так VSDG это как раз эволюция этих графовых IR (только та часть что без SSA)
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Так это очередная КАМ.
Вроде нет - более абстрактная штука, к лямбда-исчислению вообще не привязанная. Или мне это только показалось?
источник

M

MaxGraey in Compiler Development
Там это так было
CDFG -> PDG -> PDW -> VDG -> VSDG -> RVSDG

Я как раз сейчас занимаюсь последним
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Так VSDG это как раз эволюция этих графовых IR (только та часть что без SSA)
Тут сложно говорить об эволюции, просто есть разные области применения. Кому-то нужно удобно представлять функции высших порядков, кому-то — компилировать для параллельных машин...
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Там это так было
CDFG -> PDG -> PDW -> VDG -> VSDG -> RVSDG

Я как раз сейчас занимаюсь последним
Не хватает gated SSA, Pegasus IR, SoN, Graal, Thorin... :)
источник

M

MaxGraey in Compiler Development
Еще одна проблема с (R)VSDG - это то, что для императивных языков ты не можешь трансформацию из CFG в VSDG напрямую. Сначало нужно из CFG в IPG а потом уже в (R)VSDG, а вот для функциональных ЯП с CPS, можно без этих промежуточных преобразований
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Не хватает gated SSA, Pegasus IR, SoN, Graal, Thorin... :)
Так это все уже ветки с SSA. После VDG там не осталось место для SSA. Там он и так неявно присутствует так как там DAG по сути
источник

МБ

Михаил Бахтерев in Compiler Development
compiling-to-categories (1).pdf
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Вроде нет - более абстрактная штука, к лямбда-исчислению вообще не привязанная. Или мне это только показалось?
Да вроде оно самое, просто сделано внутри GHC.
источник