タグ

ブックマーク / www.nurs.or.jp/~sug (7)

  • Super Technique 講座~キュー(FIFO)

    キュー(FIFO)とは、データ構造から見た「パイプ」のことである。「パイプ」は言うまでもなく、UNIXユーザならばお馴染みのコマンドラインで使うアレである。標準入力を、別なプログラムの標準出力に繋ぎあわせて...という風にシェルレベルでは解説されるものだが、勿論プログラミングのレベルでもそれに相当するシステムコールがあるだけではなく、ライブラリとは無関係なプログラマが作るデータ構造としても重要である。ここでは、「キュー(FIFO)」という見地で広く全体像を捉えてみよう。 キュー(FIFO)とは? データ構造としてのFIFO(連結リスト) データ構造としてのFIFO(リングバッファ) pipe(2) の使い方~双方向パイプ 名前付きパイプ キュー(FIFO)とは? そのそも FIFO とは、「First In, First Out」の略であり、「最初に入ったものが最初に出てくる」データ構造で

  • Super Technique 講座~ザ・レトロ・アルゴリズム「バイナリサーチ」徹底解説!

    このページは昔話...ではない。が、筆者にしてみれば「こんなんジョーシキ!」と思っていたテクニックを使ってみせたら、意外なことにビックリされたので、「こりゃ解説する価値があるか!?」となってしまったことがあるのである。 そのテクニックは「バイナリ・サーチ」である。実は筆者がホント初心者だった遥か昔(大学生だった頃)、コレを教えて貰ってカンドーしちゃったことがあるのである。それ以降、「筆者の技」として結構愛用しているのだが、意外にコレ、使いでがあるんである。しかし...だ。最近のプログラマって言うと、ライブラリだ、クラスだ、フレームワークだ、という話には強くっても、この手の「アルゴリズムの技」には弱い...ってのが傾向である。で、しかも「バイナリ・サーチ」っていうと、基技には違いないが、その前提となる「ソートされたデータに対して○○する」というタイプの問題が減っているということからか、レト

    akanehara
    akanehara 2016/03/15
  • Super Technique 講座~有限状態機械:

    「有限状態機械(有限オートマトン)」とは、計算モデルの1つである。これは来コンピュータ科学の中でも「計算論」に属する話題であり、通常のコンピュータを形式化したチューリング機械よりも能力の低い計算モデルなのだが、アルゴリズムとしてこの形式化を利用することが出来、しかもこの「有限状態機械」は広い応用を持っている。いわゆる「正規表現」を処理するライブラリはこの「有限状態機械」の典型的な応用なのだが、それ以外にもプログラマとして知っていると、アルゴリズムの可読性と処理速度を上げるヒントを得られるアイデアである。 有限状態機械とは? 正規表現とは? 正規表現ライブラリの使い方 オートマトンと正規表現 簡単な応用~JIS →EUC 変換 より複雑な応用~FORTRAN風書式の処理 State デザインパターン 有限状態機械とは? 「有限状態機械」とは、コンピュータ科学(とは言っても数学寄りの奴)の「

  • Super Technique 講座〜シグナルとコールバック

    この文書ではまず、関数ポインタとその型チェックについて述べた後で、UNIXのシグナル機能について解説する。そして、ウィンドウシステムのプログラミングで多用される「コールバック」について解説する。 ちなみにシグナルの機能は質的には UNIX に固有である。他のOSにもないわけではないが、その異同については筆者は関知しない。また、UNIXでのシグナルの実装については Linux を基準に解説をしていく。UNIX シグナルは、実は具体的な実装において大変差がある機能なのだが、一応 POSIX で「こう実装しなさい」という風に決まってはおり、後発の Linux は比較的マジメにそれを実装しているので、まあ、Linux を基準にするのが無難というものであろう(ユーザ比の問題を別にしても)。勿論、伝統的に重要ないわゆる「SysVシグナル」「BSDシグナル」についてもしっかりと解説しているが、もはや「

    akanehara
    akanehara 2016/03/15
  • bash 超プログラム術

    bash の解説なんて、ネット上には結構あったりするのだが、これをわざわざ公開しようというのは、次の理由による。 某ソフトハウスでのUNIX講座用に書いてしまったから。 ネット上にある bash 解説だと、表面的な構文解説程度であり、きっちりスクリプト言語として使い倒すレベルの解説はあまりない。まあ、プログラミング言語として凝ったサンプルもやってみようじゃないの、というノリで割とディープに解説する。 アクセスを増やすための人気取り(苦笑)。 まあ、そんな不純な目的による bash 解説である。とはいえ、日常的に使い慣れている bash であっても、「え、こんな使い方があったの!?」という発見もあることであろう。苦笑しながらでも読んでくれたまえ。だから、初歩的なリダイレクションなんかは解説しないからそのつもりで。 ちなみに参考書としたのはオライリー・ジャパン刊「入門 bash 第2版」である

    akanehara
    akanehara 2015/12/04
    「"によるクォーテーションをした時には、1~4、9~10のステップは実行されない。」ということは、""の中では ~ ${} $() $(()) だけが実行されると覚えておけばいいのかふむふむ
  • Super Technique 講座~goto 文が有用な場合

    goto 文の利用とは、神学論争ではなくて、「リソースバランス」の問題である。この視点によって goto 文という議論の多いC言語機能を検討するのが、この論の目的である。goto 文の利用は「常に不可である」とする教条主義者はこんな論は読まずに、信仰の道を歩まれるのが良かろう。 リソースバランス 多重脱出 依存するリソース リソースバランス まず、「リソースバランス」という大変重要な問題について考えてみよう。「リソースバランス」とは、平たく言えば「使ったものは片付けなさい」ということに過ぎない。オープンしたファイルは必ずクローズするし、malloc(3) したメモリは必ず free(3) する。これを確実に行わないことには、いわゆる「メモリリーク」「リソースリーク」が起きて、長時間動作したり、大量のリソースを消費するプログラムでは、性能が制限されることになったり、OSの動作に悪影響(スラッ

    akanehara
    akanehara 2015/06/23
    "goto 文の利用とは、神学論争ではなくて、「リソースバランス」の問題である"
  • C言語 Super Technique 講座

    このページは、C言語の中級テクニックを中心に解説する。長らくプログラマをしていると、C言語の面白い使い方例が蓄積している。これらを一挙公開するために、このページを作ったのである。しかし、単にCに留まらず、他の言語の面白い特徴なども紹介していく。 内容的にはかなりヘヴィである。当然のことながら、「ポインタ虎の巻」程度の内容はちゃんと使いこなせることを前提とする。意外な技、落し穴、派手なテクニックなど、内容満載だが、ちゃんとデータ構造とアルゴリズムなども説明できれば良いと思う。(まあ、ぼちぼちやってきいます...) 以下の目次には手引きのために、評価がつけてある。凡例として示す。 レベル その解説で記載されている内容のレベル 有用度 その内容が実際に役に立つものかどうか 邪悪度 その内容が薦める方法が、一般的なコーディング規約の中で「邪悪」とされがちなものであるか否か。関数ポインタの活用(濫用

  • 1