Deprecated Library Functions / Methods
Adam D. Ruppe
destructionator at gmail.com
Sun Dec 2 18:31:05 PST 2012
On Monday, 3 December 2012 at 02:04:01 UTC, Jonathan M Davis
wrote:
> It's messy and ugly to leave dead code around in a library.
It's messier and uglier to break everyone else's code because a
small group of people with phobos access decided to unilaterally
change things.
There's an easy solution to this btw, a versioning scheme in
module names:
---
module std.xml;
pragma(msg, "std.xml sux. if you don't wanna break code import
std.xml.1 instead. if you wanna use the rox version the latest is
std.xml.2");
public import std.xml.1; /* legacy support */
/* if this wasn't an already existing module, we would static
assert(0) instead of pragma msg. NEVER use a naked import like
this since it is guaranteed to break. At least by picking a major
version, you have a fighting chance of unmodified code still
working out of the box down the line */
---
module std.xml.1;
public import std.xml.1.4;
---
module std.xml.1.4; // random number btw
/* current std.xml */
---
module std.xml.2;
public import std.xml.2.0;
---
module std.xml.2.0;
/* a brand new std.xml */
---
The package as module thing is some DIP magic but we could do
without by naming it std.xml_2 and std.xml_2_0 or whatever too.
Anyway the rules are:
1) Less specific numbers simply forward you to the next specific
module, just like symlinks do on the ideal unix .so library. All
modules from here on out have a version number, but current
modules are grandfathered in, albeit perhaps deprecated.
2) The most specific thing includes the actual code
3) once a file has been released, it is immutable. ALL releases
with changes bump up the version number accordingly and go to a
new file. I'm sure we can do some kind of git tagging script or
whatever to make this simple.
4) Users import a particular major version normally, or may
import a minor version if they really want to get super specific.
Boom, code never breaks and we have prettiness.
More information about the Digitalmars-d
mailing list