Size: a a a

Compiler Development

2019 September 29

Dv

Dr. Friedrich von Never in Compiler Development
Вроде там уже есть некоторые прагмы
источник

PS

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

AT

Alexander Tchitchigin in Compiler Development
Andrei Kurosh
Это да, только ситхи возводят все в абсолют :) но почему-то идейные воинствующие оопшники мне не попадаются (только один известный персонаж периодически всплывает)
Это просто потому, что последние лет 20-25 ООП - выбор "по умолчанию", и никто не говорит "вы что, с ума сошли - использовать ООП?! Это слишком сложно и непонятно! Мы разработчиков не найдём! Никто не знает, как правильно разрабатывать ОО-системы!". А до того ещё как были! 😃
Но на самом деле я не вижу большого количества именно "воинственных" ФП-шников. 🤷‍♀️
источник

МБ

Михаил Бахтерев in Compiler Development
Peter Sovietov
Нет, ну если так поставить вопрос — против "алгоритмического программирования" вообще сложно что-либо возразить :)

Асинхронность, как сами понимаете, бывает разная. На нижних уровнях это бестактовые схемы, асихронные выч. ядра. Далее — GALS. Далее мы выходим за пределы кристалла и там свои вопросы. Везде используются свои подходы.
Но на самом деле, не всё программирование алгоритмическое. Когда мы работаем с вводом/выводом в широком смысле (даже ячейка памяти), это уже не алгоритмы, а процессы. И на этом уровне работает большинство программистов.

Но, всё равно, полезно, мне кажется, знать особенности и возможности чисто алгоритмического (функционального) подхода, в котором сложностей много меньше, чем при программировании с процессами. В большинстве сценариев процессы не нужны. И полезно, мне кажется, уметь избегать их возможности. Хоть на Си программируя, хоть на Haskell.
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Но на самом деле, не всё программирование алгоритмическое. Когда мы работаем с вводом/выводом в широком смысле (даже ячейка памяти), это уже не алгоритмы, а процессы. И на этом уровне работает большинство программистов.

Но, всё равно, полезно, мне кажется, знать особенности и возможности чисто алгоритмического (функционального) подхода, в котором сложностей много меньше, чем при программировании с процессами. В большинстве сценариев процессы не нужны. И полезно, мне кажется, уметь избегать их возможности. Хоть на Си программируя, хоть на Haskell.
В принципе, возражений нет, за исключением — а почему обязательно ФП? Мне ближе графовый подход. Ведь смотрите, как просто. Есть узлы-операции, у них есть зависимости-ребра. Эти самые ребра являются эквивалентом именованных значений из ФП. Нужны "процессы" для ячеек памяти — добавляем новый тип M-зависимостей. Пусть теперь операции обращения к памяти, а также вызовы процедур принимают и вырабатывают M-состояния.
источник

M

MaxGraey in Compiler Development
Peter Sovietov
В принципе, возражений нет, за исключением — а почему обязательно ФП? Мне ближе графовый подход. Ведь смотрите, как просто. Есть узлы-операции, у них есть зависимости-ребра. Эти самые ребра являются эквивалентом именованных значений из ФП. Нужны "процессы" для ячеек памяти — добавляем новый тип M-зависимостей. Пусть теперь операции обращения к памяти, а также вызовы процедур принимают и вырабатывают M-состояния.
Мне кстати тоже ближе flow based programming
источник

M

MaxGraey in Compiler Development
MaxGraey
Мне кстати тоже ближе flow based programming
FBP кстати компонентно ориентированный подход а с DAG все становиться еще и иммутабельным
источник

TS

