Go language part 1

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2013/10/10(木) 12:04:51.78
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
2014/07/18(金) 13:03:16.54ID:xJrLNwHb
googleはトラフィックに無頓着なんだよな
自社でキャリア持たないからかな
2014/07/18(金) 14:48:11.31ID:g/ns370x
>>136 のC言語の経験がHello, world!留まりということはわかった。
2014/07/18(金) 14:57:25.22ID:cGkLMo0w
hello worldが大きくてもそれの数百倍の大きさのプログラムをコンパイルしたら
数百倍の大きさの実行ファイルが出来るわけでは無いだろ
2014/07/18(金) 16:25:14.51ID:QbsI88lJ
>>159
全然無い。>>136はHello, world!留まりの赤ちゃんが疳の虫でグズってるだけ
2014/07/18(金) 22:10:34.84ID:DOB4ifCF
>>156 ユーザにとって美味しい餌が無いと言語も流行らないんだよ。

なんで三項演算子( ? : ) すら作らないんだろう。文法に無駄が多い。

// 入力値iが正の整数の場合iの2乗が、iが0以下の整数の場合0が返されるfunction

// Go
func Fx(i int) (ret int) {
if i > 0 { ret = i*i } else { ret = 0 }
return;
}

// Swift 三項演算子
func fx( i: Int ) -> Int { return i > 0 ? i*i : 0 }

// Swift 三項演算子を使わない場合。
func fx( i: Int ) -> Int {
if i > 0 { return i*i } else { return 0 }
}
2014/07/18(金) 22:51:20.66ID:hMlFBsak
流行らなかったら何百(何千?)とあるプログラミング言語の一つが静かに
消えていくだけ。しかし三項演算子が美味しい餌ってのはワケが判らんなw

どうしても欲しかったらこんなのでもいいんじゃない

type Any interface{}

func T(exp bool, a Any, b Any) Any {
 if exp {
  return a
 }
 return b
}

もちろん、これは三項演算子モドキにもなっていないけど。
本物の三項演算子が必要なら src/cmd/gc/lex.c に追加する
なりしてもいいし
2014/07/18(金) 22:51:30.47ID:Mqs0/spS
3項演算子はレガシーコードだな
うんこが現れたと言うことはGoも注目されてるのか?
2014/07/19(土) 05:03:22.62ID:SmxhOcgK
goのほうが言語仕様的には美しくて無駄が少ないと思うけど

型についてレシーバ(メソッド)が付けられるからClassを削って構造体のみにしたって所とか、関数は複数の値を返せるから通常のtry-catchみたいな例外文法削ったりとか、intefaceの実装の自動化によるduck typingっぽい感じとか

SwiftはなんかまだObjective-Cのラッパーて感じ。
引数のラベル付とか。selectorが使える所とか。
2014/07/19(土) 08:42:00.07ID:JJLiNM0Q
まさに>>163
ってことなんだろうな
2014/07/19(土) 09:59:22.84ID:yYW1nc9J
とりあえずフレームワークを1つ覚えとけばいいかな
2014/07/19(土) 13:50:20.51ID:1hzYIwWV
>>164
>例外
例外文法削ったのではなく、例外自体削ったんだろ。パフォーマンス出すためにな
例外機構が必要な言語もある。

duck typingはSwiftの設計方針に合わない。goのinterfaceは面白いけど

>引数のラベル付き
これは他言語にもあるぞ。Rubyとか
引数後少なかったり、関数名から引数が明白な場合を除いてキーワード引数はわかりやすくて良いよ。

なんつーか、SwiftよりGoのが良いって前提で話してるよな。
どっちも良い所あるんだから、優劣付けずに話せばいいのに。
2014/07/19(土) 14:16:07.12ID:iWE1dx4J
>>161 の発言があっての話だからだろ
2014/07/19(土) 14:19:18.94ID:9ljzGYTI
>>164 例外を削除も、複数戻り値もSwiftは採用してるよ。

