2008年6月28日土曜日

【パタヘネ】3章 コンピュータにおける算術演算

体調をくずしたので、調子が戻るまではゆっくり。


  • 3.1 はじめに

    • 特になし。

  • 3.2 符号付き数と符号なし数

    • 自分なりの整理を書いてみる。
    • コンピュータの中では数字は二進数で表現する。

      • そうすると電気回路のon/offで表現するのが簡単である。
      • 例えば、レジスタにセットされたbitをそのまま2進数の数と解釈することが可能となる。

    • 表現と解釈について。
    • 正の数は簡単。
    • 負の数をどうする。
    • 負の表し方はいろいろある。
    • ハードウエアの効率がよい方法にきまった。
    • それは2の補数の考え方を利用したものだった。
    • まず補数とは?

      • N進法において、a に足して全体の桁が1つ上がるような最小の自然数を「N進法における a に対する N の補数」という。
      • N進法において、a に足しても桁が上がらない最大の自然数を「N進法における a に対する (N-1) の補数」という。

    • 32bitで2進数の数を表現することにする。
    • 0...0を0(base10)とする。
    • 0...01を1(base10)とする。01...1を2147483647(base10)とする。
    • すなわち下位31bitで正の整数を表現する。
    • ここで、0...01の32bit(全部)で2進数の数であるとする。
    • すると、これの2の補数は、0...01である。0...01 + 0...01 = 0...010。
    • で、これは負数の表現には使えない。
    • 補数の定義では、「aに足して全体の桁が1つ上がるような最小の自然数」とあるところを、「aに足して架空の33bit目に桁が1つ上がるような最小の自然数」と変更する。
    • すると、0...01の修正版2の補数は、1...1となる。
    • こうすると、0...01 + 1...1 = (1)0...0となり、33bit目への桁あふれが適切に対処される(無視される)なら、これは0...0になり、1(base10)に足して結果が0(base10)になるものだから、これは-1(base10)の表現に適している。
    • さて、1の補数も同様に修正すると、0...01の1の補数は1..10であり、元の数の01を反転させたものである。これは二進数の足し算と桁上がりの性質からわかる便法である。
    • 1の補数に1(base10)を加えたものが2の補数であることは、補数および修正補数どちらにしても補数の定義そのものなので自明。
    • なので、ある数の表現に対する負数の表現を求めるには、元の数の表現を01反転した上で1を足せばよい。
    • 結果として、最上位ビットが0ならば0または正の整数であり、1ならば負の整数となる。



こんな感じかなぁ。

2008年6月23日月曜日

【統計学】第2講 平均値とはやじろべえの支点である

こつこつ。

この講で学んだこと。(before/after)


  • 度数分布やヒストグラムは、ものたりないところもある。表示にスペースをとる、ということと、ビジュアルな分、それを評価したり議論したりするときに統一見解にいたらない危険性がある。
  • そこでもうひとつの縮約である、統計量がでてくる。
  • その第一が、平均値。
  • 平均値はいろいろある。
  • ここでやるのは算術平均。
  • 算術平均は、全部がその値だとしても合計すると同じになるような平均。
  • ヒストグラムが物質だとすると、それがヤジロベエとして釣り合う支点の位置が平均値となる。
  • 階級値 * 相対度数の和は算術平均となる。


これ、知ってたことも多い。なので、before/afterの原則からちょっとはずれているかも。
でも、まだわかるってのはいいことってことで。

【集合】第3講 集合に関する基本概念

こつこつ。


  • お、問がある。私の解答は、

    {(空集合), {1}, {2}, {3}, {4}, {1,2}, {1,3}, {1,4}, {2,3}, {2,4}, {3,4}, {1,2,3}, {1,2,4}, {1,3,4}, {2,3,4}, {1,2,3,4}}

  • 「β(M)も1つの集合だから、β(M)から、また新しい集合β(β(M))が生まれてくるだろう。またMとして自然数の集合Nをとったとき、β(N)はどんなものだろうか。このようにして、集合論が少しずつ動き出してくるのである。」

