И снова о ФЯ

Julie16

1) Я говорю о чистых ФЯ(абсолютное отсутствие side effects)
2) Для того чтобы осуществлять ввод-вывод и вообще взаимодействие с сервисами ОС в ФЯ приходится прибегать к разнообразным ухищрениям. Например, обычной практикой является следующая абстракция(извините что пишу на С подобной нотации, но думаю что все и так будет понятно):
World process_request( World w ). То есть любая функция, которая обращается к средатвам ОС, берет в качестве параметра весь внешний мир, и возвращает новый мир как результат своей работы. Для эффективности этого подхода делуется следующее: предполагается что мир существует только один и что все запросы к нему сериализованы. Тогда новый мир можно положить на место старого, грубо говоря работать как обычно, но с сериализацией запросов. Теперь возникает вопрос: как в этой архитектуре написать эффективное мультитредное приложение, например http сервер? Ведь зачастую средства ОС независимы(я могу одновременно читать файл и писать в сеть чем может воспользоваться это приложение. В ФЯ это невозможно вследствие сериализации всех запросов к миру(ОС).
3) Какие существуют нормальные графические библиотеки/биндинги для ФЯ? Вообще говоря их много. Только почти все они заброшены и не работают. Для лиспа(например) я нашел биндинги для gtk1. Ну это разве дело? В общем похоже что на ФЯ невозможно создавать приложения с современно выглядящим GUI.

Marinavo_0507

> Какие существуют нормальные графические библиотеки/биндинги для ФЯ? Вообще говоря их много.
Для Ocaml используют LablTk и LablGtk.
Сам не пробовал, но программы есть, следовательно, библиотеки работают.
Интерфейс, к ним, конечно, императивный и объектно-ориентированный, ведь это просто обёртки над библиотеками.
Для Haskell есть wxHaskell - обёртка над wxWindows, с аналогичными свойствами.
Более концептуальная штука - wxFruit, но похоже оно мёртвое.

Julie16

1) Понятно. Т.е. на чистом ФЯ мы можем забыть о GUI. Так и запишем.
2) Меня больше интересует ответ на пункт 2. Без GUI в конце концов иногда можно и обойтись. С этим-то что делать?

Ivan8209

2.1. Управление событиями достаточно хорошо ложится на ФП.
http-сервер --- совершенно не вопрос.
2.2. Например, на продолжениях.
2.3. См. Erlang и RT-средства в Common Lisp.
2.4. RT подразумевает управление последовательностью
исполнения --- не ФП. Не чистое ФП.
3.1. Есть DrScheme или оно называется как-то иначе.
3.2. Есть Tk для Схемы, вполне может быть и для других.
---
...Я работаю антинаучным аферистом...

Marinavo_0507

Если тебе нужны чистые ФЯ, нафига ты про лисп упоминал?
Ботай Haskell.

Chupa

> В ФЯ это невозможно вследствие сериализации всех запросов к миру(ОС).
Все обращения к миру необходимо сериализовывать, когда про него вообще ничего не известно.
В данной задаче известна дополнительная информация об устройстве внешнего мира,
которую необходимо использовать для решения.

Marinavo_0507

> Для лиспа(например) я нашел биндинги для gtk1.
А я нашёл для gtk2.
Гуглом за 2 минуты.
Что я не так сделал?

Julie16

Видимо ты их не прочекал. Я тоже ин нашел. Только утверждалось что они experimental. Я такой софт не юзаю Тем более они мне не интересны, так как не pure functional. Меня интересует pure functional + GUI.

Papazyan

Че значит забыть?
Я сам лично написал из интереса програмулину на Haskell для wxWindows. Работала и на Linux и под Windows. Выглядела нормально. Но на Haskell геморойно ГУИ писать из-за ленивости.

Papazyan

Кстати, совсем не обязательно писать именно на ФЯ. Можно приделать чужой ГУИ, как в MLDonkey, например - ядро на OCaml, а GUI на Java.

Marinavo_0507

> Но на Haskell геморойно ГУИ писать из-за ленивости.
Вот, говорят, если тулкит продумать в функциональной парадигме, то становится легче.
Пример: FranTk. Но он сделан на основе Tk, так что внешний вид мало кому понравится.
Оставить комментарий
Имя или ник:
Комментарий: