2011/04/30

GC本を読む

積ん読になっていたGCに関する本を読む。

ガベージコレクションのアルゴリズムと実装ガベージコレクションのアルゴリズムと実装
中村 成洋 相川 光 竹内 郁雄

秀和システム 2010-03-18
売り上げランキング : 116820

Amazonで詳しく見る
by G-Tools


前半の著者がM2、監修が大学教授というだけあって、アカデミックな書き口で学生時代を思い出す。仕事で扱ってると、どうしても出典とか論文とかの優先度って低くなるから(入社当初は、社内WikiにAbst, Intro, MateMetho, Result, Discuss書いてた)。

GCがLISP以来の古い技術ということは知っていたし、JavaではコピーGCやMarkSweepCompactが行われているということも仕事柄押さえてはいたが、これらがこんなにも学究的に積み上げられ、改良されてきた技術だとは知らなかった。
今ある環境はまさしく巨人の肩の上にあるものだと実感したが、その割には、ソフトウェアで食っている人がこうした業績を知らないことって甚だしいよな、と思う(自分含め)。

アカデミックな語り口に対する拒否反応的なものもあるのかもしれないが、この世界の知見って論文検索サイトで文献を取り寄せたり図書館でコピーしたり、という手間をかけなくとも、有用な技術は皆が自分用に噛み砕いた概念を色んなところで紹介してくれるものだから、その必要を感じなくなっているのかもしれない。

それはある意味、実学として優れた立ち位置を獲得しているとも言えそうだ。いちいち論文を引かなくとも、あっという間に広まって皆が使える状態になるとか、なかなかそんな学問ない(気がする)。

というか、この分野は技術とも自然科学とも実学とも哲学とも宗教とも言語とも文学とも言えそうで、色んな要素を持っていてなかなかとらえどころが無い。
どう向き合うかは、その人がどう向き合いたいかによって規定されるような、面白い分野だよな、なんてGCとは全然関係ないところに話が着地しました。

2011/04/24

Tiered Compilationってなんぞ

J6u25から入った-XX:+TieredCompilation、古くからあった概念らしいけど、ようやく実装ということかな。

http://weblogs.java.net/blog/forax/archive/2010/09/05/tiered-compilation

GUI等のclient vmに特化したc1コンパイラと、server用のc2コンパイラを状況に応じて使い分ける機能だそうな。
-serverで起動して、まずc1コンパイラでJITして、そのコードの利用頻度がc1の基準よりも高かったらc2でコンパイルする、と。

なんだ、段階的コンパイルのことじゃん、なんで疲れてるんだ?と思ったら、Tieredという単語をTiredと読み間違えてた・・・しょっぱっ!

2011/04/23

まずは環境

さあLispはじめようと思い立ったはいいものの、方言がいっぱいで何から始めればよいものか迷う。

Common Lisp? Scheme? Gauche?
Emacs?Meadow?SLIME?LispBox?Xyzzy?

目的は「学び」であるものの、どうせなら業務でも使いたい。となるとWindows環境がベースになる。
この時点でかなり選択肢が狭まる。

会社がEclipseとJavaとWindowsといういかにもな環境でやってるので、これに対応するとなるとEclipse PluginのCUSPだろうか。

そんな感じで調べていくと、良いのが見つかりましたよー。

ABCLとCLforJava。JVM上で動くLisp。触ってみた感じ、ABCLが素敵。

JVM上で動かすというだけでLispのメリットは半減かもしれないが、別に業務アプリ作るわけじゃなし。趣味と実益のバランスをとるのに一番適しているのがABCLな気がしてきた。

(まぁ、JVMの制約にひっかかって結局不満が表出する気もするものの、そのくらいまで習熟できたらもうABCLにこだわる必要もないしね。習熟できたらだけど)

よし、ABCLのjarをクラスパスに入れて、さあ実行!



・・・の前に、Lispの基本をやらないとお話になりませんよね、はい。

java -jar abcl.jar

で実行環境を起動だ!!

Lispはじめてみました。

