digitalmars.D - macros: type save, or what?
- 0ffh (18/18) Sep 11 2007 As to the matter of type save macros:
- 0ffh (3/4) Sep 11 2007 Admittedly it would be nicer to have "macro inc(lvalue int a)"... Walter...
- Janice Caron (8/8) Sep 11 2007 I don't think macros need to be typesafe in quite the same way that
- 0ffh (7/12) Sep 11 2007 I don't see why a const should be different from a literal when it comes
- Janice Caron (16/21) Sep 11 2007 Type-checking may be a red herring then.
- 0ffh (13/19) Sep 11 2007 I wonder if this might work? I admit it looks rather ugly, though...
- Jarrett Billingsley (4/5) Sep 11 2007 OT: I really hope you haven't been using this idiom in your code. Just ...
- 0ffh (5/6) Sep 11 2007 Nah, haven't never needed nothing like that, that's why I never cared
- renoX (6/27) Sep 12 2007 I don't know if typesafe macros will be used that much though,
As to the matter of type save macros: Using some imaginary macro sytax (as I don't know the real one), but with all confidence that this will work with D macros. macro inc(a) // increment an integer { static if (typeof(a).stringof=="int") { ++a; } else { // raise compile time error static assert(false,"inc wanna int!!11!"); } } There might even be a more elegant way, but what teh heck... :) Regards, Frank
Sep 11 2007
0ffh wrote:There might even be a more elegant way, but what teh heck... :)Admittedly it would be nicer to have "macro inc(lvalue int a)"... Walter? Regards, Frank
Sep 11 2007
I don't think macros need to be typesafe in quite the same way that variable declarations do. I see them as an offshoot of mixins, where the type is known at the point of expansion, rather than the point of declaration. I have no problem. On another thread, I argued that const T name = value; should be the appropriate syntax for declaring constants. But I have nothing against macros in general.
Sep 11 2007
Janice Caron wrote:On another thread, I argued that const T name = value; should be the appropriate syntax for declaring constants. But I have nothing against macros in general.I don't see why a const should be different from a literal when it comes to type checking, and a literal is what you'll effectively get, when you use "macro a=5;" or whatever. Anyways, this tread goes a bit beyond what we had in "Const sucks", that is why I gave it its own name... :) Regards, Frank
Sep 11 2007
On 9/11/07, 0ffh <spam frankhirsch.net> wrote:I don't see why a const should be different from a literal when it comes to type checking, and a literal is what you'll effectively get, when you use "macro a=5;" or whatever.Type-checking may be a red herring then. It just feels /right/ to me that you should use const int x = 42; to declare a constant. It feels natural. It's what instinct tells me to do. At least with const, specifying the type explicitly is optional. Both of these will compile: const x = 42; const int x = 42; But if macro becomes the "official" way to declare constants then you don't get the option to specify the type, because "macro int x = 42;" won't compile.Anyways, this tread goes a bit beyond what we had in "Const sucks", that is why I gave it its own name... :)True. I /like/ macros. They can be used for complex and powerful abstractions. But if all you want to do is declare a constant, they're overkill. They're not the right tool for the job. (I prefer the keyword "define" to "macro" though) :-)
Sep 11 2007
Janice Caron wrote:But if macro becomes the "official" way to declare constants then you don't get the option to specify the type, because "macro int x = 42;" won't compile.I wonder if this might work? I admit it looks rather ugly, though... macro defconst(T,name,value) { macro name (cast(T)value); } void main() { defconst(int,x,5); }True. I /like/ macros. They can be used for complex and powerful abstractions. But if all you want to do is declare a constant, they're overkill. They're not the right tool for the job.If you say it just doesn't feel right for you, I can understand that! I also like to make use of my freedom to be irrational... ;-) Regards, Frank
Sep 11 2007
"0ffh" <spam frankhirsch.net> wrote in message news:fc6oog$8ll$1 digitalmars.com...static if (typeof(a).stringof=="int")OT: I really hope you haven't been using this idiom in your code. Just do "is(typeof(a) == int)".
Sep 11 2007
Jarrett Billingsley wrote:OT: I really hope you haven't been using this idiom in your code.Nah, haven't never needed nothing like that, that's why I never cared to look up how it's done properly; although I imagined that I faintly remembered there was a more elegant way, hence my comment at the end. Regards, Frank
Sep 11 2007
0ffh a écrit :As to the matter of type save macros:I don't know if typesafe macros will be used that much though, duck-typing (ie if it compiles then it's good) seems enough most of the time, have you a specific example where typesafe macros are useful? Regards, renoXUsing some imaginary macro sytax (as I don't know the real one), but with all confidence that this will work with D macros. macro inc(a) // increment an integer { static if (typeof(a).stringof=="int") { ++a; } else { // raise compile time error static assert(false,"inc wanna int!!11!"); } } There might even be a more elegant way, but what teh heck... :) Regards, Frank
Sep 12 2007