Dynamic language
Adam D. Ruppe
destructionator at gmail.com
Fri Mar 16 16:41:36 PDT 2012
On Friday, 16 March 2012 at 11:22:07 UTC, Boscop wrote:
> How would it be possible, the type of the delegate can't be
> typechecked at the call-site, because the type info is lost in
> the variant.
The trick is to build wrapper functions at the assignment
point, where you still have all the type info.
I showed that with the wrap() template in the implementation
in a previous post - std.traits.ReturnType and
std.traits.ParameterTypeTuple help a lot there.
This same technique can do all kinds of conversions: I
use it to do strings -> calls for web apps and Variant ->
calls for this dynamic thing, weak typing, and script
interaction.
Remember, that while the wrapper is showed at the
assignment type, it is a compile time thing to
build the wrapper, so the assignment is still cheap.
The call has a small runtime hit though, since it does
the type conversions or checks there.
If you wanted strict type checking, it could probably
be fast; Variant.get() has a small cost.
More information about the Digitalmars-d
mailing list