New operators opStaticIndex and friends
Ahmet Sait
nightmarex1337 at hotmail.com
Tue May 14 20:07:03 UTC 2019
On Tuesday, 14 May 2019 at 18:35:51 UTC, H. S. Teoh wrote:
> On Tue, May 14, 2019 at 06:13:18PM +0000, Ahmet Sait via
> Digitalmars-d wrote:
>> On Tuesday, 14 May 2019 at 15:49:51 UTC, Q. Schroll wrote:
>> > I whish, D has these operators:
>> >
>> > opStaticIndex
>> > opStaticIndexAssign
>> > opStaticIndexOpAssign
>> > opStaticSlice
>>
>> I think this is solving the wrong problem. If compiler
>> provided means to check whether a parameter is known at
>> compile time easily & consistently these would not be
>> necessary at all. Of course, talk is cheap and actually
>> implementing such new __traits is rather compilcated.
>
> Again, people are getting confused by the overloaded term
> "compile-time". People really need to read this:
>
> https://wiki.dlang.org/User:Quickfur/Compile-time_vs._compile-time
>
> (Sorry for the shameless self-plug.)
>
> opStaticIndex is necessary because it pertains to the *AST
> manipulation* phase of compilation, whereas opIndex pertains
> the executable phase (CTFE and/or runtime). It's meaningless
> to "check whether a parameter is known at compile time" because
> you cannot go back to the AST manipulation stage after you have
> passed semantic analysis, which is when types are resolved and
> things like VRP are applied.
>
>
> T
I've read it before, and read it again now just to be sure.
Obviously such functions (the ones that check whether a variable
is known at CT) need to be templates and get instantiated on
every call to actually work.
Something close to this:
auto opIndex()(size_t i)
{
enum types = [ "double", "long", "int" ];
static if (__traits(isKnownAtCT, i))
{
static if (i < types.length)
return mixin("cast(" ~ types[i] ~ ")i");
else
return "Here be dragons";
}
}
More information about the Digitalmars-d
mailing list