public inbox for gcc@gcc.gnu.org
 help / color / mirror / Atom feed
* Re: "Documentation by paper"
@ 2004-01-27 19:43 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 19:43 UTC (permalink / raw)
  To: law; +Cc: gcc

    And totally useless unless one goes into the source code to read it.

I think you're making that statement irrespective of the formatting of
the comments and I agree.

    IMHO that's actually a huge long term liability as it actually
    discourages writing good API interfaces and documenting them, while at
    the same time encourages developers to actually look at the
    implementation to determine if the code in question actually does what
    they want.

I'm not sure what "that" means in your first line above.

The problem I have with automatic documentation systems is that they
encourage a "fill in the checklist" mentality to documentation.  In other
words, programmers tend to feel that since they've filled in all the blanks,
they've written good documentation. Lots of industrial code looks that way.

But actually the quality of documention can't be measure by any metric.  The
ideal documentation is what's needed to explain the code. Less than that
isn't sufficient, but more than that adds clutter.  No mechanical system can
create that quality of work.  There are 500-line functions that are totally
clear without any comments and where adding comments is clutter and there are
10-line functions that need a few paragraphs of comments.

Writing quality documentation is an art, much like writing good code.
Mechanizing things doesn't help.  It's far easier to do a good job
documenting a function if you're writing a paragraph consisting of English
sentences than filling in the blanks.

For example, if I have a function with four parameter named FIRST1, LAST1,
FIRST2, and LAST2, simply saying "The four parameters are the ranges of two
insn chains that we are comparing" is completely fine to document what the
parameters to.  Writing:

	* @param first1 RTL pointer to head of insn chain 1
	* @param last1  RTL pointer to tail of insn chain 1
	* @param first2 RTL pointer to head of insn chain 2
	* @param last2  RTL pointer to tail of insn chain 2

actually says *less* than the above sentence and is a *huge* amount of
totally unnecessary clutter.

    Now having said that, I've never liked reading doxygen annotated
    comments; I find the annotations make the comments harder to read.
    Unfortunately, I don't have a better solution.

To what problem?


Also, can I take this discussion of annotations to mean that everybody agrees
with my original message about using papers and textbooks as substitutes to
documentation?

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-09 19:05 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-09 19:05 UTC (permalink / raw)
  To: pkoning; +Cc: gcc

    An internals manual has indexing (or at least it can, and should).
    How do you do that in code docs?

You lost me.

    In my experience, a major problem with gcc -- unless you've been
    working on it full time for at least 5 years -- is that it's so
    complex that it's nearly impossible to get started.  The internals
    manual helps a little, though its indexing and cross-referencing isn't
    nearly good enough.  If the internals manual is deprecated in favor of
    /* ... */, I fear this problem will get much worse, not better.

I haven't heard anybody say it's "deprecated".  The point, though, is that
the code documenation will always need to be more detailed than an internals
manual. This is usually true for even overview documentation.  Some person,
not a tool, needs to figure out what information to include in the
internals manual, how to present it, and how to index it.  That person has
all the code documentation as material to use for the manual, but presumably
would want to both edit and reformat it.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-09 18:55 Richard Kenner
  2004-02-09 18:59 ` Paul Koning
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-09 18:55 UTC (permalink / raw)
  To: zack; +Cc: gcc

    Weird, I thought you didn't like extracting documentation from the
    source code.

I don't like *automated* extraction, but there's nothing wrong with a human
rewriting code documentation to the level appropriate for an internals manual.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-09 18:52 Richard Kenner
  2004-02-09 18:54 ` Zack Weinberg
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-09 18:52 UTC (permalink / raw)
  To: zack; +Cc: gcc

    Are you advocating that there should be no internals manual?  I can
    see an argument for "no internals manual is necessary, just use
    comments in the code", and I can see an argument for "every internal
    interface should at least be mentioned in the internals manual", but
    not for some limbo state where there's no way to know if something is
    in the manual or not.

No.  I'm advocating that the *primary* documentation should be in the
source code and that any documenation (internal or external) should be
derived from there, not vice versa.

    Your original patches don't contain much in the way of documentation,
    either.

