* Essen開発メモ(1)
-(by [[K]], 2018.03.05)
** 2018.03.05(月) #00 JITBで遊ぶ
-JITBというのは、即興で考えた造語。JITコンパイラはJITC。じゃあもしJITで動くアセンブラがあったらJITA。そして16進数を直接入力してそれがいきなり動くプログラミング言語があったらJITBかなー、というそれだけのこと。
-そのJITBを作って、コンソールから入力した16進数がすぐに実行されるのを眺めて、最初は面白かったんだけど、すぐに飽きた(笑)。まあ実行ファイルをいちいち作らなくてもいいっていうのは、新鮮と言えば新鮮。
-やっぱりJITAくらいじゃないと、結構大変である。16進数を全部覚えているわけじゃないので・・・。

** 2018.03.06(火) #00 次はどうしようか
-とりあえず[[page0002]]でJITBについては遊びつくしたので、次はJITAかなあ。そうやって少しずつ言語を低級から高級にしていけば、いつかはEssenができそうな気がする。

** 2018.03.08(木) #00 JITA
-ひとまずJITAを作り始めた。オペコードのみの命令ならアセンブルして実行できる。16進数を直接入力しなくていいのは快適だ。あとRDTSCが例外を出さずに実行できたので、win32ではCR4によって禁じられていないのだなと分かった。
-今は238行で5.0KB。

** 2018.03.19(月) #00
-もはやのんびりと作って壊してまた作って・・・をやっている暇はない。確実に積み上げられるやり方で作っていかなければいけない。となると、やはりアセンブラレイヤを作り、必要に応じて最適化ができるようにしておいて、その上に高級言語レイヤを載せなければならない。

** 2018.04.01(日) #00
-さて、年度も変わったことだし、明日からちょっとずつ再開しよう。

** 2018.04.11(水) #00
-EssenRev4のJITコンパイルでは、浮動小数点演算でFP命令を使わずに、SSEスカラ命令を使おうと思っている。FP命令のほうが対応CPUが多いけれど、SSEのほうがレジスタ番号で管理できてわかりやすそうだから。
-ということで、参考になりそうなサイトを探しておいたので、忘れないうちにメモしておく。
--SSE2による浮動小数演算の仕組みと検証  https://codezine.jp/article/detail/458
--x86/x64 SIMD命令一覧表 (SSE~AVX2)  http://www.officedaytime.com/tips/simd.html
--PAND (Logical AND)  https://cmpsb.net/asm/x86/instr/view/264/PAND

** 2018.04.17(火) #00
-昨日C言語でちょっとしたプログラムを書いていて、まあこんなものかなと思った関数があったのだけど、果たしてこの関数はちゃんと期待通りに動いているのか、と心配になって、適当に値を入れてみて計算してみた。するとまあ全然期待通りに動いてくれない。・・・おお、これぞまさに私が根絶したい現象そのものではないか!
-もちろんプログラムはその後あっさりと直ったわけだけど、どうすればこういうのにもっと早く気付けるだろう。チェックしたいという気持ちにさせるにはどうしたらいいのだろう。
-まあ「どこまでテストするかはプログラマの自由です」としかできないかもしれないけど、テストしやすい仕組みを提供することはできるはずだよね、っていうか提供したい。
-ユニットテストがしたいのかというと、まあそれでもいいかもしれないけど、でもちょっと違うような気もする。「テスト」だと、これこれを入力したらこれが出力されるはずっていうのがあるわけだけど、そういう想定される結果がある状況より前に、とりあえず0を入力してみよう、何が出てくるかな?・・・あれ??・・・みたいなのが気楽でいい。つまり何が出てくるはずだっていうのをしっかり予想するのはそれなりに大変だけど、適当に入れてみて出てきた結果を見て、「えっ?」ってなるのは簡単なので。

** 2018.04.17(火) #01
-とりあえず、230行くらいはできた。といってもメモリ管理部分だけだけど。
-いやその、セキュアな言語を作るためには、まず言語を作りやすい環境を整備したほうがその後ははかどるわけで、だからまずはそういう基準で作っている。
-そしてC言語はメモリ管理が大変なので、まずはメモリ管理を簡単にするためのライブラリを作った。ひとまず自分の気が済む程度のものはできた。これでソースコードのパーサーを簡単に作れるはず!(いや、まともなメモリを管理しないで雑なものならすぐに作れたけど、やっぱりメモリは無駄にしたくないわけで、そうするとメモリ管理をしなければならず、だからそういう自前ライブラリを作っていたのだ)。

** 2018.04.23(月) #00
-とりあえず、以下の程度なら実行できた。
 >exec asm386 { PUSH 13 POP EAX }
 6a 0d 58 // これはデバッグ用の表示
 sz=3 ec=0 // これはデバッグ用の表示
 
 >regs
 <regs>  eax:0000000d  ecx:00000000  edx:00000000  ebx:00000000  esp:00840000  ebp:00000000  esi:00000000  edi:00000000
 <stack>
 
 >
-さらにちょっとだけ頑張って、
 >exec asm386 { PUSH 1+2*3-4 }
-こういうのもできるようにした。・・・あんまり使わないかもしれないけど。もちろん演算子の優先順位は真面目にやっているよー。
-ここまでやって実行ファイルの大きさは9.0KB(ソースコードの行数とかだと、コメントなどに左右されてしまうので私はあまり使わない)。

* こめんと欄
#comment


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS