Netscape Portable Runtime

Netscape Portable Runtime (NSPR) は、Mozillaが提供するブラウザなどにおいてクロスプラットフォームを実現するため、オペレーティングシステムなどの環境の違いを吸収するAPIを提供するライブラリである。Java仮想マシンの土台となる、サンマイクロシステムズによって定義されたJava仮想マシンのポーティングのためのsysレイヤーを提供し、グラフィカルユーザインターフェースではない、以下の機能を提供する。
 スレッド
 スレッドの同期
 ファイルやネットワークの入出力
 インターバルタイマー、暦および時刻
 基本的なメモリ管理
 共有ライブラリのリンク

歴史 
最初の世代のNSPRは、単にJavaを様々な環境に移植するためのものであった。1996年に開発が開始されたNSPR20（20はバージョン2.0を意味するのではなく第二世代を意味する）は、コンセプトはオリジナルと同じであったが、コードはほぼ一から書き直され、改良、拡張が加えられた。

機能

スレッド 
スレッド機能は、NSPRの最も基本的な機能である。OSやソフトウェアが提供するスレッド機能は堅牢性に欠けており、NSPRは完全ではないものの堅牢性を期待できる単一APIを提供する。NSPRではOSから提供される機能を最大限に利用しつつ、オーバーヘッドが極力少なくなるよう設計されている。

スレッドの同期 
NSPRによるスレッドの同期は、アントニー・ホーアが提唱したモニタの考えに緩やかに依存している。NSPRは基本的な排他制御とスレッド通知機構を提供するほか、Javaでの使用に適した同期メソッドを提供している。Javaに類似したこの機構には、再入可能かつオブジェクトの動的同期に密接に結びついた通知のモニタが含まれる。

入出力 
NSPRの入出力はソケットモデルを拡大したものであり、可変的なレイヤー化を可能とする。設計者はもともと同期的な入出力メソッドのみを意図していたが、複雑なアプリケーション向けの並行処理のためにスレッド機能に頼る形となった。

ネットワークアドレス 
NSPRではネットワークアドレスを扱うことも可能である。NSPRはIP中心のネットワークアドレスオブジェクトを定義し、クライアントがネットワークアドレスをポリモーフィズムなものとして扱うためのAPIを提供する。IPv4とIPv6の相互変換も提供されており、IPv4、IPv6のどちらが利用されているかに関わらずDNSによるASCII文字列をNSPRのネットワークアドレスに変換できる。

時刻管理 
NSPRでは、インターバルタイマーと、暦および時刻の2種類の時刻管理機能を提供する。

インターバルタイマーは、プラットフォームに依存した32ビットのものである。入出力、変数、スレッドスケジュールの管理などに用いられる。これらのタイマーは有限の名前空間を有しており、任意の時間を包括することができる。NSPRのインターバルタイマーでは時刻管理の紀元は提供していないことから、クライアントがそれを処理する必要がある。時刻カウント間隔は、10マイクロ秒から1ミリ秒の間であり、タイマーの最小期間は約12時間となる。しかし、実用上は名前空間の半分しか利用できないことから、実質的な最小期間は6時間に満たない。

暦および時刻は、マイクロ秒を最小単位とする64ビットのものである。暦時間における紀元は1970年1月1日0時0分0秒（グリニッジ標準時）であり、それ以降時刻の増加と共に暦時間も増加する。64ビットを用いていることから、前後およそ30000年を扱うことが可能である。ホストシステムからの現在時刻の取得およびNSPR形式との相互変換、ASCII形式との相互変換も可能である。

メモリ管理 
NSPRはmalloc、calloc、realloc、freeといった基本的なメモリ管理関数を呼び出すAPIを提供する。これらの関数がNSPRライブラリに完全に実装されているか、OSが提供する関数を呼び出す形になっているかはプラットフォームによる。

リンク 
共有ライブラリのリンクも、NSPRの機能の一つである。多くの場合、プラットフォームによって提供される機能を統一的に扱いやすくするよう働く。

関連項目 

 Apache Portable Runtime

脚注

外部リンク 
 公式サイト
 ソースコード

API
Netscape
Mozilla