Pnutsプロジェクト

概略

PnutsはJVMをベースとするスクリプト言語です。Javaプラットフォーム上の、複数言語システム(dual-language system)の一部として利用されることが想定されています。特長は以下のとおり。

  • 単純な構文規則
  • 対話的なインタプリタ
  • モジュールシステムによる拡張性
  • Pnuts APIを使って埋め込みやカスタマイズが可能
  • JVMバイトコードへの動的/静的な変換
  • JVM上のスクリプト言語処理系の中で最速
  • Javaの優位性をそのまま継承 (セキュリティ、プラットホーム非依存性等)

このプロジェクトのWebページは、http://pnuts.dev.java.net/で、最新のソースコードやドキュメントが配付されています。

動機

PnutsはもともとJavaのテストツールとして1997年に開発されました。それ以来、Pnutsは、主にスクリプト言語に求められる本質的な機能(モジュールシステム、バイトコードコンパイラ等)に着目して拡張を続けられています。

2002年頃から、WebスクリプティングをPnutsで実現するために力が注がれています。Javaプラットフォームには、JSPベースの技術がすでにありますが、Webアプリケーション開発者の多くはJavaの開発者ではない、ということはよく知られています。そのような人達はJSPベースの技術を敬遠してPHPやそれ以外の技術に留まる傾向があるようです。Pnutsプロジェクトでは、Java言語を使いこなせない人にもJavaプラットホームを活用できるようなスクリプト環境を実現することを目指しています。

優位性
  1. Javaプラットホームに特化した言語設計

    JVM上のスクリプト言語システムは2つに分類できます。1つは既存の言語をJavaに移植したもので、もう1つは新たに設計された言語です。Pnutsは後者に該当します。

    既存システムをJavaに移植することは、既存システムに新たな価値を付加することになります。しかし、このようなシステムが抱える共通の問題点は、既存システムとの互換性を優先させる必要があるということです。このため、言語システム間のモデルの違いをそのまま残すことになります。たとえば、オリジナルのシステムの型システムをJavaベースのシステムでも再現する必要があります。そのため、Javaベースのスクリプト言語システムと、Javaの間ではデータの変換が必要になり、性能を低下させます。また、Java言語とスクリプト言語が共存する環境では、データの表現形式の違いを意識しなければなりません。

    PnutsのようなJavaに特化した言語では、このような制約がありません。Pnutsスクリプトの値はすべて、きちんと定義されたJavaクラス(あるいはインタフェース)のインスタンスとして表現できます。

  2. 部品化を徹底したAPI

    Pnuts APIは、スクリプトエンジンとしてアプリケーションに埋めこむための柔軟なインタフェースを提供しています。他の多くのシステムはこの領域に欠陥があります。

  3. 充実した標準モジュール

    Pnutsは、すぐ使うことのできるライブラリ関数を標準モジュールとして提供しています。それらの関数のおかげで、アプリケーション開発をJavaだけで開発した場合よりもずっと単純にすることができます。また、Pnutsのモジュールシステムは洗練されていて、ユーザがアプリケーションの要求に応じて独自のモジュールを開発して追加することができます。

  4. 高性能

    Pnutsは、Java上のスクリプト言語システムのうち最も速いものの1つです。スクリプトエンジンを大きなアプリケーションに組みこむ場合、スクリプトエンジンのスピードが重要になります。スクリプトエンジンがボトルネックになることが多いからです。

利用事例