スクリプト言語

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

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

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

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

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

いくつかのよく知られた例:

  • BashUnixおよびUnixライクな オペレーティングシステムおよび環境で使用するためのインタプリタスクリプト言語
  • PowerShellMicrosoftWindowsオペレーティングシステムで使用するためのスクリプト言語
  • sedAWK、主にUnixライクな環境で使用される2つのテキスト処理言語。
  • Perl[2]後に汎用言語に発展したテキスト処理言語であり、さまざまなアプリケーションの拡張言語としても使用されます。
  • 汎用スクリプト言語であるPythonは、拡張言語としても使用されます。
  • Tcl[3] GUIアプリケーションを作成するために1990年代に普及した、Unixライクな環境向けのスクリプト言語。
  • JavaScript(後の:ECMAScript)は、元々は非常に小さく、ドメイン固有の言語でしたが、表示されているWebページを動的に変更するためにWebブラウザー内で実行するように制限されていましたが、後に広く移植可能な汎用プログラミング言語に発展しました。
  • Visual Basic for ApplicationsMicrosoftOfficeアプリケーション専用の拡張言語
  • Luaは、一般的なアプリケーションの拡張言語として使用するために設計された言語であり、さまざまなアプリケーションでそのように使用されます。
  • Lispは、Emacsエディター用のEmacs Lispなど特定のアプリケーション向けの汎用言語および拡張言語のファミリーです
  • 一部のゲームシステムは、カスタム言語を使用して拡張機能をスクリプト化することで機能が大幅に拡張されています。特に、Second Life 仮想世界Linden Scripting Languageを使用)やRailroadシミュレーターのTrainzフランチャイズ(TrainzScriptを使用)です。Wesnothなどの一部のゲームでは、ユーザーは、ユーザーが提供したスクリプトによって定義されたゲームのカスタムバリアントをプレイします。

特徴

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

たとえば、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()のよう宣言型ステートメントは必要ありません

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

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

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

歴史

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

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

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

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

タイプ

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

グルー言語

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

グルー言語は、以下の記述と保守に特に役立ちます。

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

グルー言語の例:

オペレーティングシステムまたはアプリケーションコンポーネントに公開されているマクロ言語は、グルー言語として機能します。これらには、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含める一連の計算機は、これの後継と見なすことができます。ほとんどのグラフ電卓(ほとんどの場合、基本バリアント、場合によってはLisp派生、さらにまれにC派生)の主要なオンボード高水準プログラミング言語は、多くの場合、グラフ、リスト、行列などの計算機能を結合できます。この記事でグルー言語としてリストされているバリアントに近い可能性のある、より包括的なBasicバージョンのサードパーティ実装が利用可能です。また、TIおよびHPグラフ電卓にPerl、Rexx、またはさまざまなオペレーティングシステムシェルを実装する試みについても説明します。 PCベースのCクロスコンパイラCとPerl、Rexx、AWK、およびシェルスクリプトをPerlに変換するツールで使用される一部のTIおよびHPマシンでは、Perlとの間でVBScriptを使用して、最終的な実装のためにグルー言語でプログラムを作成できます。 (コンパイルされたプログラムとして)計算機で。[要出典]

エディター言語

テキストエディタの数エディタに組み込まれたマクロ言語、例えば、使用してのいずれかで書かれたマクロをサポートSemWareエディタ(TSE)を、VIが向上(VIM)、又は外部の実装、例えば、使用XEDIT、またはその両方を、例えば、KEDITテキストエディタと編集マクロは、CMSのFILELISTやRDRLISTなど、他のアプリケーションを提供するために内部で使用されることがあります

ジョブ制御言語とシェル

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

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 AcrobatPDFファイルのスクリプト用)が含まれます。

Tclは拡張言語として作成されましたが、PythonPerlRuby同様の役割で汎用言語としてより頻繁に使用されるようになりました。一方、Rexxはもともとジョブ制御言語として作成されましたが、汎用言語だけでなく拡張言語としても広く使用されています。 Perlは汎用的な言語ですが、からなる、Oraperl(1990)の方言を持っていたのPerlと4バイナリのOracle Call Interfaceのでコンパイル。これは、ライブラリー(Perlのモジュール)に置き換えられているのでしかし、持っているDBD :: Oracleの[12] [13]

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

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

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

も参照してください

参考文献

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

さらに読む

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

外部リンク