| # A conversation with the Go team |
| 6 Jun 2013 |
| Summary: At Google I/O 2013, several members of the Go team hosted a "Fireside chat." |
| OldURL: /a-conversation-with-the-go-team |
| |
| ## |
| |
| At Google I/O 2013, several members of the Go team hosted a "Fireside chat." |
| Robert Griesemer, Rob Pike, David Symonds, Andrew Gerrand, Ian Lance Taylor, |
| Sameer Ajmani, Brad Fitzpatrick, and Nigel Tao took questions from the audience |
| and people around the world about various aspects of the Go project. |
| |
| .iframe //www.youtube.com/embed/p9VUCp98ay4 309 549 |
| |
| We also hosted a similar session at I/O last year: |
| [_Meet the Go team_](http://www.youtube.com/watch?v=sln-gJaURzk). |
| |
| There were many more questions from Google Moderator than we were able to |
| answer in the short 40 minute session. |
| Here we answer some of those we missed in the live session. |
| |
| _Linking speed (and memory usage) for the gc toolchain are a known problem._ |
| _Are there any plans to address this during the 1.2 cycle?_ |
| |
| **Rob:** Yes. We are always thinking about ways to improve performance of the |
| tools as well as the language and libraries. |
| |
| _I have been very pleased to see how quickly Go appears to be gaining traction._ |
| _Can you talk about the reactions you have experienced working with other_ |
| _developers inside and outside Google? Are there any major sticking points remaining?_ |
| |
| **Robert:** A lot of developers that seriously tried Go are very happy with it. |
| Many of them report a much smaller, more readable and thus maintainable code |
| base: A 50% code size reduction or more when coming from C++ seems common. |
| Developers that switched to Go from Python are invariably pleased with the |
| performance gain. The typical complaints are about small inconsistencies in the |
| language (some of which we might iron out at some point). What surprises me is |
| that almost nobody complains about the lack of generics. |
| |
| _When will Go be a first-class language for Android development?_ |
| |
| **Andrew:** This would be great, but we don't have anything to announce. |
| |
| _Is there a roadmap for the next version of Go?_ |
| |
| **Andrew:** We have no feature roadmap as such. The contributors tend to work on |
| what interests them. Active areas of development include the gc and gccgo |
| compilers, the garbage collector and runtime, and many others. We expect the |
| majority of exciting new additions will be in the form of improvements to our |
| tools. You can find design discussions and code reviews on the |
| [golang-dev mailing list](http://groups.google.com/group/golang-dev). |
| |
| As for the timeline, we do have |
| [concrete plans](https://docs.google.com/document/d/106hMEZj58L9nq9N9p7Zll_WKfo-oyZHFyI6MttuZmBU/edit?usp=sharing): |
| we expect to release Go 1.2 on December 1, 2013. |
| |
| _Where do you guys want to see Go used externally?_ |
| _What would you consider a big win for Go adoption outside Google?_ |
| _Where do you think Go has the potential to make a significant impact?_ |
| |
| **Rob:** Where Go is deployed is up to its users, not to us. We're happy to see |
| it gain traction anywhere it helps. It was designed with server-side software |
| in mind, and is showing promise there, but has also shown strengths in many |
| other areas and the story is really just beginning. There are many surprises to |
| come. |
| |
| **Ian:** It’s easier for startups to use Go, because they don’t have an |
| entrenched code base that they need to work with. So I see two future big wins |
| for Go. One would be a significant use of Go by an existing large software |
| company other than Google. Another would be a significant IPO or acquisition |
| of a startup that primarily uses Go. These are both indirect: clearly choice |
| of programming language is a very small factor in the success of a company. |
| But it would be another way to show that Go can be part of a successful |
| software system. |
| |
| _Have you thought any (more) about the potential of dynamically loading_ |
| _Go packages or objects and how it could work in Go?_ |
| _I think this could enable some really interesting and expressive constructs,_ |
| _especially coupled with interfaces._ |
| |
| **Rob:** This is an active topic of discussion. We appreciate how powerful the |
| concept can be and hope we can find a way to implement it before too long. |
| There are serious challenges in the design approach to take and the need to |
| make it work portably. |
| |
| _There was a discussion a while ago about collecting some best-of-breed_ |
| `database/sql` _drivers in a more central place._ |
| _Some people had strong opinions to the contrary though._ |
| _Where is_ `database/sql` _and its drivers going in the next year?_ |
| |
| **Brad:** While we could create an official subrepo (“go.db”) for database |
| drivers, we fear that would unduly bless certain drivers. At this point we’d |
| still rather see healthy competition between different drivers. The |
| [SQLDrivers wiki page](https://golang.org/wiki/SQLDrivers) |
| lists some good ones. |
| |
| The `database/sql` package didn’t get much attention for a while, due to lack of |
| drivers. Now that drivers exist, usage of the package is increasing and |
| correctness and performance bugs are now being reported (and fixed). Fixes will |
| continue, but no major changes to the interface of `database/sql` are planned. |
| There might be small extensions here and there as needed for performance or to |
| assist some drivers. |
| |
| _What is the status of versioning?_ |
| _Is importing some code from github a best practice recommended by the Go team?_ |
| _What happens when we publish our code that is dependent on a github repo and_ |
| _the API of the dependee changes?_ |
| |
| **Ian:** This is frequently discussed on the mailing list. What we do internally |
| is take a snapshot of the imported code, and update that snapshot from time to |
| time. That way, our code base won't break unexpectedly if the API changes. |
| But we understand that that approach doesn’t work very well for people who are |
| themselves providing a library. We’re open to good suggestions in this area. |
| Remember that this is an aspect of the tools that surround the language rather |
| than the language itself; the place to fix this is in the tools, not the |
| language. |
| |
| _What about Go and Graphical User Interfaces?_ |
| |
| **Rob:** This is a subject close to my heart. Newsqueak, a very early precursor |
| language, was designed specifically for writing graphics programs (that's what |
| we used to call apps). The landscape has changed a lot but I think Go's |
| concurrency model has much to offer in the field of interactive graphics. |
| |
| **Andrew:** There are many |
| [bindings for existing graphics libraries](https://golang.org/wiki/Projects#Graphics_and_Audio) |
| out there, and a few Go-specific projects. One of the more promising ones is |
| [go.uik](https://github.com/skelterjohn/go.uik), but it's still in its early |
| days. I think there's a lot of potential for a great Go-specific UI toolkit for |
| writing native applications (consider handling user events by receiving from a |
| channel), but developing a production-quality package is a significant |
| undertaking. I have no doubt one will come in time. |
| |
| In the meantime, the web is the most broadly available platform for user |
| interfaces. Go provides great support for building web apps, albeit only on the |
| back end. |
| |
| _In the mailing lists Adam Langley has stated that the TLS code has not been_ |
| _reviewed by outside groups, and thus should not be used in production._ |
| _Are there plans to have the code reviewed?_ |
| _A good secure implementation of concurrent TLS would be very nice._ |
| |
| **Adam**: Cryptography is notoriously easy to botch in subtle and surprising ways |
| and I’m only human. I don’t feel that I can warrant that Go’s TLS code is |
| flawless and I wouldn’t want to misrepresent it. |
| |
| There are a couple of places where the code is known to have side-channel |
| issues: the RSA code is blinded but not constant time, elliptic curves other |
| than P-224 are not constant time and the Lucky13 attack might work. I hope to |
| address the latter two in the Go 1.2 timeframe with a constant-time P-256 |
| implementation and AES-GCM. |
| |
| Nobody has stepped forward to do a review of the TLS stack however and I’ve not |
| investigated whether we could get Matasano or the like to do it. That depends |
| on whether Google wishes to fund it. |
| |
| _What do you think about_ [_GopherCon 2014_](http://www.gophercon.com/)_?_ |
| _Does anyone from the team plan to attend?_ |
| |
| **Andrew:** It's very exciting. I'm sure some of us will be there. |