You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@river.apache.org by Peter Firmstone <ji...@zeus.net.au> on 2009/03/28 13:29:58 UTC

Retrotranslator generates Java 1.4 bytecode from Java 1.5 sources - Clarification

Thank you all for the comments,

Just thought I'd make a note that I've finished backporting the 
classdepend code that Tim provided to 1.4, still playing around with it, 
I'll post it shortly.  Just so everyone is clear that Java 1.5 is not 
required for this particular task.

However while doing the backport I removed all Generics and replaced 
them with unchecked class casts, which motivated me to consider the 
benefits of Java 1.5 language constructs, mostly since of the use of 
Generics allows additional checking by the compiler which has the 
potential to reduce runtime errors.  This also led me to ponder the 
Backported Concurrency utilities and Annotations.

Considering that the ClassDep code has now added a new library 
dependency ASM (3.2MB source), I thought that we could also consider 
using Retrotranslator (3.1MB source) in our ant build scripts to build 
Java 1.4 compatible bytecode while getting to take advantage of most 
Java 1.5 language features.

Comments so far have been

Item
	For
Drop Java 1.4 support altogether, migrate to 1.5 allowing us to write 
new code in Java 1.5, this negates the need for Retrotranslator
	Dennis Reedy, Jim Waldo, Jonathan Costers, Greg Trasuk
Consider small device VM's ( JavaME CDC incl class loading) this 
requires supporting JRE 1.4,  discuss further, do some research into the 
size of bytecode generated by Retrotranslator.
	Patrick Wright, Peter Firmstone
If a device is too small to use post 1.4 features use surrogate 
instead.  I think combined with the point above, we'd need to state the 
minimum device requirements for full jini architecture support.
	Sean Landis, Peter Firmstone
More consideration required before migrating away from 1.4 platform support.
	Tim Blackman


What I'm proposing is a Transition Period, using Retrotranslator in our 
build scripts to support Java 1.4 bytecode  while allowing us to use 1.5 
language constructs.

Best Regards,

Peter Firmstone.

What Java 5.0 features are supported:

    * Generics
    * Annotations
    * Reflection on generics and annotations
    * Typesafe enums
    * Autoboxing/unboxing
    * Enhanced for loop
    * Varargs
    * Covariant return types
    * Formatted output
    * Static import
    * Concurrency utilities
    * Collections framework enhancements



For those interested this is Retrotranslator's source directory / 
package structure, its surprisingly small:

