6    開発環境

この章では,Tru64 UNIX の開発環境で提供する主な機能について説明します。 次のトピックについて説明します。

また,Tru64 UNIX は,国際化機能,標準の UNIX 開発ツール (awklintmakeprof など),Ada,C++,Cobol,Fortran,Pascal プログラムのための実行時ライブラリを提供します。

詳細については,『プログラミング・ガイド』,『プログラミング・サポートツール・ガイド』,『Assembly Language Programmer's Guide』,および『国際化ソフトウェア・プログラミング・ガイド』を参照してください。

6.1    Compaq C コンパイラ

Tru64 UNIX で提供する Compaq C コンパイラは,Alpha アーキテクチャの 64 ビット・アドレス空間を十分に活用した効果的なコードを生成するための,標準に準拠した,高度に最適化された C コンパイラです。 Compaq C コンパイラは,次の C言語をコンパイルできます。

Compaq C コンパイラは,次の標準に準拠してコンパイルを行います。

標準への準拠についての詳細は, standards(5)リファレンス・ページを参照してください。

Compaq C コンパイラは,以下の言語拡張をサポートします。

Compaq C コンパイラは,次のような算術演算に関する拡張機能をサポートします。

Tru64 UNIX で提供する Compaq C コンパイラについての詳細は, cc(1) リファレンス・ページを参照してください。

6.2    デバッガ

Tru64 UNIX は,次のソース・コード・デバッガをサポートします。

6.2.1    dbx デバッガ

dbx デバッガは,ソース・コード・レベルあるいはマシン・コード・レベルでのプログラムのデバッグに利用できます。 dbx がサポートするインタフェースは,コマンド行インタフェースです。 dbx を使用して実行できるタスクは次のとおりです。

6.2.2    ladebug デバッガ

ladebug デバッガは,GUI と dbx と同じようなコマンド行インタフェースの両方をサポートするオブジェクト指向のソース・レベル・シンボリック・デバッガです。 ladebug を使用して実行できるタスクは次のとおりです。

国際化サポートは別のキットで提供されます。 国際化バージヨンの ladebug デバッガは,入力としてマルチバイト文字を受け入れ,デバッガのグローバル・ロケール設定に従ってローカル言語文字を出力します。 ladebug デバッガは,C/C++ の wchar_t データ型もサポートします。

6.3    プロファイリング・ツール

Tru64 UNIX は,次のプロファイリング・ツールをサポートします。

Tru64 UNIX は,次のプロファイリング・ツールをサポートします。

プロファイリング・ツールについての詳細は,『プログラミング・ガイド』およびそれぞれのリファレンス・ページを参照してください。

6.4    シェアード・ライブラリ

Tru64 UNIX は,動的なロードのための System V API (dlopendlclosedlsymdlerror) に加えて,シェアード・ライブラリのロードとシンボル解決のための System V セマンティクスと互換性のある,動的なシェアード・ライブラリを提供しています。

シェアード・ライブラリを使用すると,ルーチンそのものをプログラムに含めるのではなく,ルーチンのロード方法およびアクセス方法に関する情報のみをプログラムに含めることが可能になるため,システムの性能を向上させ,ディスクおよびメモリの使用量を低減させ,システム管理を単純化することができます。

シェアード・ライブラリは /usr/shlib ディレクトリにあります。

Tru64 UNIX の X11R6.3 および Motif の実装では,スタティック・ルーチンおよびシェアード・ルーチンの両方をサポートしています。 X11 シェアード・ライブラリは,/usr/shlib/X11 ディレクトリにあります。

6.4.1    クイックスタート

アドレスが競合する場合,ユニークなアドレスによって,より早くシェアード・ライブラリを開始できるように クイックスタート機能をサポートしています。 各シェアード・ライブラリは,/usr/shlib/so_locations ファイルにユニークなアドレスを持っている必要があります。 これにより,実行時にシェアード・オブジェクトを再配置する必要がないため,シェアード・ライブラリとリンクしているアプリケーションをより早く実行できます。 シエアード・ライブラリを作成すると ld ユーティリティが so_locations ファイルを読み書きします。

6.4.2    ダイナミック・ローダ

