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

Haskell *

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

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

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

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

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

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

Новости

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

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

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

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

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

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

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

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

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

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

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

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

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

Истории

Функциональный Rijndael

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

Rijndael (авторы Vincent Rijmen, Joan Daemen) - алгоритм, признанный стандартом шифрования в 2001 году, ныне называемый AES (Advanced Encryption Standard).

Материалов про AES много, и я сразу выделю отличие этой статьи от других:

• приведена реализация шифра в функциональной парадигме;

• рассматривается полная версия Rijndael с 9 вариациями длин блока и ключа, а не урезанный AES до 3 вариаций;

• реализовано шифрование файлов;

• я старался объяснить математическую составляющую для неподготовленного читателя так, чтобы была понятна философия, смыслы и образы происходящего, а не мелкие технические детали;

• использоваться будет Haskell, однако для читателя знание этого языка не требуется, поскольку все конструкции будут пояснены.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Немного о bfc


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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн

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

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

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

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

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

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

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

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

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

Спящий гигант, или Почему Cardano продолжает и выигрывает

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

Cardano и Ethereum — блокчейны, у которых схожие возможности и они неизбежно подвергаются сравнению друг с другом. Постепенно расстановка сил меняется, и о  Cardano всё чаще говорят как об «убийце Ethereum». Разбираемся в особенностях технологии Cardano, смотрим, есть ли основания для слухов и рассказываем, почему Cardano может стать мощнее, быстрее и доступнее, чем Ethereum или Bitcoin.

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

Telegram-бот мониторинга состояния серверов на Haskell

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

Привет, Хабр! Состояние сервера необходимо постоянно мониторить, чтобы в случае ошибки быстро ее исправить. Удобнее всего отслеживать работоспособность с помощью смартфона, а именно Telegram-бота, он позволяет осуществлять проверку на ходу. Реализуем Telegram-бот на функциональном языке Haskell, заодно разберемся в его преимуществах.  

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

Почему именно Cardano?

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

В июне 2022 года меня пригласили выступить с докладом о Cardano на криптовалютной конференции UTXO в Праге. Я думал о том, что буду рассказывать людям, и выбрал историю проекта и его миссию.

В 2014 году Чарльз Хоскинсон покинул Ethereum и совместно с Джереми Вудом учредил проект Cardano. Тогда же были созданы три независимые организации: Input Output Hong Kong (позже Input Output Global), Cardano Foundation и Emurgo.

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

Читать далее
Всего голосов 15: ↑7 и ↓8 -1
Комментарии 4

Применение обобщённой свёртки для обработки синтаксических деревьев

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

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

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

Пример Haskell GUI с фреймворком Monomer

Время на прочтение 9 мин
Количество просмотров 4.5K
Haskell уже имеет несколько достаточно полных средств для создания GUI. Но только некоторые из них являются кросплатформенными и часто требуют знания графической библиотеки, которая находится в основании. Особняком здесь стоит графический фреймворк Monomer. Ему присуща высокая степень абстракции над графикой и при этом, относительная легкость в использования (pure Haskell подход). Имеет хорошую документацию и примеры.
Читать дальше →
Всего голосов 23: ↑23 и ↓0 +23
Комментарии 2

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