MIT 6.824 Distributed Systems labs rewritten in Go
pdos.csail.mit.edu
pdos.csail.mit.edu
> Your job is to modify client.go, server.go, and common.go so that they pass the tests in test_test.go (which go test runs).
Enjoy the course, it's a great one!
The good news is that you can get an A on all the problem sets by just completing them to specifications. It's often unclear whether you will be able to make the deadline, but usually you manage. At least at Yale, I've found the tests to be pretty difficult as they are the differentiator in the courses.
The professor, David Andersen, catalogued his experience on Google Plus: https://plus.google.com/115237092509505721130/posts/DKVcPLbq... https://plus.google.com/115237092509505721130/posts/AQqe7Xay... https://plus.google.com/115237092509505721130/posts/d2RE6gbj... https://plus.google.com/115237092509505721130/posts/3PFz3RUe...
> You'll implement this lab (and all the labs) in Go.
I'm really glad to see this :-)
CSP/Actor concurrency instead of exposing raw threads is a huge win. Focusing on interfaces instead of ancestry is also a huge win. However, it's really tough for me to get over Go's treatment of null and global mutable state.
It seems to me a bit of a waste to design a new statically typed language that intentionally allows the most common type error, as if Tony Hoare's Billion Dollar Mistake wasn't a mistake. One of the smartest things Bjarne Stroustrup did was disallow null in C++'s reference semantics.
It also seems a waste to give a language somewhat Erlang-like CSP/Actor-based concurrency, and then allow direct mutation of global state. This makes it much easier to introduce concurrency bugs, and also hurts garbage collector performance.
Maybe I just tried out Go too early. Does Go still use the Plan9 ABI and come with a copy of kenc so you can recompile your C source to be linkable against your Go code? Are the language creators still the only ones allowed to create generics?