On Monday, 1 October 2012 at 17:53:35 UTC, Tommi wrote:
On Monday, 1 October 2012 at 08:00:47 UTC, Jakob Ovrum wrote:

The only real problem here is that you wrote a function called pow2 that effectively returns 6 unconditionally. I doubt your math professor would be particularly impressed. If you had used __ctfe properly, it would return the same value both at compile-time and runtime. At present, __ctfe is a necessary evil as CTFE can be severely crippled without it.

I solemnly swear not to use __ctfe improperly. But my problem with it is, that there *exists* the possibility of improper use of __ctfe.

Can you name a programming language that supports CTFE, but doesn't allow the possibility of misuse?

Actually, can you name any language with a safety or purity feature that cannot be thwarted by a motivated programmer?

To echo Jonathan's sentiment, no programming language can stop a programmer who is determined to write stupid code from doing so.

For the sake of discussion, here's an example of a pure function in Haskell (arguably the "purest" language in wide use today) that happily returns a random integer every time it is called.

import System.IO.Unsafe
import System.Random

pureFunction :: () -> Int
pureFunction x = unsafePerformIO impureInside
    where impureInside = getStdRandom (randomR (1,6))

main = do
  print (pureFunction ())
  print (pureFunction ())
  print (pureFunction ())

This prints three random integers between 1 and 6 when executed.

-- Graham

Reply via email to