何となく興味が出てきたので、mark-and-sweepのGCの実装をしてみました。言語はC。アルゴリズムの確認のために作ったので実用性はありません。汎用っぽく作ってはいますけど。
GC (gc_collect) のアルゴリズムは以下の通り:
実装していて思いついたのですが、一度GCが終われば全てのオブジェクトは「白」になります。ということは、GCが終わった後で「白」と「黒」の意味を入れ替えれば、全てのオブジェクトが「黒」に変わるため、GCの最初の手順 (全てのオブジェクトを「黒」にする) は不要になります。という訳で実装も「色の入れ替え」を行うようにしました。まあ微々たる差ですけれど。
この実装はまだ改善する余地はあります:
gc_object, gc_malloc)s_threshold, s_memory_usage)s_thresholdやs_memory_usageがオーバーフローした場合はどうするgc_object)gc_end) (finalizerを追加するとなるとこれはダメ)……なのですが、まあこれでいいか。実際に使う機会があれば弄ろう。
前々から危険な兆候の出ていたPCのモニター (液晶) が、とうとう寿命目前になったようです。電源を入れても数秒後にバックライトが消えます。電源を何度か入れなおすと、ある程度の確率で安定して点くようになるのですが、たまに消えます。今週の頭からこんな感じになったのですが、日が進むにつれてバックライトが安定して点く確率が低くなっています。もうこれは駄目だ。
すぐにでも新しいものを買うべきなのですが、某店の通販の稀に起こる安売りが一番安いので、それを待っています。今月はただでさえ出費がかさみましたし。
が、ここ数日はバックライトが安定して点いていません。どーしよー。
以前から欲しいと思ってた「The Art of Metaobject Protocol」を購入しました。Metaobject protocolには多少触れたことはあるものの、その全貌は易々と理解できるものではないため、きちんと勉強しようと思い購入しました。最近この手の本を読んでなかったのも一因です。
これからじっくりと読む予定。どういう風にmetaobject protocolの全貌が説明されていくか楽しみです (概要はイントロに書かれているのですけどね。問題は中身)。
最近、最寄のゲーセンにもDanceDanceRevolution SuperNOVAが入荷されたので、久々にプレイしてみました。これが楽しいこと楽しいこと。連日通い詰めて筋肉痛になりそうです。実際、太腿と (何故か) 二の腕に多少痛みがあるような気がします。
初めてDDRをプレイしたのは5〜6年程も昔で、その時はビギナーに毛も生えてないような腕前でした (DDRだから足前か)。しかし、今改めてプレイしてみると、当時は気付かなかったものが「見える」ようになってきました。
[図1]
←↓↑→
--------
→
↓
←
顕著なのが図1のような→↓←という譜面の捌き方。昔は「→は右足、←は左足、↑と↓は踏みやすい方で踏む」と考えていたのですが、これでは無理が出てきます。→を右足、↓を左足で踏んでしまうと、←をどの足で踏めばいいのか。左足は既に↓を踏んでいるので連続では動かしづらく (特に踏むテンポが速くなると無理)、かといって右足で踏むと体が左方向を向くので後が辛くなります (←を右足、↓を左足で踏んでいるので、次に↑や→が来ると困る)。
ここで (体を右に向けて) →を左足で踏むようにすれば、左足・右足・左足の順でスムーズに踏むことができ、次に何が来ても対応できる状態になります。このように、「足を交互に使いつつ、次に何が来ても対応できる状態にする」という意識が出来るようになると遊べる範囲が広がります。
ただし、前後の状況によっては必ずしも左足・右足・左足の順が良いとは限りません。その辺りは柔軟に対応する必要があります。とはいえ、体力を消耗している状態でそれ判断するのは難しいのですが。