ます。この場合は、 'date' s et のように、 set の引数にバッククオートで囲んだ # ! /bin/sh % cat samp を指定します。 UN Ⅸへの招待⑩ コマンド set ( date ( echo $ 6 % samp 1990 位置パラメータ変数では、最大 9 つの値しか利用できま せん。コマンドから多数の出力があるときは、前述したよ うにシフトしながら順に使うようにしてください。 変数を調査する シェルでは、変数に対してさまざまな調査がおこなえま す。たとえは C シェルでは、 ・変数が設定されているか否か ・変数の値の数 などか調べられます。以降では、これらの方法について説 明しましよう。シェルプログラムをするときには、さ まざまな場面でこの方法か役に立つはすです。ここでは ( 多 少退屈かもしれませんが ) 調査の方法だけを説明し、具体例 については次号で紹介することにします。 $ ? 変数名 数が設定されているかどうかを、 では、 C シェルから説明しましよう。 C シェルでは、変 C シェルの場合 $?name は、変数 name が設定されているかどうかを知るには、 のように $ と変数名のあいだに ? を使って調べます。たとえ を、設定されていなけれは 0 をこの部分と置き換えます。 とします。このとき、シェルは変数が設定されていれば 1 0 1 % samp echO $?lastname echo $?f irstname set f irstname=Aya # ! /bin/csh % cat samp 次の例を見てください。 UNIX MAGAZINE 1990.9 このプログラムでは、変数 firstname を設定していま す。したがって、、、 echo $?firstname" では $?firstname の部分が 1 に置き換えられてエコーバックされています。 一方、、、 echo $?lastname 〃では、変数 lastname は設定 されていないので $ ? lastname の部分が 0 に置き換えられ てエコーバックされました。 変数の設定 / 非設定の別によって異なる処理をするプロ グラムを書くことがありますが、そのようなときも上記の 方法を使うと便利です。 変数に値がいくつ代入されているかを調べるには、 $ # 変数名 のように、 $ と変数名のあいだに # を入れます。ただし、そ の場合には変数名で指定した変数はすでに設定されている ものでなければなりません。設定していない変数に対して この調査をおこなうと、シェルからは、 変数名 : Und efined vanable. というエラーメッセージが出力されます。 シェルは、次の例のように $ # 変数名の部分を変数に代入 されている値の数と置き換えます。 % cat samp # ! /bin/csh set fname=(aya. tex main. tex val. tex afO. tex) echo $#fname echo $#Name % samp 4 Name : Undefined variable. こでは変数 fname に 4 つの値を代入しているので、 $ # fname は 4 に置き換えられてエコーバックされていま 157
連載 An lntroduction tO X Window System 図 2 タイトルバーと対応するウインドウの関係 0X80067 0 % xlswins 図 console ConsoIe の項目 0X3 34 0 0X3 If (TbX lcon M 聞 a9 印 ) 0X30002a 0 0X308 0 タイトルボタンなど・・・ 0X30g24 0 0X300021 0 0X300020 0 0X20814 0 0X2080d ( conso 1 e ) 0X30g35 0 0X300030 0 タイトルボタンなど・・・ 0X30002F 0 0X3082C 0 0X30002b 0 0X3 35 ( ) ルートウインドウ 凹 ルートウイントウ タイトルバー xterm (console) タイトルバー アイコン ・ ~ ネージャー twm クライアント - ウインドウ の中身 (xterm ) xterm クライアント こ cl)console ウインドウ全体 隣のアイコン - ~ ネージャー ウインドウト 0 ウインドウ の外枠 (a) ボタンボタン タイトルタイトル タイトルバー twm クライアント ウインドウ の外枠 タイトルバー (b) ボタンボタン タイトルタイトル 図 M on M e 凹 ( 0 介 30 ー・ (xterm) の中身 ウインドウ ルートウインドウ クライアント います。これを利用して UsePPoition non-zero を指 定すると、 0 以外の位置の値をクライアントが有する場合 にかぎってその意志を尊重するようにできます。クライア ント側からのウインドウの配置指定はないが、頻繁にウィ ンドウの位置指定を決めるのは面倒だという人には Ran- domPlacement があります。この場合、ウインドウ・マネ ージャーが適当に場所を決めて表示してくれます。もしそ の位置が気に入らなけれは、そこではしめてマウスをもっ て場所を変えればよいということです。 ウインドウ・マネージャーの仕組み これまでにも、ウインドウ・マネージャーが特別なクラ UNIX MAGAZINE 1990.9 イアントであることはおりに触れて説明してきました。タ イトルバーやアイコン、アイコン・マネージャー、ポップ アップ・メニューはこのクライアントが表示しているウィ ンドウです。だいぶ前になりますが、ウインドウの親子関 係について説明しました。すなわち、親ウインドウのなか に子のウインドウ、そのなかに孫ウインドウというかたち で形成され、この親子関係によってウインドウの操作やイ べントの扱いがおこなわれているのです。 今回もとりあけたタイトルバーやウインドウの外枠です が、このウインドウ・マネージャーに属する個々のウイン ドウとまったく別のクライアントに属しながらタイトルバ ーなどと連係する個々のクライアントのウインドウとは、 いったいどのように関係づけがなされているのでしようか。 147
連載 An lntroduction tO X Window System ー朝 144 R3 の twm 4 誰です、すぐに LI + A などに指が伸びる人は ? R4 の相違をまとめておきますので参考にしてください。 っておくのは有益かと思います。次ページの表 1 に R3 と 合わせるのもシャクですが、どの部分が拡張されたかを知 R4 では機能がかなり拡張されていますから低いはうに うが簡単で便利です。 のはうが使いよいので、すべての . twmrc を同しにしたほ もあります。一方、 X を操作する側からいえば 1 つの環境 ンが混在している場合、なかには R3 のものカ鯤ざること 方もおられると思います。また、各社のワークステーショ めでした。読者のなかにも R3 の twm をまだ使っている りで作った . twmrc を R3 の twm で使おうとしていたた 冒頭で紹介した私の失敗ですが、しつは R4 対応のつも れた各社の X にも含まれることが多かったようです。 ことから、 core 部分ではなかったものの製品として提供さ メタキーに指を触れすに基本的なウインドウ操作ができる R3 で主役だった uwm に比べると、派手なタイトル表示と はユーサー構築ソフトウェアとして配布されていました。 さて R4 から主役の座に躍り出た twm ですが、 R3 まで にリソースやオプションを設定するのがコツでしよう。 オントをもっている場合はできるだけこれを利用するよう ーを充実すればよいのですが、 X 端末が ROM 化されたフ ロードです。これを根本的に解決するにはフォントサー 結局、 X 端末で発生する多くの問題はフォントのダウン してみてください ) 。 ますから、これを活用してうまく切り抜けるなどの努力は TELNET などによるリモートログイン端末機能があり ることが少ないので気楽です 4 ( でも、多くの X 端末には、 ったり、思わすリセットしてしまっても他人に迷惑をかけ ります。また、なにか変な状態に陥って電源スイッチを切 理も簡単、壊れたら取り替えるだけと捨てがたい魅力があ とはいっても、 X 端末には手頃で何より静かで小型、管 ( それでもなおかっ便利です ) 教訓その 4 : それでもやつばり猫が好き では問題となる場合があります。 パイラは一般に提供されませんので、形式の違うもの同士 uwm を愛する方へ 残念ながら主役を退いた uwm ですが、あの慎ましい姿 が好きだというューザーもいらっしやるかと思います。た とえば、タイトノレヾーはたしかに twm の長所ですが、多く のウインドウをディスプレイ上に表示しているときにはい たすらに場所を寒いでいるようにも思えますし、いざウィ ンドウの操作をしようと思ったときにタイトルバーが別の ウインドウの下にあったりしてけっこう面倒に感しること もあります。 R4 の twm では、 uwm などはかのウインド ウ・マネージャーの特徴を採り入れて多少とも便利になっ てきています。そこで、ここでは . twmrc の言当のヒントを 述べてみたいと思います。 ます、、究極 ! twm を uwm 的に使う方法〃をお教えしま しよう ( 末尾のリスト 2 参照 ) 。ポイントは、 NoTitIe をす べてのウインドウに適用してタイトルバーを付けないよう にするところです。さらに NoIconManagers を設定し て、アイコン・マネージャーも表示させないようにします。 uwm では、マウスをすこし移動するとはしめて機能する delta 機能がありました。 twm には delta はありません が、これに代わる機能として f. deltastop があります。 れはユーザー定義機能の記述のなかで用いて、変数値 DeItaMove を超える移動があった場合、この記述以降の 実行をとりやめるものです。ですから論理的には delta と は逆になりますが、これを用いたユーサー定義関数を用意 することで似た操作環境を構築できます 5 。 NoTitIe では、 { } にウインドウ名のリストをつけて特 定のウインドウだけタイトルバーを付けないよう孑バでき ます。さらに、リストを付けすにすべてタイトルバーなし にしておき、逆の指定ーー MakeTitle と対象ウインドウ のリストによって特定のウインドウにかぎってタイトルバ ーを付けるようにするのも一案でしよう。そこまでして uwm ふうにして使わなくても、と思う方もいらっしやる かもしれません。もうちょっと小さければタイトルバ 捨てがたいという場合には、 SqueezeTitle 指定の利用を お勧めします。 SqueezeTitIe は、タイトルバーを小さくし て、あたかもウインドウにしおりを挟んだような表示とな 5 f. deltastop の利用に際しては、ユーザー定義機能の記述中、これにさきだって 移動やリサイズなどのマウス移動を利用する機能が実行されてはしめて有効 となる点にも注意してください。 UNIX MAGAZINE 1990.9
連載 IJNIX Communcation Notes 図 4 X ウインドウにおけるターミナル・エミュレータ 画面表示 Xserver xterm C シェルなど キー入力 計算機 "kurumi' 計算機 'tmanami' Xserver はキー入力と画面表示を管理し、 xterm は C シェルなどとのあいだの やりとりをおこなう。 ファイル転送 代表的なファイル転送プロトコルには FTP と RCP が ありますが、どちらもクライアント / サーバー・モデルにし たがって構築されています。 FTP は DARPA サービスであり、とくに UNIX にか ぎらすさまざまな計算機間でファイルの転送ができます。 FTP の特徴は会話的ということで、ログネームとパスワ ードを入力して相手システムに接続し、ファイルリストの 提小やディレクトリの切替え、ファイル送信 / 受信などのコ マンドを対話的に入力していきます。 FTP は、どちらかといえは・、、どこに何があるかよく分か らないよそのマシゾとファイル転送をおこなう場合に向 いているといえるでしよう。また、 FTP ではファイルシス テムの一部をだれでもアクセスできるように公開できます が、これが anonymous FTP と呼ばれるものです。 RCP はバークレイ UN IX で開発されたものなので、 UNIX を意識したサービスとなっています。たとえは、フ ァイルのモードを保存して転送したり、あるディレクトリ 以下を再帰的にまるごとコピーすることもできます。 RCP はログイン・アカウントがあるような手近なホストとのフ ァイル転送を前提としており、リモートファイルを相対ハ スで指定するとリモートシステムでのホームディレクトリ からの相対パスとして扱ってくれます。 また、 RCP はパスワードなしにログインできるホスト とファイル転送をおこなうためのもので、パスワード入力 機能をもっていません。 FTP は転送するファイル名を対 話的に指定しますが、 RCP では引数で与・えます。 38 ネットワークにおけるメッセージ交換機能はきわめて基 本的な機能であり、 TCP / IP をもとにしたネットワーク・ システムのみならす、 UUCP をベースにしたネットワー ク・システムにおいてもさかんに利用されています。 では、利用者間のメッセージのやりとりのサービスを、、電 子メール〃、、掲示板〃、、リアルタイムな会話〃に分類して説明 します。 電子メール 電子メールは、その名のとおり郵便の電子版です。ただ し、レタックスのように送信手段だけが電子的で受付と配 達は紙でおこなわれるというわけではなく、最初から最後 まで電子的におこなわれます。 郵便制度では、投函した手紙は宛先の郵便箱に配達され ます。このため、受け取る人は、自分の都合のいい時間に 郵便箱から手紙を取り出して読むことができます。電子メ ールも同しで、相手がログインしていようがいまいが送る ことができます。着信したメールはメールポックスと呼ば れる場所 ( UN Ⅸではファイル ) に順次貯められていきま す。 また、郵便で同一内容を複数の人に送る場合は人数ぶん の手紙を発送する必要がありますが、電子メールでは 1 つ のメールに複数の宛先を指定できます。この場合、メール 配送システムによって適宜複製されてそれぞれの宛先に 届けられます。また、出したメールのコピーを自動的にと っておくことも可能です。 電子メールシステムは、実際にメールを配送する部分 メッセージ交キ能 UNIX MAGAZINE 1990.9
図 25 モードラインの変化 GYU enncs はヨに良く出来ている . キーバインドのや カスタマイズ LISP による新しいコマンドの作成が お手軽にでざる。 専用の設定は、 ハームディレクトリの . ermcs に 書いておこう。 ー ] —••—NFnacs ・ kanj i. text (Text) ~ A11 ー [EJJ-]- は日本語入力フロントエンド egg5 のモードを表示する部 分です。 egg を使ってかな漢字変換モードに入るには、 Ca あ ] を入力してください。ほら、 egg モードの表示が、 M-x toggle-egg-mode く CR> UNIX MAGAZINE 1990.9 たせてごめんなさい〃の頭文字 ( ? ) たまごをのことだそうです。 5 Nemacs についているドキュメントによると、 egg という名前はやたくさんま の 3 行を付け加えてみましよう。図 25 のモードラインの 書いておこう。 ホームティレクトリの . emacs に 自分専用の設定は、 されていません。このファイルの最後に がまだ変史されていない状態では図 24 のように何も表示 フアが変更されたよマーク〃を表示する場所で、バッファ egg モードの表小と次のバッファ名とのあいだは、、バッ ん。機会があれば、自分で試してみてください。 など、なかなかハードルが高いのでこの記事では触れませ ・初期設定ファイルに egg 用の設定が必要な場合がある ・ egg が組み込まれた Nemacs が必要 ・かな漢字変換サーバー Wnn がインストールされている egg を使うには、 実行すれは、かな漢字変換モードを終了します。ただし、 になったでしよ。もういちど M-x toggle-egg-mode を ernacs 入門 変化に注目してください。 バッフアが変更されて、まだファイルに書き込まれてい ない状態では、 と表示されます。このマークが表小されているのにバッフ となります。また、書込み許可のないファイルを読み込ん だときには、 最後の、、 [EJJ-]" は Nemacs 特有の表示で、漢字コード ージで表されます。 ている場合には、、、 50 % 〃とか、、 38 % 〃のようなパーセンテ れていることを示しています。バッフアの一部が表示され こではバッフア全体が表示さ れているかを表しており、 次の、、 A11 〃はバッフアのどの部分がウインドウに表小さ ます。 を、続く、、 ( ) 〃内の文字はバッフアのモードを表してい すでに説明しなように、、 Nemacs: text" はバッファ名 います。 アを編集しようとするとピープ音が鳴り、警告されてしま となっていますが、アルファベットは以下の漢字コードを に関する情報です。図 24 では漢字コードが、 示しています。 CEJJ-] E S N JIS コード EUC コード シフト JIS コード 漢字コードカ鴃まっていない ( 気にしない ) 漢字コードの変換をおこなわない アルファベットが 4 文字並びますが、左からそれぞれバ ッフアの、 ファイルコード インブットコード ディスプレイコード プロセスコード 131
のが普通です。 C などと比べると、型情報をもっていて実 ところで、データに埋め込まれているポインタでメソッ ドを実行するにはどうすればよいのでしよう ? C や Lisp 行時に動的な型チェックが可能になったぶんだけ、進化し の実行方法なら現実にある機械のイメージとはほ同しな ていることはたしかでしよう。 ので、なんの苦労もなく分かります ( とはいっても、関数や ただし、 Lisp ではデータの型を問い合わせる関数が用意 ローカル変数か機械のイメージと一致するまでに 1970 年 されているので、その関数を使ってデータの型を判断し、 代の構造化プログラミング論争を経なければなりませんで データに適切な操作を施すこともプログラマーの頑張り次 第で可能です ( でも、 Lisp でデータに埋め込める型は処理 したが・・・ しかし、インスタンスのデータのなかにクラスへのポイ 系に用意されたものだけなのが普通です ) 。 ンタがあるということは、一度はポインタをたぐってクラ こで僕がいいたいことは、オプジェクト指向でないな スを取り出さねばならないことを意味します ( 本当に詳し ら、データを操作する手続きがオプジェクトの型をちゃん く知りたい人は、プルーブック [ 1 ] や BYTE の記事 [ 幻を と知っていなければならないということです。 読んでください ) 。またクラスが分かっても、それからセレ オプジェクト指向の場合 クタをもってメソッドサーチをしなけばなりません ( ただ し、これは SmaIItalk ふうのピュアな話で、・瓰丘はコンパ イル時に呼び出すメソッドなどか决められてしまう言語も さて、オプジェクト指向言語の場合、インスタンスはど たくさんあります ) 。 うなっているでしよう。もちろん、インスタンス変数の領 現存する普通の機械では、こういう複雑な動作をプリミ 域を取らなければならないのは C の例とおなしです。 テイプに実現するのはなかなか難しく、通常は仮想機械 大きな違いは、インスタンスのデータのなかにクラスへ (virtual machine ) を作ってそれに実際のプログラムを のポインタが埋められていることです。手続き型言語の場 実行させます。もちろん、マイクロ・プログラムなどで 合は手続きがデータのポインタを管理し、それを使ってデ SmaIItaIk などの仮想機械を実現し、機械語命令でオプジ ータをアクセスしていました。オプジェクト指向言語では、 ェクト指向をサポートすることも不可能ではありません。 データがデータのなかから手続きのかたまり ( とりあえす、 しかし、そういう CISC 指向の話は現在でははとんど聞 、、かたまり〃は、、クラス〃というものだと思ってください ) かれす、 RISC の上で SOAR のように速く動くものが主 を指しています。 流です ( これがまた速い ! ) 。でも、ひと昔前には iAPX432 つまり、データがすべてを知っているので、プログラマ のようにハードウェアの底から本をオプジェクト指向で ーは型を考えすに適当にメッセージを投げることができる まとめたもの ( とてつもなく遅かったらしい ) や、、、スズキの のです。もちろん、本当にいい加減にやったのではオプジ 刀〃 ( バイクのような名前だ : ー ) ) のようにオプジェクト指 ェクトが処理できない ( つまり、クラスに存在していない ) 向をサポートする CPU もたくさん考えられていたもので 手続き ( メソッド ) を呼び出してしまうこともあります。そ す。 して、そんなときには Lisp の場合と同しようにエラーに もっとも鈴木さんの刀の場合、マイクロ・アーキテクチ なってしまいます。 ャは RISC そのもので、今にして思えば Smalltalk の なんだ、たいしたことはないって ? 僕もそう思います。 BYTE ー code ( 仮想機械向けの機械語 ) のインタープリッ でも、適切な名前でメソッドを定義しておけば、ごく自然 トを主目的とした RISC プロセッサであったと考えるこ に動くのでとても楽です。たとえば、、、 + クを数値の場合は とができます。 数値の加算、リストの場合はリストの連結、文字列の場合 は文字列の連結のメソッドとして定義することはよくおこ クラス なわれます。こういうふうに同し名前をいろいろに使える ことをオーバー・ローディング (over loading ) と呼びます まだ、クラスという言葉を明確に定義していませんでし が、演算子をオーバーロードできるプログラミング言語は たね。クラスとは、インスタンスの雛型です。つまり、イン あまりありません ( オプジェクト指向言語はオーバーロー スタンス変数の宣言とその変数を操作する手続きたちをま ドが簡単にできて偉いといいたいのですよ ) 。 105 UNIX MAGAZINE 1990.9
新 e s & 0 ce 0 ce 32MB とし、 380MB の SCSI HDD ( 3 , 500 ドル ) と 150MB の SCSI MT ( 1 , 500 ドル ) を追加した。その他、 ソフトウェアでは Fortran コンパイラ ( 1 , 195 ドル ) 、 X ウインドウ開発パッケージ ( 950 ドル ) 、 NFS オプシ ョン ( 950 ドル ) を追加した。 購入 SGI の営業所は世界中にある。さらに、多数の VAR がさまざまな業種向けに SGI 製品を販売している。ソフ トウェア開発者と大多数のエンドユーサーは、おそらく SGI からシステムを直接購入することになるだろう。そ れ以外にも、 VAR か特定用途のソフトウェアを含めた システムを供給している。 システムは SGI から直接購入するので、装置はほば定 価どおりである。しかし、数量割引制度があるし、組織 によっては特別割引の恩恵に浴することもできる。また、 大規模なシステム構成の場合にはいくらか交渉の余地 があるようである。 SGI に対する不満はほとんどないが、ソフトウェアの パッケージ方法には問題がある。 X11 と NFS を OS か ら切り離しているほか、 Personal lris モデルではソフ トウェア開発パッケージさえ分離している。別のパッケ ージを追加する場合、これらのオプションのソフトウェ アはきわめて高価 ( 2 , 500 ドル ) であるにもかかわらす、 その代償として得られる機能は他社の標準的なワークス テーションのソフトウェアと同等のものである ( ソフト ウェア開発、 X11 、 NFS)0 このソフトウェア供給方式は いささか高価なうえ、注文もすこし不便である。 インストール SGI のハードウェアのインストール方式は、製品によ って異なる。われわれの 4D / 85 GTB は、 SGI の技術者 がインストールした。大規模な 4D / 200 や 4D / 300 など のモデルは、 SGI の技術者にマシンのインストールを任 せたほうがよい。 PersonaI lris システムの場合は、たい ていのユーサーならなんなくハードウェアをインストー ルできるはすである。 4D / 85 のハードウェア・インスト ール作業はさほど難しいものではない。ユニット自体は 18 重いが、簡単に動かせるので重さに関する問題はとくに ない。インストール作業は何本かのケープルを接続し、 システムに電源を投入するだけである。 ソフトウェアのインストールと更新は、ユーサーがお こなう。基本 OS は 4D / 85 にあらかしめインストール されている。オプションのソフトウェア・パッケージは CMT で供給される。これらのインストール作業は、メニ 一方式で簡単におこなえるし、完全に自動化すること もできる。 OS はインストール済みであり、オプション・ソフトウ ェアのインストールはゞ容易〃なので、 SGI のインスト ール手順はどの会社のもの比べてもひけをとらないほ どよいと面したい もし、すべてが期待どおりにい 。しかし、残念なことに SGI システムのインス けば・・・ トールにはつねになんらかの問題が生した。 4D / 85 GTB の場合、 NFS を除いてすべて予定どおりに正しく インストールできた。しかし、 NFS は指示に従っても正 しくインストールできなかった。結局、われわれは SGI のサポート係に電話をかけ、彼らの助けによってインス トールに関する問題を自分の手 0 早決した。 サポートとドキュメント われわれは SGI のサポート用電話サービスを 3 つの 別個の問題のために利用したが、いすれの場合も 2 時間 以内に適切な回答が得られた。この対応ぶりは優秀であ る。通話料不要の番号に電話をかけてオペレータにシリ アル番号を告けると、その問合せが登録される。その後 で、 SGI のサポート・エンジニアが折り返し電話をかけ てくる ( むろん、すぐに担当者につないでもらったほうが よいが・・・・・・ ) 。他社のサポート・スタッフも、 SGI と同等 のサービスを提供してくれたらと思う。 地域の営業所からも技術サポートが得られる場合があ る。サポートの質とレベルは営業所によって異なるが、 近隣の SGI の社員と知合いになっておくことを強く勧 めておきたい。 SGI は急速に成長しているため多くの社員は入社し て日が浅いが、よく訓練されているし、同業他社に比べ て経験豊富な人が集まっている。 SGI のサホート扣当者 は新人とはいえ、われわれの問合せに適切な回答を寄せ UNIX MAGAZINE 1990.9
マジカル・ミステリー・ツアーいたしましょ 機械から見たオフジェクト指向の巻 竹岡尚一 フェラーリ頑張れ で、今回の話はフェラーリとは関係のないオプジェクト われていますが : ー ) けた〃 1 な走りのほうに共感を覚えているのだろう」ともい てしまうわけです一一もっとも、「お前はマンセルの、、やた を作り続けるフェラーリの技術屋魂にみさかいなく共鳴し というわけで、 CISC に夢を託している僕は、複雑なもの のロマンですね。 りある、と言いたい。これはもう、理屈抜きのモノっくり パワー第一主義、パワーがあればその複雑さを補ってあま には多くのファンがいます。しかし作る立場になったら、 関係ではありませんか。軽くて単純、動かせば速い RISC でも、考えてみればこれは計算機界の RISC と CISC の は情けない奴〃と思い、フェラーリが嫌いだったのです。 倒的なパワーがあるくせに、複雑で重いために勝てないと で、実際にはなかなか勝てないのでした。そして僕は、、、圧 ョン系のトラブルや、 12 気筒であるがための重量のせい 、ミツン ' ワーをもっているはすのフェラーリは、エンジン のですが、 8 気筒の DFV に対して 12 気筒で圧倒的なパ 本設計が 20 年も同しとは ! ) 対フェラーリの闘いだった ェラーリが大嫌いでした。当時から DFV(DFR の原型、基 僕は子どものころはだどの車も葉巻型をしていた : ーく ) フ ラーリは絶好調 ) 。しかし、今でこそこう書いていますか、 点ではメキシコ GP 、フランス GP が終ったところで、フェ 覚ましい活躍には喜んでいますにの原稿を書いている時 最近 FI がおもしろいですね。なかでもフェラーリの目 1 いい加減でメチャクチャという意味。 指向の話です。 104 機械に近い普通の言語の場合 前回はクロージャーを紹介し、インスタンスごとに、、な くならない変数〃があることを述べました。さて、それを 実装するにはどうすれはよいでしよう ? ここでは機械か らみたイメージを擱むために、しは・らくのあいだ C で考え ていきましよう。 C の static 変数の感覚では、変数と手続きとが強く結び ついているので、インスタンスを作るたびに手続きのコー ドをコピーするような気がします。えつ、そんなアホなこ と誰もしないって ? よかった、それは正しい : ー ) もしそうしないとすれは、 C ではインスタンスを作るた びにデータ ( インスタンス変数 ) の領域を確保し、そのデー タへのポインタを変数などに入れて保持することになりま すにれが普通のやり方です ) 。もうすこし詳しく書くと、 C の場合、インスタンス変数はオプジェクトの型ごとに構 造体を定義し、インスタンスを作るときにその構造体を malloc するのが普通でしよう ( オプジェクト指向の場合、 、、オプジェクトの型〃ではなくて、、クラス〃 (class) という ほうが正確ですね ) 。 そして、手続きはデータを操作するたびにデータの型を 正確に知っていなければなりません。 C の場合、手続きは インスタンス変数 ( さきほどの構造体 ) へのポインタをも っていても、そのポインタの型を正しく認識して操作しな ければ誤った動きをしますし、コンパイラが検出すれは工 ラーや警告が出ます。 これは、オプジェクト指向でない言語では本質的にほと UNIX MAGAZINE 1990.9 不適当な型の関数に用いたときにはエラーを出して止まる そのものにデータの型を示す情報が埋められていますが、 んど変わりません。たとえば Lisp では、おのおののデータ
UN Ⅸへの招待⑩ シェルプログラム実行時の引数 UNIX のコマンドには、引数としてファイル名やオプシ ョンが指定できます。これと同しように、シェルプログラ ムでも引数が指定できます。以降では、シェルプログラム 実行時に引数を指定し、それをプログラム中で使う方法を 説明します。 C シェルの場合 ます、 C シェルからみていきましよう。シェルプログラ ムの実行時に指定した引数は、そのプログラムを実行する 新しいシェルのシェル変数 argv に値として代入されます。 argv には引数で指定した順番に値が代入されるので、プロ グラム中で個々の値を使うには、 $ 矼空 [ 1 ] $ 矼空 [ 2 ] $ 矼空 [ 3 ] というふうに値の何番目にあたるかをカギ括弧のなかで指 定します。また、すべての引数を使うには $ argv としま す。これらの使い方は、複数の値を代入して設定するユー サー定義の変数の値の使い方と同しです。 では、例を見てください。 % cat samp # ! /bin/csh # 引数をエコーバックします echo $ 矼空 [ 1 ] echo $ 矼空 [ 2 ] echo $argv echo $#argv % samp aya snoopy aya sn00PY aya sn00PY 2 引数には、 aya と snoopy の 2 つを指定しました。プロ グラムの実行結果から、 1 番目の引数は $ argv [ 冂で、 2 番 目の引数は $ argv [ 2 ] で使えることが分かると思います。前 述したように、変数名の後ろにカギ括弧を使わないと変数 の値全部がそこに置き換えられます ( 前例では $ argv ) 。な お、変数 argv はシェル変数としてつねに設定されていま すから、シェルプログラム実行時の引数の有無を調べたい UNIX MAGAZINE 1990.9 場合には $ ? argv は使えません ( つねに設定されているの で、いつも 1 となってしまいます ) 。この場合には、引数の 数が 0 個以上であるかどうかで判断します。 $ gv [ 司で は、において実際に指定した引数の数よりも大きな数を 指定すると ( 存在しない引数を参照しようとすると ) 、シェ f i1e % samp file Subscript out 0f range ・ % samp echo $ 矼空 [ 1 ] # ! /bin/csh % cat samp みましよう。 というエラーメッセージが表小されます。ちょっとやって Subscript out 0f range ・ ルから、 〃の部分で存在しない引数を参照しようとしてもエラーに 工ラーになってしまいます。しかし $ 〃という使い方では、 $argvCn] では、存在しない引数を参照しようとすると samp aya aya aya ma.rl aya mar1 % samp aya m 矼 1 echo $ 0 echo $ 1 echo $ 矼空 [ 1 ] echo $ * echo $argv # ! /bin/csh % cat samp $argvC0] のようには使えません。それでは、例を見てくだ でシェルプログラムの名前そのものを参照できますが、 き、 $ argv は $ * と省略してもかまいません。この場合は $ O ば、 $argv[l) は $1 、 $argvC2) は $2 となります。このと $argv[n] は、省略して $ 〃とも指定できます。たとえ はならないのです。 155
SC UNIX ワ NEWS - OS システムワークプック ステーション 石田秋也、松前祐司、武居昌宏共著井上尚司、大野浩之監修定価 3.6 田円 ( 送料 3 圓円 ) UN Ⅸワークステーション NEWS-OS スアムワ + クプッ コマンドラインで理解するための実用書 OS のバージョンアップに対応し、特に 4.3BSD 系のユーザーのために用意された UN Ⅸ操作 の総まとめ。管理の基本に始まって、用途・対象 別の具体的なコマンドラインまて、を解説。 SONY NEWS の全体構成、操作法が手にとるようにわ かります。 NEWS ューザー必携の一冊。 図ー SqueegeTitleäx 疋とタイトルノヾー ( [)efault ) I)011tSqueezeTi tlc 図 xten•n 図 xtem - 凹 SqueezeTi t い SqueezeTi tle { SqueezeTitIe { ' SqueezeTitIe { ' ' Xt. erlll' ' left. 0 0 } IJNIX システムコール・プログラミング マーク・ J. ロックカインド著福崎俊博訳定価 3.6 田円 ( 送料 300 円 ) システムコール・プロクラミング UN Ⅸの基本であるシステムコールを解説 ファイルシステム、マルチタスクなどの機能 解説から、その雎ーのアクセス手段てあるシ ステムコールにまて高及した、本格的解説書 てす。システムコールを有効に利用するため のフログラムも満載。好評「 UN Ⅸプログラ ミング環壜の第 2 弾、実践の一冊。 図 xterm - 凹 xterm' xt. erm ' center 0 0 } IJN Ⅸプログラミング環境 プライアン・カーニハン、ロフ・バイク共著石田晴久監訳定価 3. 引 0 円 ( 送料 300 円 ) IJN Ⅸワークステーション I く基礎技術編〉 村井純、砂原秀樹、横手靖彦共著定価 2.270 円 ( 送料 300 円 ) コンビュータ工ンジニア必読の UN Ⅸ読本 UN Ⅸワ - クステ - ショ刀 ソフトウェア開発環境に革命をもたらす EWSO この EWS の技術を構造面から解説していきま す。最先端の UN Ⅸ情報も満載した、技術者 必携の一冊てす。内容 : マシン・アーキテク チャ / ネットワーク・アプリケーション / プ ロトコルとデータ形式 / 他 図 xtem - 凹 ' left 2 3 } 図 xterm - 凹 right 0 0 } LJNIX UN Ⅸオペレーティングシステム開発者か解説 プロクラミンク環境 UNIX の開発者のひとりて、あるカーニハンが、 朝 nWK 物第 n 日 00 P ・ システムをいかに効率よく、しかもスマート 石田増入ー に運用するか等、 UNIX のフログラミング哲学 を公開。 UNIX ューザー、プログラマ、システ ムエンジニアなど、 UN Ⅸを最大限に使い、 なしたいと思っている技術者必携の一冊て、す。 LJNIX ワーク NEWS ステーション 井上尚司、大野浩之、柳楽直樹、民田雅人、池田けんしろう共著定価 3. 引 0 円 ( 送料 3 圓円 ) プロフェショナル IJN Ⅸ 村井純、井上尚司、砂原秀樹共著定価 2 ′ 580 円 ( 送料 300 円 ) ・ UN Ⅸオペレーティングシステムは、 AT & T のベル研究所が開発し、 AT&T がラ イセンスしています。 ・表示価格はすべて税込みてす。 〒田 7 ー 24 東京都港区南青山 6- Ⅱスリーエフ南青山ビル 株アスキー書籍 / 雑誌営業部 TE 凵 03 ) 486 ヨ 977 株式会社アスキー 146 るウインドウ中の比率でおこなえます。なお、分子が正の値 だと左から、負の値だと右からの比率になります。分母 0 は 数学的にはありえませんが、 0 の場合には分子の値がピクセ ル値として解釈されます。また、分子、分母ともに 0 の場 合には、、よきにはからえ〃の意味になり、 center では 1 / 2 、ⅱ ght では一 1 / 1 と同し意味になります ( 図 1 参照 ) 。 ウインドウ表示位置の自動決定 せつかくクライアントのオプションでウインドウの表示 位置を指定しても、ウインドウ・マネージャーがおせつか いにもウインドウ枠を表示してさあ、どこに置きましょ うか ? 〃と訊ねてくるのをどうにかできないかなと思うこ とがあります。 twm では、 UsePPoition on 指定によっ てクライアント・プログラムのウインドウ表示位置の意向 を優先できます。この場合でも、とくにクライアント側が 位置指定の意志をもたないときは、ウインドウ・マネージ ャーの助けによって場所か訣定されます。ただし、初期の ツールキットのバグやクライアントの作りによっては、自 分が位置指定をしない意志表明が明確にされていないこと があります。このような場合の位置は十 0 十 0 〃になって UNIX MAGAZINE 1990.9