[Development] Multiple QML engines with different import paths, file selectors, etc

Andreas Aardal Hanssen andreas at hanssen.name
Mon Jan 8 15:09:19 CET 2024


Hi, have you considered how you can keep compatibility, by making this change either opt-in or opt-out? Since it seems the refactoring is already done, it feels like you are making a bet that only has a negative outcome for those porting/trying to keep up. 😊 Good for maintenance, bad for users?

Andreas - in favor of Qt keeping its compatibility promises

Man 8 jan 2024 kl. 15:01 skrev Ulf Hermann via Development:
> Hi,
> 
> I'm currently refactoring our QML compilation units to avoid storing 
> engine-specific data in the global type registry since that is dangerous 
> and bug-prone. See e.g. QTBUG-120189.
> 
> This effectively means that you will be able to re-use compilation units 
> between different QML engines. On the surface that is great because your 
> QML engines won't re-compile the same code over and over. However, there 
> are certain attributes to QML engines that can make them produce 
> different QML components from the same code:
> 
> 1. Import paths. You might store different modules with the same URI in 
> different import paths and make them available selectively to only 
> select engines in your process.
> 
> 2. File selectors (or more generally URL interceptors). You can re-write 
> URLs any way you like and you can assign different interceptors to 
> different engines.
> 
> 3. Network access managers. You can implement the same URL scheme in 
> different ways between different engines.
> 
> Different import paths can be useful in reality for versioning of QML 
> modules, but you should certainly not use different versions of the same 
> module within the same process. Using different file selectors or 
> different network access managers between QML engines running in the 
> same process sounds rather obscure to me.
> 
> Now when I'm done with the refactoring, if you do such things, one of 
> your engines may dig up components compiled by one of the other engines 
> with the other engine's settings. That's bad. However:
> 
> 1. I believe the use cases for this are rather few and far between. 
> Please correct me if I'm wrong.
> 
> 2. Since we already have a type registry that currently stores fully 
> engine-specific compilation units, I'm sure there are plenty of bugs in 
> this area that already do turn up the wrong compilation units if used in 
> such a way.
> 
> 3. Different components will also produce different property caches and 
> ultimately different metaobjects. Those are fundamentally global already 
> and should give you plenty of problems if you're doing this.
> 
> In conclusion, I will go ahead with the changes. In addition, I will 
> probably add static versions of those settings (import paths, URL 
> interceptors, network access managers) and deprecate the engine-specific 
> settings, so that you can't accidentally mess this up either.
> 
> best,
> Ulf
> -- 
> Development mailing list
> Development at qt-project.org
> https://lists.qt-project.org/listinfo/development
> 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20240108/ca7c102a/attachment.htm>


More information about the Development mailing list