ilog

最適化ができなかったのは、自分で昔書いたコードがいらんことをしていただけだった。 /* todo: これ何? */ *subtrees = false; return NULL;うーん。理解できなかったのに、なんで*subtreesをfalseにしてたんだろうか…自分は。 理解できないものを勝手にい…

必要になった時が実装するとき。 nanika: while ( true ) { while (true) { break nanika; } } 今までループ脱出条件いじってなんとかしてたのが厳しくなってきたのでbreakを実装。だがしかし、 while ( true ) { var i = ...; function nanika () { return …

ゆにふぁいやー

Identifierはなんて読むんだろうか。いや、それは別にいいや。眠いのでメモだけしとく。酔ってるし。明日は実装頑張るように > 自分。 三日間くらいSWI-Prologのソース読んで単一化の実装は大体わかったので、うにゃうにゃする。 まず、中身をPrologにする必…

ゆにふぃやー

と、いうわけで、なんか、100行ぐらいのコードを書いては捨て、書いては捨てを3回くらい繰り返してるうちに、いつのまにかネタストックはどうでもよくなってしまったので、ILogScriptについて考える。 ILogScriptは僕の中でネタ切れした時のクッションの役割…

やっぱりいつも通り関数の引数を逆に積んでるのに気付かない。もはや日常茶飯事。 んー俺ABIとか決めたほうがいいのか。 あと、リスト演算子を使うと逆順になったリストが生成されるのだった。 けど、なー。アレなんだよな。アレ。リストにマップする処理っ…

やっと動いたよー langhook = namespace { function callgraph_expand ( t ) { gcc.tree_rest_of_compilation( t ); } }; function build_assignment( dst, src ) { return gcc.build2( gcc.MODIFY_EXPR, types.integer_type_node, dst, src ); } function b…

それなりに動くようになってきたので、そろそろなんか出力してみるかな…と思ったはいいけど、ちょっと、関数をコンパイルするまでのなんか色々が多過ぎじゃないですか? 前までは適当に tree_rest_of_compilation すれば出力できたから、同じように cgraph_f…

docstr( gcc.build_index_type );で、出力が、 build_index_type(maxval,) Create a type of integers to be the TYPE_DOMAIN of an ARRAY_TYPE. MAXVAL should be the maximum value in the domain (one less than the length of the array). The maximum v…

久し振りに一日50行ペース。まあ、だらだらとね。 { function x() { zz = 100; } function y() { x(); } y(); } ----------- undeclared variable: zz test/error.ilog:3: in function 'x'. test/error.ilog:7: in function 'y'. test/error.ilog:10: in fun…

VM設計

コード貼り付けてくばっかりだといけない!!ような気がした。 昨日でフレーム構造いじることは無くなった…と思ったんだけど、Cからスクリプト呼び出すような部分で、結局またフレーム構造でわからなくなってた。 VM書くときは、まず、フレーム構造を暗唱で…

// 0.352 secs { function fib(n) { if ( n>2 ) { return fib(n-1) + fib(n-2); } return n; } for ( var i=0; i<28; i=i+1 ) { puts(fib(i)); } }# 0.528 secs def fib(n): if n > 2: return fib(n-1)+fib(n-2) return n for i in range(0,28): print fib(i…

{ var func0; var func1; var func2; var i =0; while ( i<3 ) { var x=i; if ( i == 0 ) { func0 = function ( ) { puts(x); }; } else if ( i==1 ) { func1 = function ( ) { puts(x); }; } else if ( i==2 ) { func2 = function ( ) { puts(x); }; } i = …

メモ

わからんようになってきた。他にネタが無いのでメモ。多分僕以外が見てもわからん。 function () { var x; function () { loop { function () { return x }; <- closure } <- not bind } <- closure } function () { function () { loop { var x; function (…

{ function x(x,y) { return function() { return x-y; }; }; var y = x(4,5); var z = x(3,5); puts( y() ); // = -1 puts( z() ); // = -2 }今回の僕はいつもとは違う!!引数の順番間違えなかったよ。 前回のは、あれから、 var obj = object { function …

動いたー function x(z) { return function() { return z; }; }; var z = x(3); puts(z()); // = 3いやー、ここまで長かった…長くなってしまった主な原因は作業してなかったからなんだが。 まだ騙し騙しやってる部分もあるので、それを修正しないとな…。あと…

これがthisです。わたしはselfを持っています。

いいかげん、VMを動かさないといけないよな。少しでもいいから、一日一回くらいは触るようにしていこう。 thisはどうしようか、という話。selfでもいいけど。 オブジェクト指向っぽい言語では、メソッド中で名前を参照すると、そのメソッドが属するオブジェ…

ILogScriptプログラマのレベル1

Level0 ILogScriptなんか知らない Level1 処理系を実装する ネタ元 ネタ元のネタ元

ボロボロだよ。書き直したほうがいいかも。最初に手抜きしたのが良くなかった。勘が鈍ったかもしれない。

おおざっぱに、現在構想中のvmまわりについてメモ。楽しい話題なのかどうかは知らない。 今のVMがこんな感じ struct vm_state GTY(()) { VEC(tree) *stack; // tree スタック VEC(tree) *consts; // 定数テーブル VEC(tree) *functions; // 関数テーブル tre…

ふれーむについて考える。

で、おととい、ローカル変数とフレームまわりを1/4ぐらい作り直したんだけど、まだ、これでも無理だよ。んーどうしたもんか。 目標は クロージャが使える 外の変数を参照しない関数はオーバーヘッド無しで使える。少なくともメモリ割り当ては起こらないよう…

おっっへぇ。こんなのじゃクロージャから外のスコープ見えないよ…やり直し、やり直し。 .... よし、やり直した。 function x() { return 3+4; }; x();このぐらいは動くようになった…って昨日と一緒じゃないか。

vm

ちびちびやってます。 function x() { return 390+43920; }; x();このぐらいは動くようになった。 argnum 0, stackuse: 2, localuse: 0 0: LOAD_CONST1 0(b), 2: LOAD_CONST1 1(b), 4: ADD 5: RET 0(b), stackuse: 1, localuse: 0 0: FUNCTION1 0(b), 2: STO…

というわけで、バイトコードコンパイラ書きますよ。だらだら。一日50行ペースで。 色々あっても、コード書いてると、つまらないことはどうでも良くなってくるよね。 いや、色々なんかあったというか、むしろ、何も無いんだよな…えーと、いや、刺激というのは…

実行環境をdumpするよ。hibernateするよ。unexecするよ。

言語レベルでの実行状態のダンプやら、GCCのPCH、ILogScript評価関数書き直しとか。の話。 何ヶ月か前、ちょろっと、「実行状態をダンプして中断できる機能」を、言語レベルで実装したらどうか、っていうのを考えてた。 インタプリタ言語だったら、値のほと…

ローカル変数

やっとベンチマークとれるくらいになってきたよ。別に機能増やしてるわけじゃないから、ベンチマークとらないと、無駄なことやってるような気になってしまうんだよなぁ。 前回1.3秒だったのが0.17秒!!感動の瞬間!!泣きそうです!!嘘だけど。 まあ、それ…

ぐにょぐにょ作業。 3回くらい「次はやる」と、書いたような気がするけど、全然やってなかったローカル変数まわりをやっと作業開始。 a24zのときは変数検索コンテキストまわりでSTL使ってたせいで、なんかスタックが書けなくなってたよ。助けて。 STLは使っ…

ちょいと気分が乗ってきたので久し振りにILogScriptいじる。 とりあえず、飽きるまでは高速化してみよう、ということで、いくつかの「面白いけど、あんま役に立たない機能」を削ってしまうことにしよう。 今日削ったのは、関数と循環継承。 まず、前までは、…

GGCは相変わらずややこしい

んんん。GGCはスタック上のオブジェクトをマークできないという問題が今頃露呈。上のプログラムで、ループ回数が22になってるのは、GC動く/動かないの境界がそこらへんだったから、とか。 GCのあたりは問題が出たら困るのでなるべく危なそうなテストは避ける…

打倒 Io Language

Ioが「reasonably fast (comparable to Python, Perl, Ruby)」と言ってる秘密を探るために、ぼちぼちソースを読んでみるが、よくわからない。名前検索で、なんか不思議なことやってたので、そこらへんに秘密があるかと思ったが、それは、parentとprotoのチェ…

前からパーサ書き直すとか言ってて、最近やっと作業を始めたんだけど、 tree a_list_rests = seqp(build_list(1, optp(seqp(build_list(2,comma,call_toplev_expr), ret2,ilog_null),ilog_null)), ilog_null,ilog_null); list_expr = seqp( build_list(4,l_b…