Pnuts FAQ

0. Table of Contents

1. 一般的な質問
Pnuts とは何ですか?
Java プログラミングの知識は必要ですか?
Pnuts が動作する環境は?
Sun の製品との関係は?
Pnuts を組み込んだ製品を販売できますか?
2. 技術的な質問
他の言語と比べてメリットは何ですか?
実行性能はどうですか
なぜ Java と違うシンタックスを導入したのですか?
Java のコードに変換したり、バイトコードにコンパイルできますか?
Java のクラスを定義するにはどうすればよいですか?
Perl のような正規表現を利用したいのですが

1. 一般的な質問

Pnuts とは何ですか?
Pnuts は、対話的に Java API にアクセスできるスクリプト言語です。 Java プログラムに Pnuts のパッケージを埋め込んで Pnuts のプログラムを簡単に呼び出すことができます。

Java プログラミングの知識は必要ですか?
それは、どのようにPnutsを使うかによります。 Pnuts のモジュールを利用したスクリプトを書くだけであれば、Java API を直接呼び出すことがないため、Java API の知識は必要ありません。 新たにモジュールを作成する場合や、既存のモジュールで提供されていない機能を利用する場合には、Java API の知識が必要になります。ただし、Java プログラミングに要求されるオブジェクト指向の知識や Java 言語の細かい知識は必要ありません。

Pnuts が動作する環境は?
Pnuts は Java で記述されており、J2SEに準拠する環境で動作します。動作確認を行った環境は、以下の通りです。

Sun の製品との関係は?
いずれも Sun Microsystems Inc. が Copyright を所有していること以外、関係ありません。Pnuts に関するお問い合わせはすべて pnuts-admin@Japan.Sun.COM まで。

Pnuts を組み込んだ製品を販売できますか?
はい。使用許諾にしたがって使用料なしで Pnuts を再配布することができます。

2. 技術的な質問

他の言語と比べてメリットは何ですか?
(1) 既存のスクリプト言語と比べて
Pnuts はJavaプラットフォームの機能を有効に活用することができます。最適化された最新のJVMを利用することができるので、独自に開発されるVMに比べて性能面において有利です。 また、PnutsはJavaだけで記述されているので、Javaがサポートされている環境では変更なしで動作します。

既存のスクリプト言語をJavaに移植したものは、互換性を保つためにどうしてもJavaと重複するオブジェクトモデルを持たざるを得ませんが、 Pnutsは新たに設計された言語なので、Javaのオブジェクトをそのまま(ラッパーなしで)利用できます。

(2) 他のJavaベースの言語と比べて
Pnutsの特徴は、ハイレベルの記述を可能にするモジュールおよびモジュールシステムがあることです。 モジュールを活用すると、アプリケーションに応じて使用する関数(のグループ)を取捨選択することができますし、ユーザが独自のモジュールを追加することもできます。
(3) Java言語と比べて
Pnutsは、モジュール(スクリプトのためのレイヤ)が充実しているため、Java APIを直接使わないハイレベルなプログラミングが可能です。 このため、Pnutsは、Java言語を習得していないユーザを含めた、より幅広いユーザ層をターゲットにしています。

また、PnutsとJavaを組合せた開発は、Javaだけで開発する場合にくらべて開発効率がよいので、経験豊富なJavaプログラマーは、システムの複雑さを軽減させるためのツールとしてPnutsを使うことができます。

実行性能はどうですか?
Pnutsの実行性能は、Perl, Python, luaなどのスクリプト言語に比べて遜色ありません。 同じJavaベースのスクリプト言語の中でもPnutsはもっとも性能のよいシステムの1つです。 Pnutsホームにベンチマーク結果へのリンクがあります。
なぜ Java と違うシンタックスを導入したのですか?
Pnuts では、クラスを指定する際に "class クラス名" というシンタックスを導入してい ます。
仮に "java" というグローバル変数が定義されたときに "java" パッケー ジのクラス名が正しく参照できなくなるという問題があります。クラス名とインスタンス変数の境界がはっきりするようなシンタック スを導入すればこの問題をすっきりと解決できます。
Pnuts では static フィールドを参照するために "::" という記号を使います。
Pnuts には、変数の型がないので、型としてのクラスと Class オブジェクトを区別なく使っています。Class オブジェクトも通常のオブジェクトと同様に操作できるようにするために Java と異なるシンタックスを採用しました。
Java のコードに変換したり、バイトコードにコンパイルできますか
Pnutsは、デフォルトで自動的にスクリプトをバイトコードに変換しながら実行します。また、Pnuts APIを使うと、プログラムからスクリプトをコンパイルすることができます。

Java のクラスを定義するにはどうすればよいですか
Perl のような正規表現を利用したいのですが
Pnutsは、pnuts.regexモジュールで正規表現をサポートしています。