Осознав, что я давно не писал на Хабр ничего полезного о ФП и Haskell, и что имеется вполне отличный повод для технической статьи, — решил тряхнуть стариной. Речь в статье пойдет о Software Trasactional Memory (STM), которую мне удалось реализовать на Free-монадах при участии ADTs и MVars. И, в общем-то, Proof of Concept оказался крайне простым, в сравнении с «настоящим» STM. Давайте это обсудим.
Рубрика «функциональное программирование» - 19
Software Transactional Memory на Free-монадах
2018-03-27 в 12:53, admin, рубрики: free-монады, haskell, monads, stm, параллельное программирование, функциональное программированиеОбъект в футляре или Optional в Java 8 и Java 9: Часть 5: Недосказанное и постер в подарок
2018-03-26 в 18:08, admin, рубрики: java, java8, java9, optional, Программирование, функциональное программированиеЭто пятая и последняя статья серии, посвящённая использованию класса Optional при обработке объектов с динамической структурой. В первой статье было рассказано о способах избежания NullPointerException в ситуациях, когда вы не можете или не хотите использовать Optional. Вторая статья посвящена описанию методов класса Optional в том виде, как он появился в Java 8. Третья — методам, добавленным в класс в Java 9. В четвертой статье я представил класс, который расширяет возможности класса Optional на случай, когда при неудаче при обработке данных в методе нам необходимо обрабатывать информацию об этой неудаче.
В этой статье мы рассмотрим вопрос, стоит ли Optional использовать во всех тех местах, где могут появиться нулевые значения. Я приведу также мнение Brian Goetz, архитектора языка Java v Oracle об этом классе, и конечно, исполню данное в прошлой статье обещание — поощрю каждого читателя, прочитавшего все статьи серии, ценным подарком.
Читать полностью »
Функциональное программирование с PHP-генераторами
2018-03-23 в 7:32, admin, рубрики: generators, php, Блог компании Mail.Ru Group, никто не читает теги, Программирование, функциональное программированиеГенераторы классные. Они облегчают написание итераторов, определяя функции вместо создания целых классов, реализующих Iterator
. Также генераторы помогают создавать ленивые списки (lazy list) и бесконечные потоки. Главное отличие функции-генератора от обычной функции в том, что обычная может возвращать только один раз (после этого её исполнение прекращается), а функция-генератор в ходе исполнения способна выдавать несколько значений. При этом в перерывах между возвратами исполнение генератора ставится на паузу до следующего запуска. Поэтому генераторы могут использоваться для создания списков с лениво генерируемыми значениями, то есть каждый элемент в списке вычисляется только в момент востребованности.
Пишем небесных пчелок на Cloud Haskell
2018-03-19 в 14:19, admin, рубрики: cloud haskell, distributed computing, Erlang/OTP, functional programming, haskell, open source, Блог компании Школа GoTo, децентрализованные сети, Программирование, функциональное программирование, школа
Привет!
Прошло всего лишь каких-то 11577635 секунд с конца осенней школы GoTo в ИТМО. Неделя направления Распределённых систем началась с прототипирования распределённой системы на Cloud Haskell. Мы начали бодро и потому быстро выяснили, что существующую документацию без PhD понять сложновато — и решили написать методичку.
Под катом введение в p2p cloud haskell, немножко функционального стека прототипирования РС, мотивация и «но зачем».
Читать полностью »
Краткое пособие по языку Red
2018-03-13 в 13:38, admin, рубрики: dsl, open source, rebol, Red, Программирование, реактивное программирование, функциональное программированиеПубликуемая статья в части, посвященной синтаксису языка, базируется на документации по языку Rebol, оригинал которой доступен по следующему адресу:
www.rebol.com/docs/core23/rebolcore.html
Привет всем!
Сегодня я хотел бы рассказать о языке программирования Red. Язык Red является непосредственным преемником более раннего языка REBOL. Оба они малоизвестны в русскоязычном сообществе, что само по себе странно, т.к. указанные языки представляют интерес как с точки зрения оригинального взгляда на то, каким должно быть программирование, так и тем, что отличаются потрясающей выразительностью, позволяя решать сложные задачи простыми способами.
Данная статья призвана исправить сложившуюся ситуацию, являясь первым пособием по основам языка Red на русском языке.
Разработка высоконагруженного WebSocket-сервиса
2018-03-12 в 15:51, admin, рубрики: bash, Elixir, Elixir/Phoenix, erlang, node.js, phoenix, phoenix framework, react.js, ruby on rails, scala, sql, swoole, WebSocket, workerman, yaml, Программирование, функциональное программированиеКак создать веб-сервис, который будет взаимодействовать с пользователями в реальном времени, поддерживая при этом несколько сотен тысяч коннектов одновременно?
Всем привет, меня зовут Андрей Клюев, я разработчик. Недавно я столкнулся с такой задачей – создать интерактивный сервис, где пользователь может получать быстрые бонусы за свои действия. Дело осложнялось тем, что в проекте были довольно высокие требования по нагрузке, а сроки были крайне невелики.
В этой статье я расскажу, как выбирал решение для реализации websocket-сервера под непростые требования проекта, с какими проблемами столкнулся в процессе разработки, а также скажу несколько слов о том, как в достижении вышеуказанных целей может помочь конфигурирование ядра Linux.
В конце статьи приведены полезные ссылки на инструменты разработки, тестирования и мониторинга.
Rust: состояния типов
2018-03-03 в 9:34, admin, рубрики: open source, Rust, безопасность, классы, Компиляторы, Программирование, системное программирование, типы, функциональное программированиеРаньше в Rust были состояния типов, которые были удалены из языка еще до официального релиза первой версии. В этой статье я раскрою вам тайну: Rust поддерживает состояния типов.
Прошу под кат.
«Простое» программирование на python
2018-01-09 в 18:35, admin, рубрики: clojure, functional programming, funcy, python, функциональное программированиеfunctools (это такая свалка для всяких ненужных мне вещей :-).
— Гвидо ван Россум
Может показаться, что статья о ФП, но я не собираюсь обсуждать парадигму. Речь пойдет о переиспользовании и упрощении кода — я попытаюсь доказать, что вы пишете слишком много кода, поэтому он сложный и тяжело тестируется, но самое главное: его долго читать и менять.
В статье заимствуются примеры и/или концепции из библиотеки funcy. Во-первых, она клевая, во-вторых, вы сразу же сможете начать ее использовать. И да, нам понадобится ФП.
Почему программистам нужны ограничения
2018-01-05 в 7:42, admin, рубрики: Карьера в IT-индустрии, многопоточное программирование, многоядерные процессоры, оптимизация, Программирование, функциональное программирование
Мы родились в культуре с девизом «Никаких границ» или «Раздвигай границы», но на самом деле границы нам нужны. С ними мы становимся лучше, но это должны быть правильные границы.
Цензура ради качественной музыки

Когда перед нами встают внешние ограничения того, что можно сказать в песне, книге или фильме, то для передачи нужного смысла авторы должны использовать метафоры.
Читать полностью »
Naive Spellchecking, или поиск ближайших слов из словаря по метрике Левенштейна на Scala
2017-12-19 в 6:18, admin, рубрики: Dijkstra's algorithm, levenstein, scala, trie, Алгоритмы, поисковые технологии, Программирование, функциональное программированиеПриветствую! В этой статье будет показан алгоритм поиска ближайших к заданному слов из корпуса в терминах метрики Левенштейна. Наивным spellchecking-ом назван потому, что не учитывает ни морфологии, ни контекста, ни вероятности появления скорректированного слова в предложении, однако в качестве первого приближения сойдет вполне. Также алгоритм может быть расширен на поиск ближайших последовательностей из любых других сравнимых объектов, нежели простой алфавит из Char-ов, и, после допиливания напильником, его можно приспособить и для учета вероятностей появления скорректированных слов. Но в данной статье сосредоточимся на базовом алгоритме для слов определенного алфавита, скажем, английского.
Код в статье будет на Scala.
Всех заинтересовавшихся прошу под кат.
Читать полностью »