CT usage only in executable
Not that the memory is really significant compared to the rest of my program, but I have a few fairly large arrays I use only in compile time and I was wondering why dmd still includes those in the executable (simple text search dug them up).
Re: CT usage only in executable
strtr: > Not that the memory is really significant compared to the rest of my program, > but I have a few fairly large arrays I use only in compile time and I was > wondering why dmd still includes those in the executable (simple text search > dug them up). Are you able to create a smallish test case? Bye, bearophile
Re: CT usage only in executable
== Quote from bearophile (bearophileh...@lycos.com)'s article > strtr: > > Not that the memory is really significant compared to the rest of my > > program, > > but I have a few fairly large arrays I use only in compile time and I was > > wondering why dmd still includes those in the executable (simple text search > > dug them up). > Are you able to create a smallish test case? > Bye, > bearophile module main; const char[] CT_STRING = "int i=0;"; void main(){ mixin( CT_STRING ); } The string can be found in the executable.
Re: CT usage only in executable
== Quote from strtr (st...@sp.am)'s article > == Quote from bearophile (bearophileh...@lycos.com)'s article > > strtr: > > > Not that the memory is really significant compared to the rest of my > > > program, > > > but I have a few fairly large arrays I use only in compile time and I was > > > wondering why dmd still includes those in the executable (simple text > > > search > > > dug them up). > > Are you able to create a smallish test case? > > Bye, > > bearophile > > module main; > const char[] CT_STRING = "int i=0;"; > void main(){ > mixin( CT_STRING ); > } > > The string can be found in the executable. Too busy reading TDPL? ;) btw. how long until runtime mixins? :D
Re: CT usage only in executable
strtr: > Too busy reading TDPL? ;) I have not answered because my answer is not useful: I am sure that constant is present in the binary, you probably need LDC with Link-Time Optimization activated to remove them. > btw. how long until runtime mixins? :D D compiler contains an interpreter. It's not available at runtime mostly for design and ideological reasons, but in theory it's not hard to pull it out of the compiler and make it available at runtime too. Bye, bearophile
Re: CT usage only in executable
"strtr" wrote in message news:i1lro6$307...@digitalmars.com... > == Quote from bearophile (bearophileh...@lycos.com)'s article >> strtr: >> > Not that the memory is really significant compared to the rest of my >> > program, >> > but I have a few fairly large arrays I use only in compile time and I >> > was >> > wondering why dmd still includes those in the executable (simple text >> > search >> > dug them up). >> Are you able to create a smallish test case? >> Bye, >> bearophile > > > module main; > > const char[] CT_STRING = "int i=0;"; > > void main(){ > mixin( CT_STRING ); > } > > The string can be found in the executable. > I think if you use enum instead of const/immutable the compiler is not meant to put them in the executable (it might anyway in some/all cases). eg. module main; enum CT_STRING = "int i=0;"; void main(){ mixin( CT_STRING ); }
Re: CT usage only in executable
== Quote from Daniel Murphy (yebbl...@nospamgmail.com)'s article > I think if you use enum instead of const/immutable the compiler is not meant > to put them in the executable (it might anyway in some/all cases). > eg. > module main; > enum CT_STRING = "int i=0;"; > void main(){ > mixin( CT_STRING ); > } I'm using D1. Should I report this as a bug?
Re: CT usage only in executable
"strtr" wrote in message news:i1ql53$306...@digitalmars.com... > == Quote from Daniel Murphy (yebbl...@nospamgmail.com)'s article >> I think if you use enum instead of const/immutable the compiler is not >> meant >> to put them in the executable (it might anyway in some/all cases). >> eg. >> module main; >> enum CT_STRING = "int i=0;"; >> void main(){ >> mixin( CT_STRING ); >> } > > I'm using D1. > > Should I report this as a bug? Sorry, I don't have D1 installed. Can you use enum to declare manifest constants in D1 or is it a D2 thing? If the string is left in the executable from const char[] CT_STRING = "blah blah"; void main () {} then I think this is a bug/enhancement for the linker.
Re: CT usage only in executable
Daniel Murphy wrote: Sorry, I don't have D1 installed. Can you use enum to declare manifest constants in D1 or is it a D2 thing? It's a D2 thing. I believe the D1 way to do it is with static const. If the string is left in the executable from const char[] CT_STRING = "blah blah"; void main () {} then I think this is a bug/enhancement for the linker. Enhancement, I'd say. And yes, DMD does that. It's the reason for the enum manifest constants in D2. -- Simen
Re: CT usage only in executable
On 15.07.2010 02:29, strtr wrote: Not that the memory is really significant compared to the rest of my program, but I have a few fairly large arrays I use only in compile time and I was wondering why dmd still includes those in the executable (simple text search dug them up). As a workaround you could try putting those arrays in a separate module which you don't link into your executable. If you use a build tool like xfbuild, you can exclude files with the -X switch. CTFE would still work.
Re: CT usage only in executable
== Quote from torhu (n...@spam.invalid)'s article > On 15.07.2010 02:29, strtr wrote: > > Not that the memory is really significant compared to the rest of my > > program, > > but I have a few fairly large arrays I use only in compile time and I was > > wondering why dmd still includes those in the executable (simple text search > > dug them up). > As a workaround you could try putting those arrays in a separate module > which you don't link into your executable. If you use a build tool like > xfbuild, you can exclude files with the -X switch. CTFE would still work. Thanks, I'll try that if dmd will not do this as well before my program is finished :)