La programmation fonctionnelle est-elle pertinente pour le développement Web? [fermé]


88

J'ai vu tellement de choses récemment sur la programmation fonctionnelle et Clojure semble particulièrement intéressant. Bien que je `` comprenne '' la description de base de ce que c'est, je ne peux pas comprendre comment je l'utiliserais au quotidien en tant que développeur Web, si je le peux. Une grande partie de ce que j'ai lu se concentre sur le côté mathématique de la programmation fonctionnelle plutôt que sur des situations de programmation typiques trouvées dans OO régulier.

Ai-je le mauvais bout du bâton? La programmation fonctionnelle est-elle totalement indépendante du développement Web? Sinon, existe-t-il des exemples d'utilisation «pour le Web»?

Réponses:


31

Quelques exemples du haut de ma tête:

  • Yahoo! Le magasin est alimenté par Lisp (initialement nommé Viaweb avant l'acquisition)
  • Reddit a été entièrement prototypé en Lisp, bien qu'ils soient passés à Python en 2005
  • Hacker News est entièrement écrit en Arc (un dialecte Lisp)

7
Yahoo! Store a été réécrit en C ++ il y a quelques années.
apg

5
language! = paradigme de programmation.
phkahler

58
Choix étrange d'exemples ... Yahoo! Store a été écrit par Paul Graham, qui est un grand défenseur de Lisp. Il a également écrit Hacker News, qui est, en fait, un clone de Reddit. Vraisemblablement, HN a été quelque peu écrit en réponse au passage de Reddit de Lisp à Python alors que les gars de Reddit faisaient partie de YCombinator: un programme d'accélération géré par Paul Graham. Je compterais ceci comme UN exemple, pas trois.
Brandon Bloom

La configuration du serveur @ShermPendley, la configuration du réseau et l'accès à la base de données sont également des facteurs majeurs de performances. Les temps d'exécution des scripts des applications Web ne représentent généralement qu'une infime partie du coût global.
AgmLauncher

62

La programmation fonctionnelle correspond très bien aux applications Web. L'application Web reçoit une requête HTTP et produit un résultat HTML. Cela pourrait être considéré comme une fonction des requêtes aux pages.

Comparez avec les applications de bureau, où nous avons généralement un processus de longue durée, une interface utilisateur avec état et un flux de données dans plusieurs directions. Ceci est plus adapté à OO qui se préoccupe des objets avec passage d'état et de message.


20

Je ne vois pas pourquoi - tant que vous fournissez du HTML conforme aux normes aux navigateurs, ils ne se soucient pas de ce que vous avez utilisé pour le produire, qu'il s'agisse d'un langage fonctionnel, d'un langage impératif ou de singes formés.


20

La programmation fonctionnelle pure peut ne pas être parfaitement adaptée à l'environnement de programmation Web. Mais le principal obstacle est simplement le manque d'infrastructure (frameworks et API). Il faudra longtemps (probablement jamais, honnêtement) avant qu'un langage fonctionnel ne dispose d'un environnement de programmation Web aussi riche que Java, Python ou Ruby.

Cela dit, il existe quelques options.

Je n'ai aucune expérience avec aucun de ceux-ci. Peut-être que les commentateurs peuvent nous dire ce qui a bien fonctionné pour eux.



4

Pour Clojure, il existe une startup intéressante (TheDeadline) qui s'est développée à l'aide de Clojure et de Google App Engine. Ils ont un bon ppt sur Slideshare et une interview sur InfoQ.

Pour une bonne discussion sur le déploiement de Clojure avec GAE: http://news.ycombinator.com/item?id=1239788

Autant que je sache, Clojure a quelques bibliothèques de développement Web. Anneau de Compojure Conjure

J'espère que cela répond à certaines de vos questions =) (Je ne fais que commencer aussi ..)

Meilleur, Ryan


3

Ce n'est pas totalement sans rapport avec le développement Web. L'application située sur le serveur peut très bien tirer parti de fonctionnalités fonctionnelles telles que les fermetures, les fonctions d'ordre supérieur, l'immuabilité, la transparence référentielle ... par exemple, vous avez certainement des collections que vous devez transformer ou manipuler de quelque manière que ce soit. La programmation fonctionnelle aide ici, et c'est pour une raison que ses idiomes pénètrent dans les langages traditionnels. Les fonctionnalités fonctionnelles contribuent à la concision, à la testabilité, à la parallélisation et peuvent également fournir des solutions natives aux problèmes que vous auriez autrement résolus avec des modèles.

Mise à jour: il existe également des frameworks Web pour les langages fonctionnels. Weblocks pour Common Lisp, Lift pour Scala. Ce sont ceux dont j'ai entendu parler, il pourrait y en avoir plus ... mais vous ne devez pas nécessairement être purement fonctionnel - par exemple, Scala n'est pas pur et devrait fonctionner avec n'importe quel framework Java, vous pourrez toujours d'utiliser la programmation fonctionnelle pour la couche métier, etc.


3

Découvrez Ur / Web . C'est très rapide et son système de type statique connaît des choses comme HTML et SQL, ce qui lui permet de garantir toutes sortes de choses intéressantes sur la sécurité.


3

Erlang semble être beaucoup utilisé dans certaines des infrastructures pour les applications Web évolutives. les bases de données CouchDB et Riak sont écrites principalement en Erlang, tout comme le serveur de file d'attente de messages RabbitMQ. L'une des clés de son succès est qu'il gère la concurrence via la transmission de messages, sans état mutable partagé. C'est cette façon de penser les problèmes qui est utile, plus que n'importe quel langage de programmation fonctionnel particulier.

Ou regardez MapReduce. C'est une façon très fonctionnelle de regarder le calcul, même si votre carte et vos fonctions de réduction se trouvent être dotées d'un état interne - et pour cette raison, c'est un très bon choix pour interroger de grands ensembles de données de manière distribuée et tolérante aux pannes.

Par tous les moyens, optez pour ce qui vous semble le plus pratique. Mais gardez toujours la programmation fonctionnelle dans le fond de votre esprit, car vous ne savez jamais quand cela pourrait être utile.



2

La langue et le paradigme n'ont pas d'importance pour les applications Web, ils sont tous également bons et mauvais. Si vous cherchez une raison d'apprendre un nouveau paradigme, plongez-vous. Mon conseil serait d'analyser le problème que vous essayez de résoudre et de sélectionner l'ensemble d'outils approprié.


2

Javascript (le langage de la partie FE du Web et de plus en plus le BE) n'est pas fonctionnel en soi mais les fonctions sont fonctionnelles de premier ordre


2

Nous venons de lancer une feuille de calcul en ligne où le backend est entièrement écrit en Erlang.

http://hypernumbers.com

Selon toutes les normes, c'est l'une des applications Web les plus complexes que vous puissiez créer avec une interface graphique gigantesque avec une complexité mentale.


2

Voici une expérience de développeur Web dans la création d'applications Web à l'aide de Haskell . Bien que les langages fonctionnels soient très sûrs et aient une bonne simultanéité, ils manquaient toujours du meilleur des API de la race, car il est le chouchou du monde universitaire depuis longtemps et qu'il n'a pas encore été fortement adopté dans le monde réel. J'espère que ce n'est pas trop loin. Erlang y était déjà entré.


1

La raison pour laquelle la programmation fonctionnelle est populaire avec la programmation Web est qu'elle explique l'état partagé et changeant et permet au programmeur d'exprimer les parties purement fonctionnelles comme des fonctions pures. Les fonctions pures ont l'avantage d'être très simples à exécuter en parallèle - car elles n'ont aucun effet secondaire.

Du moins c'est ma raison.


1

Une autre réponse courte: http://www.mlstate.com - une plate-forme de développement Web complète, basée sur FP. La sémantique propre du langage permet toutes sortes d'analyses automatisées de sûreté et de sécurité, d'optimisations, etc.

Attention: j'y travaille.


1

Les langages fonctionnels peuvent ne pas être directement utiles pour créer de grandes applications, mais nous utilisons fortement le paradigme de programmation fonctionnelle pour créer nos applications. La programmation fonctionnelle pure met la contrainte de "pas d'effets secondaires". Cela garantit que les appels fonctionnels purs donneront le même résultat dans quel que soit l'ordre dans lequel ils sont appelés. Ce n'est pas idéal pour le développement Web, mais si la programmation fonctionnelle est combinée à un système de changement d'état, une application Web robuste peut être créée. Jetez un œil à mon article pour plus de détails: FAST Server Aussi ces diapositives .


0

Oui, comme la programmation fonctionnelle peut être effectuée dans n'importe quel langage, vous pouvez l'utiliser en tant que développeur Web au quotidien.

Devrais-tu? cela dépend du problème que vous résolvez. La programmation fonctionnelle est un paradigme de programmation et où vous devriez l'utiliser dépend du problème que vous résolvez.

Pour simplifier la décision, demandez-vous s'il est plus facile de résoudre un problème en utilisant les concepts de POO, où l'encapsulation, le polymorphisme, l'héritage comme des fonctionnalités peuvent vous faciliter la vie?

Si oui, n'y allez pas pour la programmation fonctionnelle et utilisez simplement les POO. Si votre application doit effectuer des calculs / calculs / logique métier complexes et impliquer un traitement fortement simultané, la programmation fonctionnelle peut offrir de nombreux outils et avantages dans de tels cas.

Ce ne sont que des styles différents de construction de la structure et des éléments des programmes, il s'agit donc d'utiliser le bon outil pour le bon job.rest tout peut être fait en utilisant n'importe quoi.

Programmation fonctionnelle en développement web:

JavaScript prend en charge la programmation fonctionnelle et il est très utile lorsque nous sommes dans le contexte du développement Web.React Framework est fortement influencé par les principes de programmation fonctionnelle et utilisé dans de nombreuses applications Web.

En outre, vous pouvez trouver de nombreuses applications Web créées et exécutées avec des frameworks développés sur les langages de programmation fonctionnels répertoriés ci-dessous:

• WebSharper (F #)

• Snap (Haskell)

• Ascenseur (Scala)

• Ocsigen (OCaml)

• Chicago Boss, Zotonic (erLang)

J'espère donc ma réponse aidera n'importe qui.


-2

Vous ne l'utiliserez probablement pas et ne devriez pas l'utiliser mais quand vous dites que quelqu'un trouvera toujours une exception à la règle (Viaweb, etc.). Fondamentalement, il n'y a pas de «super langage», il n'y a que des lignes de code de travail, généralement dans «Blub». Même Paul Graham dit que le principal avantage (en fait seulement) d'un Lisp est sa capacité à prototyper rapidement.

De plus, les "super langages" empiètent généralement plutôt qu'ils n'augmentent la lisibilité du code, ce qui signifie que le "génie" qui l'a écrit doit le maintenir pour toujours puisque personne d'autre ne peut le comprendre, d'autant plus qu'il est susceptible de l'écrire dans son propre dialecte modifié. Cela diminue la portée possible de tout projet, ce qui signifie que même si de nouvelles choses innovantes peuvent être faites, elles ne sont pas extensibles et restent donc à une échelle relativement petite (comme Hacker News dans Arc).

Cela ne veut pas dire que quelqu'un ne peut pas avoir une idée de génie et la mettre en œuvre dans un style incompréhensible qui peut ensuite être réécrit dans Blub et étendu pour que beaucoup de gens puissent en profiter. En fait, c'est exactement ce qui s'est passé dans toutes les histoires à succès de Lisp, sans parler de tous les philosophe célèbres qui ont jamais vécu. Mais bien sûr, si vous êtes un "génie", vous pourrez peut-être également prototyper votre produit d'une autre manière.

Quant à FP sur la JVM, il y a des choses limitées mais sympas possibles. Bien que je ne l'utilise personnellement que pour le prototypage, il est possible que vous ayez un cas d'utilisation (généralement quelque chose à voir avec le multi-threading) où il apporte une amélioration.


1
En fait, Paul Graham dit que le gros avantage de Lisps est qu'il s'agit du langage "le plus puissant" disponible. Il soutient son argument en disant que quelque chose comme un quart de viaweb (par lignes) était des macros Lisp. La méta-programmation dans la plupart des langages (en particulier ceux disponibles au milieu des années 90) est difficile. Ce n'est pas un prototype s'il est poussé vers le serveur de production.
nmichaels
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.