[cduce-devel] Separate compilation

Stefano Zacchiroli zack at bononia.it
Thu Nov 20 10:55:41 CET 2003


On Thu, Nov 20, 2003 at 01:00:41AM +0100, Alain.Frisch at ens.fr wrote:
> 1. on peut mettre dans un fichier CDuce une déclaration de la forme
> 
>     using M = "blabla"
> 
>    et utiliser par la suite les types et valeurs de l'unité blabla
>    par la syntaxe M:t M:v
> 
> 2. l'unité désignée par la chaine "blabla" fait référence à un fichier
>    blabla.cdo cherché dans une liste de repertoire (spécifiée par l'option
>    -I sur la ligne de commande)
> 
> 3. au moment où un programme est executé, les unités utilisées sont
>    chargées et évaluées dans un ordre qui satisfait les dépendances, mais
>    est difficilement prévisible
> 
> 
> Question:
> 
> Sur le point 1: ok pour la syntaxe? Est-ce que l'on a besoin d'une
> declaration   using M = "..." in expr/type ?   Est-ce que l'on veut
> avoir un using "..." (equivalent d'un open en OCaml)?

Using the "." would be better, but having no longer caseness and having
records it will probably be hard to implement, I don't think is worth
the effort (I haven't looked at the grammar anyway ...).

I've ever felt OCaml "open" as really invasive. I like "using ... in",
but regarding "open" I prefer the Python way, which probably is also the
Java way, but I'm not sure.

The idea is to selectively import functions from modules. Something like
"using foo from M". Next references to "foo", if not found in the current
scope, will be resolved has "M:foo". Also multiple imports at once can
be used "using foo, bar from M".

Just an idea anyway, I see no need in implementing it for the next
release.

> Sur le point 2: je crois que l'on est tous plus ou moins d'accord sur le
> fait que la chaine "..." dans using M = "..." ne doit pas être directement
> interpretée comme un nom de fichier, mais plutôt comme un handle qui
> référence une unité externe, le binding handle->fichier étant fait
> par une table associative externe, stocké dans un ou plusieurs fichiers
> facilement manipulables. Il faudrait préciser tous les details, là.

What about having a default which directly map "module" names to file
names with the _possibility_ of specifying different bindings? It would
be more easy for OCaml users and will let the possibility to do
something else ...

> J'imagine d'avoir typiquement une table "globale" pour les librairies
> CDuce installées globalement sur le systeme (dans /usr/lib/cduce, par
> exemple), une table par utilisateur pour ses propres packages (dans
> ~/.cduce), et une table pour le "projet" courant (dans le repertoire
> courant ou spécifié sur la ligne de commande). Il faut une notion de

I agree. I just found a bit overkilling to have also the ~/.cduce. As I
see it, this is useful for manually installed libraries in the user's
home directory, right?

> Pour le point 3, on peut garder la chose comme maintenant (s'il n'y a pas
> d'effets de bords dans les modules chargés, ce n'est pas genant), ou alors
> faire comme OCaml, qui demande de fournir explicitement toutes les unités
> lors du link, et dans un ordre qui respecte les dependances.

No, I hate side effects during modules loading!

Cheers

-- 
^Stefano Zacchiroli -- Master in Computer Science @ Uni. Bologna, Italy$
^zack@{cs.unibo.it,debian.org,bononia.it} -- http://www.bononia.it/zack$
^Frequentando il mio maestro mi ero reso conto [.] che la logica poteva$
^servire a molto a condizione di entrarci dentro e poi di uscirne -Adso$



More information about the Cduce-devel mailing list