link statically with libc?

Hal Daume t-hald@microsoft.com
Thu, 7 Aug 2003 08:09:19 -0700


> > I don't know how the Ada guys do it.  Perhaps they have an alternate
> > set of compiled libraries with bounds-checking turned off?
>=20
> Me neither, I've just heard the idea discussed, not the actual
> technology.=20

I know O'Caml does this too (-unsafe as a compiler flag gives you unsafe
array accesses).  I've found in that context, I get as much as a 15%
speedup over not having -unsafe.  Admittedly this is on an extremely
array-intensive application, but it certainly can be a win.

On a related note, I know that the IBM Java compiler (I'm blanking on
the name right now) gets a lot of its speedups over Sun by lifting
bounds checks out of loops.  That is, if you have:

  for (int i=3D0; i<1000; i++) {
    acc +=3D arr[i];
  }

in traditional Sun javac, you get something that basically looks like:

  for (int i=3D0; i<1000; i++) {
    if i outside of arr bounds, throw exception
    acc +=3D arr[i];
  }

but the IBM compiler will lift this out (under certain circumstances --
for instance, if 'acc' is not in scope of the catch) to:

  if 0 outside of arr bounds || 999 outside of arr bounds, throw
exception
  for (int i=3D0; i<1000; i++) {
    // look ma, no checks
    acc +=3D arr[i];
  }

does GHC do anything similar to this, or are we getting hit with array
checks at each and every read/write (modulo, of course, full laziness)?

 - Hal