Support different de/serialization strategies
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 25/100
- Type d'issue
- Fonctionnalité
- Clarté
- À clarifier
- Activité
- À l'abandon
- Stack technique
- haskell
- Domaine
- distributed-systems
Piste de recherche
Commencez par lire l’abstraction Process actuelle et le point d’entrée send afin de comprendre comment la sérialisation basée sur Binary est câblée. Comparez cette API avec la stratégie Serialize proposée et avec MimeRender/MimeUnrender de Servant ; le travail serait terminé lorsque l’abstraction ferait l’objet d’un accord et que les types et exemples concernés seraient mis à jour sans casser les programmes indépendants de la sérialisation.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Currently, all messages are de/serialized via the Binary instance.
This is an implementation detail; there is strict required beyond the existence of two functions, encode :: a -> ByteString and decode :: ByteString -> Either String a. However, discussions in the DataHaskell group have raised the point that serialization for data science structures (e.g. dataframes) could be made more efficient by leveraging Parquet over the wire.
I'm thinking of an extension of the current Process monad, to support also a de/serialization strategy. This is strongly inspired by Servant's MimeRender and MimeUnrender classes. Consider:
newtype Process strategy a = Process ... -- Monad is unchanged, type has a new `strategy`
class Serialize strategy a where
encode :: Proxy strategy -> a -> ByteString
decode :: Proxy strategy -> ByteString -> Either String a
An example for JSON would be:
import Data.Aeson
data JSON
class (ToJSON a, FromJSON a) => Serialize JSON a where
encode _ = encode
decode _ = eitherDecodeStrict
Then, for the actual message sending e.g. via send, the type would become:
send :: Serialize strategy a => ProcessId -> a -> Process strategy ()
Then, programs that are agnostic of serialization are of type Process strategy a (instead of Process a), while programs which require a specific serialization method, such as JSON, will be of type Process JSON a.
- Langage dominant
- Haskell
- Étoiles
- 753
- Forks
- 101
- Merge moyen
- 1 j 3 h
- PR mergées (30 j)
- 4
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Aucun modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de haskell-distributed/distributed-process
-
enhancement Feature Request
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 25/100
haskell-distributed/distributed-process#486 · 1 commentaire · 1 réaction ·
-
enhancement Feature Request
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 15/100
haskell-distributed/distributed-process#476 · 2 réactions ·
-
Demonstrating the use of Cloud Haskell for a Raft implementationPeut-être à nouveau libre @LaurentRDC l’a pris il y a 483 jours, et aucune pull request n’est ouverte. Ouverteenhancement Feature Request
haskell-distributed/distributed-process#475 · 3 réactions · 1 personne assignée ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 20/100
haskell-distributed/distributed-process#473 · 4 commentaires · 1 réaction ·
-
enhancement network-transport-tcp newcomer
Difficulté 3/5 1-2 jours Accessibilité débutants 25/100
Toutes les issues de haskell-distributed/distributed-process
Issues similaires
-
MorphRule, DataizeRule and ContextualizeRule silently accept unknown YAML keys, unlike rewrite `Rule`Peut-être pris @renyamamoto2026-cmyk l’a pris il y a 1 jour. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
objectionary/phino#2107 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
tweag/tricorder#640 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour