четверг, 21 октября 2010 г.

scheme-bert – библиотека сериализации BERT для R6RS Scheme

Выпущена библиотека сериализации/десериализации BERT для реализаций языка программирования Scheme, соответствующих стандарту R6RS.

С ее помощью вы можете сериализовать и десериализовать следующие типы данных:

  • flonum?
  • integer?
  • symbol?
  • list?
  • string?
  • vector?
  • boolean?
  • hashtable?
  • time?
а также 'nil (в различных реализациях Scheme представлен по-разному, например, пустым списком '()) в двоичный формат BERT (Binary ERlang Term), разработанный Томом Престон-Вернером изначально для сервиса GitHub, одним из создателей которого он является.

Небольшой пример кода:

> (define (bytes)
(bert-encode (list 'foo 13 42 (vector 666 '() 'bar))))
> (bytes)
#"\203l\0\0\0\4d\0\3fooa\ra*h\3b\0\0\2\232jd\0\3barj"
> (bert-decode (bytes))
{foo 13 42 #(666 () bar)}
>


Как видно, сериализации подвергались данные, которым в Erlang аналогичен следующий терм:

[foo, 13, 42, {666, [], bar}].


Работа кода протестирована на Racket 5.0 и Chez Scheme 8.0. Другие реализации Scheme, поддерживающие стандарт R6RS, не проверялись, однако работоспособность в основном зависит только от степени соответствия стандарту (Ikarus Scheme весьма близок к нему).

Поддержка регулярных выражений (пока) не реализована, поскольку мне не удалось найти такой библиотеки для работы с ними, которая была бы максимально портируемой, а также поддерживала возможность получения исходной строки скомпилированного регулярного выражения и опций, при которых оно было скомпилировано. Возможно, что-то сдвинется в этом отношении для Irregex, еще одной библиотеки регулярных выражений для Scheme, которая была бы неплохим вариантом для интеграции в сериализатор.

Спецификация BERT расположена тут – http://bert-rpc.org/
Библиотека сериализации размещена здесь – http://bitbucket.org/yasir/scheme-bert

Ваши патчи и отзывы приветствуются. Как форкнуть проект, выслать патч, сделать pull request, и прочие вещи, читайте в разделе помощи Bitbucket.

Regards, Yasir Arsanukaev.

UPD. Ура, проект теперь входит в экосистему BERT, он добавлен в список на сайте BERT!

Комментариев нет:

Отправить комментарий