Bibliothèque de sérialisation d'objets hautes performances prenant en charge les types de somme
-
28-10-2019 - |
Question
Je me demande si l'une des bibliothèques de sérialisation hautes performances (comme les tampons de protocole Google) prend en charge les types de somme .
Les types de somme sont des unions étiquetées, essentiellement la possibilité de dire que quelque chose est A, B ou C. Les types de somme sont utilisés dans des langages tels que Haskell et ML qui prennent en charge Types de données algébriques
La solution
Si par "comme les tampons de protocole Google" vous entendez la capacité de générer du code pour plusieurs langues, alors une telle chose n'existe probablement pas.Émuler des types de somme dans des langages qui ne les prennent pas en charge est au mieux gênant (essayez de faire correspondre le modèle sur boost: variant par exemple).Il est donc logique de les laisser de côté si la cible principale est les langues traditionnelles.
Si vous vous contentez d'utiliser uniquement haskell / ocaml / quoi que ce soit, il y a beaucoup de choix.Pour haskell, il existe des céréales , binaire , safecopy et probablement d'autres.Il existe un projet piqi pour ocaml.
Autres conseils
Je ne connais aucun système pratique prenant en charge les types de somme autres que Piqi (j'en suis l'auteur).Piqi est compatible avec les tampons de protocole et prend en charge nativement OCaml et Erlang.L'absence de types de somme dans les tampons de protocole était l'une des raisons pour lesquelles je l'ai créé.
Mon plan est d'étendre Piqi pour prendre en charge d'autres langues telles que Haskell, Clojure, etc.
Y a-t-il besoin d'un format "haute performance"?De nombreux formats à usage général devraient être capables d'utiliser simplement des constructions existantes - en particulier, Maps / hashtables, pour prendre en charge les unions (incluez simplement une entrée avec une clé qui indique le type de valeur réelle). Alors peut-être que vous pourriez simplement utiliser une convention simple pour utiliser, par exemple, JSON, pour transférer un tel contenu.