The reason I mentioned my desire to have `int[]` and `MyFoo[]` in addition to 
Vector was that I thought it might be another solution to this problem.

I personally have never used length checking in Vector. Nor was runtime type 
checking on Vectors important to me.

When I was porting a javascript library for use with Royale, array 
incompatibility with Vector was a pain point.

In short, I want the ability to type check my arrays at compile time and have 
them completely compatible with generic arrays (something I’m missing currently 
with Vector). I don’t want or need the extra weight.

To me, a good solution would be to have full runtime type checking in Vector 
and be able to use “typed” arrays (not to be confused with TypedArrays) to 
avoid the runtime weight.

I discussed in the past with Josh the concept of implementing “typed arrays” in 
addition to Vectors. Maybe now would be a good time to make that happen.

I do like the concept of optimizing how certain vectors are output (such as 
TypedArrays), but that might be something that can happen later.

FWIW, most JS engines will automatically use a TypedArray under the hood if you 
use an array where all the elements are integers, so there’s not usually a 
practical advantage to writing that optimization explicitly.

My $0.02,
Harbs

> On May 27, 2019, at 9:43 PM, Alex Harui <aha...@adobe.com.INVALID> wrote:
> 
> Hi Greg,
> 
> I live outside of Seattle.  I'm in my house right now, and my cellphone says 
> I have a 4G connection.  Many times a month, I take a ferry boat to Seattle.  
> There is a point during the ride where the connectivity is poor.  Yesterday, 
> I was trying to get work done on the ferry and was blocked from doing one 
> step in the release automation because it would not load in time.  Many 
> times, I'm trying to get one thing finished and get stymied by poor 
> connectivity.  I hear this complaint from plenty of other residents where I 
> live.  I want Royale to produce the app that loads when other apps don't.  
> Forcing everyone to take on another 2000+ bytes is not going to help.
> 
> The argument of "it is only another 1K" is what eventually caused UIComponent 
> to grow to 13,000 lines and 128K Hello World.  That's history.  I do not want 
> to repeat it.
> 
> I still haven't had time to look at your changes or read and respond to all 
> of the words you've written.  Mostly for others who haven't been following 
> the discussion, my reasoning is as follows:
> 
> -Vector and XML and any other built-in for SWF that isn't in JS are not free. 
>  We have to write some amount of code to get them to work.  
> -Vector provides runtime type checking.  Not everybody needs runtime type 
> checking in production.  
> -Vector provides length checking.  Not everybody needs length checking in 
> production.  
> -We've already proven that by having at least two projects get into 
> production without your implementation of Vector.  
> -The current compiler output for Vector for folks who don't need runtime 
> checking just uses Array.
> -Your implementation adds 2990 bytes.
> 
> For sure, we need an implementation that does runtime type-checking and 
> length checking.  So, as long as folks can choose to save the 2990 bytes and 
> just use the current compiler output for Array in production, then we have 
> given folks the right choices.  Bonus if we can let folks choose other Vector 
> implementations just like they can choose other XML implementations.  My 
> understanding from the words you've written is that you want everyone to use 
> your Vector implementation and have options on what code paths that 
> implementation actually takes, but I don't understand why from a technical 
> perspective.
> 
> In fact, I was reading up on Javascript TypedArrays (because that did load 
> while on the ferry) and it looks like some folks might want Vector.<int> to 
> map to the appropriate TypedArray.  It actually got me wondering if folks 
> should be able to dictate how any particular instance of a Vector "optimizes".
> 
> In sum, the download size still matters.  I see it quite frequently.  
> Technically, why shouldn't folks have a choice of implementations?
> 
> -Alex
> 
> On 5/27/19, 2:46 AM, "Greg Dove" <greg.d...@gmail.com 
> <mailto:greg.d...@gmail.com>> wrote:
> 
>    Hi Alex, sorry it can take a while for me to reply at the moment... some
>    comments inline below...
> 
>    On Sun, May 26, 2019 at 11:10 AM Alex Harui <aha...@adobe.com.invalid>
>    wrote:
> 
>> Hi Greg,
>> 
>> Thanks for working through all of this.  Better Vector handling is
>> definitely a good thing for Royale.
>> 
> 
>    I also believe so. In terms of my motivation for doing this work... I
>    actually have no imminent need for Vector, but I wanted to do something
>    concrete which I think is essential for 1.0.
>    I do have my own libraries and past client work from that use Vector, so I
>    see benefit in knowing that it will be easy to port to Royale and work
>    without any issues if I need to do that at any point (hopefully I will). I
>    also got to see how Vector was treated differently/specially when working
>    on AMF, and realized that we had no way to support it there correctly
>    because it is 'special' also in amf, so that was another motivation (again,
>    not for anything I actually need at the moment for myself or anyone else,
>    but because it is something else that is lacking for 1.0).
> 
>    However, IMO, PAYG is more important and 3KB can be a full second or more
>> on busy/slow/poor networks.  As such, folks need to have choices.  So as
>> long as folks can choose Vector implementations we should be good.
>> 
>> A couple of things here. Firstly, I really did not think I would need to
>    be this specific... but iirc it was actually 2990 bytes.
>    My first reaction to your scenario above would be: that network connection
>    speed is really *unusable* for anything on today's internet... and that is
>    a problem that should be addressed first, otherwise it does not matter
>    which development tech you plan to use, it will be a common problem,
>    royale, react... whatever.
>    I can't recall something from my last 10 years where 3KB would be
>    considered a driving force for an intervention that would (presumably) only
>    save a portion of that (and introduce future potential maintainability
>    risks). 3KB was less than a second on dialup over 20 years ago. Things have
>    changed dramatically in the last 5 years in particular. We are in a HD
>    streaming world now, with many countries supporting 4K streaming connection
>    speeds. And average speeds continue to grow globally at solid rates
>    year-on-year. 4G has impressive global coverage, and 5G is on the horizon.
>    I did mention this generally my earlier comments about bandwidth growth
>    outpacing growth in the size of apps. With your example are you
>    hypothesizing or do you have a real recent example in mind where this type
>    of thing was happening? If I was asked to classify the likelihood of the
>    scenario you described I would describe it as a few standard deviations
>    away from the center of the bell curve based on my own experience.
> 
>    However I absolutely do agree with you that choice is important, I just
>    believe that performance most often will be more of a reason for the
>    decision to choose alternates (and it may mean adding 'size', not reducing
>    it).
>    And I think the choice should be explicit/obvious rather than having
>    something that is a lesser implementation of what it is actually supposed
>    to be. By this, I mean more application framework alternatives, instead of
>    supporting variations that represent non-conforming language classes. If
>    that approach is used, I think it will result in clearer, better quality,
>    more maintainable code. This is also a general approachI have observed
>    elsewhere.
> 
>    Choosing Array is always an option in javascript and provides a zero
>    byte-weight option. I also plan to introduce some options for the numeric
>    types that represent best performance across both targets... but not as
>    'Vector' numeric types. The aim here would be to get faster than 'Vector as
>    Array' in javascript and it will be just a convenience approach to avoid
>    writing your own COMPILE::JS blocks with the native TypedArrays.
> 
>    In terms of tweaking this Vector implementation's performance as further
>    options, I already explained I am happy to work on that based on actual
>    feedback for need. But I still think it requires caution and consideration
>    in terms of potential risks for people releasing libraries that could
>    expose non-conforming instances of Vectors (something that can never happen
>    in swf).
>    There are perhaps some possibilities for enhancing [ArrayElementType] with
>    a compiletime=true argument to get something more like what Harbs is after,
>    but that would only work for class members, not local vars. Perhaps there
>    are other simple ways to add 'compiletime' safety without going to full
>    blown generics support yet.
> 
> 
>> Flex failed in some major vendors' customer-facing apps because of
>> download times.  I have spent the past years trying to make sure Royale
>> does not repeat those mistakes.
>> 
>> 
>    I do want you to understand that I'm on the same team. And like you, I
>    don't want to repeat old mistakes too. But I also would like to see us
>    avoid possible new ones.
>    In the last 5 years or so, I have never really had a client spend much time
>    focusing on the size. Before that I think I was more aware of it. Anyhow,
>    it's not that it was never important at all, it's just that it was
>    relatively unimportant compared to other aspects. And apart from
>    remembering the size of flex apps in the past, I've seen the size of react
>    apps I worked on recently too.
>    I actually just looked at one of those. It is 8762KB minified and
>    compresses to 1293KB gzipped. The app does not compare directly, but it is
>    similar to Carlos' app in that it has many complex input rules and
>    sequences, however in a lot of ways Carlos' app is far more complex and has
>    a lot more remote API calls. However the final result from royale with
>    Carlos's app has a much, much lighter footprint than those numbers for
>    react. So Alex, I think the work you and others have put into avoiding
>    unneeded weight in the application framework has paid (and will continue to
>    pay) 'dividends' (as a metaphoric expression for anyone unfamiliar with
>    that).
>    But I do think of the language layer below the application framework layer
>    as 'different' and that it should be treated as if it has existing
>    specifications that are not free to reshape as we see fit (which it does,
>    directly or indirectly). The language is still actionscript, it's not
>    royalescript or jactionscript or something else. I've also spelt out a
>    number of the reasons why I have these views earlier. One thing I did not
>    mention was that my views also reflect my experience and observations with
>    another cross platform language. I have seen some cases, for example, where
>    over the course of iterative improvements, the use of native classes (the
>    example that springs to mind was for XML parsing) was removed from a
>    language level library and the whole feature was re-implemented in local
>    code because it was more desirable to achieve consistency across targets
>    than to have the best performing code on any one target. The IDE plugin for
>    that particular sdk has over 120K downloads in the one IDE I use most often
>    and it has a number of other IDEs supporting it with their own plugins etc.
>    So I have reason to believe it is popular, and I know it is disciplined at
>    the language level for a number of these shared target aspects. The
>    consistency therefore seems to be very important to its user base, more so
>    than the prospect of each language level feature 'being the smallest it can
>    be'. But beyond the core language it also has lots of scope for
>    accommodating differences. My exposure to this (and involvment with it in
>    the past) has also influenced my thinking. I try to avoid thinking "that's
>    them and not us" because that is a poor reason to ignore the learnings of
>    others. Much of my own knowledge and skills over the years is the result of
>    shared knowledge (royale and yourself included as a boost to that for which
>    I am grateful). Anyway, part of the thinking does come from awareness of
>    other things elsewhere, but I did pass it through my 'how does it relate to
>    royale' filter.
> 
> 
>    I have some comments on finer details, but let's see if we can agree on
>> this higher-level issue first.  We simply should offer people choices.
>> 
>> Just repeating: I too am keen to offer choices and also to make it easy to
>    choose them. We only have different views over what those choices should
>    be. I would prefer them to be safer choices. I believe avoiding the
>    multiple Vector implementation approach will avoid future pitfalls and
>    possible developer confusion that could arise from the distribution of
>    inconsistent or non-conforming language level code. Neither of us can be
>    certain if those risks are real. But there is one way to avoid them for
>    sure (and yet still provide choices). That is essentially the crux of my
>    thinking. Do you think that logic is reasonable at the higher-level?
> 
>    Beyond that, I did not obviously remove any emulationClass code in the
>    compiler and would not do so without your agreement, so nothing there has
>    changed.
>    Actually in the branch I think I changed something to pass qualified name
>    instead of basename somewhere, because base name would not be correct in
>    the general case. For that reason I don't think anybody was using that
>    feature yet, although I know you added it in response to a request from
>    Joshua Granick, as a way to address the Array-not-Vector issue. I do not
>    think it should be there now that we have something that we can call our
>    own, which is why I asked if we could remove it. Anyway, in terms of that
>    decision, can we agree to table it for now, merge the branch and maybe
>    continue this discussion later? I will go ahead and work on the other
>    'choices' I have in mind regardless, maybe when you see them you might
>    change how you think about things (or not, it is the apache way).
> 
> 
>> Thanks,
>> -Alex
>> 
>> On 5/25/19, 2:45 PM, "Greg Dove" <greg.d...@gmail.com> wrote:
>> 
>>    Hi Carlos, thanks for your feedback. In terms of PAYG, I just have a
>> sense
>>    that at the language level, the 'default' should be that it *works* as
>> per
>>    design.
>>    If I take the example of Vector... then numeric Vector types will not
>> run
>>    faster in javascript. Using all the method calls will have a
>> substantial
>>    impact compared to using a normal Array. But code should 'work' the
>> same
>>    across targets.
>>    I do have some ideas for application framework classes outside
>>    'language'/Vector that would provide target-agnostic fast regular class
>>    implementations for numeric typed Arrays, and I hope to work on that
>> soon
>>    as well, which takes more advantage of the optimized native options on
>> each
>>    target (Vector in swf, TypedArray in javascript). But to achieve that
>> it
>>    will likely be 'always fixed length' in this case, I will see if it
>> seems
>>    worth trying to be able to toggle that, or maybe it can be a bead or
>> opt-in
>>    support to get that functionality. But that should provide a good
>> option
>>    for developers seeking to get the best performance for numeric
>> collections.
>>    I expect to work on this during June.
>>    Or developers can of course always choose to implement their own custom
>>    performance code in COMPILE::JS / COMPILE::SWF variations, which is
>> always
>>    an option.
>> 
>> 
>>    Hi Piotr, sorry about that email formatting issue. Thanks for your
>> follow
>>    up on this.
>>    Here is a paste of that part, which includes the code.
>> 
>> 
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.apache.org%2FdPWy&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=2InnN50ng8lXwYsDKMZXNiEoHCcMDutiw%2BmOAifDqdc%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fpaste.apache.org%2FdPWy&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=2InnN50ng8lXwYsDKMZXNiEoHCcMDutiw%2BmOAifDqdc%3D&amp;reserved=0>
>> 
>>    Also, if you want to see the tests for Vector, you can see them here:
>> 
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fblob%2Fimprovements%2FLanguage%2Fmanualtests%2FUnitTests%2Fsrc%2Fmain%2Froyale%2FflexUnitTests%2Flanguage%2FLanguageTesterTestVector.as&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=Sp48jNSTgvHikdp9A2d2L%2Bwkq5vcHII%2BBqD%2BiXczSaQ%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fblob%2Fimprovements%2FLanguage%2Fmanualtests%2FUnitTests%2Fsrc%2Fmain%2Froyale%2FflexUnitTests%2Flanguage%2FLanguageTesterTestVector.as&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=Sp48jNSTgvHikdp9A2d2L%2Bwkq5vcHII%2BBqD%2BiXczSaQ%3D&amp;reserved=0>
>> 
>> 
>>     You should see large parts of that series of tests fail outside the
>>    branch, and in some cases there were compiler errors too iirc (or
>> maybe I
>>    am confusing some compiler fixes I did for other things, can't be sure
>> now)
>> 
>> 
>> 
>>    On Sun, May 26, 2019 at 4:58 AM Carlos Rovira <carlosrov...@apache.org 
>> <mailto:carlosrov...@apache.org>
>>> 
>>    wrote:
>> 
>>> Hi!
>>> 
>>> Read it! :), was long but I think this emails are needed since it
>> brings
>>> many thoughts that only the developer knows and otherwise would end
>> never
>>> known by the rest of the community. So Great!
>>> 
>>> Greg, first, many thanks for working on this. I think we get other
>> point
>>> solved, and I think not only Vector, but many other fixes and things
>> coming
>>> in your branch.
>>> 
>>> For my part, as you said, the branch is tested against my real
>> project,
>>> that I think is a very good way to test against lots of working
>> code. So
>>> for my is ok to merge, not only cause it does not brake anything,
>> but cause
>>> it's a big step forward.
>>> 
>>> Since it brings things we didn't have before like Vector, is good to
>> bring
>>> this. Then we can continue iterating to add missed things like AMF
>> support
>>> or to evolve to other state or even change internal things if other
>> check
>>> and see ways of enhancements.
>>> 
>>> About the Vector implementation. My opinion is that I think as you
>> that
>>> Vector is an intrinsic part of AS3, so better to have an
>> implementation to
>>> complete AS3 in Royale. About having multiple implementations, I
>> think that
>>> could be good in the future if things can be done that way, but
>> better
>>> start from this starting point and see what happens in next
>> months-years.
>>> IOW, better have a real implementation now that a potentially one
>> that
>>> still is not here. We need to see the goal and approach to it
>> progressively
>>> or we end getting nothing since the goal is a huge one not easy to
>> reach.
>>> 
>>> For me the 3kb is totally normal, and as well a great achievement of
>> your
>>> implementation.
>>> I must say that my way of thinking in Royale is to be totally
>> aligned with
>>> concepts like PAYG, but sometimes we need to break rules when the
>> goal
>>> demand it, or we can end trying to apply the same principle to all
>> things,
>>> when sometimes is not the best. So this is importante, rules are
>> really
>>> good, but we need to always put behind a layer of human thinking
>> about what
>>> we are trying to accomplish
>>> 
>>> Thanks Greg for reaching another important milestone! Amazing work!
>> :)
>>> 
>>> Carlos
>>> 
>>> PD: Piotr, about gmail cutting the email, I'm using gmail and get to
>> read
>>> it completely, maybe could be a problem of gmail in mobile? I'm
>> reading on
>>> gmail desktop. The only problem I had was reading posted source
>> code, but
>>> since it was tiny, I could finally read it...
>>> 
>>> 
>>> 
>>> 
>>> 
>>> El sáb., 25 may. 2019 a las 15:37, Piotr Zarzycki (<
>>> piotrzarzyck...@gmail.com <mailto:piotrzarzyck...@gmail.com>>) escribió:
>>> 
>>>> Hi Greg,
>>>> 
>>>> Could you please post the code from this email in the
>> paste.apache.org <http://paste.apache.org/> -
>>>> right now is unreadable in my Gmail account.
>>>> 
>>>> Thanks,
>>>> Piotr
>>>> 
>>>> On Sat, May 25, 2019, 4:51 AM Greg Dove <greg.d...@gmail.com 
>>>> <mailto:greg.d...@gmail.com>>
>> wrote:
>>>> 
>>>>> OK, At the risk of making what follows even longer... a warning:
>> *this
>>>> is a
>>>>> long read*. It might veer off topic in one or two places, but it
>> is
>>>> mostly
>>>>> about why, and how Vector is implemented the way it is in the
>> branch.
>>>>> Basically I would like to merge this branch into develop as soon
>> as
>>>>> possible, i actually think it is ready as is, but I am keen to
>> get
>>> other
>>>>> input before I do.
>>>>> Read it if you're interested. If you're not interested in
>> reading it
>>> then
>>>>> please try the branch on any 'real' projects that you have in
>> play.
>>>> Carlos
>>>>> has tested against his, and there are no issues, but it would be
>> good
>>> to
>>>>> get wider input.
>>>>> 
>>>>> now to the textual onslaught:
>>>>> 
>>>>> 
>>>>> *Vector*
>>>>> 
>>>>> One of the things I did before I worked on this Vector
>> implementation
>>> was
>>>>> to detach myself from ‘how I use Vector when I code’, to take a
>> step
>>> back
>>>>> and challenge myself to rethink how I thought about it in
>> general.
>>>>> 
>>>>> Vector is *special*. Vector is not *a class* in a typical sense.
>> It is
>>>> the
>>>>> closest thing that as3 has to generics which, when used at a
>> class
>>>> level, I
>>>>> like to think of as the ability to generate multiple class
>> variations
>>>> from
>>>>> a single class definition (that is just the way I think of
>> them). So,
>>> at
>>>>> some level Vector could be considered as an infinite set of
>> distinct
>>>>> classes, based on an infinite set of possible specified element
>> types
>>>>> (whatever you see between the angle brackets in code). It is not
>>> actually
>>>>> implemented natively in AVM this way iiuc, but that is the
>> outward
>>>>> appearance, and that is also the behaviour it has when using type
>>>> checking
>>>>> in as3.
>>>>> 
>>>>> Aside from the runtime typesafe behaviour, Vector’s strong
>> typing means
>>>>> there is additional compile time support and, related, the
>> possibility
>>> of
>>>>> extra IDE support, both of which help the developer.
>>>>> 
>>>>> Vector ‘types’ are also final ‘classes’ enforced by the
>> compiler, so
>>>> cannot
>>>>> be extended.
>>>>> 
>>>>> Additionally, on looking closer, there are some other quirky
>> rules for
>>>>> runtime typing behaviour. These are related to the
>> implementation in
>>> AVM.
>>>>> The 3 Vector types for Vector.<int>, Vector.<uint>, and
>> Vector.<Number>
>>>> are
>>>>> individual base types, and then there is a 4th base type,
>> Vector.<*>
>>>> which
>>>>> serves as the ‘base class’ of all other Vector ‘subclasses’. The
>> 3
>>>> numeric
>>>>> types are faster than Array, and I expect this was the reason
>> for the
>>>>> separation, because these are used in a lot of other flash apis,
>>>>> particularly for swapping with byte level data and things like
>>> BitmapData
>>>>> etc. The others are more simply for the strong typing aspects,
>> because
>>>>> (perhaps less so with Boolean and String at a guess) they are
>> somewhat
>>>>> slower than Array in AVM, because of the overhead of runtime
>>> typechecking
>>>>> and coercions etc. So the main selling points for choosing a
>> Vector in
>>>>> flash were a) compile time and runtime type safety and b) faster
>>>>> performance for the 3 numeric Vector types.
>>>>> 
>>>>> One implication of these ‘rules’ means that to check if
>> *something* is
>>> a
>>>>> Vector of any type in swf, I need to do (mything is Vector.<int>
>> ||
>>>> myThing
>>>>> is Vector.<uint> || myThing is Vector.<Number> || myThing is
>>> Vector.<*>)
>>>> or
>>>>> use reflection (which is slower).
>>>>> 
>>>>> The above implies that, for language conformance (considered as
>>>> conformance
>>>>> with as3 documentation/spec and the behaviour of the reference
>>>>> implementation that we have for any ‘unknowns’) in an emulation,
>> a
>>>> regular
>>>>> single as3 class implementation would not create a result that is
>>>>> consistent with the spec in terms of its representation of
>> typing, and
>>>> its
>>>>> behaviour when using type checking.
>>>>> 
>>>>> I tried to take all of these things into consideration.
>>>>> 
>>>>> 
>>>>> 
>>>>> *How is it implemented in the branch?*
>>>>> 
>>>>> Vector is implemented using the lightweight ‘synthType’ approach
>> I
>>> added
>>>>> previously to support for int and uint types as ‘classes’. This
>>> provides
>>>> a
>>>>> light integration for ‘is’ and ‘as’ checks, but in javascript
>> itself a
>>>>> Vector instance is simply a tagged native javascript Array
>> instance
>>> (i.e.
>>>>> an Array with something that identifies it as being ‘not a
>> regular
>>>> Array’).
>>>>> The Array methods are enhanced at the instance level to support
>> the
>>> type
>>>>> coercions that take place in an actionscript Vector. Using Array
>> makes
>>>>> sense because Vector instances are essentially typed Arrays. But
>> it is
>>>> not
>>>>> possible to extend Array in javascript and have things work
>> properly
>>> (it
>>>> is
>>>>> possible to use a different approach with es6 Proxy, but that is
>> not
>>>>> available in IE11).
>>>>> 
>>>>> This implementation also means that a ‘Vector’ instance should
>> have
>>>>> functionality that works mostly as expected if it is passed
>> directly to
>>>> a 3
>>>>> rd party native javascript library that is expecting an Array
>> instance.
>>>> It
>>>>> will not support errors when changing the length if the Vector
>> instance
>>>> is
>>>>> ‘fixed’ length, for example but otherwise it should function
>> much the
>>>> same
>>>>> as a regular Array in the 3rd party code.
>>>>> 
>>>>> The ‘synthType’ approach can be used because Vector types are
>> final, so
>>>> it
>>>>> does not need to conform to a regular Royale class definition
>> that can
>>> be
>>>>> extended and can be much ‘lighter’. As with int and uint
>> ‘classes’, no
>>>>> Vector constructor exists until the first one is requested.
>> There is
>>> one
>>>>> internal private class in Language that provides most of the
>>>> functionality
>>>>> for Vector, and element coercion functions are generated
>> specifically
>>> for
>>>>> each Vector ‘subtype’. Overall, it behaves more like a subclass
>>> ‘factory’
>>>>> with each individual type’s constructor being created on demand
>> and
>>>> cached
>>>>> for future use.
>>>>> 
>>>>> Reflection and serialization support have not been added yet,
>> but I
>>>>> certainly had these in mind also with this approach. I just
>> wanted to
>>>> reach
>>>>> a sensible intermediate point for now, and then add those in
>> later.
>>>>> 
>>>>> In summary, the Vector implementation in the branch provides the
>>>> following:
>>>>> 
>>>>> -distinct types (conforming in terms of type checking) for each
>> Vector
>>>>> subtype
>>>>> 
>>>>> -lightweight integration with Language ‘is’ and ‘as’ support
>>>>> 
>>>>> -each Vector subtype has a unique constructor generated the
>> first time
>>> it
>>>>> is requested, the constructor does not exist prior to that.
>>>>> 
>>>>> -expected to be compatible with 3rd party native javascript that
>>> expects
>>>> a
>>>>> regular javascript Array
>>>>> 
>>>>> -serialization (amf) and reflection are not yet supported but
>> were
>>>>> considered, and that is planned as next steps.
>>>>> 
>>>>> As at the time of writing, the current implementation is
>> supported by
>>> 300
>>>>> Vector-specific assertions that run side-by-side between
>> javascript and
>>>> swf
>>>>> in the manualtest UnitTests project. Apart from the differences
>> created
>>>> by
>>>>> explicitly switching off some type safety checks with
>>>>> @suppressvectorindexchecking, there is only one verifiable
>> difference
>>> in
>>>>> these tests between swf and javsacript. Probably there are things
>>> outside
>>>>> the test coverage that might need addressing still, but I think
>> it’s a
>>>>> pretty good start.
>>>>> 
>>>>> These tests should be easily ported to framework level unit tests
>>>>> (RoyaleUnit) as the same approach has been used to add FlexUnit
>> tests
>>> in
>>>>> the past. Testing/Development is primarily in Chrome on windows,
>> but
>>> the
>>>>> same tests were subsequently verified on IE11, Edge, Opera and
>> Firefox
>>> on
>>>>> windows.
>>>>> 
>>>>> *Implementation Info*
>>>>> 
>>>>> *More quirks*
>>>>> 
>>>>> A ‘fixed == true’ Vector cannot have its length changed. This
>> means
>>> that
>>>>> changes via the length setter and the mutation methods (push,
>> pop,
>>> shift,
>>>>> unshift etc) all throw errors if used when a Vector is ‘fixed ==
>> true’.
>>>>> But… splice method also can change length. And in AVM this works
>> even
>>>> with
>>>>> a fixed length Vector, which might possibly be a bug but is one
>> that is
>>>>> matched in the implementation to conform with flash.
>>>>> 
>>>>> *Size impact.*
>>>>> 
>>>>> Alex was concerned with size impact for HelloWorld because the
>> beads
>>> were
>>>>> using a Vector.<IBead> type in javascript in one of the
>> application
>>>>> framework base classes. But the requirement was for that to
>> simply to
>>> be
>>>> an
>>>>> Array in javascript, the compiler was only achieving that by
>> default
>>>>> because there was no real Vector implementation. So I did a
>> couple of
>>>>> things here. Firstly I changed the application framework code to
>>> reflect
>>>>> the different requirement for javascript. Secondly, I added some
>> doc
>>>>> comment directives to suppress exporting on public members. Then
>> I
>>> added
>>>>> this to the Language methods that are for compiler-generated
>> Vector
>>> (and
>>>>> int and uint) support so that they are eligible for dead code
>>> elimination
>>>>> if not used. This effectively means that it is fully PAYG – it
>> is only
>>>>> there if you need it, but if you need it there is also no effort
>> to add
>>>> it
>>>>> in as an optional dependency. If, because of this, there is a
>> potential
>>>> for
>>>>> issues with modules or something I have not thought of, that
>> will be
>>>>> another thing to solve, but if so, I will find a way to address
>> it.
>>>>> 
>>>>> If the main concern with ‘size’ is data transfer, then looking
>> at the
>>>>> minified output size in HelloWorld is not really meaningful (or
>> perhaps
>>>> it
>>>>> is better to say that it is only as meaningful as looking at the
>> size
>>> of
>>>> an
>>>>> uncompressed swf compared to normal deployment of a compressed
>> swf). In
>>>> any
>>>>> real deployment the javascript should be served as gzipped. So I
>>> compared
>>>>> gzipped (‘normal’ compression) versions of HelloWorld.js between
>> those
>>>> with
>>>>> the unused Language support methods (for int/uint and Vector)
>> and their
>>>>> dependencies vs. builds without. The support for all that
>> functionality
>>>>> comes in at under 3 Kb difference in the gzipped output. I
>> personally
>>>> don’t
>>>>> think that would register as important in most cases. However,
>> it is
>>>> pretty
>>>>> close to zero impact now if it is not used. In fact the
>> HelloWorld
>>>>> application is now about 55 bytes smaller than it was before, so
>> I
>>>> consider
>>>>> it ‘carbon-netural’. And these are at the gzipped levels (it is
>> also
>>>>> slightly smaller when not gzipped, although it can sometimes be
>> the
>>> case
>>>>> that the larger of 2 files compresses better than a smaller one,
>>>> depending
>>>>> on the content).
>>>>> 
>>>>> As a general comment about size… in my experience over the last
>> 10
>>> years
>>>> or
>>>>> so, mostly in relation to Flex apps, size was most often not
>> among the
>>>>> highest priority issues. Sure, start-up time often was. But that
>> is not
>>>>> size per se. Often ‘size’ issues were first and foremost ‘asset
>> size’
>>>>> issues (embedded or separate). While I know overall that it
>> remains
>>>>> important, I personally think the growth in bandwidth and device
>> memory
>>>> in
>>>>> general has outpaced the growth in the size of web apps even as
>> the
>>> world
>>>>> has turned to mobile. In other words, I think we probably passed
>> a
>>> hurdle
>>>>> point in the mobile side of things. Admittedly that is just
>>> ‘perception’
>>>>> and maybe there is data that shows I am quite wrong or your
>> experience
>>> on
>>>>> specific client projects could be quite different. The point of
>> me
>>>>> explaining that was, however, to illustrate why I think ‘size’
>> sits
>>>> where I
>>>>> think it does in general in terms of importance: I consider it
>> to be
>>>> behind
>>>>> stability/reliability first which is followed by performance in
>>>> performance
>>>>> critical code. Overriding that general flow (which again, is
>> just my
>>>>> opinion), are whatever my client’s specific requirements are for
>> any
>>>>> particular project. In other words I am not sure how much of
>>> HelloWorld’s
>>>>> size is going to be an important deciding factor for someone to
>> choose
>>> to
>>>>> use Royale. I think the ‘I got it to work!’ is the real kicker
>> here.
>>> This
>>>>> paragraph was not to cause any conflict, and I already addressed
>> the
>>>> ‘size’
>>>>> impact in the branch, so I’m not saying it wasn’t necessary to
>> do that
>>>>> (although I do suspect the same attention was not given to all
>> other
>>>> things
>>>>> in the past that affected HelloWorld). It’s more to promote
>> discussion
>>>> and
>>>>> thought in general. Trying to be all one aspect (small size) can
>>>> compromise
>>>>> other aspects (reliability or stability or compatibility, for
>> example).
>>>> And
>>>>> trying to accommodate all aspects (reliability, small size,
>> exceptional
>>>>> performance) somehow very likely increases complexity because
>> there is
>>> a
>>>>> need to accommodate the explicit decisions for trade-offs between
>>>> competing
>>>>> aspects. It would be good to have a guide of priorities based on
>> the
>>>> needs
>>>>> of the user base (while I might have a strong opinion about what
>> I
>>> think
>>>> is
>>>>> important, I don’t assume that my views necessarily represent
>> wider
>>> user
>>>>> needs, because I have not done research to support that – and
>> it’s not
>>>>> really a twitter poll kind of thing!). Anyhow I got off track
>> there a
>>>> bit…
>>>>> back to Vector…
>>>>> 
>>>>> 
>>>>> 
>>>>> *Performance.*
>>>>> 
>>>>> No-one should expect a non-native Vector implementation to
>> perform
>>> faster
>>>>> than native Array in javascript. Its main benefit is type
>> safety, and
>>>> that
>>>>> is the reason it should be selected for use over Array. (In swf,
>> native
>>>>> numeric Vector types *are* selected for performance, but the
>> other
>>> Vector
>>>>> types are also at least slightly slower than Array, so selecting
>> them
>>> is
>>>>> based on the need for type safety)
>>>>> 
>>>>> There are, however some ways to get 100% Array performance with
>> this
>>>>> implementation, and in a loop, for example it would be similar to
>>>> avoiding
>>>>> method calls (like push/pop) and only using index assignments
>> that is
>>>>> typical of performance optimization in swf.
>>>>> 
>>>>> So these two methods provide almost Identical performance in js:
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> *private function testArrayInt2(iterations:uint):Number{     var
>>>> start:Date
>>>>> = new Date();     var inst:Array = new Array(iterations);
>> for
>>>> (var
>>>>> i:uint=0;i<iterations; i++) {         inst[i] = i;     }
>> return new
>>>>> Date().valueOf() - start.valueOf(); } /**  *  *
>>>>> @royalesuppressvectorindexcheck true  */ private function
>>>>> testVectorInt2(iterations:uint):Number{     var start:Date = new
>>> Date();
>>>>>    var inst:Vector.<uint> = new Vector.<uint>(iterations);
>>   for
>>>>> (var i:uint=0;i<iterations; i++) {         inst[i] = i;     }
>>> return
>>>>> new Date().valueOf() - start.valueOf(); }*
>>>>> 
>>>>> The doc comment on the 2nd method prevented the compiler from
>>> generating
>>>> an
>>>>> index check wrapper around the ‘i’ in inst[i]
>>>>> 
>>>>> The above 2 methods take around 5-7 ms for 500,000 iterations on
>> my
>>>> machine
>>>>> (chrome/windows). This is quite a bit faster than the same
>> methods in
>>> the
>>>>> swf (non-debug) build on my machine. The Vector constructor is
>> also
>>> doing
>>>>> extra work in this case by setting all the 500,000 slots to
>> numeric 0.
>>>> But
>>>>> on modern browsers it is using a fast native Array.fill method
>> to do
>>>> that,
>>>>> so it’s probably more noticeable on IE11 which uses a for loop to
>>>>> pre-populate the contents with numeric 0 values.
>>>>> 
>>>>> For reference, the generated code for the second method above,
>> looks
>>> like
>>>>> this:
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> */**  *  * @royalesuppressvectorindexcheck true  * @private  *
>> @param
>>>>> {number} iterations  * @return {number}  */
>>>>> 
>>>>> 
>>>> 
>>> 
>> flexUnitTests.language.LanguageTesterTestVectorPerf.prototype.flexUnitTests_language_LanguageTesterTestVectorPerf_testVectorInt2
>>>>> = function(iterations) {   var /** @type {Date} */ start = new
>> Date();
>>>>> var /** @type {Array.<number>} */ inst = new
>>>>> 
>> (org.apache.royale.utils.Language.synthVector('uint'))(iterations);
>>> for
>>>>> (var /** @type {number} */ i = 0; i < iterations; i++) {
>> inst[i] =
>>> i;
>>>>> }   return new Date().valueOf() - start.valueOf(); };*
>>>>> 
>>>>> The methods with type checking in them, like push, unshift etc
>> will be
>>>>> quite a lot slower though. This should not be a surprise. In
>> swf, when
>>>> you
>>>>> look at something like Vector.<IBead> it can be up to 30% slower
>> than
>>>> Array
>>>>> for methods like push, iirc at native level. In javascript it
>> will be a
>>>> lot
>>>>> more. But in both cases it has type safety. And for small
>> collection
>>>> sizes
>>>>> in non-performance sensitive code it is probably not going to
>> make a
>>>>> meaningul difference.
>>>>> 
>>>>> Known limitations
>>>>> 
>>>>> 1.       myVectorInstance[‘constructor’] can be different
>> between js
>>> and
>>>>> swf
>>>>> 
>>>>> 2.       There is some reliance on not obscuring the type from
>> the
>>>> compiler
>>>>> for things to work correctly. Example:
>>>>> 
>>>>> var myObscuredType:* = new Vector.<String>(20,true) // creates a
>> fixed
>>>>> Vector of length 20
>>>>> 
>>>>> myObscuredType.length = 21; //should throw an error, but does
>> not in
>>>>> javascript.
>>>>> 
>>>>> This will work as long as the compiler knows that the type with
>> the
>>>> length
>>>>> setter is some type of Vector, otherwise not.
>>>>> 
>>>>> 
>>>>> 
>>>>> *Performance tuning*
>>>>> 
>>>>> *@royalesuppressvectorindexcheck*
>>>>> 
>>>>> The above doc comment directive avoids checking for
>> out-of-valid-range
>>>>> index values on assignments. This is extremely desirable inside
>> loops
>>>> which
>>>>> are usually constrained to the valid range in any case. There is
>> a top
>>>>> level compiler configuration setting for this, but local
>> settings win
>>>>> (turning off or on generally with true/false, or suppressing
>>> specifically
>>>>> for individual local variable names)
>>>>> 
>>>>> 
>>>>> 
>>>>> Other options.
>>>>> 
>>>>> The above one was obvious to me as an important tuning option. I
>>> started
>>>>> with adding another but pulled it out in favor of adding them
>> based on
>>>>> actual need.
>>>>> 
>>>>> There are many options:
>>>>> 
>>>>> Instance based: reducing type checking with a compiler-only
>> generated
>>>>> additional constructor parameter, triggered by some doc comment
>>>> directive.
>>>>> This could be in the form of adding in compiler generated
>> alternatve
>>>> calls
>>>>> to things like ‘unsafePush’ and ‘unsafePop’ on instances, or
>> perhaps
>>>>> literal calls to Array.prototype.push.call(inst, pushItem),
>> triggered
>>> by
>>>>> some doc comment directive
>>>>> 
>>>>> Global changes:Adding some compiler define value that (along
>> with:
>>>>> ||goog.DEBUG) suppresses many runtime checks in the release
>> Vector
>>>>> implementation. This would allow a blanket approach to dialing
>> runtime
>>>>> safety down (or keeping them) in the release build. It would
>> apply
>>> across
>>>>> all libraries and local project code.
>>>>> 
>>>>> Some combinations of the above that allow sweeping optimizations
>> with
>>>> local
>>>>> exceptions.
>>>>> 
>>>>> Basically, this branch currently represents what I have reason to
>>> believe
>>>>> is a high conformance Vector implementation which should be the
>> default
>>>> as
>>>>> it is an as3 core type. I think there are many options to scale
>> things
>>>>> back, but rather than assume what they should be, I’d prefer to
>> hear
>>> from
>>>>> users and address *real* needs, so that we only end up with
>>> configuration
>>>>> options that matter.
>>>>> 
>>>>> 
>>>>> 
>>>>> *Advantages of a single Vector implementation – the case for
>> avoiding a
>>>>> ‘vector emulation class’*
>>>>> 
>>>>> ‘Language emulation’ is a foundational layer that is not in the
>> same
>>>>> category as ‘application framework’ where we can define things
>> how we
>>>> want.
>>>>> Because the royale sdk includes both aspects inside ‘framework’
>> (and
>>> that
>>>>> was obviously not the case for flex sdk in the past) it may be
>> easy to
>>>>> overlook that difference.
>>>>> 
>>>>> Vector typing is a core part of AS3 language. Therefore it should
>>> conform
>>>>> and be reliable. Having multiple implementations for a core
>> language
>>>>> feature seems wrong and could easily lead to libraries of code
>> that are
>>>>> incompatible. Additionally, as pointed out earlier, Vector is
>> more
>>> like a
>>>>> subclass factory (‘runtime’ generics) than a single class, so
>> won’t be
>>>> well
>>>>> represented by a regular class implementation.
>>>>> 
>>>>> Alex, I know you added support for a Vector emulation class
>> approach to
>>>>> meet the needs of someone asking for improved Vector support, in
>> part
>>>>> because we did not have someone who had volunteered to write our
>> own. I
>>>> did
>>>>> that last part now. I am also suggesting that the emulation class
>>>> approach
>>>>> is not a good long term solution because of the above reasons.
>> And the
>>>> full
>>>>> set of functionality is less than 3Kb in the gzipped output, so
>> I’d
>>>> suggest
>>>>> that as long as I can add needs-based performance tuning options
>> for
>>>> those
>>>>> who want them, the benefits of having a single conforming
>>> implementation
>>>>> which is performance scalable are better than the risks
>> associated with
>>>>> adding partially non-conforming ones. Therefore I’d like to ask
>> if we
>>> can
>>>>> remove that functionality now that we have our own 'Vector' (I
>> can do
>>> the
>>>>> work if you prefer as I know your focus is understandably on
>> other
>>>> things).
>>>>> 
>>>>> *Future:*
>>>>> 
>>>>> It will be easily possibly to alter the current implementation
>> to use
>>> es6
>>>>> proxy which would likely provide the most reliable way to get
>> full
>>> Vector
>>>>> conformance indistinguishable from flash. Es6 proxy is
>> transparent for
>>>>> Array:
>>>>> 
>>>>> var p = new Proxy(new Array(), {});
>>>>> 
>>>>> Array.isArray(p) // true
>>>>> 
>>>>> This should allow trapping things like the length setter before
>> it gets
>>>> to
>>>>> the underlying Array target, and doing checking for fixed ==
>> true etc.
>>>> The
>>>>> same is true for numeric index-based assignment of values etc.
>>>>> 
>>>>> es6 Proxy is kinda cool. At the moment IE11 is the only
>> meaningful
>>> target
>>>>> that does not support this.
>>>>> 
>>>>> I am only mentioning this here because I did think about this,
>> and I
>>>>> believe that the current implementation could be upgraded quite
>> easily
>>> to
>>>>> use this approach if it makes sense (when IE11 is a distant
>> memory –
>>>>> perhaps sometime next year!).
>>>>> 
>>>>> 
>>>>> 
>>>>> Phew, you made it! Well done.
>>>>> 
>>>>> Feel free to share your thoughts or ask any questions you might
>> have.
>>> If
>>>>> you have neither of those at this time, please still try to find
>> time
>>> to
>>>>> test any large projects you have in the branch, and provide
>> feedback or
>>>>> share any concerns you might have after doing that.
>>>>> thanks,
>>>>> Greg
>>>>> 
>>>>> 
>>>>> On Thu, May 23, 2019 at 7:55 PM Greg Dove <greg.d...@gmail.com 
>>>>> <mailto:greg.d...@gmail.com>>
>> wrote:
>>>>> 
>>>>>> Re XMLTest manualtest...
>>>>>> 
>>>>>> Yep those were the ones I ported, Harbs. I think I got them
>> all but
>>> may
>>>>>> have missed some. I added a bunch more as well. Hopefully
>> these can
>>> be
>>>>>> easily migrated to what Josh has been working on.
>>>>>> 
>>>>>> 
>>>>>> On Thu, 23 May 2019, 19:43 Harbs, <harbs.li...@gmail.com 
>>>>>> <mailto:harbs.li...@gmail.com>>
>> wrote:
>>>>>> 
>>>>>>> As far as XML unit tests go, the starting point should be
>> XMLTest in
>>>>>>> manual tests. (Almost) every time I ran into an issue, I
>> added it to
>>>>> that
>>>>>>> project.
>>>>>>> 
>>>>>>> I think I might have been lax on the last few issues I fixed,
>> so we
>>>>>>> should probably go through the later XML commits and make
>> sure we
>>> have
>>>>>>> tests for that.
>>>>>>> 
>>>>>>> As far as Node goes, I think we probably need conditional Node
>>>>>>> compilation to handle Node-specific (and browser specific)
>> code in a
>>>>> PAYG
>>>>>>> way.
>>>>>>> 
>>>>>>> To technically handle the parsing, something like
>>>>>>> 
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fisaacs%2Fsax-js&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=FUUihStMfLg3KvkiVM24DfmOr2JY4lCV%2BX4rEdE%2FGso%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fisaacs%2Fsax-js&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=FUUihStMfLg3KvkiVM24DfmOr2JY4lCV%2BX4rEdE%2FGso%3D&amp;reserved=0>
>> <
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fisaacs%2Fsax-js&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=FUUihStMfLg3KvkiVM24DfmOr2JY4lCV%2BX4rEdE%2FGso%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fisaacs%2Fsax-js&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=FUUihStMfLg3KvkiVM24DfmOr2JY4lCV%2BX4rEdE%2FGso%3D&amp;reserved=0>
>>> 
>>>> is
>>>>> a
>>>>>>> good starting point and something like this
>>>>>>> 
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnfarina%2Fxmldoc&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=Sv8hmktvAMktEP30faTxBZrUGuKOI2qArBCSGzqGWd4%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnfarina%2Fxmldoc&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=Sv8hmktvAMktEP30faTxBZrUGuKOI2qArBCSGzqGWd4%3D&amp;reserved=0>
>> <
>>> 
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnfarina%2Fxmldoc&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=Sv8hmktvAMktEP30faTxBZrUGuKOI2qArBCSGzqGWd4%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fnfarina%2Fxmldoc&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=Sv8hmktvAMktEP30faTxBZrUGuKOI2qArBCSGzqGWd4%3D&amp;reserved=0>
>>> 
>>>>>>> might be useful to either use or modify.
>>>>>>> 
>>>>>>> Harbs
>>>>>>> 
>>>>>>>> On May 23, 2019, at 10:18 AM, Greg Dove <
>> greg.d...@gmail.com <mailto:greg.d...@gmail.com>>
>>>> wrote:
>>>>>>>> 
>>>>>>>> All, I started porting some adhoc XML tests to UnitTests and
>>>>> eventually
>>>>>>>> ended up spending quite a bit of time on addressing issues
>> that
>>>> arose
>>>>>>> for
>>>>>>>> XML before getting back to Vector stuff.
>>>>>>>> I think XML probably needs many more unit tests before we
>> get to
>>> 1.0
>>>>>>>> because it has an extensive api. I have not used royale
>> with Node
>>>> yet,
>>>>>>> but
>>>>>>>> XML also needs some thought about how to get it working on
>> Node, I
>>>>>>> assume.
>>>>>>>> Because XML uses the browser's parser and Node does not
>> have one
>>> by
>>>>>>>> default, then using the same code will need something to
>> take the
>>>>> place
>>>>>>> of
>>>>>>>> the browser's native parser for Node. There is a lib in npm
>> that
>>>> might
>>>>>>> be
>>>>>>>> useful for that, but I don't know how that might work with
>> licence
>>>>> etc.
>>>>>>>> Anyhow, that is just an observation, I will focus on Vector
>> in
>>> this
>>>>>>>> thread... I will post here late tomorrow local time with
>> more
>>> info,
>>>>> and
>>>>>>>> discussion points. I am keen to see this merged in, but
>> also keen
>>> to
>>>>> get
>>>>>>>> buy-in first.
>>>>>>>> 
>>>>>>>> 
>>>>>>>> On Fri, May 10, 2019 at 11:15 PM Carlos Rovira <
>>>>> carlosrov...@apache.org <mailto:carlosrov...@apache.org>
>>>>>>>> 
>>>>>>>> wrote:
>>>>>>>> 
>>>>>>>>> Hi Greg,
>>>>>>>>> 
>>>>>>>>> thanks for reporting. I can share here that I was able to
>> test
>>> your
>>>>>>> branch
>>>>>>>>> with our real project and seems all goes well.
>>>>>>>>> Could make a intense test, but almost app is working and
>> we found
>>>>> just
>>>>>>> a
>>>>>>>>> few type error coercions that your code was able to catch
>> (so
>>>> great!
>>>>>>> :))
>>>>>>>>> and must be solved as you merge the branch in.
>>>>>>>>> 
>>>>>>>>> I think that if Vector is something new and others don't
>> have
>>>>>>> problems, the
>>>>>>>>> branch can be merged and Vector discussions can be done
>> after
>>> that,
>>>>>>> since
>>>>>>>>> it will not break anything since there's no uses of that
>> code
>>> since
>>>>> is
>>>>>>> new,
>>>>>>>>> but the other changes can be very beneficial
>>>>>>>>> 
>>>>>>>>> thanks in advance for your progress in all this stuff :)
>>>>>>>>> 
>>>>>>>>> Carlos
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> El vie., 10 may. 2019 a las 8:44, Greg Dove (<
>>> greg.d...@gmail.com <mailto:greg.d...@gmail.com>
>>>>> )
>>>>>>>>> escribió:
>>>>>>>>> 
>>>>>>>>>> All, I am really sorry, I keep thinking I will be able to
>> get
>>> back
>>>>> to
>>>>>>>>> this,
>>>>>>>>>> but I have some other personal things taking my spare
>> time at
>>> the
>>>>>>> moment.
>>>>>>>>>> These will be done in 2 days, and I then will update the
>> branch
>>>> with
>>>>>>> some
>>>>>>>>>> extra stuff, and continue this discussion with a focus on
>> Vector
>>>>>>>>> (bringing
>>>>>>>>>> some other relevant discussion on the same topic from
>> Alex as
>>>> well)
>>>>> at
>>>>>>>>> that
>>>>>>>>>> time. Sorry to set the wrong expectations earlier.
>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>>> On Tue, May 7, 2019 at 9:01 AM Greg Dove <
>> greg.d...@gmail.com <mailto:greg.d...@gmail.com>>
>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Thanks for the feedback, Josh, Carlos, Alex.
>>>>>>>>>>> 
>>>>>>>>>>> js-complex-implicit-coercions
>>>>>>>>>>> js-resolve-uncertain
>>>>>>>>>>> js-vector-index-checks
>>>>>>>>>>> 
>>>>>>>>>>> I will make those changes for compiler settings at some
>> point
>>> in
>>>>> the
>>>>>>>>>>> branch later today, invert the config default values to
>> match,
>>>> and
>>>>>>> swap
>>>>>>>>>> all
>>>>>>>>>>> 'off' settings in the framework builds (ant and maven)
>> from
>>> true
>>>> to
>>>>>>>>>> false.
>>>>>>>>>>> I will also add compiler tests for these settings
>> (either today
>>>> or
>>>>>>>>>>> tomorrow). At the moment I only tested the new settings
>> in the
>>>> code
>>>>>>>>>> result
>>>>>>>>>>> tests in javascript.
>>>>>>>>>>> 
>>>>>>>>>>> In another day or two I will post a call to discuss the
>> Vector
>>>>>>>>>>> implementation in more detail. For Vectors, the
>>>>>>> js-vector-index-checks
>>>>>>>>>> was
>>>>>>>>>>> the obvious first candidate for dialing back on the
>> impact of
>>>>> runtime
>>>>>>>>>>> type-checking, but there are a number of options for
>> 'dialing'
>>>>> other
>>>>>>>>>>> aspects back (or even forward) and choosing the scope of
>> their
>>>>> effect
>>>>>>>>>>> (local code, local project, or entire codebase code
>> including
>>>>>>> external
>>>>>>>>>>> swcs). I already had stub code for the start of
>> something else
>>> to
>>>>>>>>> remove
>>>>>>>>>>> typechecking in mutation methods ('push', 'shift', 'pop'
>> etc)
>>> but
>>>>>>>>> removed
>>>>>>>>>>> it in favour of discussing and reviewing it first.
>> Coming up
>>>> with
>>>>> a
>>>>>>>>>>> 'usable' set of options will really benefit from your
>>> collective
>>>>>>> input,
>>>>>>>>>> so
>>>>>>>>>>> I hope you can participate.
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> 
>>>>>>>>>>> On Tue, May 7, 2019 at 4:19 AM Alex Harui
>>>> <aha...@adobe.com.invalid <mailto:aha...@adobe.com.invalid>
>>>>>> 
>>>>>>>>>>> wrote:
>>>>>>>>>>> 
>>>>>>>>>>>> +1 to renaming the options to the positive.
>>>>>>>>>>>> 
>>>>>>>>>>>> On 5/6/19, 8:12 AM, "Josh Tynjala" <
>> joshtynj...@apache.org <mailto:joshtynj...@apache.org>>
>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>   Hey Greg,
>>>>>>>>>>>> 
>>>>>>>>>>>>   I haven't had a chance to look through all of the
>> changes,
>>>> but
>>>>>>> one
>>>>>>>>>>>> thing caught my eye. I find it confusing when a boolean
>> value
>>> is
>>>>>>> named
>>>>>>>>>> with
>>>>>>>>>>>> a "negative" phrase. For instance, your new compiler
>> options
>>>> have
>>>>>>> "no"
>>>>>>>>>> in
>>>>>>>>>>>> the name:
>>>>>>>>>>>> 
>>>>>>>>>>>>   js-no-complex-implicit-coercions
>>>>>>>>>>>>   js-no-resolve-uncertain
>>>>>>>>>>>>   js-no-vector-index-checks
>>>>>>>>>>>> 
>>>>>>>>>>>>   As they are named, true means no, and so false means
>> yes.
>>>> With
>>>>>>>>> this
>>>>>>>>>>>> kind of naming, I find that I always need to take a
>> moment to
>>>>>>> remember
>>>>>>>>>>>> which means which. I think it would be better if true
>> means
>>> yes
>>>>> and
>>>>>>>>>> false
>>>>>>>>>>>> means no.
>>>>>>>>>>>> 
>>>>>>>>>>>>   - Josh
>>>>>>>>>>>> 
>>>>>>>>>>>>   On 2019/05/05 08:00:20, Greg Dove <
>> greg.d...@gmail.com <mailto:greg.d...@gmail.com>>
>>>> wrote:
>>>>>>>>>>>>> So...  just an overview of recent work I have been
>> doing.
>>>>>>>>> Summery
>>>>>>>>>>>> up front,
>>>>>>>>>>>>> some extra detail further down... please try things
>> with the
>>>>>>>>>> branch
>>>>>>>>>>>> if you
>>>>>>>>>>>>> have time.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> In the *improvements/Language* branch there are many
>> updates
>>>>>>>>>> inside
>>>>>>>>>>>>> Language and related updates inside the compiler to
>> address
>>>>>>>>> these
>>>>>>>>>>>> main
>>>>>>>>>>>>> areas:
>>>>>>>>>>>>> -Fixes/better support for int and uint types at runtime
>>>>>>>>>>>>> -Fixes for strict equality comparisons when
>> instantiated
>>> types
>>>>>>>>> are
>>>>>>>>>>>>> uncertain, or known to be problematic in these cases
>> for
>>>>>>>>> specific
>>>>>>>>>>>> types
>>>>>>>>>>>>> that are known.
>>>>>>>>>>>>> -Complex implicit coercions (throws errors if assigned
>> type
>>> is
>>>>>>>>>>>> incorrect)
>>>>>>>>>>>>> -Vectors - test-driven development of a conforming
>>>>>>>>> implementation.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The new features are supported by almost 350 new
>> assertion
>>>> tests
>>>>>>>>>>>> (in the
>>>>>>>>>>>>> UnitTests manualtests project). This was not a trivial
>> amount
>>>> of
>>>>>>>>>>>> work :)
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I still have a few things to work on in the branch,
>> including
>>>>>>>>> some
>>>>>>>>>>>> tuning
>>>>>>>>>>>>> for the new configuration settings and adding tests to
>> the
>>>>>>>>>> compiler
>>>>>>>>>>>> for
>>>>>>>>>>>>> those, but I would be keen for others to test the
>> branch and
>>>> try
>>>>>>>>>> it
>>>>>>>>>>>> with
>>>>>>>>>>>>> real projects, and provide feedback. So this is
>>>>>>>>>>>> 'improvements/Language' for
>>>>>>>>>>>>> both royale-asjs and royale-compiler.
>>>>>>>>>>>>> In particular, please take Vector for a spin and see
>> if you
>>> can
>>>>>>>>>>>> break
>>>>>>>>>>>>> anything and let me know!
>>>>>>>>>>>>> Note the new configuration settings a bit further down
>> (and
>>> see
>>>>>>>>>>>> examples
>>>>>>>>>>>>> here for how to switch them off globally:
>>>>>>>>>>>>> mvn:
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>>> 
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fblob%2Fimprovements%2FLanguage%2Fframeworks%2Fprojects%2Fpom.xml%23L88&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=vC7Sy%2BfGwJhbS8bR0Eo4wZBTNxsuEGCWXQ6nHceAk18%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fblob%2Fimprovements%2FLanguage%2Fframeworks%2Fprojects%2Fpom.xml%23L88&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628961027&amp;sdata=vC7Sy%2BfGwJhbS8bR0Eo4wZBTNxsuEGCWXQ6nHceAk18%3D&amp;reserved=0>
>>>>>>>>>>>>> ant:
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>>> 
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fblob%2Fimprovements%2FLanguage%2Fframeworks%2Fjs%2Fprojects%2FBasicJS%2Fsrc%2Fmain%2Fconfig%2Fcompile-js-config.xml%23L106&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628971023&amp;sdata=NlTd48QGPtLVuoxX%2Fv4IO0ZZyz3CMgh7Gzllr3D%2BIoA%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fblob%2Fimprovements%2FLanguage%2Fframeworks%2Fjs%2Fprojects%2FBasicJS%2Fsrc%2Fmain%2Fconfig%2Fcompile-js-config.xml%23L106&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628971023&amp;sdata=NlTd48QGPtLVuoxX%2Fv4IO0ZZyz3CMgh7Gzllr3D%2BIoA%3D&amp;reserved=0>
>>>>>>>>>>>>> )
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> A couple of examples:
>>>>>>>>>>>>> I tried compiling Tour de Jewel with the new features
>>> switched
>>>>>>>>> on,
>>>>>>>>>>>> it it
>>>>>>>>>>>>> immediately highlighted a runtime error where a 'bead'
>> was
>>>> being
>>>>>>>>>>>> added
>>>>>>>>>>>>> which was not actually an IBead. This was detected in a
>>> Vector
>>>>>>>>>> push
>>>>>>>>>>>>> operation. Although it was not causing problems, it is
>> a good
>>>>>>>>>>>> example of
>>>>>>>>>>>>> something that would have failed at runtime in the
>> flash
>>>> player,
>>>>>>>>>>>> making it
>>>>>>>>>>>>> much easier to identify and fix.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> I have switched the extra outputs off for all the
>> framework
>>>> code
>>>>>>>>>> in
>>>>>>>>>>>> the
>>>>>>>>>>>>> branch. But I did try a couple of projects with them
>> on. As
>>> an
>>>>>>>>>>>> example,
>>>>>>>>>>>>> after building XML with them on it throws a runtime
>> error
>>> when
>>>>>>>>>>>> calling one
>>>>>>>>>>>>> of the methods in XML.
>>>>>>>>>>>>> The method has the wrong argument type (Element type
>> when it
>>>>>>>>>> should
>>>>>>>>>>>> -iirc-
>>>>>>>>>>>>> be Node). So these can catch errors in your code that
>> are
>>>> silent
>>>>>>>>>>>> because
>>>>>>>>>>>>> there is no strong typechecking at runtime.
>>>>>>>>>>>>> The above is the implicit complex coercion in action.
>> it is
>>>> like
>>>>>>>>>> if
>>>>>>>>>>>> you did
>>>>>>>>>>>>> in flash player :
>>>>>>>>>>>>> var myArray:Array = [new ByteArray()];
>>>>>>>>>>>>> var sprite:Sprite = myArray[0]; //runtime error here
>>>>>>>>>>>>> This does not happen currently in Royale javascript,
>> but is
>>> now
>>>>>>>>>>>> supported
>>>>>>>>>>>>> in the branch (and you can switch it off). This is an
>>> expansion
>>>>>>>>> of
>>>>>>>>>>>> some of
>>>>>>>>>>>>> Josh's great work in the past with implicit primitive
>>> coercions
>>>>>>>>>>>> (which
>>>>>>>>>>>>> don't throw errors but coerce to the correct type).
>>>>>>>>>>>>> 
>>>>>>>>>>>>> *New configuration settings*
>>>>>>>>>>>>> js-no-complex-implicit-coercions
>>>>>>>>>>>>> default: false (i.e. ensures runtime safety when
>> assigning an
>>>>>>>>>>>> unknown type
>>>>>>>>>>>>> to a known type )
>>>>>>>>>>>>> local doc comment directive
>>>>>>>>>>>>> switching: @royalesuppresscompleximplicitcoercion
>>>>>>>>>>>>> 
>>>>>>>>>>>>> js-no-resolve-uncertain
>>>>>>>>>>>>> default: false (i.e. ensures instances that are safe in
>>> certain
>>>>>>>>>>>>> comparisons  )
>>>>>>>>>>>>> local doc comment directive switching:
>>>>>>>>>>>> @royalesuppressresolveuncertain
>>>>>>>>>>>>> 
>>>>>>>>>>>>> js-no-vector-index-checks
>>>>>>>>>>>>> default: false (i.e. vector index checking is on)
>>>>>>>>>>>>> local doc comment directive switching:
>>>>>>>>>>>> @royalesuppressvectorindexcheck
>>>>>>>>>>>>> 
>>>>>>>>>>>>> *-Fixes problems/provides more general support for int
>> and
>>> uint
>>>>>>>>>>>> types at
>>>>>>>>>>>>> runtime*
>>>>>>>>>>>>> Josh's recent assignment implicit coercions made a big
>>>>>>>>> difference
>>>>>>>>>>>> for these
>>>>>>>>>>>>> (and other primitive types), but runtime support either
>>> caused
>>>>>>>>>>>> errors or
>>>>>>>>>>>>> bad results.
>>>>>>>>>>>>> Things like
>>>>>>>>>>>>> var myClass = int;
>>>>>>>>>>>>> 
>>>>>>>>>>>>> var x:* = new myClass(22.5);
>>>>>>>>>>>>> trace( x === 22 ) //true
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The above works now in the branch. iirc I think there
>> is more
>>>>>>>>> than
>>>>>>>>>>>> one
>>>>>>>>>>>>> issue with that in develop.
>>>>>>>>>>>>> I started with this based on issue #273 which also now
>> is
>>> fixed
>>>>>>>>> in
>>>>>>>>>>>> the
>>>>>>>>>>>>> branch.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> int and uint are implemented are not needed like this
>> in most
>>>>>>>>>>>> cases, so the
>>>>>>>>>>>>> are not real 'classes' but very simple instances of
>>> 'synthetic
>>>>>>>>>>>> Types' that
>>>>>>>>>>>>> are only 'created' if/when they are requested for the
>> first
>>>>>>>>> time.
>>>>>>>>>>>> Vectors
>>>>>>>>>>>>> (because they are kind of like factory-generated
>> classes) use
>>>>>>>>> the
>>>>>>>>>>>> same
>>>>>>>>>>>>> underlying mechanism, but are more complicated than
>> int and
>>>> uint
>>>>>>>>>> in
>>>>>>>>>>>> terms
>>>>>>>>>>>>> of their supporting implementation. uint and int are
>> almost
>>>>>>>>>> defined
>>>>>>>>>>>> in a
>>>>>>>>>>>>> single line of code, not so for Vectors. Another
>> candidate
>>> for
>>>> a
>>>>>>>>>>>> synthetic
>>>>>>>>>>>>> type might be 'Class', but I will see about that.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> *-Fixes for strict equality comparisons in when
>> instantiated
>>>>>>>>> types
>>>>>>>>>>>> are
>>>>>>>>>>>>> uncertain, or known to be problematic for types that
>> are
>>>> known.*
>>>>>>>>>>>>> Certain explicit instantiations of primitive types are
>>> swapped
>>>>>>>>> to
>>>>>>>>>>>> coercions.
>>>>>>>>>>>>> Things like 'new String('test')' are now output simply
>> as
>>>>>>>>>>>> String('test').
>>>>>>>>>>>>> Resolution of uncertain instantiations
>>>>>>>>>>>>> Where a class is not known, the instantiation of that
>> class
>>> is
>>>>>>>>>>>> wrapped in a
>>>>>>>>>>>>> 'resolveUncertain' method call. This calls the low
>> level
>>> native
>>>>>>>>>>>> 'valueOf()'
>>>>>>>>>>>>> method on the instance, which resolves it to primitive
>> types
>>> if
>>>>>>>>>>>> possible.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> The above changes provide consistency with AVM when
>> values ,
>>>>>>>>> even
>>>>>>>>>>>> those
>>>>>>>>>>>>> with typing obscured, are used in strict equality
>>> comparisons.
>>>>>>>>>>>> These cases
>>>>>>>>>>>>> may not bet mainstream, but that is exactly the type
>> of thing
>>>>>>>>> the
>>>>>>>>>>>> causes a
>>>>>>>>>>>>> lot of headscratching when things don't work. Note that
>>>>>>>>>>>> Array.indexOf also
>>>>>>>>>>>>> uses strict equality comparisons, so this is not just
>> fixing
>>>>>>>>>>>> results of ===
>>>>>>>>>>>>> or !== across these edge cases.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> *-Complex implicit coercions*
>>>>>>>>>>>>> I expanded on Josh's implicit primitive type coercions
>> to
>>>>>>>>> support
>>>>>>>>>>>> more
>>>>>>>>>>>>> complex coercions
>>>>>>>>>>>>> (this is on by default, but explicitly off in the
>> framework)
>>>>>>>>>>>>> So this works now like flash player:
>>>>>>>>>>>>> var myClass:MyClass = someArray[i]; //if the assigned
>> value
>>>> from
>>>>>>>>>>>>> someArray[i] is not a MyClass type, error is thrown
>>>>>>>>>>>>> This can be switched off at compiler level, or tuned
>> within
>>>>>>>>>> methods
>>>>>>>>>>>> (on or
>>>>>>>>>>>>> off in contrast to compiler level setting) with a
>> specific
>>> doc
>>>>>>>>>>>> comment
>>>>>>>>>>>>> directive. (i.e. like royaleignorecoercion)
>>>>>>>>>>>>> Output in debug mode shows these implicit coercions
>> prefixed
>>>>>>>>> with
>>>>>>>>>>>> /*
>>>>>>>>>>>>> implicit cast */ so you can easily review the number of
>>>>>>>>> locations
>>>>>>>>>>>> this is
>>>>>>>>>>>>> affecting by doing 'find in files' and looking at the
>>> locations
>>>>>>>>>> and
>>>>>>>>>>>> count.
>>>>>>>>>>>>> While it will probably be a good thing to switch off
>> in a
>>> final
>>>>>>>>>>>> release
>>>>>>>>>>>>> build, it can help find problems during development,
>>>>>>>>> particularly
>>>>>>>>>>>> as more
>>>>>>>>>>>>> and more code is not being parallel tested in the flash
>>> player
>>>>>>>>>>>> where error
>>>>>>>>>>>>> trapping like this is automatic.
>>>>>>>>>>>>> I switched this off in framework, but it could help
>> find code
>>>>>>>>>>>> errors in the
>>>>>>>>>>>>> framework when it is switched on
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> *-Vectors*
>>>>>>>>>>>>> Vectors are 'smoke and mirrors' currently in develop -
>> it is
>>>>>>>>>>>> basically the
>>>>>>>>>>>>> compiler pretending that they are Vectors (they are
>> Arrays).
>>>>>>>>> This
>>>>>>>>>>>> gives a
>>>>>>>>>>>>> small amount of compile time safety, but still leaves
>> large
>>>> gaps
>>>>>>>>>>>> when
>>>>>>>>>>>>> compared with the real thing and many things that you
>> could
>>>>>>>>> assume
>>>>>>>>>>>> would be
>>>>>>>>>>>>> safe will not be. Assuming it worked properly could be
>> even
>>>>>>>>>>>> considered a
>>>>>>>>>>>>> little 'dangerous'.
>>>>>>>>>>>>> 
>>>>>>>>>>>>> There are 260 new assertion tests for Vectors,
>> including some
>>>>>>>>> that
>>>>>>>>>>>> relate
>>>>>>>>>>>>> to a new doc comment directive
>> @suppressvectorindexchecking
>>>>>>>>> which
>>>>>>>>>>>> avoids
>>>>>>>>>>>>> (intensive) checking for range errrors (and will be
>> desirable
>>>> to
>>>>>>>>>>>> switch off
>>>>>>>>>>>>> in a lot of cases, such as in length constrained loops
>> etc).
>>>>>>>>>>>>> You can see the Vector tests here:
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>>> 
>> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fblob%2Fimprovements%2FLanguage%2Fmanualtests%2FUnitTests%2Fsrc%2Fmain%2Froyale%2FflexUnitTests%2Flanguage%2FLanguageTesterTestVector.as%23L65&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628971023&amp;sdata=dwgAt0Rz%2Bt575HRIk97kPbtewGN4mSv8FbCQr6Skudg%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fapache%2Froyale-asjs%2Fblob%2Fimprovements%2FLanguage%2Fmanualtests%2FUnitTests%2Fsrc%2Fmain%2Froyale%2FflexUnitTests%2Flanguage%2FLanguageTesterTestVector.as%23L65&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628971023&amp;sdata=dwgAt0Rz%2Bt575HRIk97kPbtewGN4mSv8FbCQr6Skudg%3D&amp;reserved=0>
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> 
>>>>>>>>>>>>> *Miscellaneous*
>>>>>>>>>>>>> -When addressing some sourcemap related stuff for
>> Vectors, I
>>>>>>>>> fixed
>>>>>>>>>>>> an
>>>>>>>>>>>>> unrelated sourcemap issue that was caused by methods
>> which
>>> had
>>>>>>>>>>>> metadata
>>>>>>>>>>>>> attached. The mapping now correctly aligns with the
>> original
>>>>>>>>>>>> function
>>>>>>>>>>>>> keyword in these cases.
>>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>>>> 
>>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> 
>>>>>>>>> --
>>>>>>>>> Carlos Rovira
>>>>>>>>> 
>> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628971023&amp;sdata=TUTQu7PlBt8iBBUzUY%2F4AFW2mtTtRj1Fiq2g3P5vQuw%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628971023&amp;sdata=TUTQu7PlBt8iBBUzUY%2F4AFW2mtTtRj1Fiq2g3P5vQuw%3D&amp;reserved=0>
>>>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>> 
>>>> 
>>> 
>>> 
>>> --
>>> Carlos Rovira
>>> 
>> https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628971023&amp;sdata=TUTQu7PlBt8iBBUzUY%2F4AFW2mtTtRj1Fiq2g3P5vQuw%3D&amp;reserved=0
>>  
>> <https://nam04.safelinks.protection.outlook.com/?url=http%3A%2F%2Fabout.me%2Fcarlosrovira&amp;data=02%7C01%7Caharui%40adobe.com%7C6d2877e0e9a14986ba2708d6e2881e8b%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636945471628971023&amp;sdata=TUTQu7PlBt8iBBUzUY%2F4AFW2mtTtRj1Fiq2g3P5vQuw%3D&amp;reserved=0>

Reply via email to