【パタヘネ】2章 命令:コンピュータの言葉 (その11)

こつこつ。


  • 2.16 実例:IA-32の命令

    • IA-32のお話。
    • なんとなく雰囲気をつかむ程度。
    • 今使っている機体もintel。
    • これが現実なので、何時かはちゃんとやらないといけないかも。

  • 2.17 誤信と落とし穴

    • 特になし。

  • 2.18 おわりに

    • この本がMIPSの本だということはわかっていたけれども、思っていた以上にMIPSの本であることがわかった。


2.19はCDなので後々。
2.20は二周目のお楽しみに。

今後の進め方について、ちょっと考えてみた。
現時点では、この2章が自分にとって大事に思えるし、2章の着実な理解がこれ以降の章の理解に必要に思う。
けれども、まだ2章までしかやってないから、それが真かはわからない。
そこで、場合によって理解の深さはほどほどにすることにして、スピードを上げて早めに全体を一度通読することとする。
スピードを上げるので一日あたり複数節としたい。そこで、「きっとこういうことがイイタイコトまたはポイントなんだろうな」というのをおさえていくことにする。

目標としては、本に記載されている演習問題を全部一度はやることとする。それが一区切り。

2008年6月22日日曜日

【統計学】第1講 度数分布表とヒストグラムで、データの特徴を浮き彫りにする

こつこつ。

頭の残ったこと。


  • 生データではみえないことがある。
  • 統計では、縮約によって生データから有用な情報をつくる。
  • 縮約は一定の手順によってなされるものである。
  • 縮約には2つの手法がある。

    • グラフにして特徴を読み取る。
    • 代表する値にて特徴を表わす。これを統計量という。

  • 度数分布表は、とりうる値を5〜8の階級にわけて、階級に含まれる数を求めたものである。
  • これを棒グラフにしたものをヒストグラムという。
  • 一般的な傾向として、分布は階級均等ではなく、度数が集中する階級があるものだ。
  • その階級を中心として、ヒストグラムは左右対象になる傾向がある。


てな感じでした。
問題やるのに結構時間かかった。。。

【集合】第2講 自然数の集合

こつこつ。
この本は各講のあたにテーマとしてトピックが並んでいる。なのでここでトピックをまとめていくことはしない。
それよりも心に残った言葉や含蓄のある言葉を選んで引用していきたい。

  • 「この集合Nの存在を認めるのは、前講で述べたような、全体を1つのまとまったものとみることができる、私たちの認識の力によっている。」
  • 「実は集合論の主要なテーマは、有限集合ではなくて、無限集合を調べることにあるが、有限性と無限性とは、このようにその一部分が1対1の対応が存在するかどうかという観点からみても、全く異なった様相を呈しているのである。」


今日はここまで。

【パタヘネ】2章 命令:コンピュータの言葉 (その10)

コツコツ。
2.14はCDなので、後々。

  • 2.15 配列とポインタの対比

    • Cのプログラムで同じロジックを配列で書いた場合とポインタで書いた場合について、直接MIPSアセンブリに書き換えたものの比較はわかった。
    • 節末にもあるように、現在のコンパイラは、フロントエンド->オプティマイザ->コードジェネレータ、なので、このような直接翻訳による性能差はでないように思う。



次はIA-32。2章の終りが見えてきた。

2008年6月21日土曜日

【統計学】第0講「統計学」を効率よく、1ステップずつ理解するために

この本を読む際には、読む前と読んだ後に自分が何を習得したか、というのを書こうと思う。

読んでみて、パタと本を閉じてみて、まずよくまとまっている本だなぁ、と思った。

頭に残っているのは、


  • 第一部は、検定と区間推定というものを目指すらしい。これが統計学でとても重要らしい。
  • 第二部は、t分布というものをやるらしい。
  • 標準偏差を大事にあつかうらしい。
  • 統計には、記述統計と推測統計がある。
  • 確率はほとんど捨てる方針。
  • 数学は中学数学までしか使わない。


ということ。

【統計学】完全独習 統計学入門

