Open ben-albrecht opened 6 years ago
A stability index may also be useful at the granularity of functions/methods and data structures.
It might make sense to extend this to compiler and language features as well.
We could make --warn-unstable
warn if such an "unstable" module is used.
It might also be worthwhile to differentiate between interface stability and implementation stability, because the former will impact users more than the latter. In the referenced NASA spec it looks like somewhere above the range 5-7 the software interface rate of change drops off, while change in the implementation doesn't do so until above level 7. I'd say right now the runtime interface is pretty stable. It changes but not very fast, especially in areas that a lot of stuff depends on. But the runtime implementation is changing all the time.
I was expecting that we only cared about interface stability (for these purposes)
The Barriers
module comments are an example of one that talks more about implementation changes than interface ones.
I wonder if the desired feature there is to specifically communicate about performance problems.
A boilerplate performance warning for cases where we consider the existing performance to be unacceptable and have a clear path to improving it in the future seems useful. I would consider performance warnings orthogonal to interface stability, however.
Many modules include notes about the work-in-progress nature of the module with varying degrees of detail about planned features, changes, and improvements.
These messages are useful in making users aware of current limitations and future changes, but the inconsistency of their usage and level of detail makes it difficult to know how stable (or unstable) modules actually are.
Examples
Here are a few excerpts from 1.17 docs:
List:
Reflection:
Barriers:
Spawn:
DistributedBag:
MPI:
ZMQ:
Exploring Solutions
It would be more informative to have a consistent system of specifying a module's stability. This could be implemented in a variety of ways.
To propose one solution:
Module stability could be denoted by a numbering or keyword system, with various categories, similar to the idea behind NASA's technology readiness levels. As a starting point for discussion, maybe we would have 3 categories:
With a system like this, we could implement Sphinx directives, such as
:unstable:
, which would insert some consistent boiler-plate note about the stability of the module in the documentation.