On 24 May 2019, at 22:11, Yanghao Hua email@example.com wrote:
On Fri, May 24, 2019 at 3:27 PM Ricky Teachey firstname.lastname@example.org wrote: This seems like a hurdle you're going to have trouble passing... especially given that all the functionality that is required can be provided using existing descriptor behavior. You will need to pretty concretely demonstrate why the special handling of signals in assignment (no matter which operator is the operator of choice) is something the language at large really needs, and why descriptors aren't sufficient.
Just a quick example, suppose you have a class A and class B representing two circuit blocks, where in class C you want instantiate A() and B() and connecting them together. Please do let me know if you could have a more reasonable way of representation to make it working. class A: def __init__(self, output): self.output = output def process(self): self.output = 5 # !!! this does not work for descriptors passed in
# self.c_self.signal = 5 # this might work, but what the heck really?!
class C: signal = Signal() def __init__(self): a = A(output=self.signal)
# a = A(output=self) # it is only possible for signal to work
if you pass C's self into a ... b = B(input=self.signal)
# !!! This does not work !!!
Instead, a much more natural way of doing it is: class A: def __init__(self, output): self.output = output def process(self): self.output <== 5 # this always works!
class C: def __init__(self): signal = Signal() a = A(output=signal) b = B(input=signal) # this feels much better, isn't it?
process() in A could look like:
To me that looks OK, and scales nicely with multiple outputs:
send() is implemented simply as
def send(self, **kwargs): for k, v in kwargs.items(): signal = self.signals[k] signal.c_self.output = v
Or something. I'm not sure about the details since I don't understand the example you give. It's pretty abstract and vague. Just a simple example of how to use A with a print() and the expected output of said print would help?