| A conversation with the Go team |
| 6 Jun 2013 |
| |
| * Introduction |
| |
| 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: |
| [[http://www.youtube.com/watch?v=sln-gJaURzk][_Meet_the_Go_team_]]. |
| |
| 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 |
| [[http://groups.google.com/group/golang-dev][golang-dev mailing list]]. |
| |
| As for the timeline, we do have |
| [[https://docs.google.com/document/d/106hMEZj58L9nq9N9p7Zll_WKfo-oyZHFyI6MttuZmBU/edit?usp=sharing][concrete plans]]: |
| 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 |
| [[https://golang.org/wiki/SQLDrivers][SQLDrivers wiki page]] |
| 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 |
| [[https://golang.org/wiki/Projects#Graphics_and_Audio][bindings for existing graphics libraries]] |
| out there, and a few Go-specific projects. One of the more promising ones is |
| [[https://github.com/skelterjohn/go.uik][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_ [[http://www.gophercon.com/][_GopherCon_2014_]]_?_ |
| _Does_anyone_from_the_team_plan_to_attend?_ |
| |
| *Andrew:* It's very exciting. I'm sure some of us will be there. |