言語毎に色んな特徴は有るだろうけど、使用者にどんなメリットが有るかが一番大事だろうな。
どんなターゲットを対象にしているかとか。
2014/07/19(土) 15:05:11.74ID:SGq+lI7M
>>167,169
後の話はSwiftのスレでお願いしますね
2014/07/19(土) 15:06:03.17ID:9uryi8HE
>>169
そうそう、だから自分がいいと思う言語を使えばいいだけ、なのに、すごい低レベルなところで煽るやつは何を考えているのかと思う、が、いちいち相手にするレベルに至っていないのでスルーしとく
2014/07/20(日) 23:08:04.42ID:v/W32sJs
<-演算子を何て呼んでますか?
2014/07/20(日) 23:21:11.04ID:tRUHKzxS
アロー演算子
->
<-
2014/07/20(日) 23:43:36.57ID:v/W32sJs
>>173
そうなんだ
どうもありがとう
2014/07/20(日) 23:45:46.75ID:XMGxVSEA
一瞬「アフロ演算子」に見えたw
2014/07/21(月) 16:07:42.61ID:oivZnao6
Cだとアロー演算子って呼んでたけど
Goはチャネルオペレータって呼んでるな。
2014/07/21(月) 17:41:17.08ID:mYM6Tgvw
らむだ
2014/07/21(月) 21:39:44.74ID:PMvpzcGA
iotaの読みはイオタでいいの?
iotaって何から来てるの?
179デフォルトの名無しさん
垢版 |
2014/07/21(月) 21:54:45.83ID:Syim72mM
>>178
ググれば出るだろボケナス
2014/07/21(月) 22:02:32.32ID:DpfIQ25M
井岡
2014/07/21(月) 22:30:59.47ID:F1AofNqF
APLのindex generatorのιだろ。
ぐぐらびりてぃの悪さでは定評がある知識だと思うが。
2014/07/21(月) 22:34:55.66ID:DpfIQ25M
iota の先頭文字は i で母音だから
不定冠詞を付けるときは
a じゃなくて an を付ける必要がある
つまり an iota としなければならない
2014/07/21(月) 22:37:14.11ID:B0QvoS4Q
アニオタ
2014/07/22(火) 00:52:49.93ID:Tqhjijck
>>181
APLのindex generatorよくわからんが、そんなところから来ていたのか〜
atoi, itoa系だとばかり思ってたわw
ありがとね
2014/07/22(火) 01:56:11.63ID:gLVnM0Vt
ギリシャ文字の読み方も知らんて厨房か
2014/07/22(火) 09:46:04.54ID:CpNP7/Sp
20行程度で2MB行くとかクソだな
200行で2GB使うのか?
ばかだろw
これじゃVPSでもクラウドでもすぐ容量いっぱいで使い物にならねえよ
2014/07/22(火) 09:48:02.67ID:A8dKNJDs
教えてくれ
どこから突っ込めばいい
2014/07/22(火) 09:51:44.86ID:gLVnM0Vt
printfもでかいけどprintfを100回呼んでも100倍のサイズにはならない
判り易く喩えるとこういうことです
2014/07/22(火) 09:54:05.00ID:A8dKNJDs
釣りじゃなければさんすうのお勉強が先かなと……
2014/07/22(火) 10:22:55.44ID:brrWCVo/
>>189 俺に算数教えてくれ。 1万行のサイズはいくつだ?
2014/07/22(火) 10:27:27.42ID:yyU5/kBu
1500行のプログラムで3MBくらいだな
1万行で何書くのか知らんけど、似たような呼び出しだと仮定すると
3MBくらいか
2014/07/22(火) 10:39:49.89ID:V18l0e57
vimでgo書く記事がどれもふるいのばっかりでダメだな
2014/07/22(火) 11:41:55.36ID:brrWCVo/
>>191 算数大丈夫か?
2014/07/22(火) 17:18:55.96ID:cFa+HftP
>>19 なあんだ、文化祭の出し物か。
そう言えば、Noop なんてだし物もあったな。
195デフォルトの名無しさん
垢版 |
2014/07/22(火) 20:32:55.34ID:r3GUCDVw
自分で書いたコード400行、標準ライブラリ10個、外部ライブラリ4個で4MBぐらいだったわ
2014/07/23(水) 10:54:58.68ID:7MX9nHNJ
goをvimで書いてるけどやっぱgocodeが導入は楽だな
2014/07/23(水) 11:46:22.33ID:vbN86xg+
goぐらいはmattnさんの使ってあげなよ
2014/07/23(水) 11:53:15.04ID:7MX9nHNJ
ソフトウェア板で書いたけど人いないから
http://anago.2ch.net/test/read.cgi/software/1379912425/658
http://anago.2ch.net/test/read.cgi/software/1379912425/659
http://anago.2ch.net/test/read.cgi/software/1379912425/660
http://anago.2ch.net/test/read.cgi/software/1379912425/661
2014/07/23(水) 11:55:04.11ID:7MX9nHNJ
:Importと:GoImportは勘違いでした
2014/07/23(水) 12:38:54.74ID:WJZjj5QG
golang.jpみたいに一人でも全部翻訳はできてるのに
golang-jp.org全然翻訳進まんな
名前ばかりの幽霊部員しかいないのか
2014/07/23(水) 21:59:22.64ID:WjYeQVNK
と思ってる奴が参加するのが良い
2014/07/23(水) 22:03:23.63ID:VI4LJie1
ろくに翻訳活動もしてないのに肩書きとして「golang-ja.orgで翻訳活動をしております」って名乗るのはいかがなものかな
2014/07/23(水) 23:42:01.46ID:VI4LJie1
goは簡単なバッチ処理をするようなプログラムを作るのには向いてないね
ビルド後のファイルサイズが気になる
2014/07/24(木) 00:30:01.41ID:znT0d1Bl
たしかに気にはなるけど
採用されない理由がそれだけのプロジェクトも想像できない
2014/07/24(木) 11:10:30.02ID:Ye3LEDYl
>>203
むしろバッチ処理得意じゃないかと思うんだが。
APIを何万回も叩いて結果をDBに格納するみたいなバッチ処理を書いた時に
チャネルを使うと素晴らしく綺麗に並列化できて感動したんだよね。
2014/07/24(木) 11:45:59.80ID:lbRXz+ac
>>205
>>203が言ってるのはバッチ処理というより単機能の小さいコマンドみたいなもののことでしょ。
自分らが~/binにたくさんおいてあるbashスクリプトレベルの。

