| 行く! | |
|---|---|
| パラダイム | マルチパラダイム:並行、論理、関数、命令型(オブジェクトベース) |
| デザイン: | フランシス・マッケイブ、キース・クラーク |
| 初登場 | 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 - 型ルールは、型、、の 4 つの指定されたパラメータに基づいて型 の特性プロパティを定義する (つまり、インターフェイスを実装する)理論に対して
$=、関数 を持つ理論ラベルも存在することを示します。personpersonpersonstringdaySexstring
Googleとの対立
2009年11月、GoogleはGoという似た名前のプログラミング言語(感嘆符なし)をリリースしました。マッケイブ氏は、Googleが「我々を圧倒している」と懸念し、言語名の変更を要請しました。[ 1 ] [ 4 ]この問題はテクノロジー系ニュースサイトで注目を集め、中にはGo!を「マイナー」と評するサイトもありました。[ 5 ]この件に関するスレッドは、2010年10月12日にGoogleの開発者によって「残念」というカスタムステータスでクローズされ、次のようなコメントが付けられました。「Goという名前のコンピューティング製品やサービスは数多くあります。リリースから11ヶ月間、この2つの言語の混同はほとんど見られませんでした。」[ 6 ]
参考文献
- ^ a b cクラバーン、トーマス (2009年11月11日). 「Googleの『Go』という名前が『邪悪』という非難を招く」" . InformationWeek . 2010年7月22日時点のオリジナルよりアーカイブ。2009年11月14日閲覧。
- ^ a b Clark, KL; McCabe, FG (2003). 「Go! マルチスレッド型熟考エージェント」自律エージェントとマルチエージェントシステムに関する第2回国際合同会議議事録. pp. 964– 965. CiteSeerX 10.1.1.117.184 . doi : 10.1145/860575.860747 . ISBN 978-1581136838. S2CID 2047545 .
- ^ a b Clark, KL; McCabe, FG (2006). 「Go言語によるオントロジー指向プログラミング!」.応用知能. 24 (3): 189– 204. doi : 10.1007/s10489-006-8511-x .
- ^ 「第9号 - go - 私はすでに *私の* プログラミング言語の名前を使用しています」 2009年11月10日. 2009年11月14日閲覧。
- ^ Brownlee, John (2009年11月13日). 「Googleはプログラミング言語に名前を付ける前に「Go」を検索しなかった」 . Geek.com.オリジナルより2012年5月6日アーカイブ。 2010年1月18日閲覧。
- ^ 「私はすでに*私の*プログラミング言語の名前を使用しています · Issue #9 · golang/go」 . GitHub . 2019年7月4日閲覧。
さらに読む
- Clark, KL; McCabe, FG (2003). 「Go言語によるオントロジー指向プログラミング」(PDF) .
- Clark, KL; McCabe, FG (2004). 「Go!—マルチスレッドエージェント実装のためのマルチパラダイムプログラミング言語」 . Annals of Mathematics and Artificial Intelligence . 41 ( 2–4 ): 171– 206. CiteSeerX 10.1.1.133.1069 . doi : 10.1023/B:AMAI.0000031195.87297.d9 . S2CID 6992205 .
- R. Bordini他 (2006). 「マルチエージェントシステム向けプログラミング言語とプラットフォームの概説」 Informatica 30 : 33–44 . 2009年11月15日時点のオリジナルよりアーカイブ。
- M. Fisher; et al. (2007). 「計算論理とエージェント - 現在の技術と将来の動向のロードマップ」 .計算知能. 23 (1): 61– 91. CiteSeerX 10.1.1.114.6149 . doi : 10.1111/j.1467-8640.2007.00295.x . S2CID 3393868. 2013年1月6日時点のオリジナルよりアーカイブ。
- マッケイブ、フランシス・G.(2007年2月7日)『レッツ・ゴー!』ネットワーク・エージェント・プレス、ISBN 978-0-9754449-1-7。
- C. Varela; et al. (2004). Erlangを用いたエージェントシステムのモデリングについて. ACM SIGPLAN Erlang Workshop '04. 2009年11月15日時点のオリジナルよりアーカイブ。 2009年11月12日閲覧。