Андрей Власовских

Блог Андрея Власовских

Мой новый зимний блог

leave a comment »

Друзья, поздравляю вас с началом календарной зимы!

Внимание: C декабря 2009 я начинаю вести блог на другом сайте — http://vlan.tumblr.com/. Пока что кажется, что Tumblr.com удобнее WordPress.com. Переезд моего блога пока временный: будем считать, что на зиму, а там посмотрим. Прошу вас подписаться на ленту новостей нового блога!

Реклама

Written by vlan

2009-12-01 at 03:28

Опубликовано в Uncategorized

Tagged with ,

Пакеты Python: distutils или setuptools

6 комментариев

Недавно в обсуждении одного бага funcparserlib всплыла тема установки пакетов Python. Раньше я пользовался модулем setuptools и частично связанной с ним утилитой easy_install. Однако из-за проблем с ним я решил попробовать использовать модуль distutils, идущий в поставке Python и являющийся официальным способом установки пакетов Python.

Есть разные претензии к setuptools (см. посты в блогах Brett Cannon и James Bennett), Здесь я кратко скажу о моих собственных. Во-первых, setuptools не создаёт промежуточные каталоги при setup.py install. Во-вторых, интерпретатор Python при старте сканирует слишком много файлов и каталогов. Возможно, это связано с форматом пакетов eggs модуля setuptools, хотя может и нет. Наконец, setuptools привносит дополнительную сложность по сравнению с distutils, а пользы от него — только в более простой установке скриптов, команде setup.py develop и описании зависимостей.

Все эти вещи можно сделать и без setuptools. Скрипты можно ставить обычным копированием с помощью distutils. Команду develop можно заменить созданием символьной ссылки из каталога в PYTHONPATH на каталог разработки.  В плане зависимостей интересна утилита pip, но пока что easy_install кажется удобнее.

Written by vlan

2009-10-06 at 16:33

Опубликовано в Uncategorized

Tagged with , , , ,

Непрерывная сборка с inotify-tools

3 комментария

Из этого поста узнал о программе inotify-tools. Теперь порой использую утилиту inotifywait для постоянной сборки моего проекта при изменении каких-нибудь его файлов. Например, вот небольшой скрипт, позволяющий видеть отрендеренную версию статьи всё время при её редактировании:

#!/bin/sh

while true; do
    inotifywait -e MOVE_SELF,MODIFY,CLOSE_WRITE ../wiki/*.md img/*
    sleep 1
    make --quiet
done

Очень удобная штука!

Вопрос: насколько правильно при каждом сохранении выполнять анализ корректности программы/статьи? Можно смотреть на это так. Либо это заставляет больше стараться, чтобы при каждом сохранении иметь синтаксически корректную программу, либо добавляет ответственности при написании кода и упорядочивает мысли.

Written by vlan

2009-09-20 at 18:37

Опубликовано в Uncategorized

Tagged with , ,

Курс по языкам программирования осенью 2009

4 комментария

В осеннем семестре 2009 я читаю лекции по языкам программирования на кафедре АиВТ в Политехе. На странице курса я буду выкладывать слайды и другие материалы по курсу. За обновлениями можно следить через блог курса.

Written by vlan

2009-09-04 at 12:56

Опубликовано в Uncategorized

Tagged with ,

Функциональные комбинаторы парсеров в Python

4 комментария

С некоторого времени я стал делать на Python часть моих повседневных задач по анализу языков, трансляторам и пр. Вначале для вспомогательных целей, а потом и для парсинга небольших языков, прототипирования грамматик, деревьев AST, трансформаций кода. Многие при этом подумают про OCaml, но в Unix-среде (привет spb-archlinux!) от Python с его библиотеками пользы больше.

Для задач парсинга я написал библиотеку funcparserlib. Эта библиотека предназначена для создания парсеров по методу рекурсивного спуска на основе функциональных комбинаторов. Также я написал вводное руководство по funcparserlib (на английском), которое будет интересно всем, увлекающимся функциональным программированием (FP) и/или языком Python. Рекомендую его почитать!

Вот, например, такие картинки деревьев можно легко получать с помощью funcparserlib:

>>> print dotparser.pretty_parse_tree(tree)
Graph [id=g1, strict=False, type=digraph]
`-- stmts
    |-- Edge
    |   |-- nodes
    |   |   |-- n1
    |   |   |-- n2
    |   |   `-- SubGraph [id=n3]
    |   |       `-- stmts
    |   |           |-- Edge
    |   |           |   |-- nodes
    |   |           |   |   |-- nn1
    |   |           |   |   |-- nn2
    |   |           |   |   `-- nn3
    |   |           |   `-- attrs
    |   |           `-- Edge
    |   |               |-- nodes
    |   |               |   |-- nn3
    |   |               |   `-- nn1
    |   |               `-- attrs
    |   `-- attrs
    `-- Edge
        |-- nodes
        |   |-- SubGraph [id=n3]
        |   |   `-- stmts
        |   `-- n1
        `-- attrs

Итак, предлагаю взглянуть на руководство, а питонистам — попробовать funcparserlib, посмотреть другие доки и примеры на сайте библиотеки.

Дальше идут особенности funcparserlib, сравнение с pyparsing и LEPL, история библиотеки…

Written by vlan

2009-07-28 at 21:38

Опубликовано в Uncategorized

Tagged with , , ,

Монады в OCaml

leave a comment »

В блогах уже есть, конечно, рассказы о монадах в OCaml, например, A Monad Tutorial for OCaml и Syntax Extension for Monads in OCaml. Однако меня интересовало воссоздание соответствующих классов типов Haskell при помощи параметрических модулей (вот пост про соответствие между ними).

Вот «иерархия» модулей, расширяющих функтор до монады. Полезные комментарии к соответствующим классам Haskell есть в статье The Typeclassopedia из The Monad.Reader.

module type FunctorType =
sig
  type 'a t
  val map : ('a -> 'b) -> 'a t -> 'b t
end

module type PointedType =
sig
  include FunctorType
  val pure : 'a -> 'a t
end

module type ApplicativeType =
sig
  include PointedType
  val (<*>) : ('a -> 'b) t -> 'a t -> 'b t
end

module type MonadType =
sig
  include ApplicativeType
  val join : 'a t t -> 'a t
  val (>>=) : 'a t -> ('a -> 'b t) -> 'b t
  val (>>) : 'a t -> 'b t -> 'b t
end

Здесь уже видно, что не всё получается как в Haskell. Сигнатуры модулей не позволяют привести значение терма по умолчанию.

Upd: Выложил полный исходник с примерами в pastebin.

Дальше пример с монадой Maybe…

Written by vlan

2009-07-13 at 22:17

Опубликовано в Uncategorized

Tagged with , , , ,

Команда spb-archlinux на ICFPC 2009

13 комментариев

Никак не возьму в привычку чаще писать в блог. Но на этот раз повод действительно есть. Наша команда spb-archlinux принимала участие в программерском конкурсе ICFP Contest 2009 :)

Ниже рассказ об этом. Если вкратце, было весело! :)

Upd: В финальной таблице результатов мы заняли 95 место с 1826 очками.

Читать далее…

Written by vlan

2009-07-02 at 01:41

Опубликовано в Uncategorized

Tagged with , , , , , ,