Re: Protected destructors

From: Date: Sat, 28 Sep 2024 14:46:36 +0000
Subject: Re: Protected destructors
References: 1 2 3  Groups: php.internals 
Request: Send a blank email to internals+get-125701@lists.php.net to get a copy of this message
On 28.09.2024 at 16:21, Jonathan Vollebregt wrote: >> Hmm, I wonder about the use-cases of userland destructors.  It seems to >> me they are mostly useful for sanity checks, and maybe to close >> resources.  Are there others? >> >> If not, I wouldn't worry much about the visibility of destructors, >> because resources are scheduled for replacement anyway. > > Besides closing resources and killing processes I've seen them store > data to disk for caching, remove temp files, call callbacks/dispatch > events, change state on other objects, dump stored errors to error_log > in a loop in an error handler... Okay. My point is that you cannot know (unless there are no circular dependencies) *when* a destructor is called by the engine; it may be called during some GC run, or during the request shutdown sequence. As it's now, that happens pretty early during shutdown, but that *might* change when stream resources are converted to objects. So you cannot be absolutely sure that everything works as expected in destructors. This is a general issue for garbage collected languages; some of these have no destructors at all, for such reasons. > It looks like there's quite a lot of use-cases for them (Which can go > wrong if called twice) that don't necessarily require resources to be > involved Like I said, I wouldn't be particularly worried about clients calling a destructor manually (that's a bit different for the engine, since segfaultish conditions should be avoided). But I don't have a strong opinion about the visibility of destructors anyway. I'm fine with allowing protected constructors. Christoph

« previous php.internals (#125701) next »