end - みる会図書館


検索対象: UNIX MAGAZINE 1993年11月号
40件見つかりました。

1. UNIX MAGAZINE 1993年11月号

ワークステーションのおと一⑩ 3. この \Bsystem@NOTE#I\end{Bsystem} の定義方法 雑です ) 。 \BsystemEND@NOTE などがあいだに入るのでもっと複 テキストは無視されます ( 実際の定義は、さきはどの は、通常の、 \def\abc#l{ という方法とちょっと違いますが、 もあるのです。このマクロは、 \Bsystem@NOTE 〇〇 \end{Bsystem} と一数し、マクロの引数 ( # 1 ) には、 〇〇 \end{Bsystem} が入ります ( 詳しくは、『 X 自由自在』 \Bsystem@NOTE#I\end{Bsystem} の定義は、実際は もうすこし我慢してください。 そんなこと知らんでもええがな」と思っていませんか ? 4. だんだんとややこしくなってきて、「もうええやんか、 さい ) 。 ジ「引数のパターンマッチング」の節を参照してくだ UNIX MAGAZINE 1993 ユ 1 \end(Bsystem) 何かの処理 \def\Bsystem@NOTE#1\end{Bsystem}{ 次のようになっています。 \end{Bsystem} \clearpage \begin{Bsystem} 最初の、 きました ( だまされた気分やて ? ) 。 これでなんとか、 \end(Bsystem) のところまでやって となります。 \end(Bsystem) 何かの処理 が正しく展開されると、 \end{Bsystem} \ c 1 e arpage \begin{Bsystem} したがって、 しつはこういう形式 の 22 ペー は、正しく動く場合には \end(Bsystem) に展開されま すが、なんらかの原因でここまでたどり着けないとエラー になってしまいます似降、 \end(Bsystem) は、 は同じ意未なので \end{Bsystem} と書きます ) 。 これは、私への宿題としておきましよう。皆さんも考え ぜこのマクロの展開がうまくいかないのでしようか。 2. \manualclearpage のようなマクロを定義すると、な いといけないのでしようか。 1. なぜ、 \ begi Ⅱ { 〇〇 } て始めたら \ end { 〇〇 } て終らな せん。 す。しかし、次の 2 つの点についてはまだ説明していま 頭か疲れてしまったので、今回はこの辺でやめておきま ラーになります。 開されす、 \end{Bsystem} がどこかに消えてしまうと工 この \Bsystem@NOTE#1\end{Bsystem} がうまく展 す。 らためて \end{Bsystem} を定義して補う必要があるので から、 \Bsystem@NOTE#I\end{Bsystem} のなかで、あ で、 \end{Bsystem} はどこかに消えてしまいます。です \Bsystem@NOTE#1\end{Bsystem} というマクロのゼ - い tem} のあいだのテキストを無視するために定義した なのです。ところが、 \begin{Bsystem} と \end{Bsys- とにかく、なんらかの理由で \ e Ⅱ d { Bsystem } が必要 分かったら書くことにしましよう。 まの私の知識ではその質問には答えられません。いつか、 んの ? 」と突っ込んでくる人がいるかもしれませんが、い さらに、「ほんなら、なんで \ end { 〇〇 } で終らなあか けない、というのがい TEX での決まりなのです。 \ begin { 〇〇 } で始めたら、 \ end { 〇〇 } で終らないとい るからです。、、なんやそれ ! ? " と思うかもしれませんが、 か ? これは簡単です。 \begin{Bsystem} て始まってい それでは、なぜ \end{Bsystem} が必要なのでしよう てみてください。 ( さかした・しゅう ASTEC) (version. sty は本誌の WEnet から入手できます ) 79

2. UNIX MAGAZINE 1993年11月号

