static this sucks, we should deprecate it
Christopher Wright
dhasenan at gmail.com
Wed Jun 3 19:38:42 PDT 2009
grauzone wrote:
>> I had the same problem when writing the D/Objective-C bridge.
>> Basically, if you ask the Objective-C runtime to instanciate a class
>> not previously registered, it won't find it. My choice was to require
>> manual pre-registrations of the classes you want to use, and register
>> everything that is possible lazily as soon as you use a bridged class.
>
> Yes, and that "pre-registration" is only there to make the compiler
> generate the required compile-time reflection code (like with .tupleof
> or __traits). While compile-time reflection is probably really more
> flexible than runtime reflection, requiring this kind of "registration"
> remains a weakness of the compile-time approach.
>
> Solutions would be to make reflection fully dynamic (as you said) and
> extend RTTI for that, or to provide better ways to inspect modules as a
> whole.
>
> For the latter, maybe __traits should just be able to inspect all
> members of a module, and to follow imports. Or one could introduce some
> kind of "module preprocessor", which enables you to execute code for
> each module at compile time (transparent for the processed module).
>
> Just by the way, annotations would also be nice. It's annoying to add
> additional information to members without them. This "additional
> information" can be stuff like default values, versioning of
> serializable members, behavior for missing values on deserialization,
> human readable help text if you want to use reflection to read/write
> user configuration files...
I've seen four good uses of annotations in the past that could not
easily be replaced:
- dependency injection configuration
- ORM configuration
- event broker registration (this method should be called on this event)
- test method/class registration
This brings up an issue. Let's say I use static constructors to
configure a serialization library, then use a static constructor to read
objects using this serialization library. There's no way to define an
order in which static constructors should be run within a module, but
here it makes a huge difference. It would be very convenient to have as
much of this configuration as possible in a readable format and not
static constructors.
More information about the Digitalmars-d
mailing list