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 :

Bigarray avec des listes?


Sujet :

Caml

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 63
    Points : 54
    Points
    54
    Par défaut Bigarray avec des listes?
    Salut à tous,

    Presque tout est dans le titre: je voudrais faire une bigarray ayant pour éléments des listes. Ca ne fait pas parti des kind proposées (sauf erreur de ma part), mais peut être y a-t-il une ruse pour arriver à faire ce genre de chose.

    Any idea?

  2. #2
    Membre éprouvé
    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
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour !

    Tout est dans le manuel :

    Big arrays can only contain integers and floating-point numbers, while Caml arrays can contain arbitrary Caml data types. However, big arrays provide more space-efficient storage of integer and floating-point elements, in particular because they support “small” types such as single-precision floats and 8 and 16-bit integers, in addition to the standard Caml types of double-precision floats and 32 and 64-bit integers.
    Donc la réponse est non. Et il faut lire le manuel.

    Cordialement,
    Cacophrène

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2007
    Messages : 63
    Points : 54
    Points
    54
    Par défaut
    Ah, donc pas de recours... dommage. Merci quand même.

    J'ai pu me débrouiller autrement pour mon soucis, alors bon courage aux quelques uns qui se retrouveront devant le même problème.

  4. #4
    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
    En codant une toute petite fonction C et en l'interfaçant avec Caml, il y aurait moyen. Il suffirait de créer un Bigarray de int, puis de simplement promouvoir (cast pour les inclutes !) le type value en int dans la fonction C.

    Faisable avec très peu de moyens et en moins d'une douzaine de lignes de code.
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  5. #5
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Je ne sais pas comment procède le ramasse-miettes mais s'il ne traverse pas les Bigarray de int (ce qui me paraît plausible) alors il ne va pas marquer les éléments du Bigarray et ils seront libérés s'ils ne sont pas référencés par ailleurs.
    Si c'est le cas alors la bidouille serait un peu plus délicate que tu le laisse entendre. Mais je me trompe peut être vu que tu es un bien meilleur connaisseur du compilateur et du run-time d'ocaml.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  6. #6
    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
    Je ne savais pas concernant les Bigarray de int... on peut toujours faire un hack, certes ultra dégueulasse, je te l'accorde bien, qui change le tag du Bigarray de int afin qu'il soit parcouru par le compilateur. Ainsi, à la compilation, le compilateur n'y voit que du feu, mais à l'exécution, tout se passe comme si on avait affaire à un long vecteur de listes !

    Avoue que c'est bien dégueux, non ?

    Le moyen le plus propre serait cependant de créer un type abstrait, et de se coder une toute petite librairie en C pour manipuler ces éléments.
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

  7. #7
    Membre éprouvé
    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
    Points : 1 125
    Points
    1 125
    Par défaut
    Bonjour,

    C'est bien dégueux mais en même temps ça donne envie d'essayer.

    Cordialement,
    Cacophrène

  8. #8
    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 ne suis pas sûr que le layout des Bigarray permette de les montrer au GC Caml comme un vecteur standard. Ça me semble un peu dangereux.

    Une solution serait d'enregistrer les listes stockées dans le Bigarray comme des racines du GC, avec caml_register_generational_global_root, au moment où on met un pointeur vers la liste dans le tableau. Il me semble que c'est correct vis-à-vis de la documentation de l'interface C (pas de bidouilles foireuses), par contre les performances risquent de souffrir si on l'utilise pour de très grands tableaux (ce qui est parfois/souvent le but des Bigarray).

  9. #9
    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
    Certes, ton idée fonctionne mais engorgera très rapidement la mémoire et n'aura pas l'effet escompté, c'est-à-dire l'économie très substantielle d'espace que l'on a avec les Bigarray. Le layout des Bigarray peut être parcouru par le GC à condition que tu stockes dedans des éléments de taille un mot machine et que tu fasses la petite bidouile indiquée. A essayer, en tous cas, histoire de...
    When Colt produced the first practical repeating handgun, it gave rise to the saying God created men, but Colt made them equal.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Performances avec des listes d'objets
    Par metalcoyote dans le forum Langage
    Réponses: 9
    Dernier message: 20/05/2008, 11h11
  2. Problème de rendu avec des listes
    Par Erwane dans le forum Scheme
    Réponses: 19
    Dernier message: 03/03/2008, 21h27
  3. Page avec des "List/Menu" liées
    Par Atemi76 dans le forum Dreamweaver
    Réponses: 1
    Dernier message: 16/08/2007, 14h51
  4. Réponses: 7
    Dernier message: 22/09/2006, 15h52
  5. Problème avec des listes et des variables
    Par Knuckles dans le forum Général Python
    Réponses: 3
    Dernier message: 09/05/2006, 18h24

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