Tru64 UNIX は,System V Release 4.0 互換のローダを使用して シェアード・ライブラリを動的にロードします。 このローダは次の拡張機能を提供します。

6.4.3    バージョニング

Tru64 UNIX は,シエアード・ライブラリの完全なあるいは 部分的な重複をサポートしています。 ローダは,通常の探索パスにバージョン文字列を追加したパス名を使用して,通常の探索パスのサブディレクトリで古いバージョンのシェアード・ライブラリを探します。 このように,複数バージョンのシェアード・ライブラリを保持し,適切なバージョンのシェアード・ライブラリをアプリケーションにリンクできるので,カーネル・インタフェースあるいはグローバル・データ定義に対する変更のように,通常はバイナリ互換性が無くなるような変更が行われた場合も,アプリケーションには影響を与えません。

たとえば,OSF は Motif 1.2 でいくつかのインタフェースを変更したため,Motif 1.1.3 ライブラリを使用して構築したアプリケーションとの互換性が無くなっています。 このため Tru64 UNIX では,バイナリ互換性を維持するために,バージョニング機能を使用して Motif 1.1.3 と Motif 1.2 の両方のシェアード・ライブラリを提供し,アプリケーションが必要に応じて Motif 1.1.3 のシェアード・ライブラリにもアクセスできるようにしています。 シェアード・ライブラリのバージョニングについての詳細は,『プログラミング・ガイド』を参照してください。

6.5    実行時ライブラリ

Tru64 UNIX は次の実行時ライブラリ (RTL) をサポートします。 これらのライブラリにより,対応する言語のプログラムをシステムにインストールしておかなくても,以前にコンパイルしたプログラムを実行することができます。

6.6    Java 開発キット

JavaTM 開発キット (JDK) が,Tru64 UNIX のコンポーネントとして組み込まれています。 このキットを使用して,Java アプレットやプログラムを開発および実行することができます。

JDK for Tru64 UNIX には JIT (just-in-time コンパイラ) が付属しており,アプリケーションの Java バイトコードおよび実行時呼び出しをネイティブの Alpha マシン・コードに,オンザフライでコンパイルします。 この結果,Java インタプリタを使用して実行する場合と比較して,Java アプリケーションの実行が大幅に高速化されます。 省略時の設定では,java コマンドを入力すると,JIT が実行されます。

JDK は,Java スレッドをネイティブ (POSIX) スレッドの最上位に実装します。 これにより,マルチプロセッサ・マシンを使用している場合は,アプリケーションの中の異なる Java スレッドを,別々のプロセッサで実行することができます。 また,これは,POSIX スレッドを使用して実装されたネイティブ・メソッドまたはネイティブ API (たとえば DCE) にリンクされたときに,Java アプリケーションが正しく実行されることを意味します。

詳細については,JDK がインストールされている Tru64 UNIX システムの /usr/share/doclib/java/index.html を参照してください。

6.7    開発コマンド

Tru64 UNIX は,ソース・コード制御システム rcsおよび sccsとともに,ar, as, btou, cb, cc, cflow, cpp, ctags, cxref, c89, dbx, dis, error, file, indent, ld, lex, lint, loader, m4, make, mig, mkstr, nm, odump, pixie, ppu, prof, ranlib, size, stdump, strings, strip, tsort, xstr,および yacc などの開発ツールをサポートします。

開発コマンドの多くは System V,POSIX,XPG4 および XPG4-UNIX 標準によって指定されており,Tru64 UNIX はこれらに完全に準拠しています。

6.8    スレッドのサポート

Tru64 UNIX は,以前は DECthread と呼ばれた POSIX スレッド・ライブラリ,Visual Thread,Thread-Independent Service を提供します。

6.8.1    POSIX スレッド・ライブラリ