統計学を勉強したことがないんです。
何故か、恐れています。
小島さんの本は、数学を最小限にしつつ統計学のポイントをおさえているらしい、という評判を聞きました。

おそるおそる、やってみようと思います。
これも一日一講。

【集合】第1講 身近なところにある集合

一日一講。


  • 「実際、明確な概念は、その概念をみたす個々のものを規定しているだけでなくて、その概念によって与えられるもの全体の範囲も同時に規定している」
  • 「これから少しずつ述べ、明かにしていきたい集合論の考えは、この、全体を1つのまとまったものとして考える、私たちの認識の仕方を基盤としてでき上っている」


Tea Timeも含蓄があるなぁ。

すぐに読みおわったけど、一日一講。無理はしない。

【集合】集合への30講

計算機の基礎には、やはり集合論があると思う。そこで、集合論を勉強してみる。

志賀さんの「集合への30講」を教材にする。

まえがきにある、

「私が本書で示したかったことは、カントルを捉えて話さなかった、どうにも動かしようのない、集合論の中にひそむ永遠の素朴性と'無限'の秘密とでもいうべきものを、できる限り明かにしてみたいということであった。」

ということを感じてみたいなぁ。

【パタヘネ】2章 命令:コンピュータの言葉 (その9)

地道。
2.12はCDなんで、二周目か三周目にやることにする。


  • 2.13 Cプログラムの包括的な例題解説

    • だんだんお話し色が強くなってきた。
    • swapとsortをMIPSアセンブリで記述。



とにかく日々こつこつ。

【パタヘネ】2章 命令:コンピュータの言葉 (その8)

こつこつ。。。


  • 2.11 コンパイラによる最適化

    • GCCもフロントエンド・オプティマイザ・コードジェネレータという三部構成。
    • GCCの中間形式は、GENERIC-> GIMPLE -> RTL。
    • 「高水準言語では、マクロやテンプレートなどコードを再利用するための技法が多用されるので、使用されないコード部分が驚くほど頻繁に発生する」



地道な日々だなぁ。。。

2008年6月17日火曜日

【パタヘネ】2章 命令:コンピュータの言葉 (その7)

こつこつ。


  • 2.10 プログラムの翻訳と起動

    • Cプログラムをコンピュータ上で実行可能なプログラムに変換する一般的手順。

      • C言語ファイル -(コンパイラ)-> アセンブリ言語ファイル
      • アセンブリ言語ファイル -(アセンブラ)-> オブジェクトファイル(機械語モジュールファイル)
      • オブジェクトファイル(前項のものと、ライブラリルーチン) -(リンカ)-> 実行ファイル(機械語プログラム)
      • 実行ファイル -(ローダ)-> メモリ

    • UNIXにおけるオブジェクト・ファイルの構造

      • オブジェクト・ファイル・ヘッダー
      • テキスト・セグメント
      • 静的データ・セグメント
      • リロケーション情報
      • シンボル表
      • デバッグ情報

    • だんだんお話的な要素がおおくなってきたので、メモはしない。



リンカとローダについては、まだ曖昧な理解。
もう一回読んだときにもっとすっきりわかるだろう、ということで。

【パタヘネ】2章 命令:コンピュータの言葉 (その6)

コツコツ。


  • 2.9 32ビットの即値およびアドレスに対するMIPSのアドレシング方式

    • そろそろ難しくなってくるような。。。
    • 32ビット定数や32ビットアドレスを扱うのは、すべての命令を32ビットで扱うという原則をやぶるが、あると便利。
    • まず、その一般的な対処方法。

      • lui: load upper immediate : 指定したレジスタに、定数の上位16ビットを入れる。
      • これに続き通常の命令を実施することによって、下位16ビットが設定されるとともに、処理が実施される。
      • この分割ロード処理は、コンパイラまたはアセンブラが実施する。
      • MIPSではアセンブラが実施する。

    • beq,bneの分岐先アドレス領域は2^16しかない。これは小さい。
    • 分岐先PC値 = とあるレジスタに格納したベース値 + beqなどの分岐先アドレス領域での指定値、とする。
    • ベース値は、分岐する命令のPC値+4 (次の命令) とする。
    • 命令は全てワード(4バイト)なので、分岐命令では語アドレス指定とする。これで4倍遠くまで分岐できる。
    • このやり方を、PC相対アドレシング、という。
    • なお分岐先アドレスが現在PC値から2^16以上遠い場合は、アセンブラがJ命令を使ったものに展開してくれる。
    • アドレシングモード一覧

      • レジスタ・アドレシング
      • ベース相対アドレシング
      • 即値アドレシング
      • PC相対アドレシング
      • 疑似直接アドレシング




