Clover2開発日誌

Clover2というJavaのように静的な型を持つRubyのようなコンパイラ+仮想マシンの開発日誌です。LLVMでJITもします。https://github.com/ab25cqにて開発しています。

version 3.5.2

シェルモードのバグを修正しました。 これで、めぼしいバグは全部修正したともいます。 次は機能拡張に移りますが、clover2-devリポジトリで開発します。 version 3.5.2を長期リリース安定版とします。 次のversion 3.5.3はclover2-devリポジトリで機能拡張…

version 3.5.1

versioin 3.5.1 ネイティブコードコンパイラにまだバグがありました。あとメソッドブロック関連でバグが頻出してまいした。かなり不安定だった様子です。修正しました。すみません。

JIT(ネイティブコードコンパイラ)

JITはversion 3.5で安定しています。 実は前完成したと思っていた時はテストの大部分のコードがネイティブコードで動いてませんでした。今回テストは全部ネイティブコードで動いてます。version 3.5で安定しました。 良かったら使ってみてください。

JIT

JIT駄目ですね。printfやprintlnさえ出来ません。3.5.0でなんとか安定させるので、待っててください。

JIT

JITのテストやっぱり全部通ってません。 あと、JIT時自動コンパイル機能がなんかおかしいんですかね。 しばらく、JITの安定化に向けて頑張ります。

version 3.3.1

version 3.3.1 メソッドの引数でboxingやunboxingが起こるようになりました。Rangeクラスを作っています。StringクラスやBufferクラス、Listクラスなどで範囲を示す引数のメソッドを追加。同一クラス内のフィールドがコマンド名より優先されない問題を修正。…

verion 3.3.0

JITでバグが見つかりました。修正。JITでテストコードを全てネイティブで動かしました。JITは安定したと思います。 とりあえず、JIT爆速です。コンパイルはやや遅いですが、動いてしまえばネイティブコードで実行時にはコンパイルしていないので、凄まじい速…

JITのネイティブコードでテストが全部動きました。

JITのネイティブコードでテストが全部動きました。 version 3.3.0

version 3.2.9

version 3.2.9 例外の起こったメソッドのソースコードと行番号が分かりやすくなりました。

version 3.2.9

version 3.2.9 クラスフィールドやクラスメソッドの検索ルーチンにバグが有りました。かなり致命的なバグでした。ダウンロードお願いします。

クラスの検索ルーチン

version 3.2.9 クラスファイルの検索ルーチンにバグがありました。かなり致命的なバグでした。ダウンロードお願いします。ほとんど正常にコンパイルできない状態でした。ダメダメですね。しばらくJITをまともに動かせるようにする作業に入ります。今でも十分…

version 3.2.9リリース

version 3.2.9 オブジェクトに型情報が入りました。new Array<String>().className().equals("Array<String>")は真です。 しばらく、JITの安定化に力を入れます。テストコードがほとんどネイティブコードでは動いていなかったためJITに幾つかバグが見つかってます。とりあえ</string></string>…

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; …

version 3.2.6

if文のバグを修正しました。

version 3.2.5

version 3.2.5 例外が起こったときに起こったソースコード名とソースコード番号のスタックトレースが表示されるようになりました。

version 3.2.4

version 3.2.4 例外が起こったときに起こった場所が出力されるようになりました。

when式を入れました。

version 3.2.3 リリース 2017/12/4 when式が入りました。 a := 123; when(a) { 1 { println("1"); } 2,3 { println("2,3"); } 123 { prinntln("123"); } else { println("else"); } } a := "ABC"; when(a) { "ABC" { println("ABC"); } "DEF","GHI" { printl…

バグフィックス

version 3.2.2b リリース 2017/12/1 '{'や"...{..."などがあると正しくコンパイルできないバグを修正。なんで、こんなバグが残っていたんだろうroz 最近は僕もClover2ユーザーとなっています。バグに遭遇したら修正していきます。とりあえず、パーサコンビネ…

フィールドのselfの省略

version 3.2.2a リリース 2017/12/1 フィールドのselfの省略にバグが有りました。修正。 version 3.2.2 リリース 2017/12/1 同一クラスのフィールドのself省略 > vim InternalFieldTest.clcl class InternalFieldTest { field:int; def initialize(value:int…

version 3.2.1リリース

同一クラスのメソッドのself省略 > vim InternalMethodTest.clcl class InternalMethodTest { def initialize() {} def method():int { return method2(); # return self.method2()と書いても良い } def method2():int { return 123 } } > vim a.cl a := new…

version 3.2.0 リリース 2017/11/29

関数の再帰表現に対応しました。スクリプト内のdefで関数を定義した場合再帰が出来ませんでしたが対応しています。(クラスのメソッドの再帰表現はもともとできる)

version 3.1.9 リリース 2017/11/28

setterとgetterがフィールドを定義すると自動的に定義されるようになりました。 > vim SetterAndGetter.clcl class SetterAndGetter { field1:int; field2: String; field3: private int; def initialize() {} } > vim setter_and_getter.cl a := new Setter…

version 3.1.8リリース

列挙型 > vim EnumTest.clclc class EnumTest { enum { Value1, Value2, Value3 } enum { BValue1, BValue2, BValue3 } } > vim enum_test.cl Clover.test("enum test", EnumTest.Value1 == 0 && EnumTest.Value2 == 1 && EnumTest.Value3 == 2 && EnumTest.…

メソッドのデフォルト引数 version 3.1.7

> vim ClassA.clcl class ClassA { def initialize() {} def method(a:int, b:int=2, c:int=3) { return a + b + c; } } > vim a.cl a := new ClassA(); Clover.test("Method arg default value", a.method(1) == 6); > clover2 a.cl Method arg default val…

version 3.1.6 リリース 2017/11/21

isメソッドがAnonymousメソッド以外にも呼べるようになりました。List<Object>などで便利だと思います。 > a := new List<Object>(); > a.add(1); > a.add("ABC"); > a.each { > if(it.is("String")) { > it.printf("[%s]"); # itはString型 > } > elif(it.is("Integer")) { </object></object>…

version 3.1.5リリース

version 3.1.5 リリース 2017/11/20 クラスの循環参照の問題を解決しました。 > vim ClassA.clcl class ClassA { field1: static int; def hello(): static { ClassB.hello(); } } > vim ClassB.clcl class ClassB { def hello(): static { println("ClassA.…

version 3.1.4リリース

クラスの自動コンパイル機能を入れました。クラス名をファイル名に持つクラスは自動的にコンパイルされます。 例えば > vim Hello.clcl class Hello { def hello() { println("HELLO WORLD"); } } > vim hello.cl Hello.hello(); > clover2 hello.cl HELLO W…

version 3.1.2リリース

Darwinでコンパイルとテストしました。一応動いている様子です。深くはチェックしません。その時クラスフィールドやクラスメソッドを呼び出すとき小文字で始まるクラスはクラスフィールドやクラスメソッドは呼べなくしました。ちょっと色々ありまして。OSXは…

version 3.1.1リリース

version 3.1.1 リリース 2017/11/14 ナルエイブルを入れました。 a:String = null; # コンパイルエラー b:String? = null; # nullは代入できる。bは空だということでnullを代入している。 # ただし、bはnullが入っているかどうか注意してコーディングしない…