GHC

ffi(calling haskell from C)

GHC

なんか、HaskellからC呼ぶよりも、CからHaskell呼ぶほうが、トータルで考えるといいかな〜という気がしてきたので、CからHaskellの関数を呼ぶやり方を調べたメモ ・基本 Cのデータ型(intとかcharとかfloat)に対して、Haskellで扱えるデータ型CInt,CChar,CFlo…

Pugs as a library

GHC上でGHC動かすよりもPerl動いた方が嬉しくね?という思いつきの下、Pugsをライブラリとして使えないか模索する方向に。とりあえず、ここらからPerl6-Pugs-6.2.13を落として適当に眺めると、なんかCabalっぽいものあるし、余裕だねと思った(ていうか、Hask…

GHC as a library

GHC

てことで、色々あって http://www.haskell.org/haskellwiki/?title=GHC/As_a_library に興味が。実際どんくらいのことができるんだろうと。 とりあえず http://hackage.haskell.org/trac/ghc/attachment/wiki/UsingGhcAsLibrary/Main.hs あたりをコピペして…

GHCの型はキモイ

GHC

次の4つの型の意味 {-# OPTIONS -fglasgow-exts #-} data Bot = Bot Bot data Bot' type Obj = forall a.a data Obj' = forall a.Obj a1つ目と2つ目は、大分前にコメントで教えてもらった技で、ボトムだけからなる型になるらしい(使用用途は知らない)。最後…

Dynamic

existential typeとTypeableを組み合わせれば {-# OPTIONS -fglasgow-exts #-} import Data.Typeable data HsVal = forall a.(Typeable a)=>HsVal a integerP :: HsVal -> Bool integerP (HsVal z) = if (typeOf z)==(typeOf (1::Integer)) then True else F…

existential types

GHC

http://www.haskell.org/hawiki/ExistentialTypes {-# OPTIONS -fglasgow-exts #-} data HsVal = forall a.HsVal a x::[HsVal] x = [HsVal 3 , HsVal "e" , HsVal getChar]・これができて嬉しい状況って何だろう?記述量減らせることはあるかもしれんが ・型…

うあー

・Preludeには変な関数がはいってるよな〜とか http://www.zvon.org/other/haskell/Outputprelude/index.html recipとか、(1/n)の方が短いし、いらないじゃんと思うけど、なんであるんだろう。readParenとか何する関数なのかもよくわからん ・昔のTemplate h…

Strictness Analysis featuring Template Haskell

Abstract interpretationベースの正格性解析(とlet-to-case transformation)をコンパイラに直接手を入れず、template haskell使って実装したぜheheという論文。 Strictness Analysis and let-to-case Transformation using Template Haskell http://www.cs.i…

高速なコードを書くために

GHC

http://www.reed.edu/~carlislp/ghc6-doc/users_guide/faster.html 最適化オプションを付けようとか、型構成子が一個の時はnewtype使おうぜとかいう話はいいとして、letが出てきたら死にましょうとか、1/3くらいはstrictnessに関する話だよな〜、という。こ…

正格性解析

GHC

以前から気にしていたのだけど、strictness analysisってstrictかどうか解析するんだよねーというくらいしか知識がないので(そのままやんけ。型推論も型を推論するんだよねーというくらいしか分かってないけど、あれはひたすら単一化するんかね)、適当に調べ…

RTS

GHC

メモ。以前探して見つけられなかった、GHCのruntime systemに関する論文 The New GHC/Hugs Runtime System The STG runtime system(revised) STG Survival Sheetどれも2000年頃ので、微妙に古いけど、大いに参考に

WorkerWrapper

GHC

core2coreを見たときに、WorkerWrapperってのと、GlomBindsってのが名前から何をしてるか分からなかったんだけど、WorkerWrapperは、こんな変換らしい。こういうの自動的にできるのか。どうやってるのかは、そのうち

core2core

GHC

まあ、よい機会なので少しCore Simplifierがどんな感じなのか概観してみることに。以下の話は、GHC-6.6のソースに基づいている。GHC compilerの中核は、main/HscMain.lhsに記述されている。hscSimplifyとか見ると、実質的にcore2coreを読んでいるだけなので…

Unlifted Type

GHC

よくわからんが http://hackage.haskell.org/trac/ghc/ticket/317以下の話は、GHC6.4.2のghciでやった結果。GHCのバージョンが違ったり、コンパイルした場合や最適化した場合は挙動が変わるかも。ここ見ると、Int#とかのunlifted typeはbottomを含まない。従…

Core Simplifier

GHC

しつこく、Simplifier。どうでもいい使い方その1。RULESで値を定義する {-# OPTIONS -fglasgow-exts #-} {-# NOINLINE hoge #-} -- これがないと勝手にINLINE展開されるので注意 {-# RULES "hoge" hoge = "hello,Bob" #-} -- 本当の定義 hoge = hoge -- dumm…

Core Simplifier

GHC

とりあえず、分からないものは放置の方向で!コメントでツッコミをもらって、GHCはやっぱり賢かったということに気付いたよ。最適化オプション付けると、全然ちげー。"main = return(1)"程度なら、型宣言してもしないでも、生成されるコードは一緒だとか、関…