ワークステーションのおと一⑩ YYYYYY \end{Bsystem} 78 を重加勺に作りだすものです。たとえば、 口があります。ひと言でいうと、この 2 つはマクロの名前 ます、 \csname と \endcsname という見農れないマク 以降の動きが違います。もうすこしくてみましよう。 \csname BsystemEND@NOTE\endcsname \Bsystem@NOTE #l\end {Bsystem}—> という形式になっています。これをよく調べると、 マクロ名ー > マクロを展開した結果 このログは、 #1 く—Bsystem \@badend {#l}\fi \ifx \@tempa \@currenvir \else \@checkend #l—>\def \@tempa { # 1 } #1 く—Bsystem \global \@ignorefalse \ignorespaces \fi \if@endpe \@doendpe \fi \if@ignore \@checkend {#l}\expandafter \endgroup \end #l—>\csname end#l\endcsname \fi \fi \ifdim\@savs k >\z@ \ignorespaces \fi \ifhmode \spacefactor \@savsf { } \@esphack ->\relax \ifmmode \else (Bsystem) \BsystemEND@NOTE —>\@esphack \end # 1 く一 \clearpage \csname BsystemEND@NOTE\endcsname \Bsystem@NOTE #l\end {Bsystem}—> \spacefact or \fi \fi \@savsk \lastskip \ifhmode \@savsf \@bsphack —>\relax \ifmmode \else 正常に里できた場合のロク \Bsystem@NOTE. ! Fi1e ended while scanning use of \end {document} \par \clearpage \end {Bsystem} \par YYYYYY Runaway argument? \csname BsystemEND@NOTE\endcsname \Bsystem@NOTE #l\end {Bsystem}—> 工ラーになる場合のログ すると・・ つまり、マクロを展開したものとくらべてみたのです。 \def\texmacroname{TeX} \csname\texmacroname\endcsname を実行すると、という出力か得られます。 よう分からへんて ? 順を追って見ると、 1. \csname\texmacroname\endcsname 2. \csname TeX\endcsname 3. \TeX となります。ですから、さきはどのログに現れた、 \csname BsystemEND@NOTE\endcsname は、 \BsystemEND@NOTE というマクロ名を作りだしてい ます。一方、正常に処理できたときのログは、次のように なっています。 \BsystemEND@NOTE —>\@esphack \end (Bsystem) \BsystemEND@NOTE がさらに展開され、 \@esphack \end(Bsystem) になっています。工ラーになったとき は、この展開は実行されていません。しつは、この展開の 過程で \end(Bsystem) か現れていないのがミソなので す ( ここでは、 \end(Bsystem) は \end{Bsystem} と同 義だと思ってください。理由を説明し始めると夜も眠れな くなるので、今回はやめておきます ) 。 今度は、 version ・ sty の定義を見てみることにしまし よう。しかし、このマクロは短いわりにひどく複雑なこと をしているので、褪各を説明するだけにします。 \begin{Bsystem} ~ \end{Bsystem} を例にとって 説明しましよう。 数 ( # 1 ) に渡しています。これは、簡単に書くと次のよ したマクロ \Bsystem@NOTE#1\end{Bsystem} の引 \end{Bsystem} のあいだのテキストを、自重加勺に生成 2. テキストを無視するために、 \begin{Bsystem} と 味です。 { Bsystem } のあいだのテキストは無視する」という意 れていました。これは、「 \begin{Bsystem} と \end 1. Bsystem は、 \exc1udeversion{Bsystem} と定義さ ご覧のように引数を使っていないので、結果として \def\Bsystem@NOTE#1\end{Bsystem}{} うに定義されています。 UNIX MAGAZINE 1993 ユ 1

3. UNIX MAGAZINE 1993年11月号

