1

まず第一に、Web でいくつかのことを読んだ後のスクリプト言語についての私の理解は、ユーザーがコンパイルする必要なくすぐに実行できるスクリプト言語として分類できるということです。最近、私はオープンソース製品の xwiki に取り組みました。そこでは、スクリプト言語として groovy を使用していることがわかりました。つまり、ユーザー インターフェイスから小さなプログラムを作成でき、それを保存すると、コンパイルされてバックエンドで実行されます。彼らがどのようにそれを行っているかは、単にプログラムを文字列として渡し、それをコンパイルして Groovy コンパイラーで実行することです。このように groovy をコンパイル言語として扱うことができるのは、ユーザー エクスペリエンスのために、コードをコンパイルしてその場で実行する必要がないためです (ただし、内部的にはバイト コードにコンパイルされます)。

それが本当なら、Javaでも同様のものを達成することができます。つまり

Process process1 = Runtime.getRuntime().exec("javac "+stringContainingProgram);

入力ストリームからコンパイルコードを取得して実行します。

この点で、Java をスクリプト言語として扱うことができると言えますか?

4

4 に答える 4

3

「スクリプト言語」と「通訳言語」という用語を混同していると思います。

インタプリタ言語とは、実行前にプリコンパイルされていない言語です。

スクリプト言語は通常、タスクの自動化(スクリプト)を可能にする言語です。

Javaは、JavaコードがJVMバイトコードに変換され、このバイトコードが実行時に解釈されるコンパイルフェーズがあるため、もう少し混乱します。したがって、Javaには、コンパイルされた言語と解釈された言語の両方の機能があります。

Runtime.GetRuntime()。exec()を使用すると、実行時にコマンドを呼び出すことができますが、これは、同じことを行う(または、ターミナルにコマンドを入力する)bashスクリプトを使用するのと同じです。

この場合、Javaを使用してコンパイラを明示的に呼び出すことを概説し、次の論理的な手順はそれを実行することですが、コードはJavaコード内から実行されておらず、Javaコードは単にそれを呼び出しています。

簡単な答えはノーです。Javaは完全に解釈された言語ではありません。

于 2012-06-03T03:28:05.047 に答える
2

IMO 「スクリプト言語」という用語は曖昧すぎて、意味のある方法で議論することはできません。Groovy はスクリプト言語ですか? 事前にコンパイルすることも、ちょうど間に合うようにコンパイルすることもできます。

純粋に解釈された言語はスクリプト言語ですか? 初期の解釈されたBASICを「スクリプト言語」とは呼ばないため、IMO言語がどのように実行されるかは重要ではありません。

静的型付け言語はスクリプト言語ですか? ここで興味深いことを踏みにじっていますが、オプションの型付けを備えた言語についてはどうでしょうか?

私にとっては、「コードを手動でコンパイルする必要がありますか」ということになります。Java はスクリプト言語になることができますか? トリッキー...インターフェイスに準拠するエディタープラグインは「ユーザースクリプト」ですか、それとも単に「エディターコードベースの一部」になっていますか? 確実に弁護できる答えはありません。

ハニー アナグマは追い詰められても気にせず、Java はスクリプト言語ではなく、Groovyはスクリプト言語になる可能性があると言いました。しかし、巨大なシステムは、たとえば Perl のような「スクリプト」言語で書かれています。(そうあるべきかどうかは... 議論の余地があります。) さて、問題は「スクリプト言語とプログラミング言語の違いは何ですか?」にかかっています。

本当に何もありません。IMO 差別化はほとんどの場合無意味です。

于 2012-06-03T03:40:15.700 に答える
1

あなたの例にあるのはJavaではありません。これは、Javaのような構文を持つ式言語です。実際のJavaでは、宣言をクラスまたはメソッドに埋め込む必要があります。

したがって、その例に基づいて、Javaがスクリプト言語であるとは言えません。Javaのようなスクリプト言語を作成することもできますが、使いやすさの問題に対処する必要があります。インポートの別の構文のように...スクリプト言語をインタラクティブにしたい場合。

次に、ユーザーが変数とその型を明示的に宣言する必要があるスクリプト言語が、人々が望んでいるものではないという問題があります。実際のJavaは基本的に、明示的に型指定された宣言を持つ静的に型付けされた言語です。スクリプト言語は(一般的に言えば)動的に型付けされます。


