«前の日記(2009-10-31) 最新 次の日記(2010-02-01)» 編集

Matzにっき


2009-11-13 [長年日記]

_ [言語] The Go Programming Language

もう知っている人は知っているGoogleからのシステムプログラミング新言語Go。

すっかり祭りには乗り遅れた感があるけど、少しだけコメントをつけておこう。

目次

  • 言語仕様
  • 言語実装
  • 技術的でない話
  • まとめ

言語仕様

総合的に見て、非常にバランスを考えているように思える。 JavaやC++のような複雑さを排して、シンプルに徹する一方、 言語好きを刺激するような新しいアイディアをそこかしこに配置している。

特徴である「コンパイルが高速」というのも、 このシンプルな言語仕様が寄与していると思われる。

個人的に、注目したのはオブジェクト指向機能と、並列機能。

interfaceによる、継承のないオブジェクト指向(duck typing)は、かなり私好みである。 昔からこういう言語が欲しかった。interfaceのみ動的結合を許すというのも Satherを思い起こさせて好印象。

ただし、私が見た範囲内では、実装の継承(共有)は提供されないみたいなので、 Javaのinterface同様、コンポジションを強制されることになるので、 そこは残念。

それから、goroutineなる並列実行機能。 Erlangを意識してるのかな。でも、それ以上に使いやすそうな印象。

go 式

だけで並列実行が開始できるのは大胆である。 ほとんどのオブジェクトが値渡し(コピーされる)とあいまって、 効率よく並列実行できそう。

あと、多値を活用しているもの面白い。 成功したかどうかを2番目の値で返すところとかもErlangを思い起こさせる。

「逆転した型宣言」は、はじめはギョッとしたけど、 慣れたら結構良いかもしれない。

言語実装

コマンド名! 8cとかなんだよって感じ。

ソースコードを眺めたが、正直、一番興味があるランタイムの部分は よくわからなかった。だいぶ慣れないとなにがどこにあるのかよくわからない。

GCはシンプルなマーク・スイープだった。

goroutineのsegmented stackの実装に興味があったのだが、 まだみつからず。たぶん、そこはランタイムじゃなくて、 コンパイラそのものを見ないとわかんないんだろうな。

技術的でない話

「Goが登場したからには(Java/C++/Python)はお払い箱」みたいな エントリをいくつか見かけたけど、まだまだそういうレベルではないと思う。

Goは非常に興味深い言語だし、当面いろいろと話題を提供してくれるとは思うけど、 これが定着するか、成功した言語になるかどうかは、長い目で見ないとわからないと思う。

GoogleやRob PikeやKen Thompsonのネームバリューのおかげで、 普通なら10年かかるプログラミング言語のブランド確立を一瞬で達成してしまった Goだけど、成熟度としてはまだまだなので、当分はそのギャップに苦しむ(?)ことに なるんじゃないかな。

そこを乗り越えて、「一人前の言語」になっていくことを期待したい。

まとめ

  • 言語の成功は長い目で見よう
  • Goガンバレ(えらそう)
本日のツッコミ(全30件) [ツッコミを入れる]
_ とおりすがり (2009-11-13 10:35)

実装の共有は、型の埋め込み(embedding)で表現できるようです。 <br>http://golang.org/doc/effective_go.html#embedding <br>type A struct { <br> Foo; <br> x int; <br>} <br>コンポジションのように見えますが、このケースでは Foo のメソッドが <br>A のメソッドとして露出(昇格)するので、明示的な委譲は不要 です。 <br>もちろん、Foo のメソッドを A のメソッドが上書きすることも可能ということで、 <br>今後の発展をニヤニヤしながら見守りたいですね(えらそう)。

_ まつもと ゆきひろ (2009-11-13 10:45)

おお、そうでしたか。気づきませんでした。 <br>今後が楽しみですよね。

_ 13日(金) (2009-11-13 11:21)

ただの感想ですが Pascal + Javascript みたいに見えます

_ とおりすがり (2009-11-13 13:26)

Goが登場したからには(Java/C++/Python)はお払い箱」みたいな エントリどこにあるの? <br>Rubyお払い箱なら見たけどw

_ kyon (2009-11-13 14:15)

var x int = 0;のシンタクスシュガーがx := 0;なので,Pascalぽくはないかと。Javascriptぽいのはプロトタイプ継承ぽい気がするので同意です。そして、真の馬鹿目線(『コードリーディング』,p65)でいくと、C/C++/Javaのレイヤの言語がかしこくなってくれるのは、上のレイヤのスクリプト言語Ruby/Python・・にとって大歓迎ですよね。Goは当面馬鹿丸出しで、下のレイヤを学びたくなるような登場の仕方をしましたね(幻滅期をどう乗り越えるかも興味しんしん)。

_ ben (2009-11-13 18:32)

C言語がUNIX開発と関係してるように、 <br>この言語もOS作成を考慮してたりするんですかね。 <br>配列やスライスとか見るとそんな気が。

_ 匿名 (2009-11-13 19:30)

Goと言う名前にツッコミが入ってますね <br>http://www.atmarkit.co.jp/news/200911/12/goname.html

_ hnakamur (2009-11-13 20:29)

#コメントが反映されないのでリトライします。重複していたら消してください。リンクが多すぎでスパムと思われているのかな。httpのhを取ってみます。 <br> <br>goroutineとchannelについてはErlangのをより使いやすくしたという印象を私も持ちました。 <br> <br>継承が無いのでコンポジションを強制されるのはそのとおりなのですが、Javaと違っていちいち委譲メソッドを定義しなくても中の要素のメソッドを呼べるようになっています。 <br>ttps://go.googlecode.com/hg/doc/GoCourseDay2.pdf <br>のp.38以降に説明があります。ラップした型に同名のメソッドを定義することでメソッドのオーバーライドもできます。#あ、最初の方のコメントにも書いてありましたね。 <br> <br>以下の3つのスライドはホームページのDocumentsにリンクがなくて、ソースのリポジトリにしかないのですが、詳しく説明されているので一読をお勧めします。 <br>ttps://go.googlecode.com/hg/doc/GoCourseDay1.pdf <br>ttps://go.googlecode.com/hg/doc/GoCourseDay2.pdf <br>ttps://go.googlecode.com/hg/doc/GoCourseDay3.pdf <br> <br>6gなどのコマンド名はPlan 9のCコンパイラに由来しているそうですよ。 <br>ttp://golang.org/doc/go_faq.html#What_kind_of_a_name_is_6g <br> <br>GCについてはIBMのRecycler GCを試そうという話がメーリングリストで出ています。 <br>http://groups.google.com/group/golang-nuts/browse_thread/thread/220bd00a42b7db27/61ddaed7acc9aa89?lnk=gst&q=garbage+collector+ibm#61ddaed7acc9aa89 <br> <br>mathパッケージにはisNaNやIsInfなどの関数もあってIEEE 754対応もしっかりしているので、数値計算用途としても今後が楽しみな言語ですね。

_ とおりすがり (2009-11-14 09:43)

「Goが登場したからには(Java/C++/Python)はお払い箱」と捏造するなんて、みっともない。 <br>他言語への強烈な嫉妬を感じるなう。

_ まつもと ゆきひろ (2009-11-14 09:54)

えー、どうしてそう思うのかな。Rubyが入ってないから? <br>入れなかったのは「そもそもRubyはGoogleでは相手にされてないから」なんですけど (公式プロジェクトには使用禁止)。 <br> <br>で、ねつ造でない証拠を提出しようと、今検索したら、みつからないんでやんの。URL忘れちゃったし。検索しにくい言語名にするなとあれほど (お前が言うな)。 <br>もうちょっと待ってね。

_ とおりすがり (2009-11-14 10:52)

ちょっとキツク書いちゃったなう。 <br>反省してるなう。

_ 13日(金) (2009-11-14 11:55)

Pascalっぽいというのは「:=」があるからそう言ってるのではなくて「;」があったりなかったりするからです

_ obsoleted (2009-11-14 15:42)

>go 式 <br>非関数型言語がどう足掻こうが、並列処理を抽象化しているHaskellには敵わないでしょうね。多分。 <br>http://page.freett.com/shelarcy/programm/parallel/p-prog-haskell.pdf

_ yahhoNob (2009-11-14 15:44)

googleですから、Javaで足りないJuiceのDI概念が入ってるのでしょうか? <br>http://www.infoq.com/jp/articles/drinking-your-guice-too-quickly <br>私は、関数の戻り値が複数扱えるだけで、うれしいです <br>

_ giulietta (2009-11-14 19:20)

