Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
Well, 5155 is fairly simple. The bug report details four one line changes to Object.di and Object_.d. See http://d.puremagic.com/issues/show_bug.cgi?id=5155 Also, If that doesn't do the trick, please e-mail me as I would like to fix the root cause. (And let you test the library) Oops sorry, I got a bit busier these couple of days and totally forgot about this. I'll try to come back to it in the near future, and I'll let you know if I have any success/failure. Thanks for the info! :)
Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
On Sat, 09 Apr 2011 18:08:58 -0400, %u wfunct...@hotmail.com wrote: Sorry. It was late and I forgot to mention some things. A) My code is dependent on patch 5155, and B) I forgot about changes, etc, that I had to make to go from DMD 2.051 to DMD 2.052. I've uploaded my current working copy and remade the docs. Let me know if you have any issues with this. (And please include a brief description of what/how you're building it: i.e. dmd 2.052, debug mode, etc) Also, if you want to try my updated std.json, it requires a few more patches, each listed at the top of the file. Whoops my bad. I'm using DMD 2.052, the version on the website, to compile variant.d. I tried recompiling the file (standalone) and got the same error again; I suspect it's because of the patch 5155 you mentioned, which I haven't applied. I'm actually not familiar with the patching system yet, so I'll try to use your file when I find a bit more time to figure it out. Thanks! :) Well, 5155 is fairly simple. The bug report details four one line changes to Object.di and Object_.d. See http://d.puremagic.com/issues/show_bug.cgi?id=5155 Also, If that doesn't do the trick, please e-mail me as I would like to fix the root cause. (And let you test the library)
Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
Thanks for the link! I tried compiling the file, and I got these errors: variant.d(454): Warning: statement is not reachable variant.d(454): Warning: statement is not reachable variant.d(454): Warning: statement is not reachable variant.d(634): Warning: statement is not reachable variant.d(660): Warning: statement is not reachable variant.d(337): Error: template variant.Variant.Box.opAssign(A : Variant) does not match any function template declaration variant.d(337): Error: template variant.Variant.Box.opAssign(A : Variant) cannot deduce template function from argument types ! ()(char[]) variant.d(612): Error: template instance variant.Variant.Box.opAssign!(char[]) error instantiating variant.d(1041): instantiated from here: __vtableOf!(char[]) variant.d(605): instantiated from here: opAssign!(char[]) variant.d(757): instantiated from here: SaveResult!(char[]) ... (23 instantiations, -v to show) ... variant.d(376): instantiated from here: SaveResult!(TypeInfo) variant.d(351): instantiated from here: __vtableOf!(void) Any ideas how I should fix them?
Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
On Sat, 09 Apr 2011 04:07:11 -0400, %u wfunct...@hotmail.com wrote: Thanks for the link! I tried compiling the file, and I got these errors: variant.d(454): Warning: statement is not reachable variant.d(454): Warning: statement is not reachable variant.d(454): Warning: statement is not reachable variant.d(634): Warning: statement is not reachable variant.d(660): Warning: statement is not reachable variant.d(337): Error: template variant.Variant.Box.opAssign(A : Variant) does not match any function template declaration variant.d(337): Error: template variant.Variant.Box.opAssign(A : Variant) cannot deduce template function from argument types ! ()(char[]) variant.d(612): Error: template instance variant.Variant.Box.opAssign!(char[]) error instantiating variant.d(1041): instantiated from here: __vtableOf!(char[]) variant.d(605): instantiated from here: opAssign!(char[]) variant.d(757): instantiated from here: SaveResult!(char[]) ... (23 instantiations, -v to show) ... variant.d(376): instantiated from here: SaveResult!(TypeInfo) variant.d(351): instantiated from here: __vtableOf!(void) Any ideas how I should fix them? Sorry. It was late and I forgot to mention some things. A) My code is dependent on patch 5155, and B) I forgot about changes, etc, that I had to make to go from DMD 2.051 to DMD 2.052. I've uploaded my current working copy and remade the docs. Let me know if you have any issues with this. (And please include a brief description of what/how you're building it: i.e. dmd 2.052, debug mode, etc) Also, if you want to try my updated std.json, it requires a few more patches, each listed at the top of the file.
Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
Sorry. It was late and I forgot to mention some things. A) My code is dependent on patch 5155, and B) I forgot about changes, etc, that I had to make to go from DMD 2.051 to DMD 2.052. I've uploaded my current working copy and remade the docs. Let me know if you have any issues with this. (And please include a brief description of what/how you're building it: i.e. dmd 2.052, debug mode, etc) Also, if you want to try my updated std.json, it requires a few more patches, each listed at the top of the file. Whoops my bad. I'm using DMD 2.052, the version on the website, to compile variant.d. I tried recompiling the file (standalone) and got the same error again; I suspect it's because of the patch 5155 you mentioned, which I haven't applied. I'm actually not familiar with the patching system yet, so I'll try to use your file when I find a bit more time to figure it out. Thanks! :)
Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
I've added reflection capabilities to an update to std.variant I'm working on. Overloads work. General functions work. (Although a few bugs with opCall and opDispatch prevents the ideal syntax: var.x(5) vs var.x = 5 and var.call(5) vs var(5), but I assume those will be eventually fixed). I've also added an internal type database, so you can auto-magically build a Variant(TypeInfo, void*) or Variant(Object) and then call methods on the real, underlying type. Whoa nice. I'm eagerly waiting to see it. :) Templates, I think, will out of the range of dynamic D capabilities for some time to come. Yeah, 'cause I just realized they basically need you to implement the entire compiler.
UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
I was trying to write a Dynamic class for D, which uses opDispatch to allow for late binding, but I ran into a problem: While my class works well for regular methods inside a class, it fails to work for: (1) Template methods inside a class (2) Methods with overloads (3) Global methods that have nothing to do with a class, like writeln Furthermore, it would also fail to work for (4) UCFS if/when it's implemented. It seems like templates by design *don't* allow for anything to happen dynamically, and at the same time, it seems like _everything_ is becoming a template nowadays. So my question is, is there anything we can do about it (either now or later)? Or is a dynamic extension simply beyond the reach of D?
Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
On Thu, 07 Apr 2011 14:20:53 -0400, %u wfunct...@hotmail.com wrote: I was trying to write a Dynamic class for D, which uses opDispatch to allow for late binding, but I ran into a problem: While my class works well for regular methods inside a class, it fails to work for: (1) Template methods inside a class (2) Methods with overloads (3) Global methods that have nothing to do with a class, like writeln Furthermore, it would also fail to work for (4) UCFS if/when it's implemented. It seems like templates by design *don't* allow for anything to happen dynamically, and at the same time, it seems like _everything_ is becoming a template nowadays. So my question is, is there anything we can do about it (either now or later)? Or is a dynamic extension simply beyond the reach of D? I tried a wrapper type using opDispatch in dcollections, but what I ran into is, opDispatch uses its called parameter types to decide the function parameter types, you have very little control over that. I basically ended up abandoning the use of opDispatch and implemented each covered function by hand. I filed an enhancement request for it, which probably doesn't cover everything you listed, but it might help: http://d.puremagic.com/issues/show_bug.cgi?id=4998 -Steve
Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
I tried a wrapper type using opDispatch in dcollections, but what I ran into is, opDispatch uses its called parameter types to decide the function parameter types, you have very little control over that. I basically ended up abandoning the use of opDispatch and implemented each covered function by hand. I managed to get this far (my file attached), using D-style runtime variadic functions... it seems to work well in most cases, with the notable exceptions being: (1) Things I already mentioned (2) Possibly ref/out/lazy parameters (I haven't tested them yet) Any thoughts? begin 644 std.dynamic.core.d M;6]D=6QE('-T9YD6YA;6EC+F-OF4[#0H-G!R:79A=4@W1A=EC(EM M]R=!S=0N86QG;W)I=AM.PT*')I=F%T92!I;7!OG0@8V]R92YE-E M'1I;VXL('-T9YE-E'1I;VXL('-T9YT7!E='5P;4L('-T9YM971A MW1R:6YGRP@W1D+G1R86ETRP@8V]R92YV87)AFL('-T9YS=1I;SL- M@T*86)S=')A8W0@8VQAW,@1'EN86UI8PT*PT*7!R;W1E8W1E9!A8G-T MF%C=!$6YA;6EC(EN=F]K92AS=')I;F@;65M8F5R+`N+BXI.PT*7!R M;W1E8W1E9!T:ES*D@R!AW-EG0H='EP96ED*'1H:7,I($]('1Y5I M9AT7!E;V8H=AIRDI*3L@?0T*7!U8FQI8R!$6YA;6EC(]P1ES%T M8V@HW1R:6YG(YA;64L(%0N+BXI*%0@87)GRD@R!R971UFX@=AIRYI M;G9O:V4H;F%M92P@87)GRD[('T-@EPF]T96-T960@0'!R;W!EG1Y(%B MW1R86-T('9O:60J('!686q...@i.pt*7!U8FQI8R!`')O5R='D@86)S M=')A8W0@5'EP94EN9F\@='EP94ED*D[#0H)'5B;EC(')E9B!4(%S*%0I M*D@R!AW-EG0H=AIRYT7!E260@/3T@='EP96ED*%0I*3L@F5T=7)N M(IC87-T*%0J*71H:7,N%9A;'5E.R!]#0I]#0H-G-T871I8R!B;V]L(ES M1'EN86UI8RA47!E26YF;R!T*2![(%U=\@87-424-L87-S(#T@8V%S=A4 M7!E26YF;U]#;%SRET.R!R971UFX@87-424-L87-S(%IR!N=6QL(8F M(AAU1)0VQAW,@/3T@='EP96ED*$1Y;F%M:6,I*3L@?0T*W1A=EC()O M;VP@:7-686QI9$%R9W5M96YT*%1Y5);F9O('1!FL(%1Y5);F9O('10 M87)A;2D@R!R971UFX@=$%R9R`]/2!T4%R86T[('T@+R]25A-13H@06QL M;W@9F]R(EMQI8VET(-O;G9EG-I;VYS(AB;W1H('=I95N:6YG(-O M;G9EG-I;VYS(%N9!S=%T:6,@8V%S=',I#0H-G!R:79A=4@=5MQA M=4@W1A=EC24UA$EN=5R;F%L*'-IF5?=!I4W1AG0L(%L:6%S($UA M'!EBP@5XN+BD@R!S=%T:6,@:68@*%0N;5N9W1H(#X@,D@R!A;EA MR!47!E5'5P;4A*$UA'!EB$H:5-T87)T+!46S!=*2P@W1A=EC24UA M$EN=5R;F%L(2AI4W1AG0@*R`Q+!-87!P97(L(%1;,2`N+B`D72DI('-T M871I8TE-87!);G1EFYA;#L@?2!E;'-E('L@86QI87,@5'EP951UQE(2@I M('-T871I8TE-87!);G1EFYA;#L@?2!]#0IT96UP;%T92!S=%T:6-)36%P M*%L:6%S($UA'!EBP@5XN+BD@R!A;EAR!S=%T:6-)36%P26YT97)N M86PA*#`L($UA'!EBP@5D@W1A=EC24UA#L@?0T*=5MQA=4@2F]I M;F5R*'-TFEN9R!P87)A;5!R969ID@R!T96UP;%T92!*;VEN97(HVEZ M95]T(DL(%0N+BXI('L@96YU;2!*;VEN97(@/2!;W)M870A*'%[)7,EWTL M('!AF%M4')E9FEX+!I*3L@?2!]#0IT96UP;%T92!S=%T:6-*;VEN*'-T MFEN9R!S97!AF%T;W(L(%0N+BXI('L@W1A=EC(EF(A4+FQE;F=T:`^ M/2`R*2![(5N=6T@W1A=EC2F]I;B`](%1;,%T@?B!S97!AF%T;W(@?B!S M=%T:6-*;VEN(2AS97!AF%T;W(L(%1;,2`N+B`D72D[('T@96QS92!S=%T M:6,@:68@*%0N;5N9W1H(#X](#$I('L@96YU;2!S=%T:6-*;VEN(#T@5%LP M73L@?2!E;'-E('L@96YU;2!S=%T:6-*;VEN(#T@7M].R!]('T-@T*=5M MQA=4@=F%?;6%K95]L;V-A;%]AFHW1R:6YG('!AF%M4')E9FEX+!A M;EAR!AF=S*0T*PT*71E;7!L871E('9A7VUA:V5?;]C86Q?87)G*'-I MF5?=!I+!4*0T*7L-@D)96YU;2!V85]M86ME7VQO8V%L7V%R9R`]($9O MFUA=$H7MA=71O(5S)7,@/2!IT1Y;F%M:6,H7V%R9W5M96YTULEUTI M(#\@=F%?87)G(2A$6YA;6EC*2@ERDN87,A*5S*2`Z('9A7V%R9R$H)7,I M*5S*3L@?2P-@D)0D)7!AF%M4')E9FEX+!I+!I+!AF=S+G-TFEN M9V]F+!4+G-TFEN9V]F+!4+G-TFEN9V]F+!AF=S+G-TFEN9V]F*3L- M@E]#0I]#0H-G1E;7!L871E(ES55MQA=4H5XN+BD@R!PF%G;6$H M;7-G+!T7!E;V8H)E1;,%TI*3L@96YU;2!B;V]L(ES55MQA=4@/2`A M:7,H5%LP72D@)B8@(6ES*'1Y5O9B@F5%LP72DI.R!](\O1F%LV4@;F5G M871I=F5S/PT*#0IPFEV871E(-L87-S($1Y;F%M:6-/9BA4*2!I9B`H(6ES M*%0@.B!$6YA;6EC*2D@.B!$6YA;6EC#0I[#0H)5!O8FH[#0H)=AIRA4 M(]B:BD@R!T:ES+F]B:B`](]B:CL@?0T*#0H)86QI87,@1'EN86UI8R!F M=6YC=EO;BA$6YA;6EC3V8A*%0I(ENW1A;F-E+!47!E26YF;UM=(%]A MF=U;65N=',L(')E9B!V85]L:7-T(%R9W,I($EN=F]K97([#0H)W1A=EC M(EM;75T86)L92A);G9O:V5R6W-TFEN9UTI(UE;6)EG,[#0H)96YU;2!0 M05)!35]04D525@@/2!QW!AF%M?3L-@ES=%T:6,@=AIR@I#0H)PT* M0E);G9O:V5R6W-TFEN9UT@;65M8F5RSL-@D)875T;R!T96UP(#T@5YI M;FET.PT*0ES=%T:6,@:68@*%]?=')A:71S*-O;7!I;5S+!T7!E;V8H M7U]TF%I=',H86QL365M8F5RRP@5DI*2D-@D)PT*0D)9F]R96%C:`H M:2P@;65M8F5R.R!?7W1R86ETRAA;Q-96UB97)S+!4*2D-@D)7L-@D) M0ES=%T:6,@8V]NW0@W1R:6YG(%--14U15)?3D%-12`]('%[*%0I+GT@ M?B!M96UB97([#0H)0D)W1A=EC(-O;G-T('-TFEN9R!)345-0D527TY! M344@/2!QU0N:6YI=Y]('X@;65M8F5R.PT*0D)7-T871I8R!I9B`H;65M M8F5R(#T]('%[;W!5;F%R7TI#0H)0D)PT*0D)0D-@D)0E]#0H)0D) M96QS90T*0D)7L-@D)0D)W1A=EC(EF(AIRA=6YC=EO;E1Y5/ M9B$H;6EX:6XH4TU%34)%4E].04U%*2D@5$9N,BDI#0H)0D)7L-@D)0D) M6%L:6%S(%1;C(@5$9N.PT*0D)0E]#0H)0D)?0T*0D)7-T871I8R!I M9B`H:7,H5$9N*2D-@D)0E[#0H)0D)7-T871I8R!I9B`H(5]?=')A:71S M*ES4W1A=EC1G5N8W1I;VXL(UIEN*%--14U15)?3D%-12DI*0T*0D) M0E[#0H)0D)0DO+W!R86=M82AMVL()!91I;F@;65M8F5R.B`B+!M M96UB97(I.PT*0D)0D)875T;R!F;B`](9U;F-T:6]N($1Y;F%M:6,H1'EN M86UI8T]F(2A4*2!I;G-T86YC92P@5'EP94EN9F];72!?87)G=6UE;G1S+!R M968@=F%?;ES=!AF=S*0T*0D)0D)PT*0D)0D)6UIEN*$9OFUA M=$H7LEPT*0D)0D)0EA=71O(')EW5L=`](ENW1A;F-E+F]B:BXE MR@ERD[#0H)0D)0D)6%SV5R=A?87)G=6UE;G1S+FQE;F=T:`]/2!0 M87)A;65T97)47!E5'5P;4A*%1;BDN;5N9W1H*3L-@D)0D)0D)9F]R M96%C:`H:2P@='EP93L@4%R86UE=5R5'EP951UQE(2A41FXI*0T*0D) M0D)0E[(%SV5R=AIT1Y;F%M:6,H7V%R9W5M96YTUMI72D@/R!TG5E M(#H@:7-686QI9$%R9W5M96YT*%]AF=U;65N='-;:5TL('1Y5I9AT7!E M*2DI.R!]#0H)0D)0D)7)E='5R;B!N97@1'EN86UI8T]F(2A2971UFY4
Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
What's UCFS?
Re: UCFS, Reflection/Metadata, Overload Resolution, Templates, and other issues
On Thu, 07 Apr 2011 14:20:53 -0400, %u wfunct...@hotmail.com wrote: I was trying to write a Dynamic class for D, which uses opDispatch to allow for late binding, but I ran into a problem: While my class works well for regular methods inside a class, it fails to work for: (1) Template methods inside a class (2) Methods with overloads (3) Global methods that have nothing to do with a class, like writeln Furthermore, it would also fail to work for (4) UCFS if/when it's implemented. It seems like templates by design *don't* allow for anything to happen dynamically, and at the same time, it seems like _everything_ is becoming a template nowadays. So my question is, is there anything we can do about it (either now or later)? Or is a dynamic extension simply beyond the reach of D? I've added reflection capabilities to an update to std.variant I'm working on. Overloads work. General functions work. (Although a few bugs with opCall and opDispatch prevents the ideal syntax: var.x(5) vs var.x = 5 and var.call(5) vs var(5), but I assume those will be eventually fixed). I've also added an internal type database, so you can auto-magically build a Variant(TypeInfo, void*) or Variant(Object) and then call methods on the real, underlying type. Templates, I think, will out of the range of dynamic D capabilities for some time to come. Also, because I'm wrapping / unwrapping all arguments, ref doesn't work.