]> Cypherpunks repositories - gostls13.git/commitdiff
update to new communications syntax
authorRob Pike <r@golang.org>
Wed, 17 Sep 2008 02:40:38 +0000 (19:40 -0700)
committerRob Pike <r@golang.org>
Wed, 17 Sep 2008 02:40:38 +0000 (19:40 -0700)
R=gri
OCL=15417
CL=15417

doc/go_tutorial.txt
doc/progs/server.go
doc/progs/server1.go
doc/progs/sieve.go
doc/progs/sieve1.go

index fb6717ed0a22a3acf688cbb39626d8fc1a2c250a..6ce7b60290f3fa3e1090e5ab60c1225a4d92a994 100644 (file)
@@ -456,18 +456,17 @@ Here is the first function in "progs/sieve.go":
 --PROG progs/sieve.go /Send/ /^}/
 
 The function "Generate" sends the sequence 2, 3, 4, 5, ... to its
-argument channel, "ch", using the binary send operator "-&lt".
+argument channel, "ch", using the binary communications operator "&lt-".
 Channels block, so if there's no recipient for the the value on "ch",
 the send operation will wait until one becomes available.
 
 The "Filter" function has three arguments: an input channel, an output
 channel, and a prime number.  It copies values from the input to the
-output, discarding anything divisible by the prime.  The unary prefix
+output, discarding anything divisible by the prime.  The unary communications
 operator "&lt;-" (receive) retrieves the next value on the channel.
 
 --PROG progs/sieve.go /Copy/ /^}/
 
-
 The generator and filters execute concurrently.  Go has
 its own model of process/threads/light-weight processes/coroutines,
 so to avoid notational confusion we'll call concurrently executing
@@ -567,9 +566,7 @@ Inside "Server", a "select" statement chooses which of the multiple communicatio
 listed by its cases can proceed.  If all are blocked, it waits until one can proceed; if
 multiple can proceed, it chooses one at random.  In this instance, the "select" allows
 the server to honor requests until it receives a quit message, at which point it
-returns, terminating its execution.  (The language doesn't yet allow the ":="
-syntax in "select" statements, although it might one day.  Also, observe the use
-of the binary, infix form of the receive operator.)
+returns, terminating its execution.
 
 
 All that's left is to strobe the "quit" channel
index 00bc3b96d5fda1d3492d9135387940d60568aa06..ea089785d94006ca8d0925c278eab7b84ed5c508 100644 (file)
@@ -13,7 +13,7 @@ type BinOp (a, b int) int;
 
 func Run(op *BinOp, request *Request) {
        result := op(request.a, request.b);
-       request.replyc -< result;
+       request.replyc <- result;
 }
 
 func Server(op *BinOp, service *chan *Request) {
@@ -38,7 +38,7 @@ func main() {
                req.a = i;
                req.b = i + N;
                req.replyc = new(chan int);
-               adder -< req;
+               adder <- req;
        }
        for i := N-1; i >= 0; i-- {   // doesn't matter what order
                if <-reqs[i].replyc != N + 2*i {
index 9f6c709b389f6fcb34a109cc7c3e400fac50e9ff..69bf22d871cf5e90d3cb06c1deb080bad70269a6 100644 (file)
@@ -13,14 +13,13 @@ type BinOp (a, b int) int;
 
 func Run(op *BinOp, request *Request) {
        result := op(request.a, request.b);
-       request.replyc -< result;
+       request.replyc <- result;
 }
 
 func Server(op *BinOp, service *chan *Request, quit *chan bool) {
        for {
-               var request *Request;
                select {
-               case request <- service:
+               case request := <-service:
                        go Run(op, request);  // don't wait for it
                case <-quit:
                        return;
@@ -44,12 +43,12 @@ func main() {
                req.a = i;
                req.b = i + N;
                req.replyc = new(chan int);
-               adder -< req;
+               adder <- req;
        }
        for i := N-1; i >= 0; i-- {   // doesn't matter what order
                if <-reqs[i].replyc != N + 2*i {
                        print("fail at ", i, "\n");
                }
        }
-       quit -< true;
+       quit <- true;
 }
index 60760cf4e8a43636ddfc478be7f3caee0f339f60..2ee3bb7ff0083699f7af6cae32c41e78ed00dc72 100644 (file)
@@ -7,7 +7,7 @@ package main
 // Send the sequence 2, 3, 4, ... to channel 'ch'.
 func Generate(ch *chan int) {
        for i := 2; ; i++ {
-               ch -< i  // Send 'i' to channel 'ch'.
+               ch <- i  // Send 'i' to channel 'ch'.
        }
 }
 
@@ -17,7 +17,7 @@ func Filter(in *chan int, out *chan int, prime int) {
        for {
                i := <-in  // Receive value of new variable 'i' from 'in'.
                if i % prime != 0 {
-                       out -< i  // Send 'i' to channel 'out'.
+                       out <- i  // Send 'i' to channel 'out'.
                }
        }
 }
index 2d6e069f40a8089913e340f4a0c2ebd1b97ec1e6..d1c3c7277dfbe63cbed544f929fccc87d0860569 100644 (file)
@@ -9,7 +9,7 @@ func Generate() *chan int {
        ch := new(chan int);
        go func(ch *chan int){
                for i := 2; ; i++ {
-                       ch -< i
+                       ch <- i
                }
        }(ch);
        return ch;
@@ -21,7 +21,7 @@ func Filter(in *chan int, prime int) *chan int {
        go func(in *chan int, out *chan int, prime int) {
                for {
                        if i := <-in; i % prime != 0 {
-                               out -< i
+                               out <- i
                        }
                }
        }(in, out, prime);
@@ -34,7 +34,7 @@ func Sieve() *chan int {
                ch := Generate();
                for {
                        prime := <-ch;
-                       out -< prime;
+                       out <- prime;
                        ch = Filter(ch, prime);
                }
        }(out);