109 votes

La partie de Real World Haskell est maintenant obsolète ou considéré comme une mauvaise pratique?

Il suffit de lire Real World Haskell, dans le chapitre 19, Erreur de Manipulation, un grand nombre d'exemples maintenant échouer en raison du changement de Contrôle.Exception à la règle.

Qui me fait penser que peut-être certaines choses dans ce livre est en fait obsolète et pas la peine de les étudier, après tout, cela fait 6 ans. Ma seule autre référence est d' Apprendre que Vous avez un Haskell Pour le Grand Bien, même si c'est un grand livre, c'est beaucoup plus simple en comparaison avec RWH.

Quelqu'un peut-il qui ont lu le livre avant, veuillez donner quelques conseils sur la partie qui n'est plus d'actualité? En particulier les chapitres de la deuxième moitié du livre, par exemple, le logiciel de la mémoire transactionnelle, la programmation simultanée, programmation socket, etc.

142voto

Zeta Points 34033

Principal problème de la GEPLUIE

Elle est ancienne. CEP a été écrit à un moment la version 6.8 de GHC a été utilisé. 6.8 utilisé la base de la version 3.0.x.x. 6.10.1 déjà utilisé 4.0.0.0, qui a introduit de nombreux changements. Et ce n'est que le saut de 6.8 à 6.10. La version actuelle de GHC est de 7,8, et la prochaine 7.10 va changer les monades de manière significative (voir ci-dessous).

Cela étant dit, il est toujours une ressource utile pour les lignes directrices générales. Mais gardez à l'esprit que certaines bibliothèques, changé depuis sa sortie.

Remarques générales

  • Lire les commentaires. Ils contiennent généralement des informations si l'alinéa/de l'article est toujours d'actualité et/ou de travail.
  • Lire la documentation des bibliothèques de fonctions que vous souhaitez utiliser. Même si vous êtes paresseux, vous en connaissez au moins les types.

Remarques sur les chapitres

C'est juste un rapide aperçu de certaines des choses que j'ai remarqué lors de la lecture de la GEPLUIE. C'est sans doute incomplète.

Chapitre 14. Les Monades & Chapitre 15. La programmation avec des monades

Code de rupture: Applicative m => Monad m

Bientôt, Applicative va devenir une super-classe de Monad, ce qui n'était pas prévu en 2007.

Dans GHC 7.10, Applicative va devenir une super-classe de Monad, ce qui peut potentiellement rendre beaucoup de code d'utilisateur. Pour faciliter cette transition, GHC génère désormais des avertissements lorsque les définitions de conflit avec l'Applicatif-Monade Proposition (AMP).

Voir 7.8.1 notes de version.

L' State/Writer/Reader monades

Dans la Volonté de l'état réel de l'errance de se lever? l'article, les auteurs affirment

Afin de définir un Monad de l'instance, il nous faut fournir un bon constructeur de type ainsi que des définitions pour (>>=) et return. Cela nous conduit à la vraie définition de l' State.

-- file: ch14/State.hs
newtype State s a = State
    runState :: s -> (a, s)
}

Ce n'est pas vrai plus, depuis State et ses amis sont maintenant mis en œuvre par

type State  s = StateT  s Identity
type Writer w = WriterT w Identity
type Reader r = ReaderT r Identity

Ils sont donc définis par leur monade transformateur.

Chapitre 19. Erreur de manipulation

Erreur de manipulation a complètement changé à partir de 6.8 à 6.10, mais vous l'avez remarqué que déjà. Mieux de lire la documentation.

Chapitre 22. Exemple: Client Web Programmation

Certains de l'exemple semble être rompu. Il existe également d'autres HTTP bibliothèques disponibles.

Chapitre 25. Le profilage et l'optimisation

Générale des techniques de profilage sont toujours les mêmes, et l'exemple (voir ci-dessous) est un cas d'étude pour les problèmes qui peuvent se produire dans votre programme. Mais RWH est manquant multi-thread de profilage, par exemple via ThreadScope. Aussi, paresseux IO n'est pas concerné pendant tout le livre, autant que je sache.

mean :: [Double] -> Double
mean xs = sum xs / fromIntegral (length xs)

Chapitre 24 & Chapitre 28 (Simultanées et de la programmation parallèle et STM)

Alors Que Le Chapitre 24. Concurrent et la programmation multicœur et le Chapitre 28. Logiciel de la mémoire transactionnelle sont toujours d'actualité, Simon Marlow le livre de la Programmation Parallèle et Concurrente en Haskell se concentre uniquement sur la simultanées et de la programmation parallèle et est assez récente (2013). La programmation sur GPU et repa sont complètement absentes dans RWH.

Chapitre 26. Avancé de la conception de la bibliothèque: la construction d'un filtre de Bloom

Comme avec les autres chapitres, les orientations générales de la bibliothèque de conception est toujours bien écrit et pertinent. Toutefois, en raison de certains changements (?) concernant l' ST, le résultat ne peut pas être compilé plus.

Chapitre 27. La programmation réseau

C'est encore pour la plupart jusqu'à ce jour. Après tout, la programmation réseau ne change pas si facilement. Toutefois, le code utilise obsolète fonctions bindSocket et sClose, qui devrait être remplacé par bind et close (de préférence via le qualifiée d'importation). Gardez à l'esprit que c'est de très bas niveau, vous pouvez utiliser un plus spécialisée de haut niveau de la bibliothèque.

Le contenu manquant

Certains sujets ne sont pas abordés dans la GEPLUIE à tous. Cela inclut streaming bibliothèques telles que tuyaux et de conduits, et aussi des lentilles.

Il existe plusieurs ressources pour ces sujets, mais voici quelques liens vers des introductions pour vous donner une idée de ce qu'ils sont sur la. Aussi, si vous souhaitez utiliser des vecteurs, l'utilisation de l' vectors package.

Lentilles

Streaming bibliothèques

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