On Fri, May 24, 2019 at 10:05:17AM +0200, Yanghao Hua wrote:
Well, if python is not envisioned to be able to represent almost everything elegantly maybe I should indeed walk away from this idea.
Python code is supposed to look like Python, not arbitrary languages. If you want a language where you can invent and use arbitrary syntax, Python is not the language for you.
Of course we could add a new dunder method __arrow__ and a new operator <== but why? What would it do? What types would support it?
PEP 465 had a concrete purpose for its new operator, and although no built-in object supported the @ operator, we understood why Numpy wanted it. But I do not understand why you want an arrow operator or what you will do with it.
What should built-in types do with this new dunder?
"Hello world!" <== "aardvark" 23.5 <== 1.25 [1, 2, 3] <== 4
Have you considered the __ilshift__ method?
signal <<= 5
Or perhaps a preprocessor, such as "Like Python" (a joke) or Coconut (serious)?
Perhaps something like that will solve your problem.
(This is sad for me ... I have been saying and believing python is envisioned that way for more than 20 years now). Your argument could be applied on PEP465 as well, where the only justification is to make matrix operation prettier.
Yes. You should study PEP 465. It is one of the best PEPs in Python's history. If you want your proposal to succeed, you should think "How can I write this to be more like PEP 465?"
I have explained the problem of use descriptors in previous replies, where you cannot have a local signal, e.g. obj.signal = thing # works, but local_signal = thing # doesn't work.
I am completely aware that we can't hook into assignment except with attribute or item assignment. But I still do not understand why you want to hook into assignment.
Perhaps I have missed something when reading your earlier posts, but I don't understand what you will do with this new operator. Perhaps you can show up your intended method?
x <== y
def __arrow__(self, other):
# what goes here?
In your first post, you said:
"it [item assignment using descriptors] does not work if you want a local signal, where signal = 5 will always make signal to be 5, instead of feeding 5 into this signal."
I am not sure if I understand what you mean by "feeding 5 into this signal". But if it means what I think it means, then you can give signal a method:
which is explicit and readable. Or you could use <<= as I mentioned above.
You also said:
"[arrow operator] looks like kind of the non-blocking assignment operators in hardware description languages"
What is "non-blocking assignment"?