Error message format (was Re: modules local to functions.)

Christian Boos (boos@gr6.u-strasbg.fr)
Wed, 10 Jan 96 18:08:00 +0100

Date: Wed, 10 Jan 96 18:08:00 +0100
From: boos@gr6.u-strasbg.fr (Christian Boos)
Message-Id: <9601101708.AA00556@gr6.u-strasbg.fr>
To: Xavier Leroy <Xavier.Leroy@inria.fr>
Subject: Error message format (was Re: modules local to functions.)
In-Reply-To: <199601101527.QAA22663@pauillac.inria.fr>
<199601101527.QAA22663@pauillac.inria.fr>

Xavier Leroy writes:
> Christian Boos replied:
>
> > My understanding is that YOU CAN'T do that in CSL at all: functor
> > application means code generation, and there's no runtime code
> > generation!
>
> This is wrong. Functors are compiled once and for all, and functor
> application proceeds exactly as function application.
>

[poor english version]

Hello,

C++ has twisted my mind...

I would make a suggestion about the information given by the
compiler when there is a mismatch between an interface and an
implementation.
Usually, it ends up with something like :

Values do not match:
val f : t1 -> t4 -> t5
is not included in
val f : t1 -> t2 -> t3

(for example)

My point is that it would be usefull to be more precise, that is, to
say if the error is with t1 not included in t1, or t4 not included in
t2, ...

Bye.

--------------------------------------------
Bonjour,

Autant pour moi ! Ca m'apprendra a raisonner par analogie avec des
langages d'outre-tombe (C++) plutot que de lire le code de CSL avant
de parler ...

Au passage, je profite de ce mail pour faire une petite suggestion
concernant le message d'erreur genere lorsqu'il y a incompatibilite
entre l'implementation et l'interface d'un module.

Le message se termine usuellement en donnant une incompatibilite de
type ou une incompatibilite de valeur. Dans le cas des fonctions, ne
pourrait-il pas ajouter la localisation precise de l'erreur ?

Par exemple, on specifie "sig val f : t1 -> t2 -> t3 end"
et dans l'implementation on construit une fonction f ayant un type
"val f : t1 -> t4 -> t5", avec t4 non compatible avec t2.
Au lieu de s'arreter dans son message d'erreur a "val f : ... is not
included in val f : ...", il pourrait dire en plus "t4 is not included
in t2".

Ceci me semble tres utile car j'ai passe une apres-midi a essayer de
localiser une erreur de ce type, tout simplement parce que dans mon
cas, t4 et t5 etaient des types complexes (generes par des foncteurs)
que j'avais de facon alambiquee contraint a etre egaux a t2 et t3.
Je pensais donc que l'erreur venait de la ... alors qu'il s'agissait
d'une erreur toute bete entre t1 et t1 (memes noms, types differents),
erreur qui aurait ete localisee tout de suite si j'avais eu un message
comme en caml-light (la fameuse erreur "This expression has type foo,
but is used with type foo").

Amicalement,

Christian