First batch of statistics (controls submodule so far)

1630 vs 996 class in controls (my actual state on disk, YMMV)

More statistics to follow...

-Sven


On Mon, Oct 7, 2013 at 6:24 PM, Richard Bair <richard.b...@oracle.com>wrote:

> My thoughts exactly, which is why I'm grateful for Sven for trying it out
> :-). I expect that Lambda would make a big reduction in static class count
> (i.e.: class files), but not a major reduction in class count at runtime
> (since dynamic classes are created for Lambdas). So a normal Jar should be
> significantly smaller, while a Pack200 jar probably has little to no
> difference. Execution speed should be the same. Startup might be faster or
> slower, I'm not sure (but I would expect it to be negligible). If the jar
> is significantly reduced in size, it might be useful for embedded which
> doesn't use Pack200.
>
> But we need the data, because making the change at this point, otherwise
> in a couple months when we get a 9 / 8u workspace opened we can start
> putting the work in there (since in my mind there is no question but that
> for 9 we need to complete lamdafication).
>
> Richard
>
> On Oct 7, 2013, at 8:19 AM, Danno Ferrin <danno.fer...@shemnon.com> wrote:
>
> > IntelliJ at least has a decent de-lamba assistant, not sure about
> NetBeans
> > since it isn't my daily driver.  So I am not concerned about the
> > backporting impact if (and this is the big if) there is demonstrable
> > improvement in either jar size, execution speed, or runtime memory
> impact.
> > Ideally all three.  Worth the hassle in that case.  But if all we get
> from
> > this is busy work, then i would then question it's value.
> >
> >
> > On Mon, Oct 7, 2013 at 8:21 AM, Tom Schindl <tom.schi...@bestsolution.at
> >wrote:
> >
> >> ... I can't see any real improvement for using lambdas beside that you
> >> killed off warnings which could be fixed otherwise as well.
> >>
> >> So I really don't get what it would help us beside making e.g. RoboVM
> >> our sole chance to get FX on iOS harder to maintain.
> >>
> >> Tom
> >>
> >> On 07.10.13 16:16, Sven Reimers wrote:
> >>> Ok. So I will file a P4 saying Lambdafication for Controls
> >>> and send the diff to Richard/Kevin/Jonathan to be attached..
> >>>
> >>> should I base the change on b110 (master)?
> >>>
> >>> I could create a public bitbucket branch based on master and add my
> >> changes
> >>> there - better idea?
> >>>
> >>> What approach is most simple for review?
> >>>
> >>> Should I split test and library code changes?
> >>>
> >>> -Sven
> >>>
> >>> P.S. Shall I try to get this done as well for other modules? Which
> would
> >> be
> >>> preferred? (Just in case I have some more time to spend)
> >>>
> >>>
> >>>
> >>> On Mon, Oct 7, 2013 at 1:26 PM, Kevin Rushforth
> >>> <kevin.rushfo...@oracle.com>wrote:
> >>>
> >>>> **
> >>>>
> >>>> 5. Should we enable more -Xlint warnings in OpenJFX build?
> >>>>
> >>>> 6. Any chances anything of this can still go in 8 (e.g. get rid of
> >> warnings
> >>>>
> >>>>
> >>>> We have 2 weeks where we can still accept P4-P5 bugs into FX 8, and
> >>>> getting rid of warnings would be a P4 bug. I guess it depends on how
> >>>> intrusive the changes are and whether someone has time to review it in
> >> the
> >>>> next two weeks.
> >>>>
> >>>> -- Kevin
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> Sven Reimers wrote:
> >>>>
> >>>> Ok. So here are the results of trying to add lambda and diamond to the
> >>>> controls module:
> >>>>
> >>>> 1. A lot of generics and typing to be fixed (esp. in tests). Seems you
> >> can
> >>>> get  some anonymous inner classes type checked by the compiler, but
> not
> >> the
> >>>> lambda equivalent.. very interesting.
> >>>>
> >>>> 2.  279 Files modified (including tests)
> >>>>
> >>>> 3. A lot of the automatic replacements could probably be nicer e.g.
> >>>>
> >>>> ft.setOnFinished(new EventHandler<ActionEvent>() {
> >>>>                        @Override public void handle(ActionEvent
> >>>> actionEvent) {
> >>>>                          getChildren().remove(tm.textNode);
> >>>>                        }
> >>>>                    });
> >>>>
> >>>> was replaced to:
> >>>>
> >>>> ft.setOnFinished((ActionEvent actionEvent) -> {
> >>>>    getChildren().remove(tm.textNode);
> >>>> });
> >>>>
> >>>> most unobtrusive code probably:
> >>>>
> >>>> ft.setOnFinished((actionEvent) -> getChildren().remove(tm.textNode));
> >>>>
> >>>> 4. A lot of illegal forward reference errors - these were result of
> >> missing
> >>>> this in the automatic transformation from anonymous inner to lambdas
> >> (seems
> >>>> the rules are not identical - you have to add "this." as prefix if
> using
> >>>> lambdas - not sure this is the expected way it should work)
> >>>>
> >>>> 5. Should we enable more -Xlint warnings in OpenJFX build?
> >>>>
> >>>> 6. Any chances anything of this can still go in 8 (e.g. get rid of
> >> warnings
> >>>>
> >>>> 7. Probably more things I just can't think of at the moment...
> >>>>
> >>>> How to take this forward? If there is interest in the change I could
> >> make
> >>>> available...
> >>>>
> >>>> Comments? Ideas?
> >>>>
> >>>> -Sven
> >>>>
> >>>>
> >>>>
> >>>> On Fri, Oct 4, 2013 at 2:19 PM, Sven Reimers <sven.reim...@gmail.com>
> <
> >> sven.reim...@gmail.com> wrote:
> >>>>
> >>>>
> >>>>
> >>>> Oh and btw - would you go for lambda with or without additional type
> >> info
> >>>> before parameter name?
> >>>>
> >>>> -Sven
> >>>>
> >>>>
> >>>> On Fri, Oct 4, 2013 at 2:05 PM, Sven Reimers <sven.reim...@gmail.com>
> <
> >> sven.reim...@gmail.com>wrote:
> >>>>
> >>>>
> >>>>
> >>>> Ok. Here you go...
> >>>>
> >>>> I just did an inspection run for the controls module and my IDE came
> up
> >>>> with  (drum roll) 888 possible lambda conversions..
> >>>>
> >>>> Looking through them I discovered that usage of <> (aka diamond
> syntax)
> >>>> is   not used (or at least not used a lot) in at least the controls
> >>>> modules. My IDE showed me 1171 occurrences.
> >>>>
> >>>> Is there a good reason not to use diamonds?
> >>>>
> >>>> Will now try to apply all those changes and figure out if this still
> >>>> builds... up next: go through the other modules...
> >>>>
> >>>> -Sven
> >>>>
> >>>>
> >>>> On Fri, Oct 4, 2013 at 1:35 AM, Richard Bair <richard.b...@oracle.com
> >
> >> <richard.b...@oracle.com>wrote:
> >>>>
> >>>>
> >>>>
> >>>> Brian was telling me at J1 that whether parallel gets you performance
> >> or
> >>>> not depends on the size of the collection and the complexity of the
> >> work to
> >>>> perform. There is definitely a point at which parallel helps -- and a
> >> point
> >>>> at which it hurts.
> >>>>
> >>>> Richard
> >>>>
> >>>> On Oct 3, 2013, at 3:33 PM, Hervé Girod <herve.gi...@gmail.com> <
> >> herve.gi...@gmail.com> wrote:
> >>>>
> >>>>
> >>>>
> >>>> Here is a nice example, taking advantage of the ease of going
> >>>>
> >>>>
> >>>> parallel. Apparently the performance without parallel will also
> further
> >>>> improve.
> >>
> http://blog.hersen.name/blog/2013/10/01/project-lambda-it-was-worth-the-wait/
> >>>>
> >>>> Hervé
> >>>>
> >>>> Sent from my iPad
> >>>>
> >>>>
> >>>>
> >>>> On 4 oct. 2013, at 00:20, David Grieve <david.gri...@oracle.com> <
> >> david.gri...@oracle.com>
> >>>>
> >>>> wrote:
> >>>>
> >>>>
> >>>> And what about Stream? I like the declarative code that comes from
> >>>>
> >>>>
> >>>> using Stream and I can see places in the code where Stream could be
> >> used,
> >>>> but I wonder about its performance relative to iterators and/or
> enhanced
> >>>> for loops.
> >>>>
> >>>>
> >>>> On Oct 3, 2013, at 4:45 PM, Richard Bair <richard.b...@oracle.com> <
> >> richard.b...@oracle.com>
> >>>>
> >>>> wrote:
> >>>>
> >>>>
> >>>>  Hello, OpenJFX Community.
> >>>>
> >>>> There's a question about using Java 8 features in FX.
> >>>>
> >>>> I've been working on the support for InputMethods in JFXPanel which
> >>>>
> >>>>
> >>>>  is an important feature for many users who speak hieroglyphic
> >> languages.
> >>>>
> >>>>
> >>>>  The issue is tracked under:
> >>>>
> >>>>
> >>>>  https://javafx-jira.kenai.com/browse/RT-13248
> >>>>
> >>>>  In order to have a high-quality support we need to change
> >>>>
> >>>>
> >>>>  javafx.scene.input.InputMethodRequests interface and introduce 3 new
> >>>> methods. This is not needed for pure FX applications right now, but
> >>>> absolutely required for InputMethods in the JFXPanel. However, the
> >>>> interface is public and it was present since FX2.0, so changing it
> would
> >>>> become a breaking change. So the only way to avoid the problem is
> using
> >> the
> >>>> default methods. Those would return some stub values, the JDK is OK
> with
> >>>> that, as it would not crash or throw exceptions, but text composition
> >> would
> >>>> not work correctly.
> >>>>
> >>>>
> >>>>  I know that we want to avoid using the Java 8 features in the
> >>>>
> >>>>
> >>>>  JFX-8, so I wanted to ask - is it OK to use the default methods here?
> >>>>
> >>>>
> >>>>  If you are staying away from JDK8 features for the JFX78 backport,
> >>>>
> >>>>
> >>>>  don't worry.  There are more issues with new JDK8 APIs than with the
> >> new
> >>>> language features.
> >>>>
> >>>>
> >>>>  For example there were default methods put into some collections
> >>>>
> >>>>
> >>>>  classes that we solved by pushing them down to the first implements.
> >> But
> >>>> the Date and Time picker depends on the new time package.  The
> threeten
> >>>> backport won't be updated until after 8 ships, so that has been
> removed
> >> so
> >>>> far.
> >>>>
> >>>>
> >>>>  I'de be interested to know what a wholesale lamdaization would
> >>>>
> >>>>
> >>>>  result in speed wise and code size wise (both source and compiled).
> >> From
> >>>> what I can tell the IDEs can lambda and de-lambda fairly easily, so it
> >> jsut
> >>>> makes the backport more of a busy work proposition.  If there were
> >>>> performance gains it would also make a great front page story in the
> >> next
> >>>> java magazine or a case study..
> >>>>
> >>>>
> >>>>  After having used Lambda's for JavaOne, I'd love to make the
> >>>>
> >>>>
> >>>>  conversion, even if in the end the performance was the same, because
> >> the
> >>>> savings in noise in the Java files is so big. At one time I just took
> >> the
> >>>> concurrent classes and lambda-ized them to measure the impact on those
> >>>> classes. You could maybe pick a package and just lambda-ize that one
> >>>> package and see what happens in terms of size reduction. We might see:
> >>>>
> >>>>
> >>>>   + A reduction in the overall class size (not pack-200'd)
> >>>> - An increase in startup time (have to spin up synthetic classes
> >>>>
> >>>>
> >>>>  created at usage time)
> >>>>
> >>>>
> >>>>   +/- And increase or decrease in performance
> >>>> + A decrease in source code
> >>>>
> >>>> It would be interesting to get some data for these points and see
> >>>>
> >>>>
> >>>>  what effect lambda's have. Especially if an IDE can just do it in
> >> bulk…
> >>>>
> >>>>
> >>>>  Richard
> >>>>
> >>>>
> >>>>           --
> >>>> Sven Reimers
> >>>>
> >>>> * Senior Expert Software Architect
> >>>> * NetBeans Dream Team Member: http://dreamteam.netbeans.org
> >>>> * Community Leader  NetBeans: http://community.java.net/netbeans
> >>>>                              Desktop Java:
> >> http://community.java.net/javadesktop
> >>>> * Duke's Choice Award Winner 2009
> >>>> * Blog: http://nbguru.blogspot.com
> >>>>
> >>>> * XING: https://www.xing.com/profile/Sven_Reimers8
> >>>> * LinkedIn: http://www.linkedin.com/in/svenreimers
> >>>>
> >>>> Join the NetBeans Groups:
> >>>> * XING: http://www.xing.com/group-20148.82db20
> >>>> * NUGM: http://haug-server.dyndns.org/display/NUGM/Home
> >>>> * LinkedIn: http://www.linkedin.com/groups?gid=1860468
> >>>>                   http://www.linkedin.com/groups?gid=107402
> >>>>                   http://www.linkedin.com/groups?gid=1684717
> >>>> * Oracle: https://mix.oracle.com/groups/18497
> >>>>
> >>>>
> >>>> --
> >>>> Sven Reimers
> >>>>
> >>>> * Senior Expert Software Architect
> >>>> * NetBeans Dream Team Member: http://dreamteam.netbeans.org
> >>>> * Community Leader  NetBeans: http://community.java.net/netbeans
> >>>>                              Desktop Java:
> >> http://community.java.net/javadesktop
> >>>> * Duke's Choice Award Winner 2009
> >>>> * Blog: http://nbguru.blogspot.com
> >>>>
> >>>> * XING: https://www.xing.com/profile/Sven_Reimers8
> >>>> * LinkedIn: http://www.linkedin.com/in/svenreimers
> >>>>
> >>>> Join the NetBeans Groups:
> >>>> * XING: http://www.xing.com/group-20148.82db20
> >>>> * NUGM: http://haug-server.dyndns.org/display/NUGM/Home
> >>>> * LinkedIn: http://www.linkedin.com/groups?gid=1860468
> >>>>                   http://www.linkedin.com/groups?gid=107402
> >>>>                   http://www.linkedin.com/groups?gid=1684717
> >>>> * Oracle: https://mix.oracle.com/groups/18497
> >>>>
> >>>>
> >>>>
> >>>>
> >>>
> >>>
> >>
> >>
>
>


-- 
Sven Reimers

* Senior Expert Software Architect
* NetBeans Dream Team Member: http://dreamteam.netbeans.org
* Community Leader  NetBeans: http://community.java.net/netbeans
                              Desktop Java:
http://community.java.net/javadesktop
* Duke's Choice Award Winner 2009
* Blog: http://nbguru.blogspot.com

* XING: https://www.xing.com/profile/Sven_Reimers8
* LinkedIn: http://www.linkedin.com/in/svenreimers

Join the NetBeans Groups:
* XING: http://www.xing.com/group-20148.82db20
* NUGM: http://haug-server.dyndns.org/display/NUGM/Home
* LinkedIn: http://www.linkedin.com/groups?gid=1860468
                   http://www.linkedin.com/groups?gid=107402
                   http://www.linkedin.com/groups?gid=1684717
* Oracle: https://mix.oracle.com/groups/18497

Reply via email to