С ее помощью вы можете сериализовать и десериализовать следующие типы данных:
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!
Комментариев нет:
Отправить комментарий