====== 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