1991 年 8 月 1 日発行 ( 毎月 1 回 1 日発行 ) 第 3 巻第 8 号通巻 23 号 1990 年 2 月 2 日第 3 種郵便物認可 提携・ LAN ー E 誌 / 監修・石田晴久 C 言語技術情報誌・ C マカシン ÆLAN プロクラミング 入門 I ・ LAN 概要 Ⅱ・実践ネットワークプロクラミング Ⅲ・ PC-LAN レビュー 巻頭インタビュー Thomas PIum & ↓円 a ANSI C 副委員長と書記か語る C と C + + の現状 提携記事 ・ Praise of 1990 ' s Best ・ Testing, Testing ANSIC 町 e セミコロンとカンマ 明解 ANS に言語入門講座ポインタの基本 SPARC [ T プログラミング . 端末制御 特別付録 : 5"2HD ・「らくかき帳を作ろう」 ・画面設計ツール「 D Ⅳ ER 」 ・アルゴリズム習得ツール「 FLAG 」体験版 ・ X-GCC ④ ・ rANSI C 言語入門講座」活用集⑤ ・本誌掲載ソースプロクラム
1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 10 : 1 1 : 13 : 14 : 15 : 16 : 19 : 20 : 22 : 23 : 24 : 25 : 26 : 28 : 29 : 30 : 32 : 33 : 34 : 35 : 36 : 37 : 38 : 39 : 40 : 42 : 43 : 44 : 45 : 46 : 49 : 50 : 52 : 53 : 54 : 55 : 56 : 58 : 59 : 60 : 62 : 64 : 65 : 66 : #define EXTERN extern # include #include #include # include # include #include 9 : # i ncl ude #include #include 12 : # i ncl ud e #include inpmenu( ) 関数 ( CM910803 ) List 3 22 : { 43 : } List 4 く stdio. h> く stdlib. h> く string. h> く dos. h 〉 menurd. h ” ” window. h ” winvar. h ” く pldwn. h> く fkey2. h> く input. h> く inputvar. h 〉 inpmenu (wn) i nt wn ; 18 : char moji [ 20 ] [ 20 ] : unsigned long key int i,n,len; int xl,yl; len ニ 15 ・ ニ 0 : / * 挿入モード for ( i : 0 : i く n : i + + ) { n Gwbase[wn] .ln : CURON; yl= Gwin[wn]. yl + 1: xl= Gwin[wn]. xl + 1: tlwfresh(&Gwin[wn], ,Gwinmn[wn][i]. def) ; printvs(Gwinmn[wn][i] . x + xI,Gwinmn[wn][i]. while(!(key & CR)){ 15 : 20 : 21 : 25 : 26 : 28 : 29 : 30 : 31 : 32 : 33 : 34 : 35 : 36 : 38 : 39 : 40 : 41 : 42 : 43 : 44 : 46 : 48 : 49 : 50 : 17 : # i ncl ud e "cboxprot. h" 16 : #ifdef PROTOTYPE int kind,ura; char attrib char att 27 : char col int xl , yl , x2. y2 ・ i nt i ; 24 : char kugiri[10]; 23 : char * toke 矼 40 ] : Char *moji; keidraw2(moji) 18 : #endif strcpy(kugiri' ニ strtok(NUL し . kugiri); tOken [ 十十 i ] while( token[i] ! ニ NU しい { = strtok(moj i, kugi (i) : token[i] x2 col att : atoi(token[l]) : = ato i (token[2] ) : = ato i (token[3]) : = atoi(token[4]) : (char)atoi (tokenC5]) : (char)atoi (token[6]) : y 十 yl superin3(Gwinmn[wn] [i] . x + xl,GwinmnCwn] (i) . Y + Y1,Gwinmn[wn] [i]. def. (Gwbase[wn]. col くく 5),NONSEC. &key,CDOWNlCU 円 ESCAPE,Gwinmn[wn] [i]. style) : Gwinmn[wn] [i].len. (Gwbase[wn]. rc 引くく 5 ) , REVERSEEI NONSEC. if(key & CDOWN) { if(key & CUP) { break if(key & ESCAPE) { ( (col くく 5 ) ー att ) : attrib kind= atOi (token[7]) : ura ニ atoi (token[8]) : textkei3(xl,yI,x2,y2. attrib,kind,ura); return ( 0 ) : keydraw2( ) 関数 ( CM910805 ) List 5 Copyright 1991 E. Toyokuni Number CM91 if( i く 0 ) { if( i ” n ) { (!strcmp(moji [ n ー 1 ]. "Y")) i f ( CUROFF; Ⅱ (!strcmp(moji [n-l]," break 3 : 5 : 7 : 1 1 : 12 : 13 : 14 : 19 : 21 : 25 : 26 : 27 : 6 : #define EXTERN extern "config. h" 4 : # i ncl ude 8 : # i nc lude 9 : # i nc lude 10 : # i nc lude #include #include #include く s td i 0. h > く stdlib. h> く string. h> く ctype. h> "fkey. h" menurd. h" werase(&Gwin[wn]) : return(0) : List 4 keidraw2( ) 関数 ( CM910804 ) 16 : #ifdef PROTOTYPE 17 : # i nc lude "cboxprot. h" 18 : #endif 20 : keydraw2(moji) char *moji; 23 : char *token [ 40 ] : 24 : char kugiri[10]; i nt i : char COI int ura; 28 : unsigned char str[256] : 3 : 4 : 5 : 6 : 7 : 8 : 9 : 10 : 1 1 : 13 : 14 : Copyright 1991 E. "config. h" Toyokuni Number CM91 #include #define EXTERN extern #include # include #include #include # include # include く stdio. h> く stdlib. h> く string. h> く ctype. h> "fkey. h" menurd. h ” 29 : 30 : 32 : 33 : 34 : 35 : 36 : 38 : 39 : 40 : 42 : strcpy(kugiri, ! ニ NULL) { while( token[i] strtok(moji . kugiri) : token[i] return ( 0 ) : chgfnc3(str, col, ura) : u ra atoi (token[3J ) : col (char)ato i (token[2]) : str,token[l]) : strcpy( : strtok(NULL,kugiri) : tOken [ + + i] 112 C MAGAZINE 1991 8
LANGUAGE 提携記事 CL 誌 ' 90 年ベスト開発ツ—) レ賞 COMPUTE R LANGUAGE JO Ⅳ RDS 40PRODUC 〃 W Ⅳ AWARDS. ・ COM円圧日S & 狂日 P 日日 ERS ・ LIBRARIES ・ TOOLS ・ CASE TOOLS ・睚田 NE 町 ENVIRONMENTS ・ BIMS ■囲 0 田ル TS HOWTOTEST SOF 島催 P 「 0i50 of 1990 ' 5 Best J. D. Hilderbrand/ 岩谷宏訳 (COMPU ER LANGUAGE, ApriI 1991 ) るという殊な立場から , プログラマの生産性向上に貢献する あらゆるツールを試用で ツールを選んでみました。 について , 意見が一致したのて、私たち自身 て、はなく , 感覚が鈍磨して新しいものに感 過ぎたるは がびつくりしました。私は各人に「ハードデ 動する元気を失うのて、す。飽食が私たちを 硬直化させ , ツール類に対する感性や判断 イスクのスペースが限られているとき , 君 , どのコンパイラやライプラリやツールを使 力を奪います。よいことも , 度が過ぎると CL 誌の編集に携わるようになって最初の う ? 」と聞きました。 だめなんてす。 うちは嬉しくてたまらず , 最新の優れたソ すると , 誰かがペンと紙を手に取りまし フトウェア開発ツール類を , いくらて、も自 飽食状態を超えて 。それはたぶん , TAI Expert 』 TSoftware 由に使えるようになったことを誇らしく田 Development lnternational 』誌の編集長 いました ( 実際 , ツール類を自費て、買って苦 AlanZeichick だったと思いますが , 彼にな 誤解しないて、くださいよ。ソフトウェア 労している友人たちに , 自慢したりもしま らって , みんながリストを作り始めました。 開発ツールは , エキサイティングて、あり重 した。今思い出すと心が痛みます ) 。 ' 90 年に発売され , 編集部員のふたり以上が 要て、あると私たちは今て、も考えています。 私たちのハードディスクはライプラリ製 使ったことのあるものに限るということに ソフトウェアのデベロッパにとって , 良質 品やユーティリティ類て、いつばいて、したが , しました。優秀な開発ツールの一覧表を作 なツールがきわめて重要て、あることを私た 友人たちのハードディスクはそんなに豪勢 る方法としては , 確かに主観的て、風変わり ちは理解しています。だからこそ私たちは , て、はありません。私たちは , コンパイラを な方法て、はあります ()L 誌のレギュラーライ 他誌の 10 倍もの誌面を開発ツールの評価に 下着を着がえるよりも頻繁に変え , 幾つも ターたちにもノミネートしてもらいました ) 。 割いているのてす。 の小さなプログラムをある環境から別の環 私たちは , あらゆるツールをすべて試用て、 しかし最近は , ツール類が供給過剰傾向 境へと , 無造作に移植したりしました。て、 きるという特殊な立場にいますし , どのツ にあり , ある製品が私たちの目をとらえ , も , しばらくすると , 何もかもが目新しく 関心を惹くためには「よほどの製品」て、なけ ールがプログラマの生産性向上にもっとも という気分は消え , 自分の ておもしろい 貢献するかを正当に判断て、きるだけのプロ ればなりません。私オちが受け取る山のよ 好きなフレーバー ( アイスクリームの種類 ) うな PR 用の印刷物や平価版の中て、 , 特別に フェッショナルなプログラミング歴を持つ に固執するようになります。次に , それす 重要て、注目を集める製品はごくわずかしか 者も多数います。 らも魅力がなくなり , ( ソフトウェアの ) 中 その編集会議て、完全なリストがて、きあが ありません。 身を知ろうとする以前に , 梱包を解くこと り , そのリストからアイデアが生まれまし 数週間前の編集会議て、も , そのようなテ 自体がめんどうになります。 た。私たちにとってもっとも印象的だった ーマに話題が集中しました。そのとき私た やがて私たちは , 毎日山のように送られ 製品に fCL 誌 ' 90 年開発ツール賞 ( COM ちは , ' 90 年の新製品のうちどれが傑出して てくる試供品のコンパイラやツール , ライ PUTER LANGUAGE 1990 ProductivitY いるか , どういう問題をどれだけ効率的に プラリなどに対して , 少々不感症になり始 Award) 』を授与しようということになりま 解決しているから重要なのか , といった点 めます。嫌いになったとかあきたというの ・ MS Ⅵ脈 0 ・ STSC APt ・ LOTUS TOOLKIT CL 誌 ' 90 年ベスト開発ツール賞 19
語具 用 応 もに , MS ー C コンパイラのディレクトリ < MS C> ドの INCLUDEi' ィレクトリの中に config. h として右の内容のファイルを入れて おく必要がある。 CL /AL /Od /W3 /Zi /J /c 関数 . c ( ラージメモリモード /CodeView を使用 / 警告レベルは 3/char を unsigned char に する / リンクは行わずコンパイルのみ ) bkdraw2( ) 関数 ( CM910801 ) Number (MS-C 用 config. h) #define MSC #ifndef MSDOS #define MSDOS 参考文献 [ 1 ] 豊国永健著『 C 文解釈』 ( 翔泳社 ) [2]WiIIiam James Hunt 著 fThe C Tool box 』 (Addison-WesIey Publishing Com pany) #endif #ifndef PROTOTYPE #define PROTOTYPE #endif List 2 List 1 3 : 4 : #include ” config. h" 5 : 6 : #define EXTERN extern 7 : 8 : #include く stdio. h> 9 : #include く stdlib. h> 10 : #include く string. h> 1 1 : #include く ctype. h> 13 : #include ” fkey. h" 14 : #include menurd. h ” 16 : #ifdef PROTOTYPE 17 : #include "cboxprot. h" 18 : #endif 20 : bkdraw2(moj i) 21 : Char *moji : 22 : { 23 : char *tokenC40] : 24 : char kugiri[10]; 25 : 26 : i nt X, y 27 : char col 28 : char att 29 : int ura; 30 : unsigned char str[256] : 31 : char attrib 32 : strcpy(kugiri, 33 : 34 : 35 : token[i] 36 : strtok(moji,kugiri) : while( token[i] ! ニ NU しい { 38 : tOken [ + + i ] ニ strtok (NULL, kugiri) : 39 : 40 : atoi (token[l]) : atoi (token[2] ) : 41 : 42 : strcpy( str,token[3]) : 43 : (char) atoi (token[4]) : col (char)atoi (token[5]) : 44 : att 45 : ( (col くく 5 ) ー att ) : a t t r i b 46 : atoi (token [ 6 ]. ) : ura printv(str. attrib,x,y, ura) : return(0) : 48 : 49 : 50 : } 1 1 : # i ncl ude く ctype. h> 13 : #include "fkey. h" 14 : # i ncl ude ” pldwn. h" 15 : #include ” menurd. h ” 16 : #include "window. h ” 17 : # i nc lud e winvar. h ” 18 : 19 : #ifdef PROTOTYPE 20 : #include "cboxprot. h" 21 : #endif 22 : 23 : inpdraw2(moji , fp, cmd. arg) 24 : Char *moji : 25 : FILE *fp; 26 : Char *cmd : 27 : Char *arg : 28 : { 29 : char *token [ 40 ] ; 30 : char kugiri[IO]: i i , n , wn : 32 : int initl=1,linenum=0; 33 : int ret : 34 : strcpy(kugiri, 35 : 36 : while ( (fgets(moji,MOJILEN,fp)) ! = NU しい { 38 : if(moji [O]!=SUBLINE){ 39 : 40 : continue; switch(tolower(moji [ 1 ] ) ) { 42 : 43 : case C 44 : token[i] 45 : strtok(moji. kugiri) : while( token[i] 46 : ! = NU しい { token[ + + i] 47 : = strtok()U しし kugiri); 48 : 49 : 50 : 52 : 53 : 54 : 55 : 58 : 59 : 60 : 62 : 63 : 64 : 65 : 66 : 68 : 69 : 76 : Copyr ight 1991 E. Toyokuni CM91 W n Gwbase[wn]. col Gwbase[wn] . rcol break; token[i] : strtok(moji,kugiri) : while( token[i] ! = NU しい { token[ + + i] = strtok()U しし kugiri) : atoi (token[l]) : (char)atoi (token [ 2 ] ) : (char)atoi (tokenC3]) : atoi (token[l]) : atoi (token [ 2 ] ) : W n Gwinmn[wn] [n] . x atoi (token[3]) : G. winmn[wn] [n] . y atoi (token[4]) : strcpy (Gwinmn [wn] (n) . def , token[5]) : GwinmnCwn] [n].len atoi (token[6]) : Gwinnn[wn] [n] . style atoi (token[7]) : if(Gwbase[wn].In く n + 1 ) { GwbaseCwn].ln n + 1 b reak : case •e return(ret) : inpdraw2( ) 関数 ( CM910802 ) List 2 3 : 4 : #include ” config. h" 5 : 6 : #define EXTERN extern 7 : 8 : #include く std i 0. h > 9 : #include く stdlib. h> 10 : #include く string. h> Number Copyr ight 1991 E. Toyokuni CM91 return((int) NU しい : 応用 C 言語 111
す ) 。日本やアメリカて、は不要て、すし , かえっ 記述て、きません ( MS ー C て、はサポートされて と思われます。 て邪魔になる場合も少なくありませんから , いる仕様て、す ) 。 LSIC て、は通常の関数は引 List 6 は Ver. 3.3 て、修正されたバグて、 , サポートしないほうがよいかもしれません 数がレジスタ渡しとなっていますが , 可変 Ver. 3.20 て、はレジスタ変数に & をつけてア (GCC もデフォルトて、はトライグラフシーケ 引数の関数は引数がスタック経由て、渡され ドレスを取り出すと , 警告も出さずに register ンスを抑制しています ) 。 日言を無視したコードを生成していました るため , このような仕様になっているもの なお , ANSIC に完全に準拠していない Fig. 2 プロファイル情報を作成する手順 との意志表示として , マクロ STDC が スイッチー p を指定する E:*>lcc -0 -0 sieve. c 定義されていません。 cpp-DLSI-C- 旧 :/LS ℃ /INCLUDE -j ー 0 E:*I . $ $ $ sieve. c 生成コードか ip86 E : \ 3. $ $ $ E : \ 2. $ $ $ sieve. c 向上する例 「 86 ー 0 sieve. obj -m sieve. c E:*2 $ $ $ link @link.i ANSI C への準拠度はよくなりましたが , Mic 「 0S0升 (R) Segmented-Executable Linker Version 5.10 Copyright (C) Microsoft CO 「 p 1984 ー 1990. AII rights reserved. もっとも気になる生成コードは , 最初に述 Object Modules [. OBJ] /st:Ox2800/cp: 0X1000 / noi B :*LS ℃ *L 旧 *s*cpro. obj 十 べたとおり , ほとんど変わっていません。 Object ModuIes [. OBJ] sieve. Obj その中て、 , 次の 2 点については向上している Run File [E:cpro. exe] cdOS. 0bj の代わりに cp 「 0. Obj をリンク Sleve List FiIe [NUL. MA 円 ことに気づきました。 Libra 「 ies [. L 旧 ] B :*LSIC*L 旧 *s*knjlib 十 Libraries [. L 旧 ] B:*LSIC*L 旧 *s*doslib; ①ビットフィールドの生成コードがよくな E:*>sieve った (List 3 参照。 List 3 のアセンプリリ 100 iterations 1899 primes スト ()3 asm. txt) は付録ディスク収録 ) 。 ② #pragma optimize space を指定していな E:*>prof sieve. c >p いときには , グローバル変数や static 変数 をワード境界に割り付ける ( 付録ディスク 収録 13 asm. txt て、変数の直前に EVEN が 挿入されていることに注意 ) 。 ただし , 構造体は今まて、どおりパックさ れ , ワード境界に調整されることはありま せん。開始位置がワード境界に割り付けら れるだけて、す。この変更て、実行速度が気持 だけ向上するてしよう。 ノおよび仕様に関して Ver. 3.20 て、気づいていた不具合を調べて みました。 List 4 は① near 関数を far ポイン タに代入すると CS レジスタて、はなく , DS レ ジスタをセットする , ② signedchar の変数 cs を cs&0xff としても符号拡張される ( 編集 部注 : このバグは製品版て、はフィクスされ ています ) , という不具合て、す (List 4 のアセ ンプリリスト ( 14 asm. txt) は付録ディスク収 録 ) 。 バグて、はないのて、すが , 可変引数の関数 はプロトタイプと関数定義を同一ソースに ←プロファイラ用のツール ↑ プロファイル情報の作成 工ラトステネスのふるい ( sieve. c ) のプロファイル情報 凵 st / * Eratosthenes S ieve prime Number program * / #define TRUE 1 #define FALSE 0 #define SIZE 8 190 #define ITER 100 # i ncl ude く s td i 0. h 〉 char flags[SIZE + 1 ] : 1 ma i n ( ) 1 1 1 1 100 100 100 819100 189900 189900 1499900 1499900 189900 8 1 9 100 819100 100 1 int i, prime, k, count, iter; printf ("%d iterationsYn",lTER) : for (iter i ter く = ITER; iter + + ) { count for (i 0 : i く = 引 ZE : i + + ) ロ ags [ i ] for ( i = 0 : i く = S I ZE ; i + + ) { i f ( 日 ags [ i ] ) { p r ー me for (k i + prime; k く = SIZE; k + = prime){ flags Ck] ニ FA し SE; / * primes found * / = TRUE; ー第ーブをー当亂を亂亂ーーブをーをーを亂ー count 十十 : printf ("%d primesYn" を count) : / * primes found on 10th pass * / 42 C MAGAZINE 1991 8
PraiS 0 1990 ' s Best -Metric がプログラミングの世界て、広く受 け入れられるための賢明な選択だ。—LOB Whitewater Resource T001kit The Whitewater Group アイコンだぞー ! メニューだぞー ! ダ イアログボックスだぞー ! カーソルだぞ ! ビットマップだじよー ! Windows こて、 3.0 のすばらしい世界にようこそ。 は , プログラマのみなさま全員が良質なコ ードを書けるばかりて、はなく , 全員が , 美 術と心理学の学位を持っておられるのて、す。 ・という次第て、すが , Whitewater Resource Toolkit は , あなたに代わってア イコンやメニューやダイアログボックスを 作ってくれるわけて、はない。プログラマは やはり , 美術や心理学や文化的シンポルに 関する知識を持っていなければならない しかし , このツールは , そういうオプジェ クトの制作を助けてくれるのだ。 TooIkit のマニュアル類については , 読ん て、いないのて、何ともいえない。私は単純に 起動し , しばらく使ってみただけだ。 Resource Browser が私の代わりに Windows の実行フ ァイルやリソースファイルを調べて , グラ フィカルエデイタを使って各種のリソース を作ったりエディットしてくれる。 Whitewater Resource Toolkit は , Win dows のリソースを作るという , 普通なら苦 労の多い仕事を , 楽にしてくれる。後は誰 かがリソースのスタイルガイドを書いてく れたらなあ。—ALZ Sage Pt0fessionaIEditor ⅵ .1 Sage S0ftware lnc. プログラマは各種のツールの中て、エディ タを使う機会が圧倒的に多いが , 言語と違 いその評価は容易て、ない。確かに , ファイ ルのロードとか , 探索・置換などの機能を べンチマークすることはて、きるが , そうい う数値は実際にエデイタを選ぶための基準 とはいいがたい。数値にはほとんど意味は 24 C MAGAZINE 1991 8 なく , 工デイタは使い心地が自分にヒ。タッ とくることが肝心なのだ。 SPE はヒ。タッとくるね。いくつかの魅力 的な機能もある。マクロ言語は POIY ー Awk , マウスをサポートしている , UItravision 風 のユーティリティのユーザは画面サイズを いろいろ変えられる , PVCS というバーショ GimpeI Software 冊 - t 386 既 4.0 ってくる。—LOB という点だ。使えば使うほど感じがよくな っこけたり , 苛立ったりすることがない しかし肝心なのは , SPE を使っていて , ン管理ソフトのサポートも含まれている。 ロセッサ ) にかけたみたいだ ( つまり支離 イス作の小説 ) の一節を Cuisinart ( フードプ wake ( 超難解て、知られるジェイムス・ジョ しないけど , プログラムの出力は Finnegan ' s パイラはソースコードを見てしやっくりを アルゴリズムはちゃんとしているし , コン アのバグだと上司に報告して , こっそり PC 私ならこういうとき , 滅裂だ ) 。 これはハードウェ もちろん , 2 , 048 個も ら 2 , 048 個に増えた。 る。また同時に , 調べるファイルも 256 個か のて、 , 640K バイトの壁を超えることがて、き Phar Lap 社の DOS extender を含んて、いる はチェックて、きなかった。 PC-Iint 386 は , 複数プログラマによる大規模なプログラム 数やコードの不整合がいちばん生じやすい イトというメモリ制限に引っかかった。変 PC-Iint の DOS 用のバージョンは , 640K バ やってくれる。 た , 強力なデータ型チェックに似た そして PC- lint は , C 十十て、やっと実現し イムエラーになる変数やコードのことさ。 い = けどチェックアウトはしない = ランタ クインはする = コンパイルエラーにならな る作業を支援してくれる。つまり , チェッ の巣〃になっている変数やコードを見つけ ー lint を使ってみる。 PC-lint は , 、、ゴキプリ のファイルから成るアプリケーションを lint 一日て、はとても処理しきれな にかけたら , いほどのエラーメッセージを項戴するだろ うね。早めに lint, しつこく lint, そして , 次のような言い訳をしたい衝動と戦うのだ ! 「て、も , まあ , なんとか動きますから・・・ —MGM CASE ツレ TeamWork 既 3.1 Cadre TechnoIogies lnc. MIS (Management lnformation System) や PC や組み込み用のアプリケーションを作 るための上て、きの CASE だ。 TeamWork は , たぶんこれまて、に作られたツール類の 中て、もっとも総合性があり , もっともプロ グラマフレンドリーな製品だ。設計・解析 のおもな方法論をすべてサポートしている し , ソフトウェア開発のライフサイクルの すべての段階をカバーしている。 TeamWork を見て , 雑誌編集にもこういうタイプのツ ールがほしいと思った TeamWork と他メーカーのツール類を円 滑に併用て、きる点も気に入った。 Cadre 社は CASE 環境をぐんと拡張して , リバースエン ジニアリング ( 逆アセンプラなど ) , コーデ イング , 実行性能の解析といった機能まて、 含めている。—JDH EasyCASE Pr0fessionaIv.2.0 Everg reen CASE T00 c. EasyCASE は , 私たちが知る限り唯一の シェアウェアに起源を持っ CASE ツールだ Evergreen 社の社長 Rob Pritt が , CASE に プログラマの視点を導入し , 価格が安い しかし , これの 10 倍も 100 倍も高いツールと 十分肩を並べられるほど便利な PC べースの ツールを作り上げた。 EasyCASE Pr0fessional は , 基本的な CASE 機能をすべて含んて、いる市販用パージ ョンだ。データ辞書をサポートし , 有力な
Fig. 2 8 クイーンの解のひとつ 。ロ■■ロ % ロ ロロ■■ロロ : ロロ第凹■ロロ - ロ % ■ 0 ■ロ Fig. 1 クイーンの動き 列 b 0 1 2 3 4 5 6 7 〇 〇 〇 0 1 2 3 4 5 6 7 〇 〇 〇 〇 〇 ( 1 ) ( どれでもよいから ) ひとつだけゴー 知られていて , 1850 年頃に数学者 C. F. Ga ィーンは ( 0 , 0 ) , ルへの経路を発見すればよい uss ( あの有名なガウスて、す ) が研究してい ②すべての経路を発見する ます。この間題は解析的な方法て、は解くこ 置かれています。 ( 3 ) すべての経路のうち , 一番コストの とがて、きず , 実際に盤面に駒を配置して確 さて , チェス盤上に系統的にクイーンを 低いものを探したい ( コストは , たと かめなければなりません。 8 クイーンの解の 配置するわけて、すが , どのような順番て、調 えば道のりの長さで表される ) べていけばよいて、しようか ? 単純に考え ひとつを Fig. 2 に示します。 といったケースが考えられます。 数学のセンスて、は , このようなしらみつ れば , 最初のクイーンは盤上のどこにて、も ぶし的な手法は美しくないとされています。 置くことがて、きるのて , 64 通りの置き場所 , 8 クイーン これに対して , コンヒ。ュータサイエンスて、 があります。そして , 次のクイーンは 63 通 は , このようなカずくのアプローチは当然 りの置き場所があります。このように考え バックトラック法の例題として , 8 クイー なことて、す。このあたりが , 数学とコンヒ。 Fig. 3 バックトラック法が有効なケース ン (eightqueens) を取り上げることにしまし ュータサイエンスの価値感の違いになって 列 b よう。これは , 8 x 8 のチェス盤上に , 8 個の います。 0 1 2 3 4 5 6 7 クイーンを互いの利き筋にあたらないよう に配置するという問題て、す。チェスのクイ ーンは将棋の飛車と角を合わせたような動 きをします。つまり , 上下 , 左右 , それに こて、 8 クイーンを解くためのアルゴリズ 斜めにどこまても進むことがて、きます (Fig. ムを考えてみましよう。最初は , 8 個のクイ ーンを置く方法をひとつだけ見つけること にします。まず Fig. 2 のように盤に座標をふ また , チェス盤上に配置するのてはなく , 「 nxn のます目上に n 個のクイーンを配置す って , ( 行 , 列 ) の組みによって位置を表す る」と一般化した問題を n クイーンといいま ことにしましよう ( これは通常の座標系とは 異なっています ) 。たとえば , Fig. 2 てはク す。この 8 クイーンという問題は , 古くから ( 1 , 4 ) , ( 6 , 1 ) , ( 7 , 3 ) の 8 か所に ( 2 , 7 ) , ( 3 , 5 ) , ( 4 , 2 ) , ( 5 , 6 ) , 〇 〇 0 一 4 ー 2 っ 0 4 ・ 5 6 っ / 8 クイーンの解法 8 82 C MAGAZINE 1991
ソフトウのテスト LANGUAGE 提記事 Pete Becker/ 岩谷宏訳 (COMPUTER LANGUAGE, April 1991 ) OMPUTER UAGÜ JOL み朋 S 0 川題月 OS は月Ⅱ日 ・叩 ・ 0 物 EL ・日 JOKS 開発サイクルの一環としてのソフトウェアテストをいかにして確立するか 八ま必ずある 今あなたは , 会議室て、 , あなたが過去 1 年 間苦労して作り上げてきたソフトウェアの デモを行っています。そのプロジェクトは , 危機に瀕しています。新しい CEO ( Chief Executive Officer, 最高経営責任者 , 取締 役社長にほば相当 ) が「こいつは時間のかけ すぎだ」と思っているのてす。あなたは , 今 の出来ばえて、 , CEO に感銘と , もう完成ま て、あとわずかだ , という確信にも近い明確な 印象を与えなければならないのて、す。 すべて順調と思ったとき , CEO が口をは さみました。「フラミスのレポートはどうな っているのかね ? 」。それは , デモの予定に は含まれていませんてしたが , この前試し たときには OK てしたから , 今度も大丈夫て しよう。あなたはキーポードを叩いて , フ ラミスのレポートを表示しようとします。 小さなウインドウが現れて , 「お待ちくださ 」と表示され , ハードディスクのラン し プがっきます。ハードディスクのヘッドが 移動している音が聞こえます。音が止みま す。あなたは画面を見ます。まだ「お待ちく ださい・・・・・・」てす。あなたは亘キーを押し てみますが , 何も起きません。亘キーを してみますが , やはり何も起きません。別 のキーをいくつか押してみますが , 何の反 応もありません。今度は皿十十画 を試します。何も起きません。あなたが電 源スイッチに手をのばしたとき , CEO の表 情からあなたは悟ります。このプロジェク トは終わりてす。 優秀な営業マンの誰もがいうことて、すが , 現在のバージョンて、事前にテストしてみた こと以外は , 決してデモしてはいけません。 彼らは , 市阪のソフトウェアのほとんどに バグがあることを知っています。ところが プログラマは , そういうことを無視しがち てす。テストをまじめにやらないのてす。 コードを書いた当人にとって , テストは自 分の仕事の完成度を疑うことてす。それに , テストに割く時間がないのてす。次のプロ ジェクトが待っていますから。 みんな , こういう態度はよくない とわ かってはいます。しかし , ソフトウェアを テストするという仕事はたいへんな仕事の ように思えるのて , ついついテストを無視 して , 幸運をあてにするのて、す。ても正し い方法をとればソフトウェアのテストはき ちんとてきます。テストが必要だというこ とはよくわかっています。問題はやり方て す。それをこれから述べていきますが , 大 原則が一つあります。それは意地悪てあ れ〃ということてす。 ソフト・ウェアテストの目的は , バグの発 見て、す。テストをヾソフトウェア認定 ( soft ware validation)" と混同させてはいけま せん。テストと認定は違います。テストを する人は , ペシミスト ( 悲観主義者 ) になら なければなりません。ソフトウェアには必 ずバグがあります。バグがないときは , あ なたが十分に発見努力をしていないだけて す (software validation, おもにメインフレ ームの世界の用語。ソフトウェアの基本動 作を確認するヾヴァリデーター〃という職 務が存在した ) 。 テスの計画 どんな仕事ても , それを始める前にやる ことの内容がわかっていなければなりませ ん。てないと , その仕事が成功したのか , しなかったのか判断てきません。ソフトウ ェアのテストも同じてす。実施前の計画が 必要てす。小さなプロジェクトに対しては , そんなに本格的なテスト計画を立てるまて もないてしよう。しかし , テストに数時間 も要するような場合は , やるべきことを事 前に書き出してください。また , テストに ソフトウェアのテスト 29
CJOURNAL を、を c 言語を主体とするコンヒ。、一タブログラマのための月刊情報誌 AUG. 1991 月刊 C ジャーナ ) レ 新刊 2 号 7 月 8 日発 一定価 980 円 ( 本体 9 引円 ) USER INTERFACE GIJ にウイントウズ ■グラフィックユーサーインターフェイス環境 ・ Mac のクラスライフラと G 凵 ・ウェンティーズのウドウズ ・ GIJIS The new f 「 ont 「 Programming StYle 付録ロ旧 K ( 5 " 2H ロ ) ー . MEMORY ・ GNLJ タイジェスト・ 91 .6 月号および GNU GPL ■ VZ Editor FM 版差分ファイル ( ye 「 1. ) MANAGEMENT ・ CLJG PDS # 281 Unicorn 凵 bra 「 y v5.1 EBorIand Languages Conference の報告 ・掲載記事の全ト収録 株式会社ビレッジセンタ - 出版局 〒 10 1 東京都千代田区三崎町 3 ー 1 ー 1 6 神田アメレックスビル 2 F ・営業部 : 03 ー 322 ト 1825 ・編集部 : 03-3239-1950 PO ツⅣ e 〃 80486DX PO wer 旧 M PC Compatible System 40MB HD 80MB HD 120MB HD 200MB HD \ 559 , 000 \ 584 , 000 \ 600 , 000 \ 656 , 000 1 MB RAM 2MB RAM \ 573 , 000 \ 598 , 000 \ 614 , 000 \ 670 , 000 4MB RAM \ 589 , 000 \ 614 , 000 \ 630 , 000 \ 686 , 000 C J()UR 、 AL は毎月 8 日全国の書店でお求めになれます 80486DX ー 25 or 33 AMI BIß 128K Cashe RAM Up to 32 k)the&ard Full Size Tower 220 Watt Power 叩 ly Western DegitaI IDE HD/FD Contr011er Maxter 冊 ( 200 ) TEAC 3.5 ” F 開 * 1 TEAC 5 叩 * 1 2 ⅵ al / IParaIIel I/F 0rchid 0 Ⅱ r VGA Card ( 512K ) Keytoronic 101 Micr&ft buse 一 4. 1 お in 面ぉ 3.0 40MB HD 80MB HD 120MB HD 200MB HD 1 MB RAM ¥ 600 , 000 \ 625 , 000 \ 641 , 000 \ 697 , 000 2MB RAM \ 614 , 000 \ 639 , 000 \ 655 , 000 \ 71 1 , 000 \ 630 , 000 \ 655 , 000 \ 671 , 000 \ 727 , 000 4MB RAM HITACHI 14 物 r VGA Display ( 1024 * 768 non-interlaced) 初期不良無償交換。本体 1 年間保証。 一本部 : 〒刪東京都千代田区三崎町 3- 曰 6 神田アメレックスビル 2F 米国 The C U 「 5 併 0 叩日本支部 TEL. 03-3239-2187 FAX. 03-322 トロ 68 VILLAGE ( 印汀Ⅲ (. 'Shop: 〒ー田東京都千代田区神田神保町ト 35 ヨ 5 だるまビル TEL. 03-32 円 -6 Ⅱ 3 スタッフ募集中 . を明るくヤル気のある方大歓迎です詳しくは電話 3239 ー 2187 / 担当 : 中村までお問い合わせください。
0 0 プロクラミング LAN 概要 空間を超え , 異なるまでも超え た統合・分里を目指す Loc 引 Area Network0 LAN 祚と叫ばれる日本で は , ようやくその第一歩を踏み出したば かりといえる。 N かもたらす理想的な 世界を提供するのかを考えてみたい。 心に据え , LAN とはいったいどのような OS を制御するプログラミングを中 すべきなのか。その理念を支える LAN 世界を入手するためにプログラマは何を 石垣裕 / 三浦文 P A R T ない一般的な N システムのメリット , テメリットを考察する。 ように変化するのであろうか。ここでは N OS の違いに取らわれ etwork 。スタンドアローンとネットワークてはパソコン機能はどの スタンドアローンなパソコンをネットワーク化した Loc 引 Area N LAN とは 48 C MAGAZINE 1991 8 トワーク化は目新しいものて、はありません。 実はローカルエリア内コンヒ。ュータのネッ ネットワーク化したシステムを指します。 とは , 比較的狭い地域内てコンピュータを 時間が経過しました。ご存知のとおり , LAN 言葉を耳にするようになってからかなりの Local Area Network の略 , LAN という 今日のように注目を浴びる以前の LAN の 形態の多くは , 大型汎用機 ( ホストコンヒ。ュ ータ ) を中心に端末をつないだ形のものて、し た (Fig. 1 ) 。高価なホストコンヒ。ュータを多 くの人が使えるように端末をつないて、 , 共 有しようという目的から発生した形態てす。 しかし , 現在と同様に当時もホストコン ヒ。ュータクラスの高価なコンヒ。ュータを購 入てきるユーザは限定されていました。て すが , 近年においてワークステーションや パソコン , あるいは , プリンタなどの周辺 機器が普及し , なかにはそれらを数多く所 有するユーザ ( 企業など ) が珍しくなくな ってきました。このようなユーザは , 所有 するワークステーションやノヾソコンそして プリンタなどをネットワーク化することて、 , 1 台 1 台がバラバラて、あるときよりも効率の よい使い方をしたいと考えるようになりま した。 このように , 現在注目されている LAN の 概念は , 高価格のホストコンヒ。ュータを必 要としないことや , ワークステーションや