そもそもこのコンパイラは常駐アプリケーションを作るための設計すぎて、実行時間がある程度長くないと無駄なのは事実。
とは言えいい言語だからそういうシンプルな機能を作るためにも使いたい。
使い終わったらプロセスごと落としてくれればいいからGCとかいらないし。
2014/07/24(木) 12:12:06.82ID:Qa9ovyB3
bsd って何の略ですか
2014/07/24(木) 12:22:50.32ID:wjmCoo/j
BuShiDou
2014/07/24(木) 16:17:04.74ID:GSXF8hON
golang.jp を見て見たが、ちょっと最初の構想から外れてるみたいな気がする。
インタプリタみたいな軽量な言語を目指したと言うが、REPLすらないってどう言う事?
サードパーティの物をちらっと見た覚えは有るが、最近目立たないな。

REPLがあれば取り敢えず簡単なスクリプト処理的な物はこなせるけど、いちいちコンパイルGOじゃ面倒臭い。

ジェネリックもいずれ入れると言ってるがもう何年も経つのに入らないってどう言うこと? 設計上無理が有るのでは?
今は色んな面で言語的にはかなり低級に思える。
2014/07/24(木) 16:21:26.89ID:hD2YGPYI
golangってインタプリタとして使えなかった?
2014/07/24(木) 16:22:41.66ID:r6QGED5m
go run helloworld.go
2014/07/24(木) 16:23:12.99ID:r6QGED5m
buildさえしなければhddを圧迫することはないだろう
2014/07/24(木) 16:35:20.39ID:GSXF8hON
>>211 それは単なるコンパイル& Go
2014/07/24(木) 16:39:29.49ID:r6QGED5m
え?インタプリタはコンパイルしないと思ってるの?phpもrubyもpythonもコンパイルするんだよ?
2014/07/24(木) 16:44:21.40ID:GSXF8hON
>>214 広い意味でのインタプリタはそうだけど、そんな事言ったらJavaですらインタプリタと言い出すだろ。

本来の意味のインタプリタは、1行書いたら即実行が本来だよ。
コンパイルしようがどうしようが良いが、書いたら実行。これがインタプリタ。

perlなんかよりREPLの方がよほどまし。
2014/07/24(木) 16:46:57.30ID:GSXF8hON
>>214 それに>>212 は全くのコンパイルじゃ無いか。
どこにインタプリタ的な要素が匂うんだ?


例えば、100行位のプログラムを書き始めたとして、>>212はいつ実行出来るんだ?
アホなこと言うな。
2014/07/24(木) 16:47:30.54ID:GSXF8hON
>>211の間違い
2014/07/24(木) 17:50:00.05ID:9dmhGPAk
定義的にインタプリタであるかどうかにこだわる意味がわからん。
コンパイルが十分に速くてエディタの支援があれば事実上同じ。
2014/07/24(木) 17:59:05.81ID:GSXF8hON
>>218 解らんかな? 例えばインタプリタなら
>>218 と会話的にプログラム出来る。

コンパイル方式だと、>>218の発言を知ってから全ての218の行動を予測しながらプログラムを書かざるを得無い。 どれだけ膨大なプログラムになるかわかるか?

例えば今日台湾の航空機墜落事故のニュースを知ってから、それに関連したプログラムをするのと、
全く知らずに何年も前から予測してプログラムするのでどれだけ大きな差が有るのか解らんかな?
2014/07/24(木) 18:05:42.50ID:GSXF8hON
>>218 ま、いいや、golangで1行ずつコンパイルして結果が見えるのならそれで良い。

#今いるディレクトリは?
--gogo
#ls
--
#cd xxx
2014/07/24(木) 18:10:26.83ID:znT0d1Bl
ニュースの例えは効果的ではなかったな
2014/07/24(木) 18:13:08.35ID:KnMb6PXS
もう少し分かり易く説明して欲しい
2014/07/24(木) 18:17:36.20ID:FJ9KFXdp
そもそもgoはc++の置き換えを狙ったガッツリコンパイル言語目指してたと思うが
インタプリタの話はどっから出てきたのだろうか。
2014/07/24(木) 18:18:07.34ID:hD2YGPYI
読込み -> 中間式生成 -> 実行 -> 結果表示
こういう流れなら中間式がなんであれインタプリタでよくないか
225デフォルトの名無しさん
垢版 |
2014/07/24(木) 19:31:52.41ID:j9Fzrf/Q
対話式の環境が使いたいならscalaでも使えばいいんじゃねえの?
コンパイルくっそ遅いけど
2014/07/24(木) 19:35:29.67ID:eQap2LAf
ClojureとかGroovyとかもJVM系の言語はコンパイルしてから実行するのに凄い時間がかかるな
REPL的な環境使うと捗る
2014/07/24(木) 21:13:03.11ID:3xYKvkhO
>>223
http://golang.jp/go_faq
新しく言語を作った理由は?

