Const sucks

Bruce Adams tortoise_74 at yeah.who.co.uk
Tue Sep 11 13:24:14 PDT 2007


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";
> >>>> I'm not clear why this is even needed. Surely "static const" implies
> >>>> 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).
> >>> windows.h in all its terrifying glory has 10,000 macro declarations. If 
> >>> each one occupied 4 bytes of static data, there's 40K of bloat in every 
> >>> exe.
> >> That sounds about right.  When we converted const values to enum values 
> >> 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.
[ouch - my grammar and speiling was terrible this morning.]
> 
> 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.
> 
> 
> Sean

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?




More information about the Digitalmars-d mailing list