I could target LLVM, C, some high-level compilable langauge, or now, Parrot.
There doesn't seem to be any cogent, clear, knowledgable discussion of the various features and merits. I suppose asking for one is like asking "which language is best," and the answer will always be "it depends."
I've used Parrot as a target for a language implementation. It supports a lot of stuff out of the box (even multimethods!) and it's quite easy to get started. It also provides tools to help you build a compiler, like a parser generator integrated with the rest of the system. The problem is that right now it is quite slow, slower than Perl or Python, and a bit buggy. It would be an ideal target platform for dynamic languages otherwise. I wouldn't use it for something needed in production at the moment.
Threading just doesn't work (it's going to be rewritten from scratch). Sometimes there are segfaults within managed code and sometimes there are memory leaks. Sometimes an assertion in the VM fails, causing the program to halt with a stack trace. A few releases ago the compiler of Parrot's assembly language reported wrong line numbers in error messages, but this has been fixed.
For the more static languages, LLVM seems hot and well-supported right now. There is a rich tradition of compiling via C, with good and bad results.
Gambit Scheme compiles via C and is one of the fastest Scheme systems around, with good interoperability via C. The Glassgow Haskell Compiler can also compile via C, but that's, AFAIK, an unmaintainable mess (search for "evil mangler").
Yes, exactly, and that's why I was asking for recommendations and suggestions. I have been largely unable to find anything that gives a sensible overview of the technology and the various trade-offs.
Hence my question, although it seems like this is the wrong audience/forum.
There is no technical answer. OK, there are terrible answers, but not everyone agrees about which those are. In the end making a compiler is a world-affecting act: both to your own, and to those of others. You have to decide socially which group you want to associate yourself with, what kind of world you want.
Parrot's been claiming that it's slow and incomplete now, but a solution to that is just around the corner for a few years.
Maybe that's true, but I think that'd be the main concern of any compiler writer thinking of targeting it. It's not a mature platform with known pros and cons, unlike the JVM or LLVM.
I hope it all turns out for the best and Parrot delivers on its promises. But I can see why e.g. the PHP team isn't rushing to target it given the state of its native languages.
These things take a long time. Heck, it might even be a bit early to call LLVM mature. Sure, it supports a C and C++ compiler, but I don't think it has anything production-ready for much else.
It's in extensive use by Apple on the iPhone and in XCode, and outside Apple. The JVM is also well understood and widely deployed.
By comparison the Parrot project with the widest use is Rakudo, which is still just at a testing stage. Maybe there's some larger user of Parrot that I haven't heard about, so correct me if I'm wrong.
Lua 5.2 has been feature complete on Parrot for years. Like LLVM and the JVM, we'll keep tuning and improving and fixing bugs and adding features to make language implementation easier, but the correlation between "maturity" and "use" is strong.
The URL to the benchmark script was broken so I couldn't run it.
Don't get me wrong, I think Parrot's very neat. But I could see why compiler implementors would be sceptical of it since it's not feature complete, and seemingly not very optimized. So there's a lot of unknowns.
If I'm compiling, what should I target?
I could target LLVM, C, some high-level compilable langauge, or now, Parrot.
There doesn't seem to be any cogent, clear, knowledgable discussion of the various features and merits. I suppose asking for one is like asking "which language is best," and the answer will always be "it depends."