Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:122297 Return-Path: <6562680@gmail.com> Delivered-To: mailing list internals@lists.php.net Received: (qmail 77121 invoked from network); 6 Feb 2024 15:26:05 -0000 Received: from unknown (HELO php-smtp4.php.net) (45.112.84.5) by pb1.pair.com with SMTP; 6 Feb 2024 15:26:05 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1707233217; bh=prHmLpSRoxcOYuKpjmFlD2qzW5dptltY6qhGMQXfjtY=; h=References:In-Reply-To:From:Date:Subject:To:From; b=cDhK06g0MoEufjV8Y9wT7mlw2IozL1pvMNxdxOtIn9ZhpKbHgWcwf28LVeCWOGDgQ eJPuoIUpHi9ZVJXsbcjAOoXYpi68LVGSSQZH1zKD75kDfPgJRm3608xDpsogzRamCR DVplRuRixgiBZYTzDIrYt5CBD+wHbmIRM/z5MZ8IQJgF4rpI2EAP2hqfXxTfrBiiO8 xK4aa1UPKM3hnyu6UkdGG8wS40bHzczITosnJjtX+GyRXywfklj3ZWR/vPK6ZesCv0 025XIsAbgS43WjZ2GnR2jAScfhIOySe5KH9eBfVRyQiiYW6d1EemcwQEjHOBZZOCd6 rcLT/yP0yCCWw== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id BC5B118005B for ; Tue, 6 Feb 2024 07:26:54 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-13) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=0.6 required=5.0 tests=BAYES_00,BODY_8BITS, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_PASS, FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,FREEMAIL_REPLY,HTML_MESSAGE, RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE, SPF_PASS autolearn=no autolearn_force=no version=4.0.0 X-Spam-Virus: No X-Envelope-From: <6562680@gmail.com> Received: from mail-oo1-f48.google.com (mail-oo1-f48.google.com [209.85.161.48]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Tue, 6 Feb 2024 07:26:54 -0800 (PST) Received: by mail-oo1-f48.google.com with SMTP id 006d021491bc7-595b3644acbso303712eaf.1 for ; Tue, 06 Feb 2024 07:26:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707233161; x=1707837961; darn=lists.php.net; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=prHmLpSRoxcOYuKpjmFlD2qzW5dptltY6qhGMQXfjtY=; b=FSHOQi1cDNwsnXrkfUdECZC81Q5zLYjWGqhzg3ItvugK5tbFdXUKepKBaEe5RzI7vx WgPxLQLmIzPX+ZXZaB8O/m68d829jJtUal6N61f+0iccBFaaLAKaWrf2HeYN5zNF0uwX uMZxIUhvH2KT04SsaFSYG+1It2QVl0tNVVL5eGag7qmweGPpJeC8VeOlAdqBzdy1sgFW 6vqVE9kiIXyhEaP4PsxpAVZnQrbo/TKm2fAvxnfowbMKJPwuJfM5t2bbqQvEgNtaQykE VkhBodDMyZOVUcjubHctYhXjAf7DOENhKdQYLx9QgBhAbacvcIlQ1n9AMt10b/kbuU6A 16+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707233161; x=1707837961; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=prHmLpSRoxcOYuKpjmFlD2qzW5dptltY6qhGMQXfjtY=; b=lRzbCG35OEt7Dxxw6utfXv0rs5bKw90tC01pKfchRiKj9bbseRrMqzqY3ISEnp5WhQ J8DS2dCTascTEljWA9E4zgDGNFDqGK8wS9v7X9zVV7/ZTAabL4mP6MkZ6/1UzecH/OcG jaKD01wxDUxcBHyiOCYGn+oDiIdGzdTS/kTDRlyHgzPbaTFjxzBpkkvJP/s79lJiGdSI 8n3w/XS/sMOIKS0pFaczU3hT2Fw837OsYm3lC6wPikmH8z+UoAfqxGKeRigR6psr0Yhs cdWeaMMgYtttvMamRBHQSEXv9ulUNVEcYK2OzqzMH2wDJCL5dBoGVyf8NccMsP00oozL YTWg== X-Gm-Message-State: AOJu0Yy8uLKB+suBKBlmtp7498wkVpNmjlVPy4VwvZfT/pYiKaixEaZI YKqobMRMmkiZ1993S8jj20Kd1u0LUOCYyNTMfMFlez1oXpsSgBnPWwtmM+wlg9DCzG4ox9/vljf wdBc2208Y7vQFWrVFQRU7Y9wz+ADFQQVxF/mCTA== X-Google-Smtp-Source: AGHT+IGqYYovo/Ddhdll6CWE8r133YvzD5GOWjmJn4mc93bt7Kmk1jlRsPJ9Sy4h9r9mF6oLL49jQzlXOak+E6jjEzA= X-Received: by 2002:a05:6871:e41b:b0:214:8734:1345 with SMTP id py27-20020a056871e41b00b0021487341345mr1479506oac.7.1707233161494; Tue, 06 Feb 2024 07:26:01 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: =?UTF-8?B?Yg==?= <6562680@gmail.com> Date: Tue, 6 Feb 2024 18:25:25 +0300 Message-ID: To: Alexander Pravdin , internals@lists.php.net Content-Type: multipart/alternative; boundary="00000000000023c9400610b832d9" Subject: Re: [PHP-DEV] Feature request: https://github.com/php/php-src/issues/13301 From: 6562680@gmail.com (=?UTF-8?B?0JPRgNC40LPQvtGA0LjQuSBTZW5pb3IgUEhQIC8g0KDQsNC30YDQsNCx0L7RgtGH0LjQuiBXZQ==?==?UTF-8?B?Yg==?=) --00000000000023c9400610b832d9 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Short answer is yes. Glad to see that personally adapted answer. That's why in the relevant github issue i show how to collect ONLY if you need. If you initialize the error bag - it collects, if not - it skips. T So the `try/catch` statement outside means you initialized, also a special decorator or additional command could initiate the raise collector right in the function ! You collect only the cases you want to collect. That's the difference. =D0=B2=D1=82, 6 =D1=84=D0=B5=D0=B2=D1=80. 2024=E2=80=AF=D0=B3. =D0=B2 18:20= , Alexander Pravdin : > On Wed, Feb 7, 2024 at 12:00=E2=80=AFAM =D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1= =80=D0=B8=D0=B9 Senior PHP / =D0=A0=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1= =82=D1=87=D0=B8=D0=BA Web > <6562680@gmail.com> wrote: > > > > Sending you private emails made because "answer" button in Gmail select= s > > only you to receive. > > Sending you private emails that don't even read signs to me you don't > need > > my answers and have no benefits from reading. But you deny, dont even > want > > to understand. And notify all subscribers about what you don't want to > > understand, and about my mistakes. > > > > ``` > > It's business-level, capitalism, if you want so, issue. And it sounds > like > > "we won't pay you for your mistakes". > > > > There's no magic pill that accidentally forces business to understand y= ou > > now need errors collection and it needs at least two more days for > > "design-level" refactoring without business benefit. Also no magic pill= s > to > > force the business owner to give you that 2 days before you face that > > requirement (you know, deadlines stuff). > > > > Refactoring should be reduced by time as much as possible otherwise you > > feel more stress on your job. I have no goal to convince you that this = is > > necessary, I solved this problem for myself. But at the language level = it > > can be solved more conveniently and better, and you will also benefit > from > > this. > > > > All languages work as a stack. So errors could be collected as a stack = on > > language level. Directly in place you need that stack instead of > > everywhere. Also forcing to close applications is safe-shield, instead = of > > validation errors that could be found anywhere. PHP devs in most even > > imagined a solution that "you have to do validation as much earlier as > you > > can". But... remote api responses still become from inside to outside, > > remote api requirements that accidentally arrive still become once your > > code is ready, and unpredictable. > > > > That simple enhancement allows you to implement error collection and > > dont touch your methods and signatures. Nice and easy. Or you can belie= ve > > in `truth` and deny ideas because it does not correlate with your > > principles. > > Hey friend, easy :) > > You was correctly pointed out that this is an application-level issue, > not a language one. It is your responsibility to collect anything you > want and deal with the business when it puts some requirements. Did > you ever experience out-of-memory issues because something in your > application is collecting some stuff and don't dispose it? Did you > ever work with algorithms running iterations over millions of records > in PHP? Can you imagine a language-level bomb if PHP will collect > anything in its own memory in every iteration of this kind and not > dispose it during the whole request? > > You don't need to reply to me, just take a deep breath and think about > it. I believe this kind of discussions is an off-topic in this mailing > list. > > > -- > Best, Alexander. > > > > ``` > > > > =D0=B2=D1=82, 6 =D1=84=D0=B5=D0=B2=D1=80. 2024=E2=80=AF=D0=B3. =D0=B2 1= 7:56, Arvids Godjuks : > > > > > > > > > > > On Tue, 6 Feb 2024 at 16:39, Arvids Godjuks > > > wrote: > > > > > >> > > >> > > >> On Tue, 6 Feb 2024 at 15:58, =D0=93=D1=80=D0=B8=D0=B3=D0=BE=D1=80=D0= =B8=D0=B9 Senior PHP / =D0=A0=D0=B0=D0=B7=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1= =87=D0=B8=D0=BA Web < > > >> 6562680@gmail.com> wrote: > > >> > > >>> Hello, please discuss about error collecting implementation in next > PHP > > >>> releases > > >>> > > >>> Exceptions have common differences that restrict using them to > collect > > >>> errors > > >>> 1. Timeloss (trace collection) on call new() on any class that > implements > > >>> \Throwable > > >>> 2. To collect errors and return it to the upper level you have to > change > > >>> the return signature, so most of the time rewrite the full tree and > > >>> change > > >>> all signatures, that's inapplicable and causes more refactor time > without > > >>> any benefits > > >>> 3. Exceptions will break code, so you need to catch them as much > closely > > >>> as > > >>> possible to place you throw it (additional refactoring) > > >>> > > >>> What I want from this feature: > > >>> - while I am writing the api, I need not only "log" the errors, but > be > > >>> able > > >>> to send all script errors to json output, including warnings, > errors, and > > >>> deep nested. It will reduce the time of debugging, otherwise i have > to > > >>> download log files from server or configure external system like > sentry > > >>> that collects all errors by groups/chains > > >>> > > >>> Suggested solution: > > >>> - add non-breakable interface and language construct `raise` to > "throw" > > >>> error without collecting trace > > >>> - that error could be any scalar or object, or you can implement ne= w > > >>> interface for them, keeping that is nested and taggable array > > >>> - this `raise` could be catched same way as \Throwable allowing log > it > > >>> anywhere you need or re-`raise` again > > >>> - `raise` statement won't start to collapse/break code, so it could > be > > >>> skipped without affecting application > > >>> > > >>> Current solution: > > >>> a) 2 classes - ErrorBag/ErrorBagStack. > > >>> > > >>> b) native functions like _error()/_warning() that stores errors to > the > > >>> current ErrorBag if it exists. > > >>> > > >>> c) ErrorBag exists only if you initialize it: > > >>> - from the upper level (you need to collect) > > >>> - directly inside a function (you need to decide return/continue > > >>> depending > > >>> on its emptiness) > > >>> - otherwise _error()/_warning() does nothing > > >>> > > >>> d) once you "catch" results of _error()/_warning() you often need i= t > to > > >>> merge the result to the current errorbag, mark it with a nesting > group or > > >>> with the tag. Nesting group is required once you debug code (you > will see > > >>> the log), tags will needed once you want to copy results from one > bag to > > >>> another (closest example - reduce queue with unique function, do > action, > > >>> then work with initial data) > > >>> > > >>> e) useful feature is merge_as_warning($errorBag) - to prevent the > current > > >>> error bag to return `true` on call ->hasErrors(). Errors are relate= d > to > > >>> low > > >>> level function, and possibly you already do actions that allow you > just > > >>> store them. > > >>> > > >>> f) searching inside the error bag by nesting sequence, or by tag, o= r > by > > >>> error type. Error type helps the same as try/catch, tag helps if yo= u > want > > >>> to save errors to several destinations without memory losses, and > nesting > > >>> will help most of the time in debugging. > > >>> > > >>> Thanks for your attention. > > >>> > > >>> -- > > >>> +375 (29) 676-48-68 <+375296764868> / Mobile - =D0=BF=D1=80=D0=B5= =D0=B4=D0=BF=D0=BE=D1=87=D0=B8=D1=82=D0=B0=D0=B5=D0=BC=D1=8B=D0=B9 =D1=81= =D0=BF=D0=BE=D1=81=D0=BE=D0=B1 > > >>> =D1=81=D0=B2=D1=8F=D0=B7=D0=B8 > > >>> https://t.me/gzhegow / https://t.me/%2B375296764868 / Telegram > > >>> 6562680@gmail.com > > >>> > > >> > > >> Hello, > > >> > > >> This is an application design-level issue, not a language issue. > > >> All you need to do is implement a collector on the logger you use th= at > > >> will store the info you want and let you ask for that info just > before you > > >> push data into the JSON encoder you use from that logger collector. > It's as > > >> simple as that, you don't even need to change your existing code if = it > > >> already logs the information. > > >> > > >> -- > > >> > > >> Arv=C4=ABds Godjuks > > >> +371 26 851 664 > > >> arvids.godjuks@gmail.com > > >> Telegram: @psihius https://t.me/psihius > > >> > > > > > > Sending me multiple emails in private with rants is not a behaviour > that's > > > encouraged on this list. Please read the > > > https://wiki.php.net/email_etiquette_for_people_new_to_php_internals > > > -- > > > > > > Arv=C4=ABds Godjuks > > > +371 26 851 664 > > > arvids.godjuks@gmail.com > > > Telegram: @psihius https://t.me/psihius > > > > > > > > > -- > > +375 (29) 676-48-68 <+375296764868> / Mobile - =D0=BF=D1=80=D0=B5=D0=B4= =D0=BF=D0=BE=D1=87=D0=B8=D1=82=D0=B0=D0=B5=D0=BC=D1=8B=D0=B9 =D1=81=D0=BF= =D0=BE=D1=81=D0=BE=D0=B1 > =D1=81=D0=B2=D1=8F=D0=B7=D0=B8 > > https://t.me/gzhegow / https://t.me/%2B375296764868 / Telegram > > 6562680@gmail.com > --=20 +375 (29) 676-48-68 <+375296764868> / Mobile - =D0=BF=D1=80=D0=B5=D0=B4=D0= =BF=D0=BE=D1=87=D0=B8=D1=82=D0=B0=D0=B5=D0=BC=D1=8B=D0=B9 =D1=81=D0=BF=D0= =BE=D1=81=D0=BE=D0=B1 =D1=81=D0=B2=D1=8F=D0=B7=D0=B8 https://t.me/gzhegow / https://t.me/%2B375296764868 / Telegram 6562680@gmail.com --00000000000023c9400610b832d9--