Ah, got it, Josh, sorry I missed the detail earlier.

I'm keen to be involved when time permits (not soon I'm afraid) to make
sure we get 'current' if we can.

I haven't kept up on openfl, but it sounds like what you did there with
WeakRef for event listeners was the same thing I had in mind. I will have
to take another look at haxe etc, I used to be active in that community a
long (long!) time ago.

-Greg


On Tue, Feb 25, 2025 at 5:40 AM Josh Tynjala <joshtynj...@bowlerhat.dev>
wrote:

> I should be clear that I'm specifically trying to use the module system
> that was introduced in ES2015 as an alternative to our current use of goog
> module. Nothing else introduced in ES2015 is currently on my radar. If
> there are other features introduced in ES2015 (or later) standards that
> would improve our generated JS, we should definitely talk about those.
> However, I consider that a separate task from the one that I'm working on
> right now.
>
> --
> Josh Tynjala
> Bowler Hat LLC <https://bowlerhat.dev>
>
>
> On Sat, Feb 22, 2025 at 12:22 PM Greg Dove <greg.d...@gmail.com> wrote:
>
> > Nice, Josh. Did you also consider making the leap to es2022 ?
> > Whatever concerns people have about browser support levels may not be
> > irrelevant, not just because they may not be in - for example - another 2
> > years or so, but because I believe GCC supports transpiling es2022 down
> to
> > es2015 or es6 for the minified release build, in any case. And debugging
> in
> > debug builds (and possibly native reflection etc) with es2022 output
> would
> > be easier with things like private class members etc.
> >
> >
> > On Sun, Feb 23, 2025 at 7:45 AM Harbs <harbs.li...@gmail.com> wrote:
> >
> > > An ECMA 2015 target sounds really good!
> > >
> > > Out of curiosity: Is dealing with circular dependencies any tricker
> with
> > > that target than goog.provide?
> > >
> > > Maybe we should coordinate the work on migrating events?
> > >
> > > > On Feb 21, 2025, at 6:48 PM, Josh Tynjala <joshtynj...@bowlerhat.dev
> >
> > > wrote:
> > > >
> > > > I'm currently working to implement a new Royale target that outputs
> > > > ECMAScript 2015 standard modules instead of goog.provide modules. I
> > got a
> > > > pure AS3 project working well with native imports, but once I start
> > > trying
> > > > to use anything involving EventDispatcher, the GCL dependencies
> become
> > a
> > > > hurdle. It looks like I either still need to continue to call
> > > > goog.require() for those classes specifically (but I'm actually
> hoping
> > to
> > > > get rid of the base.js loader from GCL for this target), or I need to
> > > > generate <script> tags in the HTML for the GCL classes that are
> > > referenced.
> > > >
> > > > --
> > > > Josh Tynjala
> > > > Bowler Hat LLC <https://bowlerhat.dev>
> > > >
> > > >
> > > > On Fri, Feb 21, 2025 at 12:02 AM Harbs <harbs.li...@gmail.com>
> wrote:
> > > >
> > > >> One of the things I’ve wanted to tackle for a long time is getting
> rid
> > > of
> > > >> the dependency on goog events.
> > > >>
> > > >> There’s really no technical reason why we still need it. Most of the
> > > >> advantage of the goog event library is with handling really old
> > browsers
> > > >> which there’s no reason to support anymore.
> > > >>
> > > >> Harbs
> > > >>
> > > >>> On Feb 21, 2025, at 7:03 AM, Greg Dove <greg.d...@gmail.com>
> wrote:
> > > >>>
> > > >>> Thanks Josh, that's all helpful to know.
> > > >>>
> > > >>> iirc I think we are also currently blocked from updating our
> closure
> > > >>> compiler version because of some local subclasses or overrides
> where
> > > the
> > > >>> base classes or implementation was changed inside in a more recent
> > GCC
> > > >>> version, but it's been some time since I tried to look into that,
> so
> > I
> > > >>> might be wrong.
> > > >>>
> > > >>> In terms of events, I'd be happy to look at that in several months
> > time
> > > >> if
> > > >>> we can wait, I will likely not find time before that.
> > > >>>
> > > >>> Lots of things changed in js since the start, and it seems that if
> we
> > > >>> really wanted to we could support weak event listeners now, for
> > > example.
> > > >>>
> > > >>> more modern outputs from our compiler are another future option,
> > which
> > > >>> might make debugging in the js version of the code much easier.
> > > >>>
> > > >>> -Greg
> > > >>>
> > > >>>
> > > >>>
> > > >>> On Fri, Feb 21, 2025 at 12:20 PM Josh Tynjala <
> > > joshtynj...@bowlerhat.dev
> > > >>>
> > > >>> wrote:
> > > >>>
> > > >>>> Hi team,
> > > >>>>
> > > >>>> Today, I noticed that the GitHub repo for Google's Closure Library
> > is
> > > >> now
> > > >>>> archived/read-only, and the README contains the following message.
> > > >>>>
> > > >>>> Closure Library has been archived. We no longer see it as meeting
> > the
> > > >> needs
> > > >>>>> of modern JavaScript development, and we recommend that users
> look
> > > for
> > > >>>>> alternative solutions.
> > > >>>>>
> > > >>>>> Please see https://github.com/google/closure-library/issues/1214
> > for
> > > >>>> more
> > > >>>>> details.
> > > >>>>
> > > >>>>
> > > >>>> This applies to Closure Library only. We also use the related
> > Closure
> > > >>>> Compiler in Royale. Google addresses Closure Compiler specifically
> > in
> > > >> the
> > > >>>> issue mentioned above:
> > > >>>>
> > > >>>> We still believe that Closure Compiler is the best advanced
> > optimizer
> > > in
> > > >>>>> terms of minified size, as long as it can assume that all input
> > code
> > > >>>> meets
> > > >>>>> its strict requirements. While these requirements are sometimes
> > > >> difficult
> > > >>>>> to guarantee for hand-written JavaScript, it's still very
> relevant
> > > as a
> > > >>>>> compilation target for languages such as Java (via J2cl) or C++
> > (via
> > > >>>>> emscripten), which can enforce the compiler's requirements more
> > > >>>>> effectively. For users hand-writing JavaScript, we see TypeScript
> > as
> > > a
> > > >>>>> better authoring language, even if Closure Compiler continues to
> be
> > > >> used
> > > >>>>> for optimization.
> > > >>>>>
> > > >>>>> All this said, Closure Compiler and Library have a number of
> > > >> intersection
> > > >>>>> points where they interdepend on one another. We are committed to
> > > >>>> retaining
> > > >>>>> the core functionality in Closure Compiler, while dropping its
> > > >> dependency
> > > >>>>> on Closure Library. This includes Closure dependency management (
> > > >>>>> goog.module, goog.require, etc), reflection (goog.reflect.object,
> > > >>>>> goog.reflect.objectProperty), defines (goog.define), and a few
> > > others.
> > > >>>>
> > > >>>>
> > > >>>> So even if we decide to eventually drop Closure Library, we can
> > > >> continue to
> > > >>>> use Closure Compiler to create optimized release builds.
> > > >>>>
> > > >>>> It also appears that we can continue to use the
> > > >> goog.provide/goog.require
> > > >>>> module system with Closure Compiler. The parts of Closure Library
> > that
> > > >>>> include the module system appear to have been migrated (or are in
> > the
> > > >>>> process of being migrated) to Closure Compiler here:
> > > >>>>
> > > >>>> https://github.com/google/closure-compiler/tree/master/lib
> > > >>>>
> > > >>>> In the royale-asjs codebase, you can search for "import goog." to
> > > >> discover
> > > >>>> which other parts of Closure Library that we currently use in
> > Royale.
> > > >>>> Ideally, that usage should probably start trending downward.
> > > >>>>
> > > >>>> We use the goog.html package for HTML sanitation. I see that
> Google
> > > >>>> specifically recommends the following library as a replacement:
> > > >>>>
> > > >>>> https://github.com/google/safevalues
> > > >>>>
> > > >>>> Our biggest use is probably of the goog.events package. I think
> that
> > > we
> > > >> can
> > > >>>> reduce some of it relatively easily (like the
> goog.events.EventType
> > > >>>> constants). Calls to goog.events.listen() may be easy to replace
> > too.
> > > >>>>
> > > >>>> However, the trickiest part is our EventDispatcher class that
> > extends
> > > >>>> goog.events.EventTarget. Extending goog.events.EventTarget instead
> > of
> > > >>>> writing a custom implementation was probably mostly for
> convenience.
> > > If
> > > >> we
> > > >>>> want to replace it with our own custom implementation, we'll
> > > definitely
> > > >>>> want a good set of automated tests to ensure no regressions.
> > Starling
> > > >>>> Framework, an AS3 library with its own EventDispatcher
> > implementation,
> > > >> has
> > > >>>> a good set of tests that we might consider adopting, if we choose
> to
> > > >>>> migrate away from goog.events.EventTarget.
> > > >>>>
> > > >>>> Anyway, I just wanted to spread awareness of the state of Closure
> > > >> Library,
> > > >>>> since we currently depend on it. It was officially deprecated in
> > > >> November
> > > >>>> 2023, and archived and made read-only in August 2024.
> > > >>>>
> > > >>>> --
> > > >>>> Josh Tynjala
> > > >>>> Bowler Hat LLC <https://bowlerhat.dev>
> > > >>>>
> > > >>
> > > >>
> > >
> > >
> >
>

Reply via email to