Some considerations for superseding R packages #227
Replies: 4 comments
-
In terms of examples, the most famous one is probably ggplot vs ggplot2 (tidyverse/ggplot2@6198457). I'm assuming this example must have been discussed somewhere but can't find any resources right now. Similarly, in the nearby ecosystem, we have incidence vs incidence2 (might be worth connecting with @TimTaylor to see if he'd be interested in collaborating on this blog post). |
Beta Was this translation helpful? Give feedback.
-
This is the squash-commit no-fork option, right? I can kind of see that making sense for a single author (which it seems to be in that case) but with multiple authors developing the original package I'd worry about hiding contributions. |
Beta Was this translation helpful? Give feedback.
-
I think it's actually a copy/paste of the original codebase, which yes, is equivalent to squash. I'm not saying this is the right approach though. I mentioned it in case there is existing documentation on what precisely prompted them to switch to a new package. I know the general gist is "we made some bad design choice we couldn't get out of" but specifics might be interesting. |
Beta Was this translation helpful? Give feedback.
-
Hadley explains the reason for {reshape2} as a reboot of {reshape} in the README here. |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
Most of the work we've been doing so far in Epiverse has been to write a package from scratch or adopt an existing package that has its own capacity for maintenance. In this case, it is slightly easy to deal with a number of decisions in the development process using internal policies in the blueprint and so forth. A third case that's not yet common in our work is taking over the maintenance of an existing package.
In this post, I would like to share some considerations and lessons learned from maintaining {bpmodels}, originally developed by @sbfnk and the decision to supersede it with {epichains}. The goal of the post is not to be dogmatic but to walk you through my considerations and start a conversation about what people found useful and what alternatives could have worked better.
Some of the decisions taken so far are:
Scope changes:
data.frames
and purrr forlist
Name change; a reimagining of the same tool; new API with improved features from old package:
data.frames
and purrr for lists,Deprecate or co-exist?
Commit histories: to keep or not to keep? (pros and cons). If to keep, how?
Semantic versioning: from scratch (0.0.0.9999)?
Lifecycle badge: which one to use (conceivably will change between the two packages over time until the former is retired like reshape2 -> tidyr)? (could refer to the imminent post on lifecycle badges #):
Notes
Hadley Wickham's reasons for the need for reshape2 as a reboot of reshape.
StartOverflow discussion about the "true" definition of legacy code.
Recent talk at UseR 2024 on retiring a package with many reverse dependencies
Beta Was this translation helpful? Give feedback.
All reactions