1. Где почитать по-подробнее про фуджеты? 2. В WPF _очень_ качественно разнесли логику, данные и управление (ИМХО конечно. Во всяком случае это лучшее технологическое решение от Майкрософта, которое я видел)
А WPF -- Windows Presentation Foundation. То, на чём Виста делалась. Ключевые слова Avalon, XAML. Они (наконец-то) разделили визуальное представление контрола, "бизнес"-логику этого контрола и взаимодействие между ними. Если бы там ещё столько багов не было...
Для решения второй проблемы (композиции логики) было бы неплохо иметь доступ к состоянию контролов как к именованным переменным. А то получается, что элементарная задача увеличения значения счетчика на единицу при нажатии на кнопку в функциональном подходе уже требует делать нетривиальные развязки на функциях. И счетчик это еще ерунда. Любая более-менее серьезная программа не обходится без диалога с опциями, которых запросто может быть и несколько десятков. Если к ним нельзя получить доступ как к переменным, то как его реализовывать в функциональном стиле? Это вообще возможно? Сильно подозреваю, что даже если и возможно, то развязка там получиться такая, что в ней черт ногу сломит.
1) А ты смотрел на фуджеты-то? Попробуй сделать калькулятор короче и изящней. Чуть выше была дана ссылка. 2) "Состояние контролов, как именованые переменные" - это ссылки, грубо говоря. То есть то, что мешает композиции. Отвергаем. 3) Да, придется коммутировать потоки. Это несложно, хотя и нудно. Можно и комбинаторов придумать.
1. Да, я посмотрел на фуджеты и под их впечатлением пишу. Впечатление такое, что для решения даже элементарных проблем там надо напрягаться. Вот уже достаточно простая задача - написать увеличение значения счетчика.
1. Ты сравниваешь построение элемента и его логику с одной только логикой (да и то - только ее частью).
Поэтому усложнение на ровном месте.
BTW, написание преобразующих состояние функций (i -> st -> (o,st)) проще, чем написание изменения глобального состояния. Это мой личный опыт (моделируя аппаратуру на C++, я пришел к такому же стилю программирования) и опыт товарищей из Эрланга.
Визуальные средства не дают декларативности. Вместо диалога, подходящего под look-n-feel текущей операционки мы полчаем именно кнопочки и именно "вот такую вот иконку."
2.Data.IORef
Им мало, кто пользуется. Только по необходимости.
3.Это хорошо, когда у тебя одна форма. Теперь представь, что одна и та же форма используется в паре-тройке мест, в других разных формах. Уже станет менее удобно.
И там далее сложность все увеличивается.
Протаскивание конфигурации накладно, но полезно. Видно, кто этим пользуется.
Если очень охота - state monad. Функционально и протаскивание скрыто.
А разве они живы вообще? С практической стороны - уродливая лицензия, кривость сборки…
Всем красивы в общем, но как пишут в “Genuinely Functional GUIs”: The closest relative to our work is Fudgets. Fudgets are implemented as stream processors, where each Fudget has high level and low level input and output streams. The high-level streams in Fudgets serve a role similar to the auxiliary semantic signals in our GUI type. The programming interface to Fudgets is very similar to that of Fruit, although Fudgets is based on discrete, asynchronous streams, whereas Fruit is based on continuous, synchronous signals
( ... )
Since we have not seen a formal definition of X windows, it is not clear to us what the denotational model of a Fudget is, beyond saying that it is a stream processor that emits and consumes X protocol requests.
Это неправда.
Для фуджетов давно (1996, по-моему) разработана их теория - модифицированное пи-исчисление. К X Window System это имеет очень далекое отношение.
Comments 78
1. Где почитать по-подробнее про фуджеты?
2. В WPF _очень_ качественно разнесли логику, данные и управление (ИМХО конечно. Во всяком случае это лучшее технологическое решение от Майкрософта, которое я видел)
Reply
http://www.cs.chalmers.se/Cs/Research/Functional/Fudgets/
Какая-то из них может оказаться лучше. ;)
А кто такие WPF?
Reply
А WPF -- Windows Presentation Foundation. То, на чём Виста делалась. Ключевые слова Avalon, XAML. Они (наконец-то) разделили визуальное представление контрола, "бизнес"-логику этого контрола и взаимодействие между ними. Если бы там ещё столько багов не было...
Reply
Reply
Reply
2) "Состояние контролов, как именованые переменные" - это ссылки, грубо говоря. То есть то, что мешает композиции. Отвергаем.
3) Да, придется коммутировать потоки. Это несложно, хотя и нудно. Можно и комбинаторов придумать.
Reply
counterF = intDispF >==< mapstateF count 0 >==< buttonF "Up ( ... )
Reply
Поэтому усложнение на ровном месте.
BTW, написание преобразующих состояние функций (i -> st -> (o,st)) проще, чем написание изменения глобального состояния. Это мой личный опыт (моделируя аппаратуру на C++, я пришел к такому же стилю программирования) и опыт товарищей из Эрланга.
Визуальные средства не дают декларативности. Вместо диалога, подходящего под look-n-feel текущей операционки мы полчаем именно кнопочки и именно "вот такую вот иконку."
2.Data.IORef
Им мало, кто пользуется. Только по необходимости.
3.Это хорошо, когда у тебя одна форма. Теперь представь, что одна и та же форма используется в паре-тройке мест, в других разных формах. Уже станет менее удобно.
И там далее сложность все увеличивается.
Протаскивание конфигурации накладно, но полезно. Видно, кто этим пользуется.
Если очень охота - state monad. Функционально и протаскивание скрыто.
Reply
Reply
Reply
Reply
Reply
Всем красивы в общем, но как пишут в “Genuinely Functional GUIs”:
The closest relative to our work is Fudgets. Fudgets are implemented as stream processors, where each Fudget has high level and low level input and output streams. The high-level streams in Fudgets serve a role similar to the auxiliary semantic signals in our GUI type. The programming interface to Fudgets is very similar to that of Fruit, although Fudgets is based on discrete, asynchronous streams, whereas Fruit is based on continuous, synchronous signals ( ... )
Reply
Это неправда.
Для фуджетов давно (1996, по-моему) разработана их теория - модифицированное пи-исчисление. К X Window System это имеет очень далекое отношение.
Grapefruit... Он, похоже, построен на идеях Fran.
Мне больше идеи фуджетов нравятся. ;)
Reply
Leave a comment