2010-04-15 4 views
0

J'ai donc un algorithme de traitement d'image sympa. Je l'ai écrit en OCaml. Il fonctionne bien. Je peux maintenant le compiler en tant que code C avec une telle commande ocamlc -output-obj -o foo.c foo.ml (J'ai une situation où je ne suis pas autorisé à utiliser le compilateur OCaml pour mon programme pour mon arcetecture, je ne peux utiliser que gcc spécialement modifié, donc je compilerai ce programme avec quelque chose comme gcc -L/usr/lib/ocaml foo.c -lcamlrun -lm -lncurses et Itll fonctionnera sur mon archétecture.)un programme écrit en C peut-il être plus rapide qu'un écrit en OCaml et traduit en C?

Je veux savoir dans un cas général un programme écrit en C peut-il être plus rapide que celui écrit en OCaml et traduit en C?

+0

Je pense que vous voulez demander l'inverse: un programme écrit en C peut-il être plus rapide que celui écrit en OCaml et traduit en C? De toute évidence, un programme écrit en C peut être exécuté "aussi vite" que celui écrit en OCaml et traduit en C ... –

+2

Il est également supposé ici que la capacité du codeur à écrire du bon code performant dans les deux langues est identique (Je suppose qu'un OCaml bien traduit/traduit en C peut être beaucoup plus rapide qu'un échantillon C mal écrit/mal conçu, et inversement la qualité de la traduction est un facteur inconnu; ce pourrait être vraiment excellent; ça pourrait être diabolique. –

+2

-output-obj de OCaml ne produit pas de fichier C. Il produit un fichier objet pouvant être lié avec des fichiers C. Le code en cours d'exécution est toujours exactement le même bytecode (pour ocamlc) ou natif (pour ocamlopt) lorsque cette option est utilisée, et en fait, en l'absence de OCaml -> C traducteur de toute sorte, votre question est purement théorique à cette temps et pour l'avenir prévisible. –

Répondre

5

Oui. Mais toutes les généralisations à propos de telles questions ne sont que des généralisations, et vous (et d'autres ici) pourrez trouver des contre-exemples.

Bien sûr, cette réponse est elle-même une généralisation.

4

La performance n'est généralement pas une question de langage, mais des algorithmes utilisés pour résoudre les problèmes. Pour tout problème, il existe une absurdillion différents algorithmes pour le résoudre, avec des complexités différentes dans le temps et l'espace. Donc vous pouvez avoir une solution avec O (n) en langage ultra-lent A et une solution avec O (n^2) en langage ultra-rapide B. Il y aura un certain seuil n_t pour n. A sera plus lent que B pour n < n_t, mais plus rapide pour n> n_t.

Même lors de la mise en œuvre du même algorithme, il existe une autre absurdillion différentes façons de le faire, affectant le facteur constant de la complexité. Ainsi, la réponse à votre question, comme déjà donnée, est définitivement oui, mais cela n'aide pas parce que la question elle-même est tout à fait inutile.

+0

+1 pour le terme "absurdillion" :) – Yttrill