Portable reload planning: what a set of namespaces requires, the order that loads each after its requirements, the require cycles no order can place, and the dependents a change drags in.
Pure data in, plans as data out. No file reading, no classpath, no clj-reload and no host interop live here, so the same namespace runs on the JVM (hive-hot.core, over clj-reload's parsed state) and on cljrs (dirge's embedded addon host, over ns forms it read itself). Readers and loaders are the adapters' business.
Ubiquitous language:
ns form - an unevaluated (ns name ...) list, as read-string gives it
source - {:ns name :requires #{name}}, what an ns form declares
graph - {name {:requires #{name}}}, sources keyed by namespace
plan - {:order [source] :cycle [source]}, what load-order answers
Portable reload planning: what a set of namespaces requires, the order
that loads each after its requirements, the require cycles no order can
place, and the dependents a change drags in.
Pure data in, plans as data out. No file reading, no classpath, no
clj-reload and no host interop live here, so the same namespace runs on
the JVM (hive-hot.core, over clj-reload's parsed state) and on cljrs
(dirge's embedded addon host, over ns forms it read itself). Readers and
loaders are the adapters' business.
Ubiquitous language:
ns form - an unevaluated `(ns name ...)` list, as `read-string` gives it
source - {:ns name :requires #{name}}, what an ns form declares
graph - {name {:requires #{name}}}, sources keyed by namespace
plan - {:order [source] :cycle [source]}, what load-order answers(dependees sources)The require graph of sources inverted: {name #{name that requires it}}.
Every source has a key; a require of a name no source declares adds no
edge.
The require graph of `sources` inverted: {name #{name that requires it}}.
Every source has a key; a require of a name no source declares adds no
edge.(dependents-closure dependees starts)Every namespace a change to starts reaches through dependees
({name #{dependent}}), the starts included: #{name}.
Every namespace a change to `starts` reaches through `dependees`
({name #{dependent}}), the starts included: #{name}.(graph->sources graph)A graph ({name {:requires #{name}}}, the shape clj-reload keeps under :namespaces) as sources, sorted by name so plans over it are deterministic.
A graph ({name {:requires #{name}}}, the shape clj-reload keeps under
:namespaces) as sources, sorted by name so plans over it are
deterministic.(load-order sources)sources ({:ns name :requires #{name}}) ordered so each follows the
sources it requires, ties in input order: {:order [source] :cycle
[source]}. :cycle holds, in input order, the sources no order can place:
those in a require cycle and those requiring one. A require of a name no
source declares is outside the plan and never blocks.
`sources` ({:ns name :requires #{name}}) ordered so each follows the
sources it requires, ties in input order: {:order [source] :cycle
[source]}. :cycle holds, in input order, the sources no order can place:
those in a require cycle and those requiring one. A require of a name no
source declares is outside the plan and never blocks.What load-order answers. :order loads each source after those it requires; :cycle holds the sources no order can place.
What load-order answers. :order loads each source after those it requires; :cycle holds the sources no order can place.
(ns-deps form)What an ns form declares: {:ns name :requires #{name}}, :requires being the namespaces its :require and :use clauses name. nil for any other form.
What an ns form declares: {:ns name :requires #{name}}, :requires being
the namespaces its :require and :use clauses name. nil for any other
form.An unevaluated ns form: (ns name docstring? attr-map? clause*), a clause
being (:require spec*), (:use spec*) or any other list.
An unevaluated ns form: `(ns name docstring? attr-map? clause*)`, a clause being `(:require spec*)`, `(:use spec*)` or any other list.
(require-targets spec)The namespaces one :require or :use spec names: a symbol, a vector headed by one, or a prefix list.
The namespaces one :require or :use spec names: a symbol, a vector headed by one, or a prefix list.
What an ns form declares: its name and the namespaces it requires.
What an ns form declares: its name and the namespaces it requires.
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |