String Mixins & Compile Time Evaluation
Don
nospam at nospam.com
Tue Nov 17 04:48:48 PST 2009
Bill Baxter wrote:
> On Tue, Nov 17, 2009 at 4:17 AM, Don <nospam at nospam.com> wrote:
>> Bill Baxter wrote:
>>> On Tue, Nov 17, 2009 at 2:07 AM, Don <nospam at nospam.com> wrote:
>>>> Travis Boucher wrote:
>>>>> I've been playing with string mixins, and they are very powerful.
>>>>>
>>>>> One thing I can't figure out is what exactly can and cannot be evaluated
>>>>> at compile time.
>>>>>
>>>>> For example:
>>>>>
>>>>> ----
>>>>> char[] myFunc1() {
>>>>> return "int a = 1;";
>>>>> }
>>>>>
>>>>> char[] myFunc2() {
>>>>> char[] myFunc3() {
>>>>> return "int b = 2;";
>>>>> }
>>>>> return myFunc3();
>>>>> }
>>>>>
>>>>> void main() {
>>>>> mixin(myFunc1());
>>>>> mixin(myFunc2());
>>>>> }
>>>>> ----
>>>>>
>>>>> myFunc1() can be used as a string mixin.
>>>>> myFunc2() can't be.
>>>> I think you're using an old version of DMD. It's been working since
>>>> DMD1.047. Please upgrade to the latest version, you'll find it a lot less
>>>> frustrating.
>>>> The bottom of "function.html" in the spec gives the rules.
>>>> Though it says nested functions aren't supported, but they are.
>>> Ah, forgot about that list. Good point.
>>> But still Travis should know that the list is not exhaustive.
>>> For instance the other day I found that this didn't work for some reason:
>>>
>>> while(i < a - b) { ... }
>>>
>>> Instead I had to do
>>>
>>> int limit = a-b;
>>> while(i < limit) { ... }
>> I can't reproduce it. Do you have a complete test case?
>
> Doh! Now I can't either. Maybe it was just a typo that I didn't notice.
>
> How about C functions? Any chance those'll ever work? Particularly C
> stdlib functions. They're one of the major things I'm finding
> prevents std.string functions from being used CTFE.
I don't think it could ever work. CTFE needs to have the source available.
If we really needed to, a few C stdlib functions could be made into CTFE
intrinsics. But in general, no.
Some form of if(__ctfe) will happen, though.
More information about the Digitalmars-d-learn
mailing list