Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:118787 Return-Path: Delivered-To: mailing list internals@lists.php.net Received: (qmail 98929 invoked from network); 8 Oct 2022 18:31:50 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 8 Oct 2022 18:31:50 -0000 Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id E986F1804FF for ; Sat, 8 Oct 2022 11:31:47 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,NICE_REPLY_A, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.2 X-Spam-ASN: AS15169 209.85.128.0/17 X-Spam-Virus: No X-Envelope-From: Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Sat, 8 Oct 2022 11:31:47 -0700 (PDT) Received: by mail-wr1-f48.google.com with SMTP id f11so11558961wrm.6 for ; Sat, 08 Oct 2022 11:31:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id:from :to:cc:subject:date:message-id:reply-to; bh=Olll5BjLoqO65hukY6u3jABYLB07RKn04eGveql6kLA=; b=muBKAyySUFU9fAtXZpPYOxkLlaF86z5c8SBmELlJEXH6I7d73q9h38NadhrPpOpflY Ui+f/jsTVT8axYXbnnlAtpUdPM+BBjmpWrN6wY4cALeavo6mjrX+IJOCLp0WUsZZK6jE grllzXa2pA9xg4ZKrXp3a+q8L8OOzKp2MdgCV6bLSooREFnO7kH1d+5q5JJDeYrBAFvW VxR9rkH5SMCEOexFxGcFEAx07N/THLlMkzfltuLS3RHkd1+48+XpU2DtzL0EhIo/8Ele zcBc/6bKK/Nfe45ikgjlnjrWZEGm6lbT+3vJBAHkK35ldPRH0oDMyY5XLpbX/H7wGYIT 7a6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:from:content-language :references:to:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Olll5BjLoqO65hukY6u3jABYLB07RKn04eGveql6kLA=; b=q58uDQgfZ9YSGu/GujMJrUjIEqdRbVeQ/+Rd8GhCmKZOkQJmEBenvsRzW6Ei214Hh/ mU8uQnUEZzRmgGyCXiLIuOAteyTYHI758FZeZnNgnHZzvv+qxpfqJu3w348cCEew/S7p EVIy7vZWk5j5SRg3RWHr4EZPCl8ZAXWOYQ/YV40f99hmi5uaxN+z4SX6wYFKo7P+0Spg b1pHPC/zbdkedv8T2OftCUWS9LcmPJ+2nwWgBIp9ImZdPbRqqOVM10mJ621M55bWKUBR pYgKytD+Tr0kRVaTELopbpEWIoUOgZJ5r1E7HarZxTvT2wx9KSUfs+8WgfqyQUF9sv48 qwGw== X-Gm-Message-State: ACrzQf30LwopCWx6AoKs2RZbm56cu5xFyLrmrEavMIEfhX1YpMC2bcVw rnjeTjDpu+4rnGFeVlcmWvn2ru33zag= X-Google-Smtp-Source: AMsMyM5zpihzfNfirhern+oyCn/zVFGVUuLLBuzw9vPhasy+gmOeJx+pTQNWAICen1dvEDMnKLXPiw== X-Received: by 2002:adf:e442:0:b0:22e:2c5a:721d with SMTP id t2-20020adfe442000000b0022e2c5a721dmr6764936wrm.448.1665253906349; Sat, 08 Oct 2022 11:31:46 -0700 (PDT) Received: from [192.168.0.22] (cpc104104-brig22-2-0-cust548.3-3.cable.virginm.net. [82.10.58.37]) by smtp.googlemail.com with ESMTPSA id j11-20020a5d448b000000b0022efc4322a9sm3772792wrq.10.2022.10.08.11.31.45 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 08 Oct 2022 11:31:45 -0700 (PDT) Message-ID: Date: Sat, 8 Oct 2022 19:31:41 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.3.1 To: internals@lists.php.net References: <1aa20877-3365-0ace-25d2-1cb1be8f3bcc@gmail.com> <55686BD4-4C67-4A4F-8BE4-BDF0149296FB@gmail.com> <95467744-C4FC-45F9-9A5B-E3A8B9790074@cschneid.com> <2cca6ce9-409a-4af3-b947-c47b0d689b48@app.fastmail.com> Content-Language: en-GB In-Reply-To: <2cca6ce9-409a-4af3-b947-c47b0d689b48@app.fastmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [PHP-DEV] Experimental features From: rowan.collins@gmail.com (Rowan Tommins) On 07/10/2022 16:44, Larry Garfield wrote: > Would they have been marked experimental at all? Why? > What might have changed and when while in experimental phase? > When would they have been removed instead of being adjusted? > Etc. That's an interesting thought experiment. Here are the thoughts that occur to me: > Some candidates to consider could be: > > 1. Named args Possibly an experimental phase would have given more time for the names of arguments on internal functions to be decided. Some third-party libraries might also have taken advantage of that timescale, although some would still have decided to simply say names are not guaranteed to be stable. > 2. Pipes > 3. PFA If experimental features had a lower voting threshold, perhaps these would have been accepted at that stage; but I'm not sure what would happen during that phase that would prevent them being rejected as a permanent feature. > 4. Intersection types Anything that leads to complex changes in the engine can realistically only be released in an annual .0 release, because the alpha & beta period is essential to spot regressions to existing functionality. That means an experimental flag will only ever mean waiting longer to use such features in production, not getting them sooner. The only benefit would therefore be if there are behaviour details that are "locked in" which could have been changed if they were marked experimental; I'm not aware of any in this case, but it does happen - the discussions around readonly classes and inheritance come close, although allowing something that was previously forbidden at compile-time is generally not considered a BC break anyway. > 6. JIT This is already behind a run-time flag, and exposes very little direct API, so an "experimental" release would mostly be a question of documentation (on php.net, and in the shipped sample ini files), and the compiled-in default for the flag. That wouldn't have needed any new policy. > 7. FFI This *does* include a user-facing API, and that API has a few rough edges. However, it was developed entirely as an extension, and we already have a mechanism for marking those experimental: ship them in PECL first, and allow breaking changes while bundling into the main source tree. This happened with ext/sodium for instance. Why it didn't happen with FFI, I'm not entirely sure. The same *might* go for Fibers, although delivery as an extension would probably require a different implementation from what we have. I'm not sure it would have made sense to ship it in a state that made changes to the engine, requiring changes to other extensions to be compatible, but then make users wait before using it in production. Regards, -- Rowan Tommins [IMSoP]