• Isolation
  • Coordination Language
  • Concurrency

Threads are Isolation

Programs are completely separated from each other and can communicate only over very restricted channels.

Threads are envelopes that one can drop calculators into.

Coordination Language

PLs have traditionally been restricted to expressing the contstruction of synchronous calculators.

Few PLs address the issues of distributed programming1.

/bin/sh (& and |) is a DSL for creating higher-level concurrent abstractions.

PID

PIDs - process ID - are handles to first-class components.

Concurrency

Concurrency is a programming paradigm.

Parallelism is an application problem that needs to use the concurrent paradigm

Anti-Takeaways

Time-Sharing

Memory Sharing

Closures

Threads are just closure-wannabees2.

UNIX threads are just ad-hoc implementations of closures in C.

Dependency Spaghetti

Rendezvous

Rendezvous is an attempt to corral concurrency by making everything synchronous.

Syntax for Distributed Programming is Minimal

The UNIX shell syntax for distributed programming is muddied by the inclusion of many other features3.

Continued Conflation and Muddied Waters Between Programming and O/Ss

UNIX contains several fundamental advances in PL features (e.g. |, &, fork, etc).

These PL advances have, unfortunately, been conflated with Operating Systems and have largely been ignored in PL designs.

N.B. Pipelines of functions are not the same as pipelines of isolated components.

Union of Coordination and String Processing and …

O/Ss are just libraries.

Windows, MacOS, Linux are just applications.

The problems that Windows, MacOS and Linux must solve are different from the problems that most apps need to solve.

Not every app should have all of the operating system principles built-in, e.g. not every app needs memory sharing and time-sharing.

Some apps use the concurrent programming paradigm. This should not mean that they must include all of O/S-style threading.

Pipelines vs. Isolation

UNIX popularized pipelines of isolated components.

These advances have been, unfortunately, overlooked due to

  • conflation with heavy technologies (e.g. O/Ss)
  • premature optimization (e.g. the ideas of isolation were burned into hardware before they were sufficiently explored, e.g. C had some useful ideas about isolation but these were missed in lieue of C’s system-language features)

    See Also

    Concurrency is not Parallelism

References
Table of Contents

  1. Distributed programming is, currently, only addressed by second-class, assembler-like operations and libraries. 

  2. Maybe I mean continuations?. 

  3. Lack of Separation of Concerns