From: John Cowan <[email protected]>
Subject: Re: [Chicken-hackers] inliner bug
Date: Sun, 10 Mar 2013 19:35:46 -0400

> Felix scripsit:
> 
>> By adding the "inline" declaration, you are effectively disabling
>> this size test, telling the compiler:   "Inline this! Always! Now
>> go and do what I command!"
> 
> That's ... just wrong.  An inline declaration should be a SHOULD,
> not a MUST.  In particular, the compiler should at a minimum detect
> that it is recursively inlining and stop.  A notinline declaration,
> on the other hand, must be a MUST.  This is what Common Lisp says:
> the compiler can always ignore an inline declaration, but a notinline
> declaration is the only one (apart from a special-variable declaration,
> which affects semantics) that MUST NOT be ignored.

It is irrelevant what Common Lisp says - a declaration can nearly
always be considered a SHOULD, and a compiler may very well decide to
inline something which has been declared notinline if it can prove
that the semantics don't change. Declarations do not work on the
language level anymore (and that particular case your mentioning -
special declarations - can be considered one of the most spectacular
warts of CL), they are just hints to the implementation. 

So the question is rather: what is more intuitive or what may actually
confuse the user? And on that line of argument I agree with you
completely that the current behaviour is not that great.

Recursive inlining may be desired, BTW. In a TCO-optimized language
this is the same as loop-unrolling.


cheers,
felix

_______________________________________________
Chicken-hackers mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-hackers

Reply via email to