スクリプト言語

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

スクリプト言語またはスクリプト言語、人間のオペレーターが個別に実行するタスクの実行を自動化するランタイムシステムプログラミング言語です。[1]スクリプト言語は通常、コンパイルされるのではなく、実行時に解釈されます

スクリプト言語のプリミティブは通常、基本的なタスクまたはAPI呼び出し[説明が必要]であり、スクリプト言語を使用すると、それらをより多くのプログラムに組み合わせることができます。スクリプトを使用して自動化できる環境には、アプリケーションソフトウェアテキストエディタWebページオペレーティングシステム シェル組み込みシステム、およびコンピュータゲームが含まれます。スクリプト言語は、特定の環境のドメイン固有言語と見なすことができます。アプリケーションのスクリプトを作成する場合、拡張言語とも呼ばれます。スクリプト言語は、高水準の抽象化で動作する場合があるため、非常に高水準のプログラミング言語と呼ばれることもあります。また、特にメインフレームのジョブ制御言語の場合は、 制御言語と呼ばれることもあります。

スクリプト言語という用語は、より広い意味で使用されます。つまり、一般に動的な 高級プログラミング言語を指します。厳密に解釈される言語もあれば、コンパイル形式を使用する言語もあります。この文脈では、スクリプトという用語は、そのような言語の小さなプログラムを指します。通常、1つのファイルに含まれ、数千行以下のコードです。

スクリプト言語の範囲は、小規模から大規模まで、ドメイン固有言語から汎用プログラミング言語まで多岐にわたります。言語は、小さくてドメイン固有性が高いものから始まり、後で移植性のある汎用言語に発展する可能性があります。逆に、汎用言語は後で特別なドメイン固有の方言を開発する可能性があります。

  • Bashは、 UnixおよびUnixライクな オペレーティングシステムおよび環境で使用するためのインタプリタスクリプト言語です。
  • PowerShell 、元々はMicrosoft Windowsで使用するためのスクリプト言語ですが、現在はmacOSLinuxにもインストールできます。
  • RexxNetRexx、およびObject Rexxは、 IBMVM / SP R3のREXXに基づくスクリプト言語であり、さまざまなプラットフォームで使用されます。これらは、新しいアプリケーションの作成と、既存のアプリケーションの拡張言語の両方に使用されます。
  • sedAWK、主にUnixライクな環境で使用される2つのテキスト処理言語。
  • Perl[2]後に汎用言語に発展したテキスト処理言語であり、さまざまなアプリケーションの拡張言語としても使用されます。
  • 汎用スクリプト言語であるPythonは、拡張言語としても使用されます。
  • Tcl[3] GUIアプリケーションを作成するための、 Tkと組み合わせて1990年代に普及したUnixライクな環境向けのスクリプト言語。
  • JavaScript(後の:ECMAScript)は、元々は非常に小さく、ドメイン固有の言語であり、表示されているWebページを動的に変更するためにWebブラウザー内で実行することに限定されていましたが、後に広く移植可能な汎用プログラミング言語に発展しました。
  • Kotlinは、コンパイルされた言語ですが、REPL [4]とスクリプトサポート[5]を提供します(Gradleビルドスクリプト[6]のように)。
  • Visual Basic for Applications 、特にMicrosoftOfficeアプリケーション用の拡張言語
  • Luaは、一般的なアプリケーションの拡張言語として使用するために設計された言語であり、さまざまなアプリケーションでそのまま使用されます。
  • Lispは、特定のアプリケーション用の汎用言語および拡張言語のファミリーです。たとえば、 Emacsエディター用のEmacsLispです。

一部のゲームシステムは、カスタム言語を使用して拡張機能をスクリプト化することで機能が大幅に拡張されています。特に、Second Life 仮想世界Linden Scripting Languageを使用)とRailroadシミュレーターのTrainzフランチャイズ(TrainzScriptを使用)です。Wesnothなどの一部のゲームでは、ユーザーはユーザー提供のスクリプトによって定義されたゲームのカスタムバリアントをプレイします。

特徴

一般的なスクリプト言語は、短いソースコードファイルとして、またはread-eval-printループ(REPL、言語シェル)でインタラクティブに学習および書き込みを行うことを目的としています。[7]これは一般に、比較的単純な構文セマンティクスを意味します。通常、「スクリプト」(スクリプト言語で記述されたコード)は、明示的なエントリポイントなしで、「スクリプト」として最初から最後まで実行されます。

