タグ

cpsに関するnfunatoのブックマーク (9)

  • How to implement a programming language (tutorial for beginners)

  • Ocaml continuation passing style

  • 最近やったこと - モナドとわたしとコモナド

    最近やったことのまとめ。 CPSのモナド変換子 fumieval.hatenablog.com で作ったmtl-cの塵を払い、Hackageにリリースした。 StateTやWriterTは中でタプルを作ったり壊したりしているが、CPS変換するとそれがなくなり、しかも(>>=)も最適化されるためそれなりのパフォーマンスの向上が期待できる。モナドガチユーザにおすすめだ。 補足 GHC 7.10.1現在、StateTに関しては最適化がうまく効くらしく、Lazy、Strict、CPS版のパフォーマンスはほぼ同じだった。一方、CPS版WriterTは正格にしているためか、Strictの4倍、Lazyの8倍の速度を発揮した。なお、CPS版はベースのモナドが重いときには特に効果的に働く。 後悔なく具現化できるモナド monad-skeletonというパッケージを公開した。インターフェイスとしては普通のO

    最近やったこと - モナドとわたしとコモナド
  • goto、大域変数、例外、双対性 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    世間の嫌われ者を、あえて擁護したり偏愛するつもりはないのですけど、goto文や大域変数は面白いし、好きだなー。過去の記事を参照しながら、goto文や大域変数の面白さについてナニヤラごたごたと書いてみます。 内容: gotoの棲み家 大域変数と例外の扱い方 必要悪としてのキャッチとミューテーション gotoの棲み家 タチの良いgoto文は、エルゴット繰り返し(Elgot repetition)演算子とみなされます。エルゴット繰り返し演算子は、コンウェイ不動点演算子の双対です。そのことは次の記事で述べました。 絵算で見る「カザネスク/ステファネスク/ハイランド/長谷川の定理」 データ・コード双対性、エルゴット繰り返し、ツインコードスタック抽象機械 あんまりタチの良くないgoto文もCPS(継続渡し方式)変換でだいたいは説明が付きます。 CPS(継続渡し方式)変換をJavaScriptで説明して

    goto、大域変数、例外、双対性 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    nfunato
    nfunato 2016/05/15
  • CPS(継続渡し方式)変換で裏返る理由 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日、CPS(継続渡し方式)への変換を話題にしました。 最近CPSに凝っているらしいid:higeponさんが: 人間の皮が裏返る。外が内、内が外。みたいなイメージでしょうか。 と書いてます(CPSで思考する - higepon blog)。この裏返る感じを説明してみたいと思います。 プログラムが、3つの部分A, B, Cから構成されているとします。 A; B; C; A, B, Cは単一の文ではなくて大きなブロックでもかまいません。ブロックAの計算結果は変数aに代入され、ブロックBの計算結果は変数bに代入されるとしましょう。それぞれのブロックを関数化すると、次のようになります。 a = A(); b = B(a); c = C(b); 変数cの値がプログラム全体の結果となります。 中間変数a, bは不要なので除去すると: c = C(B(A())); 結局、プログラム全体の機能は、C(B

    CPS(継続渡し方式)変換で裏返る理由 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    nfunato
    nfunato 2016/05/15
  • データ型のCPS変換について - Just $ A sandbox

    HaskellでCPS変換とか調べているとデータ型のCPS変換というのが出てくる. 関数のCPS変換は継続を引数に追加して末尾再帰の形にすればだいたいOKなのでまあわかるのだけど, データ型のCPS変換というのは何なんだという話. 継続は何を継続しているのかがいまいち分からないので何故そのデータ型はCPS変換するとその型になるんだと不思議に思っていたのがちょっと解決したのでそれについて書く. 関数 is っょぃ パフォーマンスのことを考えれば, 関数型と基型(ground type)が型の中では圧倒的に偉い. 基型というのはまぁproductとかrecursionとかdependent typeとかを含まない基的な型のこと. 例えばIntとか(Haskellのような言語ではIntというのは計算機の都合上特別扱いされているので, ここでのIntはN×Nにring構造を入れたもののことで

    データ型のCPS変換について - Just $ A sandbox
    nfunato
    nfunato 2016/05/11
  • Continuation Passing Style in Haskell

    Ryan Orendorff presents a tutorial about using continuation passing style in Haskell. He starts with an introduction that looks a lot like how other functional languages do continuations, then refactors the example to use monads. The continuation monad has been called the “mother of all monads” because of its flexibility. See it in action in the video below. Summary The basics of Continuation Pass

  • compile closure conversion algorithm - Google 検索

    There are two dominant strategies for compiling lambdas into closures: flat closures and linked (or shared) closures. It is possible to understand both ...

  • Haskell/Continuation passing style | tnomuraのブログ

    All about monads の解読が Continuation Monad になってストップしてしまった。そもそも、継続渡しスタイル CPS や継続 contiuation の意味がよくわかっていなのだから無理もない。お茶を濁してそれらしい記事にしてもいいのだが、自分もわかっていないし、意味の分からない文章を読まされる人も迷惑だろう。 そこで、いつもの様に Google 先生に継続について聞いてみた。できれば日語の文書が欲しかったのだが、納得できるものが見つからなかった。そこで "continuation monad" で検索して WikiBooks の "Haskell/Continuation passing style" という記事を見つけた。continuation monad だけでなく、継続の初歩から分かるような例がついているようなので挑戦してみる。 しかし、冒頭の C

    Haskell/Continuation passing style | tnomuraのブログ
  • 1