Earlier this month, we looked at the “kerfuffle” around the try() keyword proposal for Go 1.14, and just days before GopherCon 2019 took off in San Diego, the Go team announced that they would be declining the proposal ahead of schedule. Amidst the hullabaloo around try(), Go principal engineer Russ Cox offered a bit of insight, calling the debate over the proposed feature “open source at its best.”
Community-wide discussions like this one are open source at its best. We really appreciate everyone’s help in finding the highest-impact ways to improve the state of error handling in Go development. Huge thanks to Bill and everyone else who has been working with us on this. 9/9
— Russ Cox (@_rsc) July 2, 2019
In our initial coverage of the ongoing debate around try, we asked if it were “simply another tale in the nature of Go as an open source language driven by a core team that won’t take objections from the community to heart? Or is it much ado about nothing?” and it would now appear that the Go team has dispatched with that idea. During his opening keynote at GopherCon this week, Cox addressed the rejection of try() straight off, after giving an overview of the approach taken to Go language development.
— Aditya Mukerjee, the Otterrific 🏳️🌈 @ GopherCon (@chimeracoder) July 25, 2019
For those of you interested in the details, one liveblog relates the key points of Cox’s keynote, which took attendees on a journey through the history of error handling in Go. Of course, the decision to reject try, as posted on Github by Go designer Robert Griesemer, also provides plenty in the way of details. Also quoting Cox’s tweet, Griesemer starts off discussing the process of determining new features that is key to open source, writing that “our goal with proposals like this one is to have a community-wide discussion about implications, tradeoffs, and how to proceed, and then use that discussion to help decide on the path forward.” Of course, as with any discussion of this sort, not everyone could be pleased with the decision.
It is a sad state of affairs… it seems impossible to get improvements to Go that matter – I’m surprised so many were against the try proposal. I read some of the feedback, but couldn’t find any good arguments against it.
— Hein Meling (@heinmeling) July 19, 2019
Griesemer notes that they “tried to lay out [their] vision of the problem last August in the ‘Go 2 error handling problem overview,’ but in retrospect [they] did not draw enough attention to that part and did not encourage enough discussion about whether the specific problem was the right one,” with the aside that “it is also possible that the error handling problem statement was entirely upstaged by publishing a generics design draft on the same day.”
Griesemer also says that the discussion pointed out some important technical considerations they missed, ending with a solicitation of the community:
“On the broader topic of what to improve about Go error handling, we would be very happy to see experience reports about what aspects of error handling in Go are most problematic for you in your own codebases and work environments and how much impact a good solution would have in your own development. If you do write such a report, please post a link on the Go2ErrorHandlingFeedback page.”
As for how Cox departed from the topic of try(), it was with just a touch of Gopher humor…
"and now, for something less controversial, let's talk about generics"
— Dgraph Labs (@dgraphlabs) July 25, 2019
This Week in Programming
- All Aboard GitLab’s Parallel Merge Trains: GitLab released GitLab 12.1 this week with two standout features: Parallel Merge Trains and Merge Requests for Confidential Issues. In case the names aren’t clear, parallel merge trains queue and sequence changes to a master branch so that once a production pipeline starts, other code doesn’t get merged ahead of that change, which is especially useful for teams with a high volume of changes. Merge Requests for Confidential Issues, meanwhile, “keeps everything under wraps until it’s appropriate to reveal it” by providing automated Let’s Encrypt certificates for GitLab Pages. Check out the video for a demo of the parallel merge train, and check out the blog post for other videos of new features.
- The Rust Compiler Is Blowing Itself Away: Mozilla developer Nicholas Nethercote penned a blog post this week noting that the Rust compiler is still getting faster, which he says is a feature that falls under the “Maturity” theme of the 2019 Rust roadmap. Comparing times now with the first day of 2019, Nethercote found that many wall-time results for 29 benchmarks reduced by 20% to 40%, which he calls “pleasing results.” He goes on to find an even bigger improvement when comparing the results to 2017, and offers the following of Rust compile time on the whole: “All this is good news. The Rust compiler has long had a reputation for being slow. I still wouldn’t describe it as fast, but it is clearly a lot faster than it used to be.”
- TypeScript 3.6 Beta Prefaces August Release: Microsoft announced the release of TypeScript 3.6 beta, a feature-complete version of TypeScript 3.6, set to be released next month. In the coming weeks, we’ll be working on bugs and improving performance and stability for our release candidate, and eventually the full release. SDTimes summarizes the release as introducing “new features such as stricter checking for iterators and generator functions, more accurate array spread, improved UX around promises, and semicolon-aware code edits” as well as DOM updates.
- Meet the AWS Chatbot: Full disclosure, when this author first re-entered the realm of tech writing, it was with excitement around chatbots. Upon exploring the seemingly burgeoning field, it was just the tech-centric chatbots that proved truly interesting — ya know, the stuff developers built to make their OWN lives interesting. Well, it looks like Amazon has finally gotten the memo, with this week’s introduction of its AWS chatbot for Amazon Chime and Slack. Long story short, the bot makes your life easier by providing alerts from Amazon CloudWatch and CloudFormation, as well as AWS Health, Budgets, Security Hub, and GuardDuty.
- Visual Studio Code Gets Java Updates: JAXEnter notes that Java updates for Visual Studio Code adds Smart Selection API with the latest release, which in conjunction with a number of Java extensions, “supports dev tools, including popular frameworks such as Maven and Spring Boot, debuggers, a linter, and more.” Among the features supported are a new refactor feature, the ability to extract to field and support for the Smart Selection/Semantic Selection API, as well as Maven improvements and new Gradle preferences.
Classic books in computer science:
20,000 shards under the C
The Great Gatsby.js
ROM and Julia
A Tale of Two Networks
— Aaron Corso (@corsoa) July 24, 2019
- Study Up Your Visual Studio Skills: Microsoft announced this week that its partnership with online education company Pluralsight has gone live with the Visual Studio 2019 Path on Pluralsight. Consisting of 10 courses over 14 hours, the path starts you off according to your skill level after taking a “Pluralsight Skill IQ assessment.” Courses vary from introductory to running Git to “building cloud-native solutions for Azure with Visual Studio.” For Visual Studio subscribers, access to Pluralsight is free for “up to” 6 months.
- Go Get Your Golang Merch: Finally, for you Gophers out there this week, there’s the new Go store, which has all your favorite stickers, backpacks, t-shirts, hoodies, plushies and more. According to the announcement, 100% of the proceeds from the Go store go directly GoBridge, a “non-profit organization focused on building bridges to educate underrepresented groups by teaching technical skills and fostering diversity in the Go community.”
I'll take "Things that weren't originally designed for production use but are in prod now" for $100, Alex.
— Lorin Hochstein (@lhochstein) July 20, 2019
GitLab is a sponsor of The New Stack.