Hello Paul (and everyone else),

On Sun, Nov 29, 2020 at 12:00 PM Paul Sokolovsky <pmis...@gmail.com> wrote:

> ...
>
> > # Experimental Syntax Proposal
> >
> > I would like to propose that Python adopts a modified process
> > before introducing significant changes of its syntax.
>
> []
>
> > ## New suggested process
> >
> > Assuming one of the options mentioned above is adopted,
> > before changes to the syntax are introduced in a Python version,
> > they would be made available to be used either as an encoding variant
> > or an import hook giving enough time for interested pythonistas to
> > experiment with the new syntax, writing actual code and possibly
> > trying out various alternatives.
>
> Thanks for posting this proposal. It should be pretty clear that's
> the best process which should be followed.

Thank you.



> It's also should be pretty
> clear that (almost) nobody follows it. If anything, lack of responses
> by the substance of the matter proposed, i.e. the *process*, not
> technical means to achieve it, is very telling.
>

I had taken the lack of response as indicative that my idea was simply
"wrong".




>
> So again, I fully agree that trying to implement any Python changes in
> the Python itself (instead of rushing to hack a particular
> implementation in C) should the best practice.
>
> Now let's talk why it's not that way. The main reasons would be lack of
> technical best practices to achieve that, and perceived complexity of
> existing ways to do that.
>
> Even from your proposal lack of the "best" solution is clear:
>
> > * By using an import hook. This is the most powerful approach as it
> >   allows one to do changes either at the source level
> >   (prior to parsing), or at the AST level, or both.
> >
> > * By using a custom encoding. This only allows transformations at the
> > source level.
>
> So, "custom encoding" way is essentially a hack. As it operates on the
> surface "stream of characters" representation of a program, only
> trivial, or imprecise transformations can be implemented.
>

Aside: some fairly complex transformations can be implemented using codecs;
see https://github.com/dropbox/pyxl for example.



> Alternatively, a program can be parsed, modified and dumped again as a
> stream of characters, just to immediately be parsed by the Python
> interpreter again. In either case, it's a hack, and should be rejected
> as a viable approach to a problem domain.
>
> Now you say that the second choice is "import hooks". But import hooks
> in Python is its own kingdom of "wonderland". Import hooks aren't
> intended to "allow to experiment with syntax", they are intended to do
> anything what's possible with module loading (and many things that
> aren't possible, I would add). So, they have rather complex,
> non-intuitive API, thru which anyone would need to wade, neck-deep,
> before implementing something useful.
>

In my original email, I linked to a project I created ("Ideas":
https://aroberge.github.io/ideas/docs/html/) which meant to simplify this
as much as possible.

>
> In other words, both choices you list aren't really viable to experiment
> with syntax/semantics.


I respectfully disagree, based on my own experimentation, documented in
"Ideas" mentioned previously. For example, I implemented module level
constants using this approach. They *almost* work ... except for some
corner cases due to the fact that I am using module objects created using
Python's type() as I have not figured out (yet?) how to create a module
object with a custom dict.


> That may be a good explanation why nobody rushes
> to.
>
> I'd formulate choices to experiment with syntax/semantics differently.
> Let's remember the compilation pipeline: the source is tokenized, then
> it's parsed into AST, then AST is compiled into bytecode.
>
> I tried to represent this visually on
https://aroberge.github.io/ideas/docs/html/possible.html



> 1. The central part of the pipeline is the AST. Many interesting
> features can be implemented on AST level. Others can be at least
> prototyped, using existing syntactic elements (by assigning to them
> new semantics). Of course, arbitrary syntax changes can't be
> implemented this way.

Exactly. Which is why I suggested using either import hooks or encodings.

[Snip: explanation leading to discussion of Python2 "compiler" package
which is referred to again at the end]


> What's needed is higher-level API specifically for the usecase of
> letting Python source of modules to run thru custom
> tokenizer/parser/bytecode compiler. The best known (non-adhoc) approach
> to that is PEP511: https://www.python.org/dev/peps/pep-0511/.


I believe that the intention of PEP-511 was to optimize the code generated,
and not to experiment with different syntax. I *think* that my ideas
project is essentially a superset of what is described in pep-511, but with
a completely different goal.

Best,

André



>
> --------
>
> This turned out to be a long intro. As I said, I fully agree with you,
> that changes to Python should be prototyped in Python. And there's no
> better way to "agree" than actually dogfood this approach to oneself.
>

Yes. One additional comment, point of emphasis about my original proposal.

Take PEP 505 (None-aware operators) written 5 years ago. It is still
deferred.

Imagine that someone wants to experiment with a custom implementation.
Using the approach I mentioned, it should be possible to do so.

Suppose that the same person wishes to also experiment with block-level
scoping.  By using the approach I mentioned in my original message, it
would be possible to "stack" transformations and experiment with code that
support either None aware operators and/or block-level scoping.  Different
syntax variants could be implemented separately and, provided they do not
create conflicts, could be tested together so that people could get a feel
as to whether or not some proposed change should be included in Python.



>
> As I lately argued here on the list that implementing block-level
> scoping for Python is "not rocket science at all" and "a notch above
> trivial", I decided to do just that - and subject myself to coding it
> up, using the very python-compiler project I mentioned above. The
> result is a branch on that repo:
> https://github.com/pfalcon/python-compiler/tree/for-block-scope
>
> (I'll post a separate message with details.)
>

I look forward to reading it.

Best regards,

André

>
>
>
>
> --
> Best regards,
>  Paul                          mailto:pmis...@gmail.com
>
_______________________________________________
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/S3R5IIX3QKUOUA53JINSRUPFXG62XA57/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to