たとえば、Javaをスクリプト言語として特徴づけることはまれです。これは、Javaの構文が長く、どのクラスがどのファイルに存在するかについての規則があるためです。また、ソースファイルには呼び出す必要のある定義しか含まれていないため、Javaをインタラクティブに実行することはできません。ホストアプリケーションまたはアプリケーションランチャーによって外部的に

public  class  HelloWorld  { 
    public  void  printHelloWorld () { 
        System アウトprintln "Hello World" ); 
    } 
}

「HelloWorld 」を出力することを目的としたこのコードは、main()HelloWorldクラスで 宣言されていないため、何もしませんが、以下のコードは便利です。

public  class  HelloWorld  { 
    public  void  printHelloWorld () { 
        System アウトprintln "Hello World" ); 
    } 
    public  static  void  main String []  args  { 
        printHelloWorld (); 
    } 
}

上記の例では、mainが定義されているため、これはランチャーによって呼び出すことができますが、これはまだインタラクティブに実行できません。対照的に、Pythonでは、単一のファイルで一部の関数を定義したり、関数を完全に回避して命令型プログラミングスタイルを使用したり、インタラクティブに使用したりすることができます。

print "Hello World" 
print  "Hello World"   #Python2.7以前

この1行のPythonコードは、「HelloWorld」を出力します。ここでは、 main()のような宣言型ステートメントは必要あり ません。

スクリプト言語は通常、ソースコードまたはバイトコードから解釈されます。[8]対照的に、スクリプトが作成されるソフトウェア環境(インタープリター)は、通常、コンパイルされた言語で作成され、マシンコード形式 で配布されます。

スクリプト言語は、プログラムのエンドユーザー(エンドユーザー開発)が使用するように設計されている場合もあれば、開発者が内部で使用するためだけに設計されている場合もあるため、プログラムの一部をスクリプト言語で記述できます。スクリプト言語は通常、情報隠蔽の形式である抽象化を使用して、内部変数タイプ、データストレージ、およびメモリ管理の詳細をユーザーに提供します

スクリプトは、実行者によって作成または変更されることがよくありますが[9]、ゲームの大部分がスクリプト言語、特にGoogle Chrome T-rexゲームで書かれている場合など、スクリプトは配布されることもよくあります。

歴史

初期のメインフレームコンピュータ(1950年代)は非対話型であり、代わりにバッチ処理を使用していました。IBMのジョブ制御言語(JCL)は、バッチ処理を制御するために使用される言語の原型です。[10]

最初のインタラクティブシェルは、最初のタイムシェアリングシステムのリモート操作を可能にするために1960年代に開発されました。これらは、コンピュータープログラムシェル内で実行中のコンピュータープログラムを制御するシェルスクリプトを使用していました。彼のTRAC言語のCalvinMooersは、一般に、コマンド置換、つまり、解釈されたときに文字列をスクリプトに挿入するスクリプトにコマンドを埋め込む機能を発明したとされています。[11] Multicsはこれらのアクティブな関数を呼び出します。[12] Louis Pouzinは、 CTSS用のRUNCOMと呼ばれるコマンドスクリプト用の初期のプロセッサを作成しました 1964年頃。MITのStuartMadnickは、1966年にIBMのCP / CMS用のスクリプト言語を作成しました。彼は当初、このプロセッサをCOMMANDと呼び、後にEXECと名付けました。[13] Multicsには、RUNCOMとも呼ばれるCTSSRUNCOMの派生物が含まれていました。[14] EXECは最終的にEXEC2REXXに置き換えられました

TclLuaなどの言語は、あらゆるアプリケーションに組み込むことができる汎用スクリプト言語として特別に設計されました。Visual Basic for Applications (VBA)などの他の言語は、基盤となるシステムの自動化機能との強力な統合を提供しました。アプリケーションごとに新しい言語を開発する代わりに、このような汎用スクリプト言語を組み込むことにも明らかな利点があり、アプリケーション開発者は言語翻訳者を最初からコーディングする必要がなくなり、ユーザーは他の場所で学んだスキルを適用できます。

一部のソフトウェアには、いくつかの異なるスクリプト言語が組み込まれています。最近のWebブラウザーは通常、ブラウザー自体に拡張機能を書き込むための言語と、JavaScriptECMAScriptの方言)やXULなど、ブラウザーを制御するためのいくつかの標準的な埋め込み言語を提供します。

タイプ

スクリプト言語はいくつかの異なるタイプに分類できますが、タイプ間でかなりの程度の重複があります。

接着剤言語