bash-3.00$ du -h ./
   4K   ./conf/retrotranslator-runtime
   4K   ./conf/retrotranslator-runtime13
   5K   ./conf/retrotranslator-transformer
  14K   ./conf
  68K   ./doc
 818K   ./lib
   1K   ./src/net/sf/retrotranslator/android/extra/java
   2K   ./src/net/sf/retrotranslator/android/extra
   3K   ./src/net/sf/retrotranslator/android
  18K   ./src/net/sf/retrotranslator/registry
   6K   ./src/net/sf/retrotranslator/runtime/asm/commons
  25K   ./src/net/sf/retrotranslator/runtime/asm/signature
 359K   ./src/net/sf/retrotranslator/runtime/asm
  65K   ./src/net/sf/retrotranslator/runtime/format
 127K   ./src/net/sf/retrotranslator/runtime/impl
  34K   ./src/net/sf/retrotranslator/runtime/java/io
  26K   ./src/net/sf/retrotranslator/runtime/java/lang/annotation
  16K   ./src/net/sf/retrotranslator/runtime/java/lang/instrument
   4K   ./src/net/sf/retrotranslator/runtime/java/lang/management
  57K   ./src/net/sf/retrotranslator/runtime/java/lang/reflect
 246K   ./src/net/sf/retrotranslator/runtime/java/lang
  11K   ./src/net/sf/retrotranslator/runtime/java/math
  18K   ./src/net/sf/retrotranslator/runtime/java/net
   4K   ./src/net/sf/retrotranslator/runtime/java/nio/charset
   8K   ./src/net/sf/retrotranslator/runtime/java/nio
   7K   ./src/net/sf/retrotranslator/runtime/java/rmi/server
   8K   ./src/net/sf/retrotranslator/runtime/java/rmi
  12K   ./src/net/sf/retrotranslator/runtime/java/text
   6K   ./src/net/sf/retrotranslator/runtime/java/util/concurrent/locks
   7K   ./src/net/sf/retrotranslator/runtime/java/util/concurrent
  18K   ./src/net/sf/retrotranslator/runtime/java/util/regex
 144K   ./src/net/sf/retrotranslator/runtime/java/util
 482K   ./src/net/sf/retrotranslator/runtime/java
   4K   ./src/net/sf/retrotranslator/runtime/javax/net/ssl
   5K   ./src/net/sf/retrotranslator/runtime/javax/net
   6K   ./src/net/sf/retrotranslator/runtime/javax
 1.0M   ./src/net/sf/retrotranslator/runtime
  28K   ./src/net/sf/retrotranslator/runtime13/v14/java/lang
   4K   ./src/net/sf/retrotranslator/runtime13/v14/java/util
  33K   ./src/net/sf/retrotranslator/runtime13/v14/java
  34K   ./src/net/sf/retrotranslator/runtime13/v14
  35K   ./src/net/sf/retrotranslator/runtime13
 378K   ./src/net/sf/retrotranslator/transformer
 1.4M   ./src/net/sf/retrotranslator
 1.4M   ./src/net/sf
 1.4M   ./src/net
 1.4M   ./src
  55K   ./test/net/sf/retrotranslator/runtime/format
  12K   ./test/net/sf/retrotranslator/runtime/impl
  31K   ./test/net/sf/retrotranslator/runtime/java/io
  17K   ./test/net/sf/retrotranslator/runtime/java/lang/instrument
   4K   ./test/net/sf/retrotranslator/runtime/java/lang/management
  61K   ./test/net/sf/retrotranslator/runtime/java/lang/reflect
 275K   ./test/net/sf/retrotranslator/runtime/java/lang
  15K   ./test/net/sf/retrotranslator/runtime/java/math
  32K   ./test/net/sf/retrotranslator/runtime/java/net
   4K   ./test/net/sf/retrotranslator/runtime/java/nio/charset
   9K   ./test/net/sf/retrotranslator/runtime/java/nio
  12K   ./test/net/sf/retrotranslator/runtime/java/rmi/server
  13K   ./test/net/sf/retrotranslator/runtime/java/rmi
   7K   ./test/net/sf/retrotranslator/runtime/java/text
   6K   ./test/net/sf/retrotranslator/runtime/java/util/concurrent/locks
   7K   ./test/net/sf/retrotranslator/runtime/java/util/concurrent
  14K   ./test/net/sf/retrotranslator/runtime/java/util/regex
 128K   ./test/net/sf/retrotranslator/runtime/java/util
 511K   ./test/net/sf/retrotranslator/runtime/java
   8K   ./test/net/sf/retrotranslator/runtime/javax/net/ssl
   9K   ./test/net/sf/retrotranslator/runtime/javax/net
  10K   ./test/net/sf/retrotranslator/runtime/javax
 589K   ./test/net/sf/retrotranslator/runtime
  25K   ./test/net/sf/retrotranslator/runtime13/v14/java/lang
   4K   ./test/net/sf/retrotranslator/runtime13/v14/java/util
  30K   ./test/net/sf/retrotranslator/runtime13/v14/java
  31K   ./test/net/sf/retrotranslator/runtime13/v14
  32K   ./test/net/sf/retrotranslator/runtime13
   6K   ./test/net/sf/retrotranslator/tests/custom
   4K   ./test/net/sf/retrotranslator/tests/java/math
   6K   ./test/net/sf/retrotranslator/tests/java/util
  11K   ./test/net/sf/retrotranslator/tests/java
  79K   ./test/net/sf/retrotranslator/tests
  15K   ./test/net/sf/retrotranslator/transformer/smart
  90K   ./test/net/sf/retrotranslator/transformer
 791K   ./test/net/sf/retrotranslator
 792K   ./test/net/sf
 793K   ./test/net
 794K   ./test
 3.1M   .


Re: Retrotranslator generates Java 1.4 bytecode from Java 1.5 sources - Clarification

