Thread overview
Re: Idea for getting rid of "static" on methods
Dec 02, 2007
Mike
Dec 03, 2007
Matti Niemenmaa
Dec 03, 2007
Christopher Wright
Dec 03, 2007
Matti Niemenmaa
Dec 03, 2007
Christopher Wright
Dec 03, 2007
Matti Niemenmaa
December 02, 2007
This reminds me of this:

http://forums.worsethanfailure.com/forums/thread/82701.aspx

Maybe we could try the same with D :)

BCS Wrote:

> Reply to Matti,
> 
> > BCS wrote:
> > 
> >> Free kudos* to the first person to get a haiku of key words to compile.
> >> 
> > protected static
> > this() { if (new short) assert (is(
> > typeof(typeid(int)))); }
> >> Anyone want to go for a limerick?
> >> 
> > static assert (is(typeof(new short)));
> > static this() { if (new short is new short)
> > volatile if (true)
> > try { debug null; do {}
> > while (false); } catch { return new ushort;}}
> > Both compile with 1.024. With 2.0 one could probably use the const
> > stuff to good effect.
> > 
> 
> well done Matti!!!
> 
> That is cool.
> 
> 

December 03, 2007
Mike wrote:
> This reminds me of this:
> 
> http://forums.worsethanfailure.com/forums/thread/82701.aspx
> 
> Maybe we could try the same with D :)

class X {
	void f()
	/+ begin +/
	in {} out {} body {}

	align abstract auto const debug deprecated export extern final package private
protected public scope synchronized struct {
		static union {}
	}

	override invariant {
		asm{}
		try volatile with (typeof(super)) switch(typeid(char) is null) { goto default;
case false: }
		catch { throw new class {}; } finally {}

		delete this;
	}

	unittest {
		for (;;) if (cast(bool)true) {
			do continue;
			while (function(){});
		} else break;

		return assert(delegate void(lazy byte, ref cdouble, inout cfloat, creal,
dchar, double, float, idouble, ifloat, ireal, long, real, ubyte, uint, ulong,
ushort, wchar){});
	}
}
alias int /+ end +/ x;

83 keywords of a possible 98 (unless I missed some). The code compiles with -unittest -debug. There's one warning "switch statement has no default" if compiled with -w, though, so I guess I only get 82 points according to the rules there. :-)

The class is needed only to get the anonymous struct, otherwise it could be all at global scope.

Keywords which can't be used at all:
	cent, ucent, macro

The rest of the keywords need an identifier and thus can't be used without breaking the chain. Feel free to prove me wrong, of course. :-)

I chose to use "alias" at the end there because it happened to be alphabetically
the first. The other options:
	enum, import, interface, foreach, foreach_reverse, mixin, module
	pragma, template, typedef, version, __traits


-- 
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi
December 03, 2007
Matti Niemenmaa wrote:
> Mike wrote:
>> This reminds me of this:
>>
>> http://forums.worsethanfailure.com/forums/thread/82701.aspx
>>
>> Maybe we could try the same with D :)
> 
> class X {
> 	void f()
> 	/+ begin +/
> 	in {} out {} body {}
> 
> 	align abstract auto const debug deprecated export extern final package private
> protected public scope synchronized struct {
> 		static union {}
> 	}
> 
> 	override invariant {
> 		asm{}
> 		try volatile with (typeof(super)) switch(typeid(char) is null) { goto default;
> case false: }
> 		catch { throw new class {}; } finally {}
> 
> 		delete this;
> 	}
> 
> 	unittest {
> 		for (;;) if (cast(bool)true) {
> 			do continue;
> 			while (function(){});
> 		} else break;
> 
> 		return assert(delegate void(lazy byte, ref cdouble, inout cfloat, creal,
> dchar, double, float, idouble, ifloat, ireal, long, real, ubyte, uint, ulong,
> ushort, wchar){});
> 	}
> }
> alias int /+ end +/ x;
> 
> 83 keywords of a possible 98 (unless I missed some). The code compiles with
> -unittest -debug. There's one warning "switch statement has no default" if
> compiled with -w, though, so I guess I only get 82 points according to the rules
> there. :-)
> 
> The class is needed only to get the anonymous struct, otherwise it could be all
> at global scope.
> 
> Keywords which can't be used at all:
> 	cent, ucent, macro
> 
> The rest of the keywords need an identifier and thus can't be used without
> breaking the chain. Feel free to prove me wrong, of course. :-)
> 
> I chose to use "alias" at the end there because it happened to be alphabetically
> the first. The other options:
> 	enum, import, interface, foreach, foreach_reverse, mixin, module
> 	pragma, template, typedef, version, __traits
> 
> 

