Javaでのスクリプトの概要、パート1

Javaでのスクリプトからの抜粋:言語、フレームワーク、およびパターン

DejanBosanac著

Addison WesleyProfessionalが発行

ISBN-10:0-321-32193-6

ISBN-13:978-0-321-32193-0

最近まで、Javaプラットフォームでのスクリプト作成に興奮したのはハードコアだけでしたが、SunがPython、Ruby、JavaScriptなどの動的に型指定された言語に対するJREのサポートを強化する前のことでした。今後のJavaでのスクリプトからのこの2部構成の抜粋:言語、フレームワーク、およびパターン(Addison Wesley Professional、2007年8月)Dejan Bosanacは、ほとんどのスクリプト言語とJavaなどのプログラミング言語との違いを絞り込み、スクリプトがなぜJavaプログラミングスキルセットへの時間価値のある追加。

Javaでのスクリプトの概要:言語、フレームワーク、およびパターン

この本の主なトピックは、スクリプト技術とJavaプラットフォームの相乗効果です。Java開発者がより強力な開発環境を作成するために使用できるプロジェクトと、スクリプトを便利にするいくつかのプラクティスについて説明します。

Javaの世界でのスクリプトの適用について説明する前に、一般的なスクリプトの背後にある理論と、情報技術インフラストラクチャでのその使用について要約します。これは、この本の最初の2つの章のトピックであり、スクリプトテクノロジのより良い視点と、このテクノロジがJavaプラットフォーム内でどのように役立つかを示しています。

まず、スクリプト言語とは何かを定義し、その特性を説明する必要があります。それらの特性は、それらを使用できる(すべき)役割を大きく決定します。この章では、スクリプト言語という用語の意味を説明し、その基本的な特徴について説明します。

この章の終わりに、スクリプト言語とシステムプログラミング言語の違いと、これらの違いが開発における特定の役割にどのように適しているかについて説明します。

バックグラウンド

スクリプト言語の定義はあいまいであり、実際の世界でのスクリプト言語の使用方法と矛盾する場合があるため、プログラミングとコンピューティング全般に関する基本的な概念のいくつかを要約することをお勧めします。この要約は、スクリプト言語を定義し、その特性について説明するために必要な基盤を提供します。

最初から始めましょう。プロセッサは、プロセッサのレジスタまたは外部メモリのいずれかのデータを操作するマシン命令を実行します。簡単に言うと、マシン命令は2進数(0と1)のシーケンスで構成され、それが実行される特定のプロセッサに固有です。マシン命令は、プロセッサに実行する必要のある操作を指示する操作コードと、操作を実行する必要のあるデータを表すオペランドで構成されます。

たとえば、あるレジスタに含まれる値を別のレジスタに含まれる値に追加するという単純な操作について考えてみます。ここで、8ビットの命令セットを備えた単純なプロセッサを想像してみましょう。最初の5ビットはオペコード(たとえば、レジ​​スタ値の追加の00111)を表し、レジスタは3ビットパターンでアドレス指定されます。この簡単な例は次のように書くことができます。

00111 001 010

この例では、001と010を使用して、プロセッサのレジスタ番号1と2(それぞれR1とR2)をアドレス指定しました。

この基本的な計算方法は何十年も前からよく知られており、あなたはそれをよく知っていると思います。さまざまな種類のプロセッサは、命令セットの外観(RISCまたはCISCアーキテクチャ)に関して異なる戦略を持っていますが、ソフトウェア開発者の観点から、唯一の重要な事実は、プロセッサがバイナリ命令のみを実行できることです。使用されているプログラミング言語に関係なく、結果として得られるアプリケーションは、プロセッサによって実行される一連のマシン命令です。

時間の経過とともに変化しているのは、機械命令が実行される順序を人々がどのように作成するかです。この順序付けられた一連の機械命令は、コンピュータプログラムと呼ばれます。ハードウェアがより手頃な価格でより強力になるにつれて、ユーザーの期待が高まります。科学分野としてのソフトウェア開発の全体的な目的は、開発者が以前と同じ(またはさらに少ない)労力でより複雑なアプリケーションを作成できるようにするメカニズムを提供することです。

特定のプロセッサの命令セットは、その機械語と呼ばれます。機械語は、第1世代のプログラミング言語として分類されます。この方法で作成されたプログラムは、特定のプロセッサのアーキテクチャに合わせて最適化されているため、通常は非常に高速です。しかし、この利点にもかかわらず、人間は0と1の大きなシーケンスをうまく処理できないため、人間が機械語で大きくて安全なアプリケーションを作成することは(不可能ではないにしても)困難です。

この問題を解決するために、開発者は特定のバイナリパターンのシンボルの作成を開始しました。これにより、アセンブリ言語が導入されました。アセンブリ言語は第2世代のプログラミング言語です。アセンブリ言語の命令は、2進数を、ADD、SUBなどの覚えやすいキーワードに置き換えるという点で、マシン命令の1レベル上にあります。そのため、前述の簡単な命令の例をアセンブリ言語で次のように書き直すことができます。

R1、R2を追加

