2009-10-01 3 views
5

J'ai une idée pour un service web, mais je suis très nouveau dans la programmation web. Django a l'air génial et aime quelque chose que je peux ramasser rapidement. J'ai beaucoup d'expérience dans Haskell (et très peu en python) et j'aimerais pouvoir commencer à écrire quelques-unes des choses non liées au web dans ma langue préférée. Mais bien sûr, je ne veux pas faire ça si le code haskell ne sera pas utilisable si je pars avec django. J'ai regardé plusieurs frameworks web haskell: hApps semble trop compliqué et non documenté, turbinado semble approchable mais n'est pas documenté, etc. Et je pense utiliser un framework largement utilisé comme django, et avoir accès à beaucoup de code que je peux simplement brancher m'aidera beaucoup. Mais je suis très ouvert à entendre parler d'autres idées sur les cadres à utiliser, ou d'autres options que je dois utiliser Haskell d'une manière ou d'une autre.Puis-je écrire des composants dans Haskell à utiliser sur un site Django?

Répondre

4

Cela dépend de ce que vous entendez par "service Web". Si vous parlez d'une application Web/site Web typique, vous aurez besoin d'une interface facile pour une base de données, de la génération HTML, de la gestion HTTP facile, des sessions et de la gestion des formulaires. Vous avez vraiment besoin d'un cadre web décent pour cela.

Il n'y a pas de 'bons' frameworks web pour Haskell. (En faisant ce jugement, j'inclus des facteurs comme la documentation, la communauté, la probabilité-que-ce-ne-sera-pas-abandonné-dans-une-année-pour-un-nouveau-shinier-approche etc.).

Si vous voulez dire quelque chose de beaucoup moins "webby" par ex. un service qui renvoie des données cartographiques, et qui n'a pas besoin de la plupart de ces fonctionnalités, vous pourriez obtenir quelque chose comme Hack ou même Network.CGI pour vous fournir l'interface HTTP de base, sur laquelle vous construiriez votre service, fonctionnant avec CGI/FastCGI. Si vous avez également besoin d'un site web dynamique, vous pouvez utiliser quelque chose comme Django pour ce petit bout de temps.

Vous pouvez également écrire des exécutables Haskell autonomes appelés à partir du code Django. Mais Python direct < -> Haskell interop est peu susceptible d'être possible/pratique.

+2

"Python <-> Haskell interop est peu susceptible d'être possible/pratique." - Il est certainement possible et pratique d'appeler Python depuis Haskell - et utile si vous avez besoin d'une bibliothèque. Voir la liaison de hpaste2 aux pygments. –

+0

Vous pourriez trouver cela surprenant, mais toutes les applications web ne sont pas "remplir un formulaire (et montrer des messages d'erreur de validation) et mettre le résultat dans une base de données SQL". – jrockway

+0

@dons: Je pense que l'affiche originale parlait d'appeler Haskell de Python. Mais je n'étais pas au courant de tout Python <-> Haskell interop, je suis corrigé :-) @ ockrockway: d'accord - c'est pourquoi j'ai dit une application/site web "typique". – spookylukey

1

Apprenez Python, vous trouverez qu'il a de nombreuses fonctionnalités. C'est facile à prendre et très agréable.

Bon choix avec Django.

+1

Quelles sont les fonctionnalités non fonctionnelles de python? Autre que antigravité (http://xkcd.com/353) bien sûr. –

+1

@Dominic: La possibilité de muter des objets. La possibilité de relier des variables. Support limité pour les fonctions lambda (c'est un gros). Manque de support pour la composition et l'application partielle des fonctions. – Chuck

3

Si vous créez simplement un service Web, vous pouvez écrire des programmes cgi ou fastcgi dans Haskell pour gérer les appels de service Web.

+0

Est-ce une méthode qui fonctionnera avec django, ou une alternative? J'ai une certaine compréhension de CGI en dehors de django, mais je ne sais pas encore vraiment comment django/CGI fonctionnent ensemble. – jberryman

+0

@jberryman: Je ne sais pas comment Django fonctionne avec CGI, mais si vous êtes en train d'écrire un service web, je ne suis pas sûr que Django soit le bon outil pour ce travail. Comme le dit Spookylukey, si vous voulez dire une application Web standard, c'est quelque chose de différent de ce dont je parle. Si vous voulez simplement fournir des URL qui renvoient des données, je pense que vous ne devriez pas utiliser Django du tout. – Amok

1

Allez pour F # et découvrez NDjango - qui est un port Django écrit en F #. Informations complètes: NDjango est mon projet www.ndjango.com

+0

C'est une proposition intéressante, mais beaucoup de gens ne sont pas si chauds sur les langues MS. – Chuck

0

Si vous voulez que Haskell communique directement avec la base de données, vous devrez modifier le script de migration de la base de données Django pour qu'il émette également le code du modèle Haskell en utilisant une bibliothèque comme Yesod's Persistent.

Questions connexes