Go言語は、インタプリタ言語のプログラミングの容易さと、動的型言語の効率、コンパイル言語の静的な型の安全性を併せ持つことを目指しました。
2014/07/24(木) 22:11:05.80ID:3xYKvkhO
>>224 Javaは含めたく無いな。 インタプリタは、基本的にソースコードをそのまま配布する物。
配布されたソースを変更すれば即座に実行出来る物。
2014/07/24(木) 22:34:04.45ID:xmULRajC
>>219
REPLが備わってる言語だと
1行ずつ試しながらプログラムを書けるのが良いっていう主張なんかな
コンパイル方式だと、ある程度まとまった量を書くまで
プログラムの挙動の確認ができないからダメだと

ちょっと興味あるから良かったらもう少し分かりやすく説明してほしいんだが
2014/07/24(木) 23:08:29.15ID:ZKlJlp/g
つまり軽い気持ちでインタプリタという言葉を使ってしまったら
インタプリタに思い入れの有りすぎる人が騒ぎだしたって話か。
2014/07/24(木) 23:30:45.74ID:3xYKvkhO
>>229
例えば、
system("ls")
でカレントディレクトリ内のファイルを見て、ファイルが有るのを確認してファイルを読み込むとか。
周りの環境が不確かでも確認しながらコーディングを進めて行くことが出来る。

試行錯誤が入る様な場合には力を発揮する。

パラメータを変えながらのテストプログラムとか。

とは言っても、一般的にREPLが力を発揮するのはコーディング時に結果を確認しながら進めていけることだろうな。 バグの少ないプログラムが書ける。

例 Java REPL
http://calms.hatenablog.com/entry/2014/03/20/215529
2014/07/24(木) 23:38:19.65ID:ZKlJlp/g
>>231
お前の言いたいことはよくわかったが残念ながらgoは最初の最初からc++後継のガッツリコンパイル言語だ。
REPLなんて全く意識してない。

そこに書いてあるインタプリタがうんたらかんたらはPythonの手軽さり入れてますよくらいの意味だ。
2014/07/25(金) 00:07:36.47ID:VLfrDabm
>>232 C++ ですら、CINTや、LLVM でのREPLが有るのに、なんでやらないんだろう?
言語と同等に重要だと思うけどな。

その前にジェネリックとかやることが山積みで残ってるからかもしれ無いが。
2014/07/25(金) 00:20:30.83ID:0UOGck6o
Does Go provide REPL?
http://stackoverflow.com/questions/8513609/does-go-provide-repl
2014/07/25(金) 00:29:07.50ID:sWANe9H9
>>233
まあ確かに話題になってるようにpythonコンソールみたいに使えたらとても楽だ。
2014/07/25(金) 00:49:56.70ID:5ZIqGgab
>>231
>>229だけどありがとう
REPLはいろいろ試せて便利ということですね
コンパイル方式の言語でもREPLがあれば便利だという意見に納得
2014/07/25(金) 00:55:19.24ID:5ZIqGgab
>>231
>とは言っても、一般的にREPLが力を発揮するのはコーディング時に結果を確認しながら進めていけることだろうな。 バグの少ないプログラムが書ける。

これに関してはIDEでも出来るからREPLの利点になるかは微妙に思うけど
2014/07/25(金) 01:24:46.41ID:WAyDBvXq
そういう事出来るIDEってそんな多くないような
IDEの機能でREPLに近いのはイミディエイトウィンドウとSmalltalkくらいしか思い浮かばない
2014/07/25(金) 02:11:12.44ID:VBkcNL29
ipythonみたいに補完できるツールって無い?
2014/07/25(金) 08:54:10.04ID:VLfrDabm
>>238
SwiftのPlaygroundは、補間はおろかREPL機能やリアルタイム描画や変数の時間軸変化のグラフとか、時間軸を遡って確認したり出来る。
https://developer.apple.com/swift/
簡単なデモ動画
https://m.youtube.com/watch?v=vogFSIxprUo
描画結果も表示してる

