digitalmars.D - Proposal:better COM support and DB support?
The idea is compile time convert DotExp to a String.
consider:
class COMBase
{
Variant opDotExp(string field)
{
//do shit with COM
}
}
COMBase mycominst;
mycominst.kk(); <-- this would actually result code
mycominst.opDotExp("kk()") by the compiler
I don't quite like the syntax of
mycominst.Call_My_COM_Method("Method_Name", ...)
and consider:
abstract class FieldClass
{
Variant k;
int opImplicitCastTo(){ throw new Exception("this is not an int
field");};
float opImplicitCastTo(){throw new Exception("this is not a float
field");};
double opImplicitCastTo(){throw new Exception("this is not a double
field");};
string opImplicitCastTo(){throw new Exception("this is not a string
field");};
}
class MyIntField:FieldClass
{
int opImplicitCastTo(){ return k.toInt;}
this (Variant t){k = t;}
}
class MyTable
{
FieldClass opDotExp(string field) // compiler only comes to this when
compiler fails to match any DotExp
{
Variant t;
// get field from database and put it to variant t.
static if (field == "MyIntField")
return new MyIntField(t);
else static if (field == "MyFloatField")
return new MyFloatField(t); // a similar helper class like
MyIntField would be required
else static if (field == "MyDoubleField")
return new MyDoubleField(t); // a similar helper class like
MyIntField would be required
else
static assert(0); // this operator should end with static
assert(0);
}
}
MyTable table;
table.MyIntField = 3; // this would result actually a MyIntField object
and if programmer implement the opAssign of MyIntField class, then it
would be possible for programmer to handle database in a very nice
language integrated syntax.
Yes, string mixin can handle it very well. But I still like the LINQ
syntax.
So compile-time DotExp to a string would bring us two things very nice.
1.better COM syntax.
2.LINQ syntax available.
--
使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/
Dec 26 2007
在 Thu, 27 Dec 2007 15:43:44 +0800,davidl <davidl 126.com> 写道:
The idea is compile time convert DotExp to a String.
consider:
class COMBase
{
Variant opDotExp(string field)
{
//do shit with COM
}
}
COMBase mycominst;
mycominst.kk(); <-- this would actually result code
mycominst.opDotExp("kk()") by the compiler
I don't quite like the syntax of
mycominst.Call_My_COM_Method("Method_Name", ...)
and consider:
abstract class FieldClass
{
Variant k;
int opImplicitCastTo(){ throw new Exception("this is not an int
field");};
float opImplicitCastTo(){throw new Exception("this is not a float
field");};
double opImplicitCastTo(){throw new Exception("this is not a double
field");};
string opImplicitCastTo(){throw new Exception("this is not a string
field");};
}
class MyIntField:FieldClass
{
int opImplicitCastTo(){ return k.toInt;}
this (Variant t){k = t;}
}
class MyTable
{
FieldClass opDotExp(string field) // compiler only comes to this
when compiler fails to match any DotExp
{
Variant t;
// get field from database and put it to variant t.
static if (field == "MyIntField")
return new MyIntField(t);
else static if (field == "MyFloatField")
return new MyFloatField(t); // a similar helper class like
MyIntField would be required
else static if (field == "MyDoubleField")
return new MyDoubleField(t); // a similar helper class like
MyIntField would be required
else
static assert(0); // this operator should end with static
assert(0);
}
}
MyTable table;
table.MyIntField = 3; // this would result actually a MyIntField
object and if programmer implement the opAssign of MyIntField class,
then it would be possible for programmer to handle database in a very
nice language integrated syntax.
Yes, string mixin can handle it very well. But I still like the LINQ
syntax.
So compile-time DotExp to a string would bring us two things very nice.
1.better COM syntax.
2.LINQ syntax available.
Oh, I'm confused by ADO and LINQ.
the LINQ object like field is actually a class binding. and LINQ select
blah syntax is evil.
I'm not particularly enjoy it.
My proposal only do good for not-binded COM object. People can do quick
hack in binded syntax.
--
使用 Opera 革命性的电子邮件客户程序: http://www.opera.com/mail/
Dec 26 2007








davidl <davidl 126.com>