Daniel Keep wrote:

language_fan wrote:
Wed, 16 Sep 2009 12:41:06 +0200, Fawzi Mohamed thusly wrote:

On 2009-09-16 02:40:02 +0200, Justin Johansson
<proc...@adam-dott-com.au> said:
A colleague of mine is suggesting that I really do take a closer look
at D2 now but I'm not sure that I'm ready to go standing on the
bleading bleading (the blood doesn't clot) edge just right yet. :-(

JJ
Tango has variant (tango.core.Variant), and is D1, if that could be an
option for you.

Tango and Phobos2's Variants are very different beasts.

Phobos2's Variant is a discriminated union; you give it a set of types,
and that's what it can store.  The general-purpose one, I believe, can
store any type so long as it's no larger than the biggest primitive
types (it can't store big structs or static arrays, for example).

std.variant includes three parameterized types. One is the backend VariantN, which has the maximum size as a template argument, so it can accommodate any type size as long as the maximum is known in advance. The second is Algebraic, which is useful when you want to model a holder for any of a finite and known set of types. Essentially Algebraic aliases itself to VariantN with an appropriately computed maximum size.

Finally, there is the generic Variant which can hold any type in an unbounded set. Until last dmd release, Variant had the limitation that types larger than a delegate could not be stored directly. I fixed that, so now for large types Variant uses dynamic allocation and pointers under the wraps.

I have big plans with Variant - I want to make it (or a related type) the variable type common in dynamic languages, with flexibility, dynamic invocation using common syntax, the works. So if you write a short script and want dynamic typing, you should be able to use Variant throughout.


Andrei

Reply via email to