@@ -5,13 +5,13 @@ title: Documentation
55
66### Cloud Haskell Platform
77
8- This is the [ * Cloud Haskell Platform* ] [ 1 ] . Cloud Haskell is a set of libraries
8+ This is the [ * Cloud Haskell Platform* ] [ cloud-haskell ] . Cloud Haskell is a set of libraries
99that bring Erlang-style concurrency and distribution to Haskell programs. This
1010project is an implementation of that distributed computing interface, where
1111processes communicate with one another through explicit message passing rather
1212than shared memory.
1313
14- Originally described by the joint [ Towards Haskell in the Cloud] [ 12 ] paper,
14+ Originally described by the joint [ Towards Haskell in the Cloud] [ haskell11-ch ] paper,
1515Cloud Haskell has be re-written from the ground up and supports a rich and
1616growing number of features for
1717
@@ -23,23 +23,23 @@ growing number of features for
2323* supporting * static* values (required for remote communication)
2424
2525There is a recent
26- [ presentation] ( http://sneezy.cs.nott.ac.uk/fun/2012-02/ coutts-2012-02-28.pdf )
26+ [ presentation] [ fun201202- coutts]
2727on Cloud Haskell and this reimplementation, which is worth reading in conjunction
2828with the documentation and wiki pages on this website..
2929
3030Cloud Haskell comprises the following components, some of which are complete,
3131others experimental.
3232
33- * [ distributed-process] [ 2 ] : Base concurrency and distribution support
34- * [ distributed-process-platform] [ 3 ] : The Cloud Haskell Platform - APIs
35- * [ distributed-static] [ 4 ] : Support for static values
36- * [ rank1dynamic] [ 5 ] : Like ` Data.Dynamic ` and ` Data.Typeable ` but supporting polymorphic values
37- * [ network-transport] [ 6 ] : Generic ` Network.Transport ` API
38- * [ network-transport-tcp] [ 7 ] : TCP realisation of ` Network.Transport `
39- * [ network-transport-inmemory] [ 8 ] : In-memory realisation of ` Network.Transport ` (incomplete)
40- * [ network-transport-composed] [ 9 ] : Compose two transports (very preliminary)
41- * [ distributed-process-simplelocalnet] [ 10 ] : Simple backend for local networks
42- * [ distributed-process-azure] [ 11 ] : Azure backend for Cloud Haskell (proof of concept)
33+ * [ distributed-process] [ distributed-process ] : Base concurrency and distribution support
34+ * [ distributed-process-platform] [ distributed-process-platform ] : The Cloud Haskell Platform - APIs
35+ * [ distributed-static] [ distributed-static ] : Support for static values
36+ * [ rank1dynamic] [ rank1dynamic ] : Like ` Data.Dynamic ` and ` Data.Typeable ` but supporting polymorphic values
37+ * [ network-transport] [ network-transport ] : Generic ` Network.Transport ` API
38+ * [ network-transport-tcp] [ network-transport-tcp ] : TCP realisation of ` Network.Transport `
39+ * [ network-transport-inmemory] [ network-transport-inmemory ] : In-memory realisation of ` Network.Transport ` (incomplete)
40+ * [ network-transport-composed] [ network-transport-composed ] : Compose two transports (very preliminary)
41+ * [ distributed-process-simplelocalnet] [ distributed-process-simplelocalnet ] : Simple backend for local networks
42+ * [ distributed-process-azure] [ distributed-process-azure ] : Azure backend for Cloud Haskell (proof of concept)
4343
4444One of Cloud Haskell's goals is to separate the transport layer from the
4545* process layer* , so that the transport backend is entirely independent:
@@ -114,10 +114,10 @@ Haskell or C.
114114
115115### Network Transport Abstraction Layer
116116
117- Cloud Haskell's generic [ network-transport] [ 6 ] API is entirely independent of
117+ Cloud Haskell's generic [ network-transport] [ network-transport ] API is entirely independent of
118118the concurrency and messaging passing capabilities of the * process layer* .
119119Cloud Haskell applications are built using the primitives provided by the
120- * process layer* (i.e., [ distributed-process] [ 2 ] ), which provides abstractions
120+ * process layer* (i.e., [ distributed-process] [ distributed-process ] ), which provides abstractions
121121such as nodes and processes. Applications must also depend on a Cloud Haskell
122122Backend, which provides functions to allow the initialisation of the transport
123123layer using whatever topology might be appropriate to the application.
@@ -160,7 +160,7 @@ of other `Network.Transport` APIs if required, but for the most part this
160160is irrelevant and the application will interact with Cloud Haskell through
161161the * Process Layer* and * Platform* .
162162
163- For more details about ` Network.Transport ` please see the [ wiki page] [ 20 ] .
163+ For more details about ` Network.Transport ` please see the [ wiki page] ( /wiki/networktransport.html ) .
164164
165165### Concurrency and Distribution
166166
@@ -169,7 +169,7 @@ distributed programming are exposed to application developers. This layer
169169deals explicitly with
170170
171171The core of Cloud Haskell's concurrency and distribution support resides in the
172- [ distributed-process] [ 2 ] library. As well as the APIs necessary for starting
172+ [ distributed-process] [ distributed-process ] library. As well as the APIs necessary for starting
173173nodes and forking processes on them, we find all the basic primitives required
174174to
175175
@@ -215,7 +215,7 @@ runProcess :: LocalNode -> Process () -> IO ()
215215{% endhighlight %}
216216
217217Once we've spawned some processes, they can communicate with one another
218- using the messaging primitives provided by [ distributed-processes] [ 2 ] ,
218+ using the messaging primitives provided by [ distributed-processes] [ distributed-processes ] ,
219219which are well documented in the haddocks.
220220
221221### What is Serializable
@@ -272,7 +272,7 @@ need to spawn a process and send a bunch a messages to it, then wait for
272272replies however; we can’t send a ` ReceivePort ` since it is not ` Serializable ` .
273273
274274` ReceivePort ` s can be merged, so we can listen on several simultaneously. In the
275- latest version of [ distributed-process] [ 2 ] , we can listen for * regular* messages
275+ latest version of [ distributed-process] [ distributed-process ] , we can listen for * regular* messages
276276and multiple channels at the same time, using ` matchChan ` in the list of
277277allowed matches passed ` receiveWait ` and ` receiveTimeout ` .
278278
@@ -313,7 +313,7 @@ and decide whether to oblige or not.
313313
314314### Rethinking the Task Layer
315315
316- [ Towards Haskell in the Cloud] [ 12 ] describes a multi-layered architecture, in
316+ [ Towards Haskell in the Cloud] [ haskell11-ch ] describes a multi-layered architecture, in
317317which manipulation of concurrent processes and message passing between them
318318is managed in the * process layer* , whilst a higher level API described as the
319319* task layer* provides additional features such as
@@ -322,19 +322,19 @@ is managed in the *process layer*, whilst a higher level API described as the
322322* data centric processing model
323323* a promise (or * future* ) abstraction, representing the result of a calculation that may or may not have yet completed
324324
325- The [ distributed-process-platform] [ 18 ] library implements parts of the
325+ The [ distributed-process-platform] [ distributed-process-platform ] library implements parts of the
326326* task layer* , but takes a very different approach to that described
327- in the original paper and implemented by the [ remote] [ 14 ] package. In particular,
327+ in the original paper and implemented by the [ remote] [ remote ] package. In particular,
328328we diverge from the original design and defer to many of the principles
329- defined by Erlang's [ Open Telecom Platform] [ 13 ] , taking in some well established
329+ defined by Erlang's [ Open Telecom Platform] [ OTP ] , taking in some well established
330330Haskell concurrency design patterns along the way.
331331
332- In fact, [ distributed-process-platform] [ 18 ] does not really consider the
332+ In fact, [ distributed-process-platform] [ distributed-process-platform ] does not really consider the
333333* task layer* in great detail. We provide an API comparable to remote's
334334` Promise ` in Control.Distributed.Process.Platform.Async. This API however,
335- is derived from Simon Marlow's [ Control.Concurrent.Async] [ 19 ] package, and is not
335+ is derived from Simon Marlow's [ Control.Concurrent.Async] [ async ] package, and is not
336336limited to blocking queries on ` Async ` handles in the same way. Instead our
337- [ API] [ 17 ] handles both blocking and non-blocking queries, polling
337+ [ API] [ d-p-platform-async ] handles both blocking and non-blocking queries, polling
338338and working with lists of ` Async ` handles. We also eschew throwing exceptions
339339to indicate asynchronous task failures, instead handling * task* and connectivity
340340failures using monitors. Users of the API need only concern themselves with the
@@ -391,7 +391,7 @@ Work is also underway to provide abstractions for managing asynchronous tasks
391391at a higher level, focussing on workload distribution and load regulation.
392392
393393The kinds of task that can be performed by the async implementations in
394- [ distributed-process-platform] [ 3 ] are limited only by their return type:
394+ [ distributed-process-platform] [ distributed-process-platform ] are limited only by their return type:
395395it ** must** be ` Serializable ` - that much should've been obvious by now.
396396The type of asynchronous task definitions comes in two flavours, one for
397397local nodes which require no remote-table or static serialisation dictionary,
@@ -430,14 +430,14 @@ domain was more *haskell-ish* than working with bare send and receive primitives
430430The ` Async ` sub-package also provides a type safe interface for receiving data,
431431although it is limited to running a computation and waiting for its result.
432432
433- The [ Control.Distributed.Processes.Platform.ManagedProcess] [ 21 ] API provides a
433+ The [ Control.Distributed.Processes.Platform.ManagedProcess] [ d-p-platform-ManagedProcess ] API provides a
434434number of different abstractions that can be used to achieve similar benefits
435435in your code. It works by introducing a standard protocol between your process
436436and the * world outside* , which governs how to handle request/reply processing,
437437exit signals, timeouts, sleeping/hibernation with ` threadDelay ` and even provides
438438hooks that terminating processes can use to clean up residual state.
439439
440- The [ API documentation] [ 21 ] is quite extensive, so here we will simply point
440+ The [ API documentation] [ d-p-platform-ManagedProcess ] is quite extensive, so here we will simply point
441441out the obvious differences. A process implemented with ` ManagedProcess `
442442can present a type safe API to its callers (and the server side code too!),
443443although that's not its primary benefit. For a very simplified example:
@@ -489,8 +489,8 @@ API, which looks a lot like `Async` but manages exit signals in a single thread
489489configurable task pools and task supervision strategy part of its API.
490490
491491More complex examples of the ` ManagedProcess ` API can be seen in the
492- [ Managed Processes tutorial] [ 22 ] . API documentation for HEAD is available
493- [ here] [ 21 ] .
492+ [ Managed Processes tutorial] ( tutorials/tutorial3.html ) . API documentation for HEAD is available
493+ [ here] [ d-p-platform-ManagedProcess ] .
494494
495495### Supervision Trees
496496
@@ -500,25 +500,21 @@ TBC
500500
501501TBC
502502
503- [ 1 ] : http://haskell-distributed.github.io/documentation.html
504- [ 2 ] : https://github.com/haskell-distributed/distributed-process
505- [ 3 ] : https://github.com/haskell-distributed/distributed-process-platform
506- [ 4 ] : http://hackage.haskell.org/package/distributed-static
507- [ 5 ] : http://hackage.haskell.org/package/rank1dynamic
508- [ 6 ] : http://hackage.haskell.org/package/network-transport
509- [ 7 ] : http://hackage.haskell.org/package/network-transport-tcp
510- [ 8 ] : https://github.com/haskell-distributed/network-transport-inmemory
511- [ 9 ] : https://github.com/haskell-distributed/network-transport-composed
512- [ 10 ] : http://hackage.haskell.org/package/distributed-process-simplelocalnet
513- [ 11 ] : http://hackage.haskell.org/package/distributed-process-azure
514- [ 12 ] : http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel/remote.pdf
515- [ 13 ] : http://en.wikipedia.org/wiki/Open_Telecom_Platform
516- [ 14 ] : http://hackage.haskell.org/package/remote
517- [ 15 ] : http://www.erlang.org/doc/design_principles/sup_princ.html
518- [ 16 ] : http://www.erlang.org/doc/man/supervisor.html
519- [ 17 ] : http://hackage.haskell.org/package/distributed-process-platform/Control-Distributed-Process-Platform-Async.html
520- [ 18 ] : https://github.com/haskell-distributed/distributed-process-platform
521- [ 19 ] : http://hackage.haskell.org/package/async
522- [ 20 ] : /wiki/networktransport.html
523- [ 21 ] : http://hackage.haskell.org/package/distributed-process-platform/Control-Distributed-Process-Platform-ManagedProcess.html
524- [ 22 ] : /tutorials/tutorial3.html
503+ [ cloud-haskell ] : http://haskell-distributed.github.io/documentation.html
504+ [ fun201202-coutts ] : http://sneezy.cs.nott.ac.uk/fun/2012-02/coutts-2012-02-28.pdf
505+ [ distributed-process ] : https://github.com/haskell-distributed/distributed-process
506+ [ distributed-process-platform ] : https://github.com/haskell-distributed/distributed-process-platform
507+ [ distributed-static ] : http://hackage.haskell.org/package/distributed-static
508+ [ rank1dynamic ] : http://hackage.haskell.org/package/rank1dynamic
509+ [ network-transport ] : http://hackage.haskell.org/package/network-transport
510+ [ network-transport-tcp ] : http://hackage.haskell.org/package/network-transport-tcp
511+ [ network-transport-inmemory ] : https://github.com/haskell-distributed/network-transport-inmemory
512+ [ network-transport-composed ] : https://github.com/haskell-distributed/network-transport-composed
513+ [ distributed-process-simplelocalnet ] : http://hackage.haskell.org/package/distributed-process-simplelocalnet
514+ [ distributed-process-azure ] : http://hackage.haskell.org/package/distributed-process-azure
515+ [ haskell11-ch ] : http://research.microsoft.com/en-us/um/people/simonpj/papers/parallel/remote.pdf
516+ [ OTP ] : http://en.wikipedia.org/wiki/Open_Telecom_Platform
517+ [ remote ] : http://hackage.haskell.org/package/remote
518+ [ d-p-platform-async ] : http://hackage.haskell.org/package/distributed-process-platform/Control-Distributed-Process-Platform-Async.html
519+ [ async ] : http://hackage.haskell.org/package/async
520+ [ d-p-platform-ManagedProcess ] : http://hackage.haskell.org/package/distributed-process-platform/Control-Distributed-Process-Platform-ManagedProcess.html
0 commit comments