I would like to second Steve's suggestion.

The requirements for JPype for this to work are pretty minimal.   If there were 
a bit flag for string like that was checked by PyString_Check and then a call 
to the PyObject_Str() which would be guaranteed to return a concrete Unicode 
which is then used  throughout the function call.  This would not require any 
additional slots.   Unfortunately, this doesn't match the other patterns in 
Python as if it passes PyString_Check then why would one need to call a casting 
object to get the actual string.  It could be as simple as making a macro 
PyString_ToUnicode() that calls PyUnicode_Check and if it passes creates a new 
reference else returns PyObject_Str().  It is then just a small matter for 
JString, ObjCStr, WinHTString, etc to set this bit flag when the type is 
created.  The downside of this is that we end up with an extra 
reference/dereference in string using functions, but given ownership concerns 
of a Buffer like protocol this is really the minimum required.

This does not deal with ObjC requirement through as unlike Java, ObjC has 
mutable strings.   There are number of parts of the Python API where the string 
is consumed immediately were immutable and mutable strings do not matter.  But 
others like the hash or dictionary keys require immutable.  So perhaps there 
needs to also be PyString_IsImmutable() so that we can prevent accidentally 
usage of a mutable string.

I would be happy to help with this effort, but I am in the unfortunate position 
that the legal department at my employer (DOE/LLNL) has objected to some clause 
in the PSF Contributor Agreement thus prohibiting me from signing it.   We also 
have a policy that prohibits open source contributions to projects that require 
signing agreements without laboratory legal sign off so I am in a bind until 
such time as I deal with their concerns.

--Karl

-----Original Message-----
From: Steve Dower <steve.do...@python.org> 
Sent: Monday, January 4, 2021 8:54 AM
To: python-dev@python.org
Subject: [Python-Dev] Re: Enhancement request for PyUnicode proxies

On 12/29/2020 5:23 PM, Antoine Pitrou wrote:
> The third option is to add a distinct "string view" protocol.  There 
> are peculiarities (such as the fact that different objects may have 
> different internal representations - some utf8, some utf16...) that 
> make the buffer protocol suboptimal for this.
> 
> Also, we probably don't want unicode-like objects to start being 
> usable in contexts where a buffer-like object is required (such as 
> writing to a binary file, or zlib-compressing a bunch of bytes).

I've had to deal with this problem in the past as well (WinRT HSTRINGs), and 
this is the approach that would seem to make the most sense to me.

Basically, reintroduce PyString_* APIs as an _abstract_ interface to str-like 
objects.

So the first line of every single one can be PyUnicode_Check() followed by 
calling the _concrete_ PyUnicode_* implementation. And then we develop 
additional type slots or whatever is necessary for someone to build an 
equivalent native object.

Most "is this a str" checks can become PyString_Check, provided all the APIs 
used against the object are abstract (PyObject_* or PyString_*). 
Those that are going to mess with internals will have to get special treatment.

I don't want to make it all sound too easy, because it probably won't be. But 
it should be possible to add a viable proxy layer as a set of abstract C APIs 
to use instead of the concrete ones.

Cheers,
Steve
_______________________________________________
Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email 
to python-dev-le...@python.org 
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/TC3BZJX4DGC2WV32AHIX7A57HQNJ2EMO/
Code of Conduct: http://python.org/psf/codeofconduct/
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/NQSXIJB4GGDYZ6BVEA2IZ4MCAQGCMRFW/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to