On Tue, Jun 17, 2014 at 06:08:57PM +0000, via Digitalmars-d wrote: > On Tuesday, 17 June 2014 at 17:19:25 UTC, H. S. Teoh via > Digitalmars-d wrote: [...] > >There's no need to get rid of string mixins just because of that 1% > >of code that actually needs to use them. Nobody says that the > >transformation must work on 100% of all D programs, otherwise we > >can't have it at all. > > The language should guarantee that you can detect deprecated > features with 100% certainty. Otherwise you risk distributing > template-libraries that don't work for certain configurations.
Unfortunately, CTFE makes this task impossible. Consider this: int ctfeFunc() { if (solveHaltingProblem()) { useDeprecatedFeature(); } else { useNonDeprecatedFeature(); } } enum x = ctfeFunc(); How would the compiler (or any tool!) detect the use (or non-use) of deprecated features here? > If you want to reduce the deployed code size you might want to > translate code into something that can be transferred fast to > web-browsers. That means you have to be able to translate 100%. If you want it to run in a browser, and the browser doesn't support certain language features, then you'll just have to restrict your code to the subset of the language that's implementable in a browser, no? > Of course, it is possible to avoid string mixins, but the same holds > for #define(x…) in CPP. I think that's gross exaggeration. #define is ubiquitous in C/C++: you can hardly find any non-trivial program that depends on it, because the language doesn't provide a way to express certain things otherwise. In D, however, we have version, static if, and a whole bunch of other niceties that makes string mixins unnecessary in 99% of cases. String mixins are MUCH easier to avoid in D, than #define's are in C/C++. T -- Notwithstanding the eloquent discontent that you have just respectfully expressed at length against my verbal capabilities, I am afraid that I must unfortunately bring it to your attention that I am, in fact, NOT verbose.