Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
953 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  ocaml -> java 1.5

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

ocaml -> java 1.5

n°1037224
Razor
Posté le 06-04-2005 à 13:50:46  profilanswer
 

je viens de débuter mon stage de DUT informatique.
 
Mon projet est de traduire un logiciel (unison) de ocaml en java 1.5 :s
 
Je connait moyennement le java, mais par contre je ne connait pas du tout le ocaml, nous n'avons eu aucuns cours la dessus.
 
Depuis hier j'essaye de comprendre à l'aide de différents sites et pdf mais j'ai l'impression de patauger  :cry:  
 
Si vous avez de bons cours en caml/ocaml et pourquoi des methodes pour passer de ocaml en java n'hesiter pas à m'aider :)

mood
Publicité
Posté le 06-04-2005 à 13:50:46  profilanswer
 

n°1038176
Razor
Posté le 06-04-2005 à 22:35:01  profilanswer
 

heureusement quil y a un de l'objet en ocaml :d, deja que ca va etre cho, j'imagine meme pas si ct que récursif.
 
enfin spa trés encourageant ta réponse :(

n°1038200
Chronoklaz​m
Posté le 06-04-2005 à 23:03:21  profilanswer
 

Pourquoi ne pas generer du java directement à partir de OCAML avec un truc du style :
 
       Caml/C interface       JNI (Java Native Interface)
  Caml <------------------> C <-----------------------------> Java
 
http://pauillac.inria.fr/~xleroy/software.html


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1038292
Taz
bisounours-codeur
Posté le 07-04-2005 à 00:35:09  profilanswer
 

c'est pas un peu gros comme projet ? surtout de traduire from scratch sans aucune connaissance du code original, ni des langages source et destination ? Ni des différents protocoles. T'en as pour des mois.

n°1038294
Taz
bisounours-codeur
Posté le 07-04-2005 à 00:36:41  profilanswer
 

Citation :

Unison may be unique among large OCaml projects in having been translated from Java to OCaml midway through its development. Moving to OCaml was like a breath of fresh air.

n°1038307
Chronoklaz​m
Posté le 07-04-2005 à 00:46:55  profilanswer
 

Avec tous les trucs dispo sur google le copier/coller devrait etre efficace.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1038314
Taz
bisounours-codeur
Posté le 07-04-2005 à 00:52:54  profilanswer
 

c'est bien connu, on développe tous comme ça.

n°1038438
Razor
Posté le 07-04-2005 à 08:58:27  profilanswer
 

j'ai quand meme quelques connaissances en java
 
Taz, j'avais remarqué que unison a été développé à la base en java, il fait que je cherche s'il y a moyen de récupérer des sources

n°1039831
Razor
Posté le 08-04-2005 à 11:28:14  profilanswer
 

up :d

n°1050732
Razor
Posté le 18-04-2005 à 14:38:43  profilanswer
 

Bon, j'ai commencé a porté le code en java, et bien evidement je suis devant pas mal de problème car je ne connait que moyennement le java.
 
Il y a plein de types dans les sources en ocaml, et je sais pas trop comment les créé en java, et faire une classe pour chaque type :s
 
donc voici 3 definition de types différentes en ocaml
 

Code :
  1. type host =
  2.     Local
  3.   | Remote of hostname
  4. type root = host * Fspath.t
  5. type 'a oneperpath = ONEPERPATH of 'a list


 
 
 
avez-vous une idée de la manière qu'il faut utilisée en java pour les déclarée ?


Message édité par Razor le 18-04-2005 à 14:39:50
mood
Publicité
Posté le 18-04-2005 à 14:38:43  profilanswer
 

n°1051756
Arwenalia
Posté le 19-04-2005 à 09:22:02  profilanswer
 

Pour le premier 'host' je pense que le mieux serait de créer en Java une classe avec deux constructeurs :
 
Un truc du style :
 

Code :
  1. Class Host {
  2. public Type // soit Local soit Remote
  3. public Hostname // l'attribut de remote
  4. Host(Type) // Ici tu construit un Host Local  
  5. Host(Type, Hostname) // Ici tu construit un Host Remote...
  6. }


Sinon, s'il a des fonctions spécifiques a Local et d'autres à Remote... Tu peux faire une classe mère Host et deux classes héritées Local et Remote
 
Le type Root est assez simple a faire, juste une classe avec deux attributs
 
Quand au troisième cela dépasse mes compétences en Ocaml  :pt1cable:  
 
En espérant que ca te serve... Je ne dis pas que c'est la seule solution...
Je connais pas le sujet a fond, donc je peux me tromper...
 
Bon courage


Message édité par Arwenalia le 19-04-2005 à 09:50:11
n°1052235
Razor
Posté le 19-04-2005 à 14:34:56  profilanswer
 

Ok merci :)
 
