I've been following that discussion, because I've specifically had the same issue that Dmitry did. I'm with Dmitry on the performance vs readability trade off. I will happily make the 10% of the code, where performance really matters, nearly as unreadable as it needs to be in order to squeeze every last drop of performance out of the hardware. For the rest of the code, the 90% of it really, I prefer readability and maintainability like rsc. Inflexible hard and fast stances on anything are an ideology, I'm an engineer, I like to keep it practical. Dmitry and rsc might fall on different sides of the spectrum, but I think that discussion is proof that they both are practical, engineer type people too. rsc, in that discussion tried to find a compromise solution that would make both him and Dmitry happy, that's what good engineering is all about.
I'm aware that sharing memory directly instead of communicating, manually managing "native" memory, and using lots of pointer arithmetic and low-level tricks is allowed by Go, but frowned upon. That's fine, I frown on those things too, but I'm a practical man, and I'll use them when I have no other option.
Whether Go was the best fit for the project is tough to say. The available libraries are a perfect fit. The tools are fantastic (missing only a debugger.) The language itself makes writing, readable, maintainable code easier while still performing close enough to C. And it makes the hard things possible, not ideal, but possible, and that's what counts.
Other options considered were:
C/C++: horrible for development speed, safety, readability, maintainability and compile times
Rust: too immature and lacking in needed libraries, also too complex making it harder to write readable, maintainable code
Scala: too complex, too many ways to make unreadable, unmaintainable code, slow compiler (was the runner up choice to Go)
Haskell: next
Erlang: fundamentally opposed to one big shared address space
Python/Ruby: too slow, too high level, prefer statically typed for big projects
LuaJIT: fast, maybe faster than Go for what we're doing, but too small a community, missing needed libraries, very dependent on Mike Pall (large hit-by-a-bus risk)
Java: frankly it just crushes my soul to have to program in Java, I would not do it unless I had no other option
C#: platform lock-in
D: missing needed libraries, the community is very small and that's not likely to change
As things stand, Go seems like the best choice, the gamble being that it may one day prevent some of the low-level things we do. But in the worst case we can always hack the runtime, it is open source after-all, and a compiler will always have a way internally to do low-level things. If we're using .S files anyway with custom assembly routines, just about anything is possible.
Cheers,
Dan