2017-10-01から1ヶ月間の記事一覧

CPPの右辺値参照・ムーブセマンティクス〜その3〜

cpp

前回の投稿で「ムーブ」の意味があやふやなままになってしまったので、ここで探ってみる。スマートポインタを使うが、それについては深く触れない。 struct hoge { std::shared_ptr<int> ptr; hoge(int val):ptr(new int(val)) {}; int getCount() { return ptr.u</int>…

CPPの右辺値参照・ムーブセマンティスス(その2)

cpp

前回の投稿に引き続き、もう少し遊んでみる。この投稿の内容は、 stackoverflow.com を参考にした。僕自身、あまり理解できていない気がするので、間違っていたら教えてください。 今回もやはり例を挙げて説明したいので、以下のような状況を想定する。 #inc…

CPPのvirtualデストラクタ

cpp

2. Kaleidoscope: Implementing a Parser and AST — LLVM 7 documentationでvirtual修飾子のついたデストラクタに出会った。いままで知らなかった(もしくは、忘れていた)ので、メモ。c++ - When to use virtual destructors? - Stack Overflowを参考にした…

CPPの右辺値参照・ムーブセマンティクス

cpp

この内容についてはすでに多くの記事がネット上にあるけど、自分の理解を深めるために(役に立つかわからない)記事を投稿することにした。詳細は他の記事に任せて、ここでは例をあげるだけにする。 右辺値参照やムーブセマンティクスを使わないで書くと、 #…

モナドの遷移

モナドファミリーの操作を図にしてみた。僕が言うのもオコガマシイが、図で満足せずにソースコードをみると、さらなる発見があって面白い。気になったモナドは、Hoogleで「ホグれ」。 一般のモナド ErrorT 大事なことは、ErrorT eでも、ErrorT e m aでもなく…

runSTの型

Lazy Functional State Threads(http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.144.2237&rep=rep1&type=pdf)を読んだので、メモしておく。 runSTは特徴的な型を持っているけれど、それはどうやらスレッド的な安全性のためらしい。文章で色々…

自由変数の決定(その3)

前回までの投稿で、Scheme(Gauche)ではレキシカルスコープが使われていることが分かった(たぶん)。そもそも、自由変数がどう決定されるのかを調べ始めるきっかけは、Schemeのマクロ内の自由変数がどう扱われるかをみるためだったので、それについても書い…

自由変数の決定(その2)

前回の投稿後に、それぞれの言語の挙動をもう少し調べてみた。 Scheme (define (hoge) (print var)) (define (fuga) (let ((var 1)) (print var))) (define var 2) (hoge) ;=> 2 (fuga) ;=> 1 (set! var 3) (hoge) ;=> 3 (fuga) ;=> 1 python def hoge(): pr…

自由変数の決定

schemeのマクロを勉強している時に、 1 (define-syntax mcr 2 (syntax-rules () 3 ((_) (print var)))) 4 5 (define (fnc) (print var)) 6 7 (define var 2) 8 (mcr) 9 (fnc) 10 (set! var 3) 11 (mcr) 12 (fnc) の実行結果が、 2 2 3 3 なのが衝撃だった。…

終わりよければすべてよし

CLIプログラムを立ち上げたのはいいけど、終了コマンドがわからなくて、仕方なくCtrl-Cということが多いので、僕が使っているプログラムたちの終わらせ方をメモメモ。 gosh (exit) coqtop Quit. ghci :q ipython quit cling .q psql \q

rlwrapだった

goshやcoqtopなどのCLIプログラムは、履歴機能や補完機能が使えない。そういう時にはrlwrapでラップして使えば幸せだよっていうだけの話。こういうプログラムがあるのは知っていたが、名前が出てこなかったので、ずっと使えずに不便していた。 自作プログラ…