X10(プログラミング言語) – ウィキペディア
X10 | |
---|---|
パラダイム: | オブジェクト指向のプログラミング言語 |
公開年: | 2004年 |
デザイナー: | Kemal Ebcioglu、Vivek Sarkar、Vijay Saraswat |
デベロッパー: | KemalEbcioğlu、Vijay Saraswat und Viole Sarkar(IBM) |
現行版: | 2.6.2 [初め] (2019年1月8日) |
タイピング: | 強い、静的 |
に影響を受けた: | Java、C ++、Scala |
オペレーティング·システム: | aix、linux、macos、windows/cygwin |
ライセンス: | Eclipse Public License 1.0 |
http://x10-lang.org/ |
X10 最大10,000個のハードウェアスレッドを備えたハイエンドハードウェア用の並行したオブジェクト指向プログラミング言語です [初め] 。 2004年にIBMでPERCSプロジェクトの一部としてトーマスJ.ワトソンリサーチセンターで開発されました。プログラミング言語のターゲットプラットフォームは、異なる計算単位(非均一なクラスターコンピューティング)を備えたクラスターシステムです。このようなシステムのプログラミング生産性は、X10という名前につながった10倍に増加させます。 [2] X10の開発は、DARPAの高生産性コンピューティングシステム(HPCS)プログラムによって資金提供されました。
X10は、分割されたグローバルアドレススペース(PGAS)モデルに従って並列プログラミング用に特別に設計されています。 X10はこれを非同期に拡張し、APGASモデルにつながります。計算は異なる場所に分かれています。これらには、このデータとこのデータで動作する1つ以上のアクティビティが含まれています。 X10には、オブジェクト指向プログラミング用のタイプシステムが限られています。また、カスタムプリミティブなどの他のプロパティもあります struct -Types、グローバルに分散した配列、構造化された構造的および非構造化された並列性。 [初め]
活動 [ 編集 | ソーステキストを編集します ]
アクティビティは、独自の名前のない軽量スレッドです。非同期アクティビティはコマンドによって実行されます
作成した。ある p 活動が実行される場所と s コマンド(英語声明)。アクティビティは特定の場所で作成され、サービスライフ全体にわたってそこに残ります。キーワード付き ここ 場所のアクティビティにアクセスできます。 [3]
場所 [ 編集 | ソーステキストを編集します ]
場所には、このデータに取り組むデータとアクティビティが含まれています。自分のヒープと独自のスレッドを備えた分散Java仮想マシン(JVM)の独自の結び目として場所を想像できます。すべての場所が注文されていると想定できます。それはありますか p 場所に、そうすることができます p.next 次の場所でアクセスしてください。 [3]
新しい場所を作成する明示的なコマンドはありません。むしろ、すべてのアクティビティが明示的な数の場所で開始されます。これにより、プログラム全体に固定された数の場所が生じ、プログラム全体の間は一定のままです。プログラムの場所は出身です 0 それまで place.max_places-1 番号が付けられており、ソートされたシーケンスにあります place.places() 保存。キーワードを使用した現在のアクティビティの場所に ここ アクセスしてください。 [初め]
場所に応じてアクセスは静的フィールドによるものです 位置 すべてのオブジェクトが含まれています。場所のオブジェクトのみが、この場所の他のオブジェクトの非ファイナルフィールドにアクセスできます。別の場所のオブジェクトの非ファイナルフィールドにアクセスしようとする試みは、1つで失敗します BadPlaceException(BPE) 。 [3] ただし、式を使用できます で 個々のアクティビティを同期して他の場所に移動します。すべての分散操作と同様に、これは非常に高価な操作です。ただし、X10のマルチコアプログラミングの基礎を形成します。 [初め]
オブジェクトは、コンストラクターコールが実行される場所で生成されます。アクティビティとは対照的に、オブジェクトは場所を変更することはできません。それは別の場所またはオーバーにのみコピーすることができます GlobalRef 他の場所で参照されます。 [初め]
分布と分散アレイ [ 編集 | ソーステキストを編集します ]
分布分散分布配列場所に。分布は、配列の各要素に場所を割り当てるオブジェクトです。分散配列の要素をオンにする必要があるのは、配列作成のためにすでに知られている必要があります。分散アレイのこれらの要素のみが、この場所にある場所でもアクセスできることに注意する必要があります。 [3]
核 [ 編集 | ソーステキストを編集します ]
他の多くのプログラミング言語と同様に、Simpleコマンドの背後にはいくつかのマシンコマンドがあり、複数のマシンコマンドを作成し、重要なセクションになります。これは、そのようなコマンドが並行して実行される他の1つのコマンドによって潜在的に中断される可能性があることを意味します。 x10でこれを防ぐために、個々のコマンドは
囲まれます。ある c ブールガーディアンの状態と s 実行される原子司令部(英語 声明 )。に限って c 実行は真実ではありません。もしも c Trueはそうです s アトミックは留めます。 [3]
アトミック全体の方法を実行するために、あなたは 原子 前に書いてください。メソッド インクリメント たとえば、アトミックが実行されます [3] :
原子 ブール インクリメント () { 価値 ++ ; 戻る 真実 ; }
時計 [ 編集 | ソーステキストを編集します ]
多くの並列アルゴリズムは異なるフェーズに分割され、次のフェーズが開始される前に、フェーズのすべてのアクティビティを処理する必要があります。 X10では、これらのフェーズはそのように呼ばれています 時計 分離。そのような時計にアクティビティを結合するために、あなたはそれをとして定義します clocked() 対応するクロックオブジェクトを使用します。 [初め]
次の例では、2つのアクティビティがあります a と b クロックオブジェクトによって同期され、両方のアクティビティの第1フェーズの費用が最初に出力され、次に両方のアクティビティの第2フェーズの費用が発行されるようにします [注1] :
//クロックオブジェクトを作成します ヴァル 時計 = 時計 。 作る (); //アクティビティAを作成し、それらをクロックにバインドします async クロックされた ( 時計 )) { // bに並行してテキストを配ります 印刷 ( 「A:第1フェーズ。」 ); // bを待ちます 時計 。 Adavanceall (); 印刷 ( 「A:第2フェーズ。」 ); } //アクティビティBを作成し、それらをクロックにバインドします async クロックされた ( 時計 )) { //テキストに並行してください 印刷 ( 「B:第1フェーズ。」 ); // aを待ちます 時計 。 Adavanceall (); 印刷 ( 「B:第2フェーズ。」 ); }
例の考えられる結果は、次のとおりです。
A:第1フェーズ。 B:第1フェーズ。 B:第2フェーズ。 A:第2フェーズ。 、
いいえ
A:第1フェーズ。 A:第2フェーズ。 B:第1フェーズ。 B:第2フェーズ。 。
クラスには、Javaに類似したデータとコードが含まれています。クラスには、異なるフィールド、プロパティ、メソッド、コンストラクターを含めることができます。さらに、クラスでは、最大1つまたはまったく親クラスを指定します。クラスはいくつかのインターフェイスを実装できます。
クラスは可能です 最後の マークされます。このようなクラスはもはや継承できません。
フェルダー [ 編集 | ソーステキストを編集します ]
フィールドは、クラスに属するデータを指定します。フィールドが変更可能かどうかは区別されます(キーワードで特徴付けられます だった )、または不変(キーワードで特徴付けられる ヴァル ) それは。変更可能なフィールドのタイプは常に指定する必要があります。これは、コロンの後の変数の名前に従います。 uncal -goフィールドはすでに値で初期化できますが、必要はありません。
//「人口」という名前の変更可能なフィールド、整数のタイプ、および初期値42 だった 人口 : int = 42 ; //整数のタイプ、および初期値のない名前の「GrowthRates」という名前の変更可能なフィールド だった 成長速度 : int ;
変更不可能なフィールドのタイプを明示的に指定する必要はありません。また、初期化値から暗黙的に導出することもできます。不変のフィールドは、クラスのコンストラクターで初期化されている限り、初期化する必要はありません。
//「pi」という名前の不変のフィールド、二重の明示的なタイプ、初期値なし ヴァル pi : ダブル ; //「真実」という名前の変更不可能なフィールド、暗黙のタイプの整数から、初期値42から ヴァル 真実 = 42 ;
フィールドはオブジェクト特異的または静的です(キーワード付き 静的 マークされます。デフォルトでは、フィールドはオブジェクト固有です。つまり、各オブジェクトにはフィールドの独自のインスタンスがあります。フィールドが静的である場合、すべてのオブジェクトにこのフィールドに1つのインスタンスしかありません。 x10では、静的変数は常に変更できない必要があります。
//「pi」という名前の静的、不変のフィールド、暗黙のタイプはダブル、初期値を持つフィールド 静的 ヴァル pi = 3 、 141 ; //オブジェクト - 「真実」と呼ばれる特異的で不変のフィールド、整数の暗黙的なタイプ、および初期値のあるフィールド ヴァル 真実 = 42 ;
2つのX10実装があります。 ネイティブX10 と 管理されたX10 。ネイティブX10はC ++に基づいており、プロセス上の場所を描写しています。次のオペレーティングシステムで利用できます:Linux、AIX、Mac OS、Cygwin、Blue Gene。マネージドX10はJVMに基づいています。 JVMプロセスを描いた場所。 Javaに基づいているため、Java 6のすべてのバージョンでオペレーティングシステムに関係なく実行されます。 [4]
- ↑ a b c d そうです f g Vijay Saraswat、Bard Bloom、Igor Peshansky、Olivier Tardieu、David Grove、: X10言語仕様バージョン2.6.2 。 2019、 S. 1–303 ( sourceforge.net [PDF; 1.5 MB ; 2019年1月4日にアクセス])。
- ↑ フィリップ・チャールズ、クリスチャン・グロソフ、ヴィジェイ・A・サラスワット、他 X10:不均一なクラスターコンピューティングに対するオブジェクト指向のアプローチ 。の: oopsla 。 2005年、 S. 519–538 、doi: 10.1145/1094811.1094852 。
- ↑ a b c d そうです f Vijay Saraswat、Radha Jagadeesan: 同時クラスタープログラミング 。の: コンピューターサイエンスの講義ノート 。 バンド 3653 。 Springer、Berlin Heidelberg 2005、 S. 353–367 、doi: 10,1007/11539452_28 。
- ↑ デビッド・グローブ、ヴィジェイ・サラスワット、オリビエ・テルディウ: X10でスケーラブルな並列アプリケーションの開発 。 2012、 S. 1–85 ( オンライン [PDF; 1.3 MB ; 2013年8月26日にアクセス])。
- ↑ アクティビティにはX10に名前がありません。例では、アクティビティは教訓的な理由でのみ名前が付けられています。
Recent Comments