This support is notably missing when assembling the correct layer of stuff needed to get lots of computers to do something useful in concert. ![]() When programming for a single machine, you generally have a typechecker that helps ensure all the pieces fit together, and you can abstract over things however you like, introduce reusable components, and so on. Moreover, it's complicated to set up all your compute resources to ensure that overall, they act to execute the overall computation you're interested in, and you get none of the niceties of programming languages to help you along the way. With this existing paradigm, distributed computations are described not with one program, but many separate programs stiched together with a morass of glue, duct tape, YAML files, and blobs of JSON being sent over the network. ![]() You can't "just" run a computation elsewhere, you have to send bytes over the network, and then (somehow?) make sure the other end is running a separate program that is listening for those bytes and will deserialize them and hopefully run the computation you want. Any interaction with things outside the program boundary is done very indirectly, by sending bytes over a socket, say. Programming languages today are generally based around the idea that a program is a thing that describes what a single OS process does, on a single computer. This Strange Loop talk covers many of these ideas as well, though some of the details are out of date. Let's go over how each of these benefits emerges. This starting assumption provides some surprising benefits: it simplifies distributed programming, eliminates builds and dependency conflicts, supports typed durable storage, structured refactorings, enables better tools for working with code, and lots more. We can change what address a name points to, but the contents of each address are forever unchanging. Names are like pointers to addresses in this space. Thus, the hash of increment uniquely identifies its exact implementation and pins down all its dependencies.Īn analogy: Each Unison definition has a unique and deterministic address (its hash) in this vast immutable address space. + function) are replaced by their hashes. So all named arguments are replaced by positionally-numbered variable references, and all dependencies (in this case the Nat.
0 Comments
Leave a Reply. |