| HOME | FrontPage | 記事編集 | RSS |
コーディング規約の作り方 Perl
今のプロジェクトにはコーディング規約があります。まぁ普通あります。次のプロジェクトは5月からの予定です。どちらもPerlの業務ですが、後者にはコーディング規約がありません。後者の社長さんから「ノウハウを持ってないから規約が無いだけで、持ってるなら教えろ」と言われましたが速やかにお断り致しました(;´Д`)y-~ ノウハウと言うのか、世の中の常識的な規約は一通り見てきましたが、Perlで積極的にコーディング規約を作るのは非常にバカげています。言語がCなら
ポインタ演算を全面的に禁止する
のはアリです。基本的に演算の必要が無く、C言語の発明の時点においては特に何の理念も無かったからです。ある理念に基づいて設計された物事は、その理念に基づいて利用した方が効率が良くなります。サラブレッドより自動車の方が速いからといって、サラブレッドにガソリンを飲ませても遅い。この点についてLarry先生はこう仰っています。
Perlのカルチャーでは、何かを禁止する代わりに、一定の徳目を奨励するようにしている。使徒パウロが指摘しているように、愛、喜び、平和、忍耐、親切心、善、優しさ、柔和さ、自制といったものに対して禁止法を定める者はいない。だから、我われも、悪を禁じることに専念するよりも、善を奨励することに専念しようというわけである。
http://www.oreilly.co.jp/BOOK/osp/OpenSource_Web_Version/chapter10/chapter10.html
従来のコーディング規約はまさしく悪を禁じるための文書でした。すなわちPerlでコーディング規約を作るのであれば、善を奨励する観点から作らなくては理念に沿わないわけです。
1. 可読性
従来のコーディング規約は可読性、すなわち素人視点の分かり易さを第一とし、代償として速度を支払ってきました。特にインターネット周りでは、そのような設計・開発を進めた結果、必ず後日「重い」と苦情が来ます。他愛のないコンテンツのために巨額を投じ、巨大なサーバファームを永遠に維持し続けなくてはなりません。10人のチームで一ヶ月かけて高速化するので、それで浮いたサーバの運用・保守代金を毎月我々の口座に振り込んで下さいと言えるなら、一生遊んで暮らせる金額が手に入ります。
2. 画一化
コーディング規約の意義としてはもう一つ、システム全体のコードの画一化があります。画一化によって、「ひとつわかれば全部分かる」的な状況を作るわけです。この命題は唯一絶対の理念があれば、その理念が何であれ解決されます。必ずしも【コーディング規約】でなくとも、【30分以内】や【50歳以上限定】でもある方向の画一化はなされます。
3. 速度ベースのコーディング基準
そういうわけで、ひとつこれを作ろうじゃないかと漏れは言いたい( ´ ー ` )y-~
この世の中に絶対善なる物事が実在するならば、その内の一つが速度です。経費や副作用は別にして、所要時間を短縮する発明そのものは何であれ絶対善です。私が尊敬してやまない【食えるキノコと食えないキノコを分類した人】と、【テレビのリモコンを発明した人】の内、前者の方が超人に近いけれども、絶対善は後者です。速度ベースならコーディングレビューも単純明快です。
「ベンチマークどっちが速い?」
速度が絶対善である限り
「速いから」
または
「遅いから」
は十分な判断基準になります。可読性については転職をお勧めするとして、速度という善を奨励し、速度によって画一化する。プログラミング言語はもともと【コンパイルを通る】という画一化、コーディングは【仕様上のIN-OUTの妥当性】という画一化がなされているわけで、さらに何らかの画一化を追加するとすれば、それ自体が運用フェーズにとってプラスでなくては、くどい。もし速度ベースのコーディング基準として世界有数のドキュメントを書けたなら、\3,800でオライリーから出版できます。
もっともこれはPerlに閉じた話で、Cはコーディング規約が無いと危険。ただCから来た人々がCのノリで書いたPerlのコーディング規約は焼却したい。Perlのコーディング規約に「変数を初期化」とか真顔で書いてあるからね。
4. 参考資料
use Benchmark;
$t0 = new Benchmark;
#----------------------------------#
# ここに計測したいコードを書きます #
#----------------------------------#
$t1 = new Benchmark;
$td = timediff($t1, $t0);
print "the code took:",timestr($td),"\n";
speed
/ 2008.03.01 12:09
BBSWiki ver.1.50 Final blogmode.
Copyleft (!C) 2005-2007 SUICIDE BLONDE JP.
All Lefts Reserved.
- 2008 Recent 50 Entries
- Windows Vista x64
2008.12.31 19:50 - 性格が良いor悪い
2008.12.30 02:45 - PC-MDVD/U2
2008.12.28 02:25 - USBメモリ5GBあたり\1,000
2008.12.25 22:10 - 植田佳奈叩かれる
2008.12.24 22:29 - 哲学熱再燃
2008.12.23 03:30 - Cha-la Head Cha-la
2008.12.21 13:47 - 紅第6巻
2008.12.17 02:19 - 民団、民主・公明支援へ
2008.12.16 03:30 - 口論における男性の勝率
2008.12.15 00:14 - 本業の話
2008.12.14 23:15 - 鉄拳王になったよー
2008.12.13 18:34 - やっぱりuse warningsを使おう
2008.12.11 23:02 - WinningEleven 2009 (PS3)
2008.12.03 20:31 - Ishkur's Guide to Electronic Music
2008.11.30 21:35 - ゲームも必要
2008.11.30 15:41 - UbuntuWWWサーバのセットアップ
2008.11.29 22:14 - らき☆すたOVA
2008.11.28 01:58 - Ubuntuデスクトップ用.vimrc
2008.11.27 22:02 - キーボードを水洗い
2008.11.25 01:33 - よりよい世界をMakeするために
2008.11.23 13:07 - だいぶ疲れも取れたようです
2008.11.20 08:56 - HDMI接続
2008.11.14 00:59 - またモニタ買った
2008.11.12 04:41 - うちの平尾がやりおった!!
2008.11.09 21:32 - ワイヤレスキーボード買った
2008.11.06 23:01 - PS3その後
2008.11.04 22:59 - PS3でかすぎ
2008.10.31 09:22 - ゲームばっかり!!111
2008.10.29 09:10 - 1$92yen
2008.10.27 23:29 - ヒアドキュメント中のハッシュ要素
2008.10.26 15:27 - 女性差別
2008.10.25 23:08 - 鉄拳5サウンドトラック
2008.10.24 04:11 - 新blogやることありすぎ
2008.10.22 00:39 - 鉄拳 DarkResurrection (PSP)
2008.10.20 00:08 - Linuxだけで足りるかも
2008.10.18 23:25 - PS3予約した
2008.10.18 00:26 - Firefox使えない
2008.10.17 23:18 - XML+XSL+Microformats
2008.10.17 00:59 - Minibuffer+AutoPagerize+LDRize
2008.10.15 22:52 - 心の余裕
2008.10.15 01:47 - IPパケットからWEPキーを抽出
2008.10.14 22:45 - Fedora Core4の壁紙
2008.10.13 19:29 - Fedoraマジおすすめ
2008.10.13 17:26 - 新サーバ構築中
2008.10.11 23:18 - 『安心ネットづくり』促進協議会
2008.10.09 22:42 - サーバ/インフラを支える技術
2008.10.09 20:57 - 田中理恵エロすぎ
2008.10.06 23:03 - 翻訳法人
2008.10.05 13:42 - ObjectDriver使えねえ。。
2008.10.02 22:39
- Archive
- 2006年
- 2006年01月
- 2006年02月
- 2006年03月
- 2006年04月
- 2006年05月
- 2006年06月
- 2006年07月
- 2006年08月
- 2006年09月
- 2006年10月
- 2006年11月
- 2006年12月
- 2007年
- 2007年01月
- 2007年02月
- 2007年03月
- 2007年04月
- 2007年05月
- 2007年06月
- 2007年07月
- 2007年08月
- 2007年09月
- 2007年10月
- 2007年11月
- 2007年12月
- 2008年
- 2008年01月
- 2008年02月
- 2008年03月
- 2008年04月
- 2008年05月
- 2008年06月
- 2008年07月
- 2008年08月
- 2008年09月
- 2008年10月
- 2008年11月
- 2008年12月