hi,

On Sun, Jul 17, 2011 at 5:40 PM, Hannes Landeholm <landeh...@gmail.com> wrote:
> On 17 July 2011 12:38, Ferenc Kovacs <tyr...@gmail.com> wrote:
>>
>>  Hannes, now you should have karma for the rfc namespace, so you can
>> now extend the article with your suggestions.
>
>
>
> Great, I'll start contributing ASAP. What's the next step after the RFC is
> complete? Testing? Voting?

See https://wiki.php.net/rfc/voting

So 1st discussing then voting ;)

> On 17 July 2011 15:04, Lars Schultz <lars.schu...@toolpark.com> wrote:
>
>> I too would welcome a solution to this problem, I've run into it several
>> times already and always had to use a semi-satisfactory solution. I hadn't
>> heard about weak-references before, and I generally like the concept. What I
>> am not so sure is wether this makes everything alot more complicated for
>> users who do not know/care about the problem or the solution. Of course the
>> impact on those users depends on the actual solution.
>>
>
> If you are writing code that caches objects/relations and that caching has a
> significant impact on memory usage, you need to care about memory
> allocation/management per definition. So then you have to learn how OOP
> memory managment works (which should be obligatory anyway if you want to
> call yourself a OOP-developer IMO). A common argument to why programmers
> should not start with a garbage collected language is that it prevents them
> from understanding memory allocation concepts.
>
>
>
>> I came at the problem from a different angle and came to a different
>> solution: If I could get the refcount on a certain object, and kept the
>> object stored centrally in one list, I'd know that if the refcount is down
>> to 1 (or some other constant) that the object ist not in use anymore. I
>> believe that this would be quite a simple PHP addition...a simple function
>> called: get_ref_count() or something and as I remember, that value is always
>> stored in the zval...
>>
>> The only other thing that would help would be a callback (or callable)
>> which is triggered by PHP reaching a certain memory-limit, absolute or
>> relative. Then I could clean up memory according to my own business-logic...
>>
>> This way, PHP would not feature something totally new, but one could still
>> solve the problem with some work.
>>
>> Do I make any sense at all? Am I missing the point? Anyway, this is an
>> interesting problem.
>>
>> Cheers.
>> Lars
>
>
> It would probably be simple to implement such functionality. However this
> would be bad design since it would violate responsibility isolation. PHP
> should expose as little internal stuff to the userland as possible - unless
> there are a clear use case for it, and even then it might be a bad idea
> because it could cause BC breaks in future updates. If you write code that
> depend on reference counts or memory usage - you're doing something wrong.
>
> You either need data or you don't. If you need data you reference it. If you
> don't reference it the GC will deallocate it. A fundamental part of OOP is
> designing your program so you never reference stuff you don't need. Weak
> references solve the special case where you need the reference for as long
> as you need the data it references (as long as there are strong references
> for it). You should have a clear reference graph in your application - there
> is no magic solution to good object oriented design.
>
> The only scenario I could imagine where you could "free memory"
> spontaneously on demand (when the arbitrary OOM limit is reached) - is if
> that would be cached data. Caching is a very complicated subject that is not
> directly related to weak references. Start a separate thread about it and
> present clear use cases if you have anything special in mind.
>
> For example, I need weak references to store a table of "back references"
> between objects for later reference (depends on how you use the objects). If
> A references B i also need a weak reference from B to A so if B should be
> replaced with a C object I need the weak reference from B to A to know that
> A should be updated to point to C instead (if A still exists). This is not
> related to caching.
>
> ~Hannes
>



-- 
Pierre

@pierrejoye | http://blog.thepimp.net | http://www.libgd.org

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to