| パラダイム | マルチパラダイム:並行、ロジック、関数、命令型(オブジェクトベース) |
|---|---|
| デザイン: | フランシス・マッケイブ、キース・クラーク |
| 初登場 | 2003年 |
| プレビューリリース | 9-30-07 / 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 ( 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]
参考文献
- ^ abc Claburn, Thomas (2009-11-11). 「Google の「Go」という名前が「悪」という非難を招く」InformationWeek。 2010-07-22 時点のオリジナルよりアーカイブ。2009-11-14に閲覧。
- ^ ab 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。
- ^ ab Clark, KL; McCabe, FG (2006). 「Go でのオントロジー指向プログラミング」.応用知能. 24 (3): 189–204. CiteSeerX 10.1.1.117.184 . doi :10.1145/860575.860747. S2CID 2047545.
- ^ 「第 9 号 - go - 私はすでに *私の* プログラミング言語の名前を使用しています」。2009 年 11 月 10 日。2009年 11 月 14 日閲覧。
- ^ Brownlee, John (2009-11-13). 「Google はプログラミング言語に名前を付ける前に「Go」をグーグルで検索しなかった」Geek.com。2012-05-06 にオリジナルからアーカイブ。2010-01-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; et al. (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-01-06 にオリジナルからアーカイブされました。
- McCabe, Francis G. (2007 年 2 月 7 日)。Lets Go!。Network Agent Press。ISBN 978-0-9754449-1-7。
- C. Varela; et al. (2004). Erlang によるエージェント システムのモデリングについて。ACM SIGPLAN Erlang Workshop '04。2009 年 11 月 15 日時点のオリジナルよりアーカイブ。2009年 11 月 12 日閲覧。
外部リンク
- Githubページ
- 99-bottles-of-beer.net のコードサンプル
