トップ «前の日記(2014-07-16 (Wed)) 最新 次の日記(2014-07-18 (Fri))» 編集

uDiary

海野秀之(うんのひでゆき)の外部記憶

Twitter (twilog) / RSS / アンテナ / ぶくま

2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|

2014-07-17 (Thu)

[Tiger][Haskell] まだ chap7 だよ

https://github.com/unnohideyuki/Tiger-in-Haskell/tree/master/chap7

今日は(あ、もう日付変わってる!)、帰ってくるの遅くなってしまって、痛恨。
static link の扱いあたりを追加してみたけど、動作がいろいろおかしい。

$ ./driver.exe < ../testcases/test6.tig
(UNIT,
[Proc {body = EXP (ESEQ (EXP (CONST 0)) (CALL (NAME "L0_do_nothing1") [TEMP 0,CONST 0,NAME "L3"])), 
      frame = Frame {name = "main", formals = [InFrame (-3)], locals = [], fp = 0}},
 Proc {body = EXP (CALL (NAME "L0_do_nothing1") [TEMP 2,MEM (BINOP PLUS (CONST (-3)) (TEMP 2)),NAME "L2"]), 
       frame = Frame {name = "L1_do_nothing2", formals = [InFrame (-3),InReg 2], locals = [], fp = 2}},
 Str "L2" "str",
 Proc {body = EXP (CALL (NAME "L1_do_nothing2") [TEMP 1,BINOP PLUS (MEM (BINOPPLUS (CONST (-3)) (TEMP 1))) (CONST 1)]), 
      frame = Frame {name = "L0_do_nothing1", formals = [InFrame (-3),InReg 2,InReg 1], locals = [], fp = 1}}
])
  • do_nothing2(a+1) の 1 は InReg 1 のはずが InFrame(-3) になってる。
  • Frame の formals に sl つむ必要なかった?あと、逆順?
  • おなじ番号の一時変数が複数ある?
  • L3 ラベルの Str フラグメントがないんだが。
  • static_link として渡すのは、古い fp でよかったんだよなぁ?

落ちついてコードを追ってみよう。

そして、いまなお文字列比較まわりは未実装。

つぶやき

https://www.google.com/fonts/specimen/Noto+Sans
"No 豆腐" で Noto だったのか。(Adobe からは Source Han Sans)


Arrows Me 上でついった見てると、よく見かける気がする、豆腐。
(フォントなに選んでたかな?)


つかれてんのかな、「めばちこ」っぽい。めやにが…


MHonARC の mhmimetypes.pl に xlsx, pptx, docx に関するものがなかったので、足した。
どこかにメモっておかねば。(これは仕事の話)


やっぱ、よく考えずにつぶやくの、よくなかった。(知ってた)


ひとつ原因がわかった。
https://github.com/unnohideyuki/Tiger-in-Haskell/blob/c7c03b76c16d8dfda8d56645687e3413d055518c/chap7/src/DalvikFrame.hs#L29

    (F.InFrame (-3 - n) : acc, temp)

ここの temp は t じゃないとだめ。このせいで、かならず formals の最初(static_link はいつも escapes)で temp が先祖がえりしてた。 
平気で変数を shadow してる命名がよくない気がした。


Str "L3" はどこへ行った問題が未だ。
frame の formals には static_link を積んだのに、それを用いる側でそれを考慮できてない問題もまだ。


-fwarn-name-shadowing なのかな。-Wall つけるか。最初は大変そう。いまのうち、ではあるか。
http://www.kotha.net/ghcguide_ja/7.0.4/options-sanity.html


frame の formals には static_link を積んだのに、それを用いる側でそれを考慮できてない問題

わかった。

https://github.com/unnohideyuki/Tiger-in-Haskell/blob/c7c03b76c16d8dfda8d56645687e3413d055518c/chap7/src/Semant.hs#L645

(_:as) = TL.acc_formals lev

こう直して、static_link の access を捨てればいい。(なんかイマイチの方法ではあるが)

気付いている問題は、あといっこか。> Str "L3" どこ?


週4回、夜だけのプログラミングでは、なかなか進まないけど、自分が書いたコードがわかんなくなるほど間はあかないので、
なんとか少しずつだが進めることができる。


「遅い」と「進まない」はチガウのが実感できて、ちょっとうれしい。


今日はコーディングしない日なので、気づいた直し方については、つぶやくだけ。明日やる。


2006|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|08|
2010|01|02|03|05|06|07|10|11|
2011|03|08|
2012|02|04|07|08|10|
2013|01|02|03|05|06|08|11|12|
2014|01|02|05|06|07|08|09|12|
2015|01|02|03|04|
Categories 3imp | Card | Cutter | Dalvik | Euler | Football | GAE/J | Hand | Haskell | Re:View | Ruby | Scheme | TQD | Tiger | TigerBook読 | UikiTeXi | Verilog | Violin | Web | parconc | tDiary | お勉強 | エントロピー | ツン読 | | 将棋 | 政治について | | 模写してみよう | 確率論 | 設定など | 雑文 | 音声