オレオレ言語

node.jsでWASMを吐くコンパイラを作っています。まだ完成には至っていません。少々放置していましたがまた新たな言語を作り始めてます。 ■オレオレ言語の中間成果物として作ったもの https://qiita.com/SFPGMR/items/427a0ac38338e659fe4a 続きを読む
3
S.F. @SFPGMR

違うな。どっちかというとこっちに迷いがあったんだった。 f32/f64 -> i8/i16

2020-06-08 08:16:36
S.F. @SFPGMR

ビット幅が大きい型から、小さい型への変換も実装内容に迷いがあった。これはwasmのi64 -> i32の変換仕様に従おうということにした。

2020-06-08 08:14:44
S.F. @SFPGMR

ポインタはi32値なのでふつうに整数演算可能。ちょっと今考えてるのが、i64/f32/f64への変換。なんとなくi64に変換できるのは使うケースがあるような気もするけど、f32/f64の変換って必要なのかなあ、と。ここはエラーで落とすべきなんじゃないのかなあと。

2020-06-08 08:10:04
S.F. @SFPGMR

型変換に関してもポインタToポインタの変換はメモリ・オフセットなのでそのまま型情報を置き換えるだけで済む。これはほぼCのポインタ・キャストとほぼ等価な処理。

2020-06-08 08:06:19
S.F. @SFPGMR

今のところポインタの仕様は単なる型つきのメモリ・オフセットなんだよね。つまりi32(u32)の値。

2020-06-08 07:54:45
S.F. @SFPGMR

昔話に花を咲かせすぎて土日をつぶしてしまった(笑)今書いてる型変換(いわゆるキャスト)のコードはwasmが持っている型変換命令へのマッピングは終わった。あとは疑似型やポインタの変換をどうするかだなあ。。

2020-06-08 07:53:03
S.F. @SFPGMR

今のところの考えでいくと変数は ・グローバル変数 ・スコープ付きローカル変数 ・メモリ変数 この3種類になるということですな。

2020-06-07 08:11:19
S.F. @SFPGMR

ローカル変数宣言時にも同じスコープでは変数名は重複できないようにするとか必要になるけどね。これないと処理の流れがわかりずらいような気がするんだよね。

2020-06-07 08:08:59
S.F. @SFPGMR

wasm関数はローカル変数を関数宣言時にすべて列挙しなくてはいけないので、関数本体のステートメントからローカル変数の宣言を抜き出して、変数名が衝突したら回避するように名前を変えてwasm関数の構文に変換するだけどね。

2020-06-07 08:07:02
S.F. @SFPGMR

そしてスコープ付きのローカル変数を導入しようかなあと思う。これは糖衣構文といっていいものだが。

2020-06-07 08:02:55
S.F. @SFPGMR

処理による結果が異なるというのは、例えば関数があるメモリに内容を書き込む処理を実行した場合、実行時には言葉通りの処理となるが、constキーワードをつけるとメモリのdata segmentを生成する処理になるということ。

2020-06-07 08:01:06
S.F. @SFPGMR

constキーワードを付与する変数や関数は ・実行時には定数になる ・コンパイル時に実行される ・コンパイル時に評価できないものはエラーになる ・処理による結果(成果物)は実行時とは異なる

2020-06-07 07:57:26
S.F. @SFPGMR

constキーワードの意味合いを考えながら、データ変換(キャスト)のコードを書いているところ、ようやく定数式の処理もめどがつきそうなところまできた。

2020-06-07 07:51:53
S.F. @SFPGMR

あれを思い出す。私のTLでたびたび登場する、キャリーラボのWICSを。。 ja.wikipedia.org/wiki/WICS

2020-06-05 18:42:32
S.F. @SFPGMR

これすごいと思った。 BASICインタプリタ+コンパイラ+X86アセンブラ。。 speakerdeck.com/hkawai/chao-qi…

2020-06-05 18:41:10
S.F. @SFPGMR

意味としてはreadonlyだよな。そういう属性をつけることができる言語もたしかあったなあ。。

2020-06-05 18:24:51
S.F. @SFPGMR

しかしconst 変数って変な言葉だよなあ。内容が変わるから「変数」というのにそれに「定数」というお冠をつけるんだもんなあ。。

2020-06-05 18:22:05
S.F. @SFPGMR

またコンパイル時インタプリタへの道筋が見えてきたような気がしないでもない。。

2020-06-05 18:19:44
S.F. @SFPGMR

まあしかし定数式に取り組むことによって足りない仕様がいくつか判明したのでよかったけど。あ、そういえば定数宣言まだできてないな。これは型付きの定数のエイリアスみたいなもの。実行時は完全に定数となる。

2020-06-05 18:19:02
S.F. @SFPGMR

定数式を処理するのに、wasmでインストラクションを1個ずつエクスポートするモジュールを作って処理すれば楽で正確なのでは?ということでやり始めたが結構面倒くさくてかえって大がかりになってしまった...。 pic.twitter.com/jODXpAb9Dj

2020-06-05 18:14:18
拡大
S.F. @SFPGMR

ムムム。。整数演算も奥が深いわ。。

2020-06-03 07:50:19
S.F. @SFPGMR

JSで符号拡張をまねるとこんな感じだろうか。。 (符号拡張したい数値 << (型のビット長-符号拡張した数値のビット長)) >> (型のビット長-符号拡張した数値のビット長) (0x80 << (32-8)) >> (32-8) // -128 (0x7f << (32-8)) >> (32-8) // 127

2020-06-03 07:48:38
S.F. @SFPGMR

ちなみに符号拡張のHackというのもある。こういうHackがあるというのだけは記憶にあった(笑)。 graphics.stanford.edu/~seander/bitha…

2020-06-03 07:36:44
S.F. @SFPGMR

符号拡張というのは整数の計算においては念頭に置いておいて当たり前の話だと思うのだが、私は忘却の彼方であった(笑)

2020-06-03 07:35:48
S.F. @SFPGMR

定数式を計算するコードも完成させないとね。。

2020-06-03 06:45:55
残りを読む(1877)

コメント

コメントがまだありません。感想を最初に伝えてみませんか?