Hello Renier,

On Fri, Oct 10, 2008 at 3:07 AM, Reinier Zwitserloot <[EMAIL PROTECTED]>wrote:

>
> Amongst the -many- great things said in 208, I really liked the wake-
> up call given during the discussion about why core libraries tend to
> be written in vanilla java. As much as many of us are rooting for
> scala and other improvements to a foothold, I now believe it won't
> really happen.
>
> I'm now committed to see if my toy plan for java.next can actually
> become something. I'll quickly explain it:
>
>
> There are a number of boiler-platey java snippets which you could
> easily translate to a hypothetical cleaner, more readable format. You
> can translate from this newer format to vanilla java, and back,
> without having to resort to 'magick' comments or finicky patterns
> which have to be followed exactly. For example, imagine writing a tool
> that looks at java 1.4 style code, and translates array and list
> iteration to a foreach loop. It's not hard to image this, and I doubt
> you'll run into the problems you have with GUI generators (where any
> change to the underlying 'vanilla' java tends to confuse the GUI
> generator so much that it can no longer make sense of the java code).
> It's just too straightforward.
>
> I can come up with lots of useful java language additions that are
> similarly translatable. This isn't exhaustive, but, a few examples:
>
>  - CICE. CICE in particular is an exact boilerplate to shorter format
> translation. The following:
>
> new Thread(new Runnable() { public void execute() { /* code */});
>
> becomes:
>
> new Thread(Runnable() { /* code */});


Why not:

Thread({/*Code*/}) ?

The need for the "new" keyword is gone.
The compiler knows the constructor args and can infer the type (in this case
Runnable)
The compiler knows that Runnable is a one-method interface, so it allows the
closure block.


>
>
> which translates forwards and backwards, no problem.
>
>  - 'properties' - a way to annotate or otherwise mark private fields
> so that vanilla get, set, and optionally, addPropertyListener, is
> generated. The only question in translating back and forth is where
> the getter and setter methods should show up in the code
> (alphabetically sorted, inserted right below the field? grouped?).
> It's not quite the full blown properties that Joe wants, but its a
> step in the right direction.


getters and setters รก la Java are simply 100% boilerplate.
compare:

case class Person(var firstname, var surname)


to

public class Person
{
    private String firstName;
    private String surName;

   public final void setFirstName(final String firstName)
   {
          this.firstName = firstName;
   }

   public final String getFirstName()
   {
          return this.firstName;
   }

   public final void setSurName(final String surName)
   {
         this.surName = surName;
   }

   public final String getSurName()
   {
          return this.surName;
   }

   //Also, I didn't bother to write equals, hashCode and toString, but add
another 20 lines of code below here for that
}


>
>
>  - list and map literals.


...and remove arrays from the language... (they are a primitive optimization
construct, the language should only expose ArrayList, and then the VM can
use arrays under the hood)


>
>
>  - default parameter values.
>

Praise the Lord!


>
>  - map foreach (for (K key, V value : someMap) { /* code */ } instead
> of using Map.Entry directly ).


or like: map.foreach( (K key, V value) { /*Code*/} )


>
>
>  - infer type for local final variables (just 'final foo = "hello"; is
> valid).


Or simply make "final" the default.


>
>
>
> I'd like to make plugins for netbeans and eclipse which let them
> transparently support these features. The key factor is that, on disk,
> ONLY vanilla java is stored. When you read in the vanilla java, the
> code is automatically scanned for patterns and converted (in memory
> only) to the newer syntax, and then, when you save the file, it's
> converted back to vanilla java again. This means that boilerplatey
> code written by anyone, even those not aware of the existence of
> java.next / these plugins, gets converted. You get the benefits of the
> new language even for your 'old' code - there's NO need to refactor
> your code, there's no need to mess with your tool chain, and there's
> no need to reach a consensus before turning on this plugin when
> working in a bigger team. No one would notice unless you told them.
>
> In order for this to work, I was planning on building the following
> parts:
>
>  1. a modified javac that understands all the new features and knows
> how to generate the right bytecode. This is needed because you at
> least need to parse the new format, and if you can't compile it
> directly, you get screwed up line numbers for debugging, which is no
> good. Probably stored as a branch off of javac trunk.
>
>  2. A converter which converts a javac generated AST to the eclipse
> AST model. The eclipse parser pretty much sucks, and from my limited
> experience, javac is now better at error recovery (making sense, in as
> far as possible, of code with syntax errors in it) than eclipse's 1985
> Ada parser based thing, so this seems like an easier route than
> hacking ecj.
>
>  3. Two ast-to-ast converters; one to convert vanilla java to new
> format java, and one to convert new format java back to vanilla java.
> I'm looking at ripping jackpot back out of netbeans' refactoring
> engine and using that (it's an AST to AST converter, after all). This
> would involve updating jackpot so it knows about new java's syntax.
>
>  4. A plugin, for both eclipse and netbeans, which replaces the parser
> and compiler with the modified javac (in eclipse's case, the modified
> javac + the javac AST to eclipse AST converter), and where needed adds
> quickfixes and other polish. Due to the design of at least eclipse,
> this can't be released as a traditional plugin as it has to replace
> the java-specific plugins which are pretty deeply entrenched;
> therefore,
>
>  5. an installer which backs up the existing java plugins, then
> patches them with the various additions, or, alternatively, a
> repackaged complete IDE that's been patched. The latter is easier but
> forces the user into a specific version of eclipse/netbeans.
>
>
> As you can see, this is complicated. If anyone wants to help out,
> email me. If you have a lot of experience hacking netbeans/eclipse in
> particular, I'd love to hear from you. I'm not too sure I can do those
> bits without spending /a lot/ of time researching.
> >
>


-- 
Viktor Klang
Senior Systems Analyst

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "The 
Java Posse" group.
To post to this group, send email to javaposse@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/javaposse?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to