1 の脳内で動くと思われる Uva

オレオレ言語の Uva 熱が続いているので Uva のことについて書く。

Uva って何?

Uva は Ceylon をベースにしています。
Ceylon は結構良い構文だし、Uva*1 は Ceylon のサブセットらしいので、そんな感じの名前にしました。
多分、色々と Ceylon と違うくなるはずです…………。

変数定義

Uva は識別子の前の方に型を書く言語です。
hoge という整数型の変数を定義してみましょう:

int hoge;                 // Syntax Error!

さて、これはシンタックスエラー*2です。
Uva の変数はデフォルトで変更不可なので、上記のようにすると hoge に値を再設定*3できません。

変更可能な変数にはアノテーションとして variable を付けます:

variable int hoge;        // OK

暗黙的に型指定されるローカル変数

コンパイル時に型推論されるようにするには C# であれば このように書きます:

var hoge = 42;

Ceylon では:

value hoge = 42;

と書きますが、Uva では:

auto hoge = 42;

です。

variable の後に value と付くことも考えられるので、var が被ってしまうのは美しくないような気がします。
なので、C++ から取って auto としました。

また、auto は関数の戻り値の型としても使えます*4

auto plus(int a, int b) => a + b;             // plus の型は int(int, int)

Uva での auto は疑似型*5で、キーワードです。
どのような型の値でも格納できる型は別にあります。
それが any です。

anyAnythingエイリアスです。
uva.language 名前空間に恐らく以下のように定義されているはず*6です。

alias any => Anything;

(๑´ڡ`๑) おしまい

*1:tea の方

*2:Warning でもいいかもしれないけど、再設定できないわけで意味がない

*3:代入と書いても良い気がする

*4:使えるといいなーって思ったんだけど、できるかどうかは不明

*5:コンパイル時に実際の型が決定されるのであって、auto という型は存在しない

*6:あるいはそのように定義されているように処理系が振る舞う