3 ms·
Go has connections back to Plan 9. Pike and Thompson are credited as designers on Plan 9 and Russ Cox did a ton of work on it. (Pike's wife Renée French drew Pl
by twotwotwo 11y ago
Go has connections back to Plan 9. Pike and Thompson are credited as designers on Plan 9 and Russ Cox did a ton of work on it. (Pike's wife Renée French drew Plan 9's bunny mascot Glenda, and the Go gopher.) Go was in Plan 9 C until it became self-hosting. I think it even inherited that quirky asm syntax that that poor illumos dude didn't like. Plan 9 introduced UTF-8 and of course Go uses it, though most new projects today would use UTF-8 anyway.
I wonder if the team members' experience designing an OS made them a bit bolder doing some things differently from most of the ecosystem around them, like starting with their own ABI (everything on the (variable-sized) stack) and static linking.
There's certainly a focus on networked uses in both Plan 9 and Go, and the lightweight threading (for apps that juggle a lot of clients but spend a lot of time waiting on other machines) and the servers in the stdlib (including HTTP2 by default in 1.6!) are part of that.
"Everything is a file" makes me think of interfaces like io.Reader/Writer in Go. I remember as a newbie being impressed how it was elementary to string together a pipeline. I suppose you can string together pipelines fine in other languages too, but I still think Go does a pretty good job keeping it simple (a couple of method definitions get you started) but clear on essentials (when things block, how errors look).
Anyhow, I'd really love to hear more about the connections back to Plan 9 from someone who knows about them.
- pjmlp 11y ago> Anyhow, I'd really love to hear more about the connections back to Plan 9 from someone who knows about them. Learn about Limbo and see how much of Go resembles it. http://doc.cat-v.org/inferno/4th_edition/ http://doc.cat-v.org/inferno/4th_edition/
- henesy 11y agoFurthermore Go resembles Plan9's C libraries in many ways. Channels as chan, the concurrency support, and the focus on read/write are very much Plan9-isms. http://man.cat-v.org/plan_9/2/ http://man.cat-v.org/plan_9/2/
- henesy 11y agoYou're pretty spot on with the io.Reader/Writer idea. In Plan9 everything is a file, thus meaning that - potentially - everything implements a read/write capacity. If everything implements a read/write capacity and is designed to be interacted with as such over a unified protocol, such as 9P in Plan9, you end with a system that is interactive via files alone, leading to a high level of abstraction where the only concern is reading and writing, leaving communication concerns an afterthought. Go and Plan9 both operate with the network in mind. Plan9 can leverage namespacing and its file servers to export more or less all of the system, or import however much is desired of another. Go adopts this simplicity in mind, providing ways to operate logically to leave communication between things (network, channels, etc) as some form of a lesser concern. As I mentioned in another comment, a lot of nomenclature and idiomaticism is derived from Plan9 in Go. http://man.cat-v.org/plan_9/2/dial http://man.cat-v.org/plan_9/2/dial http://man.cat-v.org/plan_9/2/thread http://man.cat-v.org/plan_9/2/thread http://man.cat-v.org/plan_9/2/print http://man.cat-v.org/plan_9/2/print
- marcosdumay 11y agoYou know, I've always loved the "everything is a file" religion. That is, until I tried to actually create it in an environment[0]. Files, network connections, program interfaces, local IPC, and hardware are completely different, and that difference is important on about any interaction you make. They do have some common behavior, but one can't just make they look alike without losing a lot. [0] http://hackage.haskell.org/package/uniform-io http://hackage.haskell.org/package/uniform-io