Re: [RFC] Convert builin-mailinfo.c to use The Better String Library.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Andreas Ericsson wrote:
Walter Bright wrote:
1) You wind up having to implement the complex, dirty details of things yourself. The consequences of this are:

a) you pick a simpler algorithm (which is likely less efficient - I run across bubble sorts all the time in code)

b) once you implement, tune, and squeeze all the bugs out of those complex, dirty details, you're reluctant to change it. You're reluctant to try a different algorithm to see if it's faster. I've seen this effect a lot in my own code. (I translated a large body of my own C++ code that I'd spent months tuning to D, and quickly managed to get significantly more speed out of it, because it was much simpler to try out different algorithms/data structures.)


I haven't seen this in the development of git, although to be fair, you
didn't mention the number of developers that were simultaneously working
on your project.

On my project, one. But I've seen this problem repeatedly in other projects that had multiple developers. For example, I used to use version 1 of an assembler. It was itself written entirely in assembler. It ran *incredibly* slowly on large asm files. But it was written in assembler, which is very fast, so how could that be?

Turns out, the symbol table used internally was a linear one. A linear symbol table is easy to implement, but doesn't scale well at all. A linear symbol table was implemented because it was just harder to do more advanced symbol table algorithms in assembler. In this case, a higher level language re-implementation made the assembler much faster, even though that implementation was SLOWER in every detail. It was faster overall, because it was easier to develop faster algorithms.


If it was you alone, I can imagine you were reluctant to
change it just to see if something is faster.

My point was that when I reimplemented it in D, the cost of changing the algorithms got much lower, so I was much more tempted to muck around trying out different ones. The result was I found faster ones.


Opensource projects with many contributors (git, linux) work differently,
since one or a few among the plethora of authors will almost always be
a true expert at the problem being solved.

That is a nice advantage. I don't think many projects can rely on having the best in the business working on them, though <g>.


The point is that, given enough developers, *someone* is bound to
find an algorithm that works so well that it's no longer worth
investing time to even discuss if anything else would work better,
either because it moves the performance bottleneck to somewhere else
(where further speedups would no longer produce humanly measurable
improvements), or because the action seems instantanous to the user
(further improvements simply aren't worth it, because no valuable
resource will be saved from it).

Sure, but I suggest that few projects reach this maxima. Case in point: ld, the gnu linker. It's terribly slow. To see how slow it is, compare it to optlink (the 15 years old one that comes with D for Windows). So I don't believe there is anything inherent about linking that should make ld so slow. There's some huge leverage possible in speeding up ld (spreading out that saved time among all the gnu developers).

So while git may have reached a maxima in performance, I don't think this principle is applicable in general, even for very widely used open source projects that would profit greatly from improved performance.

------
Walter Bright
http://www.digitalmars.com  C, C++, D programming language compilers
http://www.astoriaseminar.com  Extraordinary C++

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux