Clover2開発日誌

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

2017-10-01から1ヶ月間の記事一覧

List.mapが型チェックをするようになりました。

List.mapが型チェックをするようになりました。 l: List<String> = list { 1, 2, 3 }.map() {|n:Integer| return n.toString(); } はコンパイルできます。 これまで通りのAnonymousを返すコードもそのまま動きます。 一応互換性がある変更点です。 KotlinのList.map</string>…

method genericsを入れました

新しい機能としてmethod genericsを入れました。 def <T:Object,R:Object> method(a:T, b:R) { } のように定義します。詳しくはwikiで。 これでList.mapの記述が型チェックを行えるようになります。 まだバグがあるかもしれません。 List.mapはまだ定義してません。明日以降しま</t:object,r:object>…

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

LLVMのJITのリファクタリングが一応終了しています。 ちょっとは読みやすくなったかと。 ついでにlist { 1, 2, 3 }.toString().println();がJITでは動かなかったですが、デバッグしています。 これでようやくKotlinに近づけるコーディングを始められます。 …

LLVMのリファクタリング

LLVMのリファクタリングを行ってます。 しばらく時間がかかります。 developリポジトリで開発しています。 シンプルなソースにしたいと思います。 具体的にはLVALUEに格納している値の種類を追加しています。 そうするとだいぶソースが整理されるので。 今ま…

バグ修正中です。

JITでlist { 1, 2, 3 }.toString().println()が動きません。只今修正中です。 少しの間JITをリファクタリングします。もう少し読みやすく整理しますね。リポジトリはdevelopで作業しています。 あとデバッグ時にスタックの値が表示できないのをなんとかした…

言語仕様の変更点

ブロックが block { a := 123 } などから { a := 123 } に変更されています。ブロックは戻り値を返すようになりました。最後に実行された式の値がブロックの戻り値です。a := { 123 }; System.assert(a == 123)は真です。ブロックの表記が変わったので配列の…

if文が戻り値を返すようになってます。

if文が戻り値を返すようになってます。JIT対応。 > a := if(true) { 1 } else { 2 } > a 1 となります。JITでも対応しています。 もちろん、インタプリタでは > if(true) { "ABC" } else { "DEF" }.[TAB] でString型のメソッド補完も行います。 次はブロック…

Kotlinショック

Kotlinのドキュメント読んでいます。素晴らしいです。表記がホント凄いですね、、、、。Swiftは出力するコードは速いと思いますが、ちょっと表記がイマイチですね。後発の割には。 Kotlinの表記を見習って幾つかClover2に改良を加えたいと思います。 Clover2…

クラス名の補完

new, :の後にクラス名の補完をするようになりました。Generics対応です。 だいぶJavaのIDEに近づいてます。 ちょっと外部コマンド名の補完がどこでも出来てしまうので、補完するときに邪魔になりますね。うーむ。ちょっと対策を考えます。 Clover2は実際その…

クラス名の補完

:のあとにクラス名の補完をするように修正しました。 あと昨日のgithubのリポジトリへのプッシュでシェルモードで補完がエンバグしてました。修正しています。 あとはnew の後のクラス名の補完を入れたいのですが、まだ途中です。まあ、ぼちぼちやっていきま…

ローカル変数名の補完、シェルモードのバグを修正

ローカル変数名の補完を入れました。 ほとんどJavaのIDEのような使い心地になってます。 たぶん。大体の場所で補完は効きます。 ただ、変数のクラス名の補完などはまだ入れてません。 > a:Inte[TAB] > a:Integer なんていうやつは入ってません。それをまた入…

ブロック内でメソッド名の補完ができるようになりました。

ブロック内でメソッド名の補完ができるようになりました。 とりあえず、補完はほぼ完成しています。 後はローカル変数名の補完ですかね。足りないのは。それを明日以降追加したいと思います。大体は補完が効くのでJavaのIDEにだいぶ近づいた感じです。 しば…

カレントプログラムの実行をシェルモードに追加。String.clcの見直し。

カレントプログラムの実行をシェルモードに追加しました。 > ./configure --prefix=$HOME --with-optmize などがシェルモードで動きます。これで一応僕が普段実行するコマンドは全部動くようになりました。現在はClover2をiclover2上で開発しています。 iclo…

splitのバグを修正。シェルモードで引数のグロブのバグを修正。シェルモードに環境変数の展開を追加

splitのバグを修正。シェルモードで引数のグロブのバグを修正。シェルモードに環境変数の展開を追加 とりあえず、シェルモードの使い勝手を上げています。自己満ですが、インタラクティブに基礎ライブラリのバグのチェックもできますし、やっぱり自分でも使…