たとえばこんな俺言語

Java言語を使っていると、StringとStringBufferのようにimmutableオブジェクトとmutableオブジェクトが用意されている場合がある。個人的には同じ概念を持つオブジェクトを実用上の理由で複数用意しなければならないというのはかっこ悪いと思う。

例えば、こんな言語仕様があればよい気がする。まずatomicキーワードを用意し、状態を変更しないメソッドにのみ付加できるようにする。

public class String {
    private byte[] data;
    ....

    // atomicなメソッドではreadだけ
    // atomicなメソッドの中ではatomicなメソッドしか呼び出せない
    public atomic char charAt(int i) {
        return data[i];
    }

    // 普通のメソッドはwrite OK
    public void setCharAt(int i, char c) {
        data[i] = c;
    }
}

で、実際に使用するときには、次のようになる。

    String a = "ほげ";
    a.setCharAt(1, 'が');        // OK

    String@ b = (String@)a;      // immutable化
    b.charAt(1);                 // OK
    b.setCharAt(1, 'げ');        // compile error!

    String c = (String)b;        // OK immutable解除
    c.setCharAt(1, 'げ');        // OK

めんどくさいですか。そうですか。