37 votes

Développement web : Haskell ou Scheme

J'aimerais choisir l'un de ces langages pour créer des applications Web. Je ne suis pas intéressé par le framework en tant que tel, mais j'ai les besoins suivants :

  • Développement rapide.
  • Facile à mettre à l'échelle.
  • Une communauté forte pour le web.
  • Rapide et facile à déployer.

Je suis très familier avec Haskell, et j'ai une certaine familiarité avec scheme (en particulier PLT). Scheme me semble être un bon candidat pour le développement web en raison de sa syntaxe simple et homogène dans toutes les bibliothèques. Je dis cela malgré mon opinion subjective selon laquelle Haskell est un langage plus "propre".

Les applications web Haskell semblent nécessiter l'apprentissage et la construction d'un patchwork de différentes bibliothèques de combinateurs. D'un autre côté, je me rends compte que cela peut être très expressif, même si je préférerais éliminer les désaccords d'impédance lorsque cela est possible.

Alors que scheme-plt semble bien adapté, je ne peux trouver qu'un seul exemple de son utilisation dans le "monde réel". Haskell ne semble pas s'en sortir beaucoup mieux, mais il semble y avoir une plus grande communauté derrière le côté web.

Aidez-moi à me décider. Pour l'essentiel, je suis intéressé par les cas d'utilisation réels.

55voto

Jay McCarthy Points 876