とりあえず、終了。。。
あとはまた今度。

2008年6月15日日曜日

【パタヘネ】2章 命令:コンピュータの言葉 (その5)

再度、こつこつ。


  • 2.8 人との情報交換

    • コンピュータをテキスト処理にも使用する。
    • 文字を1バイトで表すことが多い。
    • そのルールの代表的なものがASCII。
    • 語の命令を組み合わせれば、文字(バイト)を取り扱える。
    • でも、バイトを直接扱う命令があると便利。

      • lb $t0, 0($sp) : load byte
      • sb $t0, 0($gp) : store byte

    • 「ユニコードでは通常、16ビットで1文字を表す。」
    • 半語を扱う命令があると便利。

      • lh $t0, 0($sp)
      • sh $t0, 0($gp)




久しぶりなので、頭がぼうっとしてる。。。
毎日やることはやはり大事だなぁ。
こつこつ。

2008年6月10日火曜日

【雑】ホームページ作成用Emacs設定

参考サイト


これらを参考にして、Web標準なサイトの編集支援ができるようになった。

2008年6月9日月曜日

【パタヘネ】2章 命令:コンピュータの言葉 (その4)

こつこつ。


  • 2.7 コンピュータ・ハードウエア内での手続きのサポート

    • 「手続きを実行する際には、プログラムは下記の6つの手順を踏まなければならない。

      1. 手続きからアクセスできる場所にパラメータを置く。
      2. 手続きに制御を移す。
      3. 手続きに必要なメモリ資源を入手する。
      4. 必要なタスクを実行する。
      5. 呼び出し元のプログラムからアクセスできる場所に結果を置く。
      6. 制御を元の位置に戻す。手続きはプログラム内のいろいろな場所から呼出される可能性があるからである。」

    • 手続き関係のレジスタ

      • $a0-$a3: 引数レジスタ。1に利用。
      • $v0-$v1: 値レジスタ。5に利用。
      • $ra: 戻りレジスタ。6に利用。

    • PC: プログラム・カウンタ(program counter)。現在実行中の命令のアドレスを保持。
    • jal: jump-and-link。2の際に、$raにPC+4をセットしておく。

    • 引数や戻りの値がレジスタ数より多い場合はどうする?
    • スタックにスピル・アウトする。
    • スタックは歴史的ないきさつによって、アドレスの高い方から低い方にのびる。
    • スタックの入口というか、push先は、$sp(スタック・ポインタ)というレジスタに保持する。
    • 復元(または維持)責任:

      • $t0-$t9: caller
      • $s0-$s9: callee

    • leaf手続き:他の手続きを呼出さない手続き。
    • leafでない手続きを使用するときは、必要なレジスタ退避を復元責任にしたがって実施する。
    • $gp: グローバル・ポインタ。Cのstatic変数のアドレスを保持するレジスタ。

    • 手続フレーム(アクティベーション・レコード):手続き内の変数で、レジスタに割り当てられないものを格納したスタック領域。
    • $fp: フレーム・ポインタ。フレームの先頭アドレスを格納。
    • プログラムおよびデータのメモリへの割当ては、規約である。

      • テキスト・セグメント: 機械語コードを配置。(pcが管理に関係)
      • 静的データ・セグメント: 定数や静的変数を配置。($gpが管理に関係)
      • 動的データ・セグメント:

        • ヒープ: リンクト・リストのような動的なデータを配置。(Cではmalloc()とfree()が関係)
        • スタック: ($fpと$spとが管理に関係)





