'''[http://chiselapp.com/user/pooryorick/repository/ycl/dir?ci=trunk&name=packages/daerth%|%Daerth]''', by [PYK], is a multi-threaded system providing queues and transport who consume from one queue and feed another. ** Description ** Each '''queue''' is in its own thread. Each '''transport''' is given a '''source queue''' to consume from and a '''destination queue''' to feed. Queue operations '''block''' until successful. Blocking is implemented via [coroutine%|%coroutines]: Any script performing queue operations must run in a coroutine context, and every queue operation suspends the coroutine which is then woken up later by an acknowledgement from the queue. When a queue is empty and there are no more feeders, `take` returns a code of `break`. Worker threads end automatically. Queues are deleted by the user. A transport typically calls `daerth deliver` in a loop which is broken when the queue is exhausted. ** Synopsis ** '''`daerth queue .spawn`''' ''`cmdname`'': Create a new queue. '''`daerth pipeline`''' ''`name`'' ''`producers`'' ?''`transports ...`''? : A produer is produced for each item in ''`producers`'' and that item is passed to the producer as its ''`work`'' argument. A transport is produced for each item in each ''`transports`'' list, and that item becomes its ''`args`'' list. Queues are created between each group of producers and transports. A new command named ''`name`'' is created. Each time it is called it returns one result from the final queue, or if the pipeline is exhausted it returns a code of `[break]` and deletes itself and all relevant queues. '''`daerth producer`''' ''`queue`'' ''`work`'': Create a new producer to feed a queue. ''`work`'' is a list of arguments to pass to `[apply]`, and when it is applied the fully-qualified name of the command for the daerth system is passed as the last argument. '''`daerth transport`''' ''`source`'' ''`dest`'' ''`args`'': ''`source`'' is the thread for the source queue, ''`dest`'' is the thread for the destination queue, ''`args`'' is a list of arguments to `[apply]`, as described for `daerth producer` is a list of arguments to `[apply]`. The name of the transport command is passed to this procedure as the first argument. ** Transport commands ** '''`take`''': Take one item from the source queue. Returns the item, or `-code break` if the queue is empty. '''`deliver`''': Deliver a value to the destination queue and take one item from the source queue. ** Queue commands ** '''`init`''': Initialize the queue. '''`exit`''': Finalize the queue and release the thread for it. ** Station commands ** '''`count`''': The number of transports to create. '''`transport`''': A list whose items are passed as the arguments to `transport`. ** Examples ** See the [http://chiselapp.com/user/pooryorick/repository/ycl/artifact?ln=173-215&name=a1aebc7070a174e8%|%test suite]. <> ycl