トップ 最新 追記

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-06-07 (Sat)

[Haskell] Monadic Parser Example

https://github.com/unnohideyuki/monadic_parser_sample

Alex と Haskell Happy で monadic parser をつくってみる演習は、予定していたものを一応つくれた。

ex2 から ex4 まで、それぞれ自分なりに得るものはあったので、もう少しコードをきれいにするのといっしょに、ポイントを書き留める作業はしたい。

ex4 は、まじめに Haskell の文法を解析するのではなく、レイアウト規則を実現するための最低限の grammar を記述したので、"-};" がコメントの最後と認識されなかったりするが、今回は、これでいいことにする。

[Haskell][Tiger] Modern Compiler Implementation in ML

https://github.com/unnohideyuki/Tiger-in-Haskell

Tiger Book を Haskell でやる遊びは、6章まで来た。

Tiger Book でも、6章あたりのコードは、ML の破壊的代入を活用したコードになっているので、Haskell で書くにあたっては、状態を明に引き回す必要がある。

chap6/Semant.hs にある transExp, transDec は level と temp を受け渡しするように改造して、改造後も chap5 と同じ型検査結果となるところまで確認。

  • chap5 では評価が遅延されて検出されなかったエラーが chap6 では検出になったものあり
  • chap5 で fmap でリストを巡っていた箇所を、モナド処理にするために foldl にしてしまって、リストを逆順にしてしまう失敗をした。そこはfoldr にしたが、正格版 foldr' でよかったかも。
  • 改造時には、まず型宣言を目標の形に書き換えてから、すこしずつ変えていくのがよかった。型推論すてき。
  • 最近 LAMY の万年筆をつかうようになって、勉強ノート書くのが楽しくなった。

など。

あとは、TL.allocLocal やら TL.newLevel を適切に呼んでやればいい。(それができる状態にはなった)

tDiary アップデート

tDiary 2.2.1 + Ruby 1.8.7 だったのを、tDiary 4.0.4 + Ruby 2.1.2-p95 にアップデートした。

一挙にやったら文字化けしたので、tDiary 3.0.1 をはさんで、データ移行した。

これから、markdown 記法のやつ入れよう。

ん? いま、Insecure operation - encode!って出たな。

よくわからないけど、security がらみっぽいので、tdiary.conf で @secure = false となっていたのを、true にしてみた。

なんとなく、余計に厳しくなって、ダメそうなんだが…。

いけた。

github-markdown 0.6.5 いれた

@tDiary教えてもらったやつ。

おお、@tDiary って書いたら、twitter アカウントへのリンクにもなるんだ。

本日のツッコミ(全3件) [ツッコミを入れる]

# うんの [状態を引き回すには、状態モナドがいいのかなとなんとなく思うんだけど、はてな? 自分の引き出しに状態モナドが入っていな..]

# うんの [あまり自分でつかう機会がなかった、fold は、今回よくつかっている。オレオレ再帰関数ではなく、適切に fold し..]

# うんの [ためしに、tdiary.conf で @secure = true にしてみた。 どうだ?]


2014-06-08 (Sun)

[Haskell] Monadic Parser 練習

https://github.com/unnohideyuki/monadic_parser_sample/tree/master/ex4

Haskell のレイアウト規則で、

If the indentation of the non-brace lexeme immediately following a where, let, do or of is less than or equal to the current indentation level, then instead of starting a layout, an empty list “{}” is inserted, ...

とある部分に未対応だった。

foo = let
      in
        putStrLn "foo"

main = foo

現在の版で、上記のコードを ex4/Parser に食わせると、こうなる:

 foo = let
{ in putStrLn "foo" } main = foo

let と in の間に、空の {} が挿入されるべき。

いまから直す。→ と思ったけど、もう少しまじめに grammar 書かないといけなさそう。今日はやめておこう。

let {} in hoge は Parser で普通にできそうだが、現状の ex4/Parser は in をキーワードと認識してない。

Empty 'do' block は ghc はエラーにしているようだ。

※やっぱり、まだレイアウトルールがいまいちわかってないかも。
10.3を読むべきらしい。)

その他

Tiger Book chap6 については、Semant.hs での Temp.newLabel, TL.newLevel, TL.allocLocal 追加はやった。つぎは、findEscape を書いて、テストしたら、6章おわり。

Git for Windows は 1.9.2 にバージョンアップした。


2014-06-10 (Tue)

[Haskell][Tiger] Tiger book chap6 Activation Record おわり

https://github.com/unnohideyuki/Tiger-in-Haskell/blob/master/testcases/nested_funcs.tig

findEscape も書いた。テストはほとんどできていないが、ともかく、7章に進もう。

本日のツッコミ(全2件) [ツッコミを入れる]

# うんの [なにげなく、test19.tig の findEscape 結果みてみたけど、まちがってるなぁ。formal par..]

# うんの [なおした。]


2014-06-11 (Wed)

[Tiger][Haskell] Modern Compiler Implementation in Haskell, chap7

今日は水曜日なので(?)、夜にコードを書く。
Tiger book 7章の Translation to intermediate code に入った。

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

Tree モジュールを定義して、Translate に Exp 型を定義、そして、"left as an exercise" となっていた unCx, unNx を書くなど。


2014-06-13 (Fri)

[Tiger][Haskell] chap7 つづき

TL.simpleVar 書いた。いちおう、static links も辿るように。
そろそろ単体テスト書きながらやりたい。

