Как стать автором
Обновить
22.6
Рейтинг

Функциональное программирование *

От Lisp до Haskell

Сначала показывать
  • Новые
  • Лучшие
Порог рейтинга
  • Все
  • ≥0
  • ≥10
  • ≥25
  • ≥50
  • ≥100

Написание компилятора на Haskell + LLVM

Haskell *Компиляторы *Функциональное программирование *DIY или Сделай сам
Tutorial

На работе я пишу почти исключительно на Python, с университетской скамьи остались некоторые знания C/C++, в одном pet-project использовал Haskell. С таким багажом знаний я взялся за написание компилятора на основе LLVM - зачем и что получилось я уже рассказывал в предыдущей статье.

Эту статью я пишу для тех, кто, как и я, заинтересован в изучении Haskell, создании собственных языков программирования, или хочет поиграться с LLVM - но не знает с какого конца подойти к задаче.

Я кратко расскажу про необходимый минимум знаний Haskell, про свои ошибки и к каким решениям я пришел - а так же про решения, к которым я не пришел, и про которые узнал позже - и как их можно интегрировать в ваш pet-компилятор. На все это я по возможности дам ссылки на изучение.

Читать далее
Всего голосов 32: ↑32 и ↓0 +32
Просмотры 4K
Комментарии 0

Новости

Функциональный подход в Jetpack Compose: каррирование функций

Блог компании Surf Программирование *Разработка мобильных приложений *Разработка под Android *Функциональное программирование *

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

Читать далее
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 1.6K
Комментарии 5

А вы знаете, где сейчас используется Лисп?

Блог компании Typeable Программирование *Lisp *Функциональное программирование *

Введение


Лисп — второй по старшинству из ныне живых высокоуровневых языков программирования (после Fortran) и первый функциональный язык. Он был разработан в 1958 году и сильно изменился с тех пор, породив множество диалектов и оказав значительное влияние на развитие других языков. На данный момент наиболее известные диалекты: Common Lisp, Scheme, Racket и Clojure.



Слева: Лисп-машина в музее MIT.
Справа: Лисп-машина Symbolics 3640, фото Michael L. Umbricht и Carl R. Friend (Retro-Computing Society of RI)


Лисп стал “первооткрывателем” многих идей, нашедших применение в современных языках программирования: древовидные структуры, динамическая типизация, функции высшего порядка и многое другое. В этом посте мы не будем углубляться во вклад Лиспа в теорию, а сосредоточимся на практической пользе.


Изначально Лисп предназначался для работ в области искусственного интеллекта, в частности как представление математической нотации для символьных вычислений. Но насколько широко диалекты Лиспа используются сейчас и в каких областях применяются?


Мы в Typeable любим и применяем функциональное программирование, а влияние Лиспа на функциональные языки всё ещё сильно, поэтому нам стало интересно разобраться в этом вопросе.

Читать дальше →
Всего голосов 44: ↑42 и ↓2 +40
Просмотры 20K
Комментарии 35

Higher-Kinded Data, или ещё один способ работать с сущностями базы данных (и не только)

Haskell *Scala *Функциональное программирование *

image


Важный дисклеймер


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


Я не стараюсь вам продать этот cпособ как панацею.
Я лишь хочу рассказать вам ещё один способ представлять данные и показать, как его можно использовать, на конкретном примере.
Как и все остальные подходы, этот имеет свои недостатки. И кое-где придётся приседать. С этими приседаниями мы встретимся довольно скоро.


«Не думайте, что я сейчас буду развивать эту концепцию, а затем разочаруюсь в ней. Такой драматургии не будет. Я изначально уже в ней разочарован.»
Роман Михайлов

Ещё хочется заметить, что далее все примеры кода будут приводиться на Haskell. Но в конце я покажу, как можно некоторые из них повторить на Scala.


Что такое HKD


Конечно, прежде, чем писать этот раздел, я полез в интернет, чтобы посмотреть, как этот термин определяют другие люди. Чёткого определения я не нашёл.
Грубо говоря, HKD — это то, что предоставляет возможность держать в одном типе данных сразу несколько представлений. Давайте посмотрим на примеры.

Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 1.6K
Комментарии 3

Как мы добавили поддержку языка Frege в IDEA. Часть 2

Блог компании Питерская Вышка Java *Совершенный код *Функциональное программирование *Учебный процесс в IT

Привет! Это вторая часть рассказа о том, как мы поддерживали язык Frege в IntelliJ IDEA. Первую часть читайте здесь. Сейчас мы поделимся, как сделали автодополнение, систему сборки, интерпретатор и систему типов. И как все это тестировали.

Читать далее
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 1.7K
Комментарии 1

Как мы добавили поддержку языка Frege в IDEA. Часть 1

Блог компании Питерская Вышка Java *Совершенный код *Функциональное программирование *Учебный процесс в IT

