Clover2開発日誌

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

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

ローカル変数名の補完を入れました。

ほとんどJavaIDEのような使い心地になってます。

たぶん。大体の場所で補完は効きます。

ただ、変数のクラス名の補完などはまだ入れてません。

> a:Inte[TAB]

> a:Integer

なんていうやつは入ってません。それをまた入れたいと思います。

:のあとはクラス名の補完が行われるようにしたらいいですね。

それほどは難しくないですね。

ローカル変数の補完は以下のようです。

> if(true) { abcdefghi := "ABC"; abcde[TAB]

> if(true) { abcdefghi := "ABC"; abcdefghi

かなり良い感じになってます。もちろんabcdefghi.[TAB]とするとString型のメソッド名の補完となります。

 

シェルモードのバグは見つかりにくいもので以下のようなバグが有りました。

> ls | less; 1.toString().toCommand().less()

 

の1がエラーとなっていました。シェルモード後の文がおかしくなってました。修正しています。

 

シェルモードのパースはちょっといい加減な感じでまだバグがありそうな予感があります。個人的に使っていってバグが見つかれば修正しますね。

まあ、ぼちぼちですね。かなり補完が良い感じに仕上がってますので、インタプリタとしても使ってあげてください。

しばらく、補完を予想通りの動きに仕上げます。

それが終わったら、ようやく言語機能の拡張に入ります。

お楽しみに。

 

それでは、enjoy programing!

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

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

とりあえず、補完はほぼ完成しています。

後はローカル変数名の補完ですかね。足りないのは。それを明日以降追加したいと思います。大体は補完が効くのでJavaIDEにだいぶ近づいた感じです。

しばらく補完をほぼ期待通りの動作にする作業に入りたいと思います。あんまり完璧は無理かもしれません。

それが終わると、やっとdelegateなど言語機能の追加やThreadやSocketなどのライブラリの作成部分に入れます。楽しい部分なので今からワクワクしています。delegateは他の言語にはない様子なのでアイデアを形にするのが楽しみです。詳細は秘密です。楽しみにしていてください。継承の代わりになる強力な言語機能だとは言っておきます。

 

それでは、enjoy programing!

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

カレントプログラムの実行をシェルモードに追加しました。

 

> ./configure --prefix=$HOME --with-optmize

 

などがシェルモードで動きます。これで一応僕が普段実行するコマンドは全部動くようになりました。現在はClover2をiclover2上で開発しています。

iclover2上で開発しているためStringクラスのチェックも行えました。

ライブラリの仕様が変わってます。subのブロックの引数の順番が変わってます。subのreplaceのブロックは第二引数でしたが末尾になっています。もし、Clover2でコードを書かれていたら変更お願いします。これから、もし、ライブラリの変更があったらwikiのライブラリの変更の章に書いていきますので、一応そこに目を通しておいてください。変更理由はブロックの糖衣構文のためブロックの引数は末尾にあったほうがいいためです。以下のように書けるようになりました。

 

> "ABC".sub(/A/) { |str:String| return str.append("X"); }

> AXBC

 

のような感じです。group_stringsも省略できるように改良しました。

 

しかし、iclover2の補完の出来はまだまだです。ブロック内の変数など補完できるようにしたいです。今日から暫くその作業に入ります。パーサーはClover2のものを使い型を特定できるようにしてJavaIDEのような補完ができるように改良します。今のところ、独自にパースしているためブロック内などで型が特定できていません。

iclover2が満足できるできになったら、バージョンをあげます。

 

その後、delegateという継承の代わりのようなものを入れたいと思っています。実装付きインターフェースは入れないかもしれません。delegateとmoduleで十分継承の代りになりそうなので。そのあとはSwiftやKotlinを目指して、ぼちぼち本格的なオブジェクト指向言語を目指して開発していきたいと思います。まだ作り始めて1年半くらいですが、4年後にはSwift並のものを作りたいと思っています。Swiftも開発に4年かかったそうなので。

 

下地はできています。JITはClover2のコンパイル時にネイティブコードにコンパイルしてしまっていますし、速度的には十分な物が出ています。あとはコンパイラーの改良なので、意外と簡単に終わってしまうかもしれません。まあ、楽しみにしていてください。これからもClover2をよろしくお願いします。

 

それではenjoy programing!

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

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

 

とりあえず、シェルモードの使い勝手を上げています。自己満ですが、インタラクティブに基礎ライブラリのバグのチェックもできますし、やっぱり自分でも使っていかないと駄目ですね。

String.splitが変な動作していました。修正しました。

後はシェルモードで環境変数を展開するようにしました。

 

シェルモードでのやり残しは後は

./configure --prefix=$HOME --with-optimize

などのパスを指定する外部コマンドの実行ですね。

それでシェルモードは大体は満足です。

 

一応今日書いたsplitのデバッグでは

 

> "A,B,C".split(/,/) {|str:String| return str.append("X"); }

=> { AX, BX, CX }

 

などが動いています。割りとスッキリした記述でしょう?

型推論と引数のブロックの糖衣構文でだいぶ良い感じになってきました。

まだまだ完成度を高めます。まあ、ぼちぼちですが。

目標はSwiftやKotlinのようなモダンなプログラミング言語です。

インタラクティブモードも完成度を高めていきたいと思います。

まだ補完が完全ではありません。ブロックの中では全然補完が効きませんし。そのあたりもぼちぼち改善していきたいと思います。

シェルモードの改良

シェルモードの改良をしています。make && make installなどシェルモードで&&と||が動きます。

あとはCommandクラスにまだバグがあったので修正。SIGPIPEのブロックをしていなかったため存在しないコマンド名を実行するとパイプのwriteでシステムが落ちていました。

 

とりあえず、シェルモードで不便だと思ったのはegrep "str str" src/*.cが動かないこと。(クォートがない)

と、./configure --prefix=$HOMEなどパスを指定してので外部コマンドの実行が出来ない点です。明日以降作っていきたいと思います。

 

たぶん、ユーザーの方はシェルをbashやyash, zshからiclover2乗り換える方はいないと思うので、自己満足ですね。たぶん、ユーザーの方は言語機能の方に興味があると思うので、シェルモードが満足するできになったら、次は言語機能をモダンなものにしていきます。そっちの方に皆さん、興味がありそうですし。Swiftくらい完成度が高いものにしたいと思います。お楽しみ。

シェルモードの改良

シェルモードの改良をしています。make && make installなどシェルモードで&&と||が動きます。

あとはCommandクラスにまだバグがあったので修正。SIGPIPEのブロックをしていなかったため存在しないコマンド名を実行するとパイプのwriteでシステムが落ちていました。

 

とりあえず、シェルモードで不便だと思ったのはegrep "str str" src/*.cが動かないこと。(クォートがない)

と、./configure --prefix=$HOMEなどパスを指定してので外部コマンドの実行が出来ない点です。明日以降作っていきたいと思います。

 

たぶん、ユーザーの方はシェルをbashやyash, zshからiclover2乗り換える方はいないと思うので、自己満足ですね。たぶん、ユーザーの方は言語機能の方に興味があると思うので、シェルモードが満足するできになったら、次は言語機能をモダンなものにしていきます。そっちの方に皆さん、興味がありそうですし。Swiftくらい完成度が高いものにしたいと思います。お楽しみ。

Commandクラスのバグを修正

ちょっとCommandクラスが不安定だったので修正しました。

そのためmbstowcsの仕様が少し変わってます。必ずnull-terminatedされます。引数の数も変わってます。

 

後はシェルモードでls -al | less, egrep ^p src/*.cなどが動くようになりました。内部的には単なるメソッドとなります。

これによってシェルとしてREPLが使いやすくなってます。

あとはmake && make install && make testや./conifugre --prefix=$HOME --with-optimize辺りが動くようにしたいです。単なる糖衣構文になるので、特に難しくはないです。

僕自身もREPLとして使っていってます。なかなか楽しいです。

シェルモードが満足行くできになったら言語機能をSwiftに近づけていく作業に入りたいと思います。主にコンパイラの方の拡張なので、それほど難しくはないと思います。

そっちの方がユーザーに喜ばれそうですね。SwiftとかKotlinに近づけてモダンなプログラミング言語にしたいと思います。シェルモードはおまけです。やっぱり自分自身で使ってあげられないと、愛着もわかないので、、、。

 

それでは、enjoy programing!