On 07/05/2017 06:31 PM, Phil Bouchard wrote:
On 07/05/2017 02:29 AM, Thiago Macieira wrote:
On Tuesday, 4 July 2017 21:03:14 PDT Phil Bouchard wrote:
Hi,
I read Qt 5.9 is using a new garbage collector that is more
predictable.
First good job and second I was wondering if there is any
documentation on that garbage collector in question.
That might be in the QML engine VM. The rest of Qt does not use garbage
collectors.
I guess if there is any interests to make the garbage collector
perfectly deterministic then root_ptr could be relatively easily
integrated at this stage.
How does root_ptr work with JavaScript semantics?
(So as you can see in the file attached I have revamped my Javascript
skills. And so with the QML.)
But first of all root_ptr is as you know a "set" of reference counted
pointers, where the "set" vanished from existence when the destructor
of the associated root_ptr is called.
For example in HTML we could have 1 root_ptr for each HTML page and
when this page is destroyed then the root_ptr guarantees all
associated nodes will be destructed as well. When I refer to a node I
mean the representation of an atomic variable or a function in
Javascript which is pointed to by a reference counted pointer. So you
can have all the mess you want in Javascript, when the page is
destroyed then all memory associated to that page is freed.
It's the same thing with QML and its windows. When a window is
destroyed then all associated variables will vanish as well, cyclic or
not. From my experience, the only way a window can return a value is
either by sending a signal with its parameters passed by value or by
storing them in some local database. But the parent shouldn't have
any pointer connection of QML / Javascript type with its child window
(downstream) otherwise it's bad programming. Ex.:
Window 1
---------
| | Window 2
| | ---
| root_ptr2->| |
| | ---
root_ptr1->| |
| | Window 3
| | ---
| root_ptr3->| |
| | ---
---------
Here when root_ptr2 gets deleted from the list of Window 1's childs
then everything inside Window 2 will get destroyed. The same for
root_ptr3 / Window 3. If root_ptr1 gets destroyed then the whole app
is guaranteed to vanish.
Regards,
-Phil
https://github.com/philippeb8/root_ptr
It may be just a matter of semantics. What you describe is pretty much
how C++ QtWidgets work. One doesn't ordinarily think of convenient but
informed use of smart pointers to be garbage collection. One doesn't
ordinarily think of QtWidgets themselves as being particularly "smart"
pointers, either. (But they've been enough to fool me!)
C++ QObjects do support "real" smart pointers in guise of
QScopedPointer, QSharedPointer, and QWeakPointer, plus a few others. So
Qt certainly knows how to do what you describe without Java-style
garbage collection.
That's the C++ side, which I understand to underlie much of QML. I hope
Thiago can correct my own mis-perceptions, and elaborate more.
Regards,
Ed Leaver
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development
_______________________________________________
Development mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/development