GC読書会

そういえば、土曜日ですが、
『ガベージコレクションのアルゴリズムと実装』読書会@関東 : ATND
これに参加してきました。
主にマークスイープGCとインクリメンタルGCを読み合わせして、
各所で質疑的な何かをしていました。

詳しくは、きむら(K)さん参照。
ときどきの雑記帖
shinhさんも記憶をダンプしておられました。
2010-04-25 - 兼雑記

で、なんでガベージコレクションかというと、
「ほら、ガベコレある言語って楽じゃん?」
って、日頃思っているとガベコレが羨ましくて調べたくなるからです。


実体験としてはLuaのときにインクリメンタルGCには凄くお世話になって、
かつ、ステップ実行できることを知っていたのですが、
それがどういう仕組みで行われているかはいまいち把握してなかったので、
(GCしている最中にオブジェクトの関連は変わるわけで、これどうなるんだ? みたいな)
そういうものを氷塊させる意味でも凄く意義のある読書会であり、本でした。


多くの場合、GCがある言語ではメモリを意識する事は殆どないですし、
GCの動きをコントロールするよりメモリの使い方やアルゴリズムを見直した方がアプリケーションの最適化には寄与するのですが、
「GCは面白いので」という一言でGCは勉強する価値があると思います。


本はこの本です。

ガベージコレクションのアルゴリズムと実装

ガベージコレクションのアルゴリズムと実装

しかし、
本当にメモリで困っている人はこっちの方が実用書です。

省メモリプログラミング―メモリ制限のあるシステムのためのソフトウェアパターン集 (Software patterns series)

省メモリプログラミング―メモリ制限のあるシステムのためのソフトウェアパターン集 (Software patterns series)

  • 作者: ジェイムズノーブル,チャールズウィアー,James Noble,Charles Weir,安藤慶一
  • 出版社/メーカー: ピアソンエデュケーション
  • 発売日: 2002/06/20
  • メディア: 単行本
  • 購入: 1人 クリック: 87回
  • この商品を含むブログ (35件) を見る

お仕事変わりました

とにかく年末は死んでいたので、お仕事変わりました。
ただ、色々柵で短期の仕事をしているので、
あと数ヶ月したら、もっときちんとしたところにいくです。
たくさんコードを書ける場所を探し中。
(というか、俺にちゃんとコードを書かせてくれるところ)
面白い仕事がしたいのです。面白くなくても面白さは自分でつくるので良いです。

PHPとCakePHPはじめました

といっても、二ヶ月前くらいからですががが。


・なぜPHPなの?(言語の選択の余地はあったのに
PHPを使わずにdisるなんてとんでもない!!!と思ったから。
PHPをDisってるブログエントリを集めてみたを読んでPHPに興味があったので


・なぜPythonじゃないの?
→WebでPythonというのがあんまりしっくりこなかった
PHP使ってみたかった


・なぜCakePHPなの?
→名前がかわいいじゃん?
→symphonyやCodeIgniter、Zendなどをみてもっともバランス感覚が良さそうだったから。
→規約ベースですいすい書けたから。


・なぜDjangoじゃないの?
→Djangoって実績あるんだっけ?(いや、ごめん、嘘)
なんてのもあるくらいCakePHPとDjangoは敵対してる(嘘
→せっかくだしCakePHPじゃね?


ということで、PHPCakePHPです。
CakePHPはかなり使いやすいです。
規約ベースなのが、ぐちゃぐちゃになりがちなPHPを綺麗に整頓することに一役買っていると思う。

PHPは……。
・関数がファーストクラスじゃないのを何とかして。(preg_replace_callbackとかに文字列で関数渡すのはださい)
PHPの参照というかスコープがうんこすぎる
・array_key_existsとかいちいち名前がださい
・foreach が foreach (集合 as 要素)の順番なのが、ムキーってくる

でも、結構思ったよりも良い言語……だと思うが。
しかし、やはりスクリプト言語ではなく、テンプレート言語だよなあ、とは思う。
ただ、PythonRubyPerlのように変なエレガントさはないので、初心者にはわかりやすいのは同意。

Emacsはじめました

といっても、二ヶ月前くらいからですががが。
元々、WindowsとMacを両方使うので両環境でまともに使えるエディタが欲しいと考えていて、よし折角なのでEmacsを使おうと思ったのが始まりです。
xyzzyもみましたが、どうもショートカットが微妙に違うので挫折。
普通にGNU Emacsを落としてつかってます。(MacではCarbon Emacs


まず、
鬼軍曹.el
をいれました。
これは強制的にEmacsキーバインドを身につかせるための拡張で、
例えばカーソルキーをうつと鬼軍曹に怒られるという素晴らしい拡張です!
TABやBSも駄目です!


次に、
ElScreen.el
をいれました。
言わずと知れたタブ機能です。
何個もファイルを開く自分には必須でした。


最近、
jaspace.el
をいれました。
全角空白とかタブ文字とか、見えるようになります。
ヒアドキュメントの後ろに半角空白とかがあって、ParseErrorになる言語とかあるので必須でした。


そして、今日みねこあさんの日記を読んでいたら、
dsvn.el
があるのに気付いて、これでsvnが操作できて勝つる!!


という感じです。
あとこれも何度も読んでます。
手に身につかないので最初の方だけくるくるくると。
なぜ俺はもっと早くEmacsを使わなかったのだ……と後悔している最近です。
いやー、Emacsを使うとプログラムが二倍は楽しい。(ホントだよ

入門 GNU Emacs 第3版

入門 GNU Emacs 第3版

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と呼ぶ上位関数の値を束縛してしまうので、クロージャの場合にはそれをスタックから退避する処理が入ってる)
は、その場できちんと答えられませんでしたので、別途エントリに起こしたいと思います。