Lisp est quand même à part : il est dynamique. Considère-le comme l'équivalent fonctionnel des langages de script Ruby/Perl/Python.
Oui.
C'est moins contraignant, puisque tu peux mélanger les paradigmes. Mais en gros, ML et Haskell peuvent servir pour les mêmes besoins, c'est une question de gout (je n'ai jamais utilisé Haskell sur un gros projet, je laisse quelqu'un d'autre en parler).
C'est ce que je disais plus haut pour le C++ : tu peux souvent imiter des fonctionnalités, mais en perdant beaucoup d'avantages (notamment, clarté et concision). Je pourrais aussi répondre que je peux imiter beaucoup de spécificités de C# avec F#, en tapant 2 fois moins de code et en aillant plus de sûreté (cf réponse de Jean-Marc).
En gros :
- inférence de type (C# n'en fait que le dixième)
- types somme
- pattern matching
- évaluation paresseuse
- définition d'opérateurs, syntaxe basée sur l'indentation
- méta-programmation. Par exemple, Linq n'est qu'un cas particulier d'un mécanisme bien plus générique de F# (il est/sera donc possible de générer d'autres langages que du SQL avec cette technique).
- active patterns
- compréhensions de listes, de séquences
- expressions monadiques
- classes anonymes, méthodes d'extension (ok, C# l'a déjà piqué)
Mais surtout, F# est fonctionnel. Là où C# te recommande fortement l'impératif, F# t'incite à utiliser du fonctionnel. C'est surtout la philosophie du langage qui est différente. C# est basé sur la notion d'instructions (une méthode est une liste d'instructions), alors F# est conçu sur le concept d'expressions (une fonction est une expression). S'il y a besoin que je détaille des points, ou si tu veux comparer C# et F#, on peut le faire dans un autre thread.
Partager