この仕様はコンパイラを作るうえでは高速化の障害になるだろう。コンパイラのことは気にしないでやってみることにした。変数を交換する関数swapがあったとする。書いて呼び出すことになるだろう。書くことができるだろう。毎回&を付けるのは煩雑になるだけだから。&を付けることによって、この関数呼び出しによってaやbが書き換わりうることを表現できているともいえるのだけど。引数のほうが書き換わるという仕様はKには気持ち悪い。値の変更は代入によって引き起こされるべきである。そんなわけでEssenではこうなった。a)これはわかりやすいし簡潔だ。ちなみに同様のことはRubyでもできる。みたいな書き方をすることはできる。現在のEssenの仕様では、文末のセミコロンは省略できる。5みたいな書き方ができる。これは気持ち悪いと感じるかもしれない。セミコロンの省略は「可能な選択肢」なのであって「義務」ではない。気持ち悪ければ省略しなければいいだけである。こんな仕様を採用したのか。・・・初期のEssenではif文やfor文や関数宣言の末尾にセミコロンが必須だった。それは「文末」だから。CやC++ではそんなものは書かない。できれば書かなくてもいいようにしたかった。加えて、行の末尾のセミコロンが省略できたら、ちょっと便利かもしれないなと思うことは何度かあった。現在の仕様ならこれも受け入れられるので、面白いなと思った。関数宣言の構文Essenの関数宣言構文は以下のとおりである。...}つまりfunctionが関数を作る演算子で、その結果を変数funcに代入しているだけである。関数も第一級のオブジェクトとして扱われるべきだし、それにはこの構文が一番適していると思う。ローカル変数の定義#当初Essenでは、未定義の変数への代入を発見したら、無条件で変数を生成して代入する仕様だった。ローカル変数域に作ったらいいのか、それともグローバル変数域に作ったらいいのか判断に迷うケースがあるからである。あるコード片があったとして、そのスコープの外側で宣言された変数があるかないかでコード片中の変数がローカルになるかならないかが変わってしまうというのは、コード片の「部品化」を妨げる仕様であって非常に良くない。いうことで、ローカル変数は初出時に#をつけさせることにした。これで問題は起きないはずである。