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 :

Ocaml-> C: tableau de flottant en paramètre


Sujet :

Caml

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut Ocaml-> C: tableau de flottant en paramètre
    Bonjour,

    je me suis mis récemment à m'intéresser à l'interface C/Ocaml. Or j'ai besoin d'appeler une fonction en C prenant en paramètre un tableau de flottant ; il n'y a cependant pas de macro DoubleField_val ou équivalent, qui permette de traduire canoniquement en C le contenu d'un tableau Ocaml de flottant.
    Ou alors je ne l'ai pas trouvée, c'est également possible.

    L'idée de contournement, c'est de créer un tableau C, et le remplir par des flottants au fur et à mesure. C'est possible, grace à double_field qui permet d'accéder à un élément précis d'un tableau de flottant Ocaml, en C.

    Maintenant, j'aimerais savoir quelle est la meilleure méthode : la méthode C ou la méthode Ocaml ? En effet, on peut (LablGL le fait) créer le tableau de flottant C (sa taille etc) depuis Ocaml, et le remplir à l'aide d'une fonction Ocaml flottant par flottant. Ou bien on peut tout faire en C, avec une fonction du style :
    int *convert (value v)
    {int *tableau;
    tableau=malloc (Wo_size(v));
    (for i=0,i<Wo_size(v),i++)
    {tab[i]=Double_field (v,i);}
    return tableau;
    }
    Dans ce cas, tout se passe en C (je n'ai pas testé la fonction ci-dessus, elle est probablement fausse).

    Bref, est ce que c'est mieux de faire que C travaille sur des values Ocaml, ou bien est ce mieux de faire manipuler à Ocaml des structures C qui lui sont abstraites ?

  2. #2
    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
    Je choisirais la première méthode : si le programme principal est en OCaml, je préfèrerais essayer de rendre la couche C la plus discrète et transparente possible, et ne pas m'en occuper côté OCaml (comme ça, si je vire le C un jour, mon code OCaml n'aura pas nécessairement à être modifié, à part recoder les fonctions manquantes).

    Par ailleurs, si tu manipules à l'avenir autre chose que des flottants (des machins boxés chiants), tu pourrais utiliser le module Bigarray, qui utilise des représentations mémoires proche du C (ou du Fortran, au choix) et est donc facile à passer d'un langage à l'autre : http://caml.inria.fr/pub/docs/manual...manual043.html.

    (Il me semble que OCaml-SDL utilise des bigarrays pour cette raison)

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    Merci pour le tuyau, je connaissais pas Bigarray .

    Je crois aussi que lablgtk aussi utilise bigarray.

Discussions similaires

  1. Tableau à double entrée en paramêtre
    Par nerixm dans le forum C
    Réponses: 9
    Dernier message: 28/07/2006, 20h46
  2. Procédure stocké, un tableau de int en paramètre
    Par Oberown dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 21/06/2006, 10h44
  3. [VBA] Mettre un tableau de variable en paramètre
    Par loacast dans le forum Général VBA
    Réponses: 10
    Dernier message: 15/11/2005, 11h28
  4. [VB6] Déclaration d'un tableau avec variable en paramètre.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 23/10/2005, 12h21
  5. Réponses: 6
    Dernier message: 23/05/2005, 10h47

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