В воскресенье, 6 декабря 2015 года, в 12:00, сообщество RuHaskell приглашает функциональных программистов и всех желающих на очередной митап! Мероприятие пройдёт в Москве, на ул. Льва Толстого, д. 16, в офисе Яндекса, зал Экстрополис.
В данной статье приведено краткое описание техники, которое позволяет использовать в программах на Haskell библиотеки, написанные на других языках программирования. При этом нет необходимости ни переписывать эти библиотеки на Haskell, ни писать бесчисленные обертки на C, ни писать явные байндинги. В получающейся программе можно как напрямую вызывать “чужой” код, так и вызывать из чужого кода Haskell функции. Сам же код функций может быть написан на расширенном подключаемом языке, что позволяет работать с ним специалистам в подключаемых языках, которые, к сожалению, пока не знакомы с Haskell.
Kbdd — это небольшой демон, для пооконного запоминания раскладок, написанный на чистом C и распространяющийся под лицензией GPL-3. Особенность данного демона в том, что он не зависит от сторонних WM и/или DE.
Сейчас программа находится в состоянии доводки до конечного состояния: стабилизация API, добавление информации об ошибках, дополнительные проверки передаваемых значений. Поэтому я представляю программу широкому кругу пользователей, для того, чтобы заинтересованные могли её попробовать, внести свои предложения по поводу функционала, покритиковать и т.д. Если Вы заинтересованы, то под катом подробное описание.
Мемоизация — (Memoization, англ) вариант кеширования, заключающийся в том, что для функции создаётся таблица результатов, и будучи вычисленной при определённых значениях параметров результат заносится в эту таблицу. В дальнейшем результат берётся из данной таблицы.
Эта техника позволяет засчёт использования дополнительной памяти ускорить работу программы.Данный подход очень частно применяется в функциональных языках программирования, однако и в императивных ему так же можно найти применение. В данном топике рассматривается использование мемоизации в языке java приводятся различные примеры мемоизации и в конце производится небольшое сравнение производительности данных методов.
Резюме: В статье приводятся примеры задач, для решения которых могут понадобиться монады.
Вместо вступления (перевод начался):
Во многих «введениях в монады» монады подаются как нечто сложно-объяснимое. Я же хочу показать, что это на самом деле, они не являются чем-то сложным. В действительности, сталкиваясь с различными проблемами в функциональном программировании вы будете непреклонно приходить к различным решениям, которые часто являются примерами монад. И я надеюсь, что вы научитесь изобретать их, если вы ещё не научились. Забегая вперёд скажу, что эти решения по сути являются одним и тем же решением. После прочтения вы наверное будете лучше понимать другие работы по монадам потому, что будете узнавать всё, что вы увидите как то, что вы уже сами изобрели.