GCC 4.2.0が登場 ― 開発者には恩恵あれどディストリビューション関係者の反応は今ひとつ
GCCはCコンパイラとして誕生したが、今ではCに加えてC++、Objective-C、Objective-C++、Java、Fortran、Adaのコンパイル機能も備えている。GCCはLinuxカーネルのコンパイル用として最もよく知られており、60を超えるプラットフォームに移植されている。
UbuntuハッカーのBaishampayan Ghose氏は「GCC 4.2.0の追加機能で一番重要なのが本来のGCCにGOMPブランチが併合されたことだ」と言う。GCCのGOMPブランチは、C、C++、Fortranの各コンパイラを対象としてOpenMPをGCCに盛り込むためにかなり前に生み出されたものだ。OpenMPを使えば、並列実行可能なコードの作成が容易になる。
実装面について言うと、OpenMPはプラットフォームやアーキテクチャに依存しないアプリケーションインタフェースになっている。そのため、開発者は、マスタスレッドから複数の「スレイブ」スレッドを生成し、1つのコードブロックを並列に実行したうえでマスタスレッドに戻って結果をまとめる、といった並列化されたコードを書くことができる。OpenMPの追加はGNU Compiler Collectionの重要な進歩であり、これによってフリーソフトウェアのオペレーティングシステムでは並列プログラミングが簡素化されるだろう、とGhose氏は説明する。
Javaの関係者にも良い知らせがある。「libgcjへの静的リンクによるスタンドアロンのJava実行ファイルの作成が、gcj用の-static-libgcj
オプションの導入によってかなり容易になる」とGhose氏は語る。こうすることで、開発者は実行時にlibgcjを必要とせずによくなり、多大な空間を節約できる。「しかし、静的リンクは独特の問題を引き起こす可能性がある。ときとして必要なクラスが自動的にロードされないことがあるからだ。だが、それにもかかわらずこの機能は有用だ」(Ghose氏)
GCC 4.2.0には、いくつかの興味深いオプションも導入されている。-Wextra
オプションは、コード本文中にセミコロンだけのステートメントが存在する場合に警告を発する。これはタイポによるエラーの検出に役立つ、とGhose氏は説明する。また、-fstrict-overflow
という最適化オプションもあり、これは終値指定のないループを無限ループに変換することでオーバーフローを防いでくれる。例えば、「for (i=0; i>0; i*=2)
」というforループは整数の変数が取り得る最大値に達すると終了する無限ループに変換されるため、マシンのオーバーフローや実行停止が生じることはない。
Mozillaの技術者David Baron氏にとって、こうしたC++の可視性処理の見直しは朗報だ。彼は、今回の可視性処理の変更によって「MozillaがLinux上で若干高速になる」ことを期待している。
ディストリビューション開発者のさまざまな反応
我々は、今回の新リリースについてディストリビューション開発者の数名に意見を伺った。Gentooのツールチェイン・メンテナで委員会のメンバーでもあるMike Frysinger氏は、OpenMPの追加は主として個人開発者のためになるものであってGentooにはあまり関係がない、と話す。「その他のディストリビューションにとっても、特別な出来事にはならないだろう。GCCの新たなメジャーリリースは、厳密性の変更やフラグの変更、その他のランダムな要素によってもはやコンパイルできないパッケージが出てくることを意味する。だが、リリースの数日後には、gcc-4.2.0パッケージのGentooツリーへの追加が確実に完了しているだろう」(Frysinger氏)
一方、派生ディストリビューションには別の関心事がある。FreeBSDをベースとしたPC-BSDの創立者で主任開発者のKris Moore氏は、GCC 4.2.0への移行を決める権限はFreeBSD側にある、と語る。「FreeBSD関係者がその移植版やソースにGCC 4.2.0を追加するなら、我々も喜んでそれを使う」。Moore氏は、OpenMPサポートを実現するためにGCC 4.2.0をすぐに利用しようとは考えていない。PC-BSDのカスタムツールはそれほど多くのCPUパワーを必要としないからだ。「しかし、先ほども述べた通り、FreeBSDがGCC 4.2.0の利用を始めれば我々もそうするつもりだ。KDEのような重要パッケージがGCC 4.2.0をサポートするために構築されることになれば、なおさらだ」
KDEのアジア広報担当者Pradeepto Bhattacharya氏は、KDEの主要な開発者たちと話し合ったうえで、KDEはGCC 4.2.0とうまく歩調を合わせるつもりだと語る。KDE開発者はこのGCC最新版のより優れた機能と警告生成機能に満足している、と彼は言う。Bhattacharya氏によると、openSUSEは内部で正式にGCC 4.2.0を使ってKDEの構築を行っており、KDE 3.5.6および3.5.7ではこの最新のGCCで上手くコンパイルできるはずだという。来るべきKDE 4.0でも問題はないだろう。「どうやら、ベテランのKDE開発者で主たるシステム管理者の1人Dirk Mueller氏が普段からGCCの開発版を使ってKDEの構築を行っており、問題が起こった場合は彼が修正の依頼を出すか自ら修正を行っているようだ」(Bhattacharya氏)
Fedoraの場合、Fedora 7のリリース期日が間近に迫っていることから、直ちにGCC 4.2.0を利用する予定はない。FedoraのJava関連パッケージのいくつかに携わっているGCJメンテナTom Tromey氏は、GCC 4.2.0はメジャーリリースだが、ディストリビューション側が特定の新しいGCCリリースを採用するか否かはタイミングやその他の要因に依存する、という点を認めている。「例えば、Fedora 7はリリースが迫っており、GCC 4.2.0への移行検討には時期的に無理がある」
しかし、通常FedoraにはGCCの重要機能やベースコンパイラに対するバグ修正のバックポートがある、ともTromey氏は述べる。「例えばFedora 7のgcjの場合、GCC 4.3で登場するはずのgcj機能がバックポートされており、事実上gcjに関する限り、GCC 4.2は既に旧式になっている」(Tromey氏)
しかし、Fedora 8でどのバージョンのGCCが使われるかという議論については、Tromey氏にも何もわからないという。
他のディストリビューションとは対照的に、Debianは今回の新たなリリースに非常に関心を持っているようだ。Debianのベテラン開発者Joey Schulze氏は「Debianに含まれるフリーソフトウェア・パッケージのほとんどは、GCCの新バージョンで問題なくコンパイルされる」と話す。また、Debianプロジェクトは昨年アーカイブ全体をコンパイルし直し、GCC 4.2.0のリリースに伴う問題の特定と解決を済ませた、とも語る。Schulze氏によると、今後Debianで配布するバイナリは、GCC 4.2.0でコンパイルされ、Lennyというコードネームを持つDebianの次期リリースではGCC 4.2.0がベースになるという。