Thread overview
Lazy Variadic Functions
Aug 08, 2008
bearophile
Aug 08, 2008
Wyverex
Aug 08, 2008
Bill Baxter
Aug 08, 2008
bearophile
Aug 08, 2008
Bill Baxter
August 08, 2008
Can someone tell me what are some possible practical purposes of Lazy Variadic Functions? They are explained in the D docs (http://www.digitalmars.com/d/1.0/function.html ), but such docs sometimes sorely miss various practical usage examples... (I think such docs have to become a wiki that people can update, etc).

Bye,
bearophile
August 08, 2008
bearophile wrote:
> Can someone tell me what are some possible practical purposes of Lazy Variadic Functions? They are explained in the D docs (http://www.digitalmars.com/d/1.0/function.html ), but such docs sometimes sorely miss various practical usage examples... (I think such docs have to become a wiki that people can update, etc).
> 
> Bye,
> bearophile


I've used them in some multi threading applications..


import 	tango.io.Stdout,
	tango.core.ThreadPool,
	tango.time.StopWatch,
	tango.core.Thread;


private ThreadPool!() pool;

static this()
{
	setPool;
}

void setPool(uint size = 12)
{
	pool = new ThreadPool!()(size);
}

//Parallel block********************************************************
// Lazy number of inputs
void p_block(void delegate()[] blocks ...)
{
	foreach(blk; blocks)
		pool.assign(blk);
		
	while(pool.activeJobs || pool.pendingJobs)
		Thread.sleep(0);
}//*********************************************************************


void main()
{
	int a, b, c, d, e, f, g, h, i, j, k, l;

	Stdout("testing").newline;

	StopWatch w1;
	w1.start;
	
	p_block
	(
		{ for(a = 0; a < 10003201; ++a){} }
		,
		{ for(b = 0; b < 80213002; ++b){} }
		,
		{ for(c = 0; c < 561123423; ++c){} }
		,
		{ for(d = 0; d < 10003201; ++d){} }
		,
		{ for(e = 0; e < 80213002; ++e){} }
		,
		{ for(f = 0; f < 561123423; ++f){} }
		,
		{ for(g = 0; g < 10003201; ++g){} }
		,
		{ for(h = 0; h < 80213002; ++h){} }
		,
		{ for(i = 0; i < 561123423; ++i){} }
		,
		{ for(j = 0; j < 10003201; ++j){} }
		,
		{ for(k = 0; k < 80213002; ++k){} }
		,
		{ for(l = 0; l < 561123423; ++l){} }
	);

	auto t1 = w1.stop;


	Stdout.format("p_block = {} {} {}", a, b, c).newline;

	StopWatch w2;
	w2.start;

	{ for(a = 0; a < 10003201; ++a){} }
	{ for(b = 0; b < 80213002; ++b){} }
	{ for(c = 0; c < 561123423; ++c){} }
	{ for(d = 0; d < 10003201; ++d){} }
	{ for(e = 0; e < 80213002; ++e){} }
	{ for(f = 0; f < 561123423; ++f){} }
	{ for(g = 0; g < 10003201; ++g){} }
	{ for(h = 0; h < 80213002; ++h){} }
	{ for(i = 0; i < 561123423; ++i){} }
	{ for(j = 0; j < 10003201; ++j){} }
	{ for(k = 0; k < 80213002; ++k){} }
	{ for(l = 0; l < 561123423; ++l){} }

	auto t2 = w2.stop;

	Stdout.format("linear = {} {} {}", a, b, c).newline;
	
	Stdout.format("p_block time: {}  Linear time: {}  Delta: {}", t1, t2, t2-t1).newline;
}
August 08, 2008
On Fri, Aug 8, 2008 at 9:44 PM, bearophile <bearophileHUGS@lycos.com> wrote:
> Can someone tell me what are some possible practical purposes of Lazy Variadic Functions? They are explained in the D docs (http://www.digitalmars.com/d/1.0/function.html ), but such docs sometimes sorely miss various practical usage examples... (I think such docs have to become a wiki that people can update, etc).

Try clicking on the little "comments" button at the upper right of every page of the docs.

--bb
August 08, 2008
Bill Baxter:
> Try clicking on the little "comments" button at the upper right of every page of the docs.

Oh, I did not see that (in more than one year of using those pages), thank you very much :-)

Bye,
bearophile
August 08, 2008
On Sat, Aug 9, 2008 at 4:16 AM, bearophile <bearophileHUGS@lycos.com> wrote:
> Bill Baxter:
>> Try clicking on the little "comments" button at the upper right of every page of the docs.
>
> Oh, I did not see that (in more than one year of using those pages), thank you very much :-)
>

Yeh, that's a problem.   Nobody does.  For some reason those buttons scream out "ignore me!" up there.

--bb