Does D have too many features?

H. S. Teoh hsteoh at quickfur.ath.cx
Sun Apr 29 19:52:54 PDT 2012


On Sun, Apr 29, 2012 at 10:03:43AM +0400, Dmitry Olshansky wrote:
> On 29.04.2012 5:06, bearophile wrote:
[...]
> >Loops _must_ be fully efficient, they are a basic language construct,
> >this is very important. Even foreach() is sometimes not equally
> >efficient as a for() in some cases...
> >
> Doesn't have to do anything with the LANGUAGE.
> Yesterday I tried GDC. Damn I didn't regret it :)
[...]

Unfortunately, even GDC doesn't inline opApply and its delegate for the
simplest of loops:

	struct S {
		int data[];
		int opApply(int delegate(ref int) dg) {
			foreach (d; data) {
				if (auto r = dg(d))
					return r;
			}
			return 0;
		}
	}
	void main() {
		S s;
		foreach (e; s) {
			writeln(e);
		}
	}

I think it's because the front-end always generates the full delegate
passing code without inlining anything. IMO, this case *need* to be
aggressively inlined in order to make D's generic programming
capabilities a stronger selling point.


T

-- 
"Computer Science is no more about computers than astronomy is about
telescopes." -- E.W. Dijkstra


More information about the Digitalmars-d mailing list