I will spend some time looking into how the compiler sees XML Literals.

Regarding length(), delete, and extending Array:

If you extend Array, I would worry that some code like:

if (obj is Array)
  createArrayCollection(obj)
else
  createXMLListCollection(obj)

will not do what the developer would expect.  And again, code hinting
would offer up methods that probably shouldn’t be exposed.

I can probably teach the compiler to map length() to length, but let’s
first nail down scenarios so we understand where we can hack and where we
shouldn’t.  I haven’t written any production apps that use XML, so I am
relying on input from you and others.

The key thing about the XML implementation is when you will need to know a
property (or attribute) changed, if ever.  You would only need to use
Object.defineProperties to immediately catch changes.  Otherwise, it is
reasonable to think of the APIs as queries.  XML is defined in
ActionScript as dynamic.  So really, it may be that you can get quite far
without immediate change detection.

Also, I recall past conversations where folks were doing things to XMLList
that the language guys never anticipated, like adding nodes from some
other XML tree to ab XMLList.  We have to keep in mind that we may not be
able to replicate 100% of E4x, but if we can get even 80% there, it will
be a major savings to folks with existing code bases.

And, of course, since the implementation should be swappable, we can build
an implementation that handles the most common cases and allow
extensibility or full replacement to get other cases.

So, given all that, if your XML class is dynamic, and attributes are just
added to the instance as properties with the @prefix and child nodes are
arrays of the child node name, I think that delete will do the right thing.

For XMLList, how common is it to delete an index and what does it do (does
it affect the XML the XMLList came from)?  We are having the compiler map
E4X syntax into new APIs on XML and XMLList, so maybe we do add a
removeChild to XML and I can get delete to call it.

Also, does deleting an index from an XMLList re-order the indexes or just
set that index to undefined/null.  If the latter, that should be free.

My understanding of the bigger picture is that folks get some XML,
manipulate it with E4X, and always call toXMLString() at the end.  If XML
and XMLList are dynamic, toXMLString can just walk the properties on each
node and no immediate change detection is needed.  Even length() would
just walk each property looking for property names that map to numbers and
return the highest number it found.  That would be slow, but it would work.

Thoughts?
-Alex


On 11/12/15, 7:10 AM, "Harbs" <harbs.li...@gmail.com> wrote:

>Another question regarding FalconJX:
>
>How easy will it be to handle xml literals? The most straightforward way
>I can think of that would be to convert:
>var myXML:XML = <root><node name=“fred”/><node name=“John”/></root>;
>into
>var myXML:XML = new XML("<root><node name=\“fred\”/><node
>name=\“John\”/></root>”);
>
>Right now I’m left with three open questions:
>
>1. Will it be hard to convert XMLList.length() into XMLList.length
>2. How can we deal with “delete” in the context of XML
>3. How to deal with XML literals

Reply via email to