(Note : Nous avons renommé "PLT Scheme" en "Racket" ; je l'appellerai ainsi).

"Développement rapide".

Je trouve Racket excellent pour le développement rapide. Si vous suivez le Continuer le tutoriel sur l'utilisation de Racket pour le Web, je pense que vous le ferez aussi. Vous pouvez commencer à prototyper votre application sans jamais enregistrer un fichier, il est facile d'intégrer les nombreux paquets disponibles sur le site de Racket. PLaneT et les macros suppriment la nécessité d'écrire plusieurs fois un texte passe-partout.

"Facile à mettre à l'échelle."

J'ai fait beaucoup de recherches sur la mise à l'échelle des applications Web écrites en Racket. Les applications Web Racket peuvent utiliser des continuations avec état (enregistrées dans la RAM du serveur) ou sans état (enregistrées dans un format sérialisable et stockées par les utilisateurs ou les bases de données/etc) ou toute combinaison des deux. Un bref résumé de ces distinctions est décrit dans le document documentation . Pour chaque régime, il existe un assortiment de moyens de traiter la question de l'échelle, tels que les systèmes à états. politiques de gestion de la continuité y bourrelets apatrides .

J'ai beaucoup réfléchi pour que les valeurs par défaut soient bien adaptées, mais aussi suffisamment faciles à modifier en fonction de votre situation.

Sur le front moins spécifique du Web, nous disposons d'un support natif pour les bases de données évolutives à la mode, telles que MongoDB y memcached .

"Une communauté forte pour le web".

En dehors de l'utilisation de nos logiciels dans l'enseignement, il semble que nous soyons le plus souvent déployés sur le Web. Si vous parcourez PLaneT vous verrez une prépondérance de bibliothèques liées au Web. Je ne suis pas sûr d'une autre métrique pour vous.

"Rapide et facile à déployer".

Je pense que le point sur le développement rapide va dans ce sens. Si vous avez d'autres questions relatives au déploiement, je serai heureux d'y répondre.

"Je ne peux trouver qu'un seul exemple de son utilisation dans le 'monde réel'."

Les gars de Untyped ont quelques produits qui l'utilisent. J'ai écrit deux sites commerciaux et au moins quatre autres sites communautaires de taille raisonnable. Nous connaissons une douzaine d'entrepreneurs qui construisent des applications en l'utilisant. J'ai parlé à quelques jeunes entreprises qui l'utilisent également. Il est inutile de prétendre que nous sommes aussi courants que Python ou Ruby, etc., mais nous ne sommes pas non plus purement académiques ou théoriques.

Si vous avez d'autres questions, n'hésitez pas à m'envoyer un courriel directement ou à utiliser la liste de diffusion, afin que d'autres membres de notre communauté puissent plus facilement profiter de la discussion. Bon piratage !

44voto

Don Stewart Points 94361

On dirait que vous voulez que les gens défendent les différents langages et chaînes d'outils à votre place. Eh bien, voici ce que je sais de Haskell : il y a beaucoup de gens, d'outils et d'expérience pour vous aider :

Je pense qu'il n'y a pas de choix, vraiment.

15voto

Norman Ramsey Points 115730

Bien que j'adore les arguments détaillés de Don Stewart en faveur de Haskell, j'ai l'impression que Haskell souffre d'un embarras de richesses : il y a simplement trop d'options parmi lesquelles choisir, trop de paquets sur Hackage (de qualité très variable), et je ne saurais pas par où commencer. Alors qu'avec PLT Scheme, je pense qu'il est facile de savoir par où commencer : vous prenez tout ce que Shriram Krishnamurti et Jay McCarthy ont fait et vous vous appuyez dessus.

Avertissement : J'ai écrit des milliers de lignes de Haskell, dont certaines sont déployées. Je n'ai écrit que de petits programmes Scheme. Peut-être qu'étant à l'extérieur, j'ai une vision plus rose des applications web PLT Scheme que ce qui est réellement justifié. Mais bien que j'adore Haskell et la plateforme Haskell, je n'aurais vraiment aucune idée de par où commencer avec une application web - je devrais faire des recherches sur cette liste de diffusion et sur tous les autres sujets dont parle Don. Je trouverais cela assez intimidant pour commencer.

3voto

Andrew Points 783

Scheme semble bien adapté au web en raison de trois caractéristiques : XML en tant qu'expressions s, les continuations de première classe et un REPL interactif. Ces caractéristiques permettent de créer des frameworks comme Blackhole pour Gambit Scheme.

Je cherchais un remplacement pour Java et RoR et j'ai fini par trouver cette solution. Gambit est très performant mais, comme la plupart des schémas, il est essentiellement monofilaire et tout s'arrête lorsque l'on fait appel à du code C. Afin de contourner ce problème, j'ai écrit une bibliothèque MySQL en Scheme pur afin que les appels de base de données ne bloquent pas les threads internes de Gambit. Ensuite, j'ai eu le même problème avec SSL et j'ai vite réalisé que je ne pourrais pas écrire toutes les bibliothèques dont j'aurais besoin. Le problème ici est qu'il y a probablement trop d'implémentations de Scheme et pas assez de personnes qui les utilisent.

À ce moment-là, j'ai décidé d'apprendre Haskell, car il semblait être le seul langage fonctionnel à supporter les multiprocesseurs et à offrir d'excellentes performances. Il a l'avantage de n'avoir qu'une seule implémentation (GHC) et d'avoir une base d'utilisateurs importante et très utile - mais vous le savez déjà !

J'ai utilisé Snap sur un projet de prototypage et, bien qu'il soit de bas niveau et relativement nouveau, il possède de très bonnes fonctionnalités telles que la bibliothèque de modèles Heist très flexible et, mieux encore, la recompilation dynamique lorsque vous modifiez quelque chose. La recompilation correspond à peu près à l'avantage REPL de Scheme. BlazeBuilder se rapproche de l'expressivité XML de s-exp et il y a un exemple de bibliothèque de session de continuations dans mysnapsession - donc on y arrive IMHO.

Pour être honnête, je n'ai pas étudié en profondeur le PLT, car les performances semblaient être un problème, par rapport à Gambit, et il semblait avoir beaucoup d'extensions non standard de Scheme dont je me méfiais.

1voto

gcbenison Points 4253

Une chose que j'apprécie dans Scheme pour la programmation web est la correspondance directe entre le HTML et sa représentation sérialisée dans Scheme. Par exemple, la page HTML suivante :

<html>
  <head>
    <title>sxml simple / CGI example</title>
  </head>
  <body>
    <form method="post" action="tabulate.cgi">
      <table>
    <tr>
      <td>Name</td>
      <td><input type="text" name="username"/></td>
    </tr>
    <tr>
      <td>City</td>
      <td><input type="text" name="city"/></td>
    </tr>
    <tr>
      <td>Favorite Pro Wrestler</td>
      <td><input type="text" name="favorite_wrestler"/></td>
    </tr>
      </table>
      <input type="submit"/>
    </form>
  </body>
</html>

peut être converti en utilisant un appel de fonction à sa représentation Scheme ci-dessous, et vice versa :

(*TOP*
 (*PI* xml
       "version=\"1.0\"")
 (html (head (title "sxml simple / CGI example"))
       (body (form (@ (method
               "post")
              (action
               "tabulate.cgi"))
           (table (tr (td "Name")
                  (td (input (@ (type "text")
                        (name "username")))))
              (tr (td "City")
                  (td (input (@ (type "text")
                        (name "city")))))
              (tr (td "Favorite Pro Wrestler")
                  (td (input (@ (type "text")
                        (name "favorite_wrestler"))))))
           (input (@ (type "submit")))))))

La représentation schématique de la page a les propriétés souhaitables : 1) elle est lisible par l'homme (avec de l'entraînement), 2) elle est lisible par la machine - elle peut être comprise telle quelle par n'importe quel interpréteur Scheme, sans nécessiter de bibliothèques 3) elle s'adapte facilement aux structures de données Scheme en mémoire, qui peuvent être manipulées et 4) elle peut être rendue trivialement en 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