このセクションでは、最新のライブラリと信頼できるフレームワークを使用して、Oracle Solaris プラットフォーム上でのアプリケーション開発を容易にする、このリリースで新しく追加された開発者向けの拡張機能について説明します。
Oracle Solaris 11.4 には、C11 プログラミング言語標準である「ISO/IEC 9899:2011 Information technology - Programming languages - C」のサポートが含まれています。C11 標準は、C99 標準の互換性のあるリビジョンです。歴史的に見ると、C プログラミング言語標準は Single UNIX Specification の一部になっています。ただし、新しい C プログラミング言語標準である C11 は、UNIX の次の仕様に先立って、それとは別に入手できます。
Oracle Solaris 11.4 では、C99 と並行して C11 のサポートを行うことで、将来の UNIX 仕様に含まれる C11 標準よりも先に C11 のサポートをお客様に提供できます。新しい標準は Oracle Developer Studio 12.5 または 12.6、GCC 5 または 7、および LLVM/Clang 6.0 C コンパイラで使用できます。開発者は入手可能な最新の C プログラミング言語標準を使用して C プログラムを作成することもできます。
Oracle Solaris 11.4 では、デフォルトのコンパイルモード (機能テストマクロを使用して特定の POSIX 標準への準拠を要求しない場合) によって次の情報が表示されます。
最新の POSIX 仕様に対応する名前空間
Oracle Solaris OS で標準提供されているその他のすべての関数と名前
Oracle Solaris 11.4 での最新の POSIX 仕様は、IEEE Std. 1003.1-2008 Base Specifications, Issue 7 (別名 XPG7、UNIX V7、SUSv4) です。
バイナリ互換性は維持されます。ただし、ソースの互換性は次のような形で影響を受けることがあります。
機能テストマクロ _POSIX_PTHREAD_SEMANTICS が廃止され、もう必要なくなりました。どのヘッダーファイルでもこれはテストされません。これまで -D_POSIX_PTHREAD_SEMANTICS または適切な標準の機能テストマクロでのみ表示されていた各バージョンのインタフェースは、デフォルトで表示されるようになりました。これらには asctime_r()、ctime_r()、getgrgid_r()、getgrnam_r()、getlogin_r()、getpwnam_r()、getpwuid_r()、readdir_r()、sigwait()、ttyname_r() などがあります。ドラフト版 POSIX スレッド標準に基づいていた以前のデフォルトインタフェースは、-D__USE_DRAFT6_PROTOTYPES__ を使用することで、引き続きコンパイル時に使用できます。詳細は、intro(3) のマニュアルページを参照してください。
X/Open 標準で定義されたソケットインタフェースを使用するためには、これまで -D_XOPEN_SOURCE=500 が必要でした。これらのインタフェースも同様に、デフォルトのコンパイル環境で表示されるようになりました。古い SunOS4.x スタイルのソケットに依存するアプリケーションのコンパイルには、-D__USE_SUNOS_SOCKETS__ の使用が必要になりました。詳細は、socket.h(3HEAD) のマニュアルページを参照してください。
Oracle Solaris 11.4 には新しいプロセス制御ライブラリである libproc が含まれており、これを使用すると /proc インタフェース機能に対して、より高度なインタフェース接続を利用できます。このライブラリでは、プロセスやスレッドの調査および制御に必要となる、シンボルテーブルなどの情報にもアクセスできます。
libproc を使用する制御プロセスでは通常、次を実行できます。
被害を受けたプロセスをグラブし、その実行を中断します
被害を受けたプロセスの状態を調べます
被害を受けたプロセスのアドレス空間を調べて変更します
制御プロセスの代わりに、被害を受けたプロセスでシステムコールを行います
被害を受けたプロセスを解放し、妨害されない状態でふたたび実行します
libproc ライブラリは、ブレークポイントデバッガでそのジョブを行うために必要とされるすべてのメカニズムを提供します。また、プロセスで侵入が気付かれずに被害を受けたプロセスに対し、簡単な処理を行うシンプルな 1 回限りの制御アプリケーションの作成も容易になります。
詳細は、libproc(3LIB) のマニュアルページを参照してください。
Oracle Solaris 11.4 では、libc で提供されている既存のロケールサポート API が改善され、UNIX V7 標準で定義された新しい API が追加されました。UNIX V7 標準で定義された uselocale とその他の API が導入されて、スレッド間のロケールとスレッドのロケール変更がサポートされるようになりました。既存のロケールサポート API は、新しい API と組み合わせて完全なマルチスレッドセーフになるように更新されました。libc でのベースとなるロケール処理が改善されてパフォーマンスが向上し、複数のロケールを使用するアプリケーションのリソース使用量が減少しました。
詳細は、uselocale(3C)、newlocale(3C)、freelocale(3C)、wctype(3C)、および localedef(1) の各マニュアルページを参照してください。
Oracle Solaris 11.4 では、仮想メモリーマップの代わりに Silicon Secured Memory (SSM) を使用したユーザーモードのウォッチポイントが実装されるようになりました。ウォッチポイントとはメモリーの場所で書き込みまたは読み取り時にトリガーされるイベントのことで、デバッグやパフォーマンス分析に使用できます。ウォッチポイントは現在、そのアドレスを含むページをアクセス不可にすることで実装されます。スレッドが同じページ上の関係のない場所に頻繁にアクセスすると、このアクションの実行速度が大幅に低下します。これに対し、SSM は 64 バイトのキャッシュ行を使用したきめ細かな精度を備えています。また、SSM がマルチスレッドであるのに対し、すべてのスレッドは同じ仮想メモリーページを共有しています。
詳細は、dbx(1) および mdb(1) のマニュアルページを参照してください。
Oracle Solaris 11.4 には新しいプロセス制御ライブラリである libdtrace が含まれており、開発者はこれを使用して bespoke DTrace アプリケーションを作成できます。
詳細は、Oracle Solaris 12 DTrace (動的トレース) ガイド の 付録 A, libdtrace API Reference,を参照してください。
Oracle Solaris 11.4 では、DTrace で DWARF を使用すると、ユーザープロセスに対してアドレスからソースコードのメタデータへの変換を行えます。新しい uresolve オプションを使用すると、DTrace の ustack、uaddr、および printf アクションで、ユーザーアドレスをソースコードファイルの名前と行番号に変換できます (DWARF のデバッグ情報が存在する場合)。この機能により、一般的なコンパイラ標準との互換性を維持しながら、一般的な診断出力をより直感的に解釈できるようになります。
詳細は、Oracle Solaris 12 DTrace (動的トレース) ガイド の Data Recording Actionsに記載されている ustack、uaddr、および printf の各アクションを参照してください。
Oracle Solaris 11.4 では、pstack コマンドを使用してフレームにソースコードのメタデータで注釈を付けることができます (DWARF のデバッグ情報が存在する場合)。この機能により、一般的なコンパイラ標準との互換性を維持しながら、一般的な診断出力をより直感的に解釈できるようになります。
詳細は、proc(1) のマニュアルページの pstack を参照してください。
Oracle Solaris 11.4 では、pstack と mdb の両方でユーザープロセスでの DWARF および DWARF スタイルのスタック巻き戻しがサポートされています。また、pstack と mdb では、Oracle Developer Studio の新しい -preserve_argvalues=complete オプションでコンパイルされたプロセスから関数の引数を回復できます。この機能により、x64 と SPARC の両方の 32 ビットと 64 ビットのプロセッサに機能が適用されますが、特に amd64 プロセスの可観測性と診断機能が向上します。
amd64 で mdb ::stackregs dcmd が有効になり、DWARF スタイルの巻き戻しテーブルを使用してフレームのレジスタが回復されます。
Cython は、Python プログラミング言語と拡張された Cython プログラミング言語 (Pyrex ベース) の両方を対象とした静的な最適化コンパイラです。この機能により、Python を使用した高パフォーマンスなコードの生成が可能になります。
詳細は、Cython による Python の C 拡張に関する説明を参照してください。
Oracle Database Programming Interface-C (ODPI-C) とは、Oracle Call Interface (OCI) のラッパーであり、さまざまなバージョンの Oracle Instant Client ライブラリとともに透過的に機能します。
ODPI-C により、アプリケーションで実行前に LD_LIBRARY_PATH を設定する必要がなくなります。また、ODPI-C は複数のバージョンの Oracle Instant Client ライブラリとともに透過的に機能します。Oracle Instant Client ライブラリを使用する必要のあるソフトウェアで、実行前に ORACLE_HOME を設定する必要がなくなります。
ODPI-C を使用するには、developer/oracle/odpi パッケージをインストールします。
ODPI-C の詳細は、GitHub 上のドライバおよびアプリケーション用の Oracle Database プログラミングインタフェースに関するプロジェクト、および libodpic(3LIB) のマニュアルページを参照してください。Oracle Instant Client は IPS 形式で入手できるため、OTN にアクセスして .zip ファイルをダウンロードする必要はありません。
cx_Oracle とは、Python アプリケーションから Oracle Database 12c および 11 にアクセスできるようにする Python モジュールです。このモジュールは通常、ほかのオペレーティングシステムであらかじめ作成されたパッケージから入手可能ですが、これまで Oracle Solaris では同様に入手することができませんでした。このモジュールは 32 ビットと 64 ビットの両方の形式で入手できます。Oracle Solaris でパッケージ化されたバージョン 5.2 は、Python 2.7 および 3.4 とともに使用できます。
詳細は、cx_Oracle のドキュメントを参照してください。