Somewhere a Haskell programmer is nodding.
Somewhere a Haskell programmer is nodding.
AFAIK(I'm no Haskell guru) Haskell doesn't let you specify memory layout explicitly. Without that you won't see the massive gains that come from data-oriented design.
The second half of this talk from Herb Sutter covers is succinctly: https://channel9.msdn.com/Events/Build/2014/2-661
The conclusion is to use tightly packed data structure to take advantage of the cache locality of the modern CPU for high performance requirement. That can be done in most languages.
That's two concepts. So, the two concepts that need to be understood by programmers are Input and Output. And State.
There could be an interesting synthesis between Minkowski spacetime, lambda calculus, and Lamport clocks that will either a) show that the fundamental unifying element in the universe is functions (and really annoy at least one side in the disagreements over the Black Hole Information Paradox), or b) make for a terrific Greg Egan novel.
(If you squint right, you can see the decision making bit. But it's a tight squint.)
--- (from Wikipedia:)
The evaluation operation is defined as follows:
(x, y, and z represent expressions made from the functions S, K, and I, and set values):
I returns its argument:
Ix = x
K, when applied to any argument x, yields a one-argument constant function Kx , which, when applied to any argument, returns x: Kxy = x
S is a substitution operator. It takes three arguments and then returns the first argument applied to the third, which is then applied to the result of the second argument applied to the third. More clearly: Sxyz = xz(yz)
---See https://www.reddit.com/r/haskell/comments/ypcu7/hello_world_... for an example program in SKI.
No, programming is making output from input. Input is just a set of bytes, and output is also a set of bytes.