2

動的インタープリターを取得できると仮定します。静的にコンパイルされた言語はスクリプト言語を置き換えることができますか? なぜ誰かがスクリプト言語を使用するのか、まったく理解できませんでした。私が話しているのは PC であり、単純なインタープリターを必要とする限定されたシステムではありません。私はいくつかの Python インストール スクリプトを見て、問題に対する同様の Python および C# ソリューションを見ました。では、なぜスクリプト言語を使用するのでしょうか。

注: C# について気になることがありますが、代わりに C# を使用しない理由を尋ねているわけではありません。スクリプト言語を使用する理由を尋ねています。静的にコンパイルされた言語は、デバッグがはるかに簡単で、多くの場合、コーディングが簡単です。

4

9 に答える 9

3

この種の質問は、人々がそれぞれのキャンプに情熱を傾けているため、しばしば炎上戦争を引き起こします.

昔のコンピューターでは、Unix コマンド ライン ツールとコンソール シェルが、あらゆる種類の処理を実行できる豊富なスクリプト環境を提供していました。特定の言語のエキスパートプログラマーである必要はなく、パイプ構造を使用してさまざまなプログラム (他の人が書いたもの) をつなぎ合わせて (しゃれを意図して)、ほとんどがバイナリ関連ではないデータを操作することができました。バッチ コマンド ファイルをすばやく簡単に変更できます。Windowsの場合、外部の静的または共有ライブラリ/ DLLにリンクして編集、コンパイルする必要があるソースファイルはありません。

スクリプティングが通常持っていないものの 1 つは、速度です。スクリプトでデバイス ドライブやライブ インターネット取引 AI システムを作成することはありません。しかし、電子メールまたは ftp 経由で受け取ったデータに対して 1 日に 1 回スクリプトを実行する場合、バックグラウンドで実行できるため、通常はスクリプトにかかる時間は気にしません。

現在に巻き戻せば、水は濁る。一部のスクリプト環境は、通常の C++ または VB プログラムが速度向上のために使用するのと同じように、スクリプトを読み取り、モジュールでほぼコンパイルおよびリンクする一種の高速化機能を提供します。しかし、これは非常に不確実であり、信頼することはできません。

では、どのようにルートを選択するのでしょうか。スクリプトを使用してタスクを開始します。実行速度が遅すぎる場合、または 5 分ごとに実行する必要がある場合は、スクリプトの一部が従来の言語で記述されたセクションから得られるか、すべてが言語で記述される可能性があります。

何かに手を出して学ぶのと同じように

于 2009-08-09T06:09:45.307 に答える
3

ウィキペディアによると、スクリプト言語は他のソフトウェアを制御する言語です。これは C# で行うことができますが、Powershell のような真のスクリプト言語は、このために特別に設計されています。

私は、スクリプト言語を C# よりも "インタラクティブ" な用語で考える傾向があります。スクリプト言語を使用すると、1 ~ 2 行のコードを記述して実行し、結果をすぐに確認できます。これは C# ではそれほど簡単ではありません。コードをコンソール アプリケーションに配置するか、単体テストから起動するか、インテリセンスがないイミディエイト ウィンドウにコードを入力する必要があります。

書き込み、実行のこの迅速なサイクルにより、スクリプト言語で完全な「スクリプト」の迅速なプロトタイピングが可能になります。これは、コードの各行について即座にフィードバックが得られるためです。

于 2009-08-09T05:10:38.000 に答える
2

私は自分のシェル (bash) をスクリプト言語と呼んでいますが、コンパイルされた代替品はありません。

私は、インタープリターのような REPL インターフェースを備えた静的に型付けされた言語である scala を使用するのが好きです。型の干渉により、スクリプト言語のように見えます。こちらをご覧ください: http://www.simplyscala.com/

ただし、シェルのように他のプログラム間の接着剤になることを意図したものではないため、手と目で簡単に確認でき、ほんの数行のコードである小さなジョブには、シェルを使用することを好みます。また、ディレクトリからディレクトリへのジャンプは、プロンプトが現在の場所を示すシェルで快適です。

于 2011-02-04T07:38:36.713 に答える
2

それぞれが異なる目的で使用されます。スクリプト言語で書かれたプログラムは、多くの場合、自己完結型ではありません。多くの場合、「接着コード」として、または (Robert Harvey が言及しているように) タスクを自動化するために機能します。多くの場合、スクリプト言語インタープリターがアプリケーションに埋め込まれています (Blender の Python、GIMP の Guile、Perl、Python、多数の異なるブラウザーの JS、無数のゲームの Lua を参照)。一方、コンパイル済み言語は、自己完結型のアプリケーションを作成するために使用されます。スクリプトはほとんどがクロスプラットフォームです。コンパイルされたアプリケーションは通常そうではありません。

スクリプト言語は必ずしも対話型インタープリター (Perl など) を使用するとは限らず、インタープリター言語は必ずしもスクリプト (PyGame を使用して作成されたゲームなど) に使用されるとは限りません。また、言語を解釈またはコンパイルする言語自体については何もないことに注意してください。C# インタープリターまたはRuby コンパイラーを使用できます。インタプリタとコンパイラの両方を提供する Lisp システムは数多くあります。

于 2009-08-09T06:27:41.057 に答える
1

Before we begin, I don't think that I've ever met a static language user who "got" scripting language without trying them, including myself. It is a different experience.

So no. Basically, you can add features to static languages which makes them superficially seem like scripting languages (like simple type inference), but its not the same:

  1. Many scripting language users hate static languages. They feel constrained. Scripting languages are typically very good at not getting in the users way, which is sacrificed in static languages for speed/correctness.

  2. Duck typing will not appear in static languages.

  3. Scripting language users don't like type annotations. Its not really possible to provide a type-inference system for scripting languages, and the simple type inference appearing in some languages now only works for static types.

  4. Techniques like monkey patching (which to my mind is a very bad idea) is pervasive in Ruby, and allows for very powerful techniques, which won't become available soon in static languages either.

Which isn't to say that a yet-to-be-designed language can't handle scripting language features in a relatively static way, but it would be difficult for it to become popular relative to the entrenched Python/PHP/Perl/Ruby/Javascript set. Factor is the closest thing, AFAICT.

What will happen is that scripting language implementations will get faster by using JITs.

于 2009-08-09T09:43:14.890 に答える
1

スクリュードライバーはハンマーの代わりになりますか? いいえ、同じ目的で使用しないためです。そして、両方が存在し、多くの人がどちらか一方を使用している場合、理由があるに違いありません...

の同じ答え:

  • クラス継承とプロトタイプ。
  • 必須 vs oo;
  • 静的型付けと動的型付け。
  • 強く型付けされたものと弱く型付けされたもの。
  • 手動のメモリ管理と GC。
  • C# と Java。
  • 青と赤。
  • 男対女。
  • バットマンvsスーパーマン

等...

于 2009-10-31T13:18:08.297 に答える
0

I am asking why use a scripting language? I find static compiled languages much easier to debug and often easier to code in.

Because I find loosely-typed dynamic languages without an explicit compile-run cycle much easier to debug and generally easier to code in.

于 2009-08-09T10:03:58.890 に答える