Replying to myself after a bit of pondering...

On Dec 12, 2012, at 10:45, Verbruggen Erik <erik.verbrug...@digia.com> wrote:

> The problem with enums is that we couldn't make them fast. They will always 
> be a lot slower than normal string literals. That is mostly because we could 
> not avoid the name lookup. Think about,
> 
>   Text {
>           alignment: Alignment.Vertical | Alignment.something
>    }
> 
> there is no way for you to remove the name lookups for "Alignment", 
> "Vertical", and "something". Also, there is no way for you to distinguish 
> "Types" (e.g. Item, Rectangle, and co...) from "Enums" (in our case 
> "Alignment"). That means, you cannot build the correct list of dependencies 
> when loading a QML Component.

I didn't think this fully through yet, but it looks that it might work..:

What we could do is to elevate QML enums to (nearly) QML type status. The 
drawback is that an enum has to be in its own file, but it solves the 
dependency problem. It also does not allow for "inline" or "local" enums. An 
example:

Alignment.qml:
  enum Alignment { // or possibly only "enum {", although I think readability 
suffers
    vertical // automatically assigned string is "vertical"
    horizontal: "horizontal"
  }

We could use the static nature of QML objects (and then also enums) to have an 
engine do lookups once when loading. Going a bit further, when an enumerator is 
used, I think we could replace the enumerators with their string 
representation. That would also make them compatible with existing properties 
that expect strings.

About the scoping: inserting the enumerators into the parent scope (à la C/C++) 
will give a (big) performance penalty. It would mean that all files in a 
package need to be loaded (or at least peeked at) just to find out if they 
define an enum. 

The question is if the above adds any value over something you can already do:

Alignment.qml:
  QtObject {
    property string vertical: "vertical"
    property string horizontal: "horizontal"
  }

-- Erik.

_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to