Sinon peut on faire des switch sur plusieurs variables ??

n°1052411
Arwenalia
Posté le 19-04-2005 à 16:00:44  profilanswer
 

Un switch sur plusieurs variables???
 
En java sur plusieurs variables je pense pas j'ai jamais vu...
Sinon en Java les switch sont limités aux types char et int, si mes souvenirs sont exacts, on peut pas en faire sur des string...  
>EDIT : Je pense que la seule solution est les switchs imbriqués en Java..
>FIN EDIT  
en O'caml c'est des match :  

Code :
  1. match (Variable1, Variable2) in
  2. (Cas1, Cas1) -> traitement1
  3. | (Cas2, Cas2) -> traitement2


Et tu les faire porter sur ce que tu veux...
 
Voilà... Comme je savais pas dans quel language tu le voulais... j'ai mis les deux...


Message édité par Arwenalia le 19-04-2005 à 16:09:13
n°1052640
Razor
Posté le 19-04-2005 à 18:12:30  profilanswer
 

ben je doi traduire du ocaml :s, spour que ca que je voulai des switch a plusieurs variable en java.
 
les switch ne sont limité au char et int, on peu utisé des types déclarés avec enum

n°1052642
Arwenalia
Posté le 19-04-2005 à 18:15:58  profilanswer
 

oki je savais pas... :pt1cable:
Si t'as d'autres questions hésites-pas... Je suis pas une pro mais je peux peut-être t'aider ;), je connais juste un peu les deux languages pour avoir fait des projets dessus...


Message édité par Arwenalia le 19-04-2005 à 18:17:35
n°1056791
Razor
Posté le 22-04-2005 à 15:51:43  profilanswer
 

