@@ -4,6 +4,7 @@ layout: default
44
55
66h1. Preface: Introduction
7+
78h2. Characteristics of Ruby
89
910Some of the readers may have already been familiar with Ruby, some may be not.
@@ -96,7 +97,7 @@ avoid gaining disagreement of calling it so. That's the definition I suggest.
9697To fulfill this definition, I would define the meaning of "script language" as
9798follows.
9899
99- p(=center).
100+
100101Whether the author of the language calls it "script language" or not.
101102
102103
@@ -252,13 +253,13 @@ This topic is probably difficult to understand it instantly without needs
252253supplemental explanation. For example, the following C-language program
253254contains a syntactic error.
254255
255- p(= emlist).
256+ <pre class=" emlist">
256257result = if (cond) { process(val); } else { 0; }
257258</pre>
258259
259260Because the C-language syntax defines @if@ as a statement. See following rewrite.
260261
261- p(= emlist).
262+ <pre class=" emlist">
262263result = cond ? process(val) : 0;
263264</pre>
264265
@@ -268,7 +269,7 @@ as an expression.
268269
269270On the other hand, Ruby acceps a following expression because @if@ is an expression.
270271
271- p(= emlist).
272+ <pre class=" emlist">
272273result = if cond then process(val) else nil end
273274</pre>
274275
@@ -324,7 +325,7 @@ In addition to the fact that's written in C, one of the important feature is tha
324325level and C level code differences are very small. Most commands available in Ruby are
325326also available in C. See following example.
326327
327- p(= emlist).
328+ <pre class=" emlist">
328329# Method call
329330obj.method(arg) # Ruby
330331rb_funcall(obj, rb_intern("method"), 1, arg); # C
@@ -487,6 +488,7 @@ h4. 書き換えて動かす
487488同じことを両方にやってみるべきである。
488489
489490h3. 静的な解析
491+
490492h4. 名前の大切さ
491493
492494静的解析とはつまりソースコードの解析だ。そしてソースコードの解析とは名
@@ -619,7 +621,7 @@ h3. 静的解析用ツール
619621@gctags@は本当はタグファイルを作るためのツールなのだが、
620622これを使ってファイルに含まれる関数名のリストを取ることもできる。
621623
622- p(= screen).
624+ <pre class=" screen">
623625~/src/ruby % gctags class.c | awk '{print $1}'
624626SPECIAL_SINGLETON
625627SPECIAL_SINGLETON
@@ -643,6 +645,7 @@ method_list
643645関数クロスリファレンス
644646
645647h2. ビルド
648+
646649h3. 対象バージョン
647650
648651本書で解説している@ruby@のバージョンは1.7の2002-09-12版である。@ruby@はマ
@@ -664,7 +667,7 @@ h3. ソースコードを入手する
664667添付CD-ROMに解説対象の版のアーカイブを収録した。
665668CD-ROMのトップディレクトリに
666669
667- p(= emlist).
670+ <pre class=" emlist">
668671ruby-rhg.tar.gz
669672ruby-rhg.zip
670673ruby-rhg.lzh
@@ -674,11 +677,12 @@ ruby-rhg.lzh
674677もちろん中身はどれも同じだ。例えば@tar.gz@のアーカイブなら
675678次のように展開すればいいだろう。
676679
677- p(= screen).
680+ <pre class=" screen">
678681~/src % mount /mnt/cdrom
679682~/src % gzip -dc /mnt/cdrom/ruby-rhg.tar.gz | tar xf -
680683~/src % umount /mnt/cdrom
681684</pre>
685+
682686h3. コンパイルする
683687
684688ソースコードを見るだけでも「読む」ことはできる。しかしプログラムを知る
@@ -698,7 +702,7 @@ h4. UNIX系OSでのビルド
698702たいがい通ってしまう。
699703@~/src/ruby@にソースコードが展開されているとする。
700704
701- p(= screen).
705+ <pre class=" screen">
702706~/src/ruby % ./configure
703707~/src/ruby % make
704708~/src/ruby % su
@@ -713,7 +717,7 @@ Cygwin、UX/4800など一部のプラットフォームでは@configure@の段
713717@--enable-shared@というのは@ruby@のほとんどを共有ライブラリ
714718(@libruby.so@)としてコマンドの外に出すオプションである。
715719
716- p(= screen).
720+ <pre class=" screen">
717721~/src/ruby % ./configure --enable-shared
718722</pre>
719723
@@ -771,22 +775,22 @@ Visual C++と言っても普通はIDEは使わず、DOSプロンプトからビ
771775しなければいけない。Visual C++にそのためのバッチファイルが付いてくるの
772776で、まずはそれを実行しよう。
773777
774- p(= screen).
778+ <pre class=" screen">
775779C:> cd "Program FilesMicrosoft Visual Studio .NETVc7bin"
776780C:Program FilesMicrosoft Visual Studio .NETVc7bin> vcvars32
777781</pre>
778782
779783これはVisual C++.NETの場合だ。バージョン6なら以下の場所にある。
780784
781- p(= emlist).
785+ <pre class=" emlist">
782786C:Program FilesMicrosoft Visual StudioVC98bin
783787</pre>
784788
785789@vcvars32@を実行したらその後は@ruby@のソースツリーの中のフォルダ
786790@win32@に移動してビルドすればいい。以下、ソースツリーは@C:src@に
787791あるとしよう。
788792
789- p(= screen).
793+ <pre class=" screen">
790794C:> cd srcruby
791795C:srcruby> cd win32
792796C:srcrubywin32> configure
@@ -817,7 +821,7 @@ CygwinとMinGWは添付CD-ROMにも収録した
817821footnote{CygwinとMinGW......添付CD-ROMの@doc/win.html@を参照}。
818822あとはCygwinの@bash@プロンプトから以下のように打てばよい。
819823
820- p(= screen).
824+ <pre class=" screen">
821825~/src/ruby % ./configure --with-gcc='gcc -mno-cygwin'
822826 --enable-shared i386-mingw32
823827~/src/ruby % make
@@ -862,7 +866,7 @@ h3. @configure@
862866ように埋め込んだ@Makefile.in@を置いておくと、それを実際の値に変換
863867した@Makefile@を生成してくれる。例えば次のように。
864868
865- p(= emlist).
869+ <pre class=" emlist">
866870Makefile.in: CFLAGS = @CFLAGS@
867871 ↓
868872Makefile : CFLAGS = -g -O2
@@ -874,8 +878,8 @@ Makefile : CFLAGS = -g -O2
874878@configure@を実行した後にこのファイルができていることを確かめてほしい。
875879中身はこんな感じだ。
876880
877- p(=caption). ▼@config.h@
878- p(= longlist).
881+ ▼@config.h@
882+ <pre class=" longlist">
879883 :
880884 :
881885#define HAVE_SYS_STAT_H 1
@@ -908,8 +912,9 @@ p(=longlist).
908912使って差を埋めるのはあくまで各プログラマの仕事である。例えば次の
909913ように。
910914
911- p(=caption). ▼@HAVE_@マクロの典型的な使いかた
912- p(=longlist).
915+
916+ ▼@HAVE_@マクロの典型的な使いかた
917+ <pre class="longlist">
913918 24 #ifdef HAVE_STDLIB_H
914919 25 # include
915920 26 #endif
@@ -931,7 +936,6 @@ h3. @autoconf@
931936
932937ここまでを絵にすると図1のようになる。
933938
934- p(=image).
935939!images/ch_abstract_build.jpg([build])!
936940図1: @Makefile@ができるまで
937941
@@ -1011,7 +1015,6 @@ CVSはエディタのundoリストのようなものと言ったが、そのた
10111015「ワーキングコピー」だ。レポジトリは一つだけだがワーキングコピーは
10121016いくつあってもいい(図2)。
10131017
1014- p(=image).
10151018!images/ch_abstract_repo.jpg([repo])!
10161019図2: レポジトリとワーキングコピー
10171020
@@ -1024,7 +1027,6 @@ p(=image).
10241027または「コミット(commit)」と言う(図3)。チェックインするとレ
10251028ポジトリに変更が記録されて、いつでもそれを取り出せるようになる。
10261029
1027- p(=image).
10281030!images/ch_abstract_ci.jpg([ci])!
10291031図3: チェックインとチェックアウト
10301032
@@ -1066,7 +1068,7 @@ footnote{@cvs@:@archives/cvs-1.11.2.tar.gz@}。
10661068インストールしたら試しに@ruby@のソースコードをチェックアウトしてみよう。
10671069インターネットに接続中に次のように打つ。
10681070
1069- p(= screen).
1071+ <pre class=" screen">
10701072% cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src login
10711073CVS Password: anonymous
10721074% cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src checkout ruby
@@ -1080,7 +1082,7 @@ CVS Password: anonymous
10801082ばいい。次のように打てば本書が解説しているバージョンのワーキングコピー
10811083が取り出せる。
10821084
1083- p(= screen).
1085+ <pre class=" screen">
10841086% cvs -d :pserver:anonymous@cvs.ruby-lang.org:/src checkout -D2002-09-12 ruby
10851087</pre>
10861088
@@ -1112,7 +1114,7 @@ h3. 物理構造
11121114トップディレクトリの様子だ。
11131115スラッシュで終わっているのはサブディレクトリである。
11141116
1115- p(= emlist).
1117+ <pre class=" emlist">
11161118COPYING compar.c gc.c numeric.c sample/
11171119COPYING.ja config.guess hash.c object.c signal.c
11181120CVS/ config.sub inits.c pack.c sprintf.c
@@ -1263,7 +1265,7 @@ h4. プラットフォーム依存ファイル
12631265各プラットフォーム特有のコードが入っている。
12641266
12651267h4. フォールバック関数
1266- p(= emlist).
1268+ <pre class=" emlist">
12671269missing/
12681270</pre>
12691271
@@ -1308,7 +1310,6 @@ h4. パーサ
13081310ツリー構造で表現したもので、例えば@if@文ならば図4のように
13091311表現される。
13101312
1311- p(=image).
13121313!images/ch_abstract_syntree.jpg([syntree])!
13131314図4: @if@文と、それに対応する構文木
13141315
0 commit comments