On Fri, Feb 21, 2025 at 07:32:25PM +0000, Gavin Smith wrote: > On Fri, Feb 21, 2025 at 07:45:50PM +0100, Patrice Dumas wrote: > > Hello, > > > > I propose to remove the part of the History node in the Texinfo manual > > that starts with "The new Perl program was much slower than the old C > > program." and ends with "still believed that this structure could in > > theory lend better to contributions.". > > > > This is information that was relevant in 2012, but not so much nowadays. > > > > Any opposition? > > I generally agree. I suggest also that the discussion of the never-released > ca. 2012 version of texi2html be trimmed down or removed.
I think that it is important to keep that information to have an explanation for the texi2html final release context, otherwise it could be very confusing for historians. > Current text (possibly slightly edited from the original if I remember > correctly): > > "Extensive tests of the language and processor were developed at the > same time as @command{texi2any}; we encourage anyone thinking of writing > a program to parse Texinfo input to make use of these tests." > > I never understood how anybody was supposed to make use of these tests > if they were writing their own program to process Texinfo, as they were > highly coupled to the texi2any code. I agree that this should be written differently, as it is not possible to use the tests as is unless one implements the same Perl interface. But I think that the idea is right, an implementation of a Texinfo parser should make sure that the parsing is correct for the texi2any tests. Also it is possible to output all the tests as Texinfo files, so it is a simple possibility to get code to test parsing on. A proposal: Extensive tests of the language and processor were developed at the same time as @command{texi2any}; we encourage anyone thinking of writing a program to parse Texinfo input to verify parsing of @command{texi2any} tests Texinfo code. > I'm not sure that the whole paragraph about a "reference implementation" > is particularly relevant either. I think that Karl idea was to avoid another case of redundant implementations as happened when texi2html and makeinfo were both developed. I think that the texi2any implementation is actually a reference implementation, and that it is a good thing if all the processors have the same or at least similar command-line options, like compilers tend to have nowadays. > I feel this text is too specific and not particularly interesting for > this node: > > "Multilingual support for C and C in @command{texi2any} has progressed > importantly. Perl multilingual support is only required for index entries > sorting nowadays, to be able to have spaces and punctuation marks sort > before letters. Agreed. > I've tried editing the node, reordering some parts and deleting others. > I kept the text "much slower than old C program" to give a reason for > why parts of the program have since been rewritten in C. > > diff --git a/doc/texinfo.texi b/doc/texinfo.texi > index 017d730480..79fabe2aff 100644 > --- a/doc/texinfo.texi > +++ b/doc/texinfo.texi > @@ -616,32 +616,25 @@ @node History > @cindex Cons, Lionel > @cindex Dumas, Patrice > In 2012, the C @command{makeinfo} was itself replaced by a Perl > -implementation generically called @command{texi2any}. This version > +implementation generically called @command{texi2any}, written by > +Patrice Dumas. This version > supports the same level of output customization as > @command{texi2html}, an independent program originally written by > -Lionel Cons, later with substantial work by many others. The many > -additional features needed to make @command{texi2html} a replacement > -for @command{makeinfo} were implemented by Patrice Dumas. The first, > -never-released version of @command{texi2any} was based on the > -@command{texi2html} code. > +Lionel Cons, later with substantial work by many others. > > @cindex Tree representation of documents > @cindex Syntax tree representation of documents > @cindex Abstract syntax tree representation of documents > -That implementation, however, was abandoned in favor of the current > -program (also written by Patrice Dumas), which parses the Texinfo > -input into a tree for processing. It inherited the design of > +@command{texi2any} inherited the design of > customization and other features from @command{texi2html} (for more > on @command{texi2html} compatibility, @pxref{@command{texi2html}}). > -However, @command{texi2any} is a full reimplementation: it constructs > +However, @command{texi2any} was a full reimplementation: unlike > +@command{texi2html}, it constructs > a tree-based representation of the input document for all back-ends > to work from. > > -The new Perl program was much slower than the old C program. > -So why did we switch? In short, we intended and hoped that the program would > -be much easier than the previous C implementation of @command{makeinfo} to > -extend to different output styles, back-end output formats, and all other > -customizations. In more detail: > +The new Perl program was intended to have the following advantages over > +the old C program: > > @itemize @bullet > @item HTML customization. Many GNU and other free software packages > @@ -654,10 +647,7 @@ @node History > > @item Unicode, and multilingual support generally, especially of east > Asian languages. At that time, doing it in C would have been tantamount > -to rewriting the entire program. Since then, multilingual support for C and > C > -in @command{texi2any} has progressed importantly. Perl multilingual support > is > -only required for index entries sorting nowadays, to be able to have spaces > and > -punctuation marks sort before letters. > +to rewriting the entire program. > > @item Additional back-ends. The @command{makeinfo} code had become > convoluted to the point where adding a new back-end was quite complex, > @@ -665,45 +655,23 @@ @node History > the new implementation provides a clean tree-based representation for > all back-ends to work from. People have requested numerous different > back-ends (@LaTeX{}, the latest (X)HTML, @dots{}); this change made them > -much more feasible to implement. Which leads to the last item: > - > -@item Making contributions easier. In general, due to the cleaner > -structure, the separate parser/back-ends implementation > -should be considerably easier than the former C @command{makeinfo} > -implementation for anyone to read and contribute to, with the resulting > -obvious benefits. After thirteen years, contributed back-ends were yet to > -happen, but it is still believed that this structure could in theory lend > -better to contributions. > - > +much more feasible to implement. > @end itemize > > @cindex Future of Texinfo implementations > With the release of @command{texi2any} as the reference implementation in > 2012, > development of both the C implementation of @command{makeinfo} and > -@command{texi2html} halted. Since then, the parser, part of the Info > converter > +@command{texi2html} halted. > + > +At the time, > +the new Perl program was much slower than the old C program. > +Since then, the parser, part of the Info converter > and the HTML converter as a whole have been translated to C, leading to > important gains in speed compared to the pure Perl implementation of > @command{texi2any}. The main program has also been translated to C. The > @command{texi2any} C implementation embeds a Perl interpreter for the parts > that require Perl. > > -@cindex @command{texi2any}, as reference implementation > -@cindex Reference implementation > -@cindex Implementation, @command{texi2any} as reference > -@cindex Texinfo language tests > -@cindex Tests, of Texinfo language > -@anchor{Reference Implementation}@c > -@command{texi2any} is intended to be a reference implementation > -that defines parts of the language not fully specified by the manual. > -Without such a reference, alternative implementations would be very > -likely to have subtle, or not-so-subtle, differences in behavior, > -and thus Texinfo documents would become dependent on the processor. > -It is also important to have consistent command-line options for > -all processors. Extensive tests of the language and processor were > -developed at the same time as @command{texi2any}; we encourage anyone > -thinking of writing a program to parse Texinfo input to make use of > -these tests. > - > > @node Writing a Texinfo File > @anchor{Beginning and Ending a File}@c old name > > "