digitalmars.D.learn - DMD "preprocessed"-source output?
- Nick Sabalausky (11/11) Oct 04 2008 I don't suppose DMD has any way to output a copy of what the source file...
- Denis Koroskin (4/18) Oct 05 2008 D doesn't have a dedicated preprocessor and I believe all the mixins and...
- Jarrett Billingsley (8/28) Oct 05 2008 Yes, but that doesn't necessarily preclude it from being able to i.e.
- Denis Koroskin (5/43) Oct 05 2008 Agree. There could also be some kind of mapping from compressed to
- Ary Borenszweig (15/27) Oct 05 2008 Just for fun, I'll make a view in Descent that will show you exactly
- Denis Koroskin (14/41) Oct 05 2008 The best thing whould be to view the code transformation step by step
- Ary Borenszweig (7/66) Oct 05 2008 It's possible. Another idea that I have is to be able to debug
- BCS (2/10) Oct 05 2008 Please Man, I'm begg'in you! Do it!
- Hoenir (2/17) Nov 19 2008 Any news?
- Ary Borenszweig (2/20) Nov 19 2008 Sorry, exams time. :(
I don't suppose DMD has any way to output a copy of what the source files look like after things like mixins, CTFE and versions are applied? (Sort of like running a C compiler with a "preprocess-only" flag). I don't see anything like this in the listed command-line params, but maybe I missed it. I have a program (that makes heavy use of mixins and CTFE and such) that gives wildly different output between two different versions of DMD/Tango (Tango's documented "breaking changes" don't appear to be the culprit and nothing in DMD's changelog or the latest bugzilla entries seem to immediately stick out). I'm sure I can track it down, but it would help to narrow things down if I could run the "preprocessed" results from both environments through a file diff.
Oct 04 2008
On Sun, 05 Oct 2008 04:14:34 +0400, Nick Sabalausky <a a.a> wrote:I don't suppose DMD has any way to output a copy of what the source files look like after things like mixins, CTFE and versions are applied? (Sort of like running a C compiler with a "preprocess-only" flag). I don't see anything like this in the listed command-line params, but maybe I missed it. I have a program (that makes heavy use of mixins and CTFE and such) that gives wildly different output between two different versions of DMD/Tango (Tango's documented "breaking changes" don't appear to be the culprit and nothing in DMD's changelog or the latest bugzilla entries seem to immediately stick out). I'm sure I can track it down, but it would help to narrow things down if I could run the "preprocessed" results from both environments through a file diff.D doesn't have a dedicated preprocessor and I believe all the mixins and stuff is applied and parsed of fly during AST construction, just like inlining is done on AST instead of codegen phase.
Oct 05 2008
On Sun, Oct 5, 2008 at 8:28 AM, Denis Koroskin <2korden gmail.com> wrote:On Sun, 05 Oct 2008 04:14:34 +0400, Nick Sabalausky <a a.a> wrote:Yes, but that doesn't necessarily preclude it from being able to i.e. output the post-meta code using the same mechanism that outputs headers. One of the problems I do see with it, however, is template names - at least on Windows, DMD will attempt to compress and then ultimately MD5-hash long template names to work around limitations in the OMF object format it uses. These would not be valid D identifiers.I don't suppose DMD has any way to output a copy of what the source files look like after things like mixins, CTFE and versions are applied? (Sort of like running a C compiler with a "preprocess-only" flag). I don't see anything like this in the listed command-line params, but maybe I missed it. I have a program (that makes heavy use of mixins and CTFE and such) that gives wildly different output between two different versions of DMD/Tango (Tango's documented "breaking changes" don't appear to be the culprit and nothing in DMD's changelog or the latest bugzilla entries seem to immediately stick out). I'm sure I can track it down, but it would help to narrow things down if I could run the "preprocessed" results from both environments through a file diff.D doesn't have a dedicated preprocessor and I believe all the mixins and stuff is applied and parsed of fly during AST construction, just like inlining is done on AST instead of codegen phase.
Oct 05 2008
On Sun, 05 Oct 2008 18:31:47 +0400, Jarrett Billingsley <jarrett.billingsley gmail.com> wrote:On Sun, Oct 5, 2008 at 8:28 AM, Denis Koroskin <2korden gmail.com> wrote:Agree. There could also be some kind of mapping from compressed to original form, so that's hardly an issue. Besides, identifier compression shouldn't take place unless object file is about to be generated, right?On Sun, 05 Oct 2008 04:14:34 +0400, Nick Sabalausky <a a.a> wrote:Yes, but that doesn't necessarily preclude it from being able to i.e. output the post-meta code using the same mechanism that outputs headers. One of the problems I do see with it, however, is template names - at least on Windows, DMD will attempt to compress and then ultimately MD5-hash long template names to work around limitations in the OMF object format it uses. These would not be valid D identifiers.I don't suppose DMD has any way to output a copy of what the source files look like after things like mixins, CTFE and versions are applied? (Sort of like running a C compiler with a "preprocess-only" flag). I don't see anything like this in the listed command-line params, but maybe I missed it. I have a program (that makes heavy use of mixins and CTFE and such) that gives wildly different output between two different versions of DMD/Tango (Tango's documented "breaking changes" don't appear to be the culprit and nothing in DMD's changelog or the latest bugzilla entries seem to immediately stick out). I'm sure I can track it down, but it would help to narrow things down if I could run the "preprocessed" results from both environments through a file diff.D doesn't have a dedicated preprocessor and I believe all the mixins and stuff is applied and parsed of fly during AST construction, just like inlining is done on AST instead of codegen phase.
Oct 05 2008
Nick Sabalausky escribió:I don't suppose DMD has any way to output a copy of what the source files look like after things like mixins, CTFE and versions are applied? (Sort of like running a C compiler with a "preprocess-only" flag). I don't see anything like this in the listed command-line params, but maybe I missed it. I have a program (that makes heavy use of mixins and CTFE and such) that gives wildly different output between two different versions of DMD/Tango (Tango's documented "breaking changes" don't appear to be the culprit and nothing in DMD's changelog or the latest bugzilla entries seem to immediately stick out). I'm sure I can track it down, but it would help to narrow things down if I could run the "preprocessed" results from both environments through a file diff.Just for fun, I'll make a view in Descent that will show you exactly that. I believe DMD has all the information to output that, but not a switch. It'll also help me detect easier if there's a bug in CTFE or template instantiation (in Descent's port). Note that this will turn things like: const int x = 1 + 2 + 3 + 4; into const int x = 10; and: const int x = someFuncThatCanBeEvaluatedAtCompileTime(2); into: const int x = 20; I don't know if this is good or bad... I'll let you know when I'll have it done.
Oct 05 2008
On Sun, 05 Oct 2008 19:01:41 +0400, Ary Borenszweig <ary esperanto.org.ar> wrote:Nick Sabalausky escribió:The best thing whould be to view the code transformation step by step (using some slider at the bottom of view): // Step 1: const int x = mixin!("someFuncThatCanBeEvaluatedAtCompileTime(1 + 2 + 3 + 3)"); // Step 2: const int x = someFuncThatCanBeEvaluatedAtCompileTime(1 + 2 + 3 + 3); // Step 3: const int x = someFuncThatCanBeEvaluatedAtCompileTime(10); // Step 4: const int x = 42; This would be awesome, but I guess it's hardly possible :(I don't suppose DMD has any way to output a copy of what the source files look like after things like mixins, CTFE and versions are applied? (Sort of like running a C compiler with a "preprocess-only" flag). I don't see anything like this in the listed command-line params, but maybe I missed it. I have a program (that makes heavy use of mixins and CTFE and such) that gives wildly different output between two different versions of DMD/Tango (Tango's documented "breaking changes" don't appear to be the culprit and nothing in DMD's changelog or the latest bugzilla entries seem to immediately stick out). I'm sure I can track it down, but it would help to narrow things down if I could run the "preprocessed" results from both environments through a file diff.Just for fun, I'll make a view in Descent that will show you exactly that. I believe DMD has all the information to output that, but not a switch. It'll also help me detect easier if there's a bug in CTFE or template instantiation (in Descent's port). Note that this will turn things like: const int x = 1 + 2 + 3 + 4; into const int x = 10; and: const int x = someFuncThatCanBeEvaluatedAtCompileTime(2); into: const int x = 20; I don't know if this is good or bad... I'll let you know when I'll have it done.
Oct 05 2008
Denis Koroskin escribió:On Sun, 05 Oct 2008 19:01:41 +0400, Ary Borenszweig <ary esperanto.org.ar> wrote:It's possible. Another idea that I have is to be able to debug compile-time evaluation. So you would right click an expression, select "Debug Compile-Time Evaluation", and you'd be able to step through the evaluation, seeing values as they are transformed. That's a bit harder than the former idea. I wonder if somebody would find this useful... It seems like a really entertaining thing to implement. :-)Nick Sabalausky escribió:The best thing whould be to view the code transformation step by step (using some slider at the bottom of view): // Step 1: const int x = mixin!("someFuncThatCanBeEvaluatedAtCompileTime(1 + 2 + 3 + 3)"); // Step 2: const int x = someFuncThatCanBeEvaluatedAtCompileTime(1 + 2 + 3 + 3); // Step 3: const int x = someFuncThatCanBeEvaluatedAtCompileTime(10); // Step 4: const int x = 42; This would be awesome, but I guess it's hardly possible :(I don't suppose DMD has any way to output a copy of what the source files look like after things like mixins, CTFE and versions are applied? (Sort of like running a C compiler with a "preprocess-only" flag). I don't see anything like this in the listed command-line params, but maybe I missed it. I have a program (that makes heavy use of mixins and CTFE and such) that gives wildly different output between two different versions of DMD/Tango (Tango's documented "breaking changes" don't appear to be the culprit and nothing in DMD's changelog or the latest bugzilla entries seem to immediately stick out). I'm sure I can track it down, but it would help to narrow things down if I could run the "preprocessed" results from both environments through a file diff.Just for fun, I'll make a view in Descent that will show you exactly that. I believe DMD has all the information to output that, but not a switch. It'll also help me detect easier if there's a bug in CTFE or template instantiation (in Descent's port). Note that this will turn things like: const int x = 1 + 2 + 3 + 4; into const int x = 10; and: const int x = someFuncThatCanBeEvaluatedAtCompileTime(2); into: const int x = 20; I don't know if this is good or bad... I'll let you know when I'll have it done.
Oct 05 2008
Reply to Ary,It's possible. Another idea that I have is to be able to debug compile-time evaluation. So you would right click an expression, select "Debug Compile-Time Evaluation", and you'd be able to step through the evaluation, seeing values as they are transformed. That's a bit harder than the former idea. I wonder if somebody would find this useful... It seems like a really entertaining thing to implement. :-)Please Man, I'm begg'in you! Do it!
Oct 05 2008
BCS schrieb:Reply to Ary,Any news?It's possible. Another idea that I have is to be able to debug compile-time evaluation. So you would right click an expression, select "Debug Compile-Time Evaluation", and you'd be able to step through the evaluation, seeing values as they are transformed. That's a bit harder than the former idea. I wonder if somebody would find this useful... It seems like a really entertaining thing to implement. :-)Please Man, I'm begg'in you! Do it!
Nov 19 2008
Hoenir wrote:BCS schrieb:Sorry, exams time. :(Reply to Ary,Any news?It's possible. Another idea that I have is to be able to debug compile-time evaluation. So you would right click an expression, select "Debug Compile-Time Evaluation", and you'd be able to step through the evaluation, seeing values as they are transformed. That's a bit harder than the former idea. I wonder if somebody would find this useful... It seems like a really entertaining thing to implement. :-)Please Man, I'm begg'in you! Do it!
Nov 19 2008