On 12/12/16, 9:13 AM, "Josh Tynjala" <joshtynj...@gmail.com> wrote:

>Yeah, if we could make it work without creating a SWC, I think that would
>be ideal. The fewer steps it takes to add third-party libraries to a
>project, the better.
>
>I notice that you seem to have a preference for custom ASDoc tags, like
>@externs or @flexjsignorecoercion for changing the compiler's behavior.
>Why
>not metadata, like [Extern] or [IgnoreCoercion], instead? Personally,
>using
>ASDoc tags for something other than documentation doesn't feel quite right
>to me. Metadata has long been used to pass extra information to the
>compiler, though. Plus, if something needs more complex configuration,
>metadata is more like setting properties on an object:
>[Metadata(option1="true",option2="hello world")]. I've been meaning to ask
>you about this for a while, but I kept forgetting.

I tend to offer up custom ASDoc tags as compiler directives because Google
Closure Compiler uses a similar JSDoc tag set in a similar way.  It
controls the output and doesn't always need to be kept around after the
compile.

IIRC, the compiler and runtime teams thought Metadata was an overused
mess.  It has several inconsistent uses.  I think only [Bindable] actually
is a compiler directive that alters the compiler output.  Other metadata
is used by MXML and IDEs to declare events and styles but doesn't alter
the byte code of the class it annotates other than being stored in the SWC
and deleted from the final SWF.  All other metadata, including Bindable,
are annotations stored in the code for use by the code, where it is
hard.slow to access in Flash.

@externs could be [Externs] since it is needed after compile time, but I
can't think of a good reason to store it in the byte code.  It isn't
needed by MXML, IDEs, or at runtime, and has to appear in the JSDoc output
so the Google Closure Compiler can use it.

Of course, I could be convinced otherwise...
-Alex

Reply via email to