Question

1) Les langages fonctionnels sont-ils adaptés au développement d'applications Web?

2) Les langages fonctionnels sont-ils adaptés aux entreprises / ERP / Type d'applications ?

Était-ce utile?

La solution

Les langages fonctionnels du type que vous décrivez sont des langages de programmation à usage général, ils sont utilisés pour toutes sortes de choses, y compris les applications Web et les applications professionnelles. (J'utilise Haskell).

Comme gabor l’implique, il s’agit en définitive de bibliothèques. Scala a un framework web: ascenseur. Haskell a happstack , ainsi que 2100 4400 (dans 2010 2012) sur Hackage pour toutes sortes de remarques.

Ce n’est vraiment pas tant une question de langage que de chaîne d’outils lorsqu’on considère des domaines spécialisés particuliers.

Autres conseils

Les langages fonctionnels conviennent à tout ce pour quoi vous voulez les utiliser.

Cependant, développer des applications de nos jours n'est pas aussi simple que d'utiliser un langage de programmation. L’avantage de Java, C #, etc., c’est qu’ils sont livrés avec de grandes bibliothèques et d’autres subtilités d’environnement indispensables à la création de logiciels de gestion. La plupart des langages fonctionnels n'ont pas ce support (pour l'instant?).

F # est peut-être prometteur car il se trouve dans l’environnement .NET et peut tirer parti des outils disponibles (corrigez-moi si je me trompe).

Cet article décrit la manière dont Lisp, l'un des premiers langages fonctionnels, a été utilisé pour créer une application avec succès.

Les langages fonctionnels sont bien adaptés au développement d’applications Web, en particulier Scala.

Consultez le cadre Lift pour plus d'informations.

  

2) Les langages fonctionnels sont-ils adaptés aux applications de type métier / ERP / CRM?

Pour aborder le deuxième point concernant les applications d'entreprise / ERP / CRM: personnellement, je ne les implémenterais pas dans une application "pure". langage fonctionnel comme Haskell, ou un langage fonctionnel dynamique comme Clojure. Par contre, je suis en train de mettre en œuvre un ERP à Scala, qui est bien entendu hybride POO / FP et compilé de manière statique.

La raison pour laquelle je dis cela est qu’une application professionnelle telle qu'un ERP est fondamentalement orientée vers les enregistrements: il existe un schéma de données exprimant les différents types d’enregistrements et la logique de l’application est alors conçue presque entièrement autour du traitement CRUD de ces enregistrements et de l’application de flux de travail personnalisés. pour eux. Et, fondamentalement, je ne crois pas que ces sortes d’applications d’entreprise centrées sur les données conviennent parfaitement au modèle fonctionnel.

Les gens peuvent parler de l'inadéquation relationnelle POO à leur guise, mais au final, la POO et les bases de données sont orientées sur l'enregistrement: un langage POO avec un bon ORM vous permet de mapper ces différents modèles de données dans votre code, puis d'attacher le code à gérer. chacun des modèles. Et avoir ce type statiquement typé (idéalement avec un ORM fortement typé comme le squeryl de Scala) réduit massivement les chances d'une erreur d'exécution ou par ex. une modification de l'un des modèles de données non correctement appliquée par le code.

Ne vous méprenez pas, je suis un grand fan de FP (je programme de plus en plus ma programmation système en Haskell), mais pour moi l'approche de la POO axée sur l'enregistrement a plus de sens que la fonction. approche ciblée de la PF pour la gestion des objets de données d’un ERP professionnel ou similaire. (Scala est une belle exception à la règle car vous devez utiliser le paradigme de la programmation orientée objet avec des ORM de qualité pour la manipulation des enregistrements, mais également pour le logiciel FP pour la programmation générale de vos applications.)

  1. Oui, Nitrogen est un bon exemple de framework Web fonctionnel. Il évolue aussi.

http://nitrogenproject.com/

Yaws est un fantastique serveur Web pour Erlang.

