The reader may be surprised to learn that the Devil is an accomplished programming language designer. Indeed, he has made significant contributions to the field. But the Devil takes no credit for his work, because it is a strategic desideratum of applied deviltry that devilish involvement in human affairs should go unnoticed. This strategy of concealment has been so effective that most readers will take the story I am about to tell as allegory. By all means, believe that. You’ll sleep better.

A long, long time ago, in a land far away, the Devil approached the great language designer Mr. C with an idea.

Devil: Mr. C, I have a delightful notational innovation I’d like to share. May I show it to you?

Mr. C: By all means.

Devil: It is a modest extension to your own work, but one of great power. Consider a simple expression, say

λxy.x+y

My proposed extension is

λxy.δz.x+y+z

Mr. C: What does this new expression mean?

Devil: The δ symbol is used to introduce an additional ‘special’ value z, which takes on random values.

Mr C: I see. This would make it difficult to reason about the value of the resultant expression, would it not?

Devil: Yes, exactly. You have grasped the matter immediately. Are you on board?

Mr. C, an old-fashioned mathematician obsessed with mere correctness, was not on board. The Devil was disappointed, but he is nothing if not patient. He spent some years thinking about the matter and approached another language designer, the celebrated Mr. S.

Devil: Mr. S, I have a wonderful notational advance I’d like to share. May I show it to you?

Mr. S: Please do.

Devil: It is a simple extension to your own work, but one of transformative power. Consider a simple expression, say

(define (f x y) (+ x y))

My proposed extension is

(define (f x y [z]) (+ x y z))

Mr. S: What does your proposed extension accomplish?

Devil: The [z] notation is used to introduce an additional ‘special’ value z, which can effectively take on random values. At runtime, any process whatsoever is allowed to change the value of z, at any time. The caller does not even have to provide a value for z, the runtime will do it. Or if a value is provided, the runtime may change it. Or not.

Mr S: An interesting idea. Would this not lead to pain, madness, chaos, and despair among users of this new feature?

Devil: Why yes, yes it would. I can see you have insight, and are a man after my own heart.

Alas, the Devil had misjudged Mr. S, who was not tempted.

The Devil could hardly believe Mr S would turn down such an opportunity. He had a nagging suspicion that his wonderful idea was being rejected for essentially syntactic reasons. Language designers are funny that way. Besides, what else could it be? So the Devil waited and thought, and redesigned, and waited.

Eventually the Devil approached another language designer, one whom propriety bids I must leave nameless.

Devil: My good fellow, I have a most wonderful construct I’d like to show you.

Designer: What do you have?

Devil: Check this out.

Class Foo {
  int z;
  void set_z (int w){this.z = w;}
  int bar(int x, int y){return x+y+z;}
}

Designer: You do realize the language is multi-threaded?

Devil: Why yes, yes I do. I’m counting on it. Allows mutation too, as I recall.

Designer: The syntax may need a bit of work, but I think we have something here.

The rest is history.