| 行く! | |
|---|---|
| パラダイム | マルチパラダイム:並行、論理、関数、命令型(オブジェクトベース) |
| デザイン: | フランシス・マッケイブ、キース・クラーク |
| 初登場 | 2003 (2003年) |
| プレビューリリース | 9-30-07 / 2007年9月30日 (2007年9月30日) |
| タイピングの規律 | 強い |
| OS | Unixライク |
| ライセンス | GPLv2 |
| 影響を受けた | |
| プロローグ[ 1 ] | |
Go!は、 Prologのような論理型プログラミング言語の伝統を受け継ぐエージェントベースプログラミング言語です。[ 1 ] 2003年に Francis McCabe とKeith Clark によって論文で発表されました。[ 2 ]
Go! の作者たちは、Go! を「安全で実用品質のエージェントベースアプリケーションを開発するニーズに応えたマルチパラダイムプログラミング言語です。マルチスレッド、強い型付け、高階(関数型プログラミングの意味で)です。リレーション、関数、アクションプロシージャの定義を備えています。スレッドはアクションプロシージャを実行し、必要に応じて関数を呼び出し、リレーションを照会します。異なるエージェント内のスレッドは、非同期メッセージを使用して通信および調整を行います。同じエージェント内のスレッドは、Lindaスタイルのタプルストアとして機能する共有動的リレーションを使用することもできます。」[ 2 ]
著者らはまた、この言語が論理的、関数的、命令型のプログラミングスタイルを統合しているため、オントロジーを表現するのに適していると主張している。 [ 3 ]
次の例は、Go!の「オントロジー指向」の型と宣言のスタイルを示しています。[ 3 ]
性別::=男性|女性。person <~ { dayOfBirth: [] =>日. age :[] =>整数. sex :[] =>性別. name :[] =>文字列. home :[] =>文字列. lives :[文字列]{}}.person :[文字列,曜日,性別,文字列] $ = person .person ( Nm , Born , Sx , Hm )..{ dayOfBirth () => Born . age () => yearsBetween ( now (), Born ). sex () => Sx . name () => Nm . home () => Hm . lives ( Pl ) :- Pl = home (). yearsBetween: [ integer , day ] => integer . yearsBetween (...) => .. }.newPerson: [文字列,日,性別,文字列] =>人.newPerson ( Nm 、Born 、Sx 、Hm ) => $ person ( Nm 、Born 、Sx 、Hm )。::=である新しい代数データ型を定義します。<~規則はインターフェース型を定義します。つまり、 の特性を示すとともに、これらの特性に対する型制約を与えます。は整数値を持つ関数型プロパティであり、 は文字列に対する単項関係であり、 は型 のオブジェクトである値を持つ関数型プロパティであるpersonことを記述します。agelivesdayOfBirthday$=、関数 を持つ理論ラベルも存在することを示します。personpersonpersonstringdaySexstring2009年11月、GoogleはGoという似た名前のプログラミング言語(感嘆符なし)をリリースしました。マッケイブ氏は、Googleが「我々を圧倒している」と懸念し、言語名の変更を要請しました。[ 1 ] [ 4 ]この問題はテクノロジー系ニュースサイトで注目を集め、中にはGo!を「マイナー」と評するサイトもありました。[ 5 ]この件に関するスレッドは、2010年10月12日にGoogleの開発者によって「残念」というカスタムステータスでクローズされ、次のようなコメントが付けられました。「Goという名前のコンピューティング製品やサービスは数多くあります。リリースから11ヶ月間、この2つの言語の混同はほとんど見られませんでした。」[ 6 ]