[Issue 13981] New: std.algorithm: inconsistent handling of static arrays
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Wed Jan 14 12:47:41 PST 2015
https://issues.dlang.org/show_bug.cgi?id=13981
Issue ID: 13981
Summary: std.algorithm: inconsistent handling of static arrays
Product: D
Version: D2
Hardware: x86_64
OS: Linux
Status: NEW
Severity: enhancement
Priority: P1
Component: Phobos
Assignee: nobody at puremagic.com
Reporter: markus at oberhumer.com
I'd guess this is a typical D newcomer issue as static arrays
- are passed by value
- are allocated on the stack (unless global)
- are not real ranges because they lack popFront()
Unfortunately I had to dig through various bugreports at issues.dlang.org
before better understanding this issue, so I'd suggest adding a short comment
to algorithms.d.
In any case it's confusing that reduce() seems to work for static arrays while
sum() does not.
// dmd 2.066.1
import std.algorithm;
void test_dynamic_array() {
int[] arr1 = [1, 2, 3, 4, 5];
immutable int[] arr2 = [1, 2, 3, 4, 5];
filter!"a & 1"(arr1); // OK
map!"a + 10"(arr1); // OK
reduce!"a + b"(arr1); // OK
sum(arr1); // OK
filter!"a & 1"(arr2); // OK
map!"a + 10"(arr2); // OK
reduce!"a + b"(arr2); // OK
sum(arr2); // OK
}
void test_static_array() {
int[5] arr1 = [1, 2, 3, 4, 5];
static immutable int[5] arr2 = [1, 2, 3, 4, 5];
//filter!"a & 1"(&arr1); // Error: won't compile
//map!"a + 10"(arr1); // Error: won't compile
reduce!"a + b"(arr1); // OK !
//sum(arr1); // Error: won't compile
//filter!"a & 1"(arr2); // Error: won't compile
//map!"a + 10"(arr2); // Error: won't compile
//reduce!"a + b"(arr2); // Error: won't compile ???
//sum(arr2); // Error: won't compile
}
--
More information about the Digitalmars-d-bugs
mailing list