What type functions mean on a language level

12345swordy alexanderheistermann at gmail.com
Fri Jan 1 23:32:25 UTC 2021


On Friday, 1 January 2021 at 23:26:58 UTC, Stefan Koch wrote:
> Good Evening and Happy new year to everyone.
>
> After a stressful move to the UK in uncertain times, I am now 
> free and able to enjoy the last day of my holiday.
>
> I am currently not working on DMD but on a different hobby 
> project instead.
>
> So with some distance between me and the implementation details 
> I think it's a good idea to talk about what type functions mean 
> for the language (regardless of all the architecture issues  in 
> DMD which make an implementation iffy)
>
> Specification wise type functions require two statements to be 
> added.
>
> "Under certain conditions a type may be implicitly converted to 
> a value of type __type__."
> and
> "Under certain conditions a value of type __type__ may be 
> converted to a type."
>
> That's it.
>
> Everything else is just working regularly with value and 
> expressions.
>
> let me give you an example.
>
> enum TK
> {
>   Integral,
>   Floating,
>   Other,
> }
>
> string ts(__type__ t)
> {
>   switch (t)
>   {
>      case ubyte, byte, ushort, short, int, uint, long, ulong:
>          return TK.Integral;
>      case double, float, real :
>          return TK.Floating;
>      default:
>          return TK.Other;
>   }
> }
>
>
> this looks like it would require a new construct right?
> infact it does not.
>
> since the types are used in a ctfe context where values are 
> expected they get implicitly converted to values.
>
> so what happens is:
> string ts(__type__ t)
> {
>      case cast(__type__)ubyte, cast(__type__)byte, 
> cast(__type__)ushort, cast(__type__)short, cast(__type__)int, 
> cast(__type__)uint, cast(__type__)long, cast(__type__)ulong:
>          return TK.Integral;
>      case cast(__type__)double, cast(__type__)float, 
> cast(__type__)real :
>          return TK.Floating;
>      default:
>          return TK.Other;
>   }
> }
>
> which converts the types into values, the same stuff as 
> integers :)
> and since a switch works with integers it works with types as 
> well.
>
> And that is precisely the reason why I was so excited about my 
> invention/discovery.
>
> It just fits in. And requires minimal changes to the spec.
>
> You will see that I've punted on the definition of the 
> circumstances in which the implicit conversion from type to 
> value and vice versa may occur.
> That's just to keep the post short and avoid many long and 
> boring words ;)
>
> I do hope you get as excited as me when reading this.
>
> Regards,
> Stefan

Why can't __type__ be named "any" as indication that it is a top 
type for all types?


More information about the Digitalmars-d mailing list