From: Joshua Maurice on
On Jun 22, 4:48 pm, n...(a)cam.ac.uk wrote:
> In article <b7mdnUm0cN66woLRnZ2dnUVZ_vmdn...(a)giganews.com>,
> >I am thinking that a focus on speed may be most appropriate when speed
> >directly impacts response time, and the user is idle while waiting for
> >the response. This is increasingly more important depending on the
> >number of users, the duration of the response time, and the cost of the
> >user's time.
>
> >Millions of software engineers waiting several minutes for a compiler to
> >finish (10-100 times a day) would seem to provide a good example of a
> >great need for very fast execution.
>
> Definitely NOT. If they spend more than a few percent of their time
> compiling, someone has got it badly wrong. Again, that was not so
> 40 years back, but please let's move on!

I'm curious where you have worked where this is the case. First, to
define terms, a good incremental build cascades the build down the
dependency graph and has a termination condition to end the cascade
early. In my current employment, I spend a significant part of my day
waiting on the build. (~1-2 hours for a clean compile \without tests\
on a fast developer computer.) The build is hopelessly not good
incremental. (I hate you Maven.)

Moreover, as I'm trying to discuss here
http://groups.google.com/group/comp.lang.c++/browse_thread/thread/c830c7c07951f4a6#
to no avail, as far as I can tell, all build systems in common use
today under idiomatic usage are not incrementally correct. All of
them. GNU Make, Ant, Maven, cook, bjam, etc.

I agree with "If they spend more than a few percent of their time
compiling, someone has got it badly wrong". However, I'm not sure this
is the actual way things are commonly done. I've only had minimal
experience relative to others here, but currently I spend quite a bit
more than "a few percent" of my time compiling (and running [unit /
acceptance / integration / regression / checkin / whatever] tests). I
wonder how other companies do it.

> I will agree that a lot of the time the people who have got it badly
> wrong are the language and library designers and implementors. With
> both C++ and (modern) Fortran, recompiling a very small amount of
> code can take a disproportionate time. But that's NOT an argument
> for optimising the code, but of simplifying the (language) design
> to allow for genuinely incremental compilation.

I think that's not quite true for C++. To get acceptable build times,
first, get an actual correct incremental build system, and then apply
pimpl at crucial junctures to remove lots of edges from the dependency
graph. Voila: a correct incremental build where a small change will
usually result in a small (incremental) build time, or at least one
proportional to the size of the change and not to the size of the code
base.

The problem is I just can't find anyone who really cares about
creating an actual correct incremental build system. The rest of it is
well known, but serious incremental correctness is almost unknown and
unstudied as far as I can tell.


--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]

From: nmm1 on
In article <3d6809b5-d599-4aec-ae96-572fee14829d(a)t13g2000prf.googlegroups.com>,
Joshua Maurice <joshuamaurice(a)gmail.com> wrote:
>On Jun 22, 4:48 pm, n...(a)cam.ac.uk wrote:
>> In article <b7mdnUm0cN66woLRnZ2dnUVZ_vmdn...(a)giganews.com>,
>> >I am thinking that a focus on speed may be most appropriate when speed
>> >directly impacts response time, and the user is idle while waiting for
>> >the response. This is increasingly more important depending on the
>> >number of users, the duration of the response time, and the cost of the
>> >user's time.
>>
>> >Millions of software engineers waiting several minutes for a compiler to
>> >finish (10-100 times a day) would seem to provide a good example of a
>> >great need for very fast execution.
>>
>> Definitely NOT. If they spend more than a few percent of their time
>> compiling, someone has got it badly wrong. Again, that was not so
>> 40 years back, but please let's move on!
>
>I'm curious where you have worked where this is the case. First, to
>define terms, a good incremental build cascades the build down the
>dependency graph and has a termination condition to end the cascade
>early. In my current employment, I spend a significant part of my day
>waiting on the build. (~1-2 hours for a clean compile \without tests\
>on a fast developer computer.) The build is hopelessly not good
>incremental. (I hate you Maven.)

As I said, someone has got it badly wrong. I didn't say who!

Getting it right is not easy, and has to start with the language
standard, include the implementation, and continue onto the way
that the language is used (i.e. the program is designed). But it
is possible.


Regards,
Nick Maclaren.

--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]