[Ecls-list] Status of CVS
Juan Jose Garcia-Ripoll
jjgarcia at users.sourceforge.net
Tue May 13 09:11:45 UTC 2008
On Tue, May 13, 2008 at 10:44 AM, Tobias C. Rittweiler <tcr at freebits.de> wrote:
> There _is_ a difference between using declarations-as-assertions and
> using explicit CHECK-TYPE forms: type propagation.
> (defun foo1 (s)
> (declare (type symbol x))
> (frob s))
> (defun foo2 (s)
> (check-type s symbol)
> (frob s))
> A compiler can safely assume that FOO1's parameter has the type SYMBOL,
> while it must resort to give FOO2's parameter the type T. Assuming that
> type violations will be checked for statically, the first way is
> obviously superior, especially during development.
Actually, this is not what I have seen routinely. In the first case,
the user is _free_ to pass a wrong value to that function.
Consequences are completely unspecified. You may get an error, you may
get a segmentation fault, etc. This is what I experience with the
functions in the pretty printer when subject to the error checking
routines in Paul Dietz.
My feeling is that there are two lines of thought: that type
declarations are not binding, or that they are, and this strongly
depends on the behavior of the compiler.
However, check-type is way superior in that it will always enforce the
type. The compiler can assume that _after_ the call to check-type, the
type of the variable "s" will be the expected one. Indeed, this is one
of the optimizations I have in mind.
Facultad de Fisicas, Universidad Complutense,
Ciudad Universitaria s/n Madrid 28040 (Spain)
More information about the ecl-devel