[racket-dev] my '312' this semester, how we compare to others
On 04/21/2011 01:07 PM, Matthias Felleisen wrote:
> -B- When it comes to raw computational performance (ignore loading Racket, start from REPL and run a single game -- 10 seconds), my implementation is faster than Python (but barely) and one of the Java implementations. But one Java implementation is 10x faster. My hunch is that our OO system is significantly slower than Java's because we lack types to reduce dispatch overhead. Then again I might be wrong. -- Another possibility is that my extremely heavy use of our wonderful (!) contracts may impose a large overhead. I use mostly ->i and ->m.
I'd be curious what your timings are with the contract checking disabled.
As for lacking types, types are only useful for primitive
optimizations; partial evaluation and code profiling and "inlining"
sequential dispatches have the potential to outperform C++ vtables,
etc. C/C++ must rely on link-time optimization frameworks and Java is
hampered by doing everything at runtime... I think this is a big area
of opportunity for lisp systems to regain the performance lead.
As to the wider issue, "glue languages" will probably win in the long
run; there are huge masses of legacy code, but everybody wants to use
a newer language. If you could fairly seamlessly employ a C++ or Java
library in lisp... C is dominant largely because it has a simple
calling convention. Lisp systems do not... They tend to be
frameworks, not externally extensible tools.
- Daniel