そこそこ複雑な内容だと思うのだが、本書の構成と記述がよいのですんなり理解できる。
とりあえず、ここまで。

2008年6月8日日曜日

【パタヘネ】2章 命令:コンピュータの言葉 (その3)

こつこつ。


  • 2.5 論理演算

    • 論理演算:語の中身をいじる。

      • 左シフト: sll: nシフトするのは2^nをかけるのといっしょ。
      • 右シフト: srl
      • ビット単位のAND: and, andi
      • ビット単位のOR: or, ori
      • ビット単位のNOT: nor

    • shamtはshift amountのこと。

    • 2.6 条件判定用の命令

      • 条件判定能力:「入力データと計算によって得られた値とに基づいて、別の命令を実行させること」
      • コンピュータ言語においては、if文と、goto文&ラベル。
      • ラベルの定義は、文頭で、"〜:"とする。〜は文字列。
      • 「アセンブラはこのようにラベルを使用することにより、コンパイラやアセンブリ言語プログラマが、分岐先アドレスの計算にわずらわされずに済むようにしている」

        • beq: branch if equal
        • bne: branch if not equal
        • j: jump

          • jはJ形式というあたらしい形。
          • (6 26)


      • 基本ブロック: 分岐が末尾にのみある命令の塊(列)のことを基本ブロックという。コンパイルする上で重要。末尾再帰とかもこれに絡むのかな?
      • 「コンパイルの最初の段階の作業の1つはプログラムを基本ブロックに分解することである。」
      • 大小の比較をする命令もある。

        • slt: set on less than
        • slti: set on less than immediate

      • $zeroは常に0であり、レジスタ番号の割り当ても0である。

      • case文/switch文のような処理を記述する方法は2つある。
      • ひとつはif-then-else文をつなげていく方法。
      • もうひとつはジャンプ・アドレス表を使用する方法。
      • ジャンプ・アドレス表は、ラベルに対応するアドレスを表す語の配列。
      • これを使うために、ジャンプ・レジスタ命令がある。(jr)
      • jはラベルが対象だったが、jrはレジスタ(に格納されているアドレス)が対象。
      • 遅延分岐?




一旦ここまで。

2008年6月7日土曜日

【パタヘネ】2章 命令:コンピュータの言葉 (その2)

2章全体にざっと目をとおした。
MIPSアーキテクチャについて、自分なりにまとめながら、理解を深めることにする。

