57 votes

Quoi de plus performant? Haskell ou OCaml

Bon les gens, maintenant ça devient sérieux... pour moi.

J'ai passé les 18 derniers mois, à rendre la poignée de la programmation fonctionnelle, en commençant par l'apprentissage et OCaml depuis quelques semaines maintenant Haskell. Maintenant, je veux passer à l'étape suivante et de mettre en œuvre une réelle demande: Un simple temps réel à l'éditeur de terrain. J'ai écrit de nombreux temps réel le terrain des moteurs de rendu, donc c'est un sujet courant. Et le récursive algorithmes et structures de données semblent très en forme pour une fonctionnelle de la mise en œuvre.

Avec ce cours en temps réel de l'application bien sûr, je suis à la recherche pour les meilleures performances que je peux obtenir. Maintenant, certains (à mon humble avis assez ennuyeux) promoteur de OCaml, très souvent, les chiennes contre Haskell être lent par rapport à OCaml ou F#. Mais selon La Langue de l'Ordinateur de Repères Jeu Haskell souvent beats OCaml, si seulement plutôt par petites fractions - il reste encore le problème, que ce test ne prend que très spécifique des échantillons.

La bonne chose à faire serait bien sûr de mettre en œuvre le programme dans les deux langues et de comparer ensuite, mais je ne veux tout simplement pas faire un double travail.

Mais peut-être que d'autres personnes ne comparables applications en OCaml et Haskell et de donner quelques chiffres?

62voto

sclv Points 25335

Par tous les comptes, à la fois OCaml et Haskell ont suffisamment performant compilateurs et environnements d'exécution pour presque rien. La cueillette entre eux sur la base de performances pures semble ridicule à moi. Vous êtes venu ici, éloigner de la évidemment le plus bas niveau performant et langages (C, C++, etc.) au nom de la plus claire, plus concise, plus expressif, code de niveau supérieur. Pourquoi, alors que les différences de performances impliqués sont beaucoup plus petites, passer à qui les critères de maintenant?

J'irais avec certains des critères plus larges -- si vous voulez envahissants du parallélisme, puis Haskell est le meilleur choix. Si vous voulez vraiment omniprésente mutation, OCaml, c'est mieux.

Si vous souhaitez que seules les très grosses parallélisme au mieux, et vous avez l'intention de rester avec la plupart des structures fonctionnelles, puis choisissez l'une basée sur autre chose, comme la syntaxe (je pense que Haskell est beaucoup plus agréable ici, mais c'est subjectif) ou de bibliothèques (Haskell l'emporte sur la quantité, la disponibilité, mais OCaml peut-bord dans le département de graphisme néanmoins).

Je ne pense pas que vous allez faire de mal de toute façon

38voto

Norman Ramsey Points 115730

Avec l'aide de deux très intelligent collègues, j'ai écrit un flux de données-optimisation de la bibliothèque dans les deux Objective Caml et Haskell. Le Haskell version est un peu plus polymorphes, a plus au moment de la compilation de vérification de type, et a donc moins au moment de l'exécution de la vérification. La version OCaml utilise mutable état à accumuler des flux de données, de faits, qui pourrait être plus rapide ou plus lent cette semaine, selon la phase de la lune. Le fait important est que, dans leur demande, les deux bibliothèques sont si rapides qu'ils n'en valent pas la tromper avec. C'est dans les compilateurs (C Rapide-- et GHC), si peu de temps est consacré à l'optimisation des flux de données que le code n'est pas la peine de s'améliorer.

L'analyse comparative est l'enfer.

25voto

igouy Points 1662

J'ai écrit de nombreux temps réel le terrain des moteurs de rendu, donc c'est un sujet courant.

Assez familière pour savoir où la plupart de temps sera consacré?

Si oui, alors peut-être que vous pouvez écrire du code pour juste la partie dans différentes langues et de les comparer.

Mais selon La Langue de l'Ordinateur de Repères Jeu Haskell bat souvent OCaml, si seulement plutôt par petites fractions - il reste encore le problème, que ce test ne prend que très spécifique des échantillons.

Les repères de jeu des rapports de 4 séries de résultats - un seul core et quad core, 32 ou 64 bits d'Ubuntu et vous pouvez trouver que les OCaml ou Haskell indice de référence des programmes de réaliser le meilleur ou le pire selon la plate-forme.

Tous un point de repère pouvez faire est de prendre très spécifique des échantillons, et bien sûr, vous devriez ne pas tenir compte des comparaisons sur les tâches qui sont contrairement à, où la plupart du temps sera passé dans votre application - grand arithmétique des nombres entiers? regex? les chaînes? - et regardez les comparaisons qui sont les plus comme ce que vous comptez faire.

19voto

Chuck Points 138930

D'après toutes les données que j'ai vues, elles sont à peu près comparables. Le code que vous écrivez fera une plus grande différence que le langage lui-même.

19voto

Jon Harrop Points 26951

Question intéressante. Cette ensemble de la planète-terrain moteur de rendu a été l'un des derniers programmes que j'ai écrit en C++ avant j'ai migré vers OCaml. En regardant en arrière, ce programme aurait été nettement plus facile d'écrire en OCaml que C++. Haskell devrait le rendre comparable facile, mais les programmes sont généralement beaucoup plus difficile à optimiser en Haskell. En théorie, Haskell a un meilleur support pour multicores mais, dans la pratique, même les experts rarement obtenir de bons résultats en utilisant Haskell pour la programmation parallèle.

Aussi, pour les applications en temps réel vous voulez aussi le faible temps de pause du garbage collector. OCaml a une belle différentiels collector que les résultats dans quelques pauses au-dessus de 30ms, mais, autant que je me souvienne, GHC a un cessez-le-monde collecteur qui engage arbitrairement longues pauses.

Je suppose que vous êtes sous Linux ou F# serait un bien meilleur choix que OCaml ou Haskell.

EDIT: Si vous voulez étudier la fusillade alors assurez-vous de lire le code source. Vous pouvez également trouver les Haskell pages wiki à ce sujet intéressant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X