ProjectTICO

ライセンス

殺しのライセンス……じゃなくて、GPL とか BSDL とかのソフトウェアライセンスの方。 なんというか、Tico に対して僕が考えていることを過不足無く許容してくれるライセンスが無いから、 最終的に自作することになりそう。 自殺のライセンス……じゃなくて、自…

マニュアル

今日はずっとマニュアル書いてました。まる。

文字列化メソッド tostr

tico> (foo: (object clone)) "#(object 73)" tico> foo "#(object 73)" tico> (foo tostr: "hoge") "hoge" tico> foo "hoge" OK ……着々と完成に近づいている。

call/cc は

return に名前を変えた。こっちの方が分かりやすいと思う。 tico> (closure () (return 2, 3) call + 4) 6.0 # (, 3) が実行されずに関数が終了している tico> (closure () (global *save*: return, 2) call + 4) 6.0 tico> (*save* 5) 9.0 # return を関数…

進行状況

local オブジェクトの件は解決。 tico> (tostr) "global" tico> (local tostr) "#(environment 55)" # global ではなく local がしっかりと評価されてる call/cc による継続も解決。 tico> (1 + (call/cc (closure (save) (global *save*: save, 0)) + 2) + …

TicoEnvironment

やっぱりミラーオブジェクト噛ませると、正しく動作するっぽいけど構造が複雑になる。・゚・(ノД`)・゚・。 なんか良い案ないかなぁ……。

バグ修正完了

ミラーオブジェクトを噛ませたら、うまく動いた。良かったヽ(´ー`)ノ tico> (method () (tostr) call) "global" tico> (method () (self tostr) call) "global" tico> (method () (local tostr) call) "#(environment 92)"

バグ発見

メモメモ tico> (method () (tostr) call) "global" tico> (method () (self tostr) call) "global" tico> (method () (local tostr) call) "global" 本当は、上から "global" "global" "#(environment *)" にならなくちゃいけない。 このバグを取り除くのに…

ということで

そんなかんじに構文解析のことを「ふにゃー!」と気合入れて考えたら、 TICO のプロトタイプは割とアッサリ動作したです。 tico> (fact: (method (x) > (x (fact 10) 3628800.0 アッサリだけど、けっこう感動的。・゚・(ノД`)・゚・。

Tokenizer

いわゆるソースコードを個々の要素に分ける部分をカリカリ書いた。 java だから多値返せなくて意外とめんどい。 [C#] string __getNextToken(string code, ref int index) { /* ... */ } [Java] int __registNextToken(String code, int index, ArrayList re…

スロットの属性

list を書き換え不可能にして、書き換え可能なリストを別途用意することにした。 ……んだけど、ここでまた問題が。 > (object hoge: (method () (1 + 2))) # hoge スロットにメソッドを代入 #(method () (1 + 2)) > (object hoge) # hoge からメソッドを取り…

リストの書き換え

list -> head: list -> tail: のメソッドで、リストの head と tail を書き換えることが出来るように……って思ってたけど、 コレは事実上 setcar と setcdr と等しいから、破壊的操作になってる。 う〜ん、破壊を認めると循環リストみたいなのが作れる代わり…

進行状況

本日の作業 全体的なリファクタリング。DefaultGlobalEnvironment への一極集中を無くした。 method と closure をプログラム側から作成できるようになった。 今後の作業 method -> get-param [完了] method -> get-body [完了] symbol -> get [保留] global…

再帰呼び出し

tico> (tail-rec: (method (x y) (x (tail-rec 100000 0) 100000 tico> (tail-rec 500000 0) java.lang.OutOfMemoryError: Java heap space まあ、当初の目標である (tail-rec 1000 0) は計算できてるし、 インタプリタ実行という基板上、この程度の再帰能力…

MEMO: 遅延評価と可変長引数

可変長の引数を渡されたとき、結果は ( (lambda (t . x) x) 1 2 3) ⇒ (2 3) (let ( (y 2) ) ( (lambda (t . x) x) 1 y 3) ) ⇒ (2 3) にしたいんだけど*1、遅延評価を thunk 方式にすると、2個目の式は実質的に (let ( (y 2) ) ( (lambda (t . x) x) (lambda…

進行状況

11,291 DefaultGlobalEnvironment.java 606 Environment.java 1,911 EvalException.java 929 GlobalEnvironment.java 4,575 Message.java 122 ObjectOwner.java 265 Receiver.java 1,280 State.java 673 TicoEnvironment.java 1,458 TicoFunction.java 2,367…

Ticoプロジェクト

LISP と LOGO と IO をごちゃ混ぜにしたような俺言語*1を作るプロジェクト。 既に半年近くやっているんだが、色々と予定が詰まってるもんで、さっさとプロトタイプを作るべきだと思った。 id:iseebi さんの「かけはし」も、もうすぐ本格始動するらしいし。 *…