Clover2開発日誌

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

JITで制御構文全部に対応

とりあえず、tryも動いています。tryがネスト出来ない問題は放置してますが。for, while, ifは多分大丈夫です。まだテストが足りない気がしますが。

 

まあ、ぼちぼちデバッグやらテストやら、やっていきます。

とりあえずは対応できたということで。

 

次は演算子に移りたいと思います。1バイトの加算とかLLVMでは4バイト単位で処理するんでしょうかね。そのあたりがわからないので不安ですが、、、。

たぶん、演算子は制御構文よりはすぐできるでしょう。

またアップロードします。全命令のJIT対応、夏どころか春中にできちゃうかもしれません。

JITでtry文、for文、while文など制御構文に対応

とりあえずは書きました。テストやデバッグはまだです。try文は動くか自信がありません。if文は動いているっぽいですがelifなどは動いているか謎です。明日以降テストとデバッグをする予定です。すんなり動けば良いのですが。ただ、try文はかなりいい加減な実装でネストした場合には対応してません。普通のVMの方ではtryがネストしても大丈夫なのですが。そのあたり対応できるかは分かりません。LLVMって難しいです。

 

とりあえずはローカル変数に代入も出来ますし演算子もある程度は対応してますし制御構文も入ったので、LLVM化も順調には進んでいます。対応できたら、version 1.4としてリリースしたいと思います。夏の終わり頃までには仕上げたいと思います。秋までずれ込む可能性もありますが。

 

速度の方は僕のサーバーはかなりの速度が出るサーバーで僕自身にとってはLLVM化しても、さほどメリットは無いのですが、遅いサーバーでは劇的に速くなる可能性はあります。またjitした場合としなかった場合で速度を計測してみます。全部できあがってからですが。

しばらくはLLVM化に集中します。その後webアプリケーション用のライブラリが整備できたらと思います。今だとSocketもクラスになっていないので。Threadは入れるかどうかは分かりません。あまりThread好きじゃないんです。Threadのプログラミングは複雑で、それなら別プロセスでいいじゃんと思っちゃう方なので。

 

乱筆乱文失礼。コーディング後でちょっと頭が混乱してます。

JITでif文やwhile文に対応

とりあえずは動いてます。まだテストは不十分です。一応githubにはアップロードしておきました。break文とtry文がまだです。

それが終われば、一応制御構文はできあがります。

まあ、まだまだ道のりは長いです。ただ、一年間の時間をかけるつもりでしたが、思ったよりは早く出来上がりそうです。

夏が終わる頃には正式にJIT付きで使えるようになると思います。

LLVMの落とし穴というか、一つ気をつけないといけないのはブロックの最後はretかbrなどじゃないとだめってことです。新しくラベルを作りたいときはラベルを作る前にそのラベルにbrする命令を足すなどしないといけません。そうでないとSegmentation Faultが起こります。ちょっと不親切ですね。

Clover2の開発日記開始

はじめまして。Clover2という、コンピュータ言語を作っている湊(みなと)と申します。この度、はてなブログに開発日記を書こうと思ってます。いつまで続くか、分かりませんが、頑張って書いていこうと思います。

 

Clover2は以下のURLにあります。

github.com

 

僕のUNIXのプログラミング歴ですが、もともとはmfiler2, mfiler3, mfiler4というコンソールで動くファイラを作っていました。fdcloneのようなソフトです。一時期は2chにスレが出来て話題になったりもしました。Rubyを組み込んでいたので、まつもとゆきひろさんのブログで紹介されたりしました。その後はシェル自体に興味を持つようになり、xyzshというRubyっぽい組み込みコマンドを持つ、ちょっと変わったシェルを作ったりしました。その後xyzshを開発していると、これはインタプリタでいいんじゃないかと思い(xyzshで演算子を実装していると)Cloverというインタプリタとして使えるスクリプト言語を作りました。ただ、Cloverにはあまりにも言語仕様を欲張りすぎて遅いという弱点があったので、Clover2を開発している次第です。

 

Clover2はシンプルな言語仕様で、仕組み自体はとても簡単に作っています。速度もそこそこ出てます。ただ、もう少し速いほうがいいので、LLVMJITができるようにしているところです。Clover2はRubyに静的な型を持つようなコンパイラ言語です。僕自身静的な型がないとプログラミングできないので、Rubyに静的な型がほしいなと思って作っています。インタプリタとしても使えて、シェルの代わりに使えるようなものが欲しいと思って作っています。インタプリタは優秀でメソッド名の補完や外部コマンド名の補完、ファイル名の補完などがreadlineによって行えます。もともとはシェルを作っていたのでシェルの代わりになるようなインプリタを作りたいというのが動機なので、そのようになっています。

 

しかし、僕はRubyPythonの代わりになるようなものを作りたいとは思っていません。あくまで遊びとしてやっています。本業は介護福祉士で余暇でストレス発散としてコーディングしていて本職のプログラマーではないので、RubyPythonの代りとなるようなコンピュータ言語が作れるとは思っていません。あくまで個人的な楽しみとして作っています。多くの人に使ってほしいとは思って作ってますが、今日日コンピュータ言語もたくさんありますし、それを差し置いて、僕の言語が広く使われるとは思ってません。あくまで遊びとしてインストールして使っていただけるとうれしいです。

 

もし使われた方は何か感想やフィードバックがあれば大変嬉しいです。githubのメッセージや、このブログのコメントに何か書いていただけると大変うれしいと思います。

 

それではこれからもよろしくお願いします。