One of the other exciting things in this release is the almost entirely rewritten "prove" pass in the compiler:<p><a href="https://golang.org/doc/go1.11#performance-compiler" rel="nofollow">https://golang.org/doc/go1.11#performance-compiler</a><p>> The compiler now performs significantly more aggressive bounds-check and branch elimination. Notably, it now recognizes transitive relations, so if i<j and j<len(s), it can use these facts to eliminate the bounds check for s[i]. It also understands simple arithmetic such as s[i-10] and can recognize more inductive cases in loops. Furthermore, the compiler now uses bounds information to more aggressively optimize shift operations.
Of possible interest, I gave a talk about "Go 1.11 & Beyond" (read: "Go 2") a couple weeks ago:<p><a href="https://docs.google.com/presentation/d/1EwuJhEHR5Trr2aXBPQajZ2Hcoh29tm_LQCpgfrCnuRk/view#slide=id.g33148270ac_0_143" rel="nofollow">https://docs.google.com/presentation/d/1EwuJhEHR5Trr2aXBPQaj...</a><p>(See speaker notes for more context)
"Go programs currently compile to one WebAssembly module that includes the Go runtime for goroutine scheduling, garbage collection, maps, etc. As a result, the resulting size is at minimum around 2 MB, or 500 KB compressed."<p>considering it includes the runtime, this isn't a large file compared to images / videos you find on the web today
Go does a lot of things right without having to carry legacy mistakes like other languages, it's such a breath of fresh air in a landscape of constant change and competing implementations.<p>I'm very optimistic that the modules system is another step in the right direction, however long it took to get here.
Thanks everyone working on Go.
As listed on the blog page - <a href="https://blog.golang.org/go1.11" rel="nofollow">https://blog.golang.org/go1.11</a> - two exciting features are modules and WebAssembly support.<p>Information about modules can be found at:<p>- <a href="https://golang.org/cmd/go/#hdr-Preliminary_module_support" rel="nofollow">https://golang.org/cmd/go/#hdr-Preliminary_module_support</a><p>- <a href="https://github.com/golang/go/wiki/Modules" rel="nofollow">https://github.com/golang/go/wiki/Modules</a><p>- <a href="https://research.swtch.com/vgo" rel="nofollow">https://research.swtch.com/vgo</a><p>The wiki - <a href="https://golang.org/wiki/WebAssembly" rel="nofollow">https://golang.org/wiki/WebAssembly</a> - provides information on how to get started with using Wasm with Go.
> Go 1.11 supports the upcoming OpenBSD 6.4 release. Due to changes in the OpenBSD kernel, older versions of Go will not work on OpenBSD 6.4.<p>I wonder when Go is planning to stop using the kernel ABI on BSDs and macOS directly - in direct contradiction to stability guarantees (or lack thereof) by those platforms - and start using the appropriate APIs, such as libc. Or is it going to be stuff like this or <a href="https://github.com/golang/go/issues/16606" rel="nofollow">https://github.com/golang/go/issues/16606</a> forever? Right now, I stay away from Go partly because of this - it feels like a bad idea to use a software stack that is guaranteed to be broken on future OS releases by design. Especially when that stack is advertised specifically for system programming...
Congrats & thanks to the Go team! I'm a big fan of Go and use it extensively.<p>Most exciting thing [which isn't really a thing] is that they've reserved RISC-V GOARCH values!!!!!!!!!!!! Looking forward to RISC-V everywhere!
Modules release is definitely a "we told you so" moment. Depending on outside packages has always bothered me, and kept me from doing more with the language.