[Issue 3760] New: Allow std.math pure function to be used in array operations.
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Jan 31 10:22:39 PST 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3760
Summary: Allow std.math pure function to be used in array
operations.
Product: D
Version: 2.041
Platform: All
OS/Version: All
Status: NEW
Severity: enhancement
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: baryluk at smp.if.uj.edu.pl
--- Comment #0 from Witold Baryluk <baryluk at smp.if.uj.edu.pl> 2010-01-31 10:22:37 PST ---
It would be good to have possibility to use something like:
a[] = sin(b[]);
To perform sin function on each element of b.
Or more complicated formulars, like:
a[] += sin(a[] * b[] + 0.1*x) - x*a[];
I propose that such expression be supported for all relevant operations in
std.math (cos, sin, tan, exp, log, ...).
I also propose to have property "@arrayoperation" for any custom pure function
of T f(T x) pure. which will equivalent to implicitly implementing:
T[] f(T[] x) pure nothrow {
T[] r = new T[x.length];
foreach (i, ref y; r) { y = f(x[i]); }
return r;
}
which will also be used automatically in array operations expressions and
called automatically by compiler.
There is also need to think about two and more argument functions in std.math,
like pow. For such functions (also pure) i think they should be implemented as
T[] f(T[] a, T[] b) pure nothrow {
T[] r = new T[x.length];
foreach (i, ref y; r) { y = f(a[i],b[i]); }
return r;
}
Of course temporary array r will not be created if f() will be part of array
operation.
Rationale for this is that modern processors have SSE instructions which could
perform up to 4 mathematial operations in parallel (like sin, cos, exp, log,
pow). And one of the reason for array operations is possibility to implement
them this (efficient) way.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list