Size: a a a

Compiler Development

2020 April 26

МБ

Михаил Бахтерев in Compiler Development
Val Krylov
Матчинг по алгебраическим типам в Hope, перетёкший в последовавшие функциональные языки и сейчас перетекающий в матчинг по типам в мейнстриме.
Матчинг по конструкторам, а не по типам.
источник

МБ

Михаил Бахтерев in Compiler Development
Dmitry Ponyatov
требование ленивости важно?
необходимо ли оно для исполнения какой-нибудь выкрутаса типа сопоставлением шаблона с кольцевым списком?
Ленивость ортогональна этой технике. Вообще, паттерн-матчинг - это на самом деле такая дружелюбная запись простой идеи о то, что когда данные являются объединением неперескающихся множеств данных, то для их разбора достаточно указать несколько вариантов функций-деконструкторов.

Собственно, деконструкторы на значения в полях смотрят только если это явно сказано, типа match (cons a (cons b L)), поэтому тут нет зависимости от стратегии вычислений и конечности/бесконечности/зацикленности списков.
источник

МБ

Михаил Бахтерев in Compiler Development
Evgenii Moiseenko
То есть курс по компиляторам условно можно было бы разбить на следущие темы, каждая из которых по-хорошему должна быть отдельным курсом:
1) Парсинг
2) Статический анализ
3) Кодогенерация и платформоспецифичные оптимизации
4) Реализация рантайма, сборка мусора, управление памятью
5) Виртуальные машины
6) Теория ЯП и теория типов
На 1/2 это всё уже есть в рамках одного курса Design Concepts in Programming Languages, где почти всё это разобрано и хорошо структурировано (в отличии от многих учебников). В DCPL не хватает только прагматики: платформеннозависимых оптимизаций, сборки мусора, ВМ. Фактически, всё заканчивается там на SSA-представлениях, откуда можно начинать курс по оптимизациям для конкретных машин.

А, да, парсинга ещё нет во всех его проявлениях. Но, вроде как, других учебников по парсингу предостаточно.

То есть, не нужно делать 6 различных курсов. Хватит 3-ёх.

1. Парсинг (хотя, разве всё ещё не изобретены всевозможные грамматики, которых достаточно?).
2. Теория языков программирования (включая динмическую и статическую семантики, теорию типов, компиляцию в SSA, стратегии вычислений и всё-всё-всё). Но это годовой курс, конечно.
3. ВМ, рантайм, оптимизации.
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
С другой стороны, для Rust какая-то формальная семантика имеется, во-первых Miri, очевидно, на неё опирается для проверки кода — в том числе unsafe — на соблюдение soundness. Во-вторых, как я понял, хотя бы для некоторых (новых) конструкций языка soundness доказывается прямо в Coq полностью формально. Либо не доказывается и выявляет ошибки в дизайне.
Можно ли об этом можно почитать подробнее?
источник

МБ

Михаил Бахтерев in Compiler Development
FORTRAN ONE LOVE
Да и на фортране бота было не сильно сложно наклепать :-)
Ну. Собственно, о том и речь, что популярность языка определяется совсем не его возможностями.
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Можно ли об этом можно почитать подробнее?
Что-то не могу найти — не помню где читал. В принципе, есть вообще RustBelt, хотя это уже немного другое.
источник

EM

Evgenii Moiseenko in Compiler Development
Михаил Бахтерев
Можно ли об этом можно почитать подробнее?
источник

PS

Peter Sovietov in Compiler Development
Alexander Nasonov
Не знаю, в топик ли это, но вот TU Delft Programming Group набирает (не знаю, как насчёт виз) http://pl.ewi.tudelft.nl/
Вполне по теме. Хотя бы ради работы вместе с Eelco Visser и Peter Mosses стоит туда пойти :)
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Ну это студенческая работа) Но LLVM тоже вырос из студенческой работы
Пока это выглядит, как попытка внедрить свою прослойку, организовать под своим началом тех, кто действительно делает что-то по существу :) IR уж очень заурядный и примитивный.
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Можно ли об этом можно почитать подробнее?
В то время, когда я искал материалы по замечательному PLT Redex, я наткнулся на вот этот проект: https://github.com/lkuper/rust-redex
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Пока это выглядит, как попытка внедрить свою прослойку, организовать под своим началом тех, кто действительно делает что-то по существу :) IR уж очень заурядный и примитивный.
А чего не хватает? Бинарная и арифметическая логика есть, мультиплексирование есть, CF (phi, branch, call) есть, halt есть, сигналы и прерывания есть, работа с памятью, стеком и регистрами есть. Кроме того есть даже сложные типы как Array и Struct, не говоря уже про Pointer и Signal
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
А чего не хватает? Бинарная и арифметическая логика есть, мультиплексирование есть, CF (phi, branch, call) есть, halt есть, сигналы и прерывания есть, работа с памятью, стеком и регистрами есть. Кроме того есть даже сложные типы как Array и Struct, не говоря уже про Pointer и Signal
Допустим, у меня есть свой DSL для высокоуровневого описания архитектуры ускорителей. Что мне нужно сгенерировать для этого LLHD, чтобы сохранить параллелизм памяти?
источник

PS

Peter Sovietov in Compiler Development
источник

PS

Peter Sovietov in Compiler Development
Не кажется, что чего-то тут не хватает? :)
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Допустим, у меня есть свой DSL для высокоуровневого описания архитектуры ускорителей. Что мне нужно сгенерировать для этого LLHD, чтобы сохранить параллелизм памяти?
То есть не хватает метаданных?
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Не кажется, что чего-то тут не хватает? :)
Сдвига? Выравнивания?
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Сдвига? Выравнивания?
Отношения порядка между операциями с памятью. Получается, как и в обычном LLVM, у нас порядок прямо указан текстуально. Никакого параллелизма.
источник

M

MaxGraey in Compiler Development
Peter Sovietov
Отношения порядка между операциями с памятью. Получается, как и в обычном LLVM, у нас порядок прямо указан текстуально. Никакого параллелизма.
Ну указан прямо да, чем это плохо?
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Ну указан прямо да, чем это плохо?
Так ведь на уровне своего DSL я знаю о работе с данными больше и могу предоставить LLHD информацию по частичному порядку, о том, где есть наложение обращений и т.д.
источник

PS

Peter Sovietov in Compiler Development
В целом, в отличие от программных решений, в "железных" проектах почти все связано с параллелизмом. Многопортовые блоки памяти уже давно не редкость и вот этот вариант — одно обращение к памяти за такт, архитекторов вряд ли устроит :)
источник