(suite des aventures d'un noobie de la programmation :s )
 
En ocaml, il existe une fonction fold_left qui s'applique sur une liste
 

Code :
  1. L'appel de la fonction fold_left f a [e1; e2; ... ; en] retourne f ... (f (f a e1) e2) ... en. Il y a donc n applications.


 
Je cherche une fonction java équivalente mais pour le moment j'ai rien  :kaola:  
 
 
 

n°1058834
Arwenalia
Posté le 24-04-2005 à 18:10:22  profilanswer
 

... :heink:  
Tu cherches une fonction équivalente toute faite ??? Je pense pas que ca existe... Le mieux est de la réécrire...  
Enfin si j'ai bien compris ta question...

n°1059209
Chronoklaz​m
Posté le 24-04-2005 à 23:47:10  profilanswer
 

Razor a écrit :

(suite des aventures d'un noobie de la programmation :s )
 
En ocaml, il existe une fonction fold_left qui s'applique sur une liste
 

Code :
  1. L'appel de la fonction fold_left f a [e1; e2; ... ; en] retourne f ... (f (f a e1) e2) ... en. Il y a donc n applications.


 
Je cherche une fonction java équivalente mais pour le moment j'ai rien  :kaola:


 
Sachant que f est une fonction quelquonque ... avec des pointeurs sur fonctions ca serais faisable, en Java c'est dead ! Mais ca doit etre faisable autrement ... bon courage :)
 
EDIT : Quoique si tu crée ta propre lambda (une fonction universelle) à l'aide d'une structure de controle (je sais meme pas si ca exite en java) ca pourrais être envisageable.


Message édité par Chronoklazm le 24-04-2005 à 23:55:26

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1059364
Razor
Posté le 25-04-2005 à 09:00:43  profilanswer
 

ben la fonction fold_left fait partie du module List pour ocaml, un module qui contient toutes les fonctions courantes qu'on peut faire sur le liste + d'autres comme fold_left.
 
Je me demande donc si cette fonction n'existepas dans un package java dédié au traitement des listes

n°1059392
Arwenalia
Posté le 25-04-2005 à 09:43:15  profilanswer
 

Pas à ma connaissance... Je pense que ce serait plus rapide de la réimplémenter... :$

n°1059435
Razor
Posté le 25-04-2005 à 10:21:50  profilanswer
 

puisqu'il est diffile voir impossible de faire une fonction fold_left prenant en parametre une fonction et des types quelconque j'ai essayé de faire lequivalent :s
 
Ocaml

Code :
  1. List.fold_left child fspath nl


 
Java

Code :
  1. Fspath tmp = f;
  2.       for (int i=0; i<nl.size();i++){
  3.          tmp = child(tmp, nl.get(i));
  4.       }
  5.       return tmp;


Message édité par Razor le 25-04-2005 à 10:23:01
n°1059491
Arwenalia
Posté le 25-04-2005 à 10:52:02  profilanswer
 

MMMMMmmmm Je pense que ca devrait marcher... J'aurais vu quelque chose de récursif mais bon... Déformation O'camlienne...

n°1059703
Razor
Posté le 25-04-2005 à 14:01:04  profilanswer
 

bon, le truc que j'ai a transcrire utilise pas mal de commandes systemes comme opendir, readdir...
 
On m'a dit que j'allais devoir utiliser une API java unix, mais je n'en sait pas plus  :ouch:

n°1059768
Arwenalia
Posté le 25-04-2005 à 14:33:34  profilanswer
 

Je vais essayer de me renseigner...

n°1060048
Chronoklaz​m
Posté le 25-04-2005 à 17:04:50  profilanswer
 

Pour le fold_left en Java c'est faisable, mon proff ma dit que que l'on pouvait simuler une fonction en parametre à l'aide du package RMI.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1060229
the real m​oins moins
Posté le 25-04-2005 à 19:07:08  profilanswer
 

Chronoklazm a écrit :

Pour le fold_left en Java c'est faisable, mon proff ma dit que que l'on pouvait simuler une fonction en parametre à l'aide du package RMI.


[:rofl] http://simogeo.free.fr/hfr/pingouino_zytrafumai.gif


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1060236
the real m​oins moins
Posté le 25-04-2005 à 19:08:12  profilanswer
 

sinon, ce que vous voulez faire est ptet faisable avec les Closure de commons-collections ?


Message édité par the real moins moins le 25-04-2005 à 19:08:24

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1060818
Razor
Posté le 26-04-2005 à 08:41:20  profilanswer
 

nan mais vous occuper plus de fold_left, je ne l'ai vue qu'un fois pour le moment dans le code, et c pas pour les 3 lignes que ca rajoute :p
 
Sinon pour les API java unix j'en ai repéré 3 : Jtux, Posix et Java Unix, apres faut que je fasse un choix :d

n°1062507
robert de ​niro
You! You're good!
Posté le 27-04-2005 à 11:41:40  profilanswer
 

Et bien pourquoi pas plus simplement utilisé la partie fonctionnel de java avec la sur couche nice http://mindprod.com/jgloss/nice.html au lieu de se casser les couilles [:djmb] aprés tu peux faire un tour sur pizza
http://pizzacompiler.sourceforge.net/ [:greenleaf]
 
nice pizza

n°1063023
Razor
Posté le 27-04-2005 à 16:46:23  profilanswer
 

si j'ai d'autre probleme pour les fonctions en parametre je regarderai ca robert :)
 
sinon dans un if ocaml je ne voi pas tres bien ce que "<>" veut dire
 

Code :
  1. if
  2.     p.last_mode <> mode ||
  3.     p.last_pref != Prefs.read p.pref ||
  4.     p.last_def != p.default
  5.   then

n°1063041
Arwenalia
Posté le 27-04-2005 à 16:59:22  profilanswer
 

N'aurait-elle pas la même signification de "!="??  
Dans certains langages, on utilise <> car != ne marche pas, ou plutot renvoie n'importe quoi...  
 
Normalement ca devrait être ca... J'y mettrais presque ma main à couper... ;o)
 

n°1063246
Razor
Posté le 27-04-2005 à 18:54:05  profilanswer
 

ben oué c'est ce que je pensait avant de voir <> et != juste apres.
 

n°1063776
babar9160
Fan d'Ada et de Perl...
Posté le 28-04-2005 à 08:51:05  profilanswer
 

J'aurais plutôt pensé qu'ils avaient la même signifiaction orale (différent de), mais pas la même utilisation. Je m'explique, je pencherais pour le fait que != s'applique sur un type de données scalaires et <> pour les types evolués, genre unit.
Enfin l'ocaml n'a jamais été m'a passion, n'est-ce pas Arwenalia ;)
Bon courage Razor en tout cas...