Привет! В этом посте мы расскажем, как реализовывали плагин для поддержки функционального языка Frege в IntelliJ IDEA. Если вам интересно, как IDE от JetBrains работают внутри, или вы хотите поконтрибьютить в языковые плагины (а может даже написать свой!), эта статья для вас. Мы пройдемся по этапам создания языкового плагина для IDEA, расскажем, с какими трудностями столкнулись, и как подружили этот язык с JVM-миром.

Читать далее
Всего голосов 35: ↑35 и ↓0 +35
Просмотры 4.1K
Комментарии 9

Refined типы в Scala

Scala *Функциональное программирование *

В процессе написания программ мы часто сталкиваемся с данными, для которых возможен только ограниченный набор значений. Например, возраст, который не может быть отрицательным или email, который может иметь только определенный формат строки.

Читать далее
Всего голосов 16: ↑16 и ↓0 +16
Просмотры 2.4K
Комментарии 33

Иммутабельная архитектура

Программирование *Анализ и проектирование систем *Совершенный код *Проектирование и рефакторинг *Функциональное программирование *
Перевод

Эта статья является переводом материала «Immutable architecture».

В этом посте автор оригинала хотел бы показать общий подход к внедрению иммутабельности в кодовую базу на архитектурном уровне.

Прежде всего, термин «Иммутабельность», применяемый к структуре данных, такой как класс, означает, что объекты этого класса не могут изменяться в течение их жизненного цикла. Существует несколько типов иммутабельности со своими нюансами, но это не являются для нас существенным. По большей части мы можем сказать, что класс является либо изменяемым, что означает, что его экземпляры могут изменяться тем или иным образом, либо иммутабельным (неизменяемым), что означает, что как только мы создадим экземпляр этого класса, мы не сможем изменить его позже.

Читать далее
Всего голосов 16: ↑13 и ↓3 +10
Просмотры 7.2K
Комментарии 12

Property-based тестирование с QuickCheck

Блог компании Typeable Тестирование IT-систем *Программирование *Haskell *Функциональное программирование *
Tutorial

Автор статьи: klntsky



Что такое Property-Based Testing?


Property-based testing (PBT) — подход к тестированию ПО, подразумевающий автоматическую проверку свойств функций (предикатов), специфицируемых программистом-тестировщиком. Для проверки, т.е. поиска контрпримеров, используются автоматически сгенерированные входные данные. PBT позвляет разработчикам значительно увеличить тестовое покрытие и эффективно расходовать своё время, не придумывая входные данные для тестов самостоятельно. В общем случае данные, генерируемые во время property-based тестирования, ничем не ограничены, поэтому проверка может быть произведена на тех значениях, про которые разработчик мог забыть или для которых не счёл нужным написать юнит-тесты (действительно, не перебирать же все значения входных параметров вручную).


PBT-подход был популяризован библиотекой QuickCheck, написанной на Haskell, и в этой статье будет показано, как пользоваться этим инструментом эффективно.

Читать дальше →
Всего голосов 6: ↑6 и ↓0 +6
Просмотры 954
Комментарии 0

Что такое функциональное программирование?

Программирование *Анализ и проектирование систем *Совершенный код *Функциональное программирование *
Перевод

Эта статья является переводом материала «What is functional programming?».

В этой статье Владимир Хориков попытается ответить на вопрос: что такое функциональное программирование?

Итак, что такое функциональное программирование? Этот термин возникает довольно часто, и каждый автор, пишущий о нем, дает собственное объяснение. На взгляд автора оригинала, самым простым и в то же время точным определением является следующее: функциональное программирование - это программирование с математическими функциями.

Математические функции не являются методами в программном смысле. Хотя мы иногда используем слова «метод» и «функция» как синонимы, с точки зрения функционального программирования это разные понятия. Математическую функцию лучше всего рассматривать как канал (pipe), преобразующий любое значение, которое мы передаем, в другое значение

Читать далее
Всего голосов 32: ↑27 и ↓5 +22
Просмотры 19K
Комментарии 107

Python кодогенерация на благо ETL

Open source *Python *Функциональное программирование *
Из песочницы

В процессе разработки весьма часто встаёт задача преобразования данных, будь то данные от внешнего источника на пути в базу или данные из базы на пути в отчеты и т.п.

Если описывать все необходимые преобразования императивно, то можно довольно скоро загрустить. Можно постараться и сделать всё декларативно, скажем, в виде некоторых dict-ов, в которых задать правила (функции?) по работе с каждым отдельным полем. Но уже на этом этапе появляется несколько проблем (поговорим о них ниже).

Альтернатива: в функциональном стиле динамически задаются конверсии, из них строятся pipeline-ы, далее конверсии генерируют ad-hoc код функций, реализующих заданное преобразование, используя библиотеку convtools.

На выходе получаются функции, лишенные излишнего динамизма, который нужен только на этапе чтения кода + ради DRY-принципа.

