====== Week 10 ======
~~NOTOC~~
===== Channels, CSP, and Go =====
* Peter Welch's [[courses:cs377-202201:welch-lectures:top|Occam-pi Lecture Notes]]
* Go demo and starter code
* copy from Marc's directory into your ''cs377'' course directory:
$ cd ~/cs377
$ cp -r /home/mlsmith/cs377-examples/Go ./
* you should see the following files in your local ''Go'' directory:
$ ls
csp-dining-phils.go phils-out.txt sieve.go sort-pump.go
$
* Demo and codewalk of ''csp-dining-philosophers.go''
* Go language features highlighted:
* channels
* select
* Design basis for solution in Go: go routines (processes)
* room (communicates with philosophers over channels)
* for philosophers to enter/leave -- at most 4 at a time to prevent deadlocking, 5th philosopher blocks
* forks (communicate with philosophers over channels)
* philosophers (communicate with forks over channels)
* To run this program:
$ go run csp-dining-philosophers.go
* Demo and codewalk: Sieve of Eratosthenes (Prime Number Sieve) ''sieve.go''
* Go language features highlighted:
* Only one looping construct in Go: for loop
* all three parts are optional: init statement, conditional expression, post statement
* channel declarations in function headers
* can specify syntactically whether channel is for reading from: <-chan
or writing to: chan<-
* To run this program:
$ go run sieve.go
// //
* Assignment 5 posted
* Sort Pump Gophers {{sort-pump.pdf|PDF}}
* see a similar example in occam on slides 13--31 of PHW's [[https://www.cs.vassar.edu/_media/courses/cs377-202201/welch-lectures/replicators.pdf|replicators]] lecture notes
* Due: Friday, Nov 18th