>Goが登場したからには(Java/C++/Python)はお払い箱 <br>http://www.atmarkit.co.jp/news/200911/11/go.html <br>この記事のエントリは「C/C++に代わる新言語『Go』」 <br>最後の締めくくりは「C/C++の代替となり得るのか、さらにはC++、Java、C#、Objective-Cに並ぶCの後継言語となれるのか」となってる。 <br>これかな? <br> <br>Google自身もPython、C、C++の良いとこ合わせた言語だって自慢してますね(えらそう)。 <br>http://google-opensource.blogspot.com/2009/11/hey-ho-lets-go.html

_ まつもと ゆきひろ (2009-11-14 20:11)

それ(だけ)ではないんです。私の記憶によれば、 <br> * 英語 <br> * スレッドコメントかメーリングリストアーカイブ <br> * おもに「GoogleにPythonいらないんじゃ、遅いし」という論調 <br>のものを見たんですが、も一度探すとどうにも見つからない。 <br>

_ とおりすがり (2009-11-14 20:45)

おけ、もうオレの勝ちでいいなう。 <br>みんな元の作業に戻るなう。

_ obsoleted (2009-11-14 21:28)

http://www.theregister.co.uk/2009/11/11/google_go/

_ まつもと ゆきひろ (2009-11-15 03:36)

URLを見つけられないのはこちらの落ち度だけど、それで「ねつ造した」と決めつけられるのも不愉快な話だな。

_ 774 (2009-11-15 07:32)

いくつか見かけたってことは一つじゃなくて複数(比較的多い目)あったと受け取れますね。 <br>たしかに2chとかではそういう意見は多数ありましたね。

_ とおりすがり (2009-11-15 12:37)

ええ、捏造は言いすぎたと反省してます。 <br>撤回します。

_ roverhand (2009-11-15 22:11)

とおりすがりさんは、言いすぎかどうかという前に、勘違いしてるのではないかと思うのです。 <br> <br>お払い箱論調に対して「長い目で見ないとわからないと思う。」ってある意味反論してらっしゃるんですよ。 <br> <br>そういう方がお払い箱論調を捏造したって意味ないと思うのです。 <br>

_ (2009-11-16 14:21)

なうってなんだよ。 <br>にょと変わらんな。キモ。

_ とおりすがり (2009-11-16 18:13)

勘違いではありません。 <br>否定的な情報を並べて達観するのはH○Kが良くやるプロパガンダの手法です。N○K自体は否定してないけど全体として否定した内容を視聴者に発信します。 <br> <br>今回は神経質になりすぎてそのように感じた次第でして・・でも、”捏造”ではなくて”URLおせーて”くらいにしとけば良かったと反省しております。 <br> <br>なうってーのは”ひろゆき”の真似だよ。知らないなうか? <br>キモイのには賛成w

_ 加藤和良 (2009-11-17 00:04)

まつもとさんが読まれたのは、ここからリンクされているスレッドではないでしょうか。 <br>http://news.ycombinator.com/item?id=933493

_ hnakamur (2009-11-17 11:09)

加藤和良さんが紹介されたスレッドに <br>http://code.google.com/p/unladen-swallow/wiki/ProjectPlan <br>というリンクがあって、そこのコメントに <br>the creator of ruby is twitting this http://twitter.com/yukihiro_matz <br>と書かれてますね。

_ まつもと ゆきひろ (2009-11-17 12:40)

加藤和良さん、 <br>ありがとうございます。私の記憶と一致します。 <br>そうか、Hacker Newsか。 <br>複数提示することにはまだ成功してはいませんが、少なくともねつ造疑惑を否定するには十分だと思います。 <br> <br>これで私の気分も少しだけ晴れました。

_ kyon (2009-12-02 01:01)

以前、Pascalっぽくないとコメントしてしまったのですが、今はGoは、けっこうPascalっぽいと思ってます。すみません。「Rubyお払い箱」を打ち消そうと、条件反射でコメントをしてました。。

_ ま。 (2009-12-04 10:00)

こんなページもありました。 <br>Ciao Python, Hola Go! <br>http://tav.espians.com/ciao-python-hola-go.html

_ KL1 (2009-12-06 07:15)

Goで思い出したのですが、KL1ってどうなったんでしょうか? <br>http://www37.atwiki.jp/programming_kl1/pages/14.html

お名前:
E-mail:
コメント:
[]

«前の日記(2009-10-31) 最新 次の日記(2010-02-01)» 編集

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.