digitalmars.D - Value ranges for slices, and more enum preconditions
- bearophile (36/36) Jul 26 2014 Here D detectes a mismatch in the array lengths of a slice copy
- bearophile (9/9) Jul 30 2014 After thinking a bit more about this topic I have opened an ER,
- Andrei Alexandrescu (5/7) Jul 30 2014 It was conceived by Walter, Brad, Bartosz Milewski, Eric Niebler, and
Here D detectes a mismatch in the array lengths of a slice copy at compile-time (dmd 2.066beta5): void main() { import std.algorithm: copy; int[100] a; int[8] b; const int i = 20; b[] = a[i .. i + 9]; // Detected at compile-time copy(a[i .. i + 9], b[]); // Undetected at compile-time } test.d(6,9): Error: mismatched array lengths, 8 and 9 In theory an "enum precondition" (if it can be implemented) inside the library-defined copy() could allow it to give the same compile-time error of the built-in operation. To do this the compiler has to keep a kins of "value range" for the slice length of 'a' (and 'b'), to give such compile-time information to copy(), and the enum precondition of the copy() function needs a way to read the value ranges of both given slices, and assert they are equal. Such value range analysis for slice lengths should also allow code like (currently refused): void foo(int[100]) {} void main() { const int[] a = new int[100]; foo(a); } That is comparable to code like this (that is accepted by dmd 2.066beta5): void foo(ubyte z) {} ubyte x = 100; void main() { immutable int y = x; foo(y); } Bye, bearophile
Jul 26 2014
After thinking a bit more about this topic I have opened an ER, because I think this could statically catch some slice-related bugs and allow some safe implicit casts: https://issues.dlang.org/show_bug.cgi?id=13228 Just a curiosity of mine: Do you remember who originally proposed to add the value range analysis to D (and the link to the posts/discussion)? Bye, bearophile
Jul 30 2014
On 7/30/14, 11:51 AM, bearophile wrote:Just a curiosity of mine: Do you remember who originally proposed to add the value range analysis to D (and the link to the posts/discussion)?It was conceived by Walter, Brad, Bartosz Milewski, Eric Niebler, and myself during one of our infamous weekend meetings in Seattle. I vaguely recall Brad was the first to mention it or at least point out the connection with the compiler optimization. -- Andrei
Jul 30 2014