11 ms·
Go 1.1 RC1 is out
- timothya 13y agoI guess this website is going to have to change soon: http://isgo1point1outyet.com/ http://isgo1point1outyet.com/
- dubcanada 13y agoWhy is that a website? I just can't believe someone bought that. And why didn't he buy 1outyet.com and make a subdomain, so it could be isgo1.1outyet.com ?
- PuerkitoBio 13y agoThis was an example of a website built with Go for a talk given by Andrew Gerrand recently.
- dubcanada 13y agoThat makes sense :)
- mseepgood 13y ago> Why is that a website? I just can't believe someone bought that. It was a demo in a talk by @enneff at Railsberry 2013: https://github.com/nf/go11 https://github.com/nf/go11 The site should update automatically once the repository is tagged.
- joshrotenberg 13y agoSlides here: http://talks.godoc.org/github.com/nf/go11/talk.slide#1 http://talks.godoc.org/github.com/nf/go11/talk.slide#1
- buro9 13y agoTechnically it's still correct. It's just a release candidate.
- GhotiFish 13y agohttp://isgo1point1outyet.com/debug/vars http://isgo1point1outyet.com/debug/vars I kinda figured they wouldn't leave the polling time at 5 seconds.
- enneff 13y agoWhy not? I want it to flip over to "YES!" as soon as the release is tagged.
- dtwwtd 13y agoThe race detector sounds interesting: http://tip.golang.org/doc/go1.1#race http://tip.golang.org/doc/go1.1#race
- kanwisher 13y agoWe used this during a load test and it was able to find insanely small concurrency issues like integer increments, its quite amazing. If your doing go, use it
- Jabbles 13y agoBased on ThreadSanitizer, which does the same for C++ (or similar) programs. Extremely useful. https://code.google.com/p/data-race-test/wiki/ThreadSanitizer https://code.google.com/p/data-race-test/wiki/ThreadSanitize...
- Cowen 13y agoI'll paraphrase something Andrew Gerrand said about this at a golang meetup last night: Because race conditions are so hard to detect, the race detector is obviously prone to false negatives. Just because the tester doesn't find any race conditions doesn't necessarily mean that there aren't any. But the race detector never finds false positives. If it finds a race condition, that condition is very real. You could just run your app with the race detector on all the time, but there is a performance cost to using the race detector. One way to get around this in cloud/clustered environments is to deploy your app on a few machines with the race detector on and the rest with the race detector off. That way you're running your app with a production load and you're more likely to find race conditions, but you'll mitigate the performance costs associated with the race detector.
- dtwwtd 13y agoIt makes sense to me that it can't possibly detect all race conditions but I had never really thought about the ability to detect any race conditions programmatically. Running the detector on just a few nodes sounds like a great way to offset the performance penalty a bit. The docs on the race detector say that "memory usage may increase by 5-10x and execution time by 2-20x" which could be quite significant. I also wonder about the effectiveness of randomly fuzzing your app with the race detector on as a form of testing.
- schoper 13y agoThey finally fix: func hello() int { if true { return 0 } else { return 1 } } >go run func.go ./func.go:3: function ends without a return statement
- mahmoudhossam 13y agoAlso not handling JSON null values: https://code.google.com/p/go/issues/detail?id=2540 https://code.google.com/p/go/issues/detail?id=2540
- voidlogic 13y agoI'm pretty sure that was fixed in both previous betas and tip for some time before that.
- mseepgood 13y agoIt's nice that they fixed it, but I would always write func hello() int { if cond { return 0 } return 1 } anyway.
- pkulak 13y agoBack when I was in college doing Java, Eclipse would throw up an error for unnecessary "else" statements. Ever since then I can't help but write it your way as well.
- varikin 13y agoThe reason I don't like this way is it can be harder to refactor. You don't want "return 1" happening if cond. For example, if you refactor to something like this: func hello() int { var result int if cond { result = 0 } result = 1 // New code with result return result } Now, in this case, you don't want result to be 1 if cond, so you have to add the else condition. If you start with if-else, this is less likely to bit you in the future. This particular bug just bit me in a bad way in production because I had what you have and and to make an quick production fix and did a refactor just like this and missed adding the else.
- knodi 13y agoWhat about the 8 remaining issues http://swtch.com/~rsc/go11.html http://swtch.com/~rsc/go11.html will they be part of the Go 1.1 final?
- JulienSchmidt 13y agogccgo issues: maybe, since gccgo is not included in the Go package other issues: probably not, since these are new issues that are being worked on
- CoffeeDregs 13y agoOT: I had not seen that there was a GCC compiler frontend for Go. Does anyone have any experience with that? Do you lose lots of Go specific tooling?
- chimeracoder 13y ago> Do you lose lots of Go specific tooling? No, gccgo has been developed as a first-class compiler; the intent has always been to separate Go-the-language from Go-the-implementation, to prevent a single implementation from becoming the de facto standard over the language specification - a problem which we've seen happen in many other languages. You can essentially use gccgo as a drop-in replacement for gc; it's only an extra command-line flag you add to the compilation to specify the compiler. gccgo is actually likelier to be faster than gc for most computationally bound code, since it piggybacks off of the optimizations that gcc has incorporated over the last couple of decades. However, gc may be preferred if you're relying heavily on goroutines (ie, in the hundreds/thousands), since gc is better optimized for that.
- bbrunner 13y agoI haven't made the jump to using any of the 1.1 betas or this RC but the reported 30-40% performance bumps look nice. I'm really still waiting for an easy way to get gccgo working on os x though. And I'm glad that they're bumping up the heap size to system-dependent values on 64bit systems. The fixed heap size of 16 GB was a really unfortunate constraint (even if it could be changed with a little hacking around).
- 4ad 13y agoGccgo doesn't work on OS X (or any other non-ELF) platform, and it's useless on anything but Linux anyway as segmented stacks are supported only with the gold linker, which is not ported to non-Linux platforms.
- taliesinb 13y agoI'm glad that escape analysis now allows for more natural if/then control flow. But I'm still unhappy that using named return values still requires you to put a superfluous "return;" at the end of such a function. The whole reason I use named return values is to cut down on the boilerplate code that carries the return value around -- so why not cut out the final boilerplate 'return'? It doesn't solve any problem or add any information! Otherwise, there are some nice improvements here. Other than the things mentioned so far, I'm glad to see reflection filling out -- the day a Go REPL will be possible is approaching.
- burntsushi 13y ago> Other than the things mentioned so far, I'm glad to see reflection filling out -- the day a Go REPL will be possible is approaching. Very close indeed! Struct, array and function types still can't be constructed at run time, but as of Go 1.1, function values can be as well as slice, map and channel types. I exploit some of this in my `ty` package. [1,2] [1] - http://godoc.org/github.com/BurntSushi/ty http://godoc.org/github.com/BurntSushi/ty [2] - http://blog.burntsushi.net/type-parametric-functions-golang http://blog.burntsushi.net/type-parametric-functions-golang
- taliesinb 13y agoThis is pretty cool! I tried to convince rsc at some point about the enormous value of REPLs for rapid development.. imagine connecting to an embedded REPL on a server to do live debugging. I don't think I quite convinced him to drop everything and do it himself, though. Do you have plans to experiment with a transpiler to smooth away all the remaining type noise? Maybe a first step would be to explore how one could add pluggable 'dialect translators' to the go tool so that anyone could write simple extensions for the language while preserving the existing toolchain.
- burntsushi 13y ago> Do you have plans to experiment with a transpiler to smooth away all the remaining type noise? I don't have any particular plans; the `ty` package was a night of hacking plus several days of polishing/writing. :-) One of the major bummers about moving into the reflection world is performance. My blog article talks about it a little bit, but it's also worth looking more closely at the things I didn't talk about in the benchmarks. (For instance, it seems that function calls in the reflection world pay a very steep price.) Re transpiler: do you mean a {Language}-to-Go source translation? If so, it seems like you'd want to avoid `reflect` completely in that case. But maybe I am misunderstanding. > I tried to convince rsc at some point about the enormous value of REPLs for rapid development ... I don't think I quite convinced him to drop everything and do it himself, though. A REPL would be very nice, but a REPL using `reflect` would definitely be a lot of work. You'd need to make extensive use of the sub-packages in `go` to convert the `Read` portion of the `REPL` into appropriate reflection types. You could do it now, but you wouldn't be able to define new functions, structs or interfaces. And `reflect` cannot spawn goroutines either, which is a bummer.
- ameen 13y agoGo noob here Can actual products (Web apps in my case) be built with Go?
- orangethirty 13y agoYes. I am using it myself, and am about to deploy a production app. All Go.
- msbarnett 13y agoOut of curiosity, what are you doing for error reporting? I'm thinking something along the lines of honeybadger/hoptoad/etc -- automatic notification if the program crashes/deadlocks/what-have-you.
- orangethirty 13y agoIm using my own library at the moment. Might release it as open source in the near future. Just waiting on some language features to stabilize.
- blinkingled 13y agoSure. Go doesn't yet have any mature web frameworks like django for python but quite a bit of what is needed to build web apps is already part of Golang. (Packages net/http, html/template etc.) If I remember correctly Google switched their download service to using Go and there was a post here not long ago claiming they went from a lot of servers to merely 2 by switching to Golang. See http://golang.org/doc/articles/wiki/ http://golang.org/doc/articles/wiki/ for an example.
- ameen 13y agoIs Go really that efficient? I heard similar claims from somewhere else, and this has been a motivation for me to learn and then build something in Go. And what might be the reason for that? Speed? Parallel processing?
- pstuart 13y agoSolaris support would be nice...
- mratzloff 13y agoIf we're talking about wishlist items, I'd like a tool, any tool, for detecting memory leaks. I understand they can't use Valgrind itself[1], but as it stands, detecting where leaks exist can be very difficult. [1] http://code.google.com/p/go/issues/detail?id=782 http://code.google.com/p/go/issues/detail?id=782
- voidlogic 13y agoOutside of using cgo or working on the Go runtime (written in C), how are you leaking memory in a garbage collected language? Your code either has a reference to something, or it doesn't. If your code has a reference to something, how is a tool going to know you don't mean too have that reference? Outside of the "dangling reference" issue above "leaking" in a GCd language is non-trivial. Here is a related Java discussion: http://stackoverflow.com/questions/6470651/creating-a-memory-leak-with-java http://stackoverflow.com/questions/6470651/creating-a-memory... . Also note Go doesn't have ClassLoader or class static fields.
- supersillyus 13y agoYou can leak memory by leaking goroutines. If a goroutine is waiting on a channel that nobody else has access to, it lives forever, as does the memory it references. So, you can pretty easily leak memory without messing with unsafe things.
- voidlogic 13y agoThat is a pretty serious bug, that is not at all as easy to miss as something like a memory leak is in C/C++. It is also pretty easy to detect by this (or something better), which might be handy in a big program: http://play.golang.org/p/XmKfgQ4TmS http://play.golang.org/p/XmKfgQ4TmS
- supersillyus 13y agoI somewhat disagree. Even if you don't use channels as iterators/generators (which many folks do), it's not hard to end up with a goroutine blocked on a channel that'll never be closed/written to, and this situation (like memory leaks) can result from changes elsewhere in the program or branches not normally taken. A goroutine count doesn't seem like it'd be useful for diagnosing this in a non-trivial program. The runtime could probably detect if there are goroutines blocked on channels that no other goroutine has access to, and that'd be quite helpful for debugging, but as of now it doesn't. Even if it did, it couldn't catch all goroutine leaks.
- ngoldbaum 13y agoRight now it's hard to do numerical analysis on large problems using Go. To fix that, I'd be really excited to see bindings for MPI or something like it. In particular, go doesn't have a concept of an Allreduce or an AllToAll communication. I know that one can do that by calling the C MPI bindings from go, but it would be cool if there were a natural way to do it using go's parallelism and concurrency patterns. It would also be nice to have a first-class array object - from what I understand, current support for multidimensional arrays is very C-like in that you're really dealing with pointer arrays.
- taliesinb 13y agoWhy not write your own, better, MPI with Go? That's exactly the kind of thing it is designed for. I agree about the numerics. I'm tempted to write an very bare-bones implementation of Mathematica's kernel in Go, but I'll probably wait until people have done more numerics work in Go.
- kristianp 13y agoInteresting comment in that thread: "It's worth mentioning the function representation change, since it means closures no longer require runtime code generation (which among other things allows the heap to be marked non-executable on supported systems)." Anyone know what that means?
- dylanvee 13y agoMarking the heap's region of memory as non-executable improves security. http://en.wikipedia.org/wiki/Executable_space_protection http://en.wikipedia.org/wiki/Executable_space_protection
- kristianp 13y agoSorry, I wasn't clearer, but I have heard of NX. The part I was wondering about was how the function representation changed.
- JulienSchmidt 13y agohttp://en.wikipedia.org/wiki/NX_bit http://en.wikipedia.org/wiki/NX_bit Edit: dylanvee was faster, the NX-bit is the underlying hardware feature
- axw 13y agoThe gory details are here: https://docs.google.com/document/d/1bMwCey-gmqZVTpRax-ESeVuZGmjwbocYs1iHplK-cjo/pub https://docs.google.com/document/d/1bMwCey-gmqZVTpRax-ESeVuZ... TL;DR: functions are now represented as (function pointer, pointer to a context structure), whereas before they were represented as a single function pointer.