version 3.2.9リリース
version 3.2.9
オブジェクトに型情報が入りました。new Array<String>().className().equals("Array<String>")は真です。
しばらく、JITの安定化に力を入れます。テストコードがほとんどネイティブコードでは動いていなかったためJITに幾つかバグが見つかってます。とりあえず、テストを全部クラス化して、テストをネイティブコードで行ってみます。JITが安定したら、version 3.3.0かもしくはversion 3.5.0としてリリースしたいと思います。
その後はパターンマッチング、Thread, Socket辺りを入れて、Clover2でパーサコンビネータとLispを実装してバグが無いと判断したら、version4.0.0としてリリースする予定です。version 4.0.0で一応は完成とします。REPLのバグも注意してなくしたいと思います。version 4.0.0はWindowsで言うNT4.0という感じですね。一応の完成形です。その後はちまちまとC言語のライブラリをClover2から使えるようにしていく作業を続けるくらいです。version4.0を楽しみにしてください。
version 3.2.8リリース
version 3.2.8
数値のラッパークラスのオブジェクト表現を入れました。
a:Integer = 5I;
b:UInteger = 5UI;
c:Byte = 5Y
d:UByte = 5UY;
e:Short = 5S;
f:UShort = 5US;
g:Long = 5L;
h:ULong = 5UL;
i:Float = 5.5F;
j:Double = 5.5D;
version 3.2.7リリース。パターンマッチングを実装していってます。
version 3.2.7
whenの仕様が変わってます
whenにwildcardを入れました。
> vim PaternMatching.clcl
class PatternMatchingTest
{
value1: int;
value2: String;
def initialize(value1:int, value2:String) {
self.value1 = value1;
self.value2 = value2;
}$
def equals(right:PatternMatchingTest):bool {
return self.value1 == right.value1 && self.value2.equals(right.value2);
}
}
class PatternMatchingTest2
{
value1: Integer;
value2: String;
def initialize(value1:Integer, value2:String) {
self.value1 = value1;
self.value2 = value2;
}$
def equals(right:PatternMatchingTest2):bool {
return self.value1.equals(right.value1) && self.value2.equals(right.value2);
}$
}$
> vim a.cl
a:Anonymous = "ABC";
c:String = when(a) {
is String {
a;
}
else {
"else";
}
}
Clover.test("Pattern matching test", c.equals("ABC"));
b:Anonymous = new Integer(123);
d:String = when(b) {
!is String {
"111";
}
else {
"else"$
}
}
Clover.test("Pattern maching test2", d.equals("111"));
e:Anonymous = new PatternMatchingTest(111, "ABC");
f:String = when(e) {
case new PatternMatchingTest(111, "ABC"): {
"ABC";
}
else {
"DEF";
}
}
Clover.test("Pattern matching test3", f.equals("ABC"));
g:Anonymous = new PatternMatchingTest(222, "DEF");
f = when(g) {
case new PatternMatchingTest(111, "DEF"): {
"ABC"
}
case new PatternMatchingTest(222, wildcard): {
"DEF";
}
else {
"GHI";
}
}
Clover.test("Pattern matching test4", f.equals("DEF"));
i:Anonymous = new PatternMatchingTest2(123, "ABC");
j:String = when(i) {
case new PatternMatchingTest2(wildcard, wildcard): {
"ABC";
}
else {
"DEF";
}
}
Clover.test("Pattern matching test5", j.equals("ABC"));
ただし、wildcardはプリミティブ型には代入することができないので、wildcardを使いたい時はintクラスじゃなくてIntegerクラスなどを使ってください。
version 3.2.6
if文のバグを修正しました。
version 3.2.4
version 3.2.4
例外が起こったときに起こった場所が出力されるようになりました。