Clover2開発日誌

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

LLVMのリファクタリングが一応終了

LLVMJITリファクタリングが一応終了しています。

ちょっとは読みやすくなったかと。

 

ついでにlist { 1, 2, 3 }.toString().println();がJITでは動かなかったですが、デバッグしています。

 

これでようやくKotlinに近づけるコーディングを始められます。

今のところ考えているのは

 

1. List.mapのためにクラスのメソッドのにクラス引数を渡せるようにしたいこと。(今はクラス単位でしか渡せない。その為List.mapの定義がAnonymousを使っているため煩雑になっている。)

class List<T>

{

def <T, R> map(trans:lambda(T):R): List<R>

}

 

などと定義したい。

 

2. メソッドのラムダ引数の省略。Kotlinでいうit, it2ってやつです。

 

3.times() { it.toString().println(); }

 

などと使えるようにしたい。

 

3. new 演算子の省略

 

a := List([ 1, 2, 3 ])

 

でlist { 1, 2, 3 }の代りに使えるようにする。list { 1, 2, 3 }自体は残しておきます。

 

4.型推論の強化

 

Kotlinのようにブロックを含むメソッドチェインをしたときに簡単な記述で書けるようにしたい。

 

点です。とりあえず、1から始めます。KotlinのList.mapの定義の綺麗さに感動しました。当たり前のことを当たり前のようにしているKotlinは素晴らしいです。普通なんですよね。なんか全てが。

 

 

ようやく、今日から新しいことができます。List.mapの定義がKotlinっぽくなるのが楽しみです。

 

それではenjoy progmirang!