Nonobstant les langages non gérés, F # est-il vraiment meilleur que C # pour implémenter les mathématiques? Et si c'est le cas, pourquoi?
Réponses
Trop de publicités?Je pense que la plupart des points importants ont été déjà mentionné par quelqu'un d'autre:
- F# vous permet de résoudre les problèmes d'une manière mathématiciens pensent d'eux
- Grâce à des fonctions d'ordre supérieur, vous pouvez utiliser plus simple des concepts pour résoudre des problèmes difficiles
- Tout est immuable par défaut, ce qui rend le programme plus facile à comprendre (et aussi plus facile à paralléliser)
Il est certainement vrai que vous pouvez utiliser certaines des F# concepts en C# 3.0, mais il y a des limites. Vous ne pouvez pas utiliser toute récursive calculs (parce que le C# n'a pas de queue-de récursivité) et c'est la façon dont vous écrivez primitive calculs fonctionnelle/méthode mathématique. Aussi, l'écriture complexe des fonctions d'ordre supérieur (que de prendre d'autres fonctions comme arguments) en C# est difficile, parce que vous avez à écrire types explicitement (alors qu'en F#, les types sont déduits, mais également automatiquement généralisée, de sorte que vous n'avez pas à faire explicitement une fonction générique).
Aussi, je pense que le point suivant de Marc Gravel n'est pas une objection valable:
À partir d'un entretien angle, je suis d'avis que bien nommé propriétés etc sont plus faciles à utiliser (plus complète du cycle de vie) que les tuples de la tête et de la queue listes, mais c'est peut-être juste moi.
C'est bien vrai. Cependant, la grande chose à propos de F#, c'est que vous pouvez commencer à écrire le programme à l'aide des n-uplets & head/tail listes et plus tard dans le processus de développement de la transformer en un programme qui utilise .NET IEnumerables et avec des types de propriétés (et c'est ainsi que je crois typique F# programmeur œuvres*). Les Tuples etc. et F# interactifs, des outils de développement vous donner une excellente façon de prototyper rapidement des solutions (et quand on fait quelque chose de mathématique, c'est essentiel car la plupart du développement, c'est l'expérimentation lorsque vous êtes à la recherche de la meilleure solution). Une fois que vous avez le prototype, vous pouvez utiliser simple code source de transformations pour placer le code inisde un F# type (qui peut également être utilisée en C# comme une classe ordinaire). F# vous donne également un grand nombre de façons d'optimiser le code plus tard en termes de performances.
Cela vous donne les avantages de facile à utiliser les langues (par exemple en Python), qui beaucoup de gens utilisent pour la phase de prototypage. Cependant, vous n'avez pas à réécrire l'ensemble du programme, plus tard, une fois que vous avez terminé avec le prototypage utilisation efficace de la langue (par exemple, C++ ou peut-être C#), car F# est à la fois "facile à utiliser" et "efficace" et vous pouvez parfaitement alterner entre ces deux styles.
(*) J'utilise également ce style dans ma programmation fonctionnelle livre.
F# a beaucoup d'énormes avantages sur C# dans le cadre de programmes de mathématiques:
F# de séances interactives vous permettent d'exécuter du code à la volée afin d'obtenir des résultats immédiatement et même de les visualiser, sans avoir à construire et exécuter une application complète.
F# prend en charge certaines fonctionnalités qui peuvent fournir massive des améliorations de performances dans le contexte des mathématiques. Plus particulièrement, la combinaison de l'
inline
et les fonctions d'ordre supérieur permettent mathématique du code élégamment compte, sans nuire à la performance. C# ne peut pas l'exprimer.F# prend en charge certaines fonctionnalités qui rendent possible la mise en œuvre des concepts mathématiques beaucoup plus naturellement que ce qui peut être obtenu en C#. Par exemple, la queue appelle le rendre beaucoup plus facile à mettre en œuvre des relations de récurrence de manière simple et fiable. C# ne peut pas exprimer ce soit.
Problèmes mathématiques nécessitent souvent l'utilisation de plus sophistiqué des structures de données et algorithmes. Exprimant compliqué solutions est nettement plus facile avec F# par rapport à C#.
Si vous souhaitez une étude de cas, j'ai converti une mise en œuvre de la décomposition QR de plus de System.Double
de 2kLOC de C#. F# a seulement 100 lignes de code, fonctionne pendant 10× plus rapide et généralisée sur le type de numéro de sorte qu'il ne fonctionne pas seulement sur float32
, float
et System.Numerics.Complex
, mais peut même être appliquée à la symbolique des matrices pour obtenir des résultats symboliques!
FWIW, j' écris des livres sur ce sujet ainsi que des logiciels commerciaux.
F # prend en charge les unités de mesure , ce qui peut être très utile pour le travail en mathématiques.
Je suis de mathématiques de fond, et ont regardé F#, mais je préfère quand C# pour la plupart des besoins. Il ya un couple de choses que F# rend plus facile, mais en général je préfère encore C# par une grande marge.
Certains des vanté F# avantages (immutabilité, fonctions d'ordre supérieur, etc) peut encore être fait en C# (à l'aide de délégués etc pour le second). Cela est encore plus évident lors de l'utilisation de C# 3.0, avec le soutien de lambda, ce qui le rend très facile et expressive de déclarer le code fonctionnel.
À partir d'un entretien angle, je suis d'avis que bien nommé propriétés etc sont plus faciles à utiliser (plus complète du cycle de vie) que les tuples de la tête et de la queue listes, mais c'est peut-être juste moi.
L'un des domaines où C# permet de lui-même vers le bas pour les maths, c'est dans les génériques et leur soutien pour les opérateurs. J'ai donc passer un peu de temps d'aborder cette question ;-p Mes résultats sont disponibles dans MiscUtil, avec aperçu ici.
Ce post ressemble, il peut être pertinent: http://fsharpnews.blogspot.com/2007/05/ffts-again.html
Aussi: http://stackoverflow.com/questions/144227/c-f-performance-comparison
Le plus grand avantage pour les pures mathématiques est ce que PerpetualCoder dit, F# ressemble plus à un problème de maths, donc ça va être plus facile pour un mathématicien à écrire. Il m'a rappelé beaucoup de MATLAB quand je l'ai regardé.