Читать далее
Всего голосов 9: ↑9 и ↓0 +9
Просмотры 3K
Комментарии 1

Java/Scala программа, имитирующая анимацию капель дождя

Java *Scala *Функциональное программирование *Компьютерная анимация *Графический дизайн *

Пригодна ли Java (Scala) и ее библиотеки для задач вывода 3D и анимации? Я попробовал это выяснить на примере библиотеки org.fxyz3d и хотел бы поделиться самой программой и выводам по итогам ее запуска.

Читать далее
Всего голосов 5: ↑2 и ↓3 -1
Просмотры 2K
Комментарии 0

Как в ЦФТ реализовать то, что мы всегда делали в Бисквите (с примерами)

Блог компании Россельхозбанк SQL *Функциональное программирование *

Привет, Хабр! Меня зовут Баранов Михаил, работаю программистом более 20 лет. Эта статья о том, как сделать в ЦФТ, то что мы привыкли делать в Бисквите. Начинал я ее писать только для себя, чтобы упорядочить свои знания. Однако потом оказалась, что эта тема важна для всех разработчиков, которые переходят на ЦФТ и не только с Бисквита. Именно поэтому я решил разместить ее на Хабре.

Читать далее
Всего голосов 10: ↑7 и ↓3 +4
Просмотры 1.3K
Комментарии 3

Программа в 50 строк на Java/Scala, которая сэкономит вам 50 тыс. р. при подаче декларации 3-НДФЛ

Программирование *Java *Scala *ООП *Функциональное программирование *

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

Но если брокер такой как у меня - Interactive Brokers (организация, третьего дня запрещенная на территории РФ), декларацию вам придется делать и подавать самому. Делать это всем, конечно же лень, и неплохо бы отдать подготовку на аутсорс...

Читать далее
Всего голосов 28: ↑16 и ↓12 +4
Просмотры 7.6K
Комментарии 23

Kq: продолжаем обрабатывать JSON

Программирование *Функциональное программирование *Визуализация данных Kotlin *Разработка под Linux *

...на Kotlin разумеется. В комментариях к предыдущей статье было задано несколько вопросов, как сделать конвертацию в tsv, почему утилита собрана в Docker образ и предложение использовать нативный образ GraalVM.

В этой статье содержится ответ на них и заодно рассказывается о последнем обновлении функций утилиты. Кто по работе часто занимается процессингом JSON - добро пожаловать под кат.

Читать далее
Всего голосов 2: ↑1 и ↓1 0
Просмотры 2.2K
Комментарии 0

Современный JSON процессор

Программирование *Java *Функциональное программирование *Kotlin *Разработка под Linux *

Вместо тысячи слов... Хотели бы вы обрабатывать json в терминале таким образом?

Если да, то вам под кат.
Всего голосов 16: ↑11 и ↓5 +6
Просмотры 5.9K
Комментарии 26

Создаем веб-приложение на Haskell с использованием Reflex. Часть 4

Блог компании Typeable Разработка веб-сайтов *Программирование *Haskell *Функциональное программирование *
Tutorial

Часть 1


Часть 2


Часть 3


Всем привет! В новой части мы рассмотрим использование JSFFI.


intro

Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Просмотры 2K
Комментарии 0

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

Ненормальное программирование *Программирование *ООП *Функциональное программирование *Kotlin *

Как-то прочел на Хабре статью «Перевозим волка, козу и капусту через реку с эффектами на Haskell», которая так понравилась, что решил написать фреймворк для всего класса задач о переправах, используя мультипарадигменное проектирование. Наконец удалось найти время, и вот, спустя почти год, фреймворк готов. Теперь персонажи, их взаимодействия и описание искомого результата задаются через domain-specific language, который позволяет решать любые головоломки подобного рода с пошаговым выводом. Ниже приводится поэтапный разбор реализации DSL. Статья подойдет тем кто изучает язык Kotlin или просто интересуется примерами его использования. Некоторые малозначимые детали (вроде импортов и вывода) для кратости опущены.

Начнем писать код
Всего голосов 9: ↑8 и ↓1 +7
Просмотры 2.1K
Комментарии 0

Непрактичный python — пишем декоратор в одну строку

Python *Функциональное программирование *
Из песочницы

Давеча, с коллегой, на работе поспорили что нельзя написать кэширующий декоратор в 4 строки, я утверждал что можно. Да все началось с 4 строк, закончилось функциональным программированием кучей lambda выражений в одну строку и декоратором в одну строку.

Дисклеймер

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

Читать далее
Всего голосов 22: ↑18 и ↓4 +14
Просмотры 10K
Комментарии 20

Заберите свои скобки

Haskell *Функциональное программирование *

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

Тоже не люблю лишние скобки!
Всего голосов 20: ↑18 и ↓2 +16
Просмотры 7K
Комментарии 6

Вклад авторов