This PR extends `Std.Channel` to provide a full sync and async API, as well as unbounded, zero sized and bounded channels. A few notes on the implementation: - the bounded channel is inspired by [Go channels on steroids](https://docs.google.com/document/d/1yIAYmbvL3JxOKOjuCyon7JhW4cSv1wy5hC0ApeGMV9s/pub) though currently doesn't do any of the lock-free optimizations - @mhuisi convinced me that having a non-closable channel may be a good idea as this alleviates the need for error handling which is very annoying when working with `Task`. This does complicate the API a little bit and I'm not quite sure whether this is a choice we want users to give. An alternative to this would be to just write `send!` that panics on sending to a closed channel (receiving from a closed channel is not an error), this is for example the behavior that golang goes with.
46 lines
1.1 KiB
Text
46 lines
1.1 KiB
Text
/-
|
|
Copyright (c) 2016 Microsoft Corporation. All rights reserved.
|
|
Released under Apache 2.0 license as described in the file LICENSE.
|
|
Authors: Leonardo de Moura
|
|
-/
|
|
prelude
|
|
import Init.Data.Basic
|
|
import Init.Data.Nat
|
|
import Init.Data.Bool
|
|
import Init.Data.BitVec
|
|
import Init.Data.Cast
|
|
import Init.Data.Char
|
|
import Init.Data.String
|
|
import Init.Data.List
|
|
import Init.Data.Int
|
|
import Init.Data.Array
|
|
import Init.Data.Array.Subarray.Split
|
|
import Init.Data.ByteArray
|
|
import Init.Data.FloatArray
|
|
import Init.Data.Fin
|
|
import Init.Data.UInt
|
|
import Init.Data.SInt
|
|
import Init.Data.Float
|
|
import Init.Data.Float32
|
|
import Init.Data.Option
|
|
import Init.Data.Ord
|
|
import Init.Data.Random
|
|
import Init.Data.ToString
|
|
import Init.Data.Range
|
|
import Init.Data.Hashable
|
|
import Init.Data.OfScientific
|
|
import Init.Data.Format
|
|
import Init.Data.Stream
|
|
import Init.Data.Prod
|
|
import Init.Data.AC
|
|
import Init.Data.Queue
|
|
import Init.Data.Sum
|
|
import Init.Data.BEq
|
|
import Init.Data.Subtype
|
|
import Init.Data.ULift
|
|
import Init.Data.PLift
|
|
import Init.Data.Zero
|
|
import Init.Data.NeZero
|
|
import Init.Data.Function
|
|
import Init.Data.RArray
|
|
import Init.Data.Vector
|