Mixin - to get to the content-type `MapResult!(__lambda1, int[]).MapResult`

Dennis Ritchie via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun May 31 01:24:12 PDT 2015


On Sunday, 31 May 2015 at 07:28:02 UTC, Ali Çehreli wrote:
> So, you want to skip that extra func() call and have the code 
> be "inlined". That's one of the things what any decent 
> optimizing compiler does anyway.

Yes, I think that there is an extra function call, because DMD is 
based on Zortech C++ backend, so I figured ... :)

> I hear great things especially about ldc and that gdc is just 
> good enough. Of course, one needs to check the assembly output 
> to be sure that there is no extra function calls.
>
> Ali

And yet in DMD I'm not sure :)

import std.stdio, std.algorithm;

static int idx;

void walk(R)(R range) {
	while (!range.empty) {
		range.front;
		range.popFront;
	}
}

struct Tap(alias func, R)
{
	R range;
	
	alias range this;
	
	@property auto front()
	{
		func(range.front);
		return range.front;
	}
}

auto tap(alias func, R)(R range)
{
	writeln(__FUNCTION__); // ???
	return Tap!(func, R)(range);
}

void main() {
	[5, 6, 7]
		.map!(a => [idx++, a])
		.tap!((a) { writeln(a[1..$]); })
		.walk;
}


More information about the Digitalmars-d-learn mailing list