Hi Lee,

Thanks for such a cogent response. All of that makes a lot of sense to me.

I’m not at all considering making improvements, rather I’m merely wanting to 
use CppSketch within a Flink job as state. Making the class final adds a little 
friction to doing so, but not an overwhelming amount.

Ron

> On Apr 24, 2020, at 3:12 PM, leerho <lee...@gmail.com> wrote:
> 
> Hi Ron,
> 
> Our mission is to develop a robust sketch library product that can be used in 
> production systems in many different environments and be high performing and 
> binary compatible across languages and systems.  
> To be able to achieve this mission with our very limited resources, we have 
> to be careful  about making the surface area of what we have to support too 
> large.  Making classes final and/or private are some of the ways to reduce 
> the size of the support surface area.
> We have found that robust sketch software that is usable in production 
> environments can be very tricky and even though we have been doing this for a 
> number of years, we continue to discover new ways that these probabilistic 
> algorithms can behave in totally unexpected ways.  Also, testing and 
> validating these probabilistic algorithms can be very tricky.  Making what 
> appears to be a simple change to a class can have major impact on its 
> testability or stability.  Making a class final is one way to communicate 
> that the code and its testing counterparts is more complex than you might 
> think.  
> We have had experience with a number of folks that have tried to "improve" 
> these sketches on their own, but with disastrous results.  Making a class 
> final is one way to communicate that we do not recommend users to attempt to 
> extend these clases on their own.
> Making a class final (or private) also gives us, as developers, additional 
> degrees of freedom in terms of making necessary changes and improvements to 
> the internals of the class because we know that there are no other classes 
> that depend on it.
> From a owner-developer's point of view, making a class final is conservative. 
>  We can always remove the restriction in the future if the need arises.  But 
> once a class is no longer final, it can never be put back-in-the-box, so to 
> speak.
> We are not in a position to support any external changes to our code that we 
> release, nor can we support extensions to our code that are not part of our 
> library.  Making classes final is one way of communicating that we do not 
> encourage modifications or arbitrary extensions to our code base.
> 
> The DataSketches library is an active open source Apache project.  We 
> encourage users to make suggestions and submit pull requests and contribute 
> to the library to make it a better product for everyone.   We believe we are 
> very social and open to new ideas.  We have a growing community of interested 
> users, developers and scientists that want to use our library and make it 
> even better.  We actively monitor our communication channels and respond to 
> sincere requests for help as promptly as we can.  
> 
> If you have ideas about added capabilities that you feel would be valuable 
> extensions to the library, please engage with us through our community 
> <https://datasketches.apache.org/docs/Community/index.html> mailing lists or 
> Slack, we would like to hear from you.  
>  
> As open source, you are always free to fork the library and do whatever you 
> want with the code subject to the Apache license.  But then, you are on your 
> own :)
> 
> Cheers,
> 
> Lee.
> 
> 
> 
> 
>  
> 
> 
>  
> 
> 
> 
> On Thu, Apr 23, 2020 at 4:27 PM Ron Crocker <rcroc...@newrelic.com 
> <mailto:rcroc...@newrelic.com>> wrote:
> It seems anti-social to make these classes, particularly CpcSketch, final. Is 
> there a good reason for that?
> 
> Ron

Reply via email to