Cohesive Systems logoCOHESIVE SYSTEMS

Programming Paradigms

Programming paradigms are recurring ways of interpreting and organizing computation. They select which structures are primary, which composition laws matter, and which operational details are left to a language, compiler, runtime, or other realization.

Paradigms overlap. A language, program, or system can be functional in its value transformations, relational in its queries, state-machine-based at an entity boundary, actor-oriented in its runtime organization, and process-oriented across a long-running workflow.

Paradigm Views

Paradigm viewPrimary structureCharacteristic questions
functional programmingvalues, functions, composition, evaluation, explicit effectsWhat value does this expression denote, and how do computations compose?
relational and logic programmingfacts, relations, constraints, proofs, queries, searchWhich tuples or substitutions satisfy the relation, and how are answers found?
imperative programmingcommands, stores, sequencing, mutationWhich command changes which state, and in what order?
object-oriented programmingidentity-bearing objects, encapsulation, dispatchWhich object interprets the operation, and what state or behavior does it own?
state-machine modelingstates, inputs, transitions, outputs, runsWhich transitions are admissible from the current state?
dataflow and reactive programmingdependencies, signals, events, time-varying valuesHow does change propagate through a dependency graph?
concurrent and actor-oriented programmingparticipants, messages, local state, schedulingWhich occurrences are independent, and how is reception or execution ordered?
process-oriented programminginterfaces, interactions, composition, feedback, tracesHow does work unfold and compose across participants and time?

This table names interpretive centers, not exclusive language categories. For example, an actor handler can be a pure function from current state and input to a new state and effects. A relational query engine can use imperative indexes and a functional expression tree. A workflow can be compiled into state machines and executed by an actor runtime.

Denotation, Control, and Realization

A paradigm can separate what a program means from how it is evaluated:

  • Functional denotation can be separated from strict, lazy, parallel, or effectful evaluation.
  • Relational denotation can be separated from depth-first, breadth-first, interleaved, indexed, or fixed-point search.
  • A state-machine specification can be separated from actor, database, workflow, or replicated-log execution.
  • A process theory can be separated from orchestration, choreography, scheduling, and durable execution mechanisms.

Nondeterminism appears differently in each view: as a multi-valued computation, a relation with several answers, an enabled-transition set, a scheduler choice, a message reception order, or a process branch. Confluence asks when those different execution paths remain coherent.

Cohesive Use

The Cohesive System Model should use paradigm terminology to expose structure, not to classify systems by branding. A paradigm note should state:

  • Which semantic objects are primary.
  • Which composition and equivalence laws apply.
  • Which forms of state, time, effects, and nondeterminism are represented.
  • Which evaluation or search strategy is separate from the denotation.
  • Which runtime mechanisms realize the paradigm without defining its meaning.
  • How the paradigm maps into domain semantics, system graph, operational concerns, and realization substrate.

External References

Related concepts: functional programming, relational and logic programming, state machines, process theories, nondeterminism and choice, reduction, evaluation, and confluence, compositionality, system language and realization, behavior, process, actor model, actor systems, runtimes, realization.