flat7th

memo/20110517

created 2011-05-17 modified 2011-05-17 

こころにうつりゆくよしなしごと


(1)
固定文字列を考えなしに#defineしないで欲しい。

他人のC/C++のプログラムをメンテしていて、たった1箇所でしか使わないのに
固定文字列を #define で定義しているものに出会うことがある。

意味無くね?

固定文字列で書いてあればその場で読めるんだぜ?
#define してあったら、調べるのに手間かかるじゃん。
そのわずかなストレスがプログラマ(主にオレ)のちっちぇヒープを浪費するんだ。
頼むからやめてくれないか。

例えば、数値定数でぱっと見て根拠が分からなくなりそうなものは、名前をつける意味で
#define してもいいと思う。んでも、それだって static const でよくね?
あるいは、static にする意味もなくて、単にスタック上にconstにしたほうが
速度上も(アドレスが近いから)有利なんじゃね?

とにかく、何も考えないで#defineするのやめようぜ。



(2)
文字列渡しのインタフェースは意外と使える。

C/C++が好きな人は、文字列渡しを嫌がって、enumを定義したがる。
文字列って意外と使えるよ。関数呼び出しのときはポインタ渡すだけで
済むしさ。ソフトウェアの歴史において、再利用が最もうまくいった例は、
パイプなんだぜ。アレって要は、文字列が渡るstdin/stdoutだけを定義しておけば
あとは若い二人で、あんなことやらこんなことやら何でもどうぞってこった。

SUNのRPCも、DCEのRPCも、CORBAも、DCOMも、結局あんまし爆発ヒットしなかったじゃん。
それに比べて、昨今のHTMLとか、JSONの大流行はどうよ。

文字列渡しも、意外と速いよ。

node.jsでも、socket.on('write',コールバック)なんていう風に、文字列渡しをうまく使ってるみたいだよ。

リンク備考
Node.jsとは何か、開発者ライアン・ダール氏が語る(後編)- Publickey


(3)
perlとか、phpとかでオブジェクト指向風のプログラミングを行うときに、
先人たちが考えたのは

連想配列 が オブジェクトだ ってことにしてしまおう

ということ。


でもjavascriptなんかもっとすごいね。
関数と連想配列とオブジェクトがみんな同じ概念で横に並んでる。

神林長平さんが「わたしを生んだのは姉だった。姉は私をかわいがってくれた。
姉にとって私はただ一人の息子であり、大切な弟だった」とかなんとか、
ホフスタッターもびっくりな面白い文を元ネタに、すごく面白い本を一冊書いてたけど、
javascriptも、ある意味ギリシャ神話にも負けない親子兄弟関係を内包する言語だと思う。

「オレの兄ちゃんはオブジェクトで、その定義は関数なんだ。
オレの姉貴は配列で、オレの弟は構造体だ。
分かるかな~、ワカンネェだろうな~、イェーイ」

おっと、結論から遠くなるといけねぇ。連想配列、使おうぜ。
Cが大好きな良い子の諸君は、2段階くらいのリンクリストでオープンハッシュして、僕と握手。

リンク備考
神林長平 - 言壺近未来のニューロコンピュータと言葉遊びでバトルするSF

...
わけ分からんよね。すみません。いろいろやられてます。

で、次


で次の話。

以前の仕事で、パケットデータがベルトコンベアみたいに
プログラムの猛者たちの間を通り抜けていく、っていう
構造でプログラムしたことがある。

そのとき、運び屋クラスを「通信アクション」っていう意味で
Transaction って名づけた。


通信アクション    //トランザクション
--------------------
入力バッファ      //イングレス
出力バッファ      //イーグレス
入力データ構造体  //リクエスト
出力データ構造体  //レスポンス
--------------------

こんなクラスにしてさ。各プログラムがこいつを引き渡していく。
  • Aさんが「入力バッファ」のパケットをアタマから解析して「入力データ構造体」を設定
  • Bさんが「入力データ構造体」を読んで「出力データ構造体」を設定
  • Cさんが「出力データ構造体」を読んで、出力バッファのケツからパケット設定

それでレイヤも多重にできるようにしたっけね。

で、今までさ、つよい型づけの言語が流行ってたさ。んでも今さ、
何度目か知らんけどまたjavascripみたいなvariant型の言語がキテルね。

上記みたいな、トランザクション構造体なんか、javascriptにぴったりなんじゃないかと
思うのよね。


まあそれで、またちょっと観点変わるんスけど、
javascripでLindaって、相性いいんじゃないすかね。
増井さま連載終了されたそうで、お手すきでしたら作ってくださらないかなぁと。全力で普及します。
(オマエがやれ?ぇぇ、そうですね)