Ivan Reese
Cole
09/09/2021, 11:19 AMCole
09/09/2021, 11:22 AMChris Knott
09/09/2021, 1:12 PMChris Knott
09/09/2021, 1:18 PMMariano Guerra
This paper introduces TLA, which I now believe is the best general formalism for describing and reasoning about concurrent systems. The new idea in TLA is that one can use actions–formulas with primed and unprimed variables–in temporal formulas. An action describes a state-transition relation. For example, the action x’=x+1 means approximately the same thing as the programming-language statement x := x+1.https://www.microsoft.com/en-us/research/publication/the-temporal-logic-of-actions/
curious_reader
09/09/2021, 6:21 PMLuke Persola
09/10/2021, 12:18 AMFunctional Programming is orthogonal to this spectrumI don’t get this. While I would normally think of functional programming as being on the timeless end of the spectrum, you make a good point that it can also be on other end. But isn’t it the case that programming styles that contrast with FP often do have to be structured in time? To pick from your examples, how would you have mutable values without modeling time? Or with
forEach
don’t you need to have time to have side effects work?Luke Persola
09/10/2021, 1:34 AMibdknox
09/10/2021, 5:14 PMIvan Reese
keeping value in the stack for weeks at a timeI love this idea. I'm so accustomed to non-live programming that I forget about the completely different sensation of time that you get from a live environment, where state is can be thought of as non-volatile by default. @Chris Knott — I like that your two comments are "here's why [existing thing] is what it is" and "here's what I want to exist". Both make sense to me! @Mariano Guerra — Queued! Though unlike Lamport's earlier work (you know, the hits), this one looks like it might fly over my head a bit :$ @curious_reader — Croquet sure is interesting, hey? Though I'm not sure how it relates here — I can imagine ways, but if you had something specific about it you wanted to highlight that'd be appreciated. @Luke Persola — You're right, I under-considered what I was saying there. I was focused on pointing out that you can have all that conventionally "functional" stuff within a programming system that does feel very mechanical / process-oriented. I didn't consider enough whether it's possible to have the non-FP stuff within a system that feels timeless. Good point, will have to think about this some more. @ibdknox — Nice pulls! I suppose the same applies to RT OSes, CAN Bus (etc), and perhaps even programming within a high-end game engine (eg: frame cadence, Carmack's preference for algorithms that are slower average-case with less variability, etc). Would love to just be able to just... order a study on this.
shalabh
09/11/2021, 12:16 AM2 + 3
in a system, you've got a graph with three nodes (2, 3, +, connected in a nice tree) and after some time, you've got a 4th node (5, connected to the [2,3+] bundle of nodes), but in mathland all 4 nodes (and the edges and more) pre-existed.
On the intersection of these ideas, CRDTs come to mind. You have the semi-lattice, which is very mathematical and static. However you have the actual values at different nodes, which correspond to one node in the lattice at any point in time, but they change over time and eventually walk up the math lattice to meet at the top.
Croquet came to my mind as well when reading the prompt. On the surface it is full-mechanical. The machines moves, step by step, and is implemented in that style. However look between steps - each step is functional, it must be deterministic - that's what keeps all the different systems in sync. There is no logical time within a step (e.g. can be considered instantaneous.. the next input cannot interrupt a step).Chris Knott
09/11/2021, 9:32 AMlist.pop(0)
(popping first item from a list) differently. CPython bumps a pointer, Pypy moves the list. So it's O(1) vs O(n). There is literally no way to discover this "in system". This is the sort of thing that comes up in end-user programming like data science and will actually confuse users. It can make the difference between a visualisation being interactive or not.
The weakness in my position is that in a lot of cases, you truly don't ever need to worry about how the abstraction is actually realised/implemented. Most actual use cases are just IFTTT style plumbing or CRUD apps with N in the hundreds.curious_reader
09/13/2021, 9:18 AMalltom
09/13/2021, 4:39 PMalltom
09/13/2021, 4:42 PMIt’s common in this paradigm to discuss time—but normally it’s just treated as a variable in the equations, and one hopes that to find out what will happen at some arbitrary time one can just substitute the appropriate value for that variable into some formula derived by solving the equations. … In other words, that the passage of time can be an irreducible process, and it can take an irreducible amount of computational work to predict what a system will do at some particular time in the future.
Ivan Reese
Ivan Reese
In the ordinary computational paradigm, time in effect progresses in a linear way, corresponding to the successive computation of the next state of the system from the previous one. But in the multicomputational paradigm there is no longer just a single thread of time; instead one can think of every possible path through the multiway system as defining a different interwoven thread of time.This "multicomputational" paradigm offers an interesting aesthetic of time to consider. What would a programming system look/feel like that not only gave you an explicit grasp on the passage of time in computation, but that allowed you to explore multiple/all paths that diverge based on (say) wiggle room in the determinism of the program. Here's a really dumb way to fumble this idea into something I could play with: What if in Hest, instead of a data point having a concrete value (say: 5), a data point could contain some sort of "open" value. As the "open" data point travelled through the program graph and encountered some conditional node, it would satisfy all sides of the conditional, and produce more "open" output points to travel along each outgoing path. Maybe the breadth of "open"ness for those output points could then be narrowed, so the "open" value would only represent something that could satisfy the branch it took (eg: if the conditional was "< 10", then the point on one side now knows that it needs to be a number that's between -∞ and 9.9…, and the point on the other side knows it's either not a number or a number between 10 and ∞). You could zoom out and see how far each of those "open" points could travel before they were narrowed into oblivion. Would couple nicely with the idea that the points leave a visible trail as they travel that fades out after a while.
ibdknox
09/13/2021, 7:51 PMCole
09/13/2021, 7:55 PMCole
09/13/2021, 7:56 PMalltom
09/13/2021, 8:38 PMalltom
09/13/2021, 8:40 PMIvan Reese
Ivan Reese
Cole
09/14/2021, 12:25 AMIvan Reese