2017-06-05 4 views
1

Je regardais dans Hana et j'ai été surpris de voir qu'il a un concept d'un type (un "conteneur de types" de sorte, quelque chose comme un tuple un élément sans valeur réelle), mais types (une séquence de type) est une caractéristique expérimentale.Pourquoi boost :: hana :: experimental :: types est-il une fonctionnalité expérimentale? ce qui est difficile à propos d'une liste de types?

Est-ce que quelqu'un sait pourquoi? Qu'est-ce qui est compliqué dans une liste de types par opposition à un conteneur d'un seul type?

+1

Quelle est la pertinence pratique du sous-espace 'experimental'? – Walter

+1

@Walter s'il vous plaît faites une nouvelle question au lieu de poser des questions comme commentaires à d'autres questions sans rapport. –

+0

Dans tous les cas, @ Walter's est une question facile: du manuel d'utilisation: "Ce répertoire contient des fonctionnalités expérimentales qui peuvent ou non entrer dans la bibliothèque à un moment donné, mais qui ont été jugées suffisamment utiles pour être mises à la disposition du public. Les fonctionnalités de ce sous-répertoire résident dans l'espace de noms hana :: experimental, mais elles ne doivent pas non plus être stables, elles peuvent être déplacées, renommées, modifiées ou supprimées entre les versions de la bibliothèque. feature documente les dépendances supplémentaires requises, le cas échéant. " – blue

Répondre

3

La réponse est essentiellement ce que Jason a dit:

Je voudrais voir les types comme hana::Sequence mais il ne passerait pas les lois qu'il ne tiendra aucune sorte de valeur (comme les valeurs avec état d'exécution).

Le « problème » est qu'un hana::types ne pouvait pas être fait une hana::Sequence, parce qu'un hana::Sequence est censé être en mesure de tenir les choses arbitraires, non seulement les types. Bien que cela puisse ne pas sembler un gros problème, il l'est réellement. Par exemple, nous ne serions pas non plus en mesure de satisfaire hana::Monad, puisque cela nécessite hana::flatten, dont la signature est M<M<T>> -> M<T> pour un hana::MonadM arbitraire. Puisque hana::types ne peut contenir que des types, vous ne pouvez pas avoir par exemple. hana::types<hana::types<int, char>, hana::types<float, long>> sans spécial-boîtier le tout. Quelle que soit la solution, j'aimerais trouver une solution qui ne brise pas l'intégrité conceptuelle de Hana, tout en permettant une liste de types plus efficace au moment de la compilation.

+0

Merci d'avoir répondu et mis tant d'effort mental pour obtenir les choses droites et élégantes. Je vais prendre mon temps digérer la réponse :) – blue

+0

Merci. C'est agréable quand les choses sont élégantes, mais c'est encore mieux quand elles sont élégantes et qu'elles nous permettent de faire tout ce que nous voulons. Il y a encore du travail à faire ici, clairement. –