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
>
> "