GC読書会
そういえば、土曜日ですが、
『ガベージコレクションのアルゴリズムと実装』読書会@関東 : ATND
これに参加してきました。
主にマークスイープGCとインクリメンタルGCを読み合わせして、
各所で質疑的な何かをしていました。
詳しくは、きむら(K)さん参照。
ときどきの雑記帖
shinhさんも記憶をダンプしておられました。
2010-04-25 - 兼雑記
で、なんでガベージコレクションかというと、
「ほら、ガベコレある言語って楽じゃん?」
って、日頃思っているとガベコレが羨ましくて調べたくなるからです。
実体験としてはLuaのときにインクリメンタルGCには凄くお世話になって、
かつ、ステップ実行できることを知っていたのですが、
それがどういう仕組みで行われているかはいまいち把握してなかったので、
(GCしている最中にオブジェクトの関連は変わるわけで、これどうなるんだ? みたいな)
そういうものを氷塊させる意味でも凄く意義のある読書会であり、本でした。
多くの場合、GCがある言語ではメモリを意識する事は殆どないですし、
GCの動きをコントロールするよりメモリの使い方やアルゴリズムを見直した方がアプリケーションの最適化には寄与するのですが、
「GCは面白いので」という一言でGCは勉強する価値があると思います。
本はこの本です。
- 作者: 中村成洋,相川光,竹内郁雄
- 出版社/メーカー: 秀和システム
- 発売日: 2010/03/18
- メディア: 単行本
- 購入: 24人 クリック: 779回
- この商品を含むブログ (89件) を見る
しかし、
本当にメモリで困っている人はこっちの方が実用書です。
省メモリプログラミング―メモリ制限のあるシステムのためのソフトウェアパターン集 (Software patterns series)
- 作者: ジェイムズノーブル,チャールズウィアー,James Noble,Charles Weir,安藤慶一
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2002/06/20
- メディア: 単行本
- 購入: 1人 クリック: 87回
- この商品を含むブログ (35件) を見る
CakePHP 1.3 Stable Release!!!
CakePHP: the rapid development php framework. Pages
ということで、1.3 Stable がでてます。
うまうまです。
PHPとCakePHPはじめました
といっても、二ヶ月前くらいからですががが。
・なぜPHPなの?(言語の選択の余地はあったのに
→PHPを使わずにdisるなんてとんでもない!!!と思ったから。
→PHPをDisってるブログエントリを集めてみたを読んでPHPに興味があったので
・なぜPythonじゃないの?
→WebでPythonというのがあんまりしっくりこなかった
→PHP使ってみたかった
・なぜCakePHPなの?
→名前がかわいいじゃん?
→symphonyやCodeIgniter、Zendなどをみてもっともバランス感覚が良さそうだったから。
→規約ベースですいすい書けたから。
・なぜDjangoじゃないの?
→Djangoって実績あるんだっけ?(いや、ごめん、嘘)
→なんてのもあるくらいCakePHPとDjangoは敵対してる(嘘
→せっかくだしCakePHPじゃね?
ということで、PHPとCakePHPです。
CakePHPはかなり使いやすいです。
規約ベースなのが、ぐちゃぐちゃになりがちなPHPを綺麗に整頓することに一役買っていると思う。
PHPは……。
・関数がファーストクラスじゃないのを何とかして。(preg_replace_callbackとかに文字列で関数渡すのはださい)
・PHPの参照というかスコープがうんこすぎる
・array_key_existsとかいちいち名前がださい
・foreach が foreach (集合 as 要素)の順番なのが、ムキーってくる
でも、結構思ったよりも良い言語……だと思うが。
しかし、やはりスクリプト言語ではなく、テンプレート言語だよなあ、とは思う。
ただ、PythonやRuby、Perlのように変なエレガントさはないので、初心者にはわかりやすいのは同意。
Emacsはじめました
といっても、二ヶ月前くらいからですががが。
元々、WindowsとMacを両方使うので両環境でまともに使えるエディタが欲しいと考えていて、よし折角なのでEmacsを使おうと思ったのが始まりです。
xyzzyもみましたが、どうもショートカットが微妙に違うので挫折。
普通にGNU Emacsを落としてつかってます。(MacではCarbon Emacs)
まず、
鬼軍曹.el
をいれました。
これは強制的にEmacsのキーバインドを身につかせるための拡張で、
例えばカーソルキーをうつと鬼軍曹に怒られるという素晴らしい拡張です!
TABやBSも駄目です!
次に、
ElScreen.el
をいれました。
言わずと知れたタブ機能です。
何個もファイルを開く自分には必須でした。
最近、
jaspace.el
をいれました。
全角空白とかタブ文字とか、見えるようになります。
ヒアドキュメントの後ろに半角空白とかがあって、ParseErrorになる言語とかあるので必須でした。
そして、今日みねこあさんの日記を読んでいたら、
dsvn.el
があるのに気付いて、これでsvnが操作できて勝つる!!
という感じです。
あとこれも何度も読んでます。
手に身につかないので最初の方だけくるくるくると。
なぜ俺はもっと早くEmacsを使わなかったのだ……と後悔している最近です。
いやー、Emacsを使うとプログラムが二倍は楽しい。(ホントだよ
- 作者: Debra Cameron,James Elliott,Marc Loy,Eric Raymond,Bill Rosenblatt,宮下尚,半田剣一,新井貴之,鈴木和也
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/03/12
- メディア: 大型本
- 購入: 12人 クリック: 289回
- この商品を含むブログ (116件) を見る
PHPの参照が使いにくい件について
最近PHPを使っていて「むきー」となったこと。
単純化すると、配列に入っているオブジェクトを舐めて、
条件を満たすものを取り出してそれを後で変更したい、みたいなコードを書く。
とりだしたもののオブジェクトの状態を変更。
で、大本の配列を回してみたら中身かわってねえ……。
要するにPHPの参照の挙動なんですが、
なんでこんなことに。
勿論、PHPの参照を意味する&をつければこの動作はできるんですが、
付け忘れただけで変更した筈のオブジェクトが変更されないことに。
めんどくせー。参照にはforeachの$valueを参照で受けると思わぬバグを引き起こす - ぱせらんメモこんな罠もあるし、何とかならんかねー。
変数が変更されない版。
変数が変更される版。
Pythonで期待する挙動を書いた場合。
デフォでPythonみたいになってくれよー。
<?php $hoge_list = array( array('Hoge'=>array('value'=>100)), array('Hoge'=>array('value'=>101)), array('Hoge'=>array('value'=>102)), array('Hoge'=>array('value'=>103)), array('Hoge'=>array('value'=>104)), ); echo "----- Before -----\n"; $select_hoge = null; foreach ($hoge_list as &$hoge) { echo $hoge['Hoge']['value']."\n"; if ($hoge['Hoge']['value'] == 100) { //$hoge['Hoge']['value'] = 999; $select_hoge = &$hoge; // &を忘れてはいけない! } } $select_hoge['Hoge']['value'] = 999; echo "----- After -----\n"; foreach ($hoge_list as $hoge) { echo $hoge['Hoge']['value']."\n"; } ?>
第三回カーネル/VM探検隊で「LuaVM」について話しました
第三回カーネル/VM探検隊でLuaVMについて話してきました。
カーネルとか、仮想化技術に関しては素人も良いところなので、非常に勉強になりました!
低レイヤは世界が広すぎてついていけない!
とりあえずVMということで、LuaのVMで話しました。
高レベルな話が飛び交うなか、
ありなんか、これ……みたいな感じでドキドキLTしてましたが、
LTへの突っ込みが鋭く、良い経験になりました。(日々是勉強成)
会場を用意してくださったIIJの皆さん、また開催者、参加者の皆様、本当にお疲れ様でした。
会場質問を受けた
・TAILCALLはなぜあるの?
と、
・クロージャを利用した場合にスタックが穴あきになってしまうがどうしているのか?
(クロージャはLuaがUpvalueと呼ぶ上位関数の値を束縛してしまうので、クロージャの場合にはそれをスタックから退避する処理が入ってる)
は、その場できちんと答えられませんでしたので、別途エントリに起こしたいと思います。