What happened here was that the original implementation had few enough
functions that there wasn't a need for anything other than the localized
documentation, but then things grew to the point where it was indeed needed
and I never went back and added it.  I will do so soon.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-09 18:37 Richard Kenner
  2004-02-09 18:45 ` Zack Weinberg
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-09 18:37 UTC (permalink / raw)
  To: zack; +Cc: gcc

    You invented MEM_ATTRS and the adjust_address family of functions.
    There is not one word about these things in doc/*.texi.  

I don't believe they should be there, but they should indeed be *somewhere*.

    Write documentation for all this, to the standard you are advocating,
    and let us see if it's good enough.

Fair enough, though there was stuff added after I did the original work.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-09 18:28 Robert Dewar
  0 siblings, 0 replies; 171+ messages in thread
From: Robert Dewar @ 2004-02-09 18:28 UTC (permalink / raw)
  To: dberlin, dewar; +Cc: gcc, jamie, kenner, law, paolo.bonzini, peter

To: dberlin@dberlin.org, dewar@gnat.com
Subject: Re: "Documentation by paper"
Cc: gcc@gcc.gnu.org, jamie@shareable.org, kenner@vlsi1.ultra.nyu.edu,
    law@redhat.com, paolo.bonzini@polimi.it, peter@the-baradas.com

> No, and you've missed my point.
> The paper on the exact algorithm we implement claims they help.
> With an implementation implemented *EXACTLY* according to this 
> algorithm, they do not help.
> That is all.
> It has nothing to do with an implementation difference.

Again, remember that this thread is about documentation. This is indeed
an interesting observation, and most certainly something that should be
in the documentation. Just referring to the paper (see subject line
above) would be quite misleading if the paper implies that they help
but the implementation does not use them because of evidence that the
paper is wrong at that stage.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-09 18:20 Robert Dewar
  0 siblings, 0 replies; 171+ messages in thread
From: Robert Dewar @ 2004-02-09 18:20 UTC (permalink / raw)
  To: Joe.Buck, kenner; +Cc: gcc, law

> Almost all the differences in the standard compiler terms (for example,
> dominators) that have been mentioned in this discussion, or that I have
> observed, are the difference between < and <= : a partial order relation
> is defined, and some texts use the < form and others use the <= form.
> The texts that use the <= definition usually then use some adjective like
> "strict" or "proper" to get the corresponding < definition.

The definition of basic blocks also varies somewhat. CS in general
suffers from a lack of absolutely well defined terminology, both for
data structures and for algorithms (for instance for some people quicksort
inherently includes the in place exchange algorithm, for others the
essence is only the arbitrary division, and the exchange is a data
structure detail). It never does any harm to define terms :-)

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-09 17:19 Richard Kenner
  2004-02-09 18:14 ` Joe Buck
  2004-02-09 18:34 ` Zack Weinberg
  0 siblings, 2 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-09 17:19 UTC (permalink / raw)
  To: law; +Cc: gcc

    But again, why bother when there are already things like wikipedia and
    numerous texts which already define these basic terms.  Other folks
    have already defined these basic terms, probably in better verbage
    than we'd come up with.  Why recreate the wheel?

Once again, because:

(1) There are usually subtle differences between the definitions in these
"numerous texts" and we need to be specific which one we need.

(2) If you're taking some code to read on a plane (or similar), you
don't have access to "things like wikipedia and numerous texts".

(3) We have to explain our datastructures and functions anyway and
it's simpler to do so as part of a definition or explanation than
just referencing one and trying to stitch things in.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-05 20:09 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-05 20:09 UTC (permalink / raw)
  To: felix.1; +Cc: gcc

    > How could I possibly write documentation on code that I need
    > documentation to understand?  Any documentation I could write would
    > be totally useless!

    why do you say that?  I think it's generally not that hard to
    approach unfamiliar code and add documentation when I figure out
    what it's doing.

Yes, you can often add missing comments in the body of a function, but the
really important comments, as Robert says, are *why* things are done the
way they are done and what it *intended* to be done.  All you're ever
going to be able to figure out is what *is* being done no matter how
long you look at the code.


    /* Write a function, `added_clobbers_hard_reg_p' this is given an insn_code
       number that needs clobbers and returns 1 if they include a clobber of a
       hard reg and 0 if they just clobber SCRATCH.  */

    I don't have much idea what that comment means, mostly because the
    function name 'added_clobbers_hard_reg_p' doesn't make sense to me.  I
    don't know what the 'added' refers to.

Ooops.  Typo: "this is given" should be "that is given".

    that was also a change you made.  so, starting from the assumption
    that you're not an idiot, I can work on reconstructing your logic,
    which involves looking at insn_invalid_p's callers, digging into
    mailing list discussions, asking you, etc.  after doing all that, I
    could submit patches that summarize what I find, so other people don't
    have to go through the same investigative process.  but all that's too
    much work right now.  I have other things I need to do.  maybe later.

Yes, but note that all of that is about *one* comment on *one* function.
The major issue here isn't the comments on individual comments, but
missing multiple paragraphs that explain an overview of how things
are supposed to work.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-04 18:05 Richard Kenner
  2004-02-04 18:58 ` Joe Buck
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-04 18:05 UTC (permalink / raw)
  To: Joe.Buck; +Cc: gcc

    In my experience, the best documention is written by someone with good
    technical writing skill as well as some programming knowledge who
    initially doesn't understand the code, but who learns what he or she needs
    to know by a dialog with the author.  

I agree you can develope *adequate* documentation that way, but strongly
disagree that it's the *best*.  When you do this after-the-fact, the author
will likely have forgotten many things that were important to have known
when writing the code.  Also, it's very hard to really find out everything
significant in this "game of 20 questions" approach.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-04 14:35 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-04 14:35 UTC (permalink / raw)
  To: matz; +Cc: gcc

    And still Kenner states the obvious again and again instead of
    helping.  Note that you do a similar thing.  _That_ is my point.

There's no way anybody other than the original author can "help" with the
missing documentation because the documentation, to be useful, must contain
things that *aren't* in the code, and nobody else can know those things.

Moreover, the reason I complain about things is that I don't understand them
because they aren't sufficiently documented (note that none of these to date
have involved tree-ssa code since I haven't looked at it yet).  Given that I
can't understand it, how can I possibly "help" with documenting it?

That's why it's so critical that we enforce standards before code is
committed into the main tree.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-04 14:08 Richard Kenner
  2004-02-04 17:50 ` Joe Buck
  2004-02-05 19:57 ` Felix Lee
  0 siblings, 2 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-04 14:08 UTC (permalink / raw)
  To: matz; +Cc: gcc

    > The problem is that it doesn't get done!
    
    Thank you for all the nice documentation patches you send instead of
    wasting time by repeating the same rant over and over.  They help
    tremendously to resolve this situation.

How could I possibly write documentation on code that I need documentation
to understand?  Any documentation I could write would be totally useless!

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-04 13:20 Richard Kenner
  2004-02-04 13:49 ` Michael Matz
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-04 13:20 UTC (permalink / raw)
  To: felix.1; +Cc: gcc

    well, that's true for pretty much any word in any natural language.
    it's generally expected that people can resolve ambiguities from
    context (even in math papers).  and in programming, the actual program
    is usually a pretty strong disambiguator.

It most certainly *is not*!  The problem is that programs are not perfect and
may have bugs.  The whole purpose of the documentation is to describe what
the program is *supposed* to do.  If you don't have the details of what it's
supposed to do, you can't tell if it's correct or not.

And these subtle variations in definition are precisely the places where
bugs will reside!

    everyone already agrees that readable code is a good thing.  it
    isn't hard to handle that on a case-by-case basis.  "it took me a
    while to figure out what this meant.  how about this patch for
    clarity?"

The problem is that it doesn't get done!  I've sent about a half dozen of
such messages and in only *one* of those cases did anybody do anything
about it.

That's why we need strict documentation standards that are enforced *before*
code is accepted.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-04 13:10 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-04 13:10 UTC (permalink / raw)
  To: dalej; +Cc: gcc

    While I have no wish to discourage anyone from improving the
    documentation (and I'm curious how many people on this thread
    are actually doing so), I think you exaggerate the dangers.
    "block" means different things to FE people and BE people,
    and there are places where it isn't obvious which is meant until
    you grovel through the code a bit, and we've all been coping with
    it for years.

And that's a *good thing* that we should seek to emulate in the future?

As I said, the lack of good definition of "block" and "edge" as used in
the CFG code makes that code very inaccessable and very hard to maintain
since it's not clear what the intent of a lot of the code is.

This most certainly needs to be cleaned up!

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 16:57 Richard Kenner
  2004-02-03 22:22 ` Robert Dewar
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-03 16:57 UTC (permalink / raw)
  To: law; +Cc: gcc

    I would disagree strongly.  dominators, dominator tree, SSA, value
    numbering, loop tree are quite well known within the compiler
    community.  In fact, I would hazard a guess that it's probably just
    some GCC folks that don't have a firm grasp on these concepts.  They
    are what I would consider basic terminology and concepts for anyone in
    this field.

I'd also expect "symbol" and "context-free grammers" to be well known among
the CS community that would use Bison, but their manual defines them.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 16:56 Richard Kenner
  2004-02-03 17:13 ` Lars Segerlund
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-03 16:56 UTC (permalink / raw)
  To: law; +Cc: gcc

     >Correct.  My last compiler course was well over a decade ago.
    How is that relevant?

It acknowleged the statement made.

    At some point you have to assume a base level of knowledge for your
    reader.  Are we going to define CFG in every file which uses the CFG?

No, but we need to in *some* file.

    Are we going to define the basic properties of SSA in every file which
    uses that form? 

Likewise.

    Hmm, wait, you have to know what blocks and edges are to understand
    what a CFG is, so every file which uses the CFG has to also define
    blocks & edges.

No, but *something* needs to.  In fact, it's very important to define
what a "block" is because the definition is quite complex and depends on
such things as whether -fno-call-exceptions (or whatever it's called) is
enabled.  Indeed, there has ben considerable confusion about how jump
tables fit into blocks.

In it's simplest form, edges can be defined in one sentence.  But actually
need a lot more than that because of all the special edge types we define
for EH, for example.

Indeed I find the CFG code very hard to read (and even harder to modify)
precisely because these things are *not* defined.

So you have chosen a good example!

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 16:37 Paolo Bonzini
  0 siblings, 0 replies; 171+ messages in thread
From: Paolo Bonzini @ 2004-02-03 16:37 UTC (permalink / raw)
  To: Richard Kenner; +Cc: gcc

> Yes, but a *user* of bison is usually a compiler writer!

I used bison in the project for an image processing course.  I documented
why my grammar has shift-reduce conflicts; but not why I used
corner-reflection to implement image convolution, only that I implemented
it.

Paolo




^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 16:28 Richard Kenner
  2004-02-03 22:06 ` Robert Dewar
  2004-02-04  2:56 ` Russ Allbery
  0 siblings, 2 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-03 16:28 UTC (permalink / raw)
  To: s.bosscher; +Cc: gcc

    The difference here is that you are talking about a bison _user_
    manual.  This discussion was, AFAICT, about GCC internals
    documentation.  I honestly don't believe that anyone working on
    compiler optimizations does now know/understand the concept of
    dominance, or DFA, and so on. These are just computer science
    fundamentals.  A user doesn't have to understand them, but any
    compiler writer should.

Yes, but a *user* of bison is usually a compiler writer!

    I would like better internals/interfaces documentation too.  But I'd rather
    focus on GCC specific implementation details than on terminology and basic
    algorithms and concepts.

I agree with the *focus*, but I think both can be done and the documentation
will read a lot smoother if its spend the time to discuss the terms it's
using.  It will at least serve as reminders and also help tie the details of
the implementation into the theory.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 16:20 Richard Kenner
  2004-02-03 16:54 ` Jan Hubicka
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-03 16:20 UTC (permalink / raw)
  To: paolo.bonzini; +Cc: gcc

    Everybody with less than guru knowledge of gcc asks, why.  And why CSE
    propagates addressof into memories.  And who takes care of it for
    nonoptimizing compilation.  And whether it is even needed for
    nonoptimizing compilation.  And the flow of thought goes on.

Indeed.  The ADDRESSOF addition was one that gave GCC a lot of
trouble, precisely because of the issues you raise, that its semantics
were very poorly defined.

I see that as cautionary that we need to do better in the future, not
as something to emulate into the future!

    Passes that are developed right now, especially as part of the
    tree-ssa work (but also Jan and Zdenek's rtlopt work), work at a
    different, more generic level, and require a different kind of culture
    on the reader.

Perhaps, but we have to be very careful of setting too high a level of
knowlege to know to be able to work on GCC.  Sure, if you're working on
subtle parts of these algorithms, you need to understand them "cold", but
an overview description is essential for those doing minor work in these
files.

As I said, the Bison manual even defines the term "symbol".  That sort of
approach seems the appropriate one to me.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 16:16 Richard Kenner
  2004-02-03 16:23 ` Steven Bosscher
  2004-02-03 16:38 ` law
  0 siblings, 2 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-03 16:16 UTC (permalink / raw)
  To: s.bosscher; +Cc: gcc

    You can leave out an explanation of what a dominator is and still
    be self-contained.  

Not in the sense that it has been in the past.

    What's next, do we have to explain what a finite automaton is in the
    sources of GCC?

It's always hard to know where to draw the line, but it would seem to me that
in any case where you have a finite automaton, the description of the
automaton itself would almost serve as a definition-by-example of the term.

As an example of the sort of thing I'd expect to see, look at the Bison
manual.  Not only does it not simply leave "LALR(1)" to be looked up (and
that's a much more well known term than those previously mentioned), it even
defines "context-free grammar" and "symbol".

I think that manual sets a good standard for GCC documentation and we should
do at least as much as it does.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 15:48 Richard Kenner
  2004-02-03 16:00 ` Steven Bosscher
                   ` (2 more replies)
  0 siblings, 3 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-03 15:48 UTC (permalink / raw)
  To: paolo.bonzini; +Cc: gcc

    Which you have never read (at least a modern one), if you do not know
    what a dominator is.  My first compiler course, which used only part
    of Appel's "Modern compiler implementation" (which is nowhere near in
    depth with respect to Muchnick or Morgan) did teach dominators.

Correct.  My last compiler course was well over a decade ago.

    I'd love gcc to become a free compiler text, but it is not its purpose.

Of course not, but it's always useful to define each term used at least
to some extent.  GCC has always been pretty self-contained and I see no
reason to change that policy at this point.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 15:40 Paolo Bonzini
  2004-02-03 21:21 ` Robert Dewar
  0 siblings, 1 reply; 171+ messages in thread
From: Paolo Bonzini @ 2004-02-03 15:40 UTC (permalink / raw)
  To: kenner; +Cc: law, gcc

> > I assume that everyone knows what dominators and post-dominators are?
> > What about a dominator tree?  Value numbering? SSA form?  How using
> > value numbering on the SSA form during a dominator walk gives us
> > redundancy elimination on an almost-global scale without the need to
> > invalidate values from our hash tables?

I'd expect something like this to suffice [just guessing, this is not about
the actual tree-ssa code]:

"The value numbering pass builds on a simple dominator tree walk.  We go
through every available expression and put it into a hash table ("we give it
a number").  In the dominator tree, blocks higher in the tree must execute
before their children: thus, visiting it pre-order assures that all the
available numbered expressions are already in the hash table.  Using SSA
form, we can avoid building def-use/use-def chains, and find redundant
expressions without invalidating the values into the hash table; we only
remove the expressions from the hash table when we have visited all the
dominated blocks.

Note that the redundancy elimination is not really global because..."

I can presume that SSA form is documented (at least briefly) in the
convert-to-SSA pass.  I would not document the algorithms for convert-to-SSA
though, these are available in compiler texts without substantial flaws.
Value numbering is actually quite trivial, so no paper reference may even be
necessary, but it may be different for SSAPRE or points-to analysis.

> I can't answer for people in general, but I don't know what *any* of those
> things are and I would expect to see at least a definition of any of those
> terms in adequate documentation.  Of course, the documentation can't
> substitute for a good compiler text,

Which you have never read (at least a modern one), if you do not know what a
dominator is.  My first compiler course, which used only part of Appel's
"Modern compiler implementation" (which is nowhere near  in depth with
respect to Muchnick or Morgan) did teach dominators.

I'd love gcc to become a free compiler text, but it is not its purpose.

Paolo



^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 12:20 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-03 12:20 UTC (permalink / raw)
  To: joern.rennecke; +Cc: gcc

    That's not a formal specification, but an informal description, just
    as we have in our comments right now.  In fact, our current comment
    goes into a little detail than that, although it is still necessarily
    incomplete.

We're talking about "informal description".  The term "specification" is not
a shorthand for "formal specification", but for "interface specification".

    You couldn't use either of these descriptions to tell you all you need
    to implement the function separately.

Of course not, but that's not its purpose.  The documentation of the
interface says what you have to know to *call* the function, not to
implement it.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03 12:12 Richard Kenner
  2004-02-03 16:46 ` Felix Lee
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-03 12:12 UTC (permalink / raw)
  To: law; +Cc: gcc

    Though sometimes it is difficult to find a more concise way to
    describe the algorithms than is found in the references.  

It's perfectly reasonable to paraphrase the description in the reference.
The reference itself, of course, will have lots more information than
the algorithm, so that description would only be a fraction of the size of 
the whole reference.

    What I tend to be particularly interested in is implementation
    details, flaws in the paper, limitations imposed due to our
    framework/implementation, differences in design decisions, etc.

Right, but that's hard to do without having a separate description of
the algorithm because the best way to do those things is inside the
narrative of the algorithm.

    One of the interesting questions I'm working through right now is to
    figure out how much I should assume the reader knows.  For example, do
    I assume that everyone knows what dominators and post-dominators are?
    What about a dominator tree?  Value numbering? SSA form?  How using
    value numbering on the SSA form during a dominator walk gives us
    redundancy elimination on an almost-global scale without the need to
    invalidate values from our hash tables?

I can't answer for people in general, but I don't know what *any* of those
things are and I would expect to see at least a definition of any of those
terms in adequate documentation.  Of course, the documentation can't
substitute for a good compiler text, but there should at least be a few
sentences saying what each thing is.

    Which brings me to the need for this kind of documentation to also
    live in the modern world of the web -- hyperlinks from the optimizer's
    high level documentation back to the underlying concepts it builds
    upon, IMHO, is much better than bringing up a zillion files in your
    favorite text editor.

In some ways, sure, but often the best way to study code is to do it
on a long plane flight and that means having everything in a couple of
well-defined places.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-03  0:59 Richard Kenner
  2004-02-03 12:17 ` Joern Rennecke
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-02-03  0:59 UTC (permalink / raw)
  To: joern.rennecke; +Cc: gcc

    Do you think this is practical for functions like rest_of_compilation
    using *any* description language different from the implementation
    language?

Sure.  The specification is unrelated to the implementation: the function
does whatever is needed to compile and optimize a function.  The details
don't matter at all to the specification.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-02 17:19 Robert Dewar
  2004-02-02 22:02 ` Joern Rennecke
  0 siblings, 1 reply; 171+ messages in thread
From: Robert Dewar @ 2004-02-02 17:19 UTC (permalink / raw)
  To: Joe.Buck, jamie; +Cc: asutton, dewar, gcc, kenner, law

> I would add that a real spec tells you what the function _does_ and
> sometimes how to use it, in addition to pre/postconditions :)

It also might have *some* details of the implementation if they are
important to its use, e.g. knowing whether a sort is nlogn or n**2.

Of course sufficiently powerful pre and post conditions would be able
to describe what a function does, but if these conditions are written
in a low level language without set comprehension and quantifiers, this
can be impractical in practice.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-02 17:16 Robert Dewar
  2004-02-02 17:51 ` Jamie Lokier
  0 siblings, 1 reply; 171+ messages in thread
From: Robert Dewar @ 2004-02-02 17:16 UTC (permalink / raw)
  To: Joe.Buck, dewar; +Cc: asutton, gcc, jamie, kenner, law

> Robert, the Ada interface description is far from a spec, for any
> nontrivial function.  Almost any real spec will describe restrictions
> on input, and guarantees about the output, that are not written
> in a form that the compiler parses (even in languages like Eiffel with
> support for preconditions and postconditions).  This means that we
> are back to comments.

Of course, but the interface description is required to be there, and it is
universal Ada practice to put the necessary additional comments in the spec.
In C, header files are not required, and although it *might* be universal
practice to create header files analogous to Ada specs, in practice it is
not. Certainly in Ada you can't go creating a package body before you
have created the package spec, and no one would think of trying :-)

By the way, for me, even for a trivial function, comments are essential. I
very much dislike the style of depending on names of parameters etc and
having the reader guess the function. To me, comments must be complete
and describe all parameters etc in detail, without depending on any
guesswork. I would also say that it is unacceptable to start work on
an implementation without first creating the fully commented spec.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-02-01 12:17 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-02-01 12:17 UTC (permalink / raw)
  To: asutton; +Cc: gcc

    maybe it's me, but it seems a bit odd that people would argue against
    documentation extraction in favor of having developers look at the
    implementation as a reference. but then again, i'm only a software
    engin... i mean grad student.

I haven't heard anybody make that argument.  The issue is that of
"extraction".  A lot of us fail to see that "extracting" documentation
is useful and if the method of generating it involves anotations that
make the source harder to read and write, it's a net negative.

As Robert points out, if you generate a separate file for documentation,
it's easy to have old versions of that file around without knowing it.
If all the documentation (both specification and implementation) is in
the same place as the source, you don't have that risk.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-29 20:50 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-29 20:50 UTC (permalink / raw)
  To: Joe.Buck; +Cc: gcc

    This is a mistake, in my view.  It has always been the practice on the
    teams I work with that a header file is supposed to be self-contained,
    in the sense that a user of a module only needs to read the declarations
    and documentation in the header file to use any functions declared there.

Sorry I wasn't clear: I certainly agree with that, but I don't think it's
realistic to get that changed given the pervasiveness of the opposing view.

What can be done as a compromise, and what I try to do, is to duplicate
all the information in front of a function at its declaration in the
header file. That has that effect, but is more of a maintenance burden
(though slight, due to cut-and-paste).

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-29 19:05 Richard Kenner
  2004-01-29 20:37 ` Joe Buck
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-01-29 19:05 UTC (permalink / raw)
  To: law; +Cc: gcc

    Conceptually, an API should be usable without looking at the
    implementation.

Most certainly!

In Ada, the specification and implementation are always in different files,
so that can actually be enforced.

You can that in C too, of course, by putting the specification into the .h
file and the implementation into the .c file, but the convention has been to
document the function's parameters in the .c file rather than .h.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 20:51 Richard Kenner
  2004-01-27 21:55 ` Phil Edwards
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 20:51 UTC (permalink / raw)
  To: phil; +Cc: gcc

    I certainly never called it that.  I certainly don't dispute the need
    for writing down what you're asking for.  But we also need useful API
    catalogs:

But these aren't libraries that have APIs.  Instead, they are a
collection of functions that implement a compiler.

    and cross-references:

I'm not convinced having a printed cross-reference (or one in a format
related to printing) is useful.  I don't see what benefit they have that
a tags file does not.  Can you explain that?

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 20:29 Richard Kenner
  2004-01-27 20:58 ` DJ Delorie
  2004-01-27 22:34 ` Tom Tromey
  0 siblings, 2 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 20:29 UTC (permalink / raw)
  To: ian; +Cc: gcc

    I would say that libstdc++ is a place where doxygen-style comments are
    more useful, because the documentation for a library tends to be more
    reference style anyhow.  There are relatively few specific cases where
    different library functions must work together in interesting ways,
    and thus require additional documentation.

I agree, but would put it a little differently: because the functions
represent a published interface, in that case, the intended readership of the
comments is very different than the code, but you want to put the two
physically close together for maintainabilty purposes.

In other words, I think this sort of approach is perfectly acceptable, and a
good idea, for libraries, where the API is what counts.  But GCC is a very
different animal, precisely because of the interfactions you mention.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 20:13 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 20:13 UTC (permalink / raw)
  To: Joe.Buck; +Cc: gcc

    Fine, doxygen is cool with that.  If you write it as

	...

    it will be treated as a doxygen comment, with the first sentence as
    the brief description and the whole paragraph as the long description.
    All I changed was the extra * character.

The issue I had was the annotations used to describe the parameters and
return value.  I certainly have no problem with the above, except if it's
viewed as replacing proper high-level documentation.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 20:05 Richard Kenner
  2004-01-27 20:11 ` Phil Edwards
  2004-01-27 20:17 ` Phil Edwards
  0 siblings, 2 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 20:05 UTC (permalink / raw)
  To: phil; +Cc: gcc

    Do you have a suggested syntax which allows us to extract nicely formatted
    HTML, LaTeX, and troff documentation?

No, because you can't "extract" documentation in a mechanical fashion.
High-level documentation is not a collection of low-level details.

    The @param and @return and whatnot are not intended for humans

But humans will be reading them.  Every time they look at the sources.

    I have complaints about doxygen myself.  But IMO it's better than anything
    else that's been concretely suggested.  And -- undisputed fact -- it's
    better than what we habe right now, which is nothing.

I would *certainly* dispute that fact. It's far *worse* than "nothing".
What we desperately need is well-written high-level documentation of
methods and algorithms and how everything fits together.  Finding ways
of automatically extracting low-level details from code and calling
it "high-level documentation" *detracts* from that effort.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 19:55 Richard Kenner
  2004-01-27 20:39 ` Diego Novillo
  2004-01-27 20:40 ` Laurent GUERBY
  0 siblings, 2 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 19:55 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    If such high-level documentation is written inside a comment at the top
    of each file, then you can coax the publishing tool of your choice to
    emit it in a dozen different formats.

No, that's not the level of documentation we're talking about!

The comments in each file describe what each file does at the high
level.  What high-level documentation of GCC would consist of is an
overview of what the files do when put together.  That is not at all
the same as a concatenation of all the high-level comments in file.
They are two very different things and you cannot derive one from the
other.  The upper-level documentation should concentrate on such
things as what order optimizations are done and how they interact.
These are not things that are documented into the individual source files.

    But it is possible to extract documentation from the source code
    directly, and that is what I would like us to do for the internal API
    and design documentation, at least.

I don't see this.  I don't understand how duplicating the low-level
information that's in each file into a master document would improve the
documentation quality of GCC.  You can make the API argument, but even
that's weak.  Consider the optimizers, for example: you may have a 10,000
line source file that goes into extensive detail on on optimization
algorithm and has dozens of internal functions. But from an *API* point
of view, it's very simple: you call a function of a certain name and it
does a certain optimization.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 19:28 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 19:28 UTC (permalink / raw)
  To: ian; +Cc: gcc

    An organized reference to gcc implementation internals would be very
    useful.  But that's not what we get from documentation extracted from
    the source code.  What we get is a disorganized set of reference
    information.  It tells you the information that's easy to find out in
    various other ways, but it doesn't tell you what you really need to
    know, which is the implicit assumptions and the underlying ideas.

That's exactly my point.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 18:56 Richard Kenner
  2004-01-27 19:31 ` Diego Novillo
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 18:56 UTC (permalink / raw)
  To: asutton; +Cc: gcc

    not everybody learns from the bottom up. using documentation
    generators like doxygen provides a pretty convenient way to provide a
    high-level picture of the system and its components. so yes...  there
    is most definitely value there.

I strongly agree that having high-level documentation is important, but
I don't see that documentation generators produce it!

"high-level documention" means a very broad overview of a program and
how it works.  This *cannot* be produced automatically since none of
the information in it would be present anywhere else.

What you are talking about producing isn't anything "high-level", but just
a very low-level directory of functions and data structures.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 18:53 Richard Kenner
  2004-01-27 19:09 ` Daniel Berlin
                   ` (2 more replies)
  0 siblings, 3 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 18:53 UTC (permalink / raw)
  To: Joe.Buck; +Cc: gcc

  /**
   *  @brief Search a sequence for a matching sub-sequence.
   *  @param  first1  A forward iterator.
   *  @param  last1   A forward iterator.
   *  @param  first2  A forward iterator.
   *  @param  last2   A forward iterator.
   *  @return   The first iterator @c i in the range
   *  @p [first1,last1-(last2-first2)) such that @c *(i+N) == @p *(first2+N)
   *  for each @c N in the range @p [0,last2-first2), or @p last1 if no
   *  such iterator exists.

This *exactly* the sort of clutter I'm very strongly against.  It makes it
*far* harder to read the source file with those "@param" tokens in the way.
And the "*" in each line is a violation of the GNU coding conventions, in
addition to adding yet more clutter.  Sure, external documentation can be
handy, but not at that huge readability cost.

This should simply be:

/* This function searches a sequence for a matching sub-sequence.
   FIRST1, LAST1, FIRST2 and LAST2 are allforward iterators.
   The first iterator J in the range [FIRST1,LAST1-(LAST2-FIRST2)) such that
   *(J+N) == *(FIRST2+N) for each @c N in the range [0,LAST2-FIRST2) is
   returned, or LAST1 if no such iterator exists.  */

That's a *lot* cleaner and easier to read.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 18:19 Richard Kenner
  2004-01-27 18:24 ` Diego Novillo
  2004-01-27 18:38 ` Andrew Sutton
  0 siblings, 2 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 18:19 UTC (permalink / raw)
  To: dnovillo; +Cc: gcc

    Which reminds me.  What happened to the proposal that was discussed in
    the last GCC summit to start adding doxygen markers to the source code
    comments?

I'd be very strongly *against* such a proposal.  I don't see anything but
the slightest advantage of such "external" documentation, certainly not
worth cluttering up code with "markers".

If there is a value to having such external documentation, let's teach it
how to read GCC's documentation style, which already has enough information.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 18:06 Richard Kenner
  0 siblings, 0 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 18:06 UTC (permalink / raw)
  To: dberlin; +Cc: gcc

    I really liked it when tree-ssa had doxygen generated comments.
    They have a nice style and form to them that remind you to make sure 
    you've added docs for all the relevant things in a function (like 
    return value, etc).

I just looked at what appears to be a manual for doxygen and I must say that
I very much *do not* like those annotations.  I think the very slight advantage
of having a separate document does not justify the clutter they cause in the
source files.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 18:03 Richard Kenner
  2004-01-27 18:20 ` Joe Buck
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 18:03 UTC (permalink / raw)
  To: Joe.Buck; +Cc: gcc

    Paper documentation is nice as well, but the way to get both, and to
    keep the code and documentation consistent, is to use doxygen-style
    comments and use that to generate the documentation.

Agreed.  I have no problems with having a *second* copy, as long as the
primary one is in the file and "doxygen-style" does't clutter up the
source and make it harder to read the comments.