スクリプティングは、オースターハウトの二分法や「大規模なプログラミングと小規模なプログラミング」のように、システムプログラミングと対比されることがよくありますこのビューでは、スクリプトはグルーコードであり、ソフトウェアコンポーネントを接続し、この目的に特化した言語はグルー言語です。パイプラインとシェルスクリプトは接着剤言語の典型的な例であり、Perlは当初この同じ役割を果たすために開発されました。Web開発は、データベースWebサーバー間のインターフェースである接着剤言語の使用と見なすことができます。しかし、かなりの量のロジックがスクリプトで記述されている場合、それは「接着剤」ではなく、単なる別のソフトウェアコンポーネントとしてより適切に特徴付けられます。

接着剤言語は、以下を記述および維持するのに特に役立ちます。

  • コマンドシェルのカスタムコマンド。[15]
  • コンパイルされた言語でより適切に実装されるプログラムよりも小さいプログラム。[16]
  • ワードプロセッサ、スプレッドシート、データベース、アセンブラ、コンパイラなどのアプリケーションを実行する前または後に、ファイルを移動または操作し、オペレーティングシステムで他のことを行うバッチファイルなどの実行可能ファイル用の「ラッパー」プログラム。[17]
  • 変更される可能性のあるスクリプト。[18]
  • ソリューションの迅速なアプリケーション開発は、最終的には別の、通常はコンパイルされた言語で実装されます。[要出典]

グルー言語の例:

オペレーティングシステムまたはアプリケーションコンポーネントに公開されているマクロ言語は、接着剤言語として機能できます。これらには、Visual Basic for ApplicationsWordBasicLotusScriptCorelScript、Hummingbird Basic、QuickScript、Rexx、SaxBasic、およびWinWrapBasicが含まれます。AWKのような他のツールも、Windows Script Hostエンジン(WindowsおよびRexx、Perl、Tcl、Python、XSLT、 Ruby、Modern Pascal、Delphi、およびC)。アプリケーションの大部分は、を介してオペレーティングシステムコンポーネントにアクセスして使用できます。オブジェクトモデルまたはそれ自体の関数。

プログラム電卓のような他のデバイスにも接着剤言語があるかもしれません。Windows CEなどのPDAのオペレーティングシステムには、 Windows NTDOS、および一部のUnixシェル、Rexx、Modern Pascal、PHPなどの一般的なグルー言語の実装に加えて、アプリケーションをグルーするネイティブまたはサードパーティのマクロツールが利用できる場合があります。 、およびPerl。OSのバージョンに応じて、WSHとデフォルトのスクリプトエンジン(VBScriptおよびJScript)を使用できます。

プログラム可能な計算機は、3つの方法で接着剤言語でプログラムすることができます。たとえば、Texas Instruments TI-92は、工場出荷時のデフォルトでは、コマンドスクリプト言語でプログラムできます。TI-NSpireにスクリプトとグルー言語のLuaを含める一連の計算機は、これの後継と見なすことができます。ほとんどのグラフ電卓(ほとんどの場合、Basicバリアント、場合によってはLisp派生、さらにまれにC派生)の主要なオンボード高水準プログラミング言語は、多くの場合、グラフ、リスト、マトリックスなどの計算機能を結合できます。この記事でグルー言語としてリストされているバリアントに近い可能性のある、より包括的なBasicバージョンのサードパーティ実装が利用可能です。また、TIおよびHPグラフ電卓にPerl、Rexx、またはさまざまなオペレーティングシステムシェルを実装する試みについても説明します。PCベースのCクロスコンパイラCとPerl、Rexx、AWK、およびシェルスクリプトをPerlに変換するツールで使用される一部のTIおよびHPマシンでは、Perlとの間でVBScriptを使用して、最終的な実装のためにグルー言語でプログラムを作成できます。 (コンパイルされたプログラムとして)計算機で。[要出典]

エディター言語

多くのテキストエディタは、エディタに組み込まれたマクロ言語( SemWare Editor(TSE)、vi Improvement (VIM)など)、または外部実装(XEDITなど)、あるいはその両方(KEDITなど)を使用して記述されたマクロをサポートします。テキストエディタと編集マクロは、 CMSのFILELISTやRDRLISTなど、他のアプリケーションを提供するために内部で使用されることがあります

ジョブ制御言語とシェル

