Size: a a a

Compiler Development

2021 April 07

AT

Alexander Tchitchigi... in Compiler Development
Ну, это зависит от того, насколько много "лишних" значений замыкается и как "далеко" замыкания "убегают"... 🤔
Всё равно "на глаз" не скажешь, тем более, если ты это хочешь применять к CPS-преобразованному коду. Плюс-минус наличие других оптимизаций, которые работают с замыканиями (lambda lifting и что там ещё)...
источник

M

MaxGraey in Compiler Development
Ну lanbda lifting вообще делает не нужным closure conversion если оно приминимо. Так что это исключим пока из сценария
источник

Constantine ʕ◔ϖ◔ʔ🦀... in Compiler Development
LMNtal (pronounced "elemental") is a programming and modeling language based on hierarchical graph rewriting. It was designed to be a substrate language of diverse computational models, especially those addressing concurrency, mobility and multiset rewriting, including (Colored) Petri Nets, Interaction Nets, the Pi-Calculus, Chemical Abstract Machines, Constraint Handling Rules, and Bigraphs.

Supports nondeterministic state-space search and LTL model validation, as well as regular graph rewriting, making it an expressive verification tool.

For more information and screenshots, watch on the site
https://www.ueda.info.waseda.ac.jp/lmntal/ 🧐
источник

d

d7d1cd in Compiler Development
Всем привет. Есть библиотека fmtlib. Ее последняя версия требует поддержки компилятором стандарта С++11. Однако целевой системой является IBM i, С++ компилятор которой поддерживает не все возможности С++.

Мне подсказали, что есть вариант использовать компилятор clang как библиотеку для создания тулзы, которая из исходников fmt сделает исходники, пригодные для компиляции на целевой системе.

Подскажите, с чего начать? В этом вопросе я полный ноль.
источник

M

MaxGraey in Compiler Development
Вам скорее сюда
https://t.me/ProCxx
источник

d

d7d1cd in Compiler Development
Спасибо!
источник
2021 April 08

a

alez in Compiler Development
A Review of Formal Methods applied to Machine Learning
https://arxiv.org/abs/2104.02466
источник
2021 April 09

NK

ID:0 in Compiler Development
https://dl.acm.org/doi/pdf/10.1145/3428297
Macros for Domain-Specific Languages

"Yo dawg I heard you like macros so I put macros in your macros so you can expand while you expand!"

Как ни забавно, эта фраза верно передаёт содержание статьи, а именно, два главных нововведения авторов: 1) введение пользовательской макросистемы для разрабатываемого пользователем же DSL (на макросах хост-языка, Racket в данном случае), и 2) переиспользование macro expander из хост-языка для реализации пользовательской системы макросов (за счёт предоставления API к определённым функциям macro expander).

Звучит круто, но зачем это нужно? Почему нельзя обойтись макросами хост-языка? На это снова можно выделить две причины.

Первое — это новые name binding constructs, работающие не так, как в хост-языке. Например, в статье рассматривается реализация PEG DSL, в котором конструкции захвата подвыражения и связывания его с именем могут находиться внутри звезды Клини. Но в таком случае эти имена связываются не с одним подвыражением, а со всем подсписком внутри списка выражений, порождённого звездой Клини. Например, в выражении
(define-peg arith-expr
 (=> (seq (: e1 term) (* (seq (: op* (alt "+" "-")) (: e* term))))
   (left-associate-binops e1 op* e*)))
идентификаторы op* и e* связываются со списками операторов и термов соответственно (так как находятся "под звёздочкой"), в то время как e1 связывается с одним термом.

По сравнению со стандартным связыванием имён в функциях или let-выражениях такие связывания работают "шиворот навыворот", а потому требуют реализации "руками". В данном примере такая реализация написана авторами PEG DSL на макросах хост-языка, но если мы хотим чтобы пользователи DSL могли запрограммировать binding constructs по собственному вкусу, нам придётся предоставить им развитую макро-систему поверх нашего DSL.

Вторая причина связана с тем, что авторы называют "hosted DSL". Мне кажется, иначе это можно было бы назвать "deeply embedded DSL". Суть в том, что DSL, который мы реализуем на макросах, является не просто синтаксическим сахаром, а требует полноценного конвейера компиляции, начиная (потенциально) с парсера вводимого нами синтаксиса, продолжая специфическим разрешением имён, нетривиальными binding context и scoping rules, возможно, проверкой типов или другим статическим анализом корректности программ, и заканчивая полноценным IR и оптимизациями. Для того чтобы дать пользователям писать макросы для такого DSL с помощью макро-системы хост-языка, нам придётся открыть доступ к внутренностям нашего компилятора чтобы пользователи могли порождать AST или даже IR нашего DSL, и "скармливать" его далее компилятору. В противном случае макросы смогут порождать только разрозненные куски (скомпилированного) DSL, связанные между собой вызовами анонимных (или не очень) функций хост-языка, которые компилятор нашего DSL проанализировать и оптимизировать уже не сможет.

Так вот, чтобы получить преимущества и того, и другого, нам придётся предоставить отдельную макро-систему поверх нашего hosted DSL. А поскольку реализовать хорошую макросистему (гигиеничную, с разделением фаз и интегрирующуюся с системой модулей хост-языка) очень непросто, было бы полезно переиспользовать возможности macro-expander хост-языка. Статья предлагает API, позволяющий это сделать.

#scheme #racket #macros #dsl
источник

К

Константин in Compiler Development
Пригоден ли SSA для машиноспецифичных оптимизаций?
источник

МБ

Михаил Бахтерев... in Compiler Development
Для некоторых пригоден.
источник

К

Константин in Compiler Development
А что в основном используют для машинных оптимизаций и насколько такие оптимизации играют важную роль?
источник

IP

Iaroslav Postovalov in Compiler Development
Оптимизаций под что? Архитектуру? ОС? Конкретную линейку процессоров? Конкретный компьютер?
источник

МБ

Михаил Бахтерев... in Compiler Development
Можно на этом уровне дорогие операции заменять дешёвыми. Например, x*2 заменять на x+x. To, что именно дешевле зависит от конкретной машины, поэтому это происходит на стадиях, которые относятся к машинной оптимизации (в llvm так, например).
источник

kO

kikimych O_O in Compiler Development
Конкретного кастомера, Ильмир!
источник

IP

Iaroslav Postovalov in Compiler Development
Я не Ильмир
источник

IP

Iaroslav Postovalov in Compiler Development
Просто очень хорошо мимикрирую
источник

К

Константин in Compiler Development
В LLVM это происходит над уровнем биткода или непосредственно машинного кода?
источник

kO

kikimych O_O in Compiler Development
Прошу прошения
источник

МБ

Михаил Бахтерев... in Compiler Development
Над обоими уровнями.
источник

[

[BRM]White Rabbit in Compiler Development
а кто? Неужто Ярослав?
источник