Awesome! :-)
> On Jun 27, 2019, at 12:42 AM, Josh Tynjala <[email protected]> wrote:
>
> I found some low-hanging fruit!
>
> I just pushed a commit that removes most of the noisy console output from the
> compiler. I know that this output is useful for debugging the compiler
> itself, but most developers writing ActionScript and MXML don't ever need to
> see it.
>
> If you actually want to see all of that output, you should now enable the
> -verbose compiler option.
>
> With -verbose=true, TourDeJewel compiles in about 8 seconds on my machine.
> With -verbose=false, it compiles in 6 seconds. We're talking about 20-25%
> improvement to compile time for that particular project. I tested a smaller
> project that is closer to a Hello World. It originally compiled in about 4.3
> seconds, and after my change the total time was reduced to about 3.3 seconds
> instead.
>
> If you're modifying the compiler in the future, and you want to add a
> System.out.println() call, make sure that it's only displayed in verbose mode
> (unless it's related to an error, but then you might want
> System.err.println() instead). You can check the isVerbose() method in the
> project's Configuration object.
>
> - Josh
>
> On 2019/06/15 06:32:52, Alex Harui <[email protected]> wrote:
>> Just off the top of my head in my chat with Harbs last night, the two
>> biggest pieces of fruit are not low hanging, but honestly, I think you'd do
>> a better job of picking those off than I would. The two pieces of fruit are:
>>
>> 1) Getting rid of the two tree walks per AS file: JS output currently
>> requires both the top-down AST walk (BlockWalker/Emitters) and a bottom-up
>> AST walk (CmcEmitter/JBurg/BURM). It seems intuitive that walking the tree
>> once would increase performance. The catch is that there are currently
>> no/few semantic checks in the BlockWalker/Emitters walk so all of the
>> semantic checks from the BURM would have to be stitched into the Emitters so
>> it probably won't be twice as fast, and I believe there won't be one place
>> to stitch the BURM's calls into the semantic checks ino the
>> BlockWalker/Emitters. AIUI, the advantage of the BURM is it can "quickly"
>> identify patterns at the leaves where it affects the output. The
>> BlockWalker/Emitters might find that they need to ask the semantics of a
>> pattern near the leaves from several different emitters.
>>
>> 2) Experimenting with adding context data structures to the
>> BlockWalker/Emitters: Try single stepping through some medium complexity AS
>> code in the BlockWalker/Emitter part of the compiler. When I do so, I think
>> I see the same question being asked over and over again, such as resolving
>> an identifier, or checking if the parent node is a MemberAccessExpression
>> and more. I believe that caching information in a data structure passed
>> down through the emitters would significantly reduce the number of questions
>> asked and thus speed things up. Naturally, caching more stuff will
>> introduce caching bugs, but I expect it would eventually pay off. I do
>> worry about some issues around ActionScript and "late-binding" (which is not
>> the related to data-binding) and that caching will screw that up.
>>
>> Smaller, potentially interesting projects include playing around with
>> subsetting AS. I believe there are parts of AS that require late-binding
>> and scopes and other stuff that may not exist on other runtimes, and it is
>> possible that by warning when those parts of AS are used (custom namespaces,
>> for example), then if folks write their code without custom namespaces they
>> could get a significant compiler speed increase because the compiler doesn't
>> have to worry about late-binding. The interesting result of doing this may
>> be better options for outputting WASM, Java, C, and other stricter languages.
>>
>> There is also a potentially interesting task around combining, for example,
>> Basic.swc and BasicJS.swc into one multi-platform SWC. That would save time
>> on compiling the entire framework, but would require tooling changes and
>> build script changes. The advantage is that it would only transpile AS to
>> JS once. Right now, the transpile is run once for Basic.swc and again for
>> BasicJS.swc. It could be possible to steal the already transpiled JS from
>> Basic.swc. Or maybe the copying of the JS files will still be a performance
>> bottleneck. The advantage is also that there is only one SWC to deploy
>> instead of two which might simplify Maven as well.
>>
>> HTH,
>> -Alex
>>
>>
>>
>>
>> On 6/14/19, 7:11 PM, "Josh Tynjala" <[email protected]> wrote:
>>
>> Understood. I'll switch my focus and see if I can find some low hanging
>> fruit.
>>
>> - Josh
>>
>> On 2019/06/15 01:51:48, Harbs <[email protected]> wrote:
>>> I had a long discussion with Alex last night (sorry you couldn’t make it!)
>>> and he convinced me of the necessity of caution in regard to adding these
>>> language features. Waiting until we get the input of a language specialist
>>> is prudent.
>>>
>>> I do want those features, but we do need to figure out how they fit into a
>>> bigger picture of generics and the like. I’d like to brainstorm on how we
>>> can get a language specialist involved enough to at least guide us here.
>>>
>>> In discussing with Alex what’s the best avenue for improving the compiler
>>> in the short term, the topic of performance came up. That’s been somewhat
>>> of a pain point and working on that is probably a good idea.
>>>
>>> Harbs
>>>
>>>> On Jun 14, 2019, at 2:11 PM, Josh Tynjala <[email protected]> wrote:
>>>>
>>>> I asked because I don't understand your question either.
>>>>
>>>> Harbs wants something similar to a Vector, with two important features.
>>>>
>>>> 1) No runtime type checking.
>>>> 2) It should also be able to convert to and from an untyped Array with
>>>> some kind of simple cast at compile-time. At runtime, it is just an
>>>> untyped Array.
>>>>
>>>> I don't see how Uint8Array can work for this. As I understand it,
>>>> Uint8Array seems to be numeric only and isn't actually the same as an
>>>> Array.
>>>>
>>>> I should probably just leave it to him to explain, though. It's his
>>>> vision, and I'm just the guy implementing it for him.
>>>>
>>>> - Josh
>>>>
>>>> On 2019/06/14 20:58:34, Alex Harui <[email protected]> wrote:
>>>>> I'm not sure I understand the question. I suspect it would be up to the
>>>>> implementors of a typed array implementation to decide. There may not be
>>>>> one solution that works for everyone. The compiler could disallow it, or
>>>>> the implementation could AMF encode the instance, or the implementation
>>>>> could throw an error.
>>>>>
>>>>> -Alex
>>>>>
>>>>> On 6/14/19, 1:53 PM, "Josh Tynjala" <[email protected]> wrote:
>>>>>
>>>>> How do you store a String, or any random class, in Uint8Array?
>>>>>
>>>>> - Josh
>>>>>
>>>>> On 2019/06/14 20:31:28, Alex Harui <[email protected]> wrote:
>>>>>> IMO, I would not expect the edge cases around "abstract" and "private"
>>>>>> to impact future language features as those are only allowed as
>>>>>> "decorators" on definitions and those features, from a language
>>>>>> standpoint, allowed new keywords where the grammar already allowed
>>>>>> keywords.
>>>>>>
>>>>>> My concern around proposals for TypedArrays such as Array.<int> or int[]
>>>>>> are that those patterns can show up in a lot more places and if we don't
>>>>>> pick the right syntax, we'll be sorry later when we try to do typed
>>>>>> function signatures or generics or something else. AIUI, you have to
>>>>>> think through where else ".", "<", ">", "[" and "]" are used in the
>>>>>> language and make sure your new use for them won't cause conflicts now,
>>>>>> or even worse, in the future. And consider the general usability and
>>>>>> coercion rules and probably other things that I don't even know to
>>>>>> consider since I am not a language designer. Sure, Vector already uses
>>>>>> ".<>", but it appears those uses are mapped to a special construct in
>>>>>> the compiler, and that's why my suggestions for TypedArrays try to
>>>>>> provide directives for the output of that construct instead of adding a
>>>>>> new construct until we are sure that other future plans won't be
>>>>>> compromised by how we support TypedArrays now.
>>>>>>
>>>>>> For example, the name Vector implies one-dimension to me. But I could
>>>>>> imagine folks wanting to add support for multi-dimensional Arrays. Or
>>>>>> the equivalent of Java Maps.
>>>>>>
>>>>>> Or, what will be the proposed literal for Typed Arrays if you use
>>>>>> Array.<int>? Will it be the same or different from Vector literal?
>>>>>>
>>>>>> For sure, I don't think there is anybody active in the project who is
>>>>>> opposed to supporting new language features like generics, typed
>>>>>> functions and typed arrays. I'm just asking questions to make sure we
>>>>>> really need this work done now instead of doing something cheaper and
>>>>>> make sure folks who do work on it think through the future implications
>>>>>> of it.
>>>>>>
>>>>>> We already use directives to make "promises". For example, when you use
>>>>>> @royaleignorecoercion, you promise that no code paths will actually
>>>>>> depend on that coercion, you just added the coercion to keep the
>>>>>> compiler from complaining. And if it turns out you needed it, you'll
>>>>>> end up with a bug. We could do something similar now like
>>>>>> @royaleusetypedarrayforthisvector and if other code ends up turning off
>>>>>> the "fixed" property and push stuff you'll end up with a bug. I think
>>>>>> that would only take someone a week or less.
>>>>>>
>>>>>> Or as I asked earlier, why can't folks just use Uint8Array?
>>>>>>
>>>>>> HTH,
>>>>>> -Alex
>>>>>>
>>>>>> On 6/14/19, 11:08 AM, "Josh Tynjala" <[email protected]> wrote:
>>>>>>
>>>>>> I definitely understand your concern about potentially missing edge
>>>>>> cases, and having that cause problems in the future. That's why I've
>>>>>> been trying to make new language features disabled by default so that
>>>>>> folks need to knowingly opt in.
>>>>>>
>>>>>> In my opinion, we should have left abstract classes and private
>>>>>> constructors disabled by default for a while, until more people could
>>>>>> give them a try. These features haven't even been included in an
>>>>>> official release yet. While I have a pretty good set of unit tests for
>>>>>> each one, I'm sure that there are still some edge cases that I'll need
>>>>>> to address in the future.
>>>>>>
>>>>>> - Josh
>>>>>>
>>>>>>
>>>>>> On 2019/06/14 17:39:53, Alex Harui <[email protected]> wrote:
>>>>>>> IMO, it will be a significant amount of work to provide new syntax
>>>>>>> around typed collections to ActionScript. I cannot help here because I
>>>>>>> am not a language expert. Having interacted briefly with the
>>>>>>> ActionScript language team, I am certain I do not have the skills to
>>>>>>> help here and am concerned that we'll miss something and be sorry later.
>>>>>>>
>>>>>>> So, as long as folks are aware of that and still want to go forward,
>>>>>>> I'm not going to stand in their way. I am going to suggest easier ways
>>>>>>> that might save some time because I think there are bigger fish to fry
>>>>>>> with the limited folks we have contributing to Royale. I'd rather see
>>>>>>> a quick way of allowing folks to use TypedArrays to see how
>>>>>>> useful/important it is and then see if we can make Royale successful
>>>>>>> and recruit someone with language design experience.
>>>>>>>
>>>>>>> IOW, creating the general case implementation starting now may not be
>>>>>>> in the best interests of the project. I would rather we make migrating
>>>>>>> Flex code easier/faster, and those folks may not have time to consider
>>>>>>> changing their code to switch to TypedArrays.
>>>>>>>
>>>>>>> Just from some quick thinking, I would say that getting the parser to
>>>>>>> handle some new syntax is only 25% of the work. Another 10% is in
>>>>>>> getting the output right for JS, but the remaining 65% is handling
>>>>>>> semantics, ambiguity, and output to other runtimes.
>>>>>>>
>>>>>>> Also, since Array is "final", I think it would be more work to support
>>>>>>> Array.<int> than TypedArray.<int>. And probably even easier just to
>>>>>>> support the exact same classnames and APIs that JavaScript supports
>>>>>>> today. Is there some reason that Uint8Array doesn't work today?
>>>>>>>
>>>>>>> I'd prefer that we take the time to find an expert to help us really
>>>>>>> think through how we will implement generics in general in AS someday,
>>>>>>> and handle Typed Arrays as an initial implementation on that path so we
>>>>>>> don't later go "oh crap, if we hadn't picked this particular syntax for
>>>>>>> typed arrays, our generics support would be so much simpler!". I just
>>>>>>> know I cannot help here, but I caution against just copying what Java
>>>>>>> or Typescript does. I think there are patterns in ActionScript that
>>>>>>> are different from Java and TS that might factor in.
>>>>>>>
>>>>>>> So, go for it if you want, but please consider future ramifications.
>>>>>>>
>>>>>>> -Alex
>>>>>>>
>>>>>>> On 6/12/19, 5:20 PM, "Greg Dove" <[email protected]> wrote:
>>>>>>>
>>>>>>> Alex, javascript TypeArrays are fixed length at construction, so I
>>>>>>> really
>>>>>>> don't think that can work in general case for drop-in substitution of
>>>>>>> numeric Vector without some sort of wrapper class that supports
>>>>>>> swapping
>>>>>>> things out.
>>>>>>> I really think that dedicated 'fast' numeric collection types will
>>>>>>> likely
>>>>>>> need their own cross-target classes.
>>>>>>> It would work for a Vector that has a fixed = true constructor arg
>>>>>>> and then
>>>>>>> never changes its 'fixed' status (and therefore never changes its
>>>>>>> length
>>>>>>> also) and also only uses index access and assignments (no push, pop
>>>>>>> etc),
>>>>>>> but it's a pretty restrictive scenario. I did look at this already.
>>>>>>> It might also be possible to map default Vector numeric types to
>>>>>>> 'faster'
>>>>>>> versions for the 3 types, as an opt-in to the default implementation's
>>>>>>> approach. I do plan to work on/investigate this later this month,
>>>>>>> because I
>>>>>>> am keen to see performance-oriented options here too. But I was
>>>>>>> thinking
>>>>>>> they would likely be separate, dedicated classes.
>>>>>>>
>>>>>>>
>>>>>>> On Thu, Jun 13, 2019 at 11:27 AM Alex Harui <[email protected]>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> FWIW, I would expect any syntax changes to be a significant amount of
>>>>>>>> work
>>>>>>>> especially where the BURM does the semantic checks. New BURM patterns
>>>>>>>> are
>>>>>>>> probably required. Or maybe it is time to get the BURM out of the
>>>>>>>> semantic-check business for JS (and maybe SWF) output and figure out
>>>>>>>> how to
>>>>>>>> do the semantic checks from the JS AST walk.
>>>>>>>>
>>>>>>>> Did you out finding a way to indicate that some Vector.<int> should be
>>>>>>>> implemented as a TypedArray?
>>>>>>>>
>>>>>>>> -Alex
>>>>>>>>
>>>>>>>> On 6/12/19, 3:18 PM, "Josh Tynjala" <[email protected]> wrote:
>>>>>>>>
>>>>>>>> I plan to start out by supporting Array.<T> syntax, similar to
>>>>>>>> Vector.<T>. Like you said, there are advantages to using the same
>>>>>>>> syntax
>>>>>>>> for all typed collections.
>>>>>>>>
>>>>>>>> Later, I'll see if I can figure out how to add T[] syntax as an
>>>>>>>> alternative, since Harbs seems to like that better.
>>>>>>>>
>>>>>>>> - Josh
>>>>>>>>
>>>>>>>> On 2019/06/12 20:14:50, Greg Dove <[email protected]> wrote:
>>>>>>>>> Hey Josh,
>>>>>>>>>
>>>>>>>>> Thanks for looking into that, I figured it could be a bit tricky!
>>>>>>>> Good luck
>>>>>>>>> with it.
>>>>>>>>> I think you and Harbs were maybe leaning to towards Number[] and
>>>>>>>> String[]
>>>>>>>>> type declarations. I don't mind either way, but perhaps the Array.
>>>>>>>> with
>>>>>>>>> angle brackets approach that is used for Vectors could make it
>>>>>>>> easier to
>>>>>>>>> swap between typed Array and Vector if people consider refactoring
>>>>>>>> (and
>>>>>>>>> whatever IDE they're using won't support more automated changes).
>>>>>>>> OTOH, the
>>>>>>>>> first approach is definitely easier to type. You probably already
>>>>>>>> thought
>>>>>>>>> those things through though, I guess.
>>>>>>>>>
>>>>>>>>> If you end up with a remote branch for your work on this at some
>>>>>>>> point and
>>>>>>>>> want someone to help with testing or anything like that, I'm in,
>>>>>>>> just let
>>>>>>>>> me know.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Jun 13, 2019 at 2:26 AM Josh Tynjala <[email protected]>
>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>>> I think your other proposal with Josh for the typed Arrays and
>>>>>>>> their
>>>>>>>>>> greater compile-time safety will be a better fit for many cases as
>>>>>>>> well, so
>>>>>>>>>> I hope that happens.
>>>>>>>>>>
>>>>>>>>>> I started working on typed arrays this week. It may be a while
>>>>>>>> before I
>>>>>>>>>> can merge, though. It's definitely more complex than private
>>>>>>>> constructors
>>>>>>>>>> and abstract classes.
>>>>>>>>>>
>>>>>>>>>> - Josh
>>>>>>>>>>
>>>>>>>>>> On 2019/06/12 04:21:18, Greg Dove <[email protected]> wrote:
>>>>>>>>>>> Hi Harbs - just in reply to your specific questions:
>>>>>>>>>>> As I mentioned elsewhere it is easy to have full speed index
>>>>>>>> access and
>>>>>>>>>>> also full speed pop() and unshift() methods
>>>>>>>>>>> If you switch off the first 3 settings I outlined in the post
>>>>>>>> titled
>>>>>>>>>>> 'Language/Reflection improvements details' you will have that.
>>>>>>>> Those
>>>>>>>>>>> settings are switchable locally with doc directives as well. I
>>>>>>>> will do a
>>>>>>>>>>> full write-up this coming weekend for docs. Hopefully I can
>>>>>>>> harvest a lot
>>>>>>>>>>> of what I already wrote elsewhere for that.
>>>>>>>>>>> BTW I switched TLF to use the legacy Vector-as-Array approach by
>>>>>>>>>> default, I
>>>>>>>>>>> am not sure what you want there, you could undo that if you
>>>>>>>> prefer.
>>>>>>>>>>>
>>>>>>>>>>> Beyond the above mentioned approaches for (mainly index level)
>>>>>>>>>>> optimization, I have a preference for two more approaches, but
>>>>>>>> I'd rather
>>>>>>>>>>> limit the overall number of options to be what people definitely
>>>>>>>> need
>>>>>>>>>>> instead of adding too many options (which could create
>>>>>>>> confusion). I
>>>>>>>>>> think
>>>>>>>>>>> your other proposal with Josh for the typed Arrays and their
>>>>>>>> greater
>>>>>>>>>>> compile-time safety will be a better fit for many cases as well,
>>>>>>>> so I
>>>>>>>>>> hope
>>>>>>>>>>> that happens. If I have time to help out in any way with that, I
>>>>>>>> would be
>>>>>>>>>>> happy to do so as well, because it sounds like something I would
>>>>>>>> use a
>>>>>>>>>> lot.
>>>>>>>>>>> Anyhow, I do want to support more optimizations with this
>>>>>>>> implementation.
>>>>>>>>>>> Can you say what your main concerns would be for optimization?
>>>>>>>> Is it
>>>>>>>>>> mainly
>>>>>>>>>>> for 'push' (and unshift) ? Those would be mine...
>>>>>>>>>>>
>>>>>>>>>>> I would personally like to see the following:
>>>>>>>>>>>
>>>>>>>>>>> 1. A global optimization setting that affects all instances in
>>>>>>>> all code
>>>>>>>>>>> including pre-built library code. This would avoid certain
>>>>>>>> runtime checks
>>>>>>>>>>> and would also result in a lighter implementation. This is
>>>>>>>> something the
>>>>>>>>>>> final application developer decides, not anything dictated by a
>>>>>>>> library
>>>>>>>>>>> developer (but a library developer could advertise their public
>>>>>>>> swc as
>>>>>>>>>>> being compatible/safe with this type of optimization). This
>>>>>>>> approach
>>>>>>>>>> could
>>>>>>>>>>> include perhaps 2 levels: one to remove any code paths related
>>>>>>>> to fixed
>>>>>>>>>>> length Vectors (which I think you said you never used) for
>>>>>>>> example. Then
>>>>>>>>>>> another possibly removing all element level type-checking as
>>>>>>>> another
>>>>>>>>>> level.
>>>>>>>>>>> Adding this should not be too difficult I think and would be
>>>>>>>> determined
>>>>>>>>>> via
>>>>>>>>>>> a goog define (which might be driven by a compiler setting, I
>>>>>>>> did not
>>>>>>>>>> look
>>>>>>>>>>> at how easy this is yet). The thing I like about this approach
>>>>>>>> is that it
>>>>>>>>>>> is not 'baked-in' to any instance and the application developer
>>>>>>>> makes the
>>>>>>>>>>> ultimate decision and owns the associated risk (as opposed to
>>>>>>>> having it
>>>>>>>>>>> imposed on them by a library developer, for example). I think
>>>>>>>> the removal
>>>>>>>>>>> of support for 'fixed' Vectors could probably be made to generate
>>>>>>>>>>> (debug-only) errors if there is code that runs that sets fixed
>>>>>>>> to true on
>>>>>>>>>>> any Vector instance - to provide some reassurance of no side
>>>>>>>> effects
>>>>>>>>>> when
>>>>>>>>>>> choosing this option.
>>>>>>>>>>>
>>>>>>>>>>> 2. Compilation scoped optimizations.
>>>>>>>>>>> By 'compilation-scoped' I mean configurable in the same way as
>>>>>>>> the
>>>>>>>>>>> vector-index-check suppression: An over-arching config setting
>>>>>>>> for the
>>>>>>>>>>> current compilation that can be overridden locally with doc
>>>>>>>> comment
>>>>>>>>>>> directives. This affects code sites (or all current compilation
>>>>>>>> scope if
>>>>>>>>>>> set in the config) and not specific instances. I would hope this
>>>>>>>> might be
>>>>>>>>>>> the only other 'Vector' specific config option like this, simply
>>>>>>>> to avoid
>>>>>>>>>>> confusion with too many options.
>>>>>>>>>>> So I personally think the important things here are the push and
>>>>>>>> unshift
>>>>>>>>>>> methods, because they're the ones that are also most often used
>>>>>>>> in loops
>>>>>>>>>>> when index level access or assignment is not being used (in the
>>>>>>>> loop).
>>>>>>>>>> But
>>>>>>>>>>> I'm keen to hear more about what people want in case it's
>>>>>>>> different to
>>>>>>>>>> how
>>>>>>>>>>> I think. And I will add support for what best represents the
>>>>>>>> needs of the
>>>>>>>>>>> community. While index level access is best for large loops
>>>>>>>> (just as it
>>>>>>>>>> is
>>>>>>>>>>> for 'Array'), push could be preferred in small loops because it
>>>>>>>> does not
>>>>>>>>>>> require a 'get' for length to establish the upper bound of the
>>>>>>>> loop or
>>>>>>>>>> the
>>>>>>>>>>> next acceptable index to set (for non-fixed Vectors). The
>>>>>>>> optimization
>>>>>>>>>> for
>>>>>>>>>>> push in this case would be to bypass runtime typechecking and
>>>>>>>> just do a
>>>>>>>>>>> regular Array.push into the underlying Vector representation,
>>>>>>>> which is
>>>>>>>>>>> still actually an Array in terms of how javascript sees it.
>>>>>>>> Adding this
>>>>>>>>>>> option is easy also, but rather than just forging ahead with it,
>>>>>>>> I am
>>>>>>>>>> keen
>>>>>>>>>>> to get input from others first.
>>>>>>>>>>>
>>>>>>>>>>> I consider that specific instance level optimizations (in
>>>>>>>> general) are
>>>>>>>>>>> 'dangerous' because even if the code is 'safe' when it is
>>>>>>>> originally
>>>>>>>>>>> written, subsequent changes to the overall codebase (possibly by
>>>>>>>>>> different
>>>>>>>>>>> developers) can mean that an instance ends up elsewhere in code
>>>>>>>> where it
>>>>>>>>>>> behaves differently from other instances of the same type.
>>>>>>>> Code-site
>>>>>>>>>>> optimizations could also create an unusual internal state for an
>>>>>>>>>> instance,
>>>>>>>>>>> but most often they should not, because the code site where the
>>>>>>>>>>> optimization is used should be validated in terms of the
>>>>>>>> optimization by
>>>>>>>>>>> its original developer (e.g. no runtime type checking at a
>>>>>>>> particular
>>>>>>>>>> usage
>>>>>>>>>>> site because it is never needed in the context of that code, for
>>>>>>>> example)
>>>>>>>>>>> and the behavior of the same instance elsewhere should be much
>>>>>>>> less of a
>>>>>>>>>>> risk.
>>>>>>>>>>>
>>>>>>>>>>> More feedback from you or anyone else is definitely welcome for
>>>>>>>> what they
>>>>>>>>>>> want to see for optimization options of the implementation. I'm
>>>>>>>> sure I
>>>>>>>>>> can
>>>>>>>>>>> still find more ways to improve the implementation for speed as
>>>>>>>> it is now
>>>>>>>>>>> as well, I can think of a one thing I want to investigate
>>>>>>>> further.
>>>>>>>>>>> -Greg
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Jun 12, 2019 at 1:54 AM Harbs <[email protected]>
>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Practical question for me is: How do we disable to Vector
>>>>>>>> runtime
>>>>>>>>>>>> checking? I was having trouble following the full discussion.
>>>>>>>> My
>>>>>>>>>>>> understanding was that there’s a compiler flag, but I’m not
>>>>>>>> sure what
>>>>>>>>>> it is.
>>>>>>>>>>>>
>>>>>>>>>>>>> On Jun 11, 2019, at 7:10 AM, Yishay Weiss <
>>>>>>>> [email protected]>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Language.js:868 [1] is
>>>>>>>>>>>>>
>>>>>>>>>>>>> if (elementType.indexOf('Vector.<') == 0) {
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> ________________________________
>>>>>>>>>>>>> From: Yishay Weiss <[email protected]>
>>>>>>>>>>>>> Sent: Tuesday, June 11, 2019 2:07:36 PM
>>>>>>>>>>>>> To: [email protected]
>>>>>>>>>>>>> Subject: Problem with Vectors
>>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Greg,
>>>>>>>>>>>>>
>>>>>>>>>>>>> I just updated Royale and I’m seeing that in our class
>>>>>>>> FontLoader
>>>>>>>>>>>>>
>>>>>>>>>>>>> private var _fonts:Vector.<Font> = new Vector.<Font>();
>>>>>>>>>>>>>
>>>>>>>>>>>>> gets transpiled to
>>>>>>>>>>>>>
>>>>>>>>>>>>> this.com_printui_text_engine_FontLoader__fonts =
>>>>>>>>>>>> org.apache.royale.utils.Language.Vector();
>>>>>>>>>>>>>
>>>>>>>>>>>>> Notice how the type isn’t given in Vector’s constructor. This
>>>>>>>>>> results in
>>>>>>>>>>>> a runtime error [1]. Any ideas?
>>>>>>>>>>>>>
>>>>>>>>>>>>> [1]
>>>>>>>>>>>>>
>>>>>>>>>>>>> TypeError: Cannot read property 'indexOf' of null
>>>>>>>>>>>>> Watch
>>>>>>>>>>>>> Call Stack
>>>>>>>>>>>>>
>>>>>>>> org.apache.royale.utils.Language.VectorSupport.vectorElementCoercion
>>>>>>>>>>>>> Language.js:868
>>>>>>>>>>>>> org.apache.royale.utils.Language.synthVector
>>>>>>>>>>>>> Language.js:642
>>>>>>>>>>>>> org.apache.royale.utils.Language.Vector
>>>>>>>>>>>>> Language.js:685
>>>>>>>>>>>>> com.printui.text.engine.FontLoader
>>>>>>>>>>>>> FontLoader.js:24
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>
>>>
>>
>>
>>