[Issue 15134] New: std.parallelism taskPool.amap fails to compile with array of structs or Tuples with named members
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Thu Oct 1 11:32:48 PDT 2015
https://issues.dlang.org/show_bug.cgi?id=15134
Issue ID: 15134
Summary: std.parallelism taskPool.amap fails to compile with
array of structs or Tuples with named members
Product: D
Version: D2
Hardware: x86
OS: Windows
Status: NEW
Severity: blocker
Priority: P1
Component: phobos
Assignee: nobody at puremagic.com
Reporter: jayn at prismnet.com
This code result in the compile error. Commenting out the taskPool.amap line
builds ok. Similar error for Tuples with named members substituted for the
struct definitions of TR, TI, TO. Some analysis was done by Ali Cehreli in
this thread, which also has the Tuple implementation:
http://forum.dlang.org/post/mujsqv$tlk$1@digitalmars.com
import std.algorithm, std.parallelism, std.range;
import std.typecons;
import std.meta;
import std.stdio;
// define some input measurement sample tuples and output metric tuples
struct TR { long raw;}
struct TI {long L1I_MISS; long L1D_MISS; }
struct TO { TR L1_MISS; }
// various metric definitions
// using Tuples with defined names for each member, and use the names here in
the metrics.
TR met_l1_miss ( ref TI m){ TR rv; rv.raw = m.L1I_MISS+m.L1D_MISS; return rv;
}
// a convenience to use all the metrics above as a list
alias Metrics = AliasSeq!(met_l1_miss);
void main(string[] argv)
{
auto samples = iota(100);
auto meas = new TI[samples.length];
auto results = new TO[samples.length];
// Initialize some values for the measured samples
foreach(i, ref m; meas){
m.L1D_MISS= 100+i; m.L1I_MISS=100-i;
}
ref TI getTerm(int i)
{
return meas[i];
}
// compute the metric results for the above measured sample values in
parallel
taskPool.amap!(Metrics)(std.algorithm.map!getTerm(samples),results);
TR rv1 = met_l1_miss( meas[1]);
writeln("measurements:", meas[1]);
writeln("rv1:", rv1);
writeln("results:", results[1]);
}
Severity Code Description Project File Line
Error Error: static assert "Wrong buffer type."
C:\D\dmd2\src\phobos\std\parallelism.d 1668
Error instantiated from here: amap!(MapResult!(getTerm, Result), TO[])
d:\visd\dmapbug\dmapbug\main.d 35
--
More information about the Digitalmars-d-bugs
mailing list