blogger上にtableタグで整理しようと思ったが、tableは使えないみたい。うむー。


  • 2.1 はじめに

    • 「コンピュータのハードウエアに命令を伝えるには、コンピュータの言葉で話さなければならない。」
    • 命令(instruction):コンピュータの言葉
    • 命令セット(instruction set):コンピュータの語彙

      • 「命令セットには人が書くときの形とコンピュータが読むときの形がある...」



  • 2.2 コンピュータ・ハードウエアの演算

    • 算術演算ができないものは、コンピュータとは呼ばない。
    • 各演算命令によって、ハードウエアは1つの演算のみ行なう。
    • 演算命令において、必ず変数を3つ付記せねばならない。
    • その変数のことをオペランドという。


  • 2.3 コンピュータ・ハードウエアのオペランド

    • レジスタ:ハードウエアに直接組込まれている特殊な記憶領域。
    • 算術命令のオペランドは、レジスタでなければならない。
    • 語(word) = レジスタ長:レジスタのサイズ。32ビット。
    • レジスタ数:一般的に有限であり、32本。
    • 「レジスタを表わすのに$記号の後ろに2文字をつけた名前を使用する。」
    • コンパイラがプログラムの変数に対して割り当てるレジスタを$s0,$s1,...と呼ぶことにする。
    • プログラムの変数としては存在していないが、コンパイルするために必要となるため、コンパイラが一時的に使用するレジスタを$t0,$t1,...と呼ぶことにする。

    • 配列や構造体のようなデータ構造は、大きいので、レジスタに入らない。メモリ中に保持する。
    • データ転送命令(data transfer instruction):メモリとレジスタの間でデータをやりとりする命令。
    • メモリ:巨大な一次元の配列。語が複数格納されており、メモリアドレスでそれらを指定できる。
    • バイト:しかし、多くのアプリケーションで8ビット(1バイト)という単位が有効であるため、メモリアドレスはバイト単位である。
    • 整列化要件:なので、語にアクセスするためのアドレスは4の倍数となる。それ以外を指定してはいけない。
    • コンパイラは、配列を扱うとき、その配列の開始メモリアドレスを決める。それをベースアドレスという。
    • 配列を含む命令は配列の要素をベースアドレスとオフセットの組で表現する。
    • ベースアドレスを指定すると配列が定まるのだから、ベースアドレスは配列の名前そのものといえる。配列のベースアドレスは$s0等で扱う。

    • スピル・アウト:レジスタの値をメモリに退避すること。
    • 定数をいちいちメモリとレジスタでやりとりするのはうまくない。
    • 定数を含んだ算術演算をひとつつくってしまう。これを即値加算と呼ぶ。


  • 2.4 コンピュータ内での命令の表現

    • 「コンピュータ内では、数値は高と低の電気信号系列の形で保持される。」
    • それを人がもっとも直接的に扱うには、2進数の数値と解釈する。
    • コンピュータで扱う情報は、すべて、バイナリ・デジット(ビット)で構成される。
    • レジスタに名前をつける、とはレジスタに数値を割り当てることである。

      • $s0-$s7 -> 16-23
      • $t0-$t7 -> 8-15

    • 今まで、記号で命令を表わしてきた。これをアセンブリ言語という。数値で命令を表わした場合はそれを機械語という。
    • 「1命令は1語からなる。」
    • 命令は32bitの2進数なのだが、これの中身を区切ることによって、構文とする。
    • 区切られた部分をフィールドと呼ぶ。
    • 区切り方は複数種類ある。

      • R形式 (6 5 5 5 5 6) (op rs rt rd shamt funct)
      • I形式 (6 5 5 16) (op rs rt (constant or address))


      • op:命令操作コード(オペコード)
      • rs:第一のソース・オペランドのレジスタ
      • rt:第二のソース・オペランドのレジスタ
      • rd:デスティネーション・オペランドのレジスタ
      • shamt:シフト量
      • funct:機能コード(function code)

    • I形式は、即値およびデータ転送命令用である。
    • ちょっと整合性チェック。

      • レジスタは32bitなので、レジスタに入る数値の幅は、
        0〜4294967296(2^32)。
      • メモリのアドレスをレジスタ1つで指定できるようにするには、メモリのアドレスはこれと同じ値域が最大となる。
      • メモリはバイトでアドレスされており、データ転送命令は語毎の指定だから、語アドレスの数は、
        1073741824(2^30) 個
        となる。
      • レジスタは32個あるので、これに数値の名前をつけるには、32=2^5bitが必要。r系フィールドのサイズとあっている。
      • I形式のaddressフィールドは16bitである。これは幅でいうと0〜65536のバイトアドレスであり、語にすると16384個に相当する。
      • intの配列も語による取り扱いなのか? (すると3byte無駄?)が不明。
      • 即値のconstantも同様であり、2の補数として、+-32768に対応可能である。




とりあえず、ここまで。

2008年6月6日金曜日

【パタヘネ】2章 命令:コンピュータの言葉

パタヘネも、こつこつせねば。


  • 2.1 はじめに

    • stored program concept? なんだろ?

  • 2.2 コンピュータ・ハードウエアの演算
  • 2.3 コンピュータ・ハードウエアのオペランド

    • CからMIPS命令への翻訳、おもしろい。。。

  • 2.4 コンピュータ内での命令の表現

プログラム内蔵方式(stored program)は、命令を数値として扱うということなのか。命令もデータ。Lispみたいだ。(プログラム内蔵方式)