POSIX スレッド・ライブラリは,POSIX 1003.1c-1995 標準マルチスレッド API を実装したものです。 POSIX スレッドは,効率的な 2 レベルのスケジューリング (POSIX プロセス・コンテンション・スコープで,カーネルに密接に統合されており,計算と I/O の同時性のレベルが常に最大になるよう自動的に維持されます。 他のプロセスまたはカーネルにあるハードウェア・イベントまたはスレッドに応じて,リアルタイムにスケジュールする必要があるアプリケーションの場合は,POSIX スレッドがシステムコンテンション・スコープとスケジューリング機能を提供します。

6.8.2    Visual Threads

Visual Threads は,マルチスレッド化されたアプリケーションを分析し,デバッグするための診断ツールです。 Visual Threads を使うと,マルチスレッド化に関する一般的なの問題を自動的に診断できます。 これらの問題には,デッドロック,共用データの保護,スレッドの使用方法のエラーなどがあります。

また,このツールを使用して,スレッドに関連するアプリケーションの性能を監視することができ,ボトルネックやロックの細分性の問題の識別を支援します。 これは,アプリケーションが明確な症状を示さない場合でも,問題のある領域を識別するのに使用できる,ユニークなデバッグ・ツールです。

Visual Threads は,POSIX スレッド (DECthreads) を使用するアプリケーション,または Java で書かれた Tru64 UNIX アプリケーションであれば,どれに対しても使用することができます。 これはあらゆるサイズのマルチスレッド・アプリケーション用に設計されており,スレッドが 2 つのアプリケーションから 数百のアプリケーションまで処理することができます。

Visual Threads は,Developers' Toolkit の一部としてライセンスされます。

6.8.3    TIS (Thread Independent Services)

Tru64 UNIX は,アプリケーション作成者が,非スレッド・ライブラリおよびアプリケーションに対してスレッド・セーフ・コードを作成できるように TIS (Thread Independent Services) ルーチンをサポートします。 スレッドがある場合,これらのルーチンは指定したスレッド・セーフ機能を提供します。 スレッドがない場合,これらのルーチンは最小限のオーバヘッドしか呼び出し元に与えません。 シングルスレッドおよびマルチスレッドの両方のアプリケーションをサポートするために,TIS ルーチンは C 実行時ライブラリによって使用されます。

6.9    メモリ・マップ・ファイル・サポート(mmap)

Tru64 UNIX は,Berkeley メモリ・マップ・ファイル・サポート (mmap) 機能をサポートします。 この機能により,アプリケーションは,I/O 操作ではなくメモリ操作でデータ・ファイルにアクセスできます。

6.10    リアルタイム・ユーザとプログラミング環境

Tru64 UNIX は,リアルタイム・ユーザ環境およびリアルタイム・プログラミング環境をサポートしています。 これらのリアルタイム環境は,オプションのリアルタイム・サブセットとして提供されています。 Tru64 UNIX リアリタイム・プログラミング環境は,リアルタイムに関する POSIX 1003.1b-1993 標準に準拠しており,POSIX 環境で移植可能なリアルタイム・アプリケーションを開発/実行することができます。 POSIX 1003.1b インタフェースは,リアルタイムおよび非同期 I/O ライブラリ,librt および libaio で提供されています。

カーネル・プリエンプション (preemption) 機能を有効にすると, カーネル・モードで実行しているかユーザ・モードで実行しているかにかかわらず,優先順位の高いプロセスを優先順位の低いプロセスより優先することができます。 この完全にプリエンプティブなカーネルによって,プロセス・プリエンプション待ち時間 (Process Preemption Latency: 優先順位の低いプロセスより優先するために必要な総時間) を最小にすることができます。

プリエンプティブなカーネルに加えて,Tru64 UNIX リアルタイム・プログラミング環境では,次の POSIX 1003.1b 機能をサポートします。

リアルタイム・プログラミング環境についての詳細は,『Guide to Realtime Programming』を参照してください。 リアルタイム・カーネルの構成についての詳細は,『インストレーション・ガイド』を参照してください。

6.11    ネットワーク・プログラミング・インタフェース

ネットワーク・プログラミング環境には,アプリケーション,カーネル,およびドライバの開発者がネットワーク・アプリケーションを作成し,ネットワーク・プロトコルを実装するためのプログラミング・インタフェースが含まれます。 さらに,ライブラリ,データ構造体,ヘッダ・ファイル,およびトランスポート・プロトコルなど,アプリケーションがデータの処理と伝送を行うために必要とするカーネル・レベルのリソースも含まれます。

このオペレーティング・システムでは,次のプログラミング・インタフェースがサポートされています。

ネットワーク・プログラミング環境の詳細については,『ネットワーク・プログラミング・ガイド』 を参照してください。