Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:103016 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 40473 invoked from network); 1 Aug 2018 19:51:19 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 1 Aug 2018 19:51:19 -0000 Authentication-Results: pb1.pair.com smtp.mail=theanomaly.is@gmail.com; spf=pass; sender-id=pass Authentication-Results: pb1.pair.com header.from=theanomaly.is@gmail.com; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.213.195 as permitted sender) X-PHP-List-Original-Sender: theanomaly.is@gmail.com X-Host-Fingerprint: 209.85.213.195 mail-yb0-f195.google.com Received: from [209.85.213.195] ([209.85.213.195:41283] helo=mail-yb0-f195.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id EE/D0-14835-43F026B5 for ; Wed, 01 Aug 2018 15:51:17 -0400 Received: by mail-yb0-f195.google.com with SMTP id s8-v6so8017938ybe.8 for ; Wed, 01 Aug 2018 12:51:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=06hQlGsdszImizI9R5bF+On14ohD7f0fWsuGs8hRvuU=; b=pAo+MwsT+MDaSX49xz7jnX1Km1Hy++SGLs4WPUCTGyLPddYXpcZwd3E1x1YGNtVAI/ 9HhVJj+Nc27TOomKNLzXWvvfTcOEtwro/B/teAGOhhaA+y+O3F6lrZwbh2869P8Ij/ZB foafXZdaa69mLdjjEp5jQjQ9/SWjC3qrgY1sim6IxyWa2ZtYX9Dabhqax00Jycl32wjc +gMwkFP1nC/uaRejsCc9gwNowUrw/Nu0GPGmzbSms1jcGwCbWolGKupMzMMdR2JV6V8Y jlziuydvK5vR8nOEmDP9Kq3sDTpqasXf1WV6fGPSsDzj5Qdh+JpEDDAvFmMOOvjY4eG8 vSKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=06hQlGsdszImizI9R5bF+On14ohD7f0fWsuGs8hRvuU=; b=SGBbpWDD8idaJt8mRL7pOkfOHnM7KsUB3njb2I8ozzRq6pHWOrGG1UqWp2ZG9hLb3h 65J3oMbwAZrg4IqK8/8BiP2RJ364l0/aVPQPv0Ls11L9QkquOgXYk0YasybGt8nDE2DV jdKFcCaHJ05ZcF8s2mjZjmapBCGO66wwDbFpyqwGXuRpYXRPiu4dnQNrflLmupobbauk JSUvykukxMN9au1VhVAB9tzWNU5bMNgXUbJg3OLi134BhjbwDO3MhBm+BQ89ShG+y/cf 11zU8g1T8wJv4zfDwYPyS8nkXTKVwhBaHWvD9chVU5i4fGDJjWFmdSR8yKpdREd9IxVD +1kQ== X-Gm-Message-State: AOUpUlF/iEEVYLA4bHD4twrDhIrfGspGeO8om5dxKOyKKDpaYnPHNcw0 Ec0F9f9jvOG9MUV2MZ/p7rdNcGtgqUsKoJgWWYk= X-Google-Smtp-Source: AAOMgpdZrHX5LH9GG9jywTMgNLFyBhIBfJ9eiUB4rSZiAsNbUIIndA9Kaxz7Ljdjy+JdzPVfQDA1HEFp48f9vdlyo5w= X-Received: by 2002:a25:c101:: with SMTP id r1-v6mr14705520ybf.172.1533153073867; Wed, 01 Aug 2018 12:51:13 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: Date: Wed, 1 Aug 2018 15:51:02 -0400 Message-ID: To: Marcos Passos Cc: PHP Internals Content-Type: multipart/alternative; boundary="0000000000005aaf600572650414" Subject: Re: [PHP-DEV] Array max size From: theanomaly.is@gmail.com (Sherif Ramadan) --0000000000005aaf600572650414 Content-Type: text/plain; charset="UTF-8" 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 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 : > >> 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 >>> 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 : >> >>> 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 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 >>> 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? >>>> >>> >> > --0000000000005aaf600572650414--