91 votes

Data.Text vs String

Alors que l'opinion générale des Haskell communauté semble être qu'il est toujours préférable d'utiliser Text au lieu de String, le fait que toujours les Api de plus, maintien de bibliothèques sont String-orienté confond l'enfer hors de moi. D'autre part, il y a des projets importants, qui considèrent String comme une erreur purement et simplement et de fournir un Prelude avec toutes les instances de l' String-les fonctions sont remplacées par leur Text-homologues.

Donc il y a aucune raisons pour que les personnes à continuer à écrire String-Api orientée à l'exception de l'arrière - standard et Prélude-la compatibilité et le "switch-faire de l'inaction"? Sont là, éventuellement, d'autres inconvénients Text par rapport à l' String?

En particulier, je suis intéressé par ce parce que je suis de la conception d'une bibliothèque et d'essayer de décider quel type à utiliser pour exprimer des messages d'erreur.

35voto

kqr Points 6147

Mon non qualifiés conjecture est que la plupart des écrivains ne voulez pas ajouter plus de dépendances que nécessaire. Depuis les chaînes font partie de littéralement chaque Haskell distribution (cela fait partie de la norme du langage!), il est beaucoup plus facile à obtenir adoptée si vous utilisez des chaînes et ne nécessitent pas de vos utilisateurs de faire le tri de Texte distributions de hackage.

C'est un de ces "erreurs de conception" que vous avez juste à vivre avec, sauf si vous pouvez convaincre la majorité de la communauté pour passer la nuit. Il suffit de regarder combien de temps il a pris pour obtenir des Applicatifs d'être une super-classe de la Monade – un relativement mineur, mais beaucoup voulaient un changement – et imaginez combien de temps il faudrait pour remplacer toute la Chaîne de choses avec le Texte.


Pour répondre à votre question plus spécifique: je voudrais aller avec de la Ficelle, à moins d'obtenir sensiblement les performances des avantages en utilisant le Texte. Les messages d'erreur sont en général plutôt petites choses de sorte qu'il ne devrait pas être un gros problème pour utiliser des chaînes de caractères.

D'autre part, si vous êtes le genre de l'idéologie puriste qui évite le pragmatisme de l'idéalisme, aller avec le Texte.


* J'ai mis des erreurs de conception dans guillemets parce que les chaînes de caractères comme une liste de caractères est une superbe propriété qui les rend faciles à comprendre et à intégrer avec d'autres à la liste de fonctions.

25voto

Alain O'Dea Points 6587

Si votre API est destinée au traitement de grandes quantités de caractère orienté de données et/ou les différents codages, votre API doit utiliser du Texte.

Si votre API est principalement pour traiter les petits one-off des chaînes ASCII, puis en utilisant le haut- Chaîne type doit être fine.

À l'aide de la Chaîne de grandes quantités de texte fera applications à l'aide de votre API consommer beaucoup plus de mémoire. En l'utilisant avec l'étranger codages pourrait sérieusement compliquer l'utilisation selon la façon dont votre API travaille.

La chaîne est assez cher (5N mots où N est le nombre de caractères dans la Chaîne). Un mot est le même nombre de bits que l'architecture du processeur (ex. 32 bits ou 64 bits): http://blog.johantibell.com/2011/06/memory-footprints-of-some-common-data.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X