プログラム4年。PythonやGroovyやJavaScriptって辺りをペロペロしてはみたものの、身についたと思えるのはJavaだけ。
Javaに関しては30万行以上書いてきたし、人並み程度にはなったと思うものの、最近Javaさんに物足りなさを感じてきた。

あれ?この程度の処理にリフレクションごりごり書かなあかんの?

とか

JIT明示的に実行させたいんだけど・・・

とか

GCの振る舞いもいじらせてよ

とか

Cヒープのメモリ管理できないのがだるすぎる

とか。


内部処理を学ぶにつれて、親切に隠蔽してくれている部分をハックしてみたくなったり。
SunがOracleに買収されてApacheも離れて、JavaがCOBOL化していく雰囲気がぷんぷんします。

とはいえ、この状況で「Javaに代わる流行言語とは」なんて問いかけをしても無駄な気がする。どれだけ素敵なデザインの言語でも、隆盛するかどうかは別問題。

第一、「今後のキャリアプランを考えて、流行りそうな言語を勉強しておく」なんてスタイルは楽しくない。

そもそも今の不満はJavaへの物足りなさが根幹にあるわけだから、流行る流行らないじゃなくて、素敵なデザインの言語を学ぶことが欲求の解消につながると踏んだ。


というわけで、Lispはじめてみました。

2011/04/11

自分の正しさ

自然科学的な事象から離れ、社会的になればなるほど、その「正しさ」は移ろい易くなる。

でも、それを認識できる機会がどれほどあるだろうか。その正しさは、社会的であればあるほど、時流に乗った正しいものであるのだから。

しかしその「正しさ」に対する誤謬は、何も現在と過去、先人と現代人の関係にのみ当てはまるものではない。自分と周囲の関係にもそれはあるのだ。
期間限定の正しさ、として開き直るのも一つの手だが、ずっとそのスタンスを取っていると「期間限定」が自分の生涯になりかねない、

といって否定ばかりしていては生産性・活力・自信も生まれない。

否定と肯定の繰り返し。ああ大変。

2009/05/31

1Q84

私は以前から村上春樹が好きです。
彼の持つ思想、人生に向けてのメッセージ、苦悩、精神の病、そうしたものが、非常に私の水に馴染むのです。
人生のつらい時期、たまたま彼の著作「羊をめぐる冒険」「ダンス・ダンス・ダンス」に巡り会って以来、そう感じています。

彼の本は、辛い時に読むと、尚いっそう辛くなります。しかしその辛さは、辛さと向き合わずに生きていくよりも確実に辛さを逓減してくれます。
1Q84の中でも言っていることですが、痛みは伴うものなのです。辛さを癒すための、痛みを伴う対処療法。治療と言えるかもしれないと期待もしています。それが私にとっての村上春樹です。

今、ちょうど1Q84が発売されたこの時期に、私はたまたま辛い時期にあります。以前苦しんでいた時にたまたま「羊をめぐる冒険」に出会った時のように、たまたま発売と辛い時期が重なりました。

別段、この偶然性に意味を感じ、それ故に「村上信者」と揶揄されるような立場に立つつもりはありません。単に、辛い時に読むにはなかなかハードな思想だけれど、辛い時に読むほど、人生の色彩について考える事ができるようになる。自分の頭を使って生きることができるようになる。そんな本だと思う、ということです。

村上春樹のファンに「信者」という言葉が使われるのは、彼の著作は物語であると共に、思想であるからなのか、などとふと思いました。


Amazonの書評を見ていて、「これまでの焼き直し」「ノルウェイの森とハードボイルド・ワンダーランドをいいとこどりした」といったものがありました。私も正直、そのように思います。しかしそのことが著作の価値を損なうかといえば、そうではありません。
むしろ焼き直しであればあるほど、それは正しい姿勢であると感じられます。同じ事が、繰り返し違う言葉で語られる。それは実に悪くないことです。

自分の内面と深く向き合う作業は、しんどいものです。しかし、それがない人生は、やはり魅力のないものに思えるのです。
このしんどい作業に向き合わせてくれる村上春樹さんと、その著作に感謝を。