今後こういったIDEが重要な要素となる。
2014/07/25(金) 10:33:21.59ID:v/73T7Pc
Swift使ってればいいんじゃない
2014/07/25(金) 10:36:14.11ID:cQJQccdW
本当に今欲しいもの
それはその機能ですか
2014/07/26(土) 01:12:14.54ID:gxb4YorG
func a() string {
return "aaa"
}
これをstringかintを返したい場合どういうふうにfunc a() stringの部分を書きなおせばいいのか教えてください
2014/07/26(土) 01:38:36.60ID:WPKMsRoX
func a() interface{} {
...
}
2014/07/27(日) 04:43:42.19ID:KUNHptBx
2013-07-18
Go言語でmmapシステムコールを使ったファイル読み込みの高速化検討とC言語のコンパイラの話
http://ryochack.hatenablog.com/entry/2013/07/18/201736

http://i.imgur.com/2sZxU5w.jpg

Go compiler も検討してるが、LLVM Clangには大きな差をつけられてる。
2014/07/27(日) 08:52:04.39ID:CwX5MDAY
LLVM Clangは、徹底的にループを排除するからな
元のコードがどんなだか知らんけど
他がやってるループをClangは回してない場合がある
2014/07/27(日) 09:13:55.62ID:KUNHptBx
>>246 中にソースが書いて有るよ。
1GBのランダムなデータを3種類の読み方で読んで、00のバイト数をカウントすると言う物。
ループを省略するなんてことは出来なさそう。
2014/07/27(日) 09:46:07.39ID:PFdtsvV+
元のコードのここの部分が
for (i=0; i<fsize; i++) {
if (buf[i] == 0x00) cnt++;
}

例えばこんな感じに書いたみたいに展開されるってことじゃないの?
for (i=0,size=fsize/2; i<size;) {
if (buf[i++] == 0x00) cnt++;
if (buf[i++] == 0x00) cnt++;
}
if (fsize%2==1) {
if (buf[i++] == 0x00) cnt++;
}
2014/07/27(日) 11:02:43.76ID:KUNHptBx
コンパイラの最も重要な最適化がループだからね。
2014/07/27(日) 11:07:33.89ID:A8GFVBne
変数って型をしてしたほうがいい?
:=にたよったほうがいい?
2014/07/29(火) 21:53:04.26ID:yYRcHyEO
・【翻訳】Go言語がダメな理由 | POSTD
http://postd.cc/why-go-is-not-good/
 Goは何も新しいことをしない。
 Goは全てにおいてうまく設計されているとは言えない。
 Goは他のプログラミング言語から退化したものである。
2014/07/29(火) 21:59:11.76ID:yYRcHyEO
D言語とGo言語
http://wazanova.jp/post/64086105199/d-go
2014/07/29(火) 23:32:56.57ID:UKoB3UWi
早くジェネリックは欲しいね。
2014/07/30(水) 07:50:42.52ID:/fpjt/6K
>>251 >>252
でもRustやDは全然普及していないという決定的に致命的な欠点があるよな
2014/07/30(水) 09:20:20.31ID:Nn5HlRg1
Rustはまだ実験段階だから仕方ない。 金が無いとなかなか進まないね。

Dはスポンサー次第だろ。 Facebookが使った。
http://blog.fenrir-inc.com/jp/2014/07/about-d-language.html
トレンド的な話ではウォルター氏を含むD言語プログラマーが Facebook に雇用されてD言語の開発とD言語製アプリケーションに携わっている状態で、
D言語公式カンファレンスの DConf も Facebook 本社を会場として去年から開催されています。

SUNはDTrace として使ってるし、DTraceはAppleでも使ってる。
2014/07/30(水) 09:54:57.06ID:5ewzjOeq
>>255
http://ja.m.wikipedia.org/wiki/DTrace#cite_ref-2
DTraceで使われてるDはまた別のものっぽいよ
■ このスレッドは過去ログ倉庫に格納されています