Timur Safin in Compiler Development
Dr. Friedrich von Never
Вроде там уже есть некоторые прагмы
да, есть прагмы, но управления качеством кода компилятора и кодогенератора, вроде бы, совсем нет http://pascalabc.net/downloads/pabcnethelp/topics/LangGuide/CompilerDirectives/index_directives.html Хотя нет - 0-based  строки это про язык и генератор в некоторй степени.
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
В принципе, возражений нет, за исключением — а почему обязательно ФП? Мне ближе графовый подход. Ведь смотрите, как просто. Есть узлы-операции, у них есть зависимости-ребра. Эти самые ребра являются эквивалентом именованных значений из ФП. Нужны "процессы" для ячеек памяти — добавляем новый тип M-зависимостей. Пусть теперь операции обращения к памяти, а также вызовы процедур принимают и вырабатывают M-состояния.
2 проблемы.
Во-первых, для произвольных графов нет вычислительной семантики. И их сложно анализировать. А если начать навешивать ограничения - быстро окажется, что мы "скатились" в какой-то другой уже известный формализм.
Во-вторых, в Вашей (расширенной) модели нет явного учёта времени/состояния. А их лучше бы учитывать явно. Именно это выгодно отличает условное ФП от условного ИП (как модели вычислений).
источник

M

MaxGraey in Compiler Development
Кстати FBP можно формализировать и в текстовом виде. Простой пример Linda:
https://en.wikipedia.org/wiki/Linda_(coordination_language)
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
2 проблемы.
Во-первых, для произвольных графов нет вычислительной семантики. И их сложно анализировать. А если начать навешивать ограничения - быстро окажется, что мы "скатились" в какой-то другой уже известный формализм.
Во-вторых, в Вашей (расширенной) модели нет явного учёта времени/состояния. А их лучше бы учитывать явно. Именно это выгодно отличает условное ФП от условного ИП (как модели вычислений).
То, что я выше описал -- это как раз и есть "известный формализм". И тут, в каком-то смысле, возвращение к раннему ФП в Лиспе, где у нас вычисления описываются вполне понятной структурой данных. Ограничения, безусловно есть. Если мы остаемся на уровне DAG, то можно делать и топологическую сортировку, и множество других интересных вещей. Опять же, на уровне DAG нас не интересует время в явном виде. Порядок операций (включая состояние памяти!) определяется просто ребрами-зависимостями.
источник

PS

Peter Sovietov in Compiler Development
Собственно, даже у Харрисона с Филдом описаны оба этих подхода: редукция графов (Haskell и проч.) и dataflow. Они эквивалентны.
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
То, что я выше описал -- это как раз и есть "известный формализм". И тут, в каком-то смысле, возвращение к раннему ФП в Лиспе, где у нас вычисления описываются вполне понятной структурой данных. Ограничения, безусловно есть. Если мы остаемся на уровне DAG, то можно делать и топологическую сортировку, и множество других интересных вещей. Опять же, на уровне DAG нас не интересует время в явном виде. Порядок операций (включая состояние памяти!) определяется просто ребрами-зависимостями.
Как бы "и чё"? Вычислительной семантики-то у этой модели всё ещё нет. 😊
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
Как бы "и чё"? Вычислительной семантики-то у этой модели всё ещё нет. 😊
Почему нет? А как бы без нее компиляторы-то работали? :)
источник

PS

Peter Sovietov in Compiler Development
MaxGraey
Кстати FBP можно формализировать и в текстовом виде. Простой пример Linda:
https://en.wikipedia.org/wiki/Linda_(coordination_language)
Да, это интересный малоизвестный язык.
источник

AT

Alexander Tchitchigin in Compiler Development
Peter Sovietov
Почему нет? А как бы без нее компиляторы-то работали? :)
Тогда опишите, пожалуйста, выч. семантику предложенной Dataflow модели.
источник

PS

Peter Sovietov in Compiler Development
Alexander Tchitchigin
Тогда опишите, пожалуйста, выч. семантику предложенной Dataflow модели.
А я же тут давал несколько раз эту ссылку :) https://hal.inria.fr/hal-01723236/file/sea-of-nodes-hal.pdf
источник

AT

Alexander Tchitchigin in Compiler Development
Sea-of-nodes - это всё ещё НЕ вычислительная модель.
источник

PS

Peter Sovietov in Compiler Development
Почему же? Еще Клифф Клик неформально ее описал. Помните, где он говорит о сетях Петри для выполнения на уровне CFG.
источник

PS

Peter Sovietov in Compiler Development
Я в одном своем проекте выполняю код прямо на уровне виртуальной SoN-машины.
источник