www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Re: Const sucks

Sean Kelly Wrote:

 Bruce Adams wrote:
 Sean Kelly Wrote:
 Walter Bright wrote:
 Bruce Adams wrote:
 o  So, we still need a method to declare a constant that will not
  consume memory. We'll co-opt the future macro syntax for that:

 macro x = 3; macro s = "hello";

some level of don't consume any memory by virtue of meaning "available at compile time". If you need more than that, rather than trusting the compiler then I second "inline" rather than macro, but honestly I can't think of an example where this will give you a worthwhile performance gain (unlike an inline function).

each one occupied 4 bytes of static data, there's 40K of bloat in every exe.

in the Tango Win32 headers, app size dropped by roughly 46k. But there were issues with some of those enum values having the wrong type (-1 set to int instead of uint), which led to a few strange bugs. Sean

I seek enlightenmnet for at least two problems with that explanation. windows.h is a C binding not a D binding. I'm not clear how one translates to the other yet as I've avoided bi-lingual stuff so far. Presumably the D binding is created using htod.

htod works for simple cased. More complex cases require GregorR's BCD or simply a manual effort.
 I thought D followed the you only pay for what you use philosophy.
 So if I import my windows.d module I will only pay the cost of the
 variables I actually use. My friendly neighbourhoold compiler, being clever,
mightl also make an effort to minimise the cost of those too.

D currently links at the file level, so if you use anything in a file you get the whole thing. Some linkers are able to link at the section level (a piece of a file), but D does not support this yet (see comments regarding gc-sections using ld, I believe--there's an issue in BugTracker about this).
 While we're on the subject of windows. 40K means nothing. In an embedded
system yes. Windows is bloated to the point where 40K in a user application
means de nada. (I shudder at the 4Gb games that follow in its wake too). I have
know idea where the windows mobile / CE / pocket PC api falls here.

 It matters to some people, particularly those coming from C and 
 comparing EXE sizes.  It may not be relevant as far as general 
 development on Windows is concerned, but it's something library 
 developers must take into consideration.

I strongly disapprove of designing language features based around a particular current compiler implementation, especially one that is currently less than optimal by the sound of it. Can anyone come up with an example where this would actually provide a significant benefit?
Sep 11 2007