Бинарная сериализация в Haskell: использование библиотеки derive

Март 4, 2011, 19:50

В рамках борьбы с велосипедизмом, я просто обязан написать про библиотеку derive. Служит она для автоматической генерации инстансов разных классов (смотрите документацию каких именно, там много). Меня эта библиотека заинтересовала, прежде всего, как генератор для Data.Binary, которая очень удобна как быстрый бинарный сериализатор над Data.ByteString.Lazy. У себя на сайте я использую Data.Binary для кеширования данных.

Derive умеет генерировать как обычный код внутри .hs файлов, так и создавать инстансы во время компиляции с помощью Template Haskell.

(далее...)

Новый движок моего блога (на Haskell)

Февраль 28, 2011, 16:03

Переписал свой блог — теперь это Haskell! Заходите вы ко мне на сайт, почитать это сообщение, а в это время, на далеком сервере, лямбда функции замыкаются и редуцируются, монады одна в другую трансформируются, санки форсятся и происходит разная другая магия.

Пока немного тезисно что, как и почему, часть тем буду в будущем разворачивать:

(далее...)

Бинарная сериализация в Haskell

Октябрь 6, 2009, 05:05

Для бинарной сериализации в Haskell существует модуль Data.Binary. Без побочных эффектов (де)сериализует в/из Data.ByteString.Lazy. Он пока не идет в поставке с GHC и его нужно руками ставить из hackage. Использовать его не просто, а очень просто:

(далее...)

Haskell в реальной жизни

Октябрь 5, 2007, 01:32

Итак! Этот долгожданный момент всё-таки наступил! Я получил свой первый опыт Haskell в коммерческом программировании!

Рассказываю как дело было:

(далее...)

Ханойские Башни

Август 10, 2007, 01:30

Давненько я ничего про Haskell не писал... Исправляюсь.

Задачу про Ханойские Башни (Towers of Hanoi) придумал французский математик Эдуард Люка в 1883 году. Существует легенда об индийском храме в котором есть большая комната с тремя алмазными столбиками на которые нанизано 64 золотых диска. И бог Брама повелел переложить диски с одного столбика на другой, и когда эта задача будет решена наш мир разрушится...

Условия головоломки: есть три столбика, на 1-й нанизана пирамида из n дисков (внизу самый большой диск, над ним чуть меньше и так далее), необходимо переместить эту пирамиду на 3-й столбик, перемещая по одному диску, при этом соблюдая условие что нельзя класть больший диск на меньший.

Это классическая задача на тему "рекурсия" и я думаю все кто хоть как-то связан с программированием её решали. Решается она очень просто:

(далее...)

Эффективные массивы в Python

Июль 23, 2007, 23:13

Возвращаясь к теме вызова нативных модулей из Python (теперь это в Linux, но в Windows принципиальных различий быть не должно).

В Python есть очень полезный модуль для работы с массивами, называется он, как не странно, array. Это не единственный модуль для работы с массивами, но он очень удобен, если необходимо обмениваться массивами с программами на C/C++ (например OpenGL текстурку скормить, или просто все тяжелые вычисления на C/C++ написать):

(далее...)

Использование dll из Python

Май 13, 2007, 14:19

Вообще использование dll из Python особой проблемой не является, для этого есть модуль ctypes, который, начиная с Python 2.5, входит в состав этого самого Python’а. Но по какой-то загадочной причине даже вездесущий Google не смог найти примера связки "своя dll" + "своя python программа", а там есть некоторые неочевидные грабли: когда "своя dll" будет подключаться к чему угодно, но Python будет рапортовать:

ValueError: Procedure called with not enough arguments (N bytes missing)  
or wrong calling convention

Или говорить, что он ваших функций в упор не видит.

Так что, как говорят буддисты, на благо всех живых существ!

(далее...)

Простые числа. Решето Эратосфена

Декабрь 13, 2006, 05:35

Это статья посвящена простым числам и эффективным способам их вычисления. Сразу скажу, что те алгоритмы, которые тут приведены, являются весьма и весьма нетривиальными и самому мне не давались довольно долго, но в итоге я их всё-таки придумал, написал и спешу поделиться со всеми вами. Исходные тексты в статье будут приведены на языках C# и Haskell.

Простое число – это натуральное число больше единицы, которое имеет ровно два делителя: единицу и само это число.

Решето Эратосфена – древний, но при этом весьма эффективный и до сих пор широко используемый алгоритм поиска всех простых чисел не превосходящих некоторого N.

Запишем подряд все числа от 2 до N. Дальше вычеркнем из этого списка все числа кратные 2, исключая саму двойку, потом вычеркнем все числа кратные 3, исключая само число 3, число 4 уже вычеркнуто, вычеркиваем числа кратные 5 и т.д. Продолжаем этот процесс, пока квадрат очередного числа не превысит N.

Самая простая программная реализация этого алгоритма выглядит следующим образом:

(далее...)
Сергей Лымарь © 2005-2011, Все права защищены. Сайт реализован на языке Haskell