今日はここまで。おもしろかった。

2008年6月5日木曜日

【道具箱】第7章 CUnit (その2)

うむー。osxだからcunitがこけるのか、と思ったが、ubuntuでも同じようにこける。
しかし、違うサンプルを作ってやったら、

./a.out: error while loading shared libraries: libcunit.so.1: cannot open shared object file: No such file or directory

だけになった。なんで、

sudo ln -s /usr/local/lib/libcunit.so /usr/lib/libcunit.so
sudo ln -s /usr/local/lib/libcunit.so.1 /usr/lib/libcunit.so.1

したら、動いた!
ということはサンプルが悪いのかなと、ubuntuで動いたサンプルをOSXにもっていくと、、、動いた。。。

「道具箱」のチュートリアルはちょっと複雑すぎるような気がするし、現状動いていないので別の資料で代替。ほんとはよくないんだけど。

CUnitのチュートリアル

ざっと読んで、とりあえずヨシとする。
C++は知らんので、第8章はとばす。次はGDB。

【道具箱】第7章 CUnit

こつこつ。


  • CUnitが入っていないのでインストール。バージョンは2.1.0。これまた大分進んでいるのが不安。
  • makeしたら、CUnitのヘッダがエラーを出す。

    In file included from /usr/local/include/CUnit/CUnit.h:102,
    from /usr/local/include/CUnit/TestDB.h:59,
    from nldetecttest.c:5:
    /usr/local/include/CUnit/TestRun.h:75: error: syntax error before ‘CU_pTest’
    /usr/local/include/CUnit/TestRun.h:75: warning: no semicolon at end of struct or union
    /usr/local/include/CUnit/TestRun.h:76: warning: data definition has no type or storage class
    /usr/local/include/CUnit/TestRun.h:81: error: syntax error before ‘}’ token
    /usr/local/include/CUnit/TestRun.h:81: warning: data definition has no type or storage class
    /usr/local/include/CUnit/TestRun.h:82: error: syntax error before ‘*’ token
    /usr/local/include/CUnit/TestRun.h:82: warning: data definition has no type or storage class
    /usr/local/include/CUnit/TestRun.h:105: error: syntax error before ‘pTest’
    /usr/local/include/CUnit/TestRun.h:114: error: syntax error before ‘pTest’
    /usr/local/include/CUnit/TestRun.h:122: error: syntax error before ‘pFailure’
    /usr/local/include/CUnit/TestRun.h:128: error: syntax error before ‘pSuite’
    /usr/local/include/CUnit/TestRun.h:134: error: syntax error before ‘pSuite’
    /usr/local/include/CUnit/TestRun.h:151: error: syntax error before ‘pSuite’
    /usr/local/include/CUnit/TestRun.h:152: error: syntax error before ‘pSuite’
    /usr/local/include/CUnit/TestRun.h:163: error: syntax error before ‘CU_get_failure_list’
    /usr/local/include/CUnit/TestRun.h:163: warning: data definition has no type or storage class
    /usr/local/include/CUnit/TestRun.h:167: error: syntax error before ‘CU_get_current_suite’
    /usr/local/include/CUnit/TestRun.h:167: warning: data definition has no type or storage class
    /usr/local/include/CUnit/TestRun.h:168: error: syntax error before ‘CU_get_current_test’
    /usr/local/include/CUnit/TestRun.h:168: warning: data definition has no type or storage class

    ということで、一旦玉砕。

2008年6月4日水曜日

【道具箱】第6章 CVS

引き続き、subversionな人なのだが、知識として。


  • ブランチやタグが、svnよりはやはり複雑。
  • う、PCL-CVSっていい感じ。


こつこつ。次はテスト。
CのUnit testというのは初めてなので、楽しみです。

2008年6月1日日曜日

【道具箱】第5章 RCS

subversionを使っているので、なんなんですが、まあ何でも知っておいて損はない、という観点で。


  • ident便利。subversionでも似たようなことできるのかな???
  • VCも便利。svnで使えるらしい。svkもいけるかな???


今日はここまで。