Javaは動的型付け言語ではないため、スクリプト言語ではないと言えますか?

あまり。「スクリプト言語」は、スクリプトに一般的に使用される言語です。それはあなたが言うことができるほぼすべてです。「スクリプト」とは何かを明確に定義することすらできません。

静的に型付けされた言語ではスクリプトを実行できないという基本的な自然法則はありません。それはただ...まあ...人々が望んでいるものではありません。

コンパイルに関しては、時間内であろうと事前であろうと、どの言語もスクリプト言語として認定するための基準ではありません。右?

それは正しいです。スクリプトの目的での言語のユーザビリティには基本的に影響しません。

ここで、ユーザーがスクリプトを実行する前に明示的にスクリプトをコンパイルする必要がある場合、それはスクリプトではないと主張するかもしれません。おそらくそれは、「通常の」プログラミングと「スクリプティング」を区別するものです。ただし、これに伴うリスクは、特定のバイアスに適合する/適合するように「スクリプト言語」と「スクリプト」を暗黙的に制約していることです。


これと他の答えを読んだら、私たちは基本的に1つの点で同意しています。スクリプト言語が何であるかについての有用な定義はないため、Javaがその言語であるかどうかを判断することはできません。

もっと答えられる質問は、Javaがスクリプト作成に適した言語であるかどうかです...そして私の答えは、そうは思わないということです。

于 2012-06-03T03:31:24.543 に答える
1

私は自分の答えに反対票を投じることを知っていますが、..デイブ・ニュートンは絶対に正しいです. 用語が曖昧すぎる…

あなたの例では、groovy コードをコンパイルする必要はありません。私見、そのような場合の groovy のより典型的な使用法は、groovy インタープリターを使用することです。

はい: Java はスクリプト言語として使用できます。Java コードで小さなスクリプトを記述できるエンタープライズ製品を見てきました。プログラムはそれをクラスにラップし、コンパイルして実行します。

したがって、アプローチを比較すると、groovy のような「本物のスクリプト」言語が使用されているか、Java がちょっとしたトリックによって 1 つに変換されているかは、ユーザーにとって問題ではありません。

ところで:ほとんどのJavaステートメントはgroovyでも実行されます...したがって、次のようなコードフラグメントを見ると

res = 5 * 16 + 2

これがスクリプトなのか、スクリプト化されていないものの一部なのかはわかりません。どの言語で書かれているかさえわかりません!

したがって、元の質問に戻ります。

Java をスクリプト言語として扱うことができるとは言えませんが、多くの場合、Java でスクリプトのニーズを満たすことができます。

アップデート:

あなたが言ったように、「Java はスクリプト言語として使用できます。Java コードで小さなスクリプトを記述できるエンタープライズ製品を見てきました」

通常の機能を超えて製品を拡張する小さなスクリプトについて話しています。MS Office 製品の Visual Basic、Bonita (ワークフロー製品) の Groovy、Jasper iReports (レポート ジェネレータ) の Groovy、JavaScript、Java (はい! Java!)。

ところで: Jasper での Java と Groovy の使用の比較については、こちらを参照してください: http://jasperforge.org/uploads/publish/ireportwebsite/IR%20Website/iReport_groovy.html

Javaをスクリプト言語として使用できることを示していますが、他のソリューションの方が優れています:-)

ほとんどの Web では、スクリプト言語は通常、タスクの自動化 (スクリプト作成) を可能にする言語であると言われています。この定義に従うと、すべての言語がスクリプト言語になります。これは、任意の言語で 1 つまたは他のタイプのタスクを自動化できるためです。

私にとって、スクリプト言語はタスクの自動化を可能にする言語だけではありません。私にとっては、PHP、Javascript、Visual Basic、Groovy もスクリプト言語です。そして、Post* Script * についてはどうですか?

ところで: http://www.beanshell.org/を見つけました - Java と完全に互換性のあるスクリプト言語です。

すでに述べたように、私見ですが、スクリプト言語として多くの言語を使用できますが、より適した言語もあります :-)

于 2012-06-03T07:12:39.780 に答える