IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Caml Discussion :

[debutant] quelle implémentation utiliser?


Sujet :

Caml

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 69
    Par défaut [debutant] quelle implémentation utiliser?
    Salut,
    j'ai découvert tres recemment les langages fonctionnels et après avoir lu deci dela quelques post à ce sujet, j'ai choisi ocaml...
    j'avais une tite question concernant les implémentation de ce langage:
    au niveau performance, que vaut le byte-code made in ocaml face à celui de .NET ou mono (F#)?
    Je me doute que certains vont me dire que F# n'est pas une implémentation parfaite de ocaml, mais ça ressemble qd meme pas mal.
    a+

  2. #2
    Membre émérite
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Par défaut
    Salut !

    Citation Envoyé par jlandrei
    au niveau performance, que vaut le byte-code made in ocaml face à celui de .NET ou mono (F#)?
    Les performances que l'on peut attendre d'une quelconque implémentation dépendent avant tout du programmeur, selon le schéma suivant :

    (1) Optimisation algorithmique : y a-t-il un algorithme plus efficace pour résoudre mon problème ? Exemple : pour le jeu de la vie, comparer la version naïve à l'algorithme Hashlife. Gain espéré : plusieurs ordres de grandeur.

    (2) Optimisation du langage : puis-je faire ceci de manière plus efficace ? Exemple (OCaml) : remplacer y @ [x] par x :: y (quand on peut). Gain espéré : au mieux, semble-t-il, un ordre de grandeur (peut-être plus parfois ?).

    (3) Optimisation par le compilateur / interpréteur : Le code machine est-il performant ? Gain attendu : le plus souvent moins d'un ordre de grandeur.

    Tout ceci pour dire que je doute qu'il existe des différences phénoménales sur le plan des performances entre l'interpréteur OCaml et son équivalent F# (ou alors, ce serait un signe de jeunesse pour F, qui doit être un peu plus lent, mais c'est à confirmer, car je n'ai jamais essayé). Les différences sont à mon sens plutôt d'ordre philosophique et/ou conceptuel.

    Qui plus est, bien souvent, changer le programmeur suffit à modifier les performances d'une même application. Si bien qu'il vaut peut-être mieux se demander dans quel contexte on veut programmer plutôt que s'imposer un cadre donné (Microsoft et .NET d'un côté, GNU/Linux et le libre de l'autre, je schématise à dessein) sous prétexte (je crois que c'en est un) qu'on y gagne en moyenne quelques malheureuses millisecondes par application.

    Il y a des débats passionnants sur le pourquoi du comment on peut gagner un cycle CPU avec du C comme ceci plutôt que comme cela... Quant à moi, j'admire un algorithme qui me fait gagner des heures, des semaines ou des mois (cf. Hashlife cité plus haut), tout comme je suis très indifférent aux astuces de magie noire par lesquelles ont peut gagner quelques microsecondes.

    Cordialement,
    Cacophrène

    PS : Réponse de Normand ? Je ne crois pas. J'espère avoir répondu de façon claire, ou en tout cas peu catégorique. M'est avis que la réponse évidente, obtenue avec un chronomètre, est trop rapide pour être honnête.

  3. #3
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    d'après mon expérience, je dirais que OCaml est souvent plus rapide que F#... mais F# a l'avantage d'avoir une vraie bib standard
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  4. #4
    Membre Expert
    Avatar de InOCamlWeTrust
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 036
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 036
    Par défaut
    Juste pour revenir sur ce qu'a dit Cacophrene : l'implantation d'un langage ne dépend pas du programmeur. C'est justement la principale caractéristique d'une implantation.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    832
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Par défaut
    Si tu fais dejà du .NET, tu peux avoir intérêt à prendre F# qui reste un terrain familier. Sinon, je pense que le mieux pour apprendre OCaml (surtout pour apprendre) c'est de commencer par du vrai OCaml.

    Au niveau des fonctionnalités avancées, les deux langages sont très différents, mais pour la base c'est assez semblable (et les enseignements sont les mêmes).

    Un excellent livre pour commencer, mais très difficile à trouver (n'est plus publié, mais si tu as accès à une bonne bibliothèque, tente ta chance) est "Le langage Caml". Il est un peu vieux, donc traite de Caml Light, mais ça ne change pas grand chose et c'est vraiment un bon ouvrage. Si tu as déjà une bonne expérience de la programmation, et t'intéresses à un survol plus rapide (avant d'éventuellement approfondir), je te conseille l'Initiation à la programmation fonctionnelle de Filliâtre.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Essonne (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 69
    Par défaut
    (1) Optimisation algorithmique [...]
    La performence de l'implémentation pour un meme prog se passe après cette étape, mais je suis d'accord avec toi: un programme mal conçu au départ donnera une daube et ce, même si on utilise le meilleur des langage.
    C'est un peu pour ça que j'essai de mieux appréhender la prog fonctionnelle car on doit chercher la logique de ce que l'on veux faire plutot que la manière de l'atteindre.

    je dirais que OCaml est souvent plus rapide que F#... mais F# a l'avantage d'avoir une vraie bib standard
    ok pour la réponse, effectivement F# ,d'apres ce que j'en ai lu, a acces à toutes les bibliothèques de .NET, mais le fait que ces bib soient dans le paradigme impératif n'oblige t il pas d'utiliser le même style dans nos prog?
    De plus la doc en F# est quasi inexistante (dans la langue de moliere) alors que j'ai pu trouver facilement 2 bouquins en ocaml.

    bref ce que je vois c'est que ocaml est plus rapide et mieux documenté, par contre F# est très peu documenté mais mieux intégré à windaube et a beaucoup plus de libs (plus un petit truc que j'aime bien : la surcharge des opérateurs).

    Ps: ce n'est pas mon métier, l'informatique est juste un passe-temps... merci à vous pour vos réponses.

    j'ai un vieux projet dans les cartons, je vais essayer de le mettre en oeuvre dans ce style de prog. Ca risque d'etre long mais bon comme je l'ai dis c'est un passe temps pour moi...

  7. #7
    Membre émérite
    Avatar de Cacophrene
    Homme Profil pro
    Biologiste
    Inscrit en
    Janvier 2009
    Messages
    535
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Biologiste

    Informations forums :
    Inscription : Janvier 2009
    Messages : 535
    Par défaut
    Salut !

    Citation Envoyé par InOCamlWeTrust
    l'implantation d'un langage ne dépend pas du programmeur. C'est justement la principale caractéristique d'une implantation.
    En effet, j'aperçois en me relisant que la première phrase de mon message comporte une erreur. Ma pensée était plutôt la suivante : pour une implémentation donnée, qui est ce qu'elle est, certains programmeurs savent mieux en tirer parti que d'autres, pour un gain parfois supérieur à celui que l'on obtiendrait en choisissant une implémentation un peu plus optimisée. En tout cas merci pour la remarque.

    Citation Envoyé par jlandrei
    (plus un petit truc que j'aime bien : la surcharge des opérateurs)
    Et toujours mon cœur balance entre le sexy (la surcharge), le raisonnable (l'absence de surcharge) et le beau (les GADT).

    Cordialement,
    Cacophrène

  8. #8
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    Citation Envoyé par jlandrei Voir le message
    bref ce que je vois c'est que ocaml est plus rapide et mieux documenté, par contre F# est très peu documenté mais mieux intégré à windaube et a beaucoup plus de libs (plus un petit truc que j'aime bien : la surcharge des opérateurs).
    pour fsharp les tutos d'intro de LLB sont suffisants, puis le msdn en français te donnera la doc sur les bib

    donc je ne vois vraiment pas où est le manque de doc
    y a plein d'autres critiques à faire, mais pas de ce côté là
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  9. #9
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Citation Envoyé par gorgonite Voir le message
    d'après mon expérience, je dirais que OCaml est souvent plus rapide que F#... mais F# a l'avantage d'avoir une vraie bib standard
    Bien que l'écart commence à se réduire avec Batteries par exemple. M'enfin OCaml est encore loin du compte

  10. #10
    LLB
    LLB est déconnecté
    Membre émérite
    Inscrit en
    Mars 2002
    Messages
    968
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 968
    Par défaut
    Citation Envoyé par jlandrei Voir le message
    au niveau performance, que vaut le byte-code made in ocaml face à celui de .NET ou mono (F#)?
    Si tu veux des performances, il vaut mieux compiler en natif avec OCaml (ocamlopt) plutôt qu'en bytecode (ocamlc). F# utilise le bytecode de .Net qui est ensuite compilé en JIT vers du code natif.

    Les performances dépendent du type d'application, mais c'est souvent le même ordre de grandeur (Caml est généralement un peu plus rapide, mais pas toujours).

    ok pour la réponse, effectivement F# ,d'apres ce que j'en ai lu, a acces à toutes les bibliothèques de .NET, mais le fait que ces bib soient dans le paradigme impératif n'oblige t il pas d'utiliser le même style dans nos prog?
    Ca dépend. Certaines bibliothèques te forcent plus ou moins à faire de l'impératif (j'ai déjà eu le problème avec une bibliothèque réseau), mais tu peux parfois faire quelques petites fonctions pour changer l'interface (et masquer les effets de bords). En général, ce n'est pas un problème majeur.

    De plus la doc en F# est quasi inexistante (dans la langue de moliere)
    Tu peux trouver un point de départ ici : laurent.le-brun.eu/articles
    Ensuite, tu peux poser tes questions sur le forum F# : ce n'est pas parce qu'il n'y a pas de question en ce moment que tu n'obtiendras pas de réponse.

    donc je ne vois vraiment pas où est le manque de doc
    Pour quelqu'un qui découvre vraiment le langage, il y a quand même peu de documentation. A part mes quelques articles (qui vieillissent et que je devrais mettre à jour), il n'y a pas grand-chose en français. Mais si un débutant pose ses questions, ça permettra de compléter les articles et de voir ce qui pose problème.

    Je me doute que certains vont me dire que F# n'est pas une implémentation parfaite de ocaml, mais ça ressemble qd meme pas mal.
    C'est un langage différent partageant un noyau commun. Chaque langage a ses fonctionnalités avancées distinctes, mais c'est difficile de trouver un gagnant clair (fonctors, système objet structurel, héritage multiple, camlp4, variants polymorphes... d'un côté ; surcharge, tout objet, système objet nominal avec interfaces, introspection, syntaxe light, quotations, monades, compréhensions en standard... de l'autre).

Discussions similaires

  1. [selection de fenetre] Quelle methode utiliser?
    Par -=Spoon=- dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 04/07/2005, 14h02
  2. [persistance]Quelle méthode utiliser ?
    Par le Daoud dans le forum Persistance des données
    Réponses: 9
    Dernier message: 15/11/2004, 09h29
  3. code récurrent, quelle méthode utiliser ?
    Par khayyam90 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 10/10/2004, 15h03
  4. [Debutant] quels outils utiliser ?
    Par bouboussjunior dans le forum EDI et Outils pour Java
    Réponses: 9
    Dernier message: 13/09/2004, 11h47
  5. [Debutant] probleme pour utiliser les classes d'un .jar
    Par pissek dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 12/05/2004, 18h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo