khabaネタ
(1)
- 構造体のバイナリ化・互換性の担保はできるとしよう。それはそれで結構だけど、演算はどうだろう。「○○の値+1」にしたいとか、そういうことだ。
- これを認めることにすると、結局、関数を書きたくなる。となると、構造体の中にkhabaのバイトコードを書く感じになるだろうか。その関数はいつ評価するのか。
- 関数そのものを表すのか、そのときの状態で関数を計算してその結果を代入するのか、それとも値が必要になった段階でそのつど計算させたいのか。依存関係を追跡すればある程度高速にはできる。
- うーむー。
(2)
- 上記はつまり、構造体の中にメンバ関数が含められるということとなんら違いはない。
- メンバ関数は、依存関係を書くべきだ。つまり何を入力とし、何を出力とするのか。I/Oへの入出力も立派な依存関係だ。cpuタイムを消費する事だってそうだ。この厳密な意味においての出力結果が無いものについては、存在価値がない。
- khabaのバイトコードを書くのが面倒なら、とりあえずia-32のままでもいい。ds:esiとss:esp。
(3)
- そもそもkhabaの目的はなんだ?
- 機種の差を越える。
- シェルとプログラミング言語とで文法を同じにする。
- 速度を担保する。→インタープリタでもあり、コンパイラでもある。両方の性質を持つという意味ではなく、両方実装するという意味。
- バイトコードをia-32そのものにしたら、どこまで簡略化できる?この場合命令は全て16進入力、シェルも16進入力。
(4)
- 適当に数時間でできるものを妄想してみる。
- すぐに暴走するのは目に見えているので、例外を充実。当面はエミュレータ上で実行。
- 当然リング3。
- EAX以外は保存するというのがデフォルト。C言語のルールとは違うが、C言語なんか知るか。C言語のコードを使いたければ、PUSH(ECX);PUSH(EDX);CALL(func);POP(EDX);POP(ECX);return;でラップしたらいい。
- いろいろ考えてみたけど、基本文法がx86バイナリだと、しんどすぎる。やっぱりC++ふうがいい。
(5)
- (2009.09.01)
- 構造体のメンバに番号ラベルをつけたものが配列
- a[123]とa.123は同じもの。int& a.label = a[123]; とすれば、a.labelでもa[123]にアクセスできる。これはつまりメンバの追加?いや違う。&なので、a[123]の値が変われば、a.labelの値も変わる。だからlabelは123のエイリアス。
- khabaにおける型とは、オブジェクトを生成するときに使うもの。関数の引数で使うときは、インターフェースがあればそれでいいはずだ。継承しなければいけないということではない。
- 文を文字列で生成してevalできる。