intern

RubyではStringとSymbolが分かれていますが、Xtalでは分かれていません。
当初は分かれていたのですが、そもそもStringは変更不能オブジェクトなので分ける必要性は無いと気付いたためです。

Xtalは基本的にソースコード上に書かれた文字列リテラルは全てinternされています。
連結してできた文字列などはinternされていません。文字列に対しinternメソッドを呼び出すことでinternされた文字列を取得することが出来ます。
既にinternされていた場合、その文字列自身が取得できます。

 str : "a" + "b";
 println(str === "ab" ? "yes" : "no"); // => no
 println(str.intern === "ab" ? "yes" : "no"); // => yes
 println(str.intern.intern === "ab" ? "yes" : "no"); // => yes