[Bug 122] Fails to compile std.parallelism.reduce

via D.gnu d.gnu at puremagic.com
Sun May 18 10:11:23 PDT 2014


http://bugzilla.gdcproject.org/show_bug.cgi?id=122

--- Comment #2 from Russel Winder <russel at winder.org.uk> ---
It is the variant of my π by Quadrature example that David Simcha and I came up
with whilst he was writing parallelism.d:

/*
 *  A D program to calculate π using quadrature as a parallel reduce of
individual expression evaluations
 *  with no manual batching.
 *
 *  Copyright © 2011–2013  Russel Winder
 */

//  This version originally due to David Simcha, stemming from various emails
on the various D email lists
//  and reified in the documentation for std.parallelism:
http://dlang.org/phobos/std_parallelism.html,
//  http://cis.jhu.edu/~dsimcha/d/phobos/std_parallelism.html

import std.algorithm;
import std.datetime;
import std.parallelism;
import std.range;

import outputFunctions;

int main(immutable string[] args) {
  immutable n = 1000000000;
  immutable delta = 1.0 / n;
  StopWatch stopWatch;
  stopWatch.start();
  //  There is a problem using a lambda function here.  David Simcha reports it
is a consequence of issue
  //  5710 http://d.puremagic.com/issues/show_bug.cgi?id=5710.  Live with this
and use the string syntax
  //  for specifying a lambda function.
  //immutable pi = 4.0 * delta * taskPool.reduce !((a, b) { return a + b; }) (
  //immutable pi = 4.0 * delta * taskPool.reduce !((a, b) => a + b) (
  immutable pi = 4.0 * delta * taskPool.reduce!"a + b"(
      map!((int i) { immutable x = (i - 0.5) * delta; return 1.0 / (1.0 + x *
x); })(iota(n)));
  stopWatch.stop();
  immutable elapseTime = stopWatch.peek().hnsecs * 100e-9;
  output(__FILE__, pi, n, elapseTime);
  return 0;
}

-- 
You are receiving this mail because:
You are watching all bug changes.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/d.gnu/attachments/20140518/43ab786b/attachment.html>


More information about the D.gnu mailing list