オレオレ言語
ビット幅が大きい型から、小さい型への変換も実装内容に迷いがあった。これはwasmのi64 -> i32の変換仕様に従おうということにした。
2020-06-08 08:14:44ポインタはi32値なのでふつうに整数演算可能。ちょっと今考えてるのが、i64/f32/f64への変換。なんとなくi64に変換できるのは使うケースがあるような気もするけど、f32/f64の変換って必要なのかなあ、と。ここはエラーで落とすべきなんじゃないのかなあと。
2020-06-08 08:10:04型変換に関してもポインタToポインタの変換はメモリ・オフセットなのでそのまま型情報を置き換えるだけで済む。これはほぼCのポインタ・キャストとほぼ等価な処理。
2020-06-08 08:06:19昔話に花を咲かせすぎて土日をつぶしてしまった(笑)今書いてる型変換(いわゆるキャスト)のコードはwasmが持っている型変換命令へのマッピングは終わった。あとは疑似型やポインタの変換をどうするかだなあ。。
2020-06-08 07:53:03ローカル変数宣言時にも同じスコープでは変数名は重複できないようにするとか必要になるけどね。これないと処理の流れがわかりずらいような気がするんだよね。
2020-06-07 08:08:59wasm関数はローカル変数を関数宣言時にすべて列挙しなくてはいけないので、関数本体のステートメントからローカル変数の宣言を抜き出して、変数名が衝突したら回避するように名前を変えてwasm関数の構文に変換するだけどね。
2020-06-07 08:07:02処理による結果が異なるというのは、例えば関数があるメモリに内容を書き込む処理を実行した場合、実行時には言葉通りの処理となるが、constキーワードをつけるとメモリのdata segmentを生成する処理になるということ。
2020-06-07 08:01:06constキーワードを付与する変数や関数は ・実行時には定数になる ・コンパイル時に実行される ・コンパイル時に評価できないものはエラーになる ・処理による結果(成果物)は実行時とは異なる
2020-06-07 07:57:26constキーワードの意味合いを考えながら、データ変換(キャスト)のコードを書いているところ、ようやく定数式の処理もめどがつきそうなところまできた。
2020-06-07 07:51:53これすごいと思った。 BASICインタプリタ+コンパイラ+X86アセンブラ。。 speakerdeck.com/hkawai/chao-qi…
2020-06-05 18:41:10まあしかし定数式に取り組むことによって足りない仕様がいくつか判明したのでよかったけど。あ、そういえば定数宣言まだできてないな。これは型付きの定数のエイリアスみたいなもの。実行時は完全に定数となる。
2020-06-05 18:19:02定数式を処理するのに、wasmでインストラクションを1個ずつエクスポートするモジュールを作って処理すれば楽で正確なのでは?ということでやり始めたが結構面倒くさくてかえって大がかりになってしまった...。 pic.twitter.com/jODXpAb9Dj
2020-06-05 18:14:18JSで符号拡張をまねるとこんな感じだろうか。。 (符号拡張したい数値 << (型のビット長-符号拡張した数値のビット長)) >> (型のビット長-符号拡張した数値のビット長) (0x80 << (32-8)) >> (32-8) // -128 (0x7f << (32-8)) >> (32-8) // 127
2020-06-03 07:48:38ちなみに符号拡張のHackというのもある。こういうHackがあるというのだけは記憶にあった(笑)。 graphics.stanford.edu/~seander/bitha…
2020-06-03 07:36:44