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