Simpler and faster GC for Go
docs.google.com
docs.google.com
An alternative is to do reference counting (in your prototyping phase), which is much easier to implement.
But you also want fast, at which point you have to accept that fast gc == complicated and tightly coupled to the implementation details (object layout, type/debug info).
There is no pluggable GC. Conservative GCs (like Boehm GC) come the closest, but they have significant drawbacks (they blindly scan all of memory and can't tell a difference between a pointer and a random number that looks like a pointer, which means scanning&marking phase take longer and they keep objects that could have been freed, which is especially a problem on 32bits, where it's more likely that a random number points inside GC-managed heap).
Which is most programs. Hurray, changes in good direction.
For reference types, they do have escape analysis, not sure how one would compare it to another language.
A significant algorithmic change in the GC, like a generational compacting GC or something along those lines, would have to be made to alter go programming strategies.
But it has always bothered me how he declares pointers! :-)
(stack[pointer] s, node[pointer] n)
Instead of
(stack [pointer]s, node [pointer]n)
Am I picky? :-)
[pointer] is the * just trying to avoid the italics conversion of HN.
I eventually came to the following,
(stack [pointer] s, node [pointer] n)
Since it's symmetrical, it's easy to remember.
Luckily, I've been using Go and gofmt (goimports, specifically) the last 2 years so this is no longer an issue.
[1] https://docs.python.org/2/library/gc.html
Edit: Here is a discussion of gc in go. Go has only just gotten a precise collector, which is a requirement of a generational gc, to allow moving pointers.
https://groups.google.com/forum/#!topic/golang-nuts/fiOs3mGH...