If you are arguing strictly about not knowing what to write on the documentation, let's move the discussion towards whether it should be defined or not.
2018-08-01 16:51 GMT-03:00 Sherif Ramadan <theanomaly...@gmail.com>: > Right, and therein lies the problem. No one has ever defined this > behavior. As such, one cannot document what has never been defined. > > What you're describing is UNdefined. Undefined things cannot be documented. > > > On Wed, Aug 1, 2018, 3:46 PM Marcos Passos <marcospassos....@gmail.com> > wrote: > >> *The point is not about the possibility of crossing the limit of the >> array, but the need for a definition so one can design a method or function >> whose behavior aligns with the array capabilities. This need, in fact, >> became more noticeable from a design point of view since the introduction >> of the iterable pseudo-type. >> >> >> >> 2018-08-01 16:44 GMT-03:00 Marcos Passos <marcospassos....@gmail.com>: >> >>> It looks like the limit I mentioned, used by some functions, is >>> architecture-dependent: >>> https://github.com/php/php-src/blob/master/Zend/zend_types.h#L288 >>> >>> Also, that's such a ridiculously large number for the vast majority of >>>> people using PHP that hardly anyone ever runs into this limit. >>> >>> >>> The point is not about the possibility of crossing the limit of the >>> array, but the need for a definition is one to design a method or function >>> whose behavior aligns with the array capabilities. This need, in fact, >>> became more noticeable from a design point of view since the introduction >>> of the iterable pseudo-type. >>> >>> No one ever said "this is what will happen if a PHP array exceeds <this> >>>> size". Until someone does that, I cannot document it. >>> >>> >>> I cannot disagree more with this statement. >>> >>> - Marcos >>> >>> 2018-08-01 16:29 GMT-03:00 Sherif Ramadan <theanomaly...@gmail.com>: >>> >>>> It's undocumented, because it's considered undefined behavior. PHP >>>> arrays implicitly store the number of elements internally as an unsigned 32 >>>> bit integer (regardless of architecture). This means that (technically) you >>>> can't create an array with more than ((2**31) - 1) elements (or >>>> 2,147,483,647 elements). However, PHP won't actually attempt to stop you >>>> from doing this! The problem is, once you exceed these number of elements, >>>> the integer will overflow, causing undefined behavior (all kinds weird >>>> bugs). So we cannot document behavior that was never defined. No one ever >>>> said "this is what will happen if a PHP array exceeds <this> size". Until >>>> someone does that, I cannot document it. Also, that's such a ridiculously >>>> large number for the vast majority of people using PHP that hardly anyone >>>> ever runs into this limit. >>>> >>>> >>>> >>>> >>>> On Wed, Aug 1, 2018 at 2:42 PM Marcos Passos < >>>> marcospassos....@gmail.com> wrote: >>>> >>>>> Whenever you look for more information about the maximum size of an >>>>> array, >>>>> you find someone saying that "PHP arrays do not have a maximum size, >>>>> but >>>>> the amount of memory available". However, I could not find any excerpt >>>>> in >>>>> PHP documentation that supports that. >>>>> >>>>> Even if the engine imposes no hard limit on the size of an array, in >>>>> fact, >>>>> there an inherent limit that is assumed by some functions, and that is >>>>> what >>>>> I would like to suggest making explicit on the documentation. The lack >>>>> of >>>>> this definition leads to inconsistencies and leaves several open >>>>> questions, >>>>> including: >>>>> >>>>> - If no limit exists, then it's conceptually possible to have an >>>>> array >>>>> with *PHP_INT_MAX + 1* elements. In that sense, what would be the >>>>> return >>>>> of the *\count()*? >>>>> - The function *range* validates the size of the resulting range >>>>> against >>>>> the maximum size of the hash table (defined internally as >>>>> *HT_MAX_SIZE*), >>>>> and throw an error if it exceeds that value. Is that the limit? >>>>> - he function *array_fill*, in contrast, does not rely on >>>>> *HT_MAX_SIZE* >>>>> for validating the size of the result. But, why? >>>>> - The documentation says that omitting the third parameter of >>>>> array_split is equivalent to \count($array). If the maximum number >>>>> representable in PHP is *PHP_INT_MAX*, is the max size the same as >>>>> *PHP_INT_MAX*? >>>>> >>>>> There are other examples, but I think these are enough to make the >>>>> point. >>>>> >>>>> My understanding is that the conceptual limit is *PHP_INT_MAX*, as >>>>> there is >>>>> no way to represent the size above this value. If so, the interval that >>>>> represents all possibles indexes for an array is defined as *0 <= >>>>> index <= >>>>> PHP_INT_MAX -1*. That definition aligns with all functions that support >>>>> negative length as *-PHP_INT_MAX* is equivalent to the start of the >>>>> array. >>>>> >>>>> Could you guys please share your thoughts on this topic? >>>>> >>>> >>> >>