Message édité par babar9160 le 28-04-2005 à 08:55:52
n°1063780
babar9160
Fan d'Ada et de Perl...
Posté le 28-04-2005 à 08:53:11  profilanswer
 

http://www.pps.jussieu.fr/Livres/o [...] ra015.html
 
descend juste un peu à la figure 2.4... tu verras que :
 

Citation :


=  égalité structurelle  
== égalité physique  
<> négation de =  
!= négation de ==  
 
 
L'égalité structurelle teste l'égalité de deux valeurs en explorant leur structure, alors que l'égalité physique teste si les deux valeurs occupent la même zone mémoire. Ces deux égalités retournent le même résultat pour les valeurs simples : booléens, caractères, entiers et constructeurs constants


 
;)
@++ :bounce:


Message édité par babar9160 le 28-04-2005 à 08:55:03
n°1063966
Razor
Posté le 28-04-2005 à 10:33:26  profilanswer
 

merci babar :)
 
en ocaml on peut déclarer des types quelqueconques en mettant ' devant la variable
 
J'ai pas mal de déclaration de types quelconques a traduire, et en java je vois pas trop comment m'i prendre
 
ex ocaml

Code :
  1. type 'a t = 'a ref

n°1064087
Arwenalia
Posté le 28-04-2005 à 11:58:51  profilanswer
 

L'Objet quelconque de Java est la Classe Object. Toutes les autres classes en héritent... Je pense que c'est la solution la plus simple à mettre en place... Sinon ya bien une classe Any... mais je crois qu'elle est trop spécifique et puis tordue à utiliser ( j'en ai fait les frais )...
 
Voili Voilou, en espérant que ca t'aide...

n°1065880
Razor
Posté le 29-04-2005 à 15:51:24  profilanswer
 

Oué j'avai essayé avec Object mais il me semble que ca me posai quelques problemes.
 
Je rencontre pas mal de type de plus en plus complexe :
 
ocaml

Code :
  1. type updateItem =
  2.     NoUpdates                         (* Path not changed *)
  3.   | Updates                           (* Path changed in this replica *)
  4.       of updateContent                (*   - new state *)
  5.        * prevState                    (*   - summary of old state *)
  6.   | Error                             (* Error while detecting updates *)
  7.       of string                       (*   - description of error *)
  8. and updateContent =
  9.     Absent                            (* Path refers to nothing *)
  10.   | File                              (* Path refers to an ordinary file *)
  11.       of Props.t                      (*   - summary of current state *)
  12.        * contentschange               (*   - hint to transport agent *)
  13.   | Dir                               (* Path refers to a directory *)
  14.       of Props.t                      (*   - summary of current state *)
  15.        * (Name.t * updateItem) list   (*   - children;
  16.                                              MUST KEEP SORTED for recon *)
  17.        * permchange                   (*   - did permissions change? *)
  18.   | Symlink                           (* Path refers to a symbolic link *)
  19.       of string                       (*   - link text *)


 
Un developpeur d'unison me donner en gros la hierarchie correspondante en java:
 

