digitalmars.D.bugs - [Issue 13796] New: A simple "array head const" struct for Phobos
- via Digitalmars-d-bugs (53/53) Nov 29 2014 https://issues.dlang.org/show_bug.cgi?id=13796
https://issues.dlang.org/show_bug.cgi?id=13796 Issue ID: 13796 Summary: A simple "array head const" struct for Phobos Product: D Version: D2 Hardware: x86 OS: Windows Status: NEW Severity: enhancement Priority: P1 Component: Phobos Assignee: nobody puremagic.com Reporter: bearophile_hugs eml.cc In D code it's a good idea to set as const/immutable (where possible) all variables that don't need to change, for both safety and compiler-enforced code documentation. In my D functions sometimes I create dynamic arrays that later don't have to change length nor to be reassigned, but I have to mutate or assign their items. So their length and ptr can be const/immutable, unlike the array contents. The D type system doesn't allow this. So is it a good idea to try to add to Phobos a arrayHeadConst function similar to this (only for built-in dynamic arrays) that tries to enforce those constraints? import std.traits, std.range; struct ArrayHeadConst(T) { T[] data; alias data this; property size_t length() const pure nothrow safe nogc { return data.length; } disable void opAssign(); } ArrayHeadConst!(ElementType!R) arrayHeadConst(R)(R arr) if (isDynamicArray!R) { return typeof(return)(arr); } void main() { import std.stdio; auto arr = new int[2].arrayHeadConst; arr[1] = 10; arr[1].writeln; arr.length.writeln; //arr.length = arr.length + 1; // error auto b = new int[2]; //arr = b; // error arr[] = b[]; b = arr; arr[] = 1; ArrayHeadConst!int c = arr; ArrayHeadConst!int d; arr = d; // fail } --
Nov 29 2014