Как стать автором
Обновить
2.77

Haskell *

Чистый функциональный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

На самом деле, ООП — это не так уж плохо

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров11K

ООП — определённо не самая моя любимая парадигма, но я считаю, что в мейнстримном ООП со статической типизацией кое-что сделано правильно, и это очень важно для программирования.

В этом посте я хочу рассказать, что же самое важное реализовано в мейнстримных ООП-языках со статической типизацией.

Затем я сравню ООП-код с Haskell, чтобы показать, что ООП не так плох во всём, как, похоже, считают поклонники функционального программирования.
Читать дальше →
Всего голосов 32: ↑25 и ↓7+33
Комментарии149

Новости

Планируем потоки как Томас Джефферсон

Время на прочтение10 мин
Количество просмотров1.8K

Эта статья посвящена тому, как распределять задачи между конвейерами очередей, чтобы минимизировать общее время обработки, а также неожиданной связи между этим методом планирования и методом Томаса Джефферсона.

Читать далее
Всего голосов 6: ↑6 и ↓0+9
Комментарии0

Restricted IO в Haskell

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров1.6K

В статье описывается механизм создания собственного модифицированного варианта монады IO в Haskell, с ограничениями операций ввода-вывода.

Хорошим тоном организации структуры любой программы на Haskell считается разделение кода на блоки, выполняющие IO операции ввода-вывода и блоки, полностью состоящие из чистых функций, т.е. функций, не выполняющих IO операций, а лишь принимающие на вход некоторые данные и возвращающие их в преобразованном виде. Такого рода чистые блоки по сути представляют из себя функции в математическом смысле слова, принимающие аргумент и возвращающие значение функции, и напоминают программы зари компьютерной эры, когда данные с перфокарт загружались в программу в самом начале её работы, после чего некоторое время обрабатывались, и по итогу работы программы выводила на печать итоговый результат расчётов, при этом в ходе работы программы не предполагалось никакого интерактивного взаимодействия с ней.

Чтобы добавить в программу интерактивность, но при этом максимально сохранить математическую целостность функций, применяется примерно такой подход:

Читать далее
Всего голосов 13: ↑12 и ↓1+17
Комментарии4

Разбор монады ContT, или как написать продвинутый goto, генераторы и файберы на хаскеле

Уровень сложностиСложный
Время на прочтение7 мин
Количество просмотров1.6K

В этой статье я разберу монаду ContT, и покажу как вернуть return и другие control-flow операторы из императивных языков программирования, которых мне так нехватало, когда я начинал изучать хаскель.

Читать далее
Всего голосов 11: ↑10 и ↓1+10
Комментарии2

Истории

Безопасный Continuous Deployment БД по принципам DB-First

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров3.7K

В статье рассматривается Continuous Deployment для БД с бесшовными релизами за счёт обратно-совместимых обновлений и автоматизации проверок совместимости с помощью подхода DB-First.

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии8

Постфиксный калькулятор на Haskell

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.9K

Можно ли внедрить в Haskell постфиксный калькулятор?

begin push 1 push 2 add end
begin push 1 push 2 push 3 add mul end

На первый взгляд такой код на Haskell не может работать. Функция begin должна иметь произвольное количество аргументов, а Haskell является языком со статической типизацией. Но на самом деле, для написания вариативных (polyvariadic) функций достаточно полиморфизма.

Читать далее
Всего голосов 11: ↑11 и ↓0+14
Комментарии0

Как изучить Haskell всего за 15 лет

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров15K

Haskell — это язык программирования, изобретённый в 20-м веке шотландскими логиками в качестве пранка (вероятно). Примерно пятнадцать лет назад я начал изучать Haskell по причинам, которые уже и не упомню. Сегодня я наконец написал полезную программу на Haskell и уверен, что смогу сделать это снова, если мне когда-нибудь понадобится ещё одна компьютерная программа.

Я не знаю, как изучал функциональное программирование в целом и Haskell в частности. В 2006-м я следил за проектами why the lucky stiff и читал передовой тамблелог Леа Нойкирхен Anarchaia, и какой-то из этих источников познакомил меня с миром за пределами ООП. В декабре 2006 года Леа опубликовала на Anarchaia ссылку на Pandoc, и тогда я впервые узнал о своём любимом ПО и языке, на котором оно было написано.
Читать дальше →
Всего голосов 43: ↑38 и ↓5+52
Комментарии9

