Version française
Home     About     Download     Resources     Contact us    
Browse thread
(*)CaML -> SML ?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Jacques GARRIGUE <garrigue@k...>
Subject: Re: (*)CaML -> SML ? / SML -> Caml ?
[ English summary at the end ]

From: Pascal Poizat <Pascal.Poizat@irin.univ-nantes.fr>

> Je me demandais s'il y avait un outil du style (*)CaML vers SML en
> passant
> par CaMLp4 par exemple ? Je pense qu'il faut aussi ne pas utiliser
> certains traits
> de CamlLight...

Pour la partie purement syntaxique j'ai ecrit ce genre de chose il y a
deux ans, pour Caml Special Light. Je pense que ce serait relativement
facile a` adapter, puisque c'est un simple pretty printer ajouter par
dessus le compilateur CSL. Je traduis la syntaxe abstraite
directement, mais j'ai aussi besoin du typage pour manipuler les
enregistrements par exemple. Le resultat (syntaxique) est plutot joli
(meme si je prefere la version caml).

Mais je n'ai pas traite':

* les eqtype. En SML on distingue les types avec egalite' des types
  sans. Un casse-tete a` ajouter automatiquement.

* les annotations de types. Les variables n'ont pas le meme sens en
  SML.

Et comme le fait remarquer Daniel de Raglaudre, la difficulte' est du
cote' semantique. La bibliotheque standard de SML n'est pas la meme,
et les differences sont telles que je ne vois pas d'autre solution que
de soit ecrire pour SML, en utilisant ses bibliotheques (mais alors
pourquoi ne pas ecrire directement en SML), soit definir une
bibliotheque de compatibilite' qui reproduit l'ensemble de la
bibliotheque standard de Caml.

Exemples de points particulierement difficile a` traiter:

* L'egalite' n'est pas la meme en caml et en SML. Si a et b
  contiennent des structures mutables, alors a = b peut donner un
  resultat different dans les deux langages. Ca a des consequences
  partout.

* Les fonctions prenant deux listes de meme longueur dans la
  bibliotheque standard de SML (l'equivalent de List.combine ou
  List.iter2) n'echouent pas si les listes sont de longueur
  differente.

* Et une multitude d'autres petits choix a` faire dresser les cheveux
  sur la tete d'un camleur.


Si le but est d'utiliser les bibliotheques de SML, une autre approche
peut-etre plus simple serait de modifier directement le parser d'ocaml
(camlp4) pour qu'il accepte une syntaxe proche de celle de SML. Meme
chose, on ne peut pas obtenir une traduction parfaite, mais avec ca et
un minimum de modification du code source on pourrait obtenir une
facon rapide de traduire entre les deux langages. Le pretty-printer de
camlp4 permettrait d'obtenir du code caml en sortie. Il faudrait aussi
une bibliotheque de compatibilite'.

	Jacques

[ English ]

I wrote a translater from Caml to SML two years ago, but this was only
syntactic.

A real translater would be a very hard task since the two languages
differ both in their type systems and semantics.

If one wants to use an SML library in Caml, a more reasonable
approach would be to translate it in Caml. It would be nice to have
semi-automatic tools to do that.