■2006年04月23日(日)
エントリーシート地獄。/感動した技術/Wasei Chikada
|
かけねーよーーーーー!!!!!
技術的に感動した製品や技術にどのようなものがありますかって。
俺が今までに読んでて、一番感動した技術っつーかソースコードレベルになるけど やっぱりド肝を抜かれたのはこれだなぁ。。 今でも、このコードを見た日の興奮といったら忘れられないんだ。。 大学入って5年間。一番感動したソースコードはこれだった。間違いなく。
----- /** * container_of - cast a member of a structure out to the containing structure * * @ptr: the pointer to the member. * @type: the type of the container struct this is embedded in. * @member: the name of the member within the struct. * */ #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr - offsetof(type,member) );}) -----
これです。 ソースコードっつーかマクロだな。 構造体の中の要素をさすポインタ、要素の名前、構造体の型から その要素を持っている構造体のアドレスを返す。
構造体の先頭のアドレスがわかったら、その中の要素を選んで使えるのは当たり前。 でも、要素の位置から構造体の先頭アドレスがわかるってのは、当時の自分からしたら異常事態だった。
そんなことはできないって思ってたからね。
だけど、このマクロのおかげで、Linuxのリスト構造は汎用性の高いものに仕上がっていると思う。 リストを辿るときには、とりあえずlist_headを辿って、 そこからそのlist_headをメンバとして持っている親の(?)構造体を参照できる。
だから、list_headをメンバとして持っている親の構造体が何であるかということと無関係に、 リスト構造を操作する関数(っつーかマクロ)を作ることができている。 だから、非常に汎用性が高い。
これはOSにとってすごく重要なことだ。 だって、OSの中のさまざまな情報はリスト構造で管理されているから。
C言語とかぜんぜん知らない人から見たら、なんのこっちゃらわからないのだろうけど。
さて、この思いをどうやってエントリーシートの3行に収め、かつ、人事さんが理解できるように書くのか。それが問題だ。
ちなみにoffsetofという関数は、C99という1999年に制定されたC言語に関する規格の中で制定されたものらしい。 自分がC言語を使ってどーこー始めたのは1998年のことなので、入れ違いだったのか。
最近の教本ではもしかしたら普通に扱われてるのかな。
ふと、Wasei ChikadaのDJが聞きたいと思った。 自分のhouseとの出会いはこの人のDJだったのだ。
今聞くと、どんな風に思うのか気になった。
やりたいことはたくさんあるな。
hard styleもまだ行ってねーし。
さて。
----- 今日の I Do 激ダブル 2まで減らした。5が2回出た。全部で10回プレイ。 10回プレイして全部フルコンボ。 | | |