5 ms·
> except that I'm not sure how different it is from mine, because the equational law you refer to applies to syntactic terms An effectful language can be given
by catnaroek 10y ago
> except that I'm not sure how different it is from mine, because the equational law you refer to applies to syntactic terms
An effectful language can be given a denotational semantics. At least from what I've seen, when most people say “pure”, they mean “effect-free”.
> It's easy to come with an equivalence relation that would hold for `foo`, but not at the syntax level [emphasis mine]
Yep, indeed, that's the whole point.
- pron 10y ago> when most people say “pure”, they mean “effect-free” But saying "effect free" doesn't mean much unless you define what an effect is, and what constitutes an effect depends on the language. I meant to define the same thing without referring to another vague definition.
- catnaroek 10y agoI already defined above what an effect is. My definicion is technically precise and language-independent.
- pron 10y agoOK, so you define effect-freedom using the language's equality operator. I agree it's a better definition than mine, but I think assembly language and BASIC would still qualify as effect-free (provided there's no concurrency) even though some people would not consider them pure.
- catnaroek 10y ago> OK, so you define effect-freedom using the language's equality operator. Not the runtime equality testing operator. Rather, the language's static notion of contextual equivalence. It just happens to be the case that most high-level languages provide a built-in equality testing operator that works on primitive types, returning `true` iff its operands are contextually equivalent values. > I think assembly language and BASIC would still qualify as effect-free I don't even know what a good notion of contextual equivalence for any assembly language would be. As for BASIC, I haven't used the old ones, so I can't comment on them. I've used Visual Basic, which most certainly has effectful procedures.
- pron 10y ago> Not the runtime equality testing operator. Rather, the language's static notion of contextual equivalence. How is that different from denotational semantics? > The ones that can be effectful or effect-free are specific computations, not whole languages. Well, we could define an effect-free language as one where all programs are effect-free. But anyway, what is the "static notion of contextual equivalence" in assembly (or BASIC), and how can you write an effectful program in such a language?