Cross-Language Compiler Benchmarking
stefan-marr.de
stefan-marr.de
Some theories as to sources of the slowness:
- The Boehm GC is so much worse that it accounts for bad performance even on benchmarks that don't stress it.
- Crystal's polymorphic calls don't use inline caches and JIT speculation so they aren't as fast as Java's.
- LLVM isn't as good at bounds check elimination as Java because C++ doesn't need it.
- The Crystal code used reference types where it normally would use value types, and Java really has a better code generator for this sort of object-oriented code.
So HotSpot may detect "hot spot code" in runtime and aggressively inline it - this is what LLVM can not do, becuase it doesn't run in runtime...
But the bigger ones are not yet (so, no results yet).
One of the important questions to answer first is how the mapping should be done. A naive version using new/delete/smartpointers is going to have performance issues. Other options would be to use arena allocators and completely remove memory management overhead from the equation. Depending on what comparison/C++ usage scenario is desired, both options would be useful.