June 20

recently I've been looking into creating dsl's via templates
... its not going well

however what does just werk^tm is aliasing main

struct dsl{
	string exe(string s){
		return s;
}}
template repl(alias T){
	pragma(mangle, "main")
	int repl(){
		import std;
		T machine;
		foreach(in_;stdin.byLineCopy){
			if(in_=="quit")return 0;
			if(in_=="vomit"){
				machine.writeln;
			} else {
				machine.exe(in_).writeln;
		}}
		assert(0);
}}
alias main=repl!dsl;

I think some stuff is broken like exceptions, but maybe some common patterns should be extracted out to make even smaller programs