> Jim Blandy wrote:
> On 1/2/06, Paul Schlie wrote:
>> - at the most basic level, I feel like I've too often needlessly wasted
>>   time debugging programs at one level of optimization, to only see a
>>   different behavior needlessly expressed at a different level of
>>   optimization (which I understand means something isn't portable, but
>>   isn't the correct way to inform one of non-portable code, but is one
>>   hell of a way to unknowingly interject bugs into a program which didn't
>>   exist at a different level of optimization); however if a compiler
>>   supported the means by which a target could define the semantics left
>>   undefined by a language, an optimizing compiler could then both satisfy
>>   the formal constrains of language, while simultaneously enabling target
>>   specific semantics to be supported, and preserved through optimization.
>>   (which seems like a win-win to me)
> 
> Okay, this makes sense to me now.  If there were a switch that changed
> the language from ISO C to a very similar language that actually
> specified a fixed behavior for all the behaviors that ISO C says are
> unspecified or undefined, then you'd have a language that might not be
> possible to compile as efficiently in some cases, but in which every
> program had a unique correct behavior.  (Setting aside inherently
> unpredictable things like threads and signals.)  For example, the
> language would actually have to specify some default value for all
> variables, or require them to be assigned before their first use in a
> way that the compiler could statically verify (as in Java).
> 
> This is what the Java folks were shooting for, if you ignore the
> non-determinism introduced by threads.  Standard ML also specifies a
> particular result for all programs.  If my copies of both those specs
> weren't still packed, I think I could actually find quotes from each
> where they state being fully defined as a goal.  So I think it's clear
> there are a lot of people who think this is a worthwhile principle.
> 
> Paul is combining this suggestion with the further idea that the
> unspecified and undefined behaviors could be tied down in a way
> comfortable for the particular target.  I guess he's trying to reduce
> the performance impact.  That concession would allow the changes in
> behavior that annoy him now when he switches optimization levels to
> re-appear when one switches targets.  The opposite extreme to Paul's
> concession would be to eliminate all target-dependent characteristics
> from the language, including type size differences and alignment
> requirements, yielding a language which specified a unique correct
> result for all programs (again, setting aside threads and signals) on
> all targets.  As ML and Java do.
> Or, there could be a middle ground: you could specify some
> characteristics (say, integral type sizes and wrap-around on overflow)
> for all targets, but leave others (say, pointer size and alignment)
> target-specific.

Yes.



Reply via email to