https://github.com/unnohideyuki/Tiger-in-Haskell/blob/master/chap7/Translate.hs


2014-06-14 (Sat)

Hello, Android again

Android SDK インストール

Windows に入れるのは初めてだったような。

Android SDK インストール

http://developer.android.com/sdk/index.html#download

ダウンロードしたら、適当な場所に展開して、platform-tools/ に PATH を通す

JDK インストール

http://www.oracle.com/technetwork/jp/java/javase/downloads/jdk7-downloads-1880260.html

これも、適当な場所に展開して、jdk1.7.0_60 を JAVA_HOME に設定し、jdk1.7.0_60/bin に PATH を通す。

ant インストール

http://ant.apache.org/bindownload.cgi

ダウンロードして、適当な場所に展開して、PATH 通す。

Hello, World.

Eclipse 使う気が、まったくないので、Command Line から。
http://developer.android.com/training/basics/firstapp/creating-project.html#CommandLine

SDK の tool/ ディレクトリに移動して、以下を実行するのですが、これらは git bash 上ではだめで、
「コマンド プロンプト」から。

android list target


android create project --target 1 --name Hello --path C:\Users\unno\android_prjs\Hello --activity HelloActivity --package com.example.hello

これで、プロジェクトが作成される。このままエミュレータを起動(必要なら作成して、Start):

android avd

続きは、git bash 上で(git bash でなくてもいいんですが):

http://developer.android.com/training/basics/firstapp/running-app.html

$ cd android_prjs/Hello/
$ ant debug
$ adb install bin/Hello-debug.apk

Hello Smali

https://code.google.com/p/smali/source/browse/examples/HelloWorld/HelloWorld.smali

これも、「コマンド プロンプト」から。

> java -jar C:\Users\unno\smali\smali-2.0.3.jar -o HelloWorld.dex HelloWorld.smali
> adb push HelloWorld.dex /data/local
> adb shell dalvikvm -cp /data/local/HelloWorld.dex HelloWorld
Hello World!

2014-06-17 (Tue)

[Dalvik] MyFirstApp を Dalvik Assembly で

昨日つくった MyFirstApp を、dalvik assembly language で再現してみた。

https://github.com/unnohideyuki/android_study

といっても、Java ソースからできた classes.dex をディスアセンブルしたやつを、またアセンブルするだけなので、そこはなんと言うこともなく。

むしろ、classes.dex 以外の部分で苦労した。

とくに、apkbuilder がよくわかんなくて。

build.sh には、なんとなく、そういう苦労がつまっています。
見よう見まねで、きちゃない。徐々に直していく。

いちお、動いた。(けっこううれしい)

本日のツッコミ(全1件) [ツッコミを入れる]

# うんの [メモってみた。わかってないところは、まだわかってないままだけど。 https://github.com/unn..]


2014-06-18 (Wed)

[Tiger][Haskell] Modern Compiler Implementation in Haskell, chap7

7章は読み終わり。プログラムを書き足していく前に、そろそろ単体テスト書きながらやりたい件に対処。hspec でテストを書いていくことにした。

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

テストを書こうとして、Translete.Level の Eq 定義の不備に気づいたりしたので、テストはやはり重要だな。

simpleVar を書いたときに、そろそろテスト書きたいと思ったわけですが、これ、テストしにくい。モジュールのインタフェースには、Translate.Exp のコンストラクタは公開するなとあるのだけど、これが非公開のままだと、simpleVar の戻り値の中身を検査できなくて、テストが書けない。

そういうわけで、コーディングはあまり進められなかったんだけど、テストを書きながらコーディングできるようにはなったので、一応よしとしよう。


2014-06-24 (Tue)

[Tiger][Haskell] Tiger book chap7, chap8

Modern Compiler Implementation in Haskell, コーディングは7章、本読みは8章あたり。

https://github.com/unnohideyuki/Tiger-in-Haskell

7章のコーディングは、テストをかきつつ Semant.hs を拡張して、(6章では型チェック結果だったのを)Translate.Exp も出力するように改造しているところ。前から少しずつやっていって、Nil, Int, BinOp まで対応した。この調子で、教科書の順番どおりに進めていこう。

コーディングはまだ7章だけど、本読みは進めていて、8章の途中。8章には、「プログラミング演習」がないなと思ったら、chap8/canon.sml にすべてコードが与えられていて、「それを読んで理解せよ」という練習問題があったりする (8.1)。

あ、そういえば。いままで英語版で読んでいた Tiger book ですが、邦訳を本屋で見かけたときに買ったので、いまは邦訳版を読んでる。


2014-06-28 (Sat)

[Haskell][Tiger] chap7 コーディング中…

Modern Compiler Implementation in ML を "in Haskell" に変えてやるの続行中なんですが。

7章は、本文の記述量と、プログラミング量の乖離が結構はげしい章なんじゃあるまいか。けっこう時間がかかってて、読むのは8章にすすんでいるのに、コーディングはまだ 7 章。

Semant 改造中で、RecordExp のところを書き直そうとして、バグに気づいてしまった(6章で見逃した潜在バグ)。

レコード定義で、各フィールドの定義が、フィールド宣言の順番どおりにならんでいることが前提になってるかのようなコーディングになってしまっている。

6章に戻ってバグとってから、再開だな。→このバグはすぐとれた。test3b を追加して Red にしてから Green。7章再開。


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 | お勉強 | エントロピー | ツン読 | | 将棋 | 政治について | | 模写してみよう | 確率論 | 設定など | 雑文 | 音声