Из пушек по воробьям. Генерация и решение лабиринта не самым обычным способом

Уровень сложностиСредний
Время на прочтение19 мин
Количество просмотров5.1K

На уходящей неделе мне попалась симпатичная, хоть и не новая мини‑серия статей на Дзен‑канале @zdgzdgzdg про процедурную генерацию лабиринта методом «коллапса волновой функции». Пока я читал эти статьи и знакомился с кодом, меня осенило: ведь это же вычисления в комонаде, погружённые в монаду! Я не издеваюсь, действительно, речь идёт о композиции двух паттернов функционального программирования: комонады Zipper, превращающей локальные правила в глобальное состояние, и монады Random, позволяющей генерировать случайные объекты.

И вот, в качестве баловства на выходных, я решил реализовать этот «квантовый» алгоритм генерации лабиринтов на Haskell, используя и комонады и монады, и вообще, ни в чëм себе не отказывая. И хотя язык программирования Haskell нужен не только для извращений, но именно для них он подходит идеально!

Читать далее
Всего голосов 38: ↑38 и ↓0+38
Комментарии7

О функциональном программировании на примере решения судоку

Уровень сложностиСредний
Время на прочтение10 мин
Количество просмотров7.9K

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

Читать
Всего голосов 13: ↑12 и ↓1+19
Комментарии26

Проектирование БД рекомендательной системы по подходу DB-first

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров4.4K

В данной статье мы рассмотрим проектирование системы по подходу DB-first и то, какие проблемы он помогает не просто решить, а устранить как явление.

Читать далее
Всего голосов 9: ↑7 и ↓2+7
Комментарии10

Что вы знаете о символьном программировании?

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров17K

Кликбейтный заголовок, риторический вопрос и обещание раскрыть тайну! Не самый лучший набор, но нормального названия для статьи мне в голову не пришло. Что же здесь все таки будет? Речь пойдет о реализации символьного программирования в Wolfram Language (WL). Я не буду рассказывать про отличия от других парадигм. А также здесь точно не будет общих определений. Вместо этого я попытаюсь ответить на несколько вопросов исходя из своего личного опыта и наблюдений.

Внимание! Я не математик и не знаю haskell и lisp! И буду рад если меня поправят настоящие математики, которые с ними знакомы.

Читать далее
Всего голосов 40: ↑40 и ↓0+40
Комментарии98

Делаем crackme. Часть первая: whitebox AES

Уровень сложностиСредний
Время на прочтение34 мин
Количество просмотров3.3K

Эта статья первая из цикла, в котором мы будем создавать crackme для linux amd64. В crackme будут реализованы шифрование каждой функции отдельным ключём и наномиты для противодействия отладке. В данной статье мы рассмотрим алгоритм встраивания ключа шифрования в код для усложнения расшифровки функций пользователем. Если стало интересно, прошу под кат.

Читать далее
Всего голосов 8: ↑8 и ↓0+8
Комментарии0

Автоматизация разработки с помощью подхода DB-first

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров5.2K

Интеграция с БД - привычно сложная и хрупкая часть большинства кодобаз, постоянно отвлекающая внимание разработчиков и раздувающая сроки. Какой бы хайпующий фреймворк вы ни пробовали, вы неизбежно обнаруживаете себя борющимся с одними и теми же симптомами, но ощущение того, что проблема могла бы решаться проще не покидает вас. Знакомо?

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

Читать далее
Всего голосов 20: ↑5 и ↓15-9
Комментарии14

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань

Ломаем хаскелем Brainfuck

Уровень сложностиСложный
Время на прочтение28 мин
Количество просмотров10K

Немного о bfc


Brainfuck — очень глупый язык. Там есть лента из 30к ячеек, по байту каждая. Команды bfc это:


  • Передвижение по ленте влево и вправо (символы < и >)
  • Увеличение и уменьшение значения в ячейке (символы + и -)
  • Ввод и вывод текущей ячейки (символы . и ,)
  • И цикл while, который продолжается пока значение в текущей ячейке не ноль. [ и ] это начало и конец цикла соответственно

Программировать на bfc сложно. Но, как известно, любую проблему можно решить добавлением слоя абстракции (кроме проблемы большого количества абстракций).

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

Нет, в Haskell неудобно обрабатывать ошибки (если не пользоваться эффектами)

Время на прочтение6 мин
Количество просмотров6K

Если вы когда-нибудь читали агитации, призывающие к изучению Haskell, наверняка вас убеждали, что в нём ну очень удобно обрабатывать ошибки, ведь там есть Монада Either.

Но это неправда. В хаскельных школах не рассказывают, как удобно(?) обрабатывать ошибки. А я расскажу.

Обработать ошибки без регистрации и СМС
Всего голосов 29: ↑28 и ↓1+37
Комментарии19

Как выглядит стажировка в ИТМО

Время на прочтение8 мин
Количество просмотров2.2K

Обсуждая IT-образование, представители компаний часто жалуются на отсутствие у вчерашних студентов навыков работы в команде и понимания, как в принципе функционирует бизнес в этой сфере. Но мы уверены ― многое зависит  как от самого студента, так и среды, в которой он проводит время, учится. На некоторых факультетах ИТМО стажировка в магистратуре обязательна. После нее на рынок труда выходит готовый джун или мидл, зачастую с предложением о работе в той самой компании, где он стажировался. 

В этой статье мы покажем, как стажировка проходит на практике и что она приносит самим IT-компаниям. В фокусе истории двух магистрантов института прикладных компьютерных наук ИТМОФедора Золотухина и Андрея Стояна.

Читать далее
Всего голосов 10: ↑10 и ↓0+10
Комментарии0

Пример использования State и StateT

Время на прочтение4 мин
Количество просмотров3.2K

Мне встречалась фраза: "для многих знакомство с Haskell заканчивается на монадах". Монады действительно сложны для понимания, а самая непонятная, лично для меня, была монада State.

На простом примере, я хочу показать всю полезность монады State и еще большую полезность трансформера StateT.

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

«Если апатия приводит в Python, то конструктивный поиск ведёт к Rust или Go»

Время на прочтение5 мин
Количество просмотров8.5K

«Хтоническая логика Haskell, тяжеловесная мощь «плюсов» и грязная гибкость скриптовых языков наталкивают человека на экзистенциальный поиск. Если апатия приводит в Python, то конструктивный поиск в итоге ведёт к Rust или Go», — считает Игорь Нетай, специалист отдела перспективных исследований компании «Криптонит».

Читать далее
Всего голосов 18: ↑9 и ↓9+1
Комментарии14

Близится выпуск обновления Vasil для Cardano: чего ожидать

Время на прочтение7 мин
Количество просмотров1.5K

Обновление Vasil значительно улучшит производительность и возможности Cardano. За последние пару лет в сети наблюдались некоторые нововведения  – запуск NFT, появление multi-asset и возможностей смарт-контрактов в 2021 году – но Vasil - это самое значительное обновление сети с момента запуска стейкинга в эре Shelley.

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

Cardano в 2022: от недееспособной PAB до форсирования конкурентности

Время на прочтение10 мин
Количество просмотров1.9K

Cardano (ADA) входит в топ-10 криптовалют по рыночной капитализации. Cardano — много больше чем криптовалюта: это масштабируемая и экологически устойчивая блокчейн-платформа для запуска смарт-контрактов, которая работает на основе протокола консенсуса с механизмом Proof of Stake Ouroboros и разрабатывается академическим сообществом экспертов и учёных-программистов на базе исследований, основанных на фактических данных. Цель Cardano — создание полностью децентрализованного блокчейн-проекта, управляемого и финансируемого системой голосования пользователей.

Несмотря на очевидные преимущества, Cardano часто критикуют за медленный прогресс в разработке.  В 2021 году  Cardano запустили несколько обновлений, представив наконец платформу Plutus для написания смарт-контрактов, и анонсировав возможность совместимости со смарт-контрактами на основе Ethereum. Что представляют собой эти обновления, с какими проблемами мы с командой столкнулись, работая на Cardano и что предстоит предпринять, чтобы их решить — расскажу в этом материале.

Читать далее
Всего голосов 4: ↑3 и ↓1+2
Комментарии3
1
23 ...

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