Re: Thoughts on the JVM as a compilation Target?

torbenm@diku.dk (Torben Ęgidius Mogensen)
Tue, 29 May 2012 17:40:03 +0200

          From comp.compilers

Related articles
[2 earlier articles]
Re: Thoughts on the JVM as a compilation Target? jeremy.wright@microfocus.com (Jeremy Wright) (2012-05-24)
Re: Thoughts on the JVM as a compilation Target? torbenm@diku.dk (2012-05-24)
Re: Thoughts on the JVM as a compilation Target? arcfide@sacrideo.us (Aaron W. Hsu) (2012-05-24)
Re: Thoughts on the JVM as a compilation Target? lpsantil@gmail.com (lpsantil@gmail.com) (2012-05-24)
Re: Thoughts on the JVM as a compilation Target? cr88192@hotmail.com (BGB) (2012-05-24)
Re: Thoughts on the JVM as a compilation Target? cr88192@hotmail.com (BGB) (2012-05-25)
Re: Thoughts on the JVM as a compilation Target? torbenm@diku.dk (2012-05-29)
| List of all articles for this month |

From: torbenm@diku.dk (Torben Ęgidius Mogensen)
Newsgroups: comp.compilers
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
Keywords: Java
Posted-Date: 29 May 2012 11:40:28 EDT

BGB <cr88192@hotmail.com> 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
      unbounded integers.


  - 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).


Torben


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.