-
Notifications
You must be signed in to change notification settings - Fork 603
Formalize symbol names reserved for Perl's use in XS #24003
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: blead
Are you sure you want to change the base?
Conversation
This creates a regular expression pattern of names that we feel free to
expose to XS code's namespace. Hence they are names reserved for our use,
and should any conflicts arise, the module needs to change, not us.
Naturally, the pattern is pretty restrictive.
Any symbol beginning with "PL_"
Any symbol containing perl, Perl, or PERL, usually delimitted on
both sides so as to keep it from being part of a larger word.
Any other spelling that we expose could be considered to pollute the XS
code space. We have felt free to do that all the time. Any new
function's short name will do that.
And we generally feel free to create macros with arbitrary names which
could conflict with an existing XS name.
Some important potential conflicts are:
New keywords: We create an exposed KEY_foo macro. Some existing
modules use some of these. My grep of CPAN shows maybe a dozen of these
get used; mostly KEY_END.
config.h is full of symbols like HAS_foo, I_bar, and others that are all
exposed. I don't imagine we can claim to reserve any symbol beginning
with either HAS_ or I_. And I don't know what to do here.
Informally, myself and others have used a trailing underscore to
indicate a private symbol. There are a few distributions that use some
of these anyway. And there has been pushback when new short symbols
that use this convention have been added.
I would like to get a formal rule about use of this convention. There
are 200+ of these currently. We could reserve any names with trailing
underscores, or if that is too much, any ending in, say, '_pl_' or
'_PL_'.
We have 3000+ undocumented macro names that don't end in underscores and
which are currently visible to XS code. This number includes the
KEY_foo ones, but not the ones in config.h.
To deal with namespace pollution, we have had the -DNO_SHORT_NAMES
Configure option for use just with embedded perls. This hasn't worked
at least since we added inline functions, and it always applied to only
functions. I have a WIP to get this to work again, and to extend it to
work with documented macros. It just occurred to me how to make this be
customizable, so that downstream someone could add a list of symbols
that should only exist as 'Perl_foo', and then recompile, leaving short
names for everything not in the list.
273e7d6 to
5e26279
Compare
|
I can't see us restricting new name use to Do you expect new SV/CV/HV etc flags to use a Similarly for flags like AMGf_*, OP code macros. I don't think we can reserve names with trailing underscores, those are in use in too many other code bases. You know I think the perl codebase is badly polluting, especially at the macro level, but I don't think it's fixable unless we decide on some sort of limited API like the Python one (even that uses some non-Py-prefix names) I think in the general case it's just too big a change in practice. |
|
It is not my intent to restrict new names. The purpose is to say that we consider all names that match this pattern, as finally determined, to be fair game for us to use without any consideration on their effect in anyone's namespace. I think we should give consideration of that effect with other names, but the decision is likely to be to go ahead and use any reasonable ones. It might be that we consider anything beginning with [ACGHS][Vv] to be fair game that needs no consideration either, along with related setters and getters. It's overly clumsy and hard to read to have names that have required prefixes. But we are now in a position where a Configure call could specify not to use names x,y,z but instead we generate Perl_x, Perl_y, and Perl_z for just those. And this could be expanded to a per module basis so the module says I use x,y,z for my purposes, don't define them for perl's. This latter would require a much bigger embed.h, but it is automatically generated. I'm liking the idea of reserving symbols that end in |
|
I don't think I at all understand the impact of this change. I haven't really looked at the detail of |
This creates a regular expression pattern of names that we feel free to expose to XS code's namespace. Hence they are names reserved for our use, and should any conflicts arise, the module needs to change, not us.
Naturally, the pattern is pretty restrictive.
Any other spelling that we expose could be considered to pollute the XS code space. We have felt free to do that all the time. Any new function's short name will do that.
And we generally feel free to create macros with arbitrary names which could conflict with an existing XS name.
Some important potential conflicts are:
New keywords: We create an exposed KEY_foo macro. Some existing modules use some of these. My grep of CPAN shows maybe a dozen of these get used; mostly KEY_END.
config.h is full of symbols like HAS_foo, I_bar, and others that are all exposed. I don't imagine we can claim to reserve any symbol beginning with either HAS_ or I_. And I don't know what to do here.
Informally, myself and others have used a trailing underscore to indicate a private symbol. There are a few distributions that use some of these anyway. And there has been pushback when new short symbols that use this convention have been added.
I would like to get a formal rule about use of this convention. There are 200+ of these currently. We could reserve any names with trailing underscores, or if that is too much, any ending in, say, 'pl' or 'PL'.
We have 3000+ undocumented macro names that don't end in underscores and which are currently visible to XS code. This number includes the KEY_foo ones, but not the ones in config.h.
To deal with namespace pollution, we have had the -DNO_SHORT_NAMES Configure option for use just with embedded perls. This hasn't worked at least since we added inline functions, and it always applied to only functions. I have a WIP to get this to work again, and to extend it to work with documented macros. It just occurred to me how to make this be customizable, so that downstream someone could add a list of symbols that should only exist as 'Perl_foo', and then recompile, leaving short names for everything not in the list.