Sent from my iPhone

> On Dec 17, 2016, at 09:47, Xiaodi Wu via swift-evolution 
> <[email protected]> wrote:
> 
> I was thinking of even more explicitly venturing into `constexpr` territory 
> by allowing particular initializers and functions to be marked as 
> `@constantExpression` (or however you want to call it) when they use a 
> restricted subset of the language, and having the compiler evaluate those at 
> compile time when all arguments are literals. That way, you'd get 
> compile-time warnings of failable initializers guaranteed to fail _without_ 
> any changes in syntax to the language.

It wouldn't have to be restricted to a subset of the language; just to 
functions whose evaluation doesn't depend on anything that happens at runtime.

Any "@pure" (or whatever... it's easier to type on my phone than 
"@constantExpression") function should work fine, if we define a "pure" 
function to be something like:
1) Doesn't mutate anything outside its own scope
2) Doesn't call anything involving rand() or other non-deterministic functions
3) Doesn't have a result that depends on the host or target architectures (I'm 
not sure if this extends to FP subtleties)
4) Doesn't reference any non-local variables which don't themselves have a 
value that's either itself a literal or the result of evaluating a "pure" 
function
5) Doesn't call any other functions which aren't themselves "pure", or 
instantiate any variables using inits that aren't "pure"

Since there's already a Swift REPL, at least conceptually speaking, this 
doesn't seem too hard (although it does raise the bar a bit for what it takes 
to have a "full" Swift compiler, since it'd then depend on having a working 
REPL on the host platform, which IIRC wasn't the case on Linux for a while... 
dunno, maybe this is a non-issue).

- Dave Sweeris
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to