Projet - Question
Bonjour, Je rencontre un problème étrange lors de l'implémentation de la mémoire. En effet dans mon *read_val: int -> value *dans le foncteur Dans le cas ou la value est une paire, je renvois* VPair((read_val address+1),(read_val address+3))* Selon le compilateur cette expression est de type Domains.value ce qui est normal et souhaité. Mais le compilateur me sort une erreur de typage: *This expression has type int but is here used with type Domains.value* Si je commente cette ligne, le projet compile correctement sans erreur et le type de read_val est bien *val read_val : int -> value *le value est déclaré avec Domains.value Je ne comprend pas trop l'erreur si présente car cela voudrait dire que dans le cas des booléens et des entiers, je renvoit des entiers hors je renvois bien des valeurs de type value Cordialement. Arnaud Lecointre
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Bonjour. Moi je suis occupé pendant au moins la majorité de cet après-midi et Jean-Yves est absent, mais la deadline est proche ... Je vous réponds maintenant même si je n'ai pas compris les détails de votre problème. Je vous donne une suggestion pour laquelle Jean-Yves va m'haïr :-). Je ne sais pas si c'est la solution correcte dans ce cas ; probablement *non*, mais je n'ai pas compri exactement votre problème, donc je ne peux pas juger. Il y a une fonction pré-définie très dangereuse, dont l'utilisation est considérée très lourde. La fonction s'appelle Obj.magic, calcule la fonction identité et a le type : Obj.magic : 'a -> 'b C'est-à-dire, la fonction prend un objet et retourne le même objet, mais avec un nouveau type. Naturellement en utilisant ça vous perdez tous les garanties du système de type : en particulier, utiliser Obj.magic est la seule façon d'obtenir une erreur «segmentation fault» en OCaml. Les utilisateurs experts utilisent Obj.magic pour contourner les restrictions du système de type, lorsque ils sont sûrs que leur programme est correcte même s'il est refusé par le compilateur. Si l'utilisateur a raison, tout va bien. Si l'utilisateur a tort, il peut y avoir des plantages ou des erreur imprévues. Utiliser Obj.magic quand elle n'est pas indispensable est symptôme d'un très mauvais style, et en général Obj.magic n'est pas une bonne façon d'obtenir des «logiciel sûrs» ; mais parfois les vrais hommes et le vraies femmes considèrent l'expressivité plus importante que les garanties de correction. - -- Luca Saiu http://www-lipn.univ-paris13.fr/~saiu GNU epsilon: http://www.gnu.org/software/epsilon Marionnet: http://www.marionnet.org -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk1GmaQACgkQvzOavibF0oZ+jQCfeOVn2x/dnh8ZCXrLH9YmLAE4 zqwAn2swX/uf3s1fL/syG/DnrdrpkX1E =p5HS -----END PGP SIGNATURE-----
On Mon, 31 Jan 2011 11:46:06 +0100, Arnaud Lecointre <lec.arnaud@gmail.com> wrote:
Bonjour,
Je rencontre un problème étrange lors de l'implémentation de la mémoire. En effet dans mon *read_val: int -> value *dans le foncteur Dans le cas ou la value est une paire, je renvois* VPair((read_val address+1),(read_val address+3))*
*This expression has type int but is here used with type Domains.value*
Problème le priorité des opérateurs... "read_val address+1" c'est la même chose que "(read_val address) +1" et effectivement on essaye alors d'additionner une value (le résultat de "read_val address" et un entier (1). "read_val (address+1)" permettra de corriger le problème sans se risquer à faire de la magie. -- Cordialement, Jean-Yves Moyen
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 01/31/2011 12:18 PM, Jean-Yves Moyen wrote:
On Mon, 31 Jan 2011 11:46:06 +0100, Arnaud Lecointre <lec.arnaud@gmail.com> wrote:
Bonjour,
Je rencontre un problème étrange lors de l'implémentation de la mémoire. En effet dans mon *read_val: int -> value *dans le foncteur Dans le cas ou la value est une paire, je renvois* VPair((read_val address+1),(read_val address+3))*
*This expression has type int but is here used with type Domains.value*
Problème le priorité des opérateurs...
Good catch, Jean-Yves ! :-) Donc non, utiliser Obj.magic est une mauvaise idée ici. - -- Luca Saiu http://www-lipn.univ-paris13.fr/~saiu GNU epsilon: http://www.gnu.org/software/epsilon Marionnet: http://www.marionnet.org -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk1GnBsACgkQvzOavibF0oaZQQCfZYnOJgQBuL9q012KwCotPJ6L kMsAn3GXPG2BaC7okztCTx1AhzD4j2Kb =qh42 -----END PGP SIGNATURE-----
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 On 01/31/2011 12:25 PM, Luca Saiu wrote:
Good catch, Jean-Yves ! :-)
«Good catch» est une autre façon d'écrire «quelle onte» :-). Je n'avais pas vu l'erreur. - -- Luca Saiu http://www-lipn.univ-paris13.fr/~saiu GNU epsilon: http://www.gnu.org/software/epsilon Marionnet: http://www.marionnet.org -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.10 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk1GnNcACgkQvzOavibF0oZuBgCePODQIqtTvbRsNRT0ojC2QU6R r2kAn0T2jfPzbuZN477vZnEnlxuuObLm =xq7Z -----END PGP SIGNATURE-----
participants (3)
-
Arnaud Lecointre -
Jean-Yves Moyen -
Luca Saiu