Magnus Lie Hetland wrote:
Hi!
Just read Andrei Alexandrescu's new book, and I'm starting to experiment
with using D in my algorithms research. Loved the book, and I'm loving
the language so far :D
I just hit a snag, though ... I was doing something simple, for which my
prototype code (in Python) was
d, u = max((D(u,v), v) for v in V)
I first started writing it explicitly with loops, but it got a bit too
verbose for my taste. Thought I'd use map and reduce, perhaps (although
I'm still not sure if that's practical, as I'm reducing with max, but
I'd like the argmax as well...).
Anyway -- while using attempting to use map, I suddenly got a segfault.
As I hadn't really done any crazy stuff with pointers, or circumvented
the bounds checks or the like, I was a bit surprised. I have now boiled
things down to the following little program:
import std.algorithm;
void f() {
auto x = 0;
double g(int z) { // Alt. 1: return int
auto y = x; // Alt. 2: remove this
return 0;
}
auto seq = [1, 2, 3];
auto res = map!(g)(seq);
}
void main() {
f();
}
When I compile and run this (dmd 2.051, OS X 10.5.8), I get a
segmentation fault.
Oddly enough, if I *either* change the return type to int *or* remove
the "y = x" line, things work just fine.
Am I correct in assuming this is a bug?
Yes. Sounds like bug 5064.
http://d.puremagic.com/issues/show_bug.cgi?id=5064
It's currently #8 on my list of most important bugs to fix in DMD.