December 2006

エアコンを掃除したらあまりのホコリの量にショックをうける。
うげー、よく今まで平気だったなー

今度からはまめに掃除しよう

Binary 2.0カンファレンス 2006 で田中さんが発表していた「getcontextの怪」、最初はフーン( ´_ゝ`)と思っていたのだけれど、よくよく考えてみると結構深い話である。

まず、田中さんのサンプルプログラム、よくみると、getcontext()している関数中でローカル変数がvolatileされていない。
んで、さらに困ったことにsetjmp()はC99(JISだとJIS X 3010)の規格で
「ただし対応するsetjmpマクロの呼び出しを含む関数中の、volatile修飾型でない自動記憶域期間をもつオブジェクトの値が、setjmp呼び出しとlongjmp呼び出しの間に変更された場合に不定となる事をのぞく」
と但し書きがあるので、こういうコードは書けない。

JISCのサイトで規格が無料で読めるので興味のある人はドゾ
スキャナで取り込んだと思しき、全ページ画像のクソPDFなので、検索できなくて超使いにくいけどね(苦笑)

んで、困ったことにSingle UNIX Spesification(SUS)のgetcontextの定義ではこのvolatile云々の免罪事項がないらしいんだわ。

※2 Linuxの人は man 3p getcontext で規格定義が読めるらしいよ。便利な世の中になったね♪

でも、この volatile 云々ってのはThe rationale for the C99 standard に書かれているように、そもそも変数がレジスタに乗るかどうかコンパイラしか知らない状況ではライブラリに出来る事なんかねーよハゲ。って事なので、書いてないからvolatileなくても動くように作れよ。と言われてもなかなかツライものがあるのである。

たぶん、唯一の解決策は、setjmp, getcontext呼び出しを含む関数はすべてのローカル変数をvolatileであるかのように扱う。ってやつでgccがやっている対策もコレ(のはず、よく知らないけど)

でも、やっぱりオイラは規格を直すべきだとオモタですよ




不能王と宣言します
定義不能! ランキング!

プロセスIDが変わっちゃうのね(^-^;;

これってPOSIX違反じゃねーの?
とかオモタ


何でかって言うと、
1.POSIX的にexecすると、exec呼び出しスレッド以外のスレッドは
  すべて死ぬ
2.LinuxにおいてプロセスID=メインスレッドのスレッドIDである
3.1,2とつじつまを合わせるため、exec時に自分がメインスレッド
  でなかったらプロセスIDを自分のスレッドIDに設定しなおす
 
という動作をしているため。
(´_ゝ`)フーン ...

ボヘミアンというのはボヘミア人という意味で、ボヘミア王国(*)は現在のチェコですわな。

ここは一つ、現代にあわせて貴族とチェコ人と言ってはどうか?
と思ったが、貴族といっている時点で全然現代的ではない。

アメリカ人とチェコ人?

しかし、それだと何だか意味不明である。

だいたい、本義的な意味じゃなくて、一般的なボヘミアンというのはチェコ人じゃなくてジプシーの事で、フランスあたりでジプシーが

オイラ、ボヘミアの方から来たよ。まじまじ。

などと言いながら乞食生活をしたのが始まりらしいから。

アメリカ人とジプシー?

だぁ!
そんな危ない用語、使えるか!!


(*)神聖ローマ帝国に加入しているので選帝権あるぞ。一度も行使できなかったらしいが。

http://www.rubyist.net/~matz/20061202.html#p02

RELAX Wins
Choose RELAX Now
(XML Schemaではなく)RELAX NGを使おう、という勝利宣言。数多くのアプリケーションで実際に使われているだけでなく、規格という点からもISO/IEC 19757, Part 2に含まれたRELAX NGに劣るところはない、そうだ。

私自身はXMLの事情について詳しくはないが、少なくともボヘミアンと貴族の闘争でとうとうボヘミアンが勝ったということは感慨深い。



むむ、Rubyのまつもとさんという(こう言ってはなんだが)XMLとはあんまり縁の無さそうな人からこういう記事が出てくるのは興味深い。

元某秘密結社の団員として。
(実は何が秘密だったのだかいまだによく分からないのだが、秘密結社のプレゼンを当時の社長に見られて、うろんな目で見られたことだけは克明に覚えている)

規格をあーだこーだ言っていた時には、James Clarkの提案する無茶な仕様に関係者みんなで「どひー」とか言っていたものだが、好評なんやー。とかとか

まあ、そんな戯言はさておき。
実は一番気になったのはリンク先の

Finally libxml, Linux’s standard XML parser, includes full support for RELAX NG, but only partial and incomplete support for W3C schemas.



という文言なのだが、いつfull support したんかいね?
オイラてっきり一生フルサポートはしない(出来ない)と思ってたよ。


どうでもいいけど、このブログは誰に書いてるんでしょね?
誰にも分からない話題満載(^-^;;
それはさておき、飲み会がしたいなぁーー




ショッカー募集
秘密結社! ランキング!

日立さんから大量のアクセスが((;゚Д゚)ガクガクブルブル

#こんなサイトにお望みの情報はありません(^-^;;

↑このページのトップヘ