Высокопроизводительная библиотека сериализации объектов, поддерживающая типы сумм - PullRequest
7 голосов
/ 21 февраля 2012

Интересно, поддерживает ли какая-либо из высокопроизводительных библиотек сериализации (например, буферов протокола Google) типы сумм .

Типы сумм - это теговые объединения, в основном способность сказать, что что-то либоA, B или C. Типы суммы используются в таких языках, как Haskell и ML, которые поддерживают алгебраические типы данных

Ответы [ 3 ]

2 голосов
/ 21 февраля 2012

Мне не известны какие-либо практические системы, которые поддерживают типы сумм, кроме Piqi (я автор).Piqi совместим с буфером протокола и изначально поддерживает OCaml и Erlang.Отсутствие типов сумм в протокольных буферах было одной из причин, по которой я его создал.

Я планирую расширить Piqi для поддержки других языков, таких как Haskell, Clojure и т. Д.

2 голосов
/ 21 февраля 2012

Если под «подобными буферам протокола Google» вы подразумеваете способность генерировать код для нескольких языков, то, вероятно, такой вещи не существует.Эмулировать типы сумм в языках, которые их не поддерживают, в лучшем случае неудобно (попробуйте сопоставить паттерны при форсировании: например, вариант).Так что имеет смысл оставить их, если основной целью являются основные языки.

Если вы удовлетворены использованием только haskell / ocaml / независимо от выбора.Для haskell существуют злаки , бинарные , safecopy и, возможно, другие.Существует piqi проект для ocaml.

0 голосов
/ 27 февраля 2012

Нужен ли «высокопроизводительный» формат? Многие форматы общего назначения должны иметь возможность просто использовать существующие конструкции - в частности, карты / хеш-таблицы, для поддержки объединений (просто включите запись с ключом, который указывает тип фактического значения). Поэтому, возможно, вы могли бы просто использовать простое соглашение, например, для использования JSON для передачи такого контента.

...