I don't know anything about the annotations, but if it were a tradeoff
between making the source slightly less clean to get a secondary documention,
I'd vote *against* the secondary documention since it isn't nearly as
useful as a easy-to-read documentation in the source.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* Re: "Documentation by paper"
@ 2004-01-27 15:48 Richard Kenner
  2004-01-27 17:51 ` Joe Buck
  0 siblings, 1 reply; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 15:48 UTC (permalink / raw)
  To: lars.segerlund; +Cc: gcc

    Perhaps the documentation doesn't have to be in the file, but there
    has to be some texinfo documentation for it ?

No, I think it has to be in the file.  That's the most logical place for it
and the only place that has any hope of being maintained as the file changes.

    If we had this describing every file in gccint it would be sooo nice !

Most file do have internal documentation saying what they are doing.

^ permalink raw reply	[flat|nested] 171+ messages in thread
* "Documentation by paper"
@ 2004-01-27 15:40 Richard Kenner
  2004-01-27 15:48 ` Lars Segerlund
  2004-01-30 23:18 ` Mark Mitchell
  0 siblings, 2 replies; 171+ messages in thread
From: Richard Kenner @ 2004-01-27 15:40 UTC (permalink / raw)
  To: gcc

I've been noticing for a while that there are an increasing number of files
in GCC where the only overview documentation is a reference to a paper or
textbook.

I think this is totally unacceptable documentation and that we need to have a
policy about this sort of documentation.

My reasons are as follows:

(1) It's unreasonable for any person who wants to work on that file to have
to locate and read the paper.  Sure, if you are doing significant algorithmic
work on the file, you need to have read the reference.  But for small things,
or most debugging, you don't need that much information and most changes are
small things.

(2) It's rare to implement an algorithm *exactly* as presented in the paper,
so we'd need a list of changes.  That means the description is a combination
of a reference and a set of changes, which is complex.

(3) A critical part of the overview is identifying what part of the code and
data structures does what.  If you have a complete description of the
algorithm in the file, this flows very naturally because you intersperse
references to the functions and structs into your description of the
algorithm.  Otherwise, you have to use odd language to link the
implementation with the algorithm.  This link is perhaps the most critical
part of the documentation but is the part most commonly left out.


Certainly the reference needs to be there as well, both for credit purposes
and to supply further details.  For example, normally a critical part of
documentation is not just what's being done but *why* it's being done and why
other things *aren't* being done.  Here, the paper can serve those purposes.

As I've been getting into some of the newer parts of the compiler, I've been
very hampered by the lack of proper documentation.  I think improving this
documentation ought to be one of the major goals of 3.5 aside from any other
changes.

I'd like to get agreement on the following documentation standard for the
cases where papers or texts are referenced:

(1) The algorithm be fully-enough described in a blocks of comments in the
front of the file that the goals and methods of the algorithm can be
completely understood just from those comments.

(2) As part of that narrative, any differences between the algorithm in the
reference and the code should be explained.  Likewise, any implementation
choices should be pointed out.

(3) Again as part of the narrative, each major function and data structure
should be mentioned.

(4) The reference should be supplied in a clear manner.  If it available
online, a URL should be supplied.

Of course, each file should also meet the minimum documentation requirements
in other areas:

(1) There should be a block of comments in front of every function giving the
external specification of each function, including the meaning of every
argument.

(2) Within each function, there should be enough comments to explain the role
of each part of the function in implementing those external specifications.
At a minimum, this means a sentence or two for each non-trivial "if"
statement or loop.  These should not be a translation of the code into
English, but provide the linkage between specification and implementation.

(3) Any design choices, especially choices about *not* doing something, need
to be clear documented.

Does everybody agree with these standards?  If we can't get concensus, I'd
like to ask the SC to look at this issue.

^ permalink raw reply	[flat|nested] 171+ messages in thread

end of thread, other threads:[~2004-02-11 15:56 UTC | newest]

Thread overview: 171+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-01-27 19:43 "Documentation by paper" Richard Kenner
  -- strict thread matches above, loose matches on Subject: below --
2004-02-09 19:05 Richard Kenner
2004-02-09 18:55 Richard Kenner
2004-02-09 18:59 ` Paul Koning
2004-02-09 18:52 Richard Kenner
2004-02-09 18:54 ` Zack Weinberg
2004-02-10 19:51   ` Kai Henningsen
2004-02-09 18:37 Richard Kenner
2004-02-09 18:45 ` Zack Weinberg
2004-02-09 18:28 Robert Dewar
2004-02-09 18:20 Robert Dewar
2004-02-09 17:19 Richard Kenner
2004-02-09 18:14 ` Joe Buck
2004-02-09 18:34 ` Zack Weinberg
2004-02-05 20:09 Richard Kenner
2004-02-04 18:05 Richard Kenner
2004-02-04 18:58 ` Joe Buck
2004-02-04 19:10   ` Robert Dewar
2004-02-04 14:35 Richard Kenner
2004-02-04 14:08 Richard Kenner
2004-02-04 17:50 ` Joe Buck
2004-02-05 19:57 ` Felix Lee
2004-02-06 10:51   ` Robert Dewar
2004-02-04 13:20 Richard Kenner
2004-02-04 13:49 ` Michael Matz
2004-02-04 14:11   ` Robert Dewar
2004-02-04 14:30     ` Michael Matz
2004-02-04 14:43       ` Arnaud Charlet
2004-02-04 14:46       ` Robert Dewar
2004-02-04 15:56         ` Daniel Berlin
2004-02-04 13:10 Richard Kenner
2004-02-03 16:57 Richard Kenner
2004-02-03 22:22 ` Robert Dewar
2004-02-03 16:56 Richard Kenner
2004-02-03 17:13 ` Lars Segerlund
2004-02-03 16:37 Paolo Bonzini
2004-02-03 16:28 Richard Kenner
2004-02-03 22:06 ` Robert Dewar
2004-02-03 22:20   ` Dale Johannesen
2004-02-04 13:48     ` Robert Dewar
2004-02-04  2:56 ` Russ Allbery
2004-02-04 17:26   ` Phil Edwards
2004-02-03 16:20 Richard Kenner
2004-02-03 16:54 ` Jan Hubicka
2004-02-03 16:16 Richard Kenner
2004-02-03 16:23 ` Steven Bosscher
2004-02-03 16:40   ` law
2004-02-03 16:38 ` law
2004-02-03 15:48 Richard Kenner
2004-02-03 16:00 ` Steven Bosscher
2004-02-03 21:27   ` Robert Dewar
2004-02-03 22:16     ` Daniel Berlin
2004-02-03 16:07 ` Paolo Bonzini
2004-02-03 16:35 ` law
2004-02-03 16:48   ` Peter Barada
2004-02-03 17:03     ` Paul Koning
2004-02-03 17:07     ` law
2004-02-03 17:28       ` Daniel Berlin
2004-02-08  6:23       ` Jamie Lokier
2004-02-09 16:25         ` law
2004-02-09 17:53           ` Jamie Lokier
2004-02-09 18:07             ` Daniel Berlin
2004-02-09 18:14               ` Robert Dewar
2004-02-09 18:26                 ` Daniel Berlin
2004-02-10 19:51                   ` Kai Henningsen
2004-02-10 20:31                     ` Daniel Berlin
2004-02-10 20:49                       ` Joern Rennecke
2004-02-11 12:31                       ` Jamie Lokier
2004-02-11 15:42                         ` Daniel Berlin
2004-02-11 15:56                           ` Daniel Berlin
2004-02-09 18:39             ` law
2004-02-09 19:12               ` Robert Dewar
2004-02-11 12:38               ` Jamie Lokier
2004-02-11 15:51                 ` Daniel Berlin
2004-02-03 17:09     ` Daniel Berlin
2004-02-03 17:28       ` Peter Barada
2004-02-03 22:20     ` Robert Dewar
2004-02-07  0:14   ` Kai Henningsen
2004-02-09 16:28     ` law
2004-02-09 16:45       ` Robert Dewar
2004-02-10 19:51       ` Kai Henningsen
2004-02-03 15:40 Paolo Bonzini
2004-02-03 21:21 ` Robert Dewar
2004-02-03 12:20 Richard Kenner
2004-02-03 12:12 Richard Kenner
2004-02-03 16:46 ` Felix Lee
2004-02-03  0:59 Richard Kenner
2004-02-03 12:17 ` Joern Rennecke
2004-02-02 17:19 Robert Dewar
2004-02-02 22:02 ` Joern Rennecke
2004-02-07  0:15   ` Kai Henningsen
2004-02-02 17:16 Robert Dewar
2004-02-02 17:51 ` Jamie Lokier
2004-02-02 19:28   ` Robert Dewar
2004-02-01 12:17 Richard Kenner
2004-01-29 20:50 Richard Kenner
2004-01-29 19:05 Richard Kenner
2004-01-29 20:37 ` Joe Buck
2004-01-29 22:50   ` Andrew Sutton
2004-01-30 17:29   ` Robert Dewar
2004-01-27 20:51 Richard Kenner
2004-01-27 21:55 ` Phil Edwards
2004-01-27 21:59   ` Ian Lance Taylor
2004-01-29 18:33   ` law
2004-01-27 20:29 Richard Kenner
2004-01-27 20:58 ` DJ Delorie
2004-01-27 22:34 ` Tom Tromey
2004-01-27 20:13 Richard Kenner
2004-01-27 20:05 Richard Kenner
2004-01-27 20:11 ` Phil Edwards
2004-01-27 20:17 ` Phil Edwards
2004-01-27 21:08   ` Ian Lance Taylor
2004-01-27 21:37     ` Phil Edwards
2004-01-27 23:22   ` Bernd Schmidt
2004-01-27 19:55 Richard Kenner
2004-01-27 20:39 ` Diego Novillo
2004-01-27 20:40 ` Laurent GUERBY
2004-01-27 19:28 Richard Kenner
2004-01-27 18:56 Richard Kenner
2004-01-27 19:31 ` Diego Novillo
2004-01-27 18:53 Richard Kenner
2004-01-27 19:09 ` Daniel Berlin
2004-01-27 19:13   ` Ian Lance Taylor
2004-01-27 20:08   ` Gabriel Dos Reis
2004-01-27 20:17     ` Daniel Berlin
2004-01-27 20:34       ` Gabriel Dos Reis
2004-01-27 20:42       ` Andrew Sutton
2004-01-27 19:20 ` law
2004-01-27 19:31   ` Phil Edwards
2004-01-27 19:59     ` Ian Lance Taylor
2004-01-27 19:43   ` Ian Lance Taylor
2004-01-29 18:37     ` law
     [not found]   ` <401C3F16.3040706@gnat.com>
