Functional Retroactive Programming

предыдущая серия Одно из ключевых отличий объектно-ориентированного проектирования от функционального в том, что в ООП мы ориентируемся на поведение объектов, а в последнем случае — на трансформациях данных. В результате, принципиально различается подход в каждом[…]

Читать дальше …

Пакетная обработка монадами состояний

предыдущая серия Вернёмся теперь к первым заметкам, где мы рассматривали исполнение только на клиентской части. Допустим, мы просто хотим организовать пакетную обработку команд роботу в наиболее удобном и наглядном стиле в синтаксическом плане. После примера[…]

Читать дальше …

Монады состояний

предыдущая серия Последним шагом перед возвращением к нашей архитектуре на базе монад станут монады состояний. Однако «оборачивают» они отнюдь не состояния-значения, как можно подумать, а наоборот — функции. Причём не все функции, а такие, которые[…]

Читать дальше …

Моноиды с сахарком

предыдущая серия Тему моноидов мы подробно рассмотрели вот в этом сериале. Теперь добавим с помощью PyMonad немного синтаксического сахара. Чтобы создать оригинальный тип-моноид, надо унаследоваться от класса Monoid. Например, для операции вычисления среднего нам пришлось[…]

Читать дальше …

Монады в Питоне

предыдущая серия Концепцию монады применительно к программированию лучше всего изучить на практике. Монада — это тип (класс типов), который позволяет строить цепочки вычислений. Между этими вычислениями передаются только монады, что и делает эти цепочки в[…]

Читать дальше …

Аппликативные функторы в Python

предыдущая серия Монады, как известно — это и аппликативные функторы (функции, упакованные в контексты/контейнеры), а все аппликативные функторы — это конечно и просто функторы (условно говоря, функции, к которым можно применять fmap). Начнём с конца.[…]

Читать дальше …

История метапрограммирования (14)

предыдущая серия Ещё одна серьезная работа Карделли, который впоследствии подключится к разработке C# в Microsoft — это «Теория объектов» 1996 года, которую он написал уже явно под влиянием времени и стремительно набиравшего популярность ООП. Он[…]

Читать дальше …

Все стили и архитектуры программирования (11)

предыдущая серия Естественным расширением карринга станет композиция функций. Каррированные функции можно «составлять» (compose) друг с другом, когда результат вычисления одной функции передаётся на вход другой. Этому служит операция композиции *, которая работает справа налево: сперва[…]

Читать дальше …

Все стили и архитектуры программирования (10)

предыдущая серия Подключаем монады. Рассмотрим немного иной архитектурный подход, когда набор команд исполняется сервером не по одной на вызов, а сразу группой, пакетом (пресловутая batch mode, пакетный режим). Такая схема, в принципе, в некотором смысле[…]

Читать дальше …

История метапрограммирования (13)

предыдущая серия Ещё одну принципиально важную идею, не очень оценённую на сей день, выдвинул в конце 1980-х Митчел Ванд, профессор одного из частных бостонских университетов. Он копал тему параметрического полиморфизма (когда разные типы можно математически[…]

Читать дальше …

Все стили и архитектуры программирования (9)

предыдущая серия Пожалуй, главный недостаток последнего подхода в том, что мы передавали в качестве параметров пять разных функций. Но строго говоря, когда у функции много параметров, это верный признак плохого дизайна (при использовании функционального стиля[…]

Читать дальше …

История метапрограммирования (12)

предыдущая серия Естественную для программиста потребность в полноценном использовании системы типов выразил Лука Карделли, автор концепции ограниченной квантификации. Он предложил стиль полнотипового программирования (typeful programming),дабы система типов на этапе компиляции выявляла максимально возможное количество ошибок.[…]

Читать дальше …

Все стили и архитектуры программирования (8)

предыдущая серия Недостаток объектного подхода при инъекции зависимостей, во-первых, в том, что интерфейсы получаются автономными, и мы не можем их компоновать, и во-вторых, нарушается важный паттерн проектирования Interface Segregation Principle, когда клиент получает/видит только те[…]

Читать дальше …

История метапрограммирования (11)

предыдущая серия В конце 1980-х в computer science проявилось новое направление, своего рода альтернатива классическим подходам к лямбда-исчислениям. Его праотцами стали, независимо друг от друга, математики Стефано Берарди и Ян Терлоу, предложившие подход, во-первых, обобщающий[…]

Читать дальше …

Все стили и архитектуры программирования (7)

предыдущая серия Теперь вернёмся немного назад, к ООП, которое мы рассмотрели в третьем занятии, и посмотрим, какие есть хорошие способы для разделения интерфейсов и реализации. До сих пор мы напрямую работали непосредственно с реализацией, теперь[…]

Читать дальше …

История метапрограммирования (10)

предыдущая серия Значимым, хотя и не оценённым и по сей день, очередным шагом за край метапрограммирования стали исследования конца 1980-х годов Robert Harper (автор языка Standard ML, для которого была формально верифицирована динамическая и статическая[…]

Читать дальше …

Все стили и архитектуры программирования (6)

предыдущая серия Казалось бы, невозможно сделать систему, где по смыслу наш робот может находиться в промежуточных состояниях, но никаких внутренних переменных или объектов мы не создаем. Конечно, эти состояния в системе в виде некоторой абстракции так или иначе будут присутствовать. Наша задача в другом — избавиться[…]

Читать дальше …

Все стили и архитектуры программирования (5)

Функциональная архитектура предыдущая серия Главным минусом объектной архитектуры, как мы выяснили, стало хранение на сервере для каждого клиентского соединения мутабельного объекта с неким промежуточным состоянием. Альтернативным, более строгим вариантом мутабельного подхода станет функциональная схема, в которой чистая серверная логика станет[…]

Читать дальше …

История метапрограммирования (9)

предыдущая серия Наряду с функциональными подходами достаточно активно развивались и математические методы, связанные с императивным программированием, в 1980-х годах уже практически полностью захватившим мир ИТ-мэйнстрима. Математик Жан-Ив Жирар, занимаясь изучением System F (самой мощной системой[…]

Читать дальше …

История метапрограммирования (8)

предыдущая серия По мере роста популярности функциональных подходов к программированию стали чётче вырисовываться и их недостатки. Так, концепция абстрактных типов данных (АТД) оказалась в ряде случаев весьма слабой. То, что просто и естественно реализовывалось в языках с динамической типизацией наподобие Lisp, сталкивалось с непреодолимыми[…]

Читать дальше …