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

Reply via email to