Skip to content

Commit d3b05bd

Browse files
committed
doc link fix
1 parent 17e1193 commit d3b05bd

File tree

2 files changed

+3
-3
lines changed

2 files changed

+3
-3
lines changed

doc/flow.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
## Rationale
44

5-
The [rationale](rationale.html) for **core.async** says "There comes a time in all good programs when components or subsystems must stop communicating directly with one another." And core.async provides fundamental tools (channels) for doing that.
5+
The [rationale](https://clojure.github.io/core.async/rationale.html) for **core.async** says "There comes a time in all good programs when components or subsystems must stop communicating directly with one another." And core.async provides fundamental tools (channels) for doing that.
66

77
But using core.async well, e.g. keeping your I/O out of your computational logic, requires discipline and architectural savvy, and to do so consistently throughout an application or organization, conventions. Given channels, many architectural decisions remain regarding thread execution, backpressure, error handling etc. And often the topology of your network of communicating processes *emerges* out of the flow of control of your program as various pieces of code create threads and wire channels together, interleaved with computation, making it difficult to see the topology or administer it in one place.
88

docs/flow.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
"">
33
<html><head><meta charset="UTF-8" /><title>core.async.flow</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name"></span> <span class="project-version"></span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="rationale.html"><div class="inner"><span>Rationale</span></div></a></li><li class="depth-1 current"><a href="flow.html"><div class="inner"><span>core.async.flow</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1 "><a href="clojure.core.async.html"><div class="inner"><span>clojure.core.async</span></div></a></li><li class="depth-1 "><a href="clojure.core.async.flow.html"><div class="inner"><span>clojure.core.async.flow</span></div></a></li><li class="depth-1 "><a href="clojure.core.async.flow.spi.html"><div class="inner"><span>clojure.core.async.flow.spi</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#coreasyncflow" id="coreasyncflow"></a>core.async.flow</h1>
44
<h2><a href="#rationale" id="rationale"></a>Rationale</h2>
5-
<p>The <a href="rationale.html">rationale</a> for <strong>core.async</strong> says “There comes a time in all good programs when components or subsystems must stop communicating directly with one another.” And core.async provides fundamental tools (channels) for doing that.</p>
5+
<p>The <a href="https://clojure.github.io/core.async/rationale.html">rationale</a> for <strong>core.async</strong> says “There comes a time in all good programs when components or subsystems must stop communicating directly with one another.” And core.async provides fundamental tools (channels) for doing that.</p>
66
<p>But using core.async well, e.g. keeping your I/O out of your computational logic, requires discipline and architectural savvy, and to do so consistently throughout an application or organization, conventions. Given channels, many architectural decisions remain regarding thread execution, backpressure, error handling etc. And often the topology of your network of communicating processes <em>emerges</em> out of the flow of control of your program as various pieces of code create threads and wire channels together, interleaved with computation, making it difficult to see the topology or administer it in one place.</p>
77
<p>The fundamental objective of <strong>core.async.flow</strong> is to enable a strict separation of your application logic from its topology, execution, communication, lifecycle, monitoring and error handling, all of which are provided by and centralized in, c.a.flow, yielding more consistent, robust, testable, observable and operable systems.</p>
88
<h2><a href="#overview" id="overview"></a>Overview</h2>
99
<p><strong>core.async.flow</strong> provides <em>concrete</em> implementations of two more abstractions - the ‘<strong>process</strong>’ - a thread of activity, and the ‘<strong>flow</strong>’ - a directed graph of processes communicating via channels. A single data structure describes your flow topology, and has all of the settings for threads, channels etc. A process accepts data from and provides data to channels. The process implementation in c.a.flow handles all channel I/O, thread lifecycle and coordination with the flow graph.</p>
1010
<p>All you need to do in your application is:</p>
1111
<ol>
1212
<li>
13-
<p>Define ordinary, often pure, data-&gt;data functions that the processes will run in their inner loop to do the <em>computational</em> part of processing messages. These functions do not handle channels or threads or lifecycle, and do not even know they are running in a flow. They can be tested in isolation, and hot-reloaded. If they encounter a problem they can, and should, just throw an exception. The process will take care of it from there.</p>
13+
<p>Define ordinary, often pure, data-&gt;data functions that the processes will run in their inner loop to do the <em>computational</em> part of processing messages (aka ‘step’ functions). These functions do not handle channels or threads or lifecycle, and do not even know they are running in a flow. They can be tested in isolation, and hot-reloaded. If they encounter a problem they can, and should, just throw an exception. The process will take care of it from there.</p>
1414
</li>
1515
<li>
1616
<p>Define a flow by creating a data structure that enumerates the processes and the connections between their inputs and outputs, as well as various configuration settings for both.</p>

0 commit comments

Comments
 (0)