[Issue 3971] Syntax & semantics for array assigns
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Feb 5 07:25:06 PST 2012
http://d.puremagic.com/issues/show_bug.cgi?id=3971
--- Comment #26 from bearophile_hugs at eml.cc 2012-02-05 07:25:01 PST ---
(In reply to comment #25)
> Eventually? Why not now?
Before closing this bug, a new issue needs to be written and opened, of course.
And I can't want to write a new issue until people give me good answers about
what the right behaviors are.
See this thread where I have asked questions and shown two alternative
proposals:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=149289
I'd like this code to be refused at compile-time:
void main() {
int[3] a;
a = 1;
assert(a == [1, 1, 1]);
}
Just as this is not accepted:
void main() {
int[] b = new int[3];
b = 1;
assert(b == [1, 1, 1]); //Error: cannot implicitly convert expression (1)
of type int to int[]
}
And to be required:
void main() {
int[3] a;
a[] = 1;
assert(a == [1, 1, 1]);
}
I'd like the [] to be required every time an O(n) vector operation is done,
for:
- constancy with all other vector operations among two arrays, that require [];
- and to avoid unwanted (and not easy to spot in the code) O(n) operations;
- bugs and confusion in D newbies that don't have memorized all current special
cases.
But there are other less clear-cut situations. If O(n) vector ops require a [],
then this too has to be a compile-time error (despite a and b are values):
void main() {
int[3] a, b;
a = b; // Not OK, hidden vector op
}
(Struct copies are O(n) operations, but their size if known at compile-time.)
While this code is OK:
void main() {
int[] a = new int[3];
int[] b = new int[3];
a = b; // OK, copies just an array fat reference
}
Maybe two cases with dynamic arrays are better as compile-time syntax errors to
keep more symmetry, I am not sure:
void main() {
int[] a = new int[3];
int[] b = new int[3];
a[] = b; // error
a = b[]; // error
}
It's not a good idea to open a new bug report before such questions have a good
answer because the new bug report risks to quickly become almost as messy as
this old one.
--
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