スクリプト言語の主要なクラスは、システムプログラムの動作の開始と制御に関連するジョブ制御の自動化から発展しました[19] (この意味で、シェルはIBMのJCLまたはジョブ制御の子孫であると考えるかもしれません。まさにこの目的のために使用された言語)。これらの言語のインタプリタの多くは、 UnixシェルやMS-DOSなどのコマンドラインインタプリタを兼ねています。AppleScriptなどの他の製品では、英語のようなコマンドを使用してスクリプトを作成できます。 COMMAND.COM

GUIスクリプト

グラフィカルユーザーインターフェイスの出現により、コンピューターを制御するための特殊な種類のスクリプト言語が登場しました。これらの言語は、人間のユーザーと同じグラフィックウィンドウ、メニュー、ボタンなどと相互作用します。これは、ユーザーのアクションをシミュレートすることによって行われます。これらの言語は通常、ユーザーアクションを自動化するために使用されます。このような言語は、シミュレートされたキーの押下またはマウスのクリック、およびタッチでアクティブ化された画面のタップまたはプレスによって制御される場合、 「マクロ」とも呼ばれます。

これらの言語は、原則として、任意のGUIアプリケーションを制御するために使用できます。ただし、実際には、アプリケーションとオペレーティングシステムからのサポートが必要なため、使用は制限されていますこの制限にはいくつかの例外があります。一部のGUIスクリプト言語は、表示画面のピクセルからのグラフィカルオブジェクトの認識に基づいていますこれらのGUIスクリプト言語は、オペレーティングシステムまたはアプリケーションからのサポートに依存しません。

IBM Workplace Shellのように、GUIが適切なインターフェースを提供する場合、GUIスクリプトの作成には、 OREXXなどの汎用スクリプト言語を使用できます。

アプリケーション固有の言語

アプリケーション固有の言語は、多くの異なるカテゴリに分割できます。つまり、スタンドアロンベースのアプリ言語(実行可能)または内部アプリケーション固有の言語(Adobe、MS、およびGoogleによってそれぞれ実装されている広く配布されているスクリプトの一部としてpostscript、xml、gscript)が含まれます。アプリケーションユーザーのニーズに合わせて調整された慣用的なスクリプト言語。同様に、多くのコンピュータゲームシステムは、カスタムスクリプト言語を使用して、ノンプレイヤーキャラクターのプログラムされたアクションとゲーム環境を表現します。この種の言語は、単一のアプリケーション用に設計されています。また、表面的には特定の汎用言語(たとえば、CをモデルにしたQuakeC)に似ているかもしれませんが、それらを区別するカスタム機能があります。Emacs Lispは、 Lispの完全に形成された有能な方言ですが、Emacsの編集機能を拡張するのに最も役立つ多くの特別な機能を備えています。アプリケーション固有のスクリプト言語は、単一のアプリケーションに特化し たドメイン固有のプログラミング言語と見なすことができます。

拡張/埋め込み可能な言語

多くの言語は、アプリケーションプログラムに埋め込むことができるようにすることで、アプリケーション固有のスクリプト言語を置き換えることを目的として設計されています。アプリケーションプログラマー(Cまたは別のシステム言語で作業)には、スクリプト言語がアプリケーションを制御できる「フック」が含まれています。これらの言語は、技術的にはアプリケーション固有の拡張言語と同等ですが、アプリケーションに「共通」言語が組み込まれている場合、ユーザーはアプリケーション間でスキルを伝達できるという利点があります。より一般的な代替手段は、特定のドメインの言語を変更せずに、汎用言語がアプリケーションを制御するために使用できるライブラリ(多くの場合Cライブラリ)を提供することです。

JavaScriptは、 Webブラウザー内でスクリプトを作成するための言語として始まり、現在も主に使用されていますただし、ECMAScriptとしての言語の標準化により、汎用の埋め込み型言語として人気があります。特に、Mozillaの実装SpiderMonkeyは、 Yahoo!などのいくつかの環境に組み込まれています。ウィジェットエンジンECMAScript実装を組み込んだ他のアプリケーションには、Adobe製品のAdobe FlashActionScript)およびAdobe Acrobat ( PDFファイル のスクリプト用)が含まれます。

Tclは拡張言語として作成されましたが、 PythonPerlRubyと同様の役割で汎用言語としてより頻繁に使用されるようになりました一方、Rexxは元々ジョブ制御言語として作成されましたが、汎用言語としてだけでなく拡張言語としても広く使用されています。Perlは汎用言語ですが、Oraperl(1990)方言があり、Oracle CallInterfaceがコンパイルされたPerl4バイナリで構成されています。ただし、これはライブラリ(Perl Module)、DBD::Oracleに置き換えられました。[20] [21]

