Duck typing and safety.

simendsjo simen.endsjo at pandavre.com
Fri Aug 13 10:01:47 PDT 2010


While reading std.range, I though that a ducktyping design without 
language/library support can be quite fragile.

Consider the following example:

import std.stdio;

struct S
{
	void shittyNameThatProbablyGetsRefactored() { };
}

void process(T)(T s)
{
	static if( __traits(hasMember, T, "shittyNameThatProbablyGetsRefactored"))
	{
		writeln("normal processing");
	}
	else
	{
		writeln("Start nuclear war!");
	}
}


void main()
{
	S s;
	process(s);
}


If you rename S's method, process() does something completely different 
without a compile time error. By using interfaces this is avoided as the 
rename would break the interface.

Is there any idoms you can use to avoid stuff like this? Relying on 
documentation doesn't seem like a good solution.


More information about the Digitalmars-d-learn mailing list