Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:102847 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 85451 invoked from network); 16 Jul 2018 12:00:59 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 16 Jul 2018 12:00:59 -0000 Authentication-Results: pb1.pair.com header.from=mitke013@gmail.com; sender-id=pass Authentication-Results: pb1.pair.com smtp.mail=mitke013@gmail.com; spf=pass; sender-id=pass Received-SPF: pass (pb1.pair.com: domain gmail.com designates 209.85.218.44 as permitted sender) X-PHP-List-Original-Sender: mitke013@gmail.com X-Host-Fingerprint: 209.85.218.44 mail-oi0-f44.google.com Received: from [209.85.218.44] ([209.85.218.44:35823] helo=mail-oi0-f44.google.com) by pb1.pair.com (ecelerity 2.1.1.9-wez r(12769M)) with ESMTP id 8C/4A-39793-9F88C4B5 for ; Mon, 16 Jul 2018 08:00:59 -0400 Received: by mail-oi0-f44.google.com with SMTP id i12-v6so74258555oik.2 for ; Mon, 16 Jul 2018 05:00:57 -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=iJoCwGFR8MHu94znRMXCY8cgOPUw28kZ6io0yM/9ueg=; b=OExZfs7EyCjNihZ74A2Z6DBpIRZI87mGB8jFxRnyPg35OKwg+a2mkRja1YWNjYWdc+ Er50fuNKSLjdxHqet9SX7JDej3/exZ6wcZlVbweAa5Ih5Fw2tyPoNa2AfatlG2b+eiY2 J6WmaMIt9p76lY2uXljcW8nFMxqgx1i5sjJKCKA06pRc5VAESW3wABtyuNhB58taZock eF/tyM38KiGl9SwKUXxM2fWjJM3hNM5MbbIyEbmPwqkHUBYXFAT91nhbNJB/sVL3N3vo FJcU1H7KHnLkSbjzbp0y6spWUIk1Vi02rnemFuYK7sIkSGOMbR7AxAglRIJdGut/ZV9n UXbA== 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=iJoCwGFR8MHu94znRMXCY8cgOPUw28kZ6io0yM/9ueg=; b=bi+crL9eK4UQPto1qrYaBLrAjhYqVrB+n8xarx8JAey93hpNB1HczbkoXLTvafIl5J bG8pmOz8oAXj7io080qX4NGSWdmAIhFqvN75vWOVmyXvAKzcsvH1+zN394PWI6M7s8PC ncv9lIdKhta5fqxOK3UYDYBmcGEybj5MlcfRFT0+2UX6nPdxmzprN6JORHz3p3KCmrcg v0HBdcxcIwa3UeKwAp+RUOYTOZHdJoxRrqSvtszZGnxqoskOee0Lu1m4F4/TYXsHXxXX sXMK1IYN1Wr0ds4Xcvu5vDD+4TOINYDeTfTkKsVPWRoCCgekk8+ik2dexLeA/zh8SPN1 AoMQ== X-Gm-Message-State: AOUpUlFMo3puCxOwCtdewrvZYiBDByKML460bQTFfTuga0NNtL5CiTXV J6PJAz2pthh7frRp2Dv0BclyCDGdgWAwt1qeZMQ= X-Google-Smtp-Source: AAOMgpd2BUnKEmuMLKsHBlxqvvsRHmmsdLEPItxoRLb6QUZ95Yd98zCp3nyx5skuKJYU+STXZ2lhRFvKM8Jm5R/u8Rs= X-Received: by 2002:aca:6655:: with SMTP id a82-v6mr18777368oic.228.1531742454353; Mon, 16 Jul 2018 05:00:54 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: Date: Mon, 16 Jul 2018 14:00:42 +0200 Message-ID: To: nikita.ppv@gmail.com Cc: internals@lists.php.net Content-Type: multipart/alternative; boundary="000000000000e1152c05711c9424" Subject: Re: [PHP-DEV] [RFC] Optional typehint check for parameters From: mitke013@gmail.com (Zeljko Mitic) --000000000000e1152c05711c9424 Content-Type: text/plain; charset="UTF-8" On Mon, Jul 16, 2018 at 1:44 PM Zeljko Mitic wrote: > > > On Mon, Jul 16, 2018 at 1:14 PM Nikita Popov wrote: > >> On Sun, Jul 15, 2018 at 9:39 PM, Zeljko Mitic wrote: >> >>> PHP is dynamic language and each typed typehinted parameter has to be >>> checked every time. I am suggesting new php.ini value "typecheck.enable = >>> 1" which can be turned off. >>> >>> Example: >>> with default php config, a code like this would check each member of >>> $users >>> array: >>> >>> function demo(User ...$users) {} >>> >>> but with "typecheck.enable = 0", same code would be treated like it was >>> written this way: >>> >>> function demo(...$users) {} >>> >>> Basically, php would simply *ignore* typehints and work like they are not >>> there. >>> >>> It would be programmers responsibility to send correct values but people >>> using typehints are not those still learning the basics. >>> >>> Just like it is programmers responsibility to restart php-fpm when using >>> opcache.validate=0, it would be theirs responsibility to send correct >>> values. Any decent IDE would mark errors for wrong parameter type and >>> with >>> tools like phpstan, it is almost impossible to make one. Only development >>> computers would need to have this checks turned on. >>> >>> This creates no BC problems as it is a new feature. Given that typechecks >>> can be turned off, all existing programs would benefit from extra speed. >>> >>> I am sending this mail by following rules from >>> https://wiki.php.net/rfc/howto . I don't have any knowledge of php >>> internals so unfortunatelly, I can't help with this. I at least hope >>> someone will take this RFC into consideration. >>> >> >> Independently of the question of whether we want to do this at all or >> not, there is a technical difficulty here: While most type checks are just >> that, scalar type checks (in particular in coercive mode) may perform type >> conversions. You pass "42" to a parameter accepting int and the parameter >> will become 42. >> >> Just disabling type checks completely would mean that the function now >> receives "42", which actively violates the type contract (even though the >> code was completely error free with enabled type checks). >> >> How do you propose to handle these cases? >> >> Nikita >> > > That is good question, I didn't think of that. I think better solution > would be to only typecheck objects, conversion still happens. > > I didn't want to mention the story behind it. I would really like php to > have generics, or at least typed arrays. I recently read that someone tried > to implement typed array and got 15% slow-down; I am sorry I can't provide > link, reddit is just to big place :) > > So if speed is major problem of advancing towards generics/typed arrays, I > think this optional feature would solve it. Programmer would still spot > problem on dev computers where speed is not relevant. > > I hope I explained this correctly, english is not my first language. > I am really sorry for messing up my previous message. First, I clicked "reply" instead of "reply all". When I saw that, I used copy&paste and my last message appeared as quote. I hope you can read it, this will (hopefully) not happen again. --000000000000e1152c05711c9424--