Related articles |
---|
The quest for the optimal calling convention; a model for specifying m jsykari@gamma.hut.fi (Antti Sykari) (2003-01-12) |
Re: The quest for the optimal calling convention; a model for specif fjh@cs.mu.OZ.AU (2003-01-17) |
Re: The quest for the optimal calling convention; a model for specifyi jsykari@kosh.hut.fi (Antti Sykari) (2003-01-25) |
Re: The quest for the optimal calling convention; a model for specifyi strohm@airmail.net (John R. Strohm) (2003-01-26) |
Re: The quest for the optimal calling convention; a model for specifyi rodney.bates@wichita.edu (Rodney M. Bates) (2003-01-27) |
Re: The quest for the optimal calling convention; a model for specif strohm@airmail.net (John R. Strohm) (2003-01-29) |
Re: The quest for the optimal calling convention; a model for spe rodney.bates@wichita.edu (Rodney M. Bates) (2003-02-05) |
Re: The quest for the optimal calling convention; a model for specifyi strohm@airmail.net (John R. Strohm) (2003-02-11) |
From: | "John R. Strohm" <strohm@airmail.net> |
Newsgroups: | comp.compilers |
Date: | 11 Feb 2003 01:19:10 -0500 |
Organization: | Compilers Central |
References: | 03-01-065 03-01-070 03-01-126 03-01-164 03-01-169 03-01-172 03-02-007 |
Keywords: | design, storage |
Posted-Date: | 11 Feb 2003 01:19:10 EST |
"Rodney M. Bates" wrote:
> All true. But the situation I was complaining about
>
> 1) Happens even in the absence of interrupts, other threads, etc., and
True.
> 2) Can be fixed without outlawing aliasing or non-local references,
> by just specifying in the langauge, what the parameter transmission
> mechanism is.
Maybe so, but allowing aliasing and/or non-local references breaks a
lot of other things.
The problem with allowing aliasing and/or non-local references is that
it destroys all possibilities for optimization AND verification,
because the most fundamental assumption under serious optimization is
that variables don't change unless the programmer changes them.
Consider the following contrived code fragment in C
void foo(int *a, int *b)
{
*a = 1;
*b = 2;
if (*a == 1) {
printf("Win\n");
} else {
printf("LOSE BIGTIME!\n");
}
}
If the language outlaws aliasing, this immediately simplifies to
void foo(int *a, int *b)
{
*a = 1;
*b = 2;
printf("Win\n");
}
However, if aliasing is allowed, and we do
foo(&baz, &baz);
then we don't know what will be printed and we may not know what value baz
will have afterwards.
The same things happen with non-local references. If we call a
procedure in the middle of another procedure, the value of ALL
non-local variables become unknown, and no optimization can proceed
across the procedure call. On the other hand, if non-local references
are outlawed, then only those variables that may be altered by the
procedure call can possibly be affected by the call, and the compiler
can keep the rest of his optimizations alive.
In short, allowing aliasing and non-local references is a BAD THING.
Return to the
comp.compilers page.
Search the
comp.compilers archives again.