Bien que je ne dirais pas que certains langages fonctionnels sont conçus pour le développement Web, je ne dirais pas non plus que vous ne pouvez pas faire de développement Web avec un langage fonctionnel. Je pense que cela dépend entièrement des infrastructures Web disponibles pour la langue choisie et de l'existence ou non de serveurs Web compatibles avec cette langue.

Par exemple, je suis sûr que vous pouvez utiliser F # avec ASP.Net sur IIS pour effectuer du développement Web. Je doute que F # prenne en charge le moteur de création de modèles, mais vous pouvez certainement écrire une logique métier en F #.

De même, il existe mod_haskell pour Apache, ce qui devrait rendre relativement facile la sortie dynamique avec haskell. Bien que je ne l'utilise jamais personnellement. En même temps, s’il existe un mod_ (erlang ou scala) pour Apache, ce serait tout aussi facile pour ces langues.

En définitive, je pense que la nature sans état des langages fonctionnels devrait le rendre bien adapté à un cadre web de style MVC sans état. Cependant, je pense que cela dépend vraiment des outils et des cadres disponibles pour vous faciliter la vie lorsque vous travaillez avec ces langues. Par exemple, Ruby n’était pas vraiment populaire pour le développement Web jusqu’à ce que les rails le devienne, et je n’aimais pas vraiment faire du Web avec Python avant de trouver django.

Les langages fonctionnels fournissent de nouveaux types d’abstractions pouvant être utilisées pour le développement Web. Les serveurs Web basés sur la continuation sont par exemple populaires parmi les langages fonctionnels. Le serveur Web PLT Scheme prend en charge ce type de développement d'applications Web. Vous pouvez en savoir plus sur les continuations et leur utilisation dans le développement Web sur wikipedia

La plupart des langages fonctionnels, à savoir ceux que vous avez inclus, sont considérés comme des langages à usage général. Pour le développement Web, je réfléchirais profondément à l’utilisation de Clojure ou Scala. Ils ont tous les deux de très bons frameworks web, et ils fonctionnent tous les deux sur la JVM. Je peux totalement recommander Clojure et Scala, mais pas tant que ça pour les autres.

Haskell dispose d’un framework Web, mais je ne l’ai jamais utilisé.

Applications professionnelles? Bien sûr, pourquoi pas. Les langages fonctionnels sont parfaits pour à peu près tout.

L’un des plus grands avantages déclarés par les promoteurs des langages fonctionnels est qu’ils facilitent l’écriture de programmes pouvant être exécutés en parallèle. Mais les applications Web n’ont généralement pas de problèmes de parallélisme. En règle générale, le serveur Web / serveur d'applications gère un pool de threads et chaque demande d'utilisateur est affectée à un thread différent, qui peut s'exécuter sur un processeur physique différent. Ainsi, vous pouvez tirer parti de plusieurs processeurs sans trop de problèmes. L'astuce est que les applications Web se caractérisent par un grand nombre de petites requêtes et que les threads et les langages impératifs y fonctionnent bien. Les langages impératifs commencent à s'effondrer lorsque vous avez un petit nombre de requêtes coûteuses en calculs.

Un autre grand avantage des langages fonctionnels est que, les fonctions n’ayant aucun effet secondaire, les tests sont plus faciles. Vous testez chaque fonction séparément sur plusieurs de ses entrées et vous savez que le système fonctionnera. Mais, il y a un piège. Si votre opération implique une entrée ou une sortie, vous utilisez une monade plutôt qu'une fonction et vous perdez cet avantage de testabilité pour cette partie de votre code.

Toutefois, les applications Web impliquent généralement la lecture des informations d'une demande, l'envoi de demandes à une base de données, la lecture de la réponse à partir de la base de données et le formatage d'une réponse. C’est beaucoup, beaucoup d’IO ou de monades et très peu d’opportunités pour des fonctions.

Étant donné ces caractéristiques des applications Web, quels avantages les langages fonctionnels apportent-ils à la programmation d'applications Web?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top