他の複雑でタスク指向のアプリケーションは、組み込みプログラミング言語を組み込んで公開し、ユーザーがどんなに洗練されていても、ユーザーインターフェイスから利用できるよりも多くの制御と機能をユーザーに提供できるようにします。たとえば、Autodesk Maya 3Dオーサリングツールには、Maya Embedded Language、またはPythonを使用してこの役割を果たす Blenderが組み込まれています。

より高速な機能の追加または微調整と実行のサイクルを必要とする他のタイプのアプリケーション(ゲームエンジンなど)も、組み込み言語を使用します。これにより、開発中に、ユーザーがアプリケーションの内部動作についての深い知識を持っていたり、微調整のたびに再構築したりする必要なしに、機能のプロトタイプをより速く、より自由に微調整できます(かなりの時間がかかる可能性があります) 。この目的で使用されるスクリプト言語は、より一般的で有名なLuaPythonから、 AngelScriptSquirrelなどのあまり知られていない言語まで多岐にわたります。

Chは、業界がC /C++アプリケーションプログラムに組み込むためのもう1つのC互換スクリプトオプションです。

も参照してください

参照

  1. ^ 「ECMAScript2019言語仕様」www.ecma-international.org 2018年4月2日取得
  2. ^ シェパード、ダグ(2000-10-16)。「初心者によるPerl入門」dev.perl.org 2011年1月8日取得
  3. ^ プログラミングは難しい、Let's Go Scripting… Larry Wall、2007年12月6日
  4. ^ コードスニペットの実行、Kotlin、2021年12月3日
  5. ^ スクリプトの実行、Kotlin、2021年12月3日
  6. ^ Gradle + Kotlin、Gradleビルドツール、2021年12月3日
  7. ^ ねえ、トニー; パペイ、ギュリ(2014)。コンピューティングユニバース:革命を通じた旅ケンブリッジ大学出版局。p。 76ISBN 978-1-31612322-5、「最新のスクリプト言語の主な特徴は、 REPLプログラミング環境と呼ばれることもある双方向性です。[…] REPL環境での使いやすさと即時実行の特徴は、スクリプト言語の定義と見なされることがあります。」{{cite book}}: CS1 maint: postscript (link)
  8. ^ ブラウン、ヴィッキー。「スクリプト言語」2009年7月22日取得
  9. ^ ルイ、ロナルド(2008)。「スクリプティングを称えて」IEEEコンピュータ。2015年9月23日にオリジナルからアーカイブされまし2013年8月27日取得
  10. ^ IBM Corporation(1967)。IBM System / 360オペレーティング・システムのジョブ制御言語(C28-6529-4)(PDF)
  11. ^ ムーアーズ、カルバン。「TRAC、リアクティブタイプライターのための手順記述言語」2001年4月25日にオリジナルからアーカイブされました2012年3月9日取得
  12. ^ Van Vleck、Thomas(ed。)「Multics用語集– A —(アクティブ機能)」2012年3月9日取得
  13. ^ バリアン、メリンダ。「VMとVMコミュニティ:過去、現在、未来」(PDF)2012年3月9日取得
  14. ^ Van Vleck、Thomas(ed。)"Multics用語集– R —(RUNCOM)" 2012年3月9日取得
  15. ^ 「グルーコード(グルーコード言語)とは何ですか?-WhatIs.comからの定義」WhatIs.com 2022-01-31を取得
  16. ^ ラーソン、クインシー。「インタプリタプログラミング言語とコンパイルプログラミング言語」無料コードキャンプ2022年2月23日取得{{cite web}}: CS1 maint: url-status (link)
  17. ^ バルキス、アントン。「スクリプトアダラ」ラジャのヒント2022年2月23日取得{{cite web}}: CS1 maint: url-status (link)
  18. ^ アクセルソン、マット。「シェルスクリプト-何を変更できますか」Linuxのヒント2022年2月23日取得{{cite web}}: CS1 maint: url-status (link)
  19. ^ 「ジョブ制御の基本(Bashリファレンスマニュアル)」www.gnu.org 2022-05-20を取得
  20. ^ Oraperl、CPAN]
  21. ^ Perl Underground Oracle FAQ
  22. ^ ヴァンロッサム、グイド(1998年1月6〜8日)。「すべてを接着する」Pythonですべてを接着します。python.org。

さらに読む

  • バロン、デビッドウィリアム(2001)。スクリプト言語の世界ISBN 0-471-99886-9

外部リンク