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 :

Caml et le préprocesseur


Sujet :

Caml

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut Caml et le préprocesseur
    Bonjour,

    je souhaiterais faire appel au préprocesseur pour compiler ou non certaines parties de code.
    Pour mon projet, j'ai développé une couche intermédiaire pour SQL. L'idée c'est de pouvoir y brancher différents SGBD. Ainsi, je compilerais uniquement le code nécessaire pour un SGBD particulier.

    Dans la même veine d'idées, peut-on faire un #ifdef 0 ... #endif comme en C ?
    Dans la doc sur le site de l'INRIA, il y a quelques exemples mais qui ne fonctionnent plus car le code est déprécié. Apparemment, c'était pour O'Caml 3.02.

    Auriez-vous des exemples pour m'expliquer à la fois ce qu'il faut mettre dans le code mais aussi lors de la phase de compilation ?

    Merci.

  2. #2
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 681
    Points
    18 681

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Justement, j'ai parcouru la doc mais les exemples sont dépréciés.

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    En général, la compilation conditionnelle est considérée comme une plutôt mauvaise pratique : il n'y a rien de mieux, si tu testes seulement sur une des bases, pour oublier de modifier le code des autres au fur et à mesure de l'évolution de ton programme, et te retrouver avec un code qui ne compile même plus (bref, du bitrotting en accéléré).

    Ce que tu cherches est disponible nativement avec Camlp4 >= 3.10. C'est l'extension Camlp4MacroParser :
    - code source (avec commentaire explicatif au début)
    - exemple d'utilisation

    On peut aussi passer l'argument en ligne de commande -DFOO (ou -DFOO=BAR) pendant le préprocessing.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Bonsoir,

    comment le compile-t-on car il me jette pour erreur de syntaxe ?

    Merci.

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 832
    Points : 1 104
    Points
    1 104
    Par défaut
    Normalement, tu n'as pas besoin de compiler ce fichier : il est présent dans les Camlp4Parsers standard de camlp4.

    Tu peux donc l'utiliser directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    camlp4o -I +camlp4/Camlp4Parsers Camlp4MacroParser.cmo -DFOO test.ml
    Il fait aussi partie de "camlp4o full", qui regroupe un ensemble d'extensions plus large que camlp4o :
    Pour compiler directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ocamlc -pp "camlp4of -DFOO" test.ml
    Encore une fois, tu ferais mieux de ne pas utiliser de compilation conditionnelle, et de choisir une conception de ton programme qui te permette de tout compiler (et donc "tout vérifier") à chaque fois.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Merci Bluestorm pour à la fois ta réponse mais aussi tes recommandations.
    Concernant les recommandations, j'en prends bonne note mais comment permettre d'utiliser le SGBD de son choix (dans une certaine mesure) et ne pas avoir de dépendance sur chacun d'entre eux ?

    Voilà pourquoi je pensais ne pas compiler une partie du code.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 147
    Points : 102
    Points
    102
    Par défaut
    Bonjour à tous,

    je reviens plusieurs mois après sur ce fil pour poser de nouvelles questions.
    En procédant ainsi, j'ai des temps de compilation qui sont amplifiés. Ceci est dû à l'utilisation de bytecode plutôt que de code natif. Dans la page manuel de camlp4o, il est indiqué ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    -parser <name>
                  Load the parser Camlp4Parsers/<name>.cmo
    Ainsi, j'appelle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    camlp4o -parser Camlp4MacroParser.cmo -DFOO test.ml
    , ce qui fait la même chose qu'en mettant l'option -I.
    Ça fonctionne, mais c'est long.

    En revanche,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    camlp4o.opt -help
    [...]
      -parser <name>   Load the parser Camlp4Parsers/<name>.cm(o|a|xs)
    Et là, je suis coincé car je n'ai pas de fichier cmxs mais Camlp4MacroParser.cmx existe.

    Du coup, pour le moment, j'utilise camlp4of.opt qui fait le job et est plus rapide. En revanche, ça me fait une dépendance sur camlp4-extra (pour Debian) que j'aimerais éviter.
    À ce stade, il semble que je sois contraint de faire un choix entre vitesse de compilation et dépendance supplémentaire à la compilation.

    Auriez-vous une autre idée ?

Discussions similaires

  1. [CAML] Recherche aide pour un projet
    Par tarzoon dans le forum Caml
    Réponses: 1
    Dernier message: 02/09/2005, 10h32
  2. Pascal et Caml
    Par LUCET dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 24/01/2005, 07h39
  3. [CAML] domaine(s) d'utililsation
    Par airseb dans le forum Caml
    Réponses: 11
    Dernier message: 09/01/2005, 00h32
  4. Réponses: 4
    Dernier message: 13/07/2004, 18h59
  5. algo et caml
    Par rabi dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 08/11/2002, 22h44

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