On 09/25/2015 05:04 PM, Ole Ersoy wrote: > Hi Thomas, > > On 09/25/2015 08:45 AM, Thomas Neidhart wrote: >> Hi Ole, >> >> can you explain why you think that the addition of lombok brings any >> benefit to our users? > Sure - I'm looking at the LevenbergMarquardtOptimizer ATM, and it has > the following set of parameters: > > /* configuration parameters */ > /** Positive input variable used in determining the initial step > bound. */ > private final double initialStepBoundFactor; > /** Desired relative error in the sum of squares. */ > private final double costRelativeTolerance; > /** Desired relative error in the approximate solution parameters. */ > private final double parRelativeTolerance; > /** Desired max cosine on the orthogonality between the function vector > * and the columns of the jacobian. */ > private final double orthoTolerance; > /** Threshold for QR ranking. */ > private final double qrRankingThreshold; > > And corresponding getters: > /** > * Gets the value of a tuning parameter. > * @see #withInitialStepBoundFactor(double) > * > * @return the parameter's value. > */ > public double getInitialStepBoundFactor() { > return initialStepBoundFactor; > } > > /** > * Gets the value of a tuning parameter. > * @see #withCostRelativeTolerance(double) > * > * @return the parameter's value. > */ > public double getCostRelativeTolerance() { > return costRelativeTolerance; > } > > /** > * Gets the value of a tuning parameter. > * @see #withParameterRelativeTolerance(double) > * > * @return the parameter's value. > */ > public double getParameterRelativeTolerance() { > return parRelativeTolerance; > } > > /** > * Gets the value of a tuning parameter. > * @see #withOrthoTolerance(double) > * > * @return the parameter's value. > */ > public double getOrthoTolerance() { > return orthoTolerance; > } > > /** > * Gets the value of a tuning parameter. > * @see #withRankingThreshold(double) > * > * @return the parameter's value. > */ > public double getRankingThreshold() { > return qrRankingThreshold; > } > > Lombok will generate all of these. Eclipse can do the same thing, but > if we delete one of the parameters, then the corresponding getter also > has to be deleted. Also Lombok cuts down on the source code noise, > since it is a byte code generator. The generated code does not appear > in the source. > > Lombok also has a @Builder annotation that can be used to generate a > inner static builder class that provides a fluent construction API. So > if we break off the LevenbergMarquardtOptimizer configuration into its > own class, and generate all the getters and the fluid API, there should > be substantial code reduction. > > Gilles is also working on a snapshot capability for neural nets, and the > @Synchronized annotation could come in handy here. These are the items > I have looked at so far. > >> >> >From my point of view, lombok can help developers by taking over some >> tedious tasks, but this is quite irrelevant in the case of CM as the >> majority of work goes into algorithm design and verification rather >> than in >> writing getters/setters (which btw has pretty good IDE support). > > I agree that the majority of time goes into the design of the > algorithm. For me personally, when I'm looking at code, and it has a > ton of boilerplate, it does slow my productivity...just because of all > the noise. I'm happy once I've gotten it as DRY as possible. > > The more boilerplate, the more reluctant we are going to be to undertake > refactoring, and we will make more mistakes (At least I will :) ). > >> So this >> would just add additional complexity and the gain is very unclear. > I think you will find it refreshing once you try it. At this point > though I just wanted to float the idea. I'll complete the experiment > and publish the result. At that point we will have a good baseline to > gage whether adding it will add enough value to offset the cost of > adding it.
Well I know lombok. Keep in mind that it is a bit more difficult to integrate it into our build-chain. As you probably know, in order to generate proper javadoc, you need to use delombok first to create source files which can be used for the javadoc process. In general I do not think that lombok is the right tool for a library like CM, and I do not know any other library that uses lombok. It certainly has strengths and uses for application development though. Thomas --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org