> On 12 May 2016, at 22:29, Reynold Xin <r...@databricks.com> wrote: > > We currently have three levels of interface annotation: > > - unannotated: stable public API > - DeveloperApi: A lower-level, unstable API intended for developers. > - Experimental: An experimental user-facing API. > > > After using this annotation for ~ 2 years, I would like to propose the > following changes: > > 1. Require explicitly annotation for public APIs. This reduces the chance of > us accidentally exposing private APIs.
+1 > > 2. Separate interface annotation into two components: one that describes > intended audience, and the other that describes stability, similar to what > Hadoop does. This allows us to define "low level" APIs that are stable, e.g. > the data source API (I'd argue this is the API that should be more stable > than end-user-facing APIs). > > InterfaceAudience: Public, Developer > > InterfaceStability: Stable, Experimental > > > What do you think? you should know there's a bit of a "discussion" in Hadoop right now about what "LimitedPrivate" means, that is: things marked "LimitedPrivate(MapReduce)" are pretty much universally used in YARN apps, and other things tagged as private (UGI) are so universal that its meaningless. That is: even if you tag up something as Developer, it may end up being used so widely that it becomes public. The hard part then becomes recognising which classes and methods have such a use, which ends up needing an IDE with everything loaded in. Java 9 is going to open up a lot more in terms of modularization, though i don't know what that will mean for scala. For Java projects, it may allow isolation to be more explicit --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@spark.apache.org For additional commands, e-mail: dev-h...@spark.apache.org