> Date: Sun, 10 Aug 2025 21:21:14 +0200
> From: Patrice Dumas <pertu...@free.fr>
> 
> On Sun, Aug 10, 2025 at 07:43:00PM +0100, Gavin Smith wrote:
> > I see you (Patrice) implemented a C version of a change I'd made to a Perl
> > function:
> > 
> > How was I supposed to know that the C function existed?
> 
> You can grep the name in the C code, except for a few functions, the
> names are the same or very similar.
> 
> > The only explanation I have is that these C functions are used directly
> > by C versions of the conversion code, but they are not available from
> > Perl code as XSUBs.
> 
> Exactly.  There are lots of C code that do the same as Perl code, but is
> not directly called as XS.  Actually, the less XS interfaces there are
> and the more C only (and Perl only) code there are, the simpler, as
> having interfaces always require doing additional error prone codes to
> make sure that the two underlying data are in sync.
> 
> > Is it correct that these functions are not available as XSUBs?  If so,
> > what's the difference between the Perl functions that have XSUB versions
> > and those that do not?  And how is somebody working on the Perl source code
> > supposed to know when there is a C version they should be updating too?
> 
> For parsing, structure, transformations, conversion back to Texinfo,
> conversion to raw Text and to identifiers, conversion to HTML and main
> program (texi2any.pl), there is a complete coverage in C, so every
> function in the Perl codes is supposed to have a at least one
> corresponding function (or, sometime, when there is not a perfect
> mapping between the functions in the two langauges, equivalent code) in
> C.  This includes Texinfo::Indices, Texinfo::ManipulateTree,
> Texinfo::Document, Texinfo::Translations and Texinfo::OutputUnits.pm,
> and most of Texinfo::Common and Texinfo::Convert::Unicode functions used
> in the previously mentionned codes.  There can be, in addition, some XS
> interface code, and some code to call Perl from C.  For conversion
> helper functions, such as functions in Texinfo::Convert::Converter,
> probably some functions in Texinfo::Common and some functions in
> Texinfo::Convert::Utils, but probably not all (I haven't checked in
> details).
> 
> For the main program, the corresponding code is in texi2any.c and
> convert/texinfo.c.  For the other codes, sometime the organization of
> the code is similar to Perl, but not always, because of the different
> contraints for both codebases.  For instance, delayed loading of Perl
> modules for Transformations on the Perl side, and Gnulib C/Perl C
> constraints of C + no undefined.

Perhaps we should have an internal-design README which would include
all this important information (and then some)?

Reply via email to