ObjectMap hides the whole WeakMap vs. Map vs. Object / any stuff, so it
just seems convenient, while still trying to be performant and reducing
strong references.

Worked well for XMLNotifier.



On 11/13/2021 6:12 PM, Greg Dove wrote:
> Using ObjectMap could be an option if you want both SWF and JS code to run,
> but is not really warranted IMO if the main goal is to migrate away from
> SWF, because the api is the same as Map, and is indirect use of the Map  -
> so why add the extra overhead? Also if you can avoid switching the original
> code to the new api in some cases, when all that is needed (for string
> keys) is an object hash, so that's why I think that's a bit easier. After
> porting 8 or 9 codebases now, this is simply the approach I have settled on
> in these cases.
>
> What I hope to do is get something similar to work, but for it to use the
> original dynamic access that works for flash.utils.Dictionary for both
> targets instead of switching both implementations to use the approach that
> Map uses (get/set/delete methods). That's not possible simply using
> javascript Proxy, but it will be possible using some compiler smarts and
> internal use of WeakRef in js implementation in the case of weak keys.
> Something for later...
>
>
>
>
>
> On Sun, Nov 14, 2021 at 12:57 PM Edward Stangler 
> wrote:
>
>> Why not use org.apache.royale.utils.ObjectMap?
>>
>>
>>
>> On 11/13/2021 3:24 PM, Greg Dove wrote:
>>> Sure, if you want, Andrew. This is the way I do it currently, and in some
>>> cases this has been done within the current framework code (e.g. in Crux
>>> code there is some use of Map to replace Dictionary in js, iirc)
>>>
>>> I do expect to come up with an approach that works much closer to the
>>> original flash Dictionary using a combination of compiler support,
>> similar
>>> to thej [RoyaleArrayLike] support and framework code (which would use the
>>> relatively recent WeakRef support in js).
>>> I also believe it will be possible to match flash event listener apis
>> with
>>> support for weak listeners (also using WeakRef - and I would add event
>>> priority support at the same time).
>>> But both of these updates would be opt-in and would only be for quite
>>> modern browsers, but would allow for more unchanged code when porting
>>> legacy apps. At the moment these are just ideas/vague plans, I need to
>> find
>>> the time for that.
>>>
>>>
>>>
>>>
>>> On Sun, Nov 14, 2021 at 10:07 AM Andrew Wetmore wrote:
>>>
>>>> Greg, can I throw that into documentation as a workaround?
>>>>
>>>> On Sat., Nov. 13, 2021, 4:45 p.m. Greg Dove, wrote:
>>>>
>>>>> Hi Hugo,
>>>>>
>>>>> I might change this in the near future. But for now, here is the
>> general
>>>>> 'rule of thumb' that I use:
>>>>>
>>>>> If the instance only has string keys (or int/uint/Number/Boolean keys
>>>>> should be ok too) then use a plain Object. All code can pretty much
>> then
>>>>> remain unchanged.
>>>>>
>>>>> If it is using object instances (any complex object like functions or
>>>> class
>>>>> instances, or generic object instances) as keys, then
>>>>>
>>>>> a) use native js Map if the original constructor argument does not have
>>>>> weakKeys=true, or if it has weakKeys= true and there is any form of
>>>>> iteration over keys (you cannot iterate over keys in a WeakMap in
>>>>> javascript)
>>>>>
>>>>> b) otherwise use WeakMap.
>>>>>
>>>>> Both (a) and (b) require you to change code for get/set ([]
>>>>> access/assignment in as3) or delete operator, and also code related to
>>>>> iteration (use map.forEach in js).
>>>>> see docs for those:
>>>>>
>>>>>
>> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map
>> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakMap
>>>>>
>>>>>
>>>>> On Sun, Nov 14, 2021 at 9:34 AM Hugo Ferreira <hferreira...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I see that there is no Dictionary on Royale, probably because there is
>>>> a
>>>>>> better method.
>>>>>> What the approach in Royale for a Dictionary ?
>>>>>>
>>

Reply via email to