Size: a a a

Compiler Development

2020 April 01

ИЧ

Илья Чистяков in Compiler Development
Илья Чистяков
скорее наоборот
наверное это следствие всяких оптимизаций, динамические типы дают больше оверхеда, чем статика
источник

p

polunin.ai in Compiler Development
Михаил Бахтерев
Ну, в контексте компиляторного чата, вроде как, не важно, какой язык брать. Типы-то стираются :)
в питоне типов нет собственно
источник

AT

Alexander Tchitchigin in Compiler Development
А какие законы Вам нужны в процессе написания компилятора? 😊
Монады, по понятным причинам, подчиняются законам, которые описывают композицию "штук" определённой "формы" (или свойств) вне зависимости от того, где эти "штуки" встречаются - в компиляторе, в веб-сервисе или бизнес-логике. Смысл и пафос же в универсальности. 🤷‍♀️
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
В этом смысле меня изумляет, когда монадические комбинаторы парсеров делают уже в динамическом языке. Карго-культ какой-то!
Почему изумляет? Просто, ведь, удобная и универсальная control flow абстракция. Довольно часто на практике возникает. Она не зависит от наличия или отсутсвия типов. Да и заменитель типов накостылять в бестиповом языке очень просто: делаем функции вида tostring со свойством tostring(tostring(x)) = tostring(x), а потом заворачиваем в них вызовы других функций: tostring(f(toint(x))) и всё, категорная семантика есть, можно костылить категорные конструкции.
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
В этом смысле меня изумляет, когда монадические комбинаторы парсеров делают уже в динамическом языке. Карго-культ какой-то!
А любые комбинаторы парсеров - монадические. Ровно по той причине, что все комбинаторы парсеров имеют определённую "форму", которая удовлетворяет монадическим законам, хочет автор того или нет. 🤷‍♀️
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Да, я именно так и пишу компиляторы. Оно выглядит похоже на БНФ нотацию, но уже для трансляции IR -> язык ассемблера.
А есть ли примеры с коментариями?

P.S. Меня особо в данном случае интересует, как в эту схему вписаны процедуры оптимизации.
источник

p

polunin.ai in Compiler Development
Михаил Бахтерев
Почему изумляет? Просто, ведь, удобная и универсальная control flow абстракция. Довольно часто на практике возникает. Она не зависит от наличия или отсутсвия типов. Да и заменитель типов накостылять в бестиповом языке очень просто: делаем функции вида tostring со свойством tostring(tostring(x)) = tostring(x), а потом заворачиваем в них вызовы других функций: tostring(f(toint(x))) и всё, категорная семантика есть, можно костылить категорные конструкции.
заменитель типов в бестиповом языке нельзя накостылять, потому что они не будут проверяться во время компиляции
источник

МБ

Михаил Бахтерев in Compiler Development
polunin.ai
заменитель типов в бестиповом языке нельзя накостылять, потому что они не будут проверяться во время компиляции
Типы в ТК не про проверку во время компиляции.
источник

AT

Alexander Tchitchigin in Compiler Development
Михаил Бахтерев
Типы в ТК не про проверку во время компиляции.
Откуда в ТК типы?! Там же только объекты и стрелки! 😂
источник

МБ

Михаил Бахтерев in Compiler Development
Alexander Tchitchigin
Откуда в ТК типы?! Там же только объекты и стрелки! 😂
Точно!
источник

p

polunin.ai in Compiler Development
Михаил Бахтерев
Типы в ТК не про проверку во время компиляции.
что такое ТК?
источник

IG

Ivan Grekov in Compiler Development
polunin.ai
что такое ТК?
Теория категорий
источник

IG

Ivan Grekov in Compiler Development
Как я понял
источник

МБ

Михаил Бахтерев in Compiler Development
Теория Категорий. Ну, просто, монады, они не про типы же, а про категории. Категории одними категориями типов не ограничиваются. Это более универсальный инструмент
источник

p

polunin.ai in Compiler Development
так мы не про математику, а про практическое применение
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
А любые комбинаторы парсеров - монадические. Ровно по той причине, что все комбинаторы парсеров имеют определённую "форму", которая удовлетворяет монадическим законам, хочет автор того или нет. 🤷‍♀️
Ох, тут лучше не отвлеченно рассуждать, а сравнить две реализации комбинаторных библиотек, с монадами и без. Если интересно, то я чуть позже найду код характерных представителей своих классов :)
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
А есть ли примеры с коментариями?

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

МБ

Михаил Бахтерев in Compiler Development
polunin.ai
так мы не про математику, а про практическое применение
В Clojure есть algo.monads, которые вполне практичны. Пакеты собираются при помощи монад в Guix. Я неделю назад писал обход дерева директорий на JS и оборачивание всё в монады сэкономило мне уйму времени и усилий. Монада - практически полезная абстракция, не зависящая от типов. Это ж просто логика.
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
В Clojure есть algo.monads, которые вполне практичны. Пакеты собираются при помощи монад в Guix. Я неделю назад писал обход дерева директорий на JS и оборачивание всё в монады сэкономило мне уйму времени и усилий. Монада - практически полезная абстракция, не зависящая от типов. Это ж просто логика.
Для обхода деревьев достаточно иметь набор выразительных комбинаторов (topdown, bottomup и проч.), а также иметь способ неявной передачи состояния между ними. И все, какие там монады! %)
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
Ох, тут лучше не отвлеченно рассуждать, а сравнить две реализации комбинаторных библиотек, с монадами и без. Если интересно, то я чуть позже найду код характерных представителей своих классов :)
Я и так знаю два таких характерных примера: Parsec с монадами и Nom без монад. Разница вполне заметна и полностью понятна. 😊
источник