Pull to refresh
28
0
Сергей Свиридов @Underskyer1

User

Send message

Пытаясь композировать некомпозируемое: монады

Reading time5 min
Views5.1K

Сколько раз вы слышали эту мантру "монады не композируются"? Я потратил достаточно много времени, чтобы попробовать опровергнуть это утверждение, пытаясь решить проблему в лоб. Но как и многие вещи в математике, порой, чтобы попробовать что-то понять, иногда стоит сменить масштаб.

Читать далее
Total votes 19: ↑19 and ↓0+19
Comments0

Стрелки как подход к представлению систем на Java

Reading time6 min
Views11K

Часто встречается описание систем, алгоритмов и процессов в виде структурных схем. Следовательно, актуальна задача представления структурных схем, к примеру, из технической документации или спецификации, на языке программирования.


В статье рассматривается подход к представлению структурных схем с использованием концепции стрелок (arrows), описанных Джоном Хьюзом и нашедших применение в Haskell в FRP-фреймворках Yampa и Netwire, а также в XML-фреймворке Haskell XML Toolbox.


Особенностью структурных схем является наглядное представление последовательностей операций (блоков) без акцентирования внимания на самих обрабатываемых данных (переменных) и их состояниях. Для примера рассмотрим радиоприёмник прямого усиления


структурная схема приёмника


Как же реализовать такой способ описания систем и вычислений в рамках существующих мейнстримовых языков программирования?

Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments43

Подробно о Coq: зависимое сопоставление с образцом

Reading time30 min
Views1.2K

(картина "лучшего в мире рисовальщика петухов" "Очень одинокий петух" взята с просторов интернета)

Сопоставление с образцом в Coq на первый взгляд выглядит не сложнее, чем в большинстве языков программирования, т.е. довольно просто. Правда, это впечатление остаётся только до тех пор, пока программисту не приходится столкнуться с зависимыми типами. И тут всё становится гораздо интереснее. Тем не менее интуицию вполне можно выработать. У автора было желание получше разобраться с данной темой и выдалось немного свободного времени. Надеемся, что результат окажется полезен и читателю.

Читать далее
Total votes 5: ↑5 and ↓0+5
Comments2

Tutorial: как портировать проект с Interop Word API на Open XML SDK

Reading time15 min
Views7.7K

С выходом .NET5 дальнейшее развитие некоторых проектов оказалось под вопросом из-за сложности портирования. Если от небольших устаревших библиотек можно отказаться или найти им замену, то от зависимости Microsoft.Office.Interop.Word.dll очень сложно отказаться. Microsoft не планирует добавлять совместимость с .NET Core/5+, поэтому в этой статье мы рассмотрим, как создавать документы Word с помощью Open XML SDK.

Читать далее
Total votes 9: ↑8 and ↓1+11
Comments3

Космические скорости или как свалить с этой планеты

Reading time14 min
Views39K
Вот подходит к концу 2020 год и становится всё очевидней, что с этой планетой что то пошло не так. И всё больше и больше людей задумываются о переезде на другую планету. В этой статье я и расскажу вам о Первой и Второй космической скорости.

Многие скажут:- Ракеты всё равно стоят миллиарды долларов, которых у меня нет. Зачем мне всё это?

Вы не учитываете инопланетян которые регулярно спасают людей от этой планеты (Малдер врать не будет). И не факт, что они спасают людей с красивыми глазками. Если сравнивать например с кошками, то не всё люди заводят себе красивых кошек — многие предпочитают умных. К тому же умных кошек обычно заводят умные хозяева, а следовательно — умных кошек мучают реже, чем красивых.



Поэтому вряд ли высокоразвитая цивилизация, заберет человека — не знающего про Космические скорости. Да, это лишь небольшая вероятность, но те кто не знают про космические скорости — гарантированно останутся в этом обезьяннике. В этой статье вы узнаете о космических скоростях, как они складываются (если прыгнуть вверх с начальной скоростью 15 км/с — с какой скоростью вы вылетите?) и вообще о том как работает гравитация (по ламповой Ньютоновской физике) на максимально простых примерах.

Что такое энергия?


Для начала нужно конечно разобраться с тем, что же такое энергия. Меня много лет мучал этот вопрос, я не мог нормально спать, есть и я долгое время безнадежно скитался по интернетам в поисках истины, но все мои поиски ни к чему не приводили. Я очень долго страдал, пока не наткнулся на совет одного мудрого старца — который сказал:
Читать дальше →
Total votes 55: ↑41 and ↓14+40
Comments82

Монада «Reader» через async/await в C#

Reading time9 min
Views6.9K


В моей предыдущей статье я описал, как реализовать паттерн "Монада Maybe" с помощью операторов async / await. В этот раз я расскажу, как реализовать другой популярный шаблон проектирования "Монада Reader", используя те же приемы.


Этот шаблон позволяет неявно передать некий контекст в иерархию вызовов функции без использования параметров или полей классов, и его можно рассматривать как еще один способ реализации внедрения зависимости (Dependency Injection). Например:

Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments9

Монады как паттерн переиспользования кода

Reading time24 min
Views69K


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


Сейчас же я хочу рассказать, что такое монады на самом деле, чем они полезны для обычного практикующего разработчика, и приведу примеры, почему недостаточная поддержка их в распространенных языках приводит к копипасте и ненадежным решениям.


Но ведь в интернете буквально сотни статей про ФП и монады, зачем писать еще одну?


Дело в том, что все их (по крайней мере те что я читал) можно поделить условно на две категории: с одной стороны это статьи где вам объяснят что монада это моноид в категории эндофункторов, и что если монада T над неким топосом имеет правый сопряжённый, то категория T-алгебр над этой монадой — топос. На другой стороне располагаются статьи, где вам рассказывают, что монады — это коробки, в которых живут собачки, кошечки, и вот они из одних коробок перепрыгивают в другие, размножаются, исчезают… В итоге за горой аналогий понять что-то содержательное решительно невозможно.


Получается, что первые обычно полезны тем, кто и так знает обсуждаемую тему, а вторые даже не знаю на кого рассчитаны: сколько я их не прочитал, ничего полезного понять из них мне не удалось.


Я же хотел бы занять промежуточную позицию, и рассказать про монады без заумных терминов, но и без котиков, используя понятные ООП разработчикам термины: интерфейсы, паттерны, копипаста, инкапсуляция сложности, бойлерплейт, и так далее. В процессе работы над статьёй ни один термин теории категории использован не был.

Читать дальше →
Total votes 89: ↑85 and ↓4+100
Comments256

Функциональное программирование — это не то, что нам рассказывают

Reading time17 min
Views125K

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



Хотя люди обычно признают удобства ФП фич, ведь намного приятнее писать:


int Factorial(int n)
{
    Log.Info($"Computing factorial of {n}");
    return Enumerable.Range(1, n).Aggregate((x, y) => x * y);
}

чем ужасные императивные программы вроде


int Factorial(int n)
{
    int result = 1;
    for (int i = 2; i <= n; i++)
    {
        result *= i;
    }
    return result;
}

Так ведь? С одной стороны да. А с другой именно вторая программа в отличие от первой является функциональной.


Как же так, разве не наоборот? Красивый флюент интерфейс, трансформация данных и лямбды это функционально, а грязные циклы которые мутируют локальные переменные — наследие прошлого? Так вот, оказывается, что нет.

Читать дальше →
Total votes 208: ↑200 and ↓8+251
Comments795

Information

Rating
Does not participate
Location
Воронеж, Воронежская обл., Россия
Registered
Activity

Specialization

Backend Developer