ワークステーションのおと一朝 の、 \@ifundefined を使っ列を書き換えてみます。 version ・ sty の使い方を見てみましよう。さきほど いうスタイルファイルか紹介されています。 の無ネルという節に、 version. sty と comment. sty と た。「 7.14 草稿と清書とで内容を変える、あるいは複数行 ルの利用」を読んでみると・・ 、ありました、ありまし さきはど紹介した「いのマクロやスタイルファイ % A 社用 \incIudeversion{Asystem} % B 社用 \excIudeversion{Bsystem} % C 社用 \excIudeversion{Csystem} % A 社用 \begin{Asystem} \gdef\softwarename{ 〇〇 その他の処理・・ \end{Asystem} % B 社用 \begin{Bsystem} システム } \gdef\softwarename{ システム XYZ} その他の処理・・ \end{Bsystem} % C 社用 \begin{Csystem} \gdef\softwarename{ABC ソフト } その他の処理 \end{Csystem} これなら簡単ですれデフォルトでは comment 竟カ症義されていて、 \begin{comment} コメントです \end{comment} という のように、 comment 竟で囲まれた部分は無視されるよ うになっています。 version. sty の落し穴 この version. sty はたいへん便利で愛用していたの ですが、あるとき謎の現象にふつかってしまいました。 さきはどのマニュアルを書いていくうちに、次のような パターンか現れてきました。 % A 社用 \incIudeversion{Asystem} % B 社用 \excIudeversion{Bsystem} % C 社用 76 \begin{Asystem} \clearpage \end{Asystem} \exc1udeversion{Csystem} \begin{Bsystem} \clearpage UNIX MAGAZINE 1993 ユ 1 \end{Csystem} Csystem \begin{Csystem} \end{Bsystem} Bsystem \begin{Bsystem} \end{Asystem} Asystem \begin{Asystem} \begin{document} \clearpage% \begin{#l}% \def\manualclearpage#l{% \excIudeversion{Csystem} \excIudeversion{Bsystem} \inc1udeversion{Asystem} \documentstyle [version,a4j] {j¯article} てあります ) 。 I 盟で処理したのは、次のような文書です ( 簡ヒし ようになりました。 ので、どんどん使っていたのですが、ある日工ラーが出る というマクロを作りました。簡単なテストはうまくいった \clearpage% \begin{#l}% \def\manualclearpage#l{% うためです ) 。これを毎回入力するのは面倒なので、 というパターンがたくさんあるのです ( それぞれ判型が違 \ e Ⅱ d { 〇社用 } \clearpage \begin{ 〇社用 } つまり、 \end{Csystem} \clearpage \begin{Csystem} \end{Bsystem}

4. UNIX MAGAZINE 1993年11月号

ワークステーションのおと一⑩ \manua1c1earpage{Asystem} XXXXXX \manua1c1earpage{Bsystem} YYYYYY \end{document} これを処理すると、次のようなエラーになります。 Running JLaTeX ' 0 Ⅱ ' with j latex ' \nonstopmode\input{v. tex} ) This is JTeX, Version 1 .44 , based 0 Ⅱ TeX C Version 3 . 14t3 ◆立〃ー MOVING TO MEET 最新号の ' 響フレ・カタログ ミ進呈中 / 圧 DI -0 設 0 ・ 33 ・ 9096 93 年度版フル・カタログより 掲載製品の一部をご紹介します。 * * JLaTeX ver . 1 . 3 . . lsozaki (). tex (/usr/local/lib/nttjtex-l .44 / Runaway argument ? \clearpage \end {Bsystem} \par YYYYYY \end {document} \par ! Fi1e ended while scanning use of \@iinput #l—>\@@input # 1 \par く inserted text> \Bsystem@NOTE. く * > tex} . tex—l .44—riscnews \nonstopmode\inputlbv. \nonstopmode\inputlbv. ! Emergency stop ・ . tex—l .44—riscnews く * > tex} うーむ不思議・・・・・・。工ラーは最後の、 UNIX MAGAZINE 1993 ユ 1 \clearpage \begin{Bsystem} \tracingmacros=l いので、正常に動く場合と上交することにしました。 しかし、ログを見てもさつばり分かりません。仕方がな 力を停止します。 必喫な部分の後ろに \tracingmacros=0 と書き、ログ出 グファイルに言求してくれます。出力か膨大になるので、 \tracingmacros=l は、以降のマクロ展開の様子を口 YYYYYY \manua1c1earpage{Bsystem} \tracingmacros=l してみることにしました。 昇がいきません。そこで、 \tracingmacros=l を挿入 工ラーの原因はなんとなく分かるのですが、いまひとつ のあたりで発生しているようです。 YYYYYY \manual c 1 e arpage {B syst em} X 端末ならて、はの使いやすさとコストパフォーマンスに優れた Sun の低価格デスクトップ・コンヒ。ュータ SPARCclassic XO インストールやシステム管理が、簡単なマウス操作て、行なえ、 ワークステーションへのアップグレードも容易。既存の Sun の 環境のみならず、どんなネットワークにもスムーズに統合て、きる、 革新的実力派 X 端末て、す。 SPARCclassic X SunExpress 価格 : 389 000 円 ~ SPARCbook 2 SPARCcIassic X SPARCbook 2 は、ディスク容量 500MB 、メモリ容量 64A4B の 最上位機種を出荷中。 SPARCbook 2 SunExpress 価格 : 1 , 925 , 000 円 ~ NeWS i + SunPics から最新のカラープリンタが発売されました。 360dpi 、 普通紙にプリントて、きます。 BalanceTooI および FastRaster ソフトウェアて、、高速かつ高品質なカラーイメージを作成します。 NeWSprinter CL 十 (BalanceTool/FastRaster ソフトウェア付 ) SunExpress 価格 : 659 , 000 円 5GB 4mm 0A1 す ap ・ 0 e Sun のユーザにとっては、高性能て、低価格のバックアップ装置 の選択の幅が広がりました。 94 年 1 月 31 日まて、、キャンペーン 価格て、提供しています。 5GB 4mm DAT Tape Drive キャンペーン価格 : 320 , 000 円 DN - B ( apab es Sun ISDN-BRI/SBI Expansion Kit SunExpress 価格 : 99 , 0 円 SunLink ISDN-BRI EnabIing Kit SunExpress 価格 : 18 , 000 円 JAQSYS PC-NFS 4.0 東芝情報システム株の JAQSYS PC-NFS V4.0 は、 SunSelect の I ℃ー N 4.0 を日本語化したもの。これにより Jー31開、 I)()S/V 、 PC ー 9800 などのパソコン上て、 TCP/IP および ONC/NFS 環境 を利用することが可能て、す。 JAQSYS PC-NFS V4.0 SunExpress 価格 : 83 , 000 円 ・その他各種 SBus 、開発用ツールキット、メモリ、ケーカレ等 が多数掲載されています。 カタログのご請求は、フリーダイヤルで。 受付時間 0120-33-9096 午前 9 時 ~ 午後 6 時 土日・祝日休 サン・エクスプレス・インターナショナル・インク日本支社 〒 102 東京都千代田区三番町 2 番地三番町 KS ビル 資料請求 N 。 . OOB 77

5. UNIX MAGAZINE 1993年11月号

% Ci main. C RCS/main. c,v く一 new revision: 1 . 4 ; enter 10g message, or end of file: > > 途中のパージョン done ことはできますが、このまま取り出すとロックをかけた バージョンが 2 つできてしまいます。このこと自体は RCS にとって問題はないのですが、現在編集している ( 可能生のある ) ファイルが削除されてしまうと、あと の RCS のコマンドの操作方法が複雑になるので、 では現在取り出されているバージョンにかけられたロッ クをいったん解除してから、次の処理に進むようにしま しよう。もしファイルか編集されていて変更がある場合 は、ファイルを削除しては困るので、現在ファイルシス テム上にあるファイルを登録することにします。この場 合にはロックをかけないため、一 1 オプションを指定せ すに ci コマンドを実行します。するとファイルは、次 . C , V のように新しいバージョンとして登録されます。 . C previous revxsion: 1.3 terminated with single ファイルか編集されていなければ、 RCS はファイル の変更がおこなわれていないことを示してファイルを削 除し、バージョンは登録されません。 % Ci ma111. C RCS/main. c ,v く一 file is unchanged ; revision 1 . 3 done maln . C reverting tO prev-tous どちらの場合にも、 ci コマンドを実行するときに一 1 指定します。さきほどの例を用いて、バージョン 1.1 を この場合は、一 1 オプションに続けてバージョン番号を 次は以前のノヾージョンを編集用に取り出す方法です。 クは解除された状態になっています。 オプションを指定しないので、バージョンに対するロッ 編集用に取り出してみましよう。 % ls RCS % co ー 11 RCS/main reVIS101i done 174 . 1 1 . 1 (locked) ー > maln . C . C メッセージに示されているように ノヾージョン 1.1 を 取り出すことができました。 このファイルを編集してバグフィックスをおこなった あと捨ててしまうのでは、せつかくおこなった変更がむ だになってしまいます。ここで変更したファイルも RCS システムに登録しておきましよう。このファイルを登録 したあとは、もともとの開発を続けることになるので、 今度は一 1 オプションを指定せすにファイルを登録しま す。 % Ci main. C RCS/main. c,v く一 . C new revision: 1 . 1 . 1 . 1 ; previous revision: 1 . 1 enter 10g message , terminated with single or end of file : > > バグ A- 1 をフィックスした done ci コマンドが出力しているメッセージに注目してくだ さい。兀のバージョン 1.1 から新しく 1.1.1.1 という バージョンを作成したことが示されています。これまで は、 2 桁のバージョン番号しかありませんでしたが、今 回は 1.1.1.1 という 4 桁のバージョン番号になっていま す。これは前回も説明したとおり、バージョン 1.1 から 作られた 1 番目の枝の 1 番目のバージョンという意味 UNIX MAGÄZINE 1993 ユ 1 ジョン ( 1.3 ) か取り出されました。これか前回にすこし 最万のバージョン ( 1.1.1.1 ) ではなく、その前のバー done revision 1 . 3 (locked) RCS/main . c,v % CO ー 1 main. C つ ? したが、今回はどのバージョンか陬り出されるのでしょ 定しない場合は、最新のバージョンか取り出されていま バージョンを取り出す際にとく ( ンヾージョン番号を指 から枝を伸ばし、バージョン 1.1.1.1 を作成したのです。 を 1.2 とすることはできません。そこでバージョン 1.1 ン 1.2 が存在しているので、新しく登録するバージョン すでにノヾージョン 1.1 の次のノヾージョンとしてノヾージョ として新しく登録するバージョン番号を計算しますが、 した。 RCS は、このもととなったバージョンの次のもの 編集するもととなったファイルは、バージョン 1.1 で です。

6. UNIX MAGAZINE 1993年11月号

Daemons and Dragons ー① 図 1 SunOS 4.1.2 のカーネル設定ファイル at esp SCSibusO scsibusO scsibusO SCSibusO scsibusO scsibusO SCSibusO at esp scsibusl scsibusl scsibusl scsibusl scsibusl scsibusl scsibusO disk sd0 disk sdl disk sd2 disk sd3 tape stO tape stl disk srO scsibusl disk sd4 disk sd5 disk sd6 disk sd7 tape st2 tape st3 disk srl target target target target target target target target target target target target target target 3 1 2 0 4 5 3 1 2 5 6 lun 0 1un 0 4 lun 0 0 lun 0 1un 0 lun 0 1un 0 6 lun 0 lun 0 lun 0 lun 0 lun 0 lun 0 lun 0 # declare first SCSI bus first hard SCSI disk second hard SCSI disk # third hard SCSI disk # fourth hard SCSI disk # first SCSI tape second SCSI tape # CD—ROM device # declare second SCSI bus # fifth hard SCSI disk sixth hard SCSI disk seventh hard SCSI disk # eighth hard SCSI disk # third SCSI tape # fourth SCSI tape # 2nd CD—ROM device ルを解決する際にどこから着手すればよいかが分かりや すい。このようなデータは、現在の傾向を見極め、ディ スクを追加したり、もっと速いシステムを導入する日判月 を予測するのに役立つ。 以下に、システムを監視するときの手順をいくっか挙 げておく。 ・アカウンティング機能を導入する。 SunOS 4.1. x で この機能を使うには、 #/usr/lib/acct/startup と いう行のコメントを外せはよい。アカウンティング情 報から、定期的にレポートを作成する必要に迫られる ことは目に見えている。前述のように、システムの 通常の状態を把握するためには定期的にレポートを 作らなくてはならない。カーネルでアカウンティン グ機能を使うためには、カーネルの設定ファイルに options SYSACCT という行があるかどうかをチェッ クする必要がある。 システムの監視には、 watcher[3] を使うとよい。 れは PDS であり、ディスクの使用量など、指定した 事項ごとに許容範囲か設定できる。そして、問題か起 きたときだけ報告がおこなわれる。 縄区しになるが、許容範囲をもたせるには、システム にとってどのような状態が正常なのかを理解する必要が ある。初めは控えめな値にしておき、定期的に問題を報 告してくるようになるまで、徐々に範囲を拡大していく のがよいだろう。監視の対象には、次のようなものが考 えられる。 ・システムの平均負荷 (uptime) UNIX MAGAZINE 1993 ユ 1 ページフォーノレト (vmstat) ・スワップの使用状況 (pstat 、 swapinfo) トラフィックの衝突 (netstat) 次回は、 こで紹介したような方法を事前に講してい てもなお発生するような、性能面でのトラブルの解決策 について述べる。 分散システム管理のソフト会社 Tivoli Systems の顧客担当コンサルタ ント。 SunExpert や X Resource Journal など、さまざまな UNIX 里誌に寄稿している。 [ 参考文献 ] [ 1 ] Bruce NeIson and Yuping Cheng, "How and Why SCSI is Better than IPI for NFS ” , USENIX ー加 . t Technical Conference Proceedings, 1992 [ 2 ] HaI Stern, “ Ma れ佖亟れ 9 NFS 佖れ d ルード ' , O'Reilly and Associates, 1991 ( 邦訳 : 砂原秀樹監訳 tNFS&NISJ 、アスキー、 1992 年 ) [ 3 ] Dinah McNutt, "watcher: The 24-hour Guardian ” S 社れ E e , JuIy 1991 [ 4 ] Mike Lookides, "System Pe 可 0 ロれ 0 れ ce T 社ⅲ〃ゲ ・ Dinah McNutt ◎ 1993 , UNIX REVIEW (). S. A. ) UNIX REVIEW 1993 年 1 月号より 「 lmproving System Performance 」 1991 年 ) ( 邦訳 : 砂原秀樹監訳 rUNIX システムチューニンの、アスキー O'ReiIIy and Associates, 1991 65

7. UNIX MAGAZINE 1993年11月号

できる。この変形では、ある別のループを内側のループと して実行できるように、ルーフ。の再配置ができるかどうか を調べる。 ループの終了 コンパイラは、すべてのループの終了判定のコードを等 価な ADDIB 命令 ( 11 、 13 、 15 行目 ) に置き換えるこ とによって、もとのコードにあった 3 つのルーフ畯数を すべて削除した。また、べースレジスタの変更と組み合わ せることにより、一番内側のループはわすか 2 命令にまで 減った割当てをしない場合は 7 命令 ) 。 コンバイラでレジスタ再割当て ( およびべースレジスタ の変更のようなアーキテクチャの利用 ) を実装する際に は、命令列の変形による必喫なレジスタの増加、ルーフ。か ら削除される命令の数、ループの外で実行される命令の数 ( ループの反復回数が少ない場合に重要となる ) 、および命 令のスケジューリングに対する景など、いくつかの要因 を考慮する必要がある。このようなヒューリスティックな 方去は、 HP-UX 8.3 のコンパイラでループ内の整数アド レス式の変「彡をおこなうかどうか、また、どのように変「彡 するかを決めるために使用されている。 最後に、コンパイラのレジスタ再割当てをおこなう部分 とソフトウェア・パイプライン化をおこなう部分とは、 番内側のループに関する情報 ( とくにべースレジスタの変 更パターン ) を共有している。パイプライン化をおこなう 部分は、これらの一番内側のルーフ。カ可度も反復される場 合には、この情報を用いてルーフ。がオーバーラップして実 行されるようにしている。 おわりに レジスタ再割当てはたいへん効果的な最適イ支術であ り、 PA-RISC アーキテクチャの主要な機能をうまく組 み合わせて使用するものである。浮重ル」、点演算を上如勺 高速なハードウェアで実行する場合には、とくに、実彳 間がメモリ・サプシステムのオーバーヘッドに支配される ことのない、ループ中心の直アプリケーションの実彳寺 性能をかなり怖 L ヒさせることカそきる。 UNIX MAGAZINE 1993.11 HP journal PA-RISC コンパイラ内でのレジスタ最適法の最適化に関する設 計と開発について、アドバイスを与えてくれた HP カリフォルニ ア言語研究所とマサチューセッツ言語研究所のメンバーに感謝す る。とくに、 ApoIIo DN10000 コンパイラ内でイ用されるレジ スタ再割当てと強さの軽減に関するアルゴリズムを提供してくれ たことに関して、 Bob Gottlieb と Richard Schooler に感謝 の意を表したい。 [ 1 ] R. G. Scarborough and H. G. Kolsky, "lmproved Optimization of FORTRAN Object Programs ” IBM ノ 0 盟•n 可 es 印几ん 0 れ d Development, VOL24 , Ⅱ 0.6 , November 1980 , pp. 660-676 [ 2 ] F. E. Allen, J. Cocke, and K. Kennedy, 'Reduc- tion of Operator Strength ” Program 月 0 社 , れ 0 s , Prentice HalI, 1981 , pp. 79-101 [ 3 ] A. V. Aho, R. Sethi, and J. D. Ullman, Com- pilers:Prtnciples, Techniques, 0 れ d T00 な , Addison- WesIey Publishing Company, 1986 , pp. 643 ー 648 [ 4 ] R. L. Sites , "The Compilation of Loop lnduction Expressions ”ス CM T 佖れ sac 0 れ s 0 れ Programmtng ん佖れ 9 社 es 佖れ d Systems, V01.no.1 , 1977 , pp. 50-57 [ 5 ] M. AusIander and M. Hopkins , "An Overview of the PL. 8 Compiler ” , Proceedings 可 the SIG- P んスⅣ Symposium 0 れ Compiler Co れ c 0 れ , 1982 , pp. 22 ー 31 [ 6 ] J. Cocke and P. Markstein, "Measurement of pro- gram lmprovement Algorithms ” Proceedings 0 工 the IFIP Co れ 9 ss , 1980 , pp. 221-228 [ 7 ] K. O'Brien, et al. , "Advanced Compiler Technol- ogy for the RISC System/6000 Architecture ” , IBM RISC System/6000 Tec んれ ol 四リ , 1990 , pp. 154-161 [ 赭文献 ] 「 Register Reassociation ⅲ PA-RIS C Compilers 」 ◎ 1992 , Hewlett-Packard Journal (). S. A. ) HewIett-Packard Journal 1992 年 6 月号より 61

8. UNIX MAGAZINE 1993年11月号

図 2 連載 / Li Language パラバラだったデータが・・ 、整列しました ・配列のロを ( ) に、 if 文などの条件の ( ) を { 只 える ・ + + 土を incr i にする ・ printf を format と puts で寒見する こ代 などです。とくに、変数のインクリメントとその変数の参 照か 1 司しコマンド行に現れているときは、言刊面順序に注意 が必要です。 リスト 1 クイックソートのプログラム (Awk 版 ) sort # ! /usr/bin/awk —f { dataCNR] = $ 1 ; printf "data %d %d\n" , NR, $ 1 ; next } END { lower[l] upper [ 1 ] depth = 1 ; NR ; h 土 le (depth > 0 ) { if (lower [depth] く upper [depth] ) { i = lower [depth] 」 = upper [depth] ; pivot = data[j] ; for ( ; while (data [ + + i ] く pivot) while ←—j > i & & data[j] > pivot) data[i] ; data [j] if ()j = upper [depth] ) ! = i) { printf "exchange %d %d\n" , i , お data[i] = x; data[j] = data[i] ; x = data[j]; break ; if ( i > = j ) data[i] = pivot ; printf "exchange if (i lower [depth] lower [depth + 1 ] upper [depth + 1 ] UNIX MAGAZINE 1993 ユ 1 く upper [depth] = lower [depth] ; 1 while (—-j > i & & data[j] > pivot) などは、 カからコマンドを読んでいる部分を削除したものです。 としてください。 anime2 は、 anime( リスト 2 ) の標準入 % sort2 く data % anime2 & みました ( リスト 3 ) 。実行は、 を、パイプを通してではなく send コマンドでおこなって たことをしてみようと思い、アニメーション部分との通信 せつかくですから、 Awk のプログラムではできなかっ のよ引ンヾラしておくほうが無よ隹てすね。 lncr 」 while {$j > $i & & $data($j) > $pivot} { lncr 」 89

9. UNIX MAGAZINE 1993年11月号

図にヘルプメニューの一覧 メニュー ls there a command that . Command apropos Apropos メニュー "List a11 "Describe "Describe IS メニュー 'Key Commands く = = > keystroke commands" key briefly" key verbose" Lisp function' this command" ernacs 入門 // へ、/ command—apropos apropos Functions" describe—bindings describe—key—briefly describe—key describe—function where—IS "Manua1 and tutorial' "lnfo system' llnvoke Emacs tutorial" メニュー "Odds and ends" "Last 100 Keystrokes" "Describe syntax tablet' メニュー "Modes" 1'Describe maJ 0 て "List a11 keystroke commands" メニュー "AdministriV1a" "View the GNU Emacs license" "Describe distribution' info help-with—tutorial describe—no—warranty describe—distribution describe—copying vlew—emacs—news describe-bindings describe—mode describe—syntax view—lossage x-button ト c] ト m] ト s トボタンの種類ト up] と記述しますが、 [ ] のなかは省略することもあります。引 数の意味は次のとおりです。 また、ボタンの不頁は、 マウスのボタンを離した シフトキーを押している メタキーを押している コントロールキーを押している -up: UNIX MAGAZINE 1993.11 left middle right のいすれかを指定してください。 あとは、初期設定ファイル ~ /. emacs に (define—key mouse—map マウスシーケンス ' コマンド名 ) を加えればできあがり。もちろん、 eval-expression コマ ンドを使って、その場で、 151

10. UNIX MAGAZINE 1993年11月号

ernacs 入門 X— mouse— set—mark は、デフォルトの設定ではマウスにバインドされていない ので、 「ちょっとためしに使ってみましよう」 というわけにはいきません。興味のある方はあとで説明す る「マウス・バインディングの変更」の設定に従って x- mouse-set-mark をマウスポタンに設定してから、さき ・メタキー十マウス左ボタン こでは、 に進んでください。 exchange-point-and-mark を実行すれば、カーソルと ば、マークの設定は成功しています。確認後、もう一度 んとマウスでオ旨定したつもりの文字へカーソルが移動すれ ークを設定します。このコマンドを実行したときに、ちゃ ている位置にカーソルを移動し、現在のカーソル位置にマ を入れ替えるコマンドです。具体的にはマークが設定され で確認してください。これは、マーク位置とカーソル位置 M-x exchange-point-and-mark(C—x C—X) できないほど長い文章を削除するときなど ) には、 にマークか叡疋されているかどうかが気になるとき (undo マークを設定した文字が反転するのを見逃したり、本当 びカーソル位置の文字が反転します。 マウスポタンを押し始めてから 1 秒くらい経っと、ふたた した文字が反転します。そのあと、マウスポタンを離すか す。次に、 2 の操作でマウスポタンを押すとマウスで指定 ボタンを押す前は、カーソル位置の文字が反転されていま さないようにして反転表示に注目してください。マウスの この操作をおこなったときには、ウインドウから目を離 2. メタキーを押しながらマウスの左ボタンを押す。 1. マークを設疋したい文字上へマウスカーソルを移動。 にバインドされているものとして操作してみましよう。 ウインドウの分割 マークは元の位置に戻ります。 使うものではありません。ウインドウを操作するときにも マウスは、カーソルの移動や文字列の削除と複写だけに 148 マウスは活躍します。 Nemacs/Mule を特徴つ、ける機能の 1 つに、 1 つの画 面を複数のウインドウに分割できる、、マルチウインドウ〃 があります。また、マルチウインドウ・システムを使いや すくするために、次のような機能をもったコマンドが用意 されています。 ・ウインドウの追加 ・ウインドウの削除 ・ウインドウの分割 ますウインドウの分割、次の節ではウインドウの削除に ついて説明しましよう。 ウインドウの分割には大きく分けて、 ・縦に 2 分割して分割後のウインドウが左右に並ぶ ・横に 2 分割して分割後のウインドウが上下に並ぶ の 2 通りがあります。それぞれ、キーポードから入力する コマンドでは、 split-window-horizontally split-window-vertically があります。このうちマウス操作で用意されているのは split-window-vertically のはうです。ただし、コマンド 名はマウス操作用の名前になっていて、 x-mouse-select-and-split です。マウスは次のように操作します。 1. 分割するウインドウ上へマウスカーソルを移動。 2. コントロールキーを押しながらマウスの右ボタンを押 す。 現在のカーソル位置にかかわりなく、マウスで指定した ウインドウが上下に真っ二つ。カーソルは分割したウイン ドウへ移動します。 ウインドウの削除 もう 1 つの操作は、指定したウインドウ以外のものを消 してしまう処理です。このコマンド名は x-mouse-keep- one-window で、キーポードから入力する、 M-x delete-ot her-window UNIX MAGAZINE 1993.11