Re:Pluto.jl – a reactive, lightweight, simple notebook
by benhurmarcel on Friday August 28, 2020 @10:50AM
(#24305553)
What happens if you reassign a variable below? Like:
a = 1
println(a)
a = 2
Does it show 1 or 2?Edit: tested it, it throws an error "Multiple definitions for a: Combine all definitions into a single reactive cell using a `begin ... end` block."
Not sure I like that way of working.
Re:Pluto.jl – a reactive, lightweight, simple notebook
by darsnack on Friday August 28, 2020 @11:35AM
(#24306079)
In a more complex example where you actually take a variable, do some operations to it, then reassign it, Pluto.jl encourages you to separate that into multiple cells. The reason is each cell marks a distinct node in the dependency graph. If you prefer to use cells, then the notebook can be smarter about what lines actually need to get re-run and what don't.
A downside to using multiple cells is vertical spacing/visual noise. This is something that the package authors are currently thinking about addressing.
Re:Pluto.jl – a reactive, lightweight, simple notebook
by vanderZwan on Friday August 28, 2020 @11:22AM
(#24305927)
Think of it as working with immutable data, because that's essentially what it is. Which has all the pros and cons of that approach (in my opinion a lot more pros, but YMMV).
Re:Pluto.jl – a reactive, lightweight, simple notebook
by benhurmarcel on Saturday August 29, 2020 @08:47AM
(#24315713)
Yes, that's the best explanation in the end I think. Maybe I'm too used to reuse variables and that's a bad habit I should work on. For example most of my counters are called i.
(edit: I suppose it's not really global state I'm talking about as much as hidden state left over from overwritten or deleted cells)
For example, I typically create tonnes of code cells when I visualize and try to get a sense of some data. The large majority of cells (probably >80%) are then deleted, and whenever I find a trivial bug in some code, I fix the cell where the bug occured.
But now - which cells had I rerun after fixing the bug? And did any of the run cells depend on some variable in a deleted cell? If so, the notebook will no longer be reproducible when I re-run it? It's impossible to keep track of. So when I use Jupyter, I frequently press the "restart kernel and run all" option. But of course, that is slow. So I need to serialize a lot of data, which is troublesome. Pluto completely circumvents that problem.