I'm sitting inside my new hostel room this morning, typing up this entry. You see, when I arrived here on Wednesday, the hostel didn't have a single private room, so they stuck me in a nice double room. Now I'm in a small, dingy, dark private room in the attic of their building. It's not as nice, but it was still a good place to sleep. Thanks to some kind soul with a D-Link wireless access point, I can access the Internet.![]()
Day two of the Summit was not as interesting as the first. I found that the presentations just weren't as well prepared, nor were the topics as interesting. Jeff Bailey had showed up overnight, and he told me that he had noticed this as well. In fact, at Debconf 4, he gave a talk on Effective Presentations to the speakers, and Andrew Hutton is considering having Jeff go do thesame for OLS.
Of the presentations that I saw, I think there were only three interesting ones. The others seemed to be about small optimisations that could be performed at the RTL level, and were probably being made redundant by the new SSA form.
Paolo Carlini spoke in the morning about libstdc++-v3 and how far it has come. Now I know how difficult it is to implement a fast and good C++ library, and so their work is pretty impressive. However, their benchmarks were sort of weak, and it is probably due to their lack of manpower.
In the afternoon, Mostofa Hagog talked about Swing Modulo Scheduling, and how you can do partial-loop unrolling to keep a processor's ALUs as full as possible. His algorithm is very interesting, and it seems like it will make GCC perform nicer on modern processors, without significantly increasing code size.
The last talk of the day was by Zdenek Dvorak, who talked about declarative programming languages, and how GCC needs to look at their optimisations. Sadly, many of the things that declarative languages can do are outside the scope of a C compiler, but there are certain things, like tail-call elimination, that could be handled by GCC. For example, code could be turned from recursive into interative. Just take the following function:
int f (int x)
{
if (x <= 0) then
return 1;
else
return g (x, f (x-1));
}
and turn it into:
int f (int x)
{
if (x <= 0) then
return 1;
r = 1;
for (int ax = 0; ax != x; )
{
ax++;
r += g (ax, r);
}
return r;
}
which is much tighter. This optimisation can only really be done for a specific type of function, but is currently not handled by GCC.
We then had a nice GPG keysigning, again managed by Matthew Wilcox. I've got a whole bunch of keys to sign, and a new group of people verify my key. By the time I leave OLS, I should be very well connected.
The last session of the day was a BOF session about the future of the GNU C Library. Jakub Jelinek, one of the GLibC Steering Committee members was in attendence, so a bunch of distributors and GCC hackers met with him to air their concerns about how GLibC development was proceeding. Jakub promised to talk to Roland McGrath and Ulrich Drepper about it. Ange also volunteered to ask Ulrich to come ot the Summit next year.
After this, we headed off to dinner at Wasabi, a nice Japanese restaurant here. I had two rolls, the names of which I have forgotten, which were tasty; but unremarkable. I think they were too squishy, without the requisite texture. Ah well.
Now I should head to the conference centre so I can get some breakfast in me. Sadly, it seems that Mr. Wireless has taken his access point off-line, or the air pressure has changed and I'm no longer in his range. Ooh! It's back again. I just have to tilt the wireless card upright. Time to upload this entry.

Comments
You are correct, it is not just a C compiler anymore. Granted, these constructs could probably optimised in the same way across C++, Objective-C, FORTRAN 77, Fortran 90, etc... But really, aren't my examples easier to read than if I wrote it in some other language?
I really mean that it's outside the range of a procedural compiler, where the inherent semantics are not available.
For instance, GCC has no idea if you are iterating over a data structure to find something, or iterating over it to apply some transformation.
return g ( 1, f(1-1));
in the first exampe but:
r = g(0,1);
in the second.
I think you want:
r = x;
for (int ax = 0; ax != x; ) {
r += g(r, ax);
ax++;
}
return r;
I'm assuming += otherwise the value of r can be thrown away.
Though I could be wrong.
Anand (at) Debian. You'll figure it out if you care to respond.