Code :
  1. UpdateItem (abstract)
  2.         NoUpdates
  3.         Updates (abstract)
  4.             UpdateAbsent
  5.             UpdateFile
  6.             UpdateDir
  7.             UpdateSymlink
  8.         Error


 
Dois je faire un enum pour lister chaque cas ?
Faut il faire une classe pour NoUpdates et Error ?


Message édité par Razor le 29-04-2005 à 16:06:50
n°1065974
Arwenalia
Posté le 29-04-2005 à 16:33:34  profilanswer
 

Je pense que des Classes heritées sont mieux venues que des enum...  
Dans le cas de UpdateItem... NoUpdates est un constructeur particulier qui ce rapproche très fortement d'une classe héritée... Il en va de même pour les autres...  
 
Peut-etre que la meilleure solution est de reprendre la hierarchie que l'on t'a donnée et de l'exprimé sous forme de classe mère et classe héritées...
 
Ps : Les types notés abstract peuvent très bien correspondrent a une classe asbraite en Java...

n°1070688
Razor
Posté le 03-05-2005 à 16:49:15  profilanswer
 

Bon maintenant faut que je m'occupe des exceptions :s
 
Voici la première fonction avec le block try...with que je rencontre (equivalent a try...catch java)
 

Code :
  1. let get fromRoot fspath path =
  2.     Util.convertUnixErrorsToTransient
  3.     "querying file information"
  4.       (fun () ->
  5.          try
  6.            let stats = statFn fromRoot fspath path in
  7.            let typ =
  8.              match stats.Unix.st_kind with
  9.                Unix.S_REG -> `FILE
  10.              | Unix.S_DIR -> `DIRECTORY
  11.              | Unix.S_LNK -> `SYMLINK
  12.              | _ ->
  13.                  raise (Util.Transient
  14.                           ("path " ^
  15.                            (Fspath.concatToString fspath path) ^
  16.                            "has unknown file type" ))
  17.            in
  18.            { typ = typ;
  19.              inode    = stats.Unix.st_ino;
  20.              ctime    = stats.Unix.st_ctime;
  21.              desc     = Props.get stats }
  22.          with
  23.            Unix.Unix_error((Unix.ENOENT | Unix.ENOTDIR),_,_) ->
  24.            {typ = `ABSENT;
  25.             inode    = 0;
  26.             ctime    = 0.0;
  27.             desc     = Props.dummy})


 
Ce sont bien evidement les 2 parties suivantes qui je me demande comment traduire en java :  
 
- raise (Util.Transient("path " ^(Fspath.concatToString fspath path) ^ "has unknown file type" ))
 
- Unix.Unix_error((Unix.ENOENT | Unix.ENOTDIR),_,_)


Message édité par Razor le 03-05-2005 à 16:49:45
n°1070707
Arwenalia
Posté le 03-05-2005 à 17:08:08  profilanswer
 

Tordu comme truc...
 
Pour le Premier je verrais bien un truc sytle  
 
throws New Exception("path " + (Fspath.concatToString fspath path) + "has unknown file type" );
 
Si je me souviens bien... Pour l'autre, seulement une vague idée,  
 
Si j'ai bien traduit ce truc pas tres beau Unix.Unix_error((Unix.ENOENT | Unix.ENOTDIR),_,_) permet de savoir si une exception du type 'Fichier inexistant' ou 'Repertoire inexistant'... Je pense qu'en Java, il faudrait essayer de catch-er une IOException... Mais bon...  
 
Voila tout ce que je peux dire... En espérant que ca te soit utile... :jap:

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  ocaml -> java 1.5

 

Sujets relatifs
[JAVA/STRUTS] Equivalent a un $_GET[] comme en PHP ?[Introspection] Comment "lire" du code java d'une autre appli ?
help svp problème navigateur et JAVA[Java] no line-wrap dans un JTextPane
Applets JAVAProblème JAVA dans PHP
programmer une machine de turing en javaPb d'utilisation de Java
[Java] Afficher un fichier textePopup par java marche pas sous ie mais sous mozilla, pkoi?
Plus de sujets relatifs à : ocaml -> java 1.5


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR