The Robustness of Go • Francesc Campoy • GOTO 2018
Video Statistics and Information
Channel: GOTO Conferences
Views: 31,667
Rating: undefined out of 5
Keywords: GOTO, GOTOcon, GOTO Conference, GOTO (Software Conference), Videos for Developers, Computer Science, GOTOchgo, GOTO Chicago, Francesc Campoy, source{d}, GO, Go Programming Language, Erlang, Robustness, Robust Programming
Id: 40d26ZGfhR8
Channel Id: undefined
Length: 44min 31sec (2671 seconds)
Published: Wed Aug 08 2018
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.
I watched this because it was Francesc, but I was a little disappointed that it's not really about Go. Posting a summary so others can make a more informed decision about whether to watch.
[My take on the background state of the world]
Based on experience with Erlang, Joe Armstrong suggests there are six requirements for building robust long-lived systems:
Erlang is almost unique among programming languages in that it has all of these built into the core language / runtime. (Reusing this infrastructure is one reason Elixir is so powerful.)
Typically these features are built into an execution system separate from the programming language. For example, PHP scripts running on LAMP stacks are not robust because PHP is doing anything interesting. They are robust because Apache is running each request in its own separate PHP (at least logically), providing isolation and concurrency; because you've got integrated, always-on logging, providing failure detection and fault identification; because Apache takes care of letting you do live PHP code upgrades, without taking down the server; and because MySQL is providing stable storage that outlasts any particular PHP script execution and hopefully is mostly immune to faults in the PHP.
Like nearly every non-Erlang, Go leaves these features to the surrounding environment. You could at least imagine running LAMG stacks where Go binaries or perhaps on-demand-compiled Go programs substitute for the PHP scripts, and that would be one way to get the robustness. But Go is not doing any more than PHP in that case, not really. And while LAMG is not an acronym I see often, certainly many people do run Go programs with, say, nginx as a load balancer / fault isolator / concurrency generator and a hosted SQL database as stable storage.
[Summary of talk]
Francesc spends a bit of time talking about ways Go is more robust than C/C++, like not having dangling pointer errors, and then talks about how Erlang satisfies the Armstrong requirements while Go mostly does not (no fault isolation, little failure detection and fault identification, no live code upgrade, no stable storage although Francesc gives Go credit for SQL bindings). Having demonstrated that Go by itself is not robust at all, then at the very end of the talk he suggests that Kubernetes would be a way for Go programmers to achieve robustness as defined by Joe Armstrong. Absolutely true, although just about any other popular execution environment seems like it would work too.
Great talk! Too bad the Q&A got hijacked by dependency management questions. A bit off topic for robustness.