> Ouch! That's adding a lot of additional complexity to the language. 
> ...
> This proposal adds a completely separate, parallel set of scoping rules 
> for these string prefixes. How many layers in this parallel scope?

Right, having a parallel set of scopes sounds like WAY too much work.
Which is why I didn't want to start my proposal with a particular 
implementation -- I simply don't have enough experience for that.
Still, we can brainstorm possible approaches, and come up with 
something that is feasible.

For example, how about this: prefixes/suffixes "live" in the same local
scope as normal variables, however, in order to separate them from 
the normal variables, their names get mangled into something that is
not a valid variable name. Thus,

    re'a|b|c'  --becomes-->  (locals()["re~"])("a|b|c")
    2.3f       --becomes-->  (locals()["~f"])("2.3")

Assuming that most people don't create variable names that start
or end with `~`, the impact on existing code should be minimal (we
could use an even more rare character there, say `\0`).

The current string prefixes would be special-cased by the compiler to
behave exactly as they behave right now.

Also, a prefix such as `czt""` is always just a single prefix, there is no
need to treat it as 3 single-char prefixes.

> One of the weaknesses of string prefixes is that it's hard to get help 
> for them. ...
> What's the difference between r-strings and u-strings? help() is no help

Well, it's just another problem to overcome. I know in Python one can get
help on keywords and even operators by saying `help('class')` or `help('+')`.
We could extend this to allow `help('foo""')` to give the help for the
prefix "foo".

Specifically, if the argument to `help` is a string, and that string is not a
registered topic, then check whether the string is of the form `<id>""`
or `<id>''` or `""<id>` or `''<id>`, and invoke the help for the corresponding
prefix / suffix.

This will even solve the problem with the help for existing affixes `b""`,
`f""`, `0j`, etc.

>  you probably won't want to do that, since Version will probably be 
> useful for those who want to create Version objects from expressions or 
> variables, not just string literals.

For the Version class you're right. But use cases vary. In the thread from
2013 where this issue was discussed, many people wanted `sql"..."`
literal to be available as literal and nothing else. Presumably, if you wanted
to construct a query dynamically there could be a separate function
`sql_unsafe()` taking a simple string as an argument.


> So the "pollution" isn't really pollution at all, at least not if you 
> use reasonable names, and the main justification for parallel namespaces 
> seems much weaker.

The pollution argument is that, on one hand, we want to use short names
such as "v" for prefixes/suffixes, while on the other hand we don't want 
them to be "regular" variable names because of the possibilities of name
clashes. It's perfectly fine to have a short character for a prefix and at the
same time a longer name for a function. It's like we have the `unicode()`
function and `u"..."` prefix. It's like most command line utilities offer short
single-character options and longer full-name options.

> That's an interesting position for the proponent of a new feature to 
> take. "Don't worry about this being confusing, because hardly anyone 
> will use it."

I'm sorry if I expressed myself ambiguously. What I meant to say is that
the set of different prefixes within a single program will likely be small.


> We can't extrapolate from four built-in prefixes being manageable to 
> concluding that dozens of clashing user-defined prefixes will be too.

That's a valid point. Though we can't extrapolate that they will be 
unmanageable either. There's just not enough data. But we could look 
at other languages who have more suffixes. Say, C or C++.

Ultimately, this can be a self-regulating feature: if having too many
suffixes/prefixes makes one's code unreadable, then simply stop using
them and go back to regular function calls.
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/OCPR77XVTKWZJUSIBNJAF75FITRPE7AP/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to