この例では、ADDキーワードは命令のオペコードを表し、R1とR2は操作に関係するレジスタを定義します。この単純な例だけを観察しても、アセンブリ言語によって人間がプログラムを読みやすくなり、より複雑なアプリケーションの作成が可能になったのは明らかです。

ただし、これらはより人間指向ですが、第2世代の言語はプロセッサ機能を拡張しません。

高水準言語を入力します。これにより、開発者は高水準のセマンティック形式で自分自身を表現できます。ご想像のとおり、これらの言語は第3世代プログラミング言語と呼ばれます。高水準言語は、さまざまな強力なループ、データ構造、オブジェクトなどを提供し、それらを使用して多くのアプリケーションを作成するのをはるかに簡単にします。

時間の経過とともに、さまざまな高級プログラミング言語が導入され、それらの特性は大きく変化しました。これらの特性のいくつかは、次のセクションで説明するように、プログラミング言語をスクリプト(または動的)言語として分類します。

また、ホストマシンでのプログラミング言語の実行方法にも違いがあります。通常、コンパイラは高級言語構造をメモリに常駐するマシン命令に変換します。この方法で記述されたプログラムは、初期のコンパイラではシステムリソースを効率的に使用できなかったため、最初はアセンブリ言語で記述されたプログラムよりも効率がわずかに劣りましたが、時間が経つにつれてコンパイラとマシンが改善され、システムプログラミング言語がアセンブリ言語よりも優れたものになりました。最終的に、高級言語は、ビジネスアプリケーションやゲームから、通信ソフトウェアやオペレーティングシステムの実装まで、幅広い開発分野で普及するようになりました。

ただし、高レベルのセマンティック構造をマシン命令に変換する別の方法があります。それは、実行時にそれらを解釈することです。このように、アプリケーションは元の形式のスクリプトに常駐し、コンストラクトは実行時にインタープリターと呼ばれるプログラムによって変換されます。基本的には、アプリケーションのステートメントを読み取って実行するインタープリターを実行します。スクリプト言語または動的言語と呼ばれるこのような言語は、システムプログラミング言語よりもさらに高いレベルの抽象化を提供します。これらについては、この章の後半で詳しく説明します。

これらの特性を備えた言語は、プロセスの自動化、システム管理、既存のソフトウェアコンポーネントの結合など、特定のタスクに自然に適合します。要するに、システムプログラミング言語によって導入された厳密な構文と制約が開発者と彼らの仕事の間で邪魔をしているところならどこでも。スクリプト言語の通常の役割の説明は、第2章「スクリプト言語の適切なアプリケーション」の焦点です。

しかし、これはすべてJava開発者としてのあなたと何の関係があるのでしょうか。この質問に答えるために、最初にJavaプラットフォームの歴史を簡単に要約しましょう。プラットフォームが多様化するにつれて、開発者が利用可能なシステムの大部分で実行できるソフトウェアを作成することがますます困難になりました。これは、Sunが「一度書けばどこでも実行できる」シンプルさを提供するJavaを開発したときです。

Javaプラットフォームの背後にある主なアイデアは、仮想マシンと呼ばれるソフトウェアコンポーネントとして仮想プロセッサを実装することでした。このような仮想マシンがある場合、特定のハードウェアプラットフォームやオペレーティングシステムの代わりに、そのプロセッサのコードを記述してコンパイルできます。このコンパイルプロセスの出力はバイトコードと呼ばれ、実際にはターゲット仮想マシンのマシンコードを表します。アプリケーションが実行されると、仮想マシンが起動され、バイトコードが解釈されます。この方法で開発されたアプリケーションは、適切な仮想マシンがインストールされている任意のプラットフォームで実行できることは明らかです。ソフトウェア開発へのこのアプローチは、多くの興味深い用途を発見しました。

Javaプラットフォームの発明の主な動機は、簡単でポータブルなネットワーク対応のクライアントソフトウェアを開発するための環境を作成することでした。しかし、主に仮想マシンによって導入されたパフォーマンスのペナルティのために、Javaはサーバーソフトウェア開発の分野で現在最も適しています。パーソナルコンピュータの速度が上がるにつれて、Javaで記述されるデスクトップアプリケーションが増えていることは明らかです。この傾向は続くだけです。

スクリプト言語の基本的な要件の1つは、インタプリタまたはある種の仮想マシンを用意することです。 JavaプラットフォームにはJava仮想マシン(JVM)が付属しており、さまざまなスクリプト言語のホストになることができます。今日、Javaコミュニティではこの分野への関心が高まっています。 Java開発者に、従来のスクリプト言語と同じパワー開発者を提供しようとしているプロジェクトはほとんどありません。また、JVM内でPythonなどの動的言語で記述された既存のアプリケーションを実行し、それを別のJavaアプリケーションまたはモジュールと統合する方法もあります。

これがこの本で論じていることです。このアプローチのすべての長所と短所、アプリケーションアーキテクチャでスクリプトを最適に使用する方法、およびJVM内で現在利用可能なツールについて説明しながら、プログラミングにスクリプトアプローチを採用します。