|[2 earlier articles]|
|Re: Thoughts on the JVM as a compilation Target? email@example.com (Jeremy Wright) (2012-05-24)|
|Re: Thoughts on the JVM as a compilation Target? firstname.lastname@example.org (2012-05-24)|
|Re: Thoughts on the JVM as a compilation Target? email@example.com (Aaron W. Hsu) (2012-05-24)|
|Re: Thoughts on the JVM as a compilation Target? firstname.lastname@example.org (email@example.com) (2012-05-24)|
|Re: Thoughts on the JVM as a compilation Target? firstname.lastname@example.org (BGB) (2012-05-24)|
|Re: Thoughts on the JVM as a compilation Target? email@example.com (BGB) (2012-05-25)|
|Re: Thoughts on the JVM as a compilation Target? firstname.lastname@example.org (2012-05-29)|
|From:||email@example.com (Torben Ęgidius Mogensen)|
|Date:||Tue, 29 May 2012 17:40:03 +0200|
|Organization:||SunSITE.dk - Supporting Open source|
|References:||12-05-015 12-05-016 12-05-024|
|Posted-Date:||29 May 2012 11:40:28 EDT|
BGB <firstname.lastname@example.org> writes:
> maybe trying for a small list here:
> lack of unsigned operations;
> lack of pointers;
> lack of function or method references;
> lack of variable references (need not be pointers);
> lack of a lexical environment;
> lack of good dynamic types;
> lack of package-scoped declarations;
> lack of operators over object types;
> lack of pass-by-value / structure types;
> lack of RAII or similar;
> lack of a good C FFI.
A few more:
- Lack of proper tail calls.
This can be implemented using trampolines, but this is inefficient
and kludgy. Scala (AFAIR) implements only tail recursion and not
proper tail calls because of this limitation.
- Lack of non-nullable reference types.
Object/reference types are implicitly always nullable, though it is
simple to statically verify non-nullable types. The consequence is
that the VM always has to check for null pointers when following
references, even when the reference can never be to null.
- Lack of structural type equivalence.
This means that you have to resort to kludges when implementing pair
types and similar structures, and it gives problems when implementing
(type-safe) polymorphic pair types. Which leads to
- Lack of parametric polymorphism.
Generics is currently implemented with type erasure to Object and
(runtime-checked) downcasts, which is inefficient. Statically
verified parametric polymorphism could avoid this.
- Lack of an unbounded integer type.
Though this can be implemented using JVM primitives, it is slow and
kludgy to do so. Many languages (Scheme, Haskell, ...) have
- Inefficient exception handling.
This was a real limitation for some students that tried to implement
a subset of Prolog in JVM. Exceptions were the natural way to
implement cut (!), but it was just way too slow.
This is what I could think off at the top of my head, but I'm sure more
would come up if I tried to use JVM as target for a realistically-sized
language (as opposed to toy languages).
Return to the
Search the comp.compilers archives again.