Further, we have always really been inspired by Joel Spolsky's article on rewrites: http://www.joelonsoftware.com/articles/fog0000000069.html In fact, I can't help but wonder if we would have attempted a Go rewrite sooner if not for that article.
Perhaps we've come a pretty long ways in the interpreted languages department? Or, that the cost of interpreting is vastly less than speed losses due to IO or memory access?
"Interpreted is always slower than compiled lol right guise?" was a tired refrain ten years ago, much less today.
Maybe they'll make it faster in Python 3000, right?
Since it's a reference implementation it should be easy read and learn from.
They're not really willing to accept patches that speed up some things if they at the same time slow down other things (this has been the main problem with all the GIL removal patches that have shown up over the years).
They're not willing to accept patches that break any existing code or libraries.
PyPy on the other hand have non of these limitations and happily break all three, making it great for a subset of python code out there.
While it may be obvious, the interesting question is why exactly. There's been a good presentation from Alex Gaynor [0] on this topic. TL;DR: Dynamic languages ar slow not because they can't be optimized, but because developers make a worse use of memory and have sucky algorithms, inducing way more mem allocation and copy than needed. If you can be smart about those, then your dynamic language can match static languages.
[0] https://speakerdeck.com/alex/why-python-ruby-and-javascript-...
Using any of the Ruby implementations that don't have a GIL. Notably, JRuby, MacRuby/RubyMotion, and (I think) Rubinius.
This is not merely nitpicking. Any turing-complete language can be interpreted or compiled. Language specs tend to make one side easier, but that doesn't mean that Python cannot be compiled (and it is actually compiled to bytecode). You can have something similar to a GIL in a compiled language too.
One of the things that makes it easier to increase performance is having type declarations. This makes it much easier for the compiler to reason about the code, which can lead to increased efficiency. But optional type annotations can accomplish just as much.
> (that explains why node.js is a bit faster than Go for handling HTTP requests at the moment)
Pretty sure node's http parsing is handled by http-parser[1], which is written in C (originally pulled from nginx as I recall).Go's http parser is written in Go.
[1]: https://github.com/joyent/http-parser/blob/master/LICENSE-MI...
> (that explains why node.js is a bit faster than Go for handling HTTP requests at the moment)
I'm not sure that is true any more:http://www.techempower.com/benchmarks/#section=data-r8&hw=i7...
At any rate, "handling HTTP requests" can't possibly be your bottleneck, given network communication, serialization, etc.