There is two trains of thoughts for library development:
⢠Keep things
@ExperimentalXXX
for several years, and potentially breaking binary across minor versions. Which is for example what Kotlin did in the
1.6.
->
1.7
version for
TimeMark
.
⢠Evolve the APIs by introducing non-conflicting method names, or new packages. Deprecate old code, and bump major version. Which is what Kotest, Arrow, etc does. I think this is the more common approach.
I think it makes sense what Kotlin does, and I thought about doing the same thing for
arrow.core.continuations
2-3 years ago but it might've also been really annoying having all of this stuff as
OptIn
. It's hard to say which one was better, I think we have a pretty good forward migration roadmap so that it's not an issue and in the end it wouldn't have made a huge difference which road we would've taken.