Size: a a a

Compiler Development

2019 September 29

AK

Andrei Kurosh in Compiler Development
Alexander Tchitchigin
Фронт-енд и мобильные - это уже неиллюзорные распределённые системы, и разработчики там огребают все проблемы распределённых систем. Постепенно даже начинают использовать решения из распределённых систем - CRDT, там, и всякое такое.
При этом внезапно выяснилось, что UI (стейт-машину) удобно моделировать в функциональном стиле - привет React/Redux и прочим Elm Architecture с RxEverything. И эта тема сейчас активно просачивается в мобилки из фронт-енда.
Оно, конечно, не Haskell, и тем более не зав. типы, но то, что попало в мейнстрим JS становится общим местом. 😃
Реакт - это именно пример ООП, которое слегка сбрызнуто функциональщиной :)
источник

AT

Alexander Tchitchigin in Compiler Development
Andrei Kurosh
Реакт - это именно пример ООП, которое слегка сбрызнуто функциональщиной :)
Это если смотреть на React образца года 2017 - без хуков - и забыть, что прототип в недрах Facebook был написан на OCaml. 😉
источник

AT

Alexander Tchitchigin in Compiler Development
Явный тренд в разработке React последних пары лет - постепенный отказ от собственно классов и ООП в пользу "функциональных компонент", как они это называют. Становится всё более похоже на Cycle.js (если правильно помню название).
источник

AK

Andrei Kurosh in Compiler Development
Alexander Tchitchigin
Это если смотреть на React образца года 2017 - без хуков - и забыть, что прототип в недрах Facebook был написан на OCaml. 😉
Но и полностью функциональным его тоже не назовешь - тогда придется забыть, что UI составляется из компонентов с методами и состоянием )
источник

AT

Alexander Tchitchigin in Compiler Development
Ну и Redux - это же чисто ФПшные map + fold! 😃
источник

AK

Andrei Kurosh in Compiler Development
Но вообще да, я не смотрел на "новый" реакт как раз примерно года с 2017
источник

AT

Alexander Tchitchigin in Compiler Development
Andrei Kurosh
Но и полностью функциональным его тоже не назовешь - тогда придется забыть, что UI составляется из компонентов с методами и состоянием )
Я же говорю - теперь уже компоненты без методов.
А состояние ФП никак не противоречит - ФП тоже пронизано состояниями: аргументы рекурсивных вызовов, захваченные замыканиями значения, протаскивание состояния через возвращаемое значение, которое ещё для удобства можно завернуть в монадический интерфейс и т.д.
источник

AK

Andrei Kurosh in Compiler Development
насколько я знаю, в ФП принято избегать мутабельного состояния
источник

AT

Alexander Tchitchigin in Compiler Development
Andrei Kurosh
насколько я знаю, в ФП принято избегать мутабельного состояния
Ага. В React теперь тоже. 😃
источник

AK

Andrei Kurosh in Compiler Development
а чистые функции - действительно очень удобная концепция, в рамках которой гораздо приятнее писать на практически любом языке, будь то самая заядлая императивная оопщина, но js/ts никак не помогают ее соблюдать
источник

AT

Alexander Tchitchigin in Compiler Development
Ну, то есть "под капотом" оно может быть мутабельным и там, и там, но "интерфейс" как к немутабельному.
источник

AT

Alexander Tchitchigin in Compiler Development
Andrei Kurosh
а чистые функции - действительно очень удобная концепция, в рамках которой гораздо приятнее писать на практически любом языке, будь то самая заядлая императивная оопщина, но js/ts никак не помогают ее соблюдать
Да кроме Haskell и откровенно зав. типовых языков никто не помогает её соблюдать, так что что уж говорить...
источник

AK

Andrei Kurosh in Compiler Development
А всякие там elm / purescript?
источник

AT

Alexander Tchitchigin in Compiler Development
Andrei Kurosh
А всякие там elm / purescript?
Да, OK - про этих забыл. 😊
источник

PS

Peter Sovietov in Compiler Development
Михаил Бахтерев
Не такие уж там и толстые абстракции. Функция - это всего лишь структура данных с указателем на код (или, если связи можно разрешить статически, без указателя). В Lambda Papers хорошо описано, как eval сводится к формированию таких структур,  а apply сводится к goto.

Для встраиваемых систем есть реализации функциональных языков.

О других областях программирования ничего не могу сказать.
В embedded, конечно, есть реализации ФЯ, но погоды это не делает. Мне кажется, в какой-то момент полезно перейти от уровня парадигм программирования к формализмам и моделям из предметной области. При этом не вижу особой пользы в привязывании этих моделей и формализмов к конкретным ООП и ФП. Зачем ставить эти самые ФП и Ко во главу угла при формализации практических задач? Это часто затеняет, усложняет изначально простые понятия и подходы.

Раз уж речь пошла о встраиваемых системах, давайте откроем один из солидных учебников -- Embedded System Design Питера Марведеля. Там есть очень хороший раздел на тему спецификаций и моделей. Никакого ФП нет просто потому, что речь идет о конкретной предметной области. Реплика в духе "а в ФП тоже можно" -- специалистов из этой области совершенно не удовлетворит :)
источник

M

MaxGraey in Compiler Development
Да есть такая тенденция в React. Вообще я для себя кажется вывел идеальный баланс: императившина для низкоуровневых сущностей и функциональшина для высокоуровневых.
источник

AK

Andrei Kurosh in Compiler Development
кстати говоря об абстракциях - а разве ФП-языки могут обходиться без сборщика мусора?
источник

M

MaxGraey in Compiler Development
Потому что та же хэш таблица  например на чистом FP в 50 раз медленее аналогичной в императивном стиле
источник

AG

Alex Gryzlov in Compiler Development
Andrei Kurosh
кстати говоря об абстракциях - а разве ФП-языки могут обходиться без сборщика мусора?
линейные в принципе могут
источник

AG

Alex Gryzlov in Compiler Development
но там надо копаться, не все нужные механизмы ещё до ума довели
источник