中本です。

On Fri, 02 Jun 2006 09:12:59 +0900
AMANO <[EMAIL PROTECTED]> wrote:

> 天野です。
> 
> いままでは読み流しててんですけど、

読み流してもらってもいいです。
興味のある人向けです。

しかし、カーネルにしてもOOoにしても、これだけ巨大なプログラムがどのよ
うに構成されていて、どのように管理されているのかというのは、実際とても
興味深いことだと私は思います。

以下はOOoのコンパイルにかかる時間に関する考察をしてみました。

> >私はVisual BasicとC/C++言語で簡単なプログラムしか書けなかったのに、3
> >年半前にOpenOffice.orgのビルドしてました。そのときのマシンのスペック
> >は
> >  
> >
> >>Pentium III 650MHz, メモリ 256M, Red Hat Linux 8.0(gcc-3.2)
> >>ビルド時間 20時間
> >>    
> >>
> これって、kernelのビルドより時間かかってるじゃないですか...。
> どれだけでかいんだって思いました。ちなみに、このスペック、
> 私が使ってるマシンと同じですね。Vineが動いています。

気になったので、ほぼ最新のソース(SRC680_m170)で単純に行数を調べてみま
した。

.cxx(C++のソース) 716万行 (1万ファイル)
.hxx(C++のヘッダ) 188万行 (1万ファイル)
.java(javaソース) 70万行 (404ファイル)
.c(Cのソース)  16万行 (1003ファイル)
.h(Cのヘッダ) 17万行 (3414ファイル)
.mk(Makefile) 21万行 (2303ファイル)
.idl(インターフェース定義ファイル) 38万行 (3706ファイル)
.src(UI定義ファイル?) 86万行 (1128ファイル)
.hrc(UI定義ファイル?) 12万行 (980ファイル)

らしいです。他にもいろいろファイルがあるでしょうが、主なものは上記のも
のです。ただし、行数に関しては、多くのC++やJavaのソースファイルが先頭
に約30行のライセンス文が載っているので、
 「 (実質的な行数) = (実際の行数) - (ファイル数) × 30 」
と読みかえたほうがよいかもしれません。

実際のビルド作業では、このほかにもいろいろなものがコンパイルされます。
例えば、freetypeを一からコンパイルするのですが、そのソースは上記の数字
にカウントされていません。

カーネルに比べてコンパイルが遅い理由としては、

 1. 単純に行数が多い
    http://en.wikipedia.org/wiki/Source_lines_of_code
    によると、カーネル 2.6.0 で約600万行らしい
 2. カーネルはC言語やアセンブラで記述されているのにたいして、OOoはC++
    で記述されている。 (一般的にC++の方がコンパイルに時間がかかる)
 3. リソース(UIや画像、設定ファイル)の処理に時間がかかる。
 4. ファイル数が多く、全体のファイル容量が大きいため、コンパイル時のファ
    イルアクセスがネックになる。
 5. カーネルでは、必要の無いモジュールはコンパイルしないようにすること
    でコンパイル時間を短縮できる。しかし、OOoではコア部分のコンパイル
    に一番時間がかかっているため、不要なコードのコンパイルをしないよう
    にしてもコンパイル時間は大して短くならない。
 6. 上記にカウントされていないファイルのコンパイルなどに時間がかかる

ということが考えられます。ちなみに、これは私の意見ですが、2.がコンパイ
ルに時間のかかる一番の要因ではないかと思っています。

実際にやってみればわかることですが、結論としては「OOoのビルドには時間が
かかる」、ということです。

というわけで(?)、ぜひ実際にビルドをしてみてはどうでしょうか?Linuxなら
ば、ソースパッケージが用意されていたりして、コマンド一発でビルドしてく
れたりします。

-- 
 中本 崇志 ( Takashi Nakamoto )
 E-Mail  : [EMAIL PROTECTED], [EMAIL PROTECTED]
 Homepage: http://bd.tank.jp/
 blog    : http://bd.tank.jp/diary

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

メールによる返信