[Openmcl-devel] Compiler warnings

Ron Garret ron at flownet.com
Sun Oct 18 08:46:50 PDT 2009

On Oct 18, 2009, at 4:26 AM, Taoufik Dachraoui wrote:

>>> In the CL specs
>>> "the specifies that the values[1a] returned by form are of the  
>>> types specified by value-type.
>>> The consequences are undefined if any result is not of the  
>>> declared type."
>>> It is clear that (THE type expr)  specifies the the returned value  
>>> of expr is of type type.
>> No, this is not clear.  The only thing that is clear is just what  
>> it says, that if the result is not of the declared type then the  
>> consequences are undefined.  In CCL, for example:
> Where do you see "not of the declared"?

I believe you meant to ask: where do you see, "Not of the declared  

> Where do you see declared the in the specs?

That is not a grammatically correct English sentence.  But I'm going  
to guess that you meant to write: Where do you see "declared" in the  

> I see "values returned by form".

That's in the first sentence.  Do you see that there is a second  
sentence?  What are the last five words in that second sentence?

> I believe that you missunderstood my concern,

I'm pretty sure that's not the problem.

> I may be wrong
> and I may be right, clear, precise and correct answers may convince  
> me.

I've been as clear and precise as I know how to be.  You, however, are  
being sloppy and lazy.  Did you read the paper that I pointed you to?   
No, you did not, because if you did you would know the answers to some  
of the questions that you continue to ask.

>>> Again the example:
>>> ? (setf z 1)
>>> 1
>>> ? (the fixnum z)
>>> ;Compiler warnings :
>>> ;   In an anonymous lambda form: Undeclared free variable Z
>>> 1
>>> ? z
>>> 1
>>> ? (the fixnum 1)
>>> 1
>>> ?
>>> As you can see, after the SETF z has a value of 1 and (THE fixnum  
>>> 1) does not raise a
>>> warning but  (THE fixnum z) does, this means to me that the THE  
>>> operator does not
>>> merely uses the returned value of z but has something too say  
>>> about z, and this is wrong
>>> I believe.
>> The exact same thing happens with other operators:
> But do you agree that the z defined by SETF is a lexical variable?

No.  Z is not defined by SETF.  SETF doesn't define anything.  The  
fact that CCL creates a place for you when you use SETF on a symbol  
that has not been defined is a hack for the sake of convenience.  It  
is not behavior that is defined by the standard.

>> ? (setf x 1)
>> 1
>> ? ((lambda () x))
>> ;Compiler warnings :
>> ;   In an anonymous lambda form: Undeclared free variable X
>> 1
>> ? ((lambda () 1))
>> 1
>> ? (let ((y x)) y)
>> ;Compiler warnings :
>> ;   In an anonymous lambda form: Undeclared free variable X
>> 1
>> ? (let ((y 1)) y)
>> 1
>> It has nothing to do with THE, it has to do with whether a  
>> reference to an undeclared free variable is passed to the compiler,  
>> which is what generates these warnings.  Again: this has nothing to  
>> do with THE -- except insofar as THE is one construct (among many)  
>> that causes the compiler to be invoked.
> It remains that the THE operator as implemented does not follow the  
> specs.

No.  You are completely and utterly mistaken, and if you keep saying  
that there is something wrong with "THE" then everyone will eventually  
write you off as a troll and an idiot.

Now go do your homework.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.clozure.com/pipermail/openmcl-devel/attachments/20091018/12540c5e/attachment.htm>

More information about the Openmcl-devel mailing list