On Wed, 30 May 2012 11:33:54 -0400, Michel Fortin <michel.for...@michelf.com> wrote:

On 2012-05-30 14:44:37 +0000, "Steven Schveighoffer" <schvei...@yahoo.com> said:

On Tue, 29 May 2012 13:35:12 -0400, Michel Fortin <michel.for...@michelf.com> wrote:

Personally, I think it'd be much cleaner to go with some kind of magic function than trying to match the condition against a predefined pattern. Something like da.isSliceOf(a), which could do the usual pointer thing at runtime and call some sort of CTFE intrinsic at compile-time.
That doesn't help when most code does not use this today. I.e. one of the main benefits of ctfe is that you don't *have* to write special code.

But at the other end, there should be an easy to understand separation between what is supported by CTFE and what is not. Once you try to add special cases for some code patterns by adding heuristics, those heuristics now define the line and would have to become part of the language specification.

More generally, the drawback of this kind of pattern recognition is that there's an infinite pool of equivalent patterns to recognize, and seemingly innocuous changes to a CTFEable function could break its CTFEablility if they happen to cross the invisible boundary.

I'm just trying to point out the drawbacks of too clever heuristics. If such an heuristic is used, I think it should be limited in scope and well documented. Unfortunately, that means you'll still have to care about writing code in a way that fits the documented pattern. It'd be much easier to reason about CTFEability if the pattern had to be encapsulated in its own function.

Unless of course, you simply always allow it, which is what I think we should do :)

-Steve

Reply via email to