2004-02-01  6:19     ` Andrew Sutton
2004-02-01 12:08       ` Robert Dewar
2004-02-01 21:13         ` Jamie Lokier
2004-02-01 23:05           ` Robert Dewar
2004-02-02 15:40             ` Jamie Lokier
2004-02-02 15:56               ` Robert Dewar
2004-02-02 16:59                 ` Joe Buck
2004-02-02 17:10                   ` Jamie Lokier
2004-02-02 17:30                     ` Joe Buck
2004-02-02 18:55                   ` Alexandre E. Kopilovitch
2004-02-01 23:05           ` Robert Dewar
2004-01-27 19:44 ` Joe Buck
2004-01-27 20:17   ` Phil Edwards
2004-01-27 18:19 Richard Kenner
2004-01-27 18:24 ` Diego Novillo
2004-01-27 18:38 ` Andrew Sutton
2004-01-27 18:06 Richard Kenner
2004-01-27 18:03 Richard Kenner
2004-01-27 18:20 ` Joe Buck
2004-01-27 15:48 Richard Kenner
2004-01-27 17:51 ` Joe Buck
2004-01-27 17:57   ` Daniel Berlin
2004-01-27 18:04   ` Diego Novillo
2004-01-27 18:24     ` Zack Weinberg
2004-01-27 18:37       ` Daniel Berlin
2004-01-27 18:58         ` Ian Lance Taylor
2004-01-28 16:42         ` Joern Rennecke
2004-01-31 23:52         ` Robert Dewar
2004-02-01  6:08           ` Andrew Sutton
2004-01-27 22:12   ` Geert Bosch
2004-01-27 15:40 Richard Kenner
2004-01-27 15:48 ` Lars Segerlund
2004-02-01  0:43   ` Robert Dewar
2004-01-30 23:18 ` Mark Mitchell
2004-02-02 11:02   ` Lars Segerlund
2004-02-03  8:09   ` law
2004-02-03 16:44     ` Felix Lee
2004-02-03 22:18       ` Robert Dewar
     [not found]         ` <dewar@gnat.com>
2004-02-04  0:00           ` Felix Lee

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).