You could've done 'alias __traits(something...) identifier' instead, for 
 one extra.
December 03, 2007
Christopher Wright wrote:
> You could've done 'alias __traits(something...) identifier' instead, for one
> extra.

TBH I didn't use __traits because I don't have a 2.0 compiler handy. I didn't know I could do that, cheers. :-)

-- 
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi
December 03, 2007
Christopher Wright wrote:
> Matti Niemenmaa wrote:
>> Mike wrote:
>>> This reminds me of this:
>>>
>>> http://forums.worsethanfailure.com/forums/thread/82701.aspx
>>>
>>> Maybe we could try the same with D :)
>>
>> class X {
>>     void f()
>>     /+ begin +/
>>     in {} out {} body {}
>>
>>     align abstract auto const debug deprecated export extern final package private
>> protected public scope synchronized struct {
>>         static union {}
>>     }
>>
>>     override invariant {
>>         asm{}
>>         try volatile with (typeof(super)) switch(typeid(char) is null) { goto default;
>> case false: }
>>         catch { throw new class {}; } finally {}
>>
>>         delete this;
>>     }
>>
>>     unittest {
>>         for (;;) if (cast(bool)true) {
>>             do continue;
>>             while (function(){});
>>         } else break;
>>
>>         return assert(delegate void(lazy byte, ref cdouble, inout cfloat, creal,
>> dchar, double, float, idouble, ifloat, ireal, long, real, ubyte, uint, ulong,
>> ushort, wchar){});
>>     }
>> }
>> alias int /+ end +/ x;
>>
>> 83 keywords of a possible 98 (unless I missed some). The code compiles with
>> -unittest -debug. There's one warning "switch statement has no default" if
>> compiled with -w, though, so I guess I only get 82 points according to the rules
>> there. :-)
>>
>> The class is needed only to get the anonymous struct, otherwise it could be all
>> at global scope.
>>
>> Keywords which can't be used at all:
>>     cent, ucent, macro
>>
>> The rest of the keywords need an identifier and thus can't be used without
>> breaking the chain. Feel free to prove me wrong, of course. :-)
>>
>> I chose to use "alias" at the end there because it happened to be alphabetically
>> the first. The other options:
>>     enum, import, interface, foreach, foreach_reverse, mixin, module
>>     pragma, template, typedef, version, __traits
>>
>>
> 
> You could've done 'alias __traits(something...) identifier' instead, for 
>  one extra.

My mistake; that wouldn't actually increase it, if you're only counting globally reserved keywords.

If you could have an anonymous template, you could do:
mixin (template () { module foo; })!();
December 03, 2007
Christopher Wright wrote:
> Christopher Wright wrote:
>> Matti Niemenmaa wrote:

<snip>

>>>         return assert(delegate void(lazy byte, ref cdouble, inout
>>> cfloat, creal,
>>> dchar, double, float, idouble, ifloat, ireal, long, real, ubyte,
>>> uint, ulong,
>>> ushort, wchar){});
>>>     }
>>> }
>>> alias int /+ end +/ x;

<snip>

>> You could've done 'alias __traits(something...) identifier' instead,
>> for  one extra.
> 
> My mistake; that wouldn't actually increase it, if you're only counting globally reserved keywords.

Sure it would. "int" can be moved into that delegate and then we'd have __traits in addition to everything I originally used.

> If you could have an anonymous template, you could do:
> mixin (template () { module foo; })!();

Yeah, anonymous templates would chop off a few keywords off the "left-over" list. I'm not sure if putting module in a template like that would work, though, but there are plenty of other options if it doesn't.

-- 
E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi