Hacker News new | ask | show | jobs
by lmm 3431 days ago
That seems like an exceedingly error-prone thing to write. "x +=1" isn't a value and the unmanaged mutation will be surprising when it happens. On a Python implementation with parallelism (e.g. Jython) you could very easily end up losing updates - on CPython the GIL will probably mean your code accidentally doesn't exhibit that problem, but that doesn't seem a very desirable way to code.
1 comments

What is the proposed alternative? (using a named function or method just seems to be semantically the same, just more characters)
Something like functional reactive programming style, where you explicitly define a pipeline from foo.click to x and explicitly gather together all your pipelines (explicitly defining the interleaving semantics rather than just "whenever an event happens it happens") and run them in one place.

    foo.on_click(partial(q.append, foo))
The nice thing about ``append`` is it's atomic (for builtins).
Where does the update of `x` go in this example? By observing a Queue or Stream `q`?
If it must be mutable state, then ideally you'd have a single consumer thread for counting off that queue to avoid worrying about locks.

Or maybe what's in the queue gets written to a permanent log and ``x`` is a query of that log, a la Datomic.