On Tuesday, 21 July 2020 at 13:42:15 UTC, Steven Schveighoffer wrote:
On 7/21/20 8:34 AM, Adam D. Ruppe wrote:

The others aren't wrong about stack size limits playing some role, but the primary reason is that it is a weird hack for @safe, believe it or not.
...
I don't recall exactly when this was discussed but it came up in the earlier days of @safe, I'm pretty sure it worked before then.

I think this was discussed, but was not the reason for the limitation. The limitation exists even in D1, which is before @safe: https://digitalmars.com/d/1.0/arrays.html#static-arrays

I have stressed before that any access of a pointer to a large object in @safe code should also check that the base of the object is not within the null page (this is not currently done). This is the only way to ensure safety.

It seems the limitation was introduced in DMD 0.123, in May 2005:
https://forum.dlang.org/post/d61jpa$1m0l$1...@digitaldaemon.com
Walter gives some justification in the post immediately following:

1) Gigantic static arrays are often either the result of a typo or are a
newbie mistake.
2) Such require a lot of memory for the compiler to handle. Before the OS officially runs out of memory, it goes to greater and greater lengths to scavenge memory for the compiler, often bringing the computer to its knees
in desperation.
3) D needs to be a portable language, and by capping the array size a
program is more likely to be portable.
4) Giant arrays are reflected in a corresponding giant size for the exe
file.
5) There simply isn't a need I can think of for such arrays. There shouldn't
be a problem with allocating them dynamically.

I admit I thought it was an old optlink limitation, but it seems it's basically arbitrary.

--
  Simen

Reply via email to