Escher A language for connecting technologies using pure metaphors

Escher programming language

Motivation

Web pages and links form a graph. Data-center computers and cables form a graph. Application processes and connections form a graph. Facebook users and friendships form a graph. Facebook groups and memberships form a graph. Neurons and synapses form a graph. Threads and shared data structures form a graph. Processes and sockets form a graph.

Not only are all of the above situations visually described by graphs, but also their essential behavior (as best as we understand it) is the same in all cases: They are comprised of independent processing units, which are pairwise-interlinked by sequential channels, while both channels and processors are emerging and disappearing asynchronously.

Three decades ago, before the above examples were within practical reach, a British gentleman — named Tony Hoare — had noticed that this essential behavior was exhibited by virtually all identifiable interacting physical (as well as man-made abstract) entities: People interacting with people, people interacting with vending machines, components of vending machines interacting with each other, animals interacting with animals, cells interacting with cells, proteins interacting with proteins, and so on.

He called this high-level behavioral model of the world (or discernible subsystems thereof) Communicating Sequential Processes. Hoare's model is nothing more and nothing less than a minimal abstraction of how we see and understand (and subsequently will to control) the world from an observer — i.e. third person — point of view.

I prefer to call such systems circuits, both for brevity and for the fact that electrical circuits were probably the first man-made manifestation of communicating sequential processes that was rich, flexible and not present in untouched nature.

Today's connected Internet services and devices are no different than electrical components on a circuit: They are independent processing units communicating via sequential streams of data, as opposed to sequential streams of changes in electrical voltage. The difference between analog and digital circuits is entirely linguistic: It is the difference between a floating-point number (the voltage) and a data structure (a digital message).

If it is indeed the case that most things that we program or that we program about are circuits at the end of the day, then it is only appropriate to complement Hoare's model of everything with an appropriate programming language. This is the goal of Escher.

Sources

Find the source repository for Escher on GitHub. Follow us on Twitter @escherio.

Documentation

Case studies