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 :

Définition locale de fonction : temps nécessaire?


Sujet :

Caml

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 75
    Points : 34
    Points
    34
    Par défaut Définition locale de fonction : temps nécessaire?
    Bonjour

    Le programme que je suis entrain de faire (solveur de Sokoban) a de façon très simplifiée la structure suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    let rec solve (c:configuration) = 
       let possibles_moves c = ... (* renvoie la liste des mouvements effectuables dans cette configuration *)
          ...
          ...
       in
       List.iter (fun m -> solve (effectue c m)) (possibles_moves c);; (* où effectue c m renvoie la configuration c après avoir effectué le mouvement m *)
    Étant donné que la fonction solve va être appellée des centaines de milliers de fois durant l'exécution, je me demandais comment le compilateur traitait la définition locale de la fonction possible_moves.
    Est-ce qu'il va relire et se traduire la définition de possibles_moves à chaque appel de solve sans s'apercevoir que c'est toujours la même chose, ou bien est-ce qu'il va ne la lire qu'une seule fois, la première fois qu'il la rencontre?
    Parce que dans le premier cas je dois perdre un temps considérable à la relire à chaque fois alors que rien n'a changé dans sa définition.
    Qu'en pensez-vous?

    (Edit)
    NB : Ma fonction possibles_moves est récursive terminale, je ne sais pas si ça peut vous être utile.

    Fractal

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu as remarqué que OCaml était compilé, et pas interprété ? Je pense que ça réponds à ta question non ? Pour plus de détail, regarde comment OCaml compile les closures, et ne t'inquiète pas, il ne les recompile pas à chaque fois !!!

    --
    Jedaï

  3. #3
    alex_pi
    Invité(e)
    Par défaut
    Je trouve franchement que tu te poses beaucoup trop de questions de performances... Qu'est ce que tu dirais de simplement tenter de programmer le plus naturellement et clairement possible, et commencer à te prendre la tête seulement le jour où tu constateras des problèmes de performances ? Fais un peu confiance au compilo OCaml : évidement qu'il ne "recompile" pas une fonction à chaque fois qu'elle est appelé ! Ce serait completement abominable dans un langage fonctionnel où l'on passe son temps à appeler des fonctions, et il est généralement admis que les performances sont environ deux fois moins bonnes que celle du C, donc rassure toi, c'est bien fait :-)

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Complètement d'accord avec Alex_Pi.

    C'est amusant de voir que quand on débute on se préoccupe énormément de la performance. Et en prenant de la maturité on se rend compte que c'est souvent secondaire à une bonne conception ^_^

  5. #5
    Membre éprouvé
    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
    Points : 1 284
    Points
    1 284
    Par défaut
    Citation Envoyé par Garulfo Voir le message
    C'est amusant de voir que quand on débute on se préoccupe énormément de la performance.
    Hmmmmm... on verrait de meilleurs algorithmes, sinon !

    Citation Envoyé par Garulfo Voir le message
    Et en prenant de la maturité on se rend compte que c'est souvent secondaire à une bonne conception ^_^
    Pas d'accord : on peut concilier tous ces paramètres :

    - de vrais bons algorithmes
    - une bonne conception
    - un code clair et lisible
    - un code simple

    Souvent, les gens pensent que lisibilité et optimisation sont antagonistes, mais je pourrais leur montrer, par A + B, que c'est tout simplement archi-faux, que ce soit en OCaml, en C ou en tout ce que tu veux. A algorithme égal, un code petit et clair sera toujours plus performant qu'un code "optimisé", obscur.

    Maintenant, pour tirer le meilleur parti de OCaml en termes de performances, IL SUFFIT D'ECRIRE DE PETITS CODES CLAIRS.

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    Citation Envoyé par InOCamlWeTrust Voir le message
    Hmmmmm... on verrait de meilleurs algorithmes, sinon !
    Pas forcément justement. On se dit que les petites améliorations de codes sont plus importantes que les algorithmes.

    Citation Envoyé par InOCamlWeTrust Voir le message
    Pas d'accord : on peut concilier tous ces paramètres :

    - de vrais bons algorithmes
    - une bonne conception
    - un code clair et lisible
    - un code simple
    Tu lis des choses que je n'ai pas dit. Je suis complètement d'accord avec toi. J'ai dit que la performance est secondaire à la bonne conception. En effet, puisque les problèmes de performances sont dus à des algorithmes déficients la majorité du temps, on apprend à faire un effort sur la conception avant tout. Qui a dit que c'était antagoniste ? Secondaire ne veut ni dire négligeable ni opposé.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/04/2007, 09h32
  2. fonction temps pour un quizz
    Par stunt35 dans le forum C
    Réponses: 10
    Dernier message: 20/06/2006, 20h37
  3. Définition d'une fonction static ?
    Par tintin72 dans le forum C++
    Réponses: 9
    Dernier message: 22/12/2005, 12h50
  4. Réponses: 1
    Dernier message: 05/12/2005, 09h10
  5. afficher la définition d'une fonction stockée
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/09/2004, 14h28

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