Posted by Niclas Hedhman <ni...@hedhman.org>.
On Sun, Mar 29, 2009 at 7:06 AM, Dan Rollo <da...@gmail.com> wrote:
> 1. I want to add to the "drop 1.5, move to 1.5" group. 1.4 is EOL'd, and so
> 1.5 soon...(http://java.sun.com/products/archive/eol.policy.html)

You can put me in the Java5-camp as well. IMHO, classloading-capable
devices are quickly reaching Java5 minimum, and I think no one ever
seriously deployed Jini on small devices.

> 2. If we do use ASM and/or Retrotranslator, do we really need to bank and
> distribute the source for these? Seems clearly versioned binaries would be
> sufficient.

With a Java5 move, this is a moot point, right?
Even so, we don't need to distribute sources on code that we don't
create/modify ourselves. Binary dependencies also have a wider choice
of licensing options. See http://www.apache.org/legal/3party.html and
http://www.apache.org/legal/resolved.html


Cheers
-- 
Niclas Hedhman, Software Developer
http://www.qi4j.org - New Energy for Java

I  live here; http://tinyurl.com/2qq9er
I  work here; http://tinyurl.com/2ymelc
I relax here; http://tinyurl.com/2cgsug

Re: Retrotranslator generates Java 1.4 bytecode from Java 1.5 sources - Clarification

Posted by Dan Rollo <da...@gmail.com>.
1. I want to add to the "drop 1.5, move to 1.5" group. 1.4 is EOL'd, and 
so 1.5 soon...(http://java.sun.com/products/archive/eol.policy.html)

2. If we do use ASM and/or Retrotranslator, do we really need to bank 
and distribute the source for these? Seems clearly versioned binaries 
would be sufficient.

Dan Rollo

Peter Firmstone wrote:
> Thank you all for the comments,
> 
> Just thought I'd make a note that I've finished backporting the 
> classdepend code that Tim provided to 1.4, still playing around with it, 
> I'll post it shortly.  Just so everyone is clear that Java 1.5 is not 
> required for this particular task.
> 
> However while doing the backport I removed all Generics and replaced 
> them with unchecked class casts, which motivated me to consider the 
> benefits of Java 1.5 language constructs, mostly since of the use of 
> Generics allows additional checking by the compiler which has the 
> potential to reduce runtime errors.  This also led me to ponder the 
> Backported Concurrency utilities and Annotations.
> 
> Considering that the ClassDep code has now added a new library 
> dependency ASM (3.2MB source), I thought that we could also consider 
> using Retrotranslator (3.1MB source) in our ant build scripts to build 
> Java 1.4 compatible bytecode while getting to take advantage of most 
> Java 1.5 language features.
> 
> Comments so far have been
> 
> Item
>     For
> Drop Java 1.4 support altogether, migrate to 1.5 allowing us to write 
> new code in Java 1.5, this negates the need for Retrotranslator
>     Dennis Reedy, Jim Waldo, Jonathan Costers, Greg Trasuk
> Consider small device VM's ( JavaME CDC incl class loading) this 
> requires supporting JRE 1.4,  discuss further, do some research into the 
> size of bytecode generated by Retrotranslator.
>     Patrick Wright, Peter Firmstone
> If a device is too small to use post 1.4 features use surrogate 
> instead.  I think combined with the point above, we'd need to state the 
> minimum device requirements for full jini architecture support.
>     Sean Landis, Peter Firmstone
> More consideration required before migrating away from 1.4 platform 
> support.
>     Tim Blackman
> 
> 
> What I'm proposing is a Transition Period, using Retrotranslator in our 
> build scripts to support Java 1.4 bytecode  while allowing us to use 1.5 
> language constructs.
> 
> Best Regards,
> 
> Peter Firmstone.
> 
> What Java 5.0 features are supported:
> 
>    * Generics
>    * Annotations
>    * Reflection on generics and annotations
>    * Typesafe enums
>    * Autoboxing/unboxing
>    * Enhanced for loop
>    * Varargs
>    * Covariant return types
>    * Formatted output
>    * Static import
>    * Concurrency utilities
>    * Collections framework enhancements
> 
> 
> 
> For those interested this is Retrotranslator's source directory / 
> package structure, its surprisingly small:
> 
> bash-3.00$ du -h ./
>   4K   ./conf/retrotranslator-runtime
>   4K   ./conf/retrotranslator-runtime13
>   5K   ./conf/retrotranslator-transformer
>  14K   ./conf
>  68K   ./doc
> 818K   ./lib
>   1K   ./src/net/sf/retrotranslator/android/extra/java
>   2K   ./src/net/sf/retrotranslator/android/extra
>   3K   ./src/net/sf/retrotranslator/android
>  18K   ./src/net/sf/retrotranslator/registry
>   6K   ./src/net/sf/retrotranslator/runtime/asm/commons
>  25K   ./src/net/sf/retrotranslator/runtime/asm/signature
> 359K   ./src/net/sf/retrotranslator/runtime/asm
>  65K   ./src/net/sf/retrotranslator/runtime/format
> 127K   ./src/net/sf/retrotranslator/runtime/impl
>  34K   ./src/net/sf/retrotranslator/runtime/java/io
>  26K   ./src/net/sf/retrotranslator/runtime/java/lang/annotation
>  16K   ./src/net/sf/retrotranslator/runtime/java/lang/instrument
>   4K   ./src/net/sf/retrotranslator/runtime/java/lang/management
>  57K   ./src/net/sf/retrotranslator/runtime/java/lang/reflect
> 246K   ./src/net/sf/retrotranslator/runtime/java/lang
>  11K   ./src/net/sf/retrotranslator/runtime/java/math
>  18K   ./src/net/sf/retrotranslator/runtime/java/net
>   4K   ./src/net/sf/retrotranslator/runtime/java/nio/charset
>   8K   ./src/net/sf/retrotranslator/runtime/java/nio
>   7K   ./src/net/sf/retrotranslator/runtime/java/rmi/server
>   8K   ./src/net/sf/retrotranslator/runtime/java/rmi
>  12K   ./src/net/sf/retrotranslator/runtime/java/text
>   6K   ./src/net/sf/retrotranslator/runtime/java/util/concurrent/locks
>   7K   ./src/net/sf/retrotranslator/runtime/java/util/concurrent
>  18K   ./src/net/sf/retrotranslator/runtime/java/util/regex
> 144K   ./src/net/sf/retrotranslator/runtime/java/util
> 482K   ./src/net/sf/retrotranslator/runtime/java
>   4K   ./src/net/sf/retrotranslator/runtime/javax/net/ssl
>   5K   ./src/net/sf/retrotranslator/runtime/javax/net
>   6K   ./src/net/sf/retrotranslator/runtime/javax
> 1.0M   ./src/net/sf/retrotranslator/runtime
>  28K   ./src/net/sf/retrotranslator/runtime13/v14/java/lang
>   4K   ./src/net/sf/retrotranslator/runtime13/v14/java/util
>  33K   ./src/net/sf/retrotranslator/runtime13/v14/java
>  34K   ./src/net/sf/retrotranslator/runtime13/v14
>  35K   ./src/net/sf/retrotranslator/runtime13
> 378K   ./src/net/sf/retrotranslator/transformer
> 1.4M   ./src/net/sf/retrotranslator
> 1.4M   ./src/net/sf
> 1.4M   ./src/net
> 1.4M   ./src
>  55K   ./test/net/sf/retrotranslator/runtime/format
>  12K   ./test/net/sf/retrotranslator/runtime/impl
>  31K   ./test/net/sf/retrotranslator/runtime/java/io
>  17K   ./test/net/sf/retrotranslator/runtime/java/lang/instrument
>   4K   ./test/net/sf/retrotranslator/runtime/java/lang/management
>  61K   ./test/net/sf/retrotranslator/runtime/java/lang/reflect
> 275K   ./test/net/sf/retrotranslator/runtime/java/lang
>  15K   ./test/net/sf/retrotranslator/runtime/java/math
>  32K   ./test/net/sf/retrotranslator/runtime/java/net
>   4K   ./test/net/sf/retrotranslator/runtime/java/nio/charset
>   9K   ./test/net/sf/retrotranslator/runtime/java/nio
>  12K   ./test/net/sf/retrotranslator/runtime/java/rmi/server
>  13K   ./test/net/sf/retrotranslator/runtime/java/rmi
>   7K   ./test/net/sf/retrotranslator/runtime/java/text
>   6K   ./test/net/sf/retrotranslator/runtime/java/util/concurrent/locks
>   7K   ./test/net/sf/retrotranslator/runtime/java/util/concurrent
>  14K   ./test/net/sf/retrotranslator/runtime/java/util/regex
> 128K   ./test/net/sf/retrotranslator/runtime/java/util
> 511K   ./test/net/sf/retrotranslator/runtime/java
>   8K   ./test/net/sf/retrotranslator/runtime/javax/net/ssl
>   9K   ./test/net/sf/retrotranslator/runtime/javax/net
>  10K   ./test/net/sf/retrotranslator/runtime/javax
> 589K   ./test/net/sf/retrotranslator/runtime
>  25K   ./test/net/sf/retrotranslator/runtime13/v14/java/lang
>   4K   ./test/net/sf/retrotranslator/runtime13/v14/java/util
>  30K   ./test/net/sf/retrotranslator/runtime13/v14/java
>  31K   ./test/net/sf/retrotranslator/runtime13/v14
>  32K   ./test/net/sf/retrotranslator/runtime13
>   6K   ./test/net/sf/retrotranslator/tests/custom
>   4K   ./test/net/sf/retrotranslator/tests/java/math
>   6K   ./test/net/sf/retrotranslator/tests/java/util
>  11K   ./test/net/sf/retrotranslator/tests/java
>  79K   ./test/net/sf/retrotranslator/tests
>  15K   ./test/net/sf/retrotranslator/transformer/smart
>  90K   ./test/net/sf/retrotranslator/transformer
> 791K   ./test/net/sf/retrotranslator
> 792K   ./test/net/sf
> 793K   ./test/net
> 794K   ./test
> 3.1M   .
> 
>