D vs. C#
Christopher Wright
dhasenan at gmail.com
Mon Oct 22 06:00:41 PDT 2007
0ffh wrote:
> Walter Bright wrote:
>> I've never been able to discover what the fundamental advantage of a
>> VM is.
>
> I don't think there are any very fundamental advantages. But there sure
> seem to be a few things that make them attractive for some people.
>
> The most convincing of these revolve around neither run-time nor
> compile-time, but around write-time issues.
>
> In short: They try to make the language implementor's life easy.
>
> We see: The exact opposite of what you're trying to achieve (using C++).
>
> Regards, Frank
>
> Appendix: "Reasons for having a VM"
>
> 1. They are a way to separate the compiler back-end from the rest of the
> compiler. Clearly you wouldn't have to implement the VM in this scenario.
> 2. As far as the oldest VM I know designed for a specific language to be
> executed in is concerned: "UCSD p-System began around 1977 as the idea
> of UCSD's Kenneth Bowles, who believed that the number of new computing
> platforms coming out at the time would make it difficult for new
> programming languages to gain acceptance." (or that's what Wikipedia says).
>
> 3. From hxxp://en.wikipedia.org/wiki/P-code_machine:
> "a) For porting purposes. It is much easier to write a small (compared
> to the size of the compiler) p-code interpreter for a new machine, as
> opposed to changing a compiler to generate native code for the same
> machine.
> b) For quickly getting a compiler up and running. Generating machine
> code is one of the more complicated parts of writing a compiler. By
> comparison, generating p-code is much easier.
> c) Size constraints. Since p-code is based on an ideal virtual machine,
> many times the resulting p-code is much smaller than the same program
> translated to machine code.
> d) For debugging purposes. Since p-code is interpreted, the interpreter
> can apply many additional runtime checks that are harder to implement
> with native code."
Aside from the benefits of dubious reality, why not just emit LLVM code?
It simplifies your backend at the expense of a longer compile, but still
generates native code (for Intel-based, PowerPC, ARM, Thumb, SPARC, and
Alpha processors, anyway). And if you really want it, there's a JIT
compiler for those.
More information about the Digitalmars-d
mailing list