
Google TechTalks
1 HN recommender · recommended in 12 months, 2009–2026
59:26 · 406K views · Nov 10, 2009
Rob Pike's October 2009 Google Tech Talk introducing Go, a new experimental systems language designed for fast builds, concurrency and garbage collection. It covers the goals, syntax and type system.
Used as the primary source for what Go's creators originally promised, such as fast compiles, systems-language framing, safety and generics.
17 comments from Hacker News
From the Tech Talk PDF, it is mentioned that Robert Griesemer, Ken Thompson, and Rob Pike started the project in late 2007. Ian Lance Taylor and Russ Cox joined in 2008. And the goal, as they mention, seems to have the efficiency of a statically-typed compiled language with the ease of programming of a dynamic language but with - Safety: type-safe and memory-safe. Good support for concurrency and communication. Efficient, latency-free garbage collection. High-speed compilation. They are aiming at a lightweight type system with no implicit conversions and no more 0x80ULL. A good starting point is their FAQ page and also the tech talk at youtube: this video
The "Talks and Videos" page ( [LINK] ) is outdated as well. Here's my personal list: Why Learn Go? [LINK] Short interview with Rob Pike, OSCON 2012 Get Started with Go [LINK] Andrew Gerrand A Tour of Go [LINK] Russ Cox Go Concurrency Patterns [LINK] Rob Pike, Google I/O 2012 Goroutines, Channels Meet the Go Team [LINK] Panel (Pike, Thompson, Griesemer, Gerrand, Fitzpatrick, Simons), Google I/O 2012 Computing Map Tiles with Go on App Engine [LINK] Chris Broadfoot, Andrew Gerrand, Google I/O 2012 Go in Production [LINK] Gustavo Niemeyer, Google I/O 2012 Go: Code that grows with grace [LINK] (Contains some audio glitches) Andrew Gerrand Interview with Rob Pike [LINK] Rob Pike, GOTO Conference Lexical Scanning in Go [LINK] Rob Pike Cuddle, A Go AppEngine Demo [LINK] Andrew Gerrand Building Integrated Apps on Google's Cloud Platform [LINK] Andrew Gerrand, Google Developer Day Japan 2011 Real World Go [LINK] Andrew Gerrand, I/O BootCamp 2011 Go: it's that simple?! [LINK] Andrew Gerrand, OSDC 2011 Practical Go Programming [LINK] Andrew Gerrand, FOSDEM 2011 Writing Web Apps in Go [LINK] Andrew Gerrand, Rob Pike, Google I/O 2011 Go Programming [LINK] Rob Pike, Google I/O 2010 Another Go at Language Design [LINK] Rob Pike, Stanford University Public Static Void [LINK] Rob Pike, OSCON 2010 The Go Programming Language this video Rob Pike, Google Tech Talk
> The only things I can think of which Go did that seemed blatantly wrong in that era would be the lack of generics and proper enums. Typescript added "improper" enums several years later. Which is especially interesting as it is the one feature in Typescript that doesn't map directly to Javascript. I'm not sure even that one was the settled science back then. Generics were well established at that time, but that one didn't escape the Go authors. From day one it was explicitly called out as a feature Go should have, but that they hadn't figured out how to integrate it. this video Despite Taylor's admirably insistent efforts to find a solution (with 8+ proposals to his name, dating back to before Go was released to the public!), it ultimately required convincing an outside expert to lend a hand. > I know others find the type system lacking It may be lacking by today's standards where types are all the rage, but at the time we should also remember that it was the case that types simply weren't cool. People had grown tired of "doing XML sit-ups" and had fully embraced dynamic languages in reaction to that. Go was built in that time, for that time, explicitly intending to be a language that felt like a dynamic language but with the performance advantages of a static language. this video
I would like to add on to this: Generics may not be the correct solution, but I would really like a way to make collections which are general enough to be used by any datatype. As of now, I cannot do that without doing the typical `interface{}` approach. The built-in data structures + channels are able to handle this, but if I just want a set of elements, what do I do? Make a `map[foo] bool`? If I see such a piece of code in an unfamiliar code base, I have no idea whether to test for key existence or whether I have to test whether the bool is true. A generic set would leave me puzzled and type unsafe[1]: What types could possibly exist in this set? A set of foos is not that hard to comprehend, and is in fact very much more straightforward to understand than a generic set, which in unfamiliar code may contain anything, or a mapping from foos to bools. [1]: Rob Pike mentions in this video that type safety is of high importance for Golang, but how does one achieve that if all the different datatypes I implement/need use `interface {}` where I have to cast all values afterwards? That seems very type unsafe, from where I stand.
> Am I the only one who’s absolutely shocked that Go finally is embracing generics? Yes. Everyone else knows that they were always expected to be included at some point, as told when Go was first announced to the world: this video > So what changed? Philip Wadler, of Haskell fame, decided to help? This was well publicized on HN at the time. > I’m not buying the “it took us 20 years to understand how to do it correctly” argument If I recall correctly, Pike suggested that they never did come to that understanding without the outside help. I can understand why you are surprised that it took 20 years for someone with the right expertise to show up. You can get the sense in the above announcement that even the Go team thought that open sourcing the project would attract the right talent far, far earlier. But, now that we have hindsight, we can see that all the experts on HN who could have been the missing positive contributor were too busy complaining that Go didn't have generics. There wasn't enough time left for them to lend a hand. There are only so many hours in the day.