Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
公式ドキュメント
http://golang.org/doc/
日本語訳
http://golang.jp
※前スレ
Go language part 2
https://mevius.5ch.net/test/read.cgi/tech/1510395926/
Go language part 3
レス数が1000を超えています。これ以上書き込みはできません。
2019/10/17(木) 21:38:04.78ID:wMsZ+t6y
2019/10/17(木) 22:00:39.82ID:su/chz7m
>>1乙
テンプレが古すぎるんで作ってみたがどうだろ
公式
https://golang.org
公式ドキュメント
https://golang.org/doc/
公式外パッケージドキュメント
https://godoc.org
ブラウザ上で試し書き
https://play.golang.org
テンプレが古すぎるんで作ってみたがどうだろ
公式
https://golang.org
公式ドキュメント
https://golang.org/doc/
公式外パッケージドキュメント
https://godoc.org
ブラウザ上で試し書き
https://play.golang.org
2019/10/17(木) 22:34:25.92ID:wphaTNNp
golang.jpは外して良いね
2019/10/18(金) 00:00:29.03ID:DhnYyybT
golang.jp は、エイベルの古川昇部長が、社内で始めた翻訳プロジェクトだろ?
最近は、活動してないのか?
改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015
最近は、活動してないのか?
改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015
2019/10/18(金) 00:45:01.73ID:uhy/qlU/
その人もうやめてるでしょ
2019/10/18(金) 13:53:47.66ID:wgxHvfCr
先週から仕事でGoやることになったんだが、この言語辛すぎないか・・・?
ジェネリクスないしエラーが辛い。ジェネリクスは2.0で入るらしいが。
Goの作法だとエラーハンドリング忘れて次の処理を書けるリスクが常に孕んでてて書いてて全然安心できない。
あと詳細なエラー情報見ようとするとcustomErr,ok:=err.(CustomError)みたいにしないと情報とれないの危なすぎでしょ。
なんでカスタムエラー型認められていないの?
ジェネリクスないしエラーが辛い。ジェネリクスは2.0で入るらしいが。
Goの作法だとエラーハンドリング忘れて次の処理を書けるリスクが常に孕んでてて書いてて全然安心できない。
あと詳細なエラー情報見ようとするとcustomErr,ok:=err.(CustomError)みたいにしないと情報とれないの危なすぎでしょ。
なんでカスタムエラー型認められていないの?
2019/10/18(金) 14:25:55.97ID:I27oYfOd
>>6
認められていない訳じゃない
しかし、カスタムなエラー型だと正常時にnilが帰ってきた時に
if err!=nil {} がtrue判断を食らうという厄介なバグがある
これは型付きnilというバグだが、仕様と言い張ってる模様
仕様なら、the predeclared identifier nil, which has no typeの記述とか直せや!
認められていない訳じゃない
しかし、カスタムなエラー型だと正常時にnilが帰ってきた時に
if err!=nil {} がtrue判断を食らうという厄介なバグがある
これは型付きnilというバグだが、仕様と言い張ってる模様
仕様なら、the predeclared identifier nil, which has no typeの記述とか直せや!
2019/10/18(金) 14:31:17.21ID:I27oYfOd
9デフォルトの名無しさん
2019/10/18(金) 14:39:41.03ID:W6xTwO6R O2
2019/10/18(金) 15:49:30.94ID:wgxHvfCr
>>7 認められてないというよりか風潮といった感じか
カスタムエラーがstructじゃなくてinterfaceならいけるんじゃない?
まあどのみち使用しているライブラリがerror返してるからどうしようもないんだけどな
俺はMySQLのエラー番号が知りたいだけなのにどうして危険な操作を強いられるんだ
>>8 まず俺はGoのエラーと例外を引き合いに出してはいない(例外は糞だが)
例えば関数の戻り値がT,errorのような場合でerrorじゃないときだけTの戻り値にアクセスできるような仕組みが欲しい
ScalaのEitherやRustのResultのようなやつな
今はジェネリクスないからそういう実装はできないだろうけど
そもそも職場の制約で.1.13は使えないが、IsもAsも対してかわらんなって印象だわ。
ライブラリの実装者が中で返すエラーの型を変えた場合、IsやAsしててもコンパイルエラーにならず適切なエラー処理ができずに実行されてしまう。
戻り値の型できちんとカスタムエラー型を明示してくれてればコンパイルエラーで気づけるんだけどな
今さっき聞いたんだけど、2.0で入る予定のエラーハンドリング周りのサポート、error型のみが対象らしいんだってな。
2.0にはいると本当にカスタムエラーの道が閉ざされてしまいそうだけど本当にそれでええんやろか
カスタムエラーがstructじゃなくてinterfaceならいけるんじゃない?
まあどのみち使用しているライブラリがerror返してるからどうしようもないんだけどな
俺はMySQLのエラー番号が知りたいだけなのにどうして危険な操作を強いられるんだ
>>8 まず俺はGoのエラーと例外を引き合いに出してはいない(例外は糞だが)
例えば関数の戻り値がT,errorのような場合でerrorじゃないときだけTの戻り値にアクセスできるような仕組みが欲しい
ScalaのEitherやRustのResultのようなやつな
今はジェネリクスないからそういう実装はできないだろうけど
そもそも職場の制約で.1.13は使えないが、IsもAsも対してかわらんなって印象だわ。
ライブラリの実装者が中で返すエラーの型を変えた場合、IsやAsしててもコンパイルエラーにならず適切なエラー処理ができずに実行されてしまう。
戻り値の型できちんとカスタムエラー型を明示してくれてればコンパイルエラーで気づけるんだけどな
今さっき聞いたんだけど、2.0で入る予定のエラーハンドリング周りのサポート、error型のみが対象らしいんだってな。
2.0にはいると本当にカスタムエラーの道が閉ざされてしまいそうだけど本当にそれでええんやろか
2019/10/18(金) 16:01:34.41ID:uhy/qlU/
エラー処理の観点から見るとジェネリクスないのはもう相当きついね
関数型脳は捨てるしかない
関数型脳は捨てるしかない
2019/10/18(金) 19:57:12.19ID:wgxHvfCr
まあRustも関数型言語かというと違うけどな。標準ライブラリにはモナドないし。
ジェネリクスが必要なものに関しては今使えないから仕方がない面はあるとは思う。
ただカスタムエラー型が実質使えない状態になってるのは辛いなあとは思う
ジェネリクスが必要なものに関しては今使えないから仕方がない面はあるとは思う。
ただカスタムエラー型が実質使えない状態になってるのは辛いなあとは思う
2019/10/18(金) 21:03:52.48ID:uhy/qlU/
モナドあってもdo記法相当ないときついからね
14デフォルトの名無しさん
2019/10/19(土) 15:58:08.27ID:g7gJ/kc1 exe でかいな・・・
2019/10/19(土) 19:06:00.27ID:VYVT60v2
う、うん…
2019/10/19(土) 19:56:56.88ID:N1S9xfvx
2MBは静的リンクされてる実行ファイルなら普通よ
C系のリンカーの出力だとままある
動的リンクされてDLLとかアセンブリとかSOをロードする実行ファイルとは違う
ロードが速いはずというメリットもある
C系のリンカーの出力だとままある
動的リンクされてDLLとかアセンブリとかSOをロードする実行ファイルとは違う
ロードが速いはずというメリットもある
2019/10/19(土) 22:13:55.22ID:x3sKZMaG
せやな
この特性でインスタンスの起動が早くてクラウドだと重宝するね
反面WASMとかだと辛いという話は聞いている
この特性でインスタンスの起動が早くてクラウドだと重宝するね
反面WASMとかだと辛いという話は聞いている
18デフォルトの名無しさん
2019/10/20(日) 10:01:30.26ID:Xl2t0ZNf そもそもC/C++自体がすでに第一選択の言語じゃなくて、応答性やパフォーマンスの問題で消去法で選ばれる言語だし、
Goはそれで弾かれる側の言語なんで無理無理
Goが選択肢に入るような要件ならC++は選択肢に入らないし、逆もまた然り
Goはそれで弾かれる側の言語なんで無理無理
Goが選択肢に入るような要件ならC++は選択肢に入らないし、逆もまた然り
2019/10/20(日) 10:16:19.34ID:kaRRw6/p
しかし、C++は他に選択肢が無いというよりアセンブラより生産性が高いという消去法で選択される言語
C++よりも生産性が高いと思う人間、例えばGoogleとか俺にとっては消去法での乗り換えが充分に考えられる
C++よりも生産性が高いと思う人間、例えばGoogleとか俺にとっては消去法での乗り換えが充分に考えられる
2019/10/20(日) 10:22:02.89ID:kaRRw6/p
あ、もうちょい書き足りなかった
つまり、ベターなアセンブラの地位をC/C++から奪おうという狙いの言語、という位置付けだと考えるよ
つまり、ベターなアセンブラの地位をC/C++から奪おうという狙いの言語、という位置付けだと考えるよ
21デフォルトの名無しさん
2019/10/20(日) 10:26:38.82ID:7X6GOXnL 草
2019/10/20(日) 10:33:11.87ID:kaRRw6/p
笑っていればいいさ、20年前にJavaが将来のメジャー言語になると言ったら馬鹿にされるのは必至だったし
2019/10/20(日) 10:35:44.03ID:kaRRw6/p
まあ、linuxカーネルがCで書かれる限り、Cの牙城を崩すのは夢物語なのは間違いない
2019/10/20(日) 10:53:15.21ID:FYx27IXW
1999年ならjavaはすでにメジャー言語でしたけどね
25デフォルトの名無しさん
2019/10/20(日) 11:07:37.88ID:ZaJFVv7X Dと比べてどうなん?
26デフォルトの名無しさん
2019/10/20(日) 11:10:32.44ID:LrxuqhUZ var hoge uintptr = 123 動く(1)
hoge := uintptr(123) 動く(2)
hoge uintptr = 123 動かない(3)
hoge uintptr := 123 動かない(4)
やっぱり面倒なんだよね
良い方法ないですか
あと(2)があまり使われないのはなぜ?
hoge := uintptr(123) 動く(2)
hoge uintptr = 123 動かない(3)
hoge uintptr := 123 動かない(4)
やっぱり面倒なんだよね
良い方法ないですか
あと(2)があまり使われないのはなぜ?
2019/10/20(日) 11:15:04.16ID:kaRRw6/p
>>24
ほほう、EclipseもstrutsもJITもない1.2の時代でメジャーとな?
ほほう、EclipseもstrutsもJITもない1.2の時代でメジャーとな?
28デフォルトの名無しさん
2019/10/20(日) 11:21:45.78ID:7X6GOXnL 君は20年後も笑われてると思う
2019/10/20(日) 11:28:13.14ID:kaRRw6/p
使ったこと無いから的外れかもしれないけど、uintptrなんてunsafeな箇所くらいでしか使わないと思う(アーキテクチャ依存だからという理由
そんなuintptrを簡単にという意図がわからないので、解説plz
そんなuintptrを簡単にという意図がわからないので、解説plz
2019/10/20(日) 11:30:47.40ID:kaRRw6/p
根拠も何もなく笑って誤魔化す人に笑われても痛くも痒くもないね
そこでどうぞ笑っていてくださいな
そこでどうぞ笑っていてくださいな
2019/10/20(日) 11:34:38.66ID:tiTqX8Ml
Cの整数リテラルに付けるサフィックスみたいな?
1234LL とか 1234ULL
1234LL とか 1234ULL
2019/10/20(日) 12:29:01.63ID:FYx27IXW
>>27
当時のTIOBE IndexでC、C++に次ぐ3位ですけど
当時のTIOBE IndexでC、C++に次ぐ3位ですけど
2019/10/20(日) 13:00:38.73ID:kaRRw6/p
>>32
ぐう、認めざるを得ない
ぐう、認めざるを得ない
2019/10/21(月) 12:27:44.92ID:Z5rpRU3u
全然関係ない話
公式のドキュメントのフォントがChromeとかで汚いと悩んでたんだけど、実はGoogleのRobotoフォント入れれば良いんだな
公式のドキュメントのフォントがChromeとかで汚いと悩んでたんだけど、実はGoogleのRobotoフォント入れれば良いんだな
2019/10/21(月) 12:36:03.12ID:WIyyg0Zh
そんなのuser.cssでいくらでも好きなようにできるじゃん
36デフォルトの名無しさん
2019/10/22(火) 09:57:44.29ID:fxbuxtP/ := と = の使い分けが構文的に破綻してるように観える
37デフォルトの名無しさん
2019/10/22(火) 10:07:36.95ID:fxbuxtP/ var s []byte = "abc"
string(s) // OK
s.String() // undefined
var b bytes.Buffer
string(b) // cannot convert to string
b.String() // OK
なんかこの辺もいまいち
string(s) // OK
s.String() // undefined
var b bytes.Buffer
string(b) // cannot convert to string
b.String() // OK
なんかこの辺もいまいち
38デフォルトの名無しさん
2019/10/22(火) 16:48:11.86ID:fxbuxtP/ a) var hoge bytes.Buffer
b) hoge := bytes.Buffer{}
c) hoge := new(bytes.Buffer)
これは全部同じか?
b) hoge := bytes.Buffer{}
c) hoge := new(bytes.Buffer)
これは全部同じか?
39デフォルトの名無しさん
2019/10/22(火) 17:34:11.07ID:NAxd+6Yh cはポインタじゃね?
2019/10/22(火) 18:45:07.15ID:ZD3zuEp7
&xxxxx{}の方が直接的で字数も短いからnewって使ったことも無かった
何のためにあるの?
何のためにあるの?
2019/10/22(火) 18:49:37.32ID:2BTBJ3Vd
ウメは所詮ウメ
2019/10/22(火) 19:10:16.41ID:ZD3zuEp7
2019/10/22(火) 20:19:18.32ID:8627xFai
chrome拡張でuser.css使えばいいだけじゃん
44デフォルトの名無しさん
2019/10/23(水) 00:31:32.72ID:JxOFlXnS errorはインターフェースだからswitchで処理するんじゃないの?キャスト使うの?
2019/10/23(水) 10:08:27.34ID:R2gPUhVc
今頃書き方が気に入らないとか変な奴が増えてきたな
2019/10/23(水) 11:21:24.14ID:QKgYWjME
errorがつらすぎるError()stringだけで表現しきれないよ
2019/10/23(水) 15:38:46.69ID:v5l3MvUt
たまにgoやると、そのたびにテンプレートリテラルがないことを忘れててショックを受ける
48デフォルトの名無しさん
2019/10/23(水) 15:45:39.64ID:JzA6/vMp Go って GAE とか GCP 以外ではどんなところで使われてますか
49デフォルトの名無しさん
2019/10/23(水) 16:11:49.10ID:JxOFlXnS2019/10/23(水) 16:12:12.27ID:WGPw5kiw
LLで書かれていたserver-sideの置き換え
2019/10/23(水) 18:00:58.73ID:GdFoVnvN
>>48
ありがたくGogsを使わせていただいてます
ありがたくGogsを使わせていただいてます
2019/10/23(水) 19:15:53.64ID:S820ViMx
>>48
ありがたくDockerを使わせていただいています。
ありがたくDockerを使わせていただいています。
2019/10/23(水) 19:44:31.14ID:2nox9oBd
>>48
android本体のビルドシステム
android本体のビルドシステム
2019/10/26(土) 14:34:34.62ID:Js8CxMBL
{ "name": "Tanaka", "age": 26 }
{ "name": "Tanaka"}
{ "age": 26 }
{}
みたいに中身が入ってるか不確定なjsonlファイルを上手くcsvやtsvに変換する方法ってありますか?
{ "name": "Tanaka"}
{ "age": 26 }
{}
みたいに中身が入ってるか不確定なjsonlファイルを上手くcsvやtsvに変換する方法ってありますか?
2019/10/26(土) 17:57:54.28ID:cnCbS4wm
普通にjson.Unmarshal()するだけで、mapになるそうだから
入っていないキーは入っていないと分かるのとちがう?
設定ファイルとか使うコード書いたことないから受け売りなんだけど
入っていないキーは入っていないと分かるのとちがう?
設定ファイルとか使うコード書いたことないから受け売りなんだけど
2019/10/26(土) 18:26:00.14ID:WK67sdAG
いまいちカッコ悪いが、
各フィールドをinterface{}で受けて、有無をnil判定するのはどうか
type Person struct {
Name interface{} `json:"name"`
Age interface{} `json:"age"`
}
func encodeField(v interface{}) string {
if v == nil { return "" }; return fmt.Sprint(v)
}
func main() {
var persons []*Person
json.Unmarshal([]byte(`[{"name": "Tanaka", "age": 26},
{"name": "Tanaka"},{"age": 26}, {}]`), &persons)
w := csv.NewWriter(os.Stdout)
for _, person := range persons {
records := []string{encodeField(person.Name),encodeField(person.Age)}
w.Write(records)
}
w.Flush()
}
【出力】
Tanaka,26
Tanaka,
,26
,
各フィールドをinterface{}で受けて、有無をnil判定するのはどうか
type Person struct {
Name interface{} `json:"name"`
Age interface{} `json:"age"`
}
func encodeField(v interface{}) string {
if v == nil { return "" }; return fmt.Sprint(v)
}
func main() {
var persons []*Person
json.Unmarshal([]byte(`[{"name": "Tanaka", "age": 26},
{"name": "Tanaka"},{"age": 26}, {}]`), &persons)
w := csv.NewWriter(os.Stdout)
for _, person := range persons {
records := []string{encodeField(person.Name),encodeField(person.Age)}
w.Write(records)
}
w.Flush()
}
【出力】
Tanaka,26
Tanaka,
,26
,
2019/10/26(土) 18:56:16.09ID:ZMkO6rZZ
5856
2019/10/26(土) 19:00:33.37ID:WK67sdAG2019/10/26(土) 19:17:37.95ID:WK67sdAG
どうぞ
ttps://play.golang.org/p/JD9lfvYmddM
ttps://play.golang.org/p/JD9lfvYmddM
2019/10/26(土) 19:54:24.78ID:b0emESrF
2019/10/26(土) 20:04:05.89ID:7Zdb+SPq
Goってjqみたいな機能無いのか
jsonの全パターン書くの辛くないか?
{ "name": "Tanaka", "age": 26 }
だけで残りの3パターンも補完できれば汎用性のあるものができそうだが
jsonの全パターン書くの辛くないか?
{ "name": "Tanaka", "age": 26 }
だけで残りの3パターンも補完できれば汎用性のあるものができそうだが
2019/10/26(土) 20:26:57.00ID:cnCbS4wm
2019/10/26(土) 20:30:49.25ID:bEV2HGjQ
まあjq使ったほうが遥かに早いわな
2019/10/26(土) 22:55:14.57ID:qV3xsUXN
2019/10/26(土) 23:02:23.77ID:cnCbS4wm
>>64
定義って、それはテストデータじゃない
テストデータ書かないでサンプル書くの?
とかすっとぼけて書いたが、誰かjsonの形式の定義が必要なサンプルコードを書いたりしたか?という話
そもそもが内容が不定なjsonを解読するって話だから、皆さんそれを読むサンプルコードを書いてる
つまり、レス主はそれらのサンプルコードを読んでないんじゃね?
定義って、それはテストデータじゃない
テストデータ書かないでサンプル書くの?
とかすっとぼけて書いたが、誰かjsonの形式の定義が必要なサンプルコードを書いたりしたか?という話
そもそもが内容が不定なjsonを解読するって話だから、皆さんそれを読むサンプルコードを書いてる
つまり、レス主はそれらのサンプルコードを読んでないんじゃね?
2019/10/27(日) 09:49:43.92ID:rf1sTekf
Unmarshal()の引数に[]interface{}の変数のポインタを渡すと、マップとスライスで構成されたjsonの中身がエンコードされるという前提知識で話してるのに
キーをフィールドとして事前定義しなきゃならん、構造体のスライスへのポインタを渡す形式の呼び方での話を持ち出されても困るんだ
んでも、構造体を切ることをパターンと言っているのではない可能性もあって、一応確認
キーをフィールドとして事前定義しなきゃならん、構造体のスライスへのポインタを渡す形式の呼び方での話を持ち出されても困るんだ
んでも、構造体を切ることをパターンと言っているのではない可能性もあって、一応確認
2019/10/27(日) 16:02:57.62ID:rf1sTekf
【質問】
goroutineはデーモンスレッドみたいにプロセスが死ぬと終了します
だから後始末をしたい場合、子にはcontext.WithCancelで終了を通知、受け取ったら後始末
そして、親はsync.WaitGroupで完了待ちしています
んでも、もっとうまい方法ってないものかな?面倒
Javaだとスレッドをinterruptして、子はInterruptExeption拾って後始末して、親はjoinして待つじゃない
主にInterruptExeptionをキャッチするコードを書くだけで済む
もしも親から狙ったgoroutineに特定のpanicを起こせるなら、recoverで拾えるかなーと…
goroutineはデーモンスレッドみたいにプロセスが死ぬと終了します
だから後始末をしたい場合、子にはcontext.WithCancelで終了を通知、受け取ったら後始末
そして、親はsync.WaitGroupで完了待ちしています
んでも、もっとうまい方法ってないものかな?面倒
Javaだとスレッドをinterruptして、子はInterruptExeption拾って後始末して、親はjoinして待つじゃない
主にInterruptExeptionをキャッチするコードを書くだけで済む
もしも親から狙ったgoroutineに特定のpanicを起こせるなら、recoverで拾えるかなーと…
68デフォルトの名無しさん
2019/10/27(日) 17:24:05.16ID:IkTaChA0 暗黙で thread safe になるからじゃね?
2019/11/02(土) 10:54:34.41ID:ZFvN4ynw
Most Popular Programming Languages 1965 - 2019
https://www.youtube.com/watch?v=Og847HVwRSI
https://www.youtube.com/watch?v=Og847HVwRSI
2019/11/09(土) 14:40:29.85ID:LmK44fG0
71デフォルトの名無しさん
2019/11/09(土) 14:45:47.99ID:BZG37V3w おめでとう
そして 10年で 3 スレ
そして 10年で 3 スレ
2019/11/10(日) 16:35:00.71ID:AlAC5EvK
>>67
狙ったgoroutineにってのが推奨されてるかはわからんけど、レシーバなり関数のパラメータなりにid持たせて、終了通知channelにそのidを送って受け取った側で処理する、とか
狙ったgoroutineにってのが推奨されてるかはわからんけど、レシーバなり関数のパラメータなりにid持たせて、終了通知channelにそのidを送って受け取った側で処理する、とか
2019/11/12(火) 18:31:22.40ID:1W50Wecq
継承、関数オーバーライド、多態性を実装したサンプルをまとめてみた
https://play.golang.org/p/4_p8gXLRJ1j
今後のバージョンアップで機能しなくなったりとか、現状でもマズイ部分って、どれくらいだろうか?
https://play.golang.org/p/4_p8gXLRJ1j
今後のバージョンアップで機能しなくなったりとか、現状でもマズイ部分って、どれくらいだろうか?
2019/11/12(火) 19:33:54.99ID:gbKk99TD
オーバーライドしたスーパークラスのメソッドを呼び出す例が無かったんでちょっと変更
https://play.golang.org/p/XUfFldlrkqT
https://play.golang.org/p/XUfFldlrkqT
75デフォルトの名無しさん
2019/11/13(水) 13:05:15.15ID:OceCV+VL ローソンやめて・・・
2019/11/14(木) 12:27:37.91ID:DypnJQvv
2019/11/14(木) 12:45:55.94ID:OUpVBwEJ
>>76
Inheritance.Msg()じゃないの?
Inheritance.Msg()じゃないの?
2019/11/15(金) 01:20:51.87ID:mVgFykxZ
79デフォルトの名無しさん
2019/11/19(火) 11:45:57.48ID:yN0S2651 新しいサイトのurlゴーデブとか俺をバカにしてんのか?
2019/11/19(火) 13:05:47.04ID:l66aOXt6
go.dev
pkg.go.dev
デヴ乙
pkg.go.dev
デヴ乙
2019/11/19(火) 19:24:06.45ID:FmtuL8lJ
新しいサイト?
言語仕様ドキュメントが見つからないから、移行ではないよな?
何のためのサイト何だろうコレ
言語仕様ドキュメントが見つからないから、移行ではないよな?
何のためのサイト何だろうコレ
2019/11/19(火) 19:41:52.54ID:nsf/4FCJ
ごーでぶキュレーションサイトなのかな
https://japan.zdnet.com/article/35145511/
https://japan.zdnet.com/article/35145511/
2019/11/19(火) 19:55:13.02ID:FmtuL8lJ
ああ、つまり経営者向けの広告サイトなんだな
2019/11/19(火) 20:30:05.61ID:j6UXNqhz
> https://blog.golang.org/go.dev
> Today we are launching go.dev, a new hub for Go developers, to help answer those questions.
開発者向けのハブサイトだと
> Today we are launching go.dev, a new hub for Go developers, to help answer those questions.
開発者向けのハブサイトだと
85デフォルトの名無しさん
2019/11/20(水) 04:14:35.39ID:MuZ0V3fT デブで経営者向けはないだろw
経営者ならスマート
経営者ならスマート
2019/11/20(水) 05:50:27.81ID:yYpRsUso
ドメインの管理者は…
2019/11/20(水) 21:31:46.92ID:TfJaRLfE
>>48
Go言語を採用して開発をしている会社一覧
https://web.archive.org/web/20191120013540/https://qiita.com/muchi/items/018c81c27f637797fcf3
Go言語を採用して開発をしている会社一覧
https://web.archive.org/web/20191120013540/https://qiita.com/muchi/items/018c81c27f637797fcf3
2019/11/21(木) 22:11:47.49ID:zCme0Fkr
なぜかVScodeでmain.goだけ"fmt"とか全くimportできなくなってしまった
language serverのリスタートもWindowsの再起動も駄目
なんじゃこりゃ、まいったね
language serverのリスタートもWindowsの再起動も駄目
なんじゃこりゃ、まいったね
2019/11/22(金) 22:15:46.73ID:meXSLknH
2019/11/23(土) 08:06:54.73ID:5HHeTBXj
2019/11/23(土) 12:27:33.32ID:1tA3t0n1
2019/11/23(土) 14:07:25.44ID:5HHeTBXj
2019/11/23(土) 20:04:06.92ID:1tA3t0n1
2019/11/23(土) 20:37:12.05ID:5HHeTBXj
2019/11/23(土) 21:02:17.64ID:zPKhdy+L
環境変数 GO111MODULE を off にセットしてみたら
2019/11/23(土) 21:13:40.13ID:pGKd1Nh3
言語自体はそれなりに良いんだが開発状況見てるとと将来が不安。rubyに似てる。
2019/11/23(土) 21:21:33.69ID:3Nj772W5
2019/11/23(土) 21:44:02.36ID:zPKhdy+L
>>94
go.mod に
replace internal/config => ./internal/config
と書いておくと
import "internal/config"
と書ける。 ./internal/config ディレクトリ内にも go.mod を作っておく必要があるけど
go.mod に
replace internal/config => ./internal/config
と書いておくと
import "internal/config"
と書ける。 ./internal/config ディレクトリ内にも go.mod を作っておく必要があるけど
2019/11/23(土) 21:57:18.51ID:5HHeTBXj
100デフォルトの名無しさん
2019/11/23(土) 22:02:32.31ID:5HHeTBXj >>95
ん、off?空指定とは違う挙動になるのかな?
ん、off?空指定とは違う挙動になるのかな?
101デフォルトの名無しさん
2019/11/23(土) 22:08:43.74ID:5HHeTBXj >>98
internal以下のパッケージの全てにgo.modを入れるのはちょっと…
internal以下のパッケージの全てにgo.modを入れるのはちょっと…
102デフォルトの名無しさん
2019/11/23(土) 22:12:34.14ID:zPKhdy+L >>100
1.13 からデフォルトは on
1.13 からデフォルトは on
103デフォルトの名無しさん
2019/11/23(土) 22:13:50.79ID:5HHeTBXj シンプルなのはいいんだけど
golintでチェックされる命名規則が嫌すぎる
キャメルでgetJsonDataとかだったか関数定義したら"JSON"と大文字で書けとか怒られた
お前は姑か!
golintでチェックされる命名規則が嫌すぎる
キャメルでgetJsonDataとかだったか関数定義したら"JSON"と大文字で書けとか怒られた
お前は姑か!
104デフォルトの名無しさん
2019/11/23(土) 22:19:49.28ID:5HHeTBXj105デフォルトの名無しさん
2019/11/23(土) 22:22:02.56ID:5HHeTBXj106デフォルトの名無しさん
2019/11/23(土) 22:24:43.43ID:zPKhdy+L off にして modules 捨てたらいいんじゃないかな
107デフォルトの名無しさん
2019/11/23(土) 22:29:30.47ID:zPKhdy+L 後は import "hoge-project/internal/config" って書くとか
これなら go.mod を作ったり弄くらなくて済む
これなら go.mod を作ったり弄くらなくて済む
108デフォルトの名無しさん
2019/11/23(土) 22:40:38.71ID:5HHeTBXj109デフォルトの名無しさん
2019/11/25(月) 21:36:43.85ID:aLYZ9MFJ 初心者なんだがcontextの使い道がいまいちわからん。
cancelとかなんかいいサンプルないかな。
cancelとかなんかいいサンプルないかな。
110デフォルトの名無しさん
2019/11/25(月) 22:24:43.09ID:ELiIkdft >>109
パッケージドキュメントのExampleが、自分としては分かりやすかった
WithCancelしか使ってないけど
あと、go vet がバグっていて親contextのCancel関数があるのに
子供のCancel関数を_で捨てると怒られる
https://github.com/golang/go/issues/29587
暫定的な解決法は一旦変数に取ってから_に代入
パッケージドキュメントのExampleが、自分としては分かりやすかった
WithCancelしか使ってないけど
あと、go vet がバグっていて親contextのCancel関数があるのに
子供のCancel関数を_で捨てると怒られる
https://github.com/golang/go/issues/29587
暫定的な解決法は一旦変数に取ってから_に代入
111デフォルトの名無しさん
2019/11/25(月) 22:34:45.60ID:ELiIkdft >>109
使い方じゃなくて使い道かー
んー、goroutineをポコポコ作る場面で、処理をキャンセルしたい事ってあるけど、作り散らしたgoroutineに通知しないとキャンセルできない
そんなとき自前で仕掛けを作らなくてもcontextを使えばいい
あとは、そういった処理にタイムアウトを実装したい時にも、タイマーが組み込まれてるcontextがある
Valueは使ったこと無い
使い方じゃなくて使い道かー
んー、goroutineをポコポコ作る場面で、処理をキャンセルしたい事ってあるけど、作り散らしたgoroutineに通知しないとキャンセルできない
そんなとき自前で仕掛けを作らなくてもcontextを使えばいい
あとは、そういった処理にタイムアウトを実装したい時にも、タイマーが組み込まれてるcontextがある
Valueは使ったこと無い
112デフォルトの名無しさん
2019/11/25(月) 22:57:11.50ID:0VXwuJZP ありがちなのはsigintしたときにすぐにプログラムを止めずに子のゴルーチンの処理が一区切りついてから止める場合とかかな🤔
113デフォルトの名無しさん
2019/11/26(火) 02:26:32.95ID:RC9c8z2p 改訂2版 みんなのGo言語、2019/8/1
買ってきた。
これは、文法以外の開発に関する本
買ってきた。
これは、文法以外の開発に関する本
114デフォルトの名無しさん
2019/11/26(火) 07:37:44.38ID:wNKG8xXd >>112
んだね、自分はちゃんと後始末していることを保証するためにWaitGroupと組み合わせてる
んだね、自分はちゃんと後始末していることを保証するためにWaitGroupと組み合わせてる
115デフォルトの名無しさん
2019/11/26(火) 15:25:52.87ID:+MieSoC5116デフォルトの名無しさん
2019/11/26(火) 15:27:45.16ID:+MieSoC5117デフォルトの名無しさん
2019/11/26(火) 15:32:27.05ID:+MieSoC5 >>110
パッケージドキュメントだと、やはり基本的にループ待受なのね
なんかイメージ的に、その文脈から派生した処理を上手いことその派生分だけ切り上げる、みたいな感じだったけど、contextWithCancel使う=ループ処理がある、なのかな
パッケージドキュメントだと、やはり基本的にループ待受なのね
なんかイメージ的に、その文脈から派生した処理を上手いことその派生分だけ切り上げる、みたいな感じだったけど、contextWithCancel使う=ループ処理がある、なのかな
118デフォルトの名無しさん
2019/11/26(火) 18:34:43.56ID:8XlTLgEr119デフォルトの名無しさん
2019/11/26(火) 20:40:53.47ID:+MieSoC5 >>118
なるほど。参考になる。
channel読むの前提ってことは、やっぱり汚くなるよね。
selectで終了待受したいなら、中でさらにgoroutine生成してselectまで進めておく、しかないと
なんかこう、WithCancelで生成したcontext渡してcancelしたらなにも考えることなく終わってほしいなー。
なるほど。参考になる。
channel読むの前提ってことは、やっぱり汚くなるよね。
selectで終了待受したいなら、中でさらにgoroutine生成してselectまで進めておく、しかないと
なんかこう、WithCancelで生成したcontext渡してcancelしたらなにも考えることなく終わってほしいなー。
120デフォルトの名無しさん
2019/11/26(火) 21:33:38.25ID:+iLBHaU9 >>114
便乗して更に質問で申し訳ないが聞きたい。waitgroupって、個人的にはworkerの数が決まってるなら使うべき?
wg使わずにキャパシティ付きchannelに放り込む、クロージャでdefer closeしてその後channelをrangeで回す。というのもソースコードではよく見る。
ここら辺なにが正解なのかわからんのよね
便乗して更に質問で申し訳ないが聞きたい。waitgroupって、個人的にはworkerの数が決まってるなら使うべき?
wg使わずにキャパシティ付きchannelに放り込む、クロージャでdefer closeしてその後channelをrangeで回す。というのもソースコードではよく見る。
ここら辺なにが正解なのかわからんのよね
121デフォルトの名無しさん
2019/11/26(火) 22:53:16.65ID:wNKG8xXd >>120
workerの数が決まらないほど、使うべきなんじゃない?
要するに全部のgoroutineが終わったかどうか判断する仕組みだから
ちなみに自分はgoroutineを二段構えで呼んでて、WaitGroupは隠してる
https://github.com/XORveRCOM/util/blob/master/pkg/easywork/easywork.go
workerの数が決まらないほど、使うべきなんじゃない?
要するに全部のgoroutineが終わったかどうか判断する仕組みだから
ちなみに自分はgoroutineを二段構えで呼んでて、WaitGroupは隠してる
https://github.com/XORveRCOM/util/blob/master/pkg/easywork/easywork.go
122デフォルトの名無しさん
2019/11/26(火) 22:57:07.00ID:eptCat3v workerの数決まっていないでチャンネル使うとキャパシティ以上にワーカーできたとき詰まって死にそう🤔
123デフォルトの名無しさん
2019/11/26(火) 23:23:09.81ID:Gw3sx8bp >>121
回答とサンプルありがとう。
質問の日本語がおかしかった。。
なるほど、こうすればchannelで送受信しなくても逐次的に処理できるということか。
ちなみにworkerの数が決まらないケースって、どんな場面で遭遇する?
常駐してて死なないアプリ以外にあんまり思いつかず
回答とサンプルありがとう。
質問の日本語がおかしかった。。
なるほど、こうすればchannelで送受信しなくても逐次的に処理できるということか。
ちなみにworkerの数が決まらないケースって、どんな場面で遭遇する?
常駐してて死なないアプリ以外にあんまり思いつかず
124デフォルトの名無しさん
2019/11/26(火) 23:23:41.57ID:wNKG8xXd >>122
WaitGroupのソースを参照
WaitGroupのソースを参照
125デフォルトの名無しさん
2019/11/26(火) 23:29:52.93ID:Gw3sx8bp >>122
受信側は無限に待ち受ける想定だとどうかな?というか、waitgroupを使わないユースケースがそれぐらいしか思いつかないんだよね
waitgroupが有効なケース、だけどwaitgroupを使わないケースってどんなんがあるのかな。
受信側は無限に待ち受ける想定だとどうかな?というか、waitgroupを使わないユースケースがそれぐらいしか思いつかないんだよね
waitgroupが有効なケース、だけどwaitgroupを使わないケースってどんなんがあるのかな。
126デフォルトの名無しさん
2019/11/26(火) 23:36:45.35ID:wNKG8xXd127デフォルトの名無しさん
2019/11/26(火) 23:46:52.62ID:+iLBHaU9 >>126
そうか、パッと見ダウンロード処理を開始する時にwg.Add(len())すれば、とおもったけど、よく考えたら何をダウンロードするのかを取得する処理自体が並列化してる場合は、ソースみたいに自分でAdd(1)しないと並列化できないね。
とても勉強になった。ありがとう。
そうか、パッと見ダウンロード処理を開始する時にwg.Add(len())すれば、とおもったけど、よく考えたら何をダウンロードするのかを取得する処理自体が並列化してる場合は、ソースみたいに自分でAdd(1)しないと並列化できないね。
とても勉強になった。ありがとう。
128デフォルトの名無しさん
2019/11/26(火) 23:59:49.88ID:eptCat3v >>124
WaitGroupのソース見る限りAddされた数と待っている数を保持していてチャンネルを使っていないっぽいけど…
チャンネルを使うと詰まることあるけどWaitGroupならないんじゃないかな
https://golang.org/src/sync/waitgroup.go?s=574:929
WaitGroupのソース見る限りAddされた数と待っている数を保持していてチャンネルを使っていないっぽいけど…
チャンネルを使うと詰まることあるけどWaitGroupならないんじゃないかな
https://golang.org/src/sync/waitgroup.go?s=574:929
129113
2019/12/02(月) 22:40:03.04ID:H5nAExhM >>113
改訂2版 みんなのGo言語、2019/8/1
半分ぐらい読んだけど、これは、文法以外の開発に関する本で、
テスト・デザインパターンなど、
各言語の中級者向け「Effective 何々」に相当する本
改訂2版 みんなのGo言語、2019/8/1
半分ぐらい読んだけど、これは、文法以外の開発に関する本で、
テスト・デザインパターンなど、
各言語の中級者向け「Effective 何々」に相当する本
130デフォルトの名無しさん
2019/12/03(火) 08:47:37.15ID:+IyagjW2 effective goは無料で読めるけど全然似てない。適当こくでねぇ。
131デフォルトの名無しさん
2019/12/05(木) 11:52:28.33ID:a2pVpta0 シマンテックのSEPがgolintを誤検知してさくっと削除
132デフォルトの名無しさん
2019/12/06(金) 09:12:39.72ID:f1K6IxOi 誤検知じゃないかも
133デフォルトの名無しさん
2019/12/08(日) 01:05:14.90ID:XpO05MF4 ジェネリクスとnnbdは入ったの?
134デフォルトの名無しさん
2019/12/12(木) 01:16:12.28ID:8N8BhmJA135デフォルトの名無しさん
2019/12/14(土) 02:29:56.08ID:yWRsmPzk ジェネリックよりインターフェースのメソッド名をリファクタリングする機能が欲しい
それとファイル内に閉じたスコープの新設
それとファイル内に閉じたスコープの新設
136デフォルトの名無しさん
2019/12/14(土) 12:20:22.72ID:txh4qI7o サクッとwebサーバー建てる時お前らエコー使うだろ?
後輩がジン一択言って譲らんのよ
後輩がジン一択言って譲らんのよ
137デフォルトの名無しさん
2019/12/14(土) 12:25:23.49ID:yWRsmPzk ごめんnet/http一択
138デフォルトの名無しさん
2019/12/14(土) 18:57:44.23ID:SoAE2obC サクッと立てたい時にフレームワークは使わない
139デフォルトの名無しさん
2019/12/14(土) 21:25:16.45ID:yWRsmPzk140デフォルトの名無しさん
2019/12/14(土) 21:32:58.33ID:b2AnHSwF >>139
お、イイネ!
お、イイネ!
141デフォルトの名無しさん
2019/12/16(月) 01:49:06.93ID:tdYdVSGI go初心者です。
田中、佐藤、加藤からランダム(重複なし)で3つ抽出するにはどうすればいいでしょうか?
田中、佐藤、加藤からランダム(重複なし)で3つ抽出するにはどうすればいいでしょうか?
142デフォルトの名無しさん
2019/12/16(月) 01:56:43.58ID:oBdKFKCd 取り出す数が配列の大きさと同じならシャッフルすれば良さそう
https://golang.org/pkg/math/rand/#Shuffle
https://golang.org/pkg/math/rand/#Shuffle
143デフォルトの名無しさん
2019/12/16(月) 02:11:32.44ID:tdYdVSGI144デフォルトの名無しさん
2019/12/16(月) 02:29:03.91ID:oBdKFKCd >>143
重複なしならシャッフルして前から5個取れば良さそう
重複なしならシャッフルして前から5個取れば良さそう
145デフォルトの名無しさん
2019/12/16(月) 02:37:03.68ID:tdYdVSGI >>144
すみません、前から5個取るにはどうすればいいのでしょうか?
すみません、前から5個取るにはどうすればいいのでしょうか?
146デフォルトの名無しさん
2019/12/16(月) 02:44:37.15ID:F1oitXIE147デフォルトの名無しさん
2019/12/16(月) 02:50:18.86ID:tdYdVSGI148デフォルトの名無しさん
2019/12/16(月) 18:22:41.60ID:e0hK5sZz おんぶに抱っこやんけ
149デフォルトの名無しさん
2019/12/16(月) 20:24:54.73ID:4cesp02J interfaceをに包まれた2つ以上の変数が持つ型が一致してるか判定できる構文てある?
こういうのはできないみたいだし…
var x interface{} = int(12)
var y interface{} = int(25)
if (a, ok1), (b, ok2) := x.(int), y.(int); ok1 && ok2 {
fmt.Println(a, b)
}
こういうのはできないみたいだし…
var x interface{} = int(12)
var y interface{} = int(25)
if (a, ok1), (b, ok2) := x.(int), y.(int); ok1 && ok2 {
fmt.Println(a, b)
}
150デフォルトの名無しさん
2019/12/16(月) 20:25:53.67ID:4cesp02J リフレクション使えば判別出来るのは知ってる
151デフォルトの名無しさん
2019/12/16(月) 20:35:08.46ID:F1oitXIE まぁ、こんなんかなぁ…
if a, ok1 := x.(int); ok1 {
if b, ok2 := y.(int); ok2 {
fmt.Println(a, b)
}
}
if a, ok1 := x.(int); ok1 {
if b, ok2 := y.(int); ok2 {
fmt.Println(a, b)
}
}
152デフォルトの名無しさん
2019/12/16(月) 20:41:01.13ID:F1oitXIE reflection ならこうかな
import "reflect"
if reflect.ValueOf(x).Type() == reflect.ValueOf(y).Type() {
fmt.Println(x, y)
}
import "reflect"
if reflect.ValueOf(x).Type() == reflect.ValueOf(y).Type() {
fmt.Println(x, y)
}
153デフォルトの名無しさん
2019/12/16(月) 23:14:32.24ID:xtOX+BoM 型アサーション使っていいなら、型スイッチという手段も
154デフォルトの名無しさん
2019/12/18(水) 18:41:56.85ID:q6G7SevV golang関係ないんだが、50000番台ポートをlistenで開きまくるアプリ書いてるんだが、テスト実行毎にデバッグexeのパスが変わってWindowsDefenderがブロックしましたダイアログ出してきてウザいよぅ
うちはSEPなんでお呼びじゃないし、更にブロックされてると主張してるがテストコードはガンガン通ってるからブロックしてねーし
ともかく、デバッグexeの一時フォルダを固定する設定ってある?そうすりゃ例外設定書ける
うちはSEPなんでお呼びじゃないし、更にブロックされてると主張してるがテストコードはガンガン通ってるからブロックしてねーし
ともかく、デバッグexeの一時フォルダを固定する設定ってある?そうすりゃ例外設定書ける
155デフォルトの名無しさん
2019/12/19(木) 17:58:01.30ID:E0rD8pHx156デフォルトの名無しさん
2019/12/19(木) 18:04:48.44ID:E0rD8pHx157デフォルトの名無しさん
2019/12/21(土) 20:16:12.25ID:YQ48l2e3 ep8 ー ep7で雑に投げられた謎を雑に処理、端から解決する気無し。既存キャラの大幅劣化に加え、ローズ、紫バァ、暗号破りの新キャラ3人がヘイトの対象に(主にローズ)
ep9 ー ep8の出来事はほぼ無かったことに…。大味極まりないが逆にそれが功を奏し、SWファンからの評価は概ね高い。興収でエンドゲームを超えられるか注目
ep9 ー ep8の出来事はほぼ無かったことに…。大味極まりないが逆にそれが功を奏し、SWファンからの評価は概ね高い。興収でエンドゲームを超えられるか注目
158デフォルトの名無しさん
2019/12/21(土) 20:17:39.18ID:YQ48l2e3 ごめん、完全誤爆
159デフォルトの名無しさん
2019/12/26(木) 23:28:38.63ID:mrZiX212160デフォルトの名無しさん
2019/12/26(木) 23:57:38.99ID:oc05wxay >>159
知らんのでググって、最初にヒットした奴の方が良いな
具体的にはオプションはそれぞれ対象の構造体ポインタを受けとるシグネチャを持つ関数
そのメソッドのスライスを順に呼ぶと、関数が特定フィールドに値をセットするという作り
まず、その方式だと型switchがいらない
オプションを増やしたければセット用の関数を増やす
他の利点として、設定する関数では他のフィールドも参照できるから、矛盾のある設定を防ぐとか柔軟な設定もできそう
ぱっと見、visitパターンっぽいアイデアに見えた
(個人的な初見の感想なんで深く考えて言ってる訳じゃない
なんだっけ、二重呼び出し?
知らんのでググって、最初にヒットした奴の方が良いな
具体的にはオプションはそれぞれ対象の構造体ポインタを受けとるシグネチャを持つ関数
そのメソッドのスライスを順に呼ぶと、関数が特定フィールドに値をセットするという作り
まず、その方式だと型switchがいらない
オプションを増やしたければセット用の関数を増やす
他の利点として、設定する関数では他のフィールドも参照できるから、矛盾のある設定を防ぐとか柔軟な設定もできそう
ぱっと見、visitパターンっぽいアイデアに見えた
(個人的な初見の感想なんで深く考えて言ってる訳じゃない
なんだっけ、二重呼び出し?
161デフォルトの名無しさん
2019/12/26(木) 23:58:56.08ID:uIk/XshQ162デフォルトの名無しさん
2019/12/27(金) 00:43:24.50ID:3vrV+39v163デフォルトの名無しさん
2019/12/27(金) 18:28:35.28ID:Ppw19SXV ひさしぶりにGO触ったら仕様変更の真っ最中なのね...
暫く冬眠しとくわ
暫く冬眠しとくわ
164デフォルトの名無しさん
2019/12/27(金) 18:35:37.18ID:DR+ZCW3w いつでも仕様変更
ジェネリックス欲しがってる層って、何のクラスタの人なんだろ
ジェネリックス欲しがってる層って、何のクラスタの人なんだろ
165デフォルトの名無しさん
2019/12/27(金) 20:14:12.67ID:MjAsf7uH Java
166デフォルトの名無しさん
2019/12/27(金) 20:24:26.71ID:ttsY8Nqp Java 原人、生きていたのか
167デフォルトの名無しさん
2019/12/28(土) 00:46:09.91ID:zIP3TdeH ていうか Java のジェネリクスもおもくそ後付けやん
168デフォルトの名無しさん
2019/12/28(土) 13:38:22.34ID:bI9Nn/0L golangのゆるふわなinterface機構の上でジェネリックスの出番なんてそうそうあるものなのかな?
169デフォルトの名無しさん
2019/12/28(土) 13:43:53.42ID:c5TG1bir ちょっと凝ったことをしようとすると interface{} まみれになるところが改善できれば。
170デフォルトの名無しさん
2019/12/28(土) 13:46:40.71ID:FraGl0GS ジェネリクスはGo教において諸悪の根源とされる「利用しようとする前に利用される方を設計する行為」の最たるものだからなあ
171デフォルトの名無しさん
2019/12/28(土) 14:04:34.89ID:bI9Nn/0L 自分としてはgolangの形式で動的にリンクできるライブラリ手法が欲しいな
dllみたいなcgoなライブラリじゃなくgolangネイティブな形で
interface定義とインスタンスをロードするビルダだけ静的リンクするスタイルを想定
これがあるとDIとかプラグインが捗るから
知らないだけで存在してたりする?
それともdotnetのactivexみたいにdllに皮かぶせれば行けたりする?
dllみたいなcgoなライブラリじゃなくgolangネイティブな形で
interface定義とインスタンスをロードするビルダだけ静的リンクするスタイルを想定
これがあるとDIとかプラグインが捗るから
知らないだけで存在してたりする?
それともdotnetのactivexみたいにdllに皮かぶせれば行けたりする?
172デフォルトの名無しさん
2019/12/28(土) 15:05:05.51ID:R0mqAcCR ドラフトに挙がっている Go の generics(contract ベース)が採用されれば、
>>169
> ちょっと凝ったことをしようとすると interface{} まみれになるところが改善できれば。
inteface{} を使わなくてもよくなるんじゃないか、って期待してる。
まぁ、最終的にどうなるかは分からんけど…
>>169
> ちょっと凝ったことをしようとすると interface{} まみれになるところが改善できれば。
inteface{} を使わなくてもよくなるんじゃないか、って期待してる。
まぁ、最終的にどうなるかは分からんけど…
173デフォルトの名無しさん
2019/12/28(土) 18:09:17.61ID:euZyKjoi ジェネリクスは大体ライブラリとかそっちの方が実装してて普通は使うだけ
他の言語でジェネリクスないときはいちいち型キャストと型チェックしてたから
そういうのが無くなって嬉しかったんだけどなあ
他の言語でジェネリクスないときはいちいち型キャストと型チェックしてたから
そういうのが無くなって嬉しかったんだけどなあ
174デフォルトの名無しさん
2019/12/28(土) 18:18:35.27ID:7CupGRjm goでapiサーバーを構築したいんだけど、参考になるサイトとかないですか?
175デフォルトの名無しさん
2019/12/28(土) 18:23:32.21ID:euZyKjoi 本買え
176デフォルトの名無しさん
2019/12/28(土) 19:01:41.80ID:bI9Nn/0L 状態を変化させるAPIだと、API作るよりCORSとかCSRF周りの勉強がめんどくさい
177デフォルトの名無しさん
2019/12/29(日) 14:50:10.22ID:J2Lmqp1K WebAPIサーバーなんて、Qiitaとかそこらへんに転がってるような「GoでWeb APIを作ってみた」
程度の簡単なものが実際に本当にプロダクションで運用されてるもんだ。
ただしその前方や足元にはALBやらKubernetesやらがあって、信頼性やスケーラビリティはGoではなくそういったクラウドインフラの層で担保するんだよ。
Goをプロダクション運用したいなら、GoよりAWSの知識の方がずっと重要だ。
程度の簡単なものが実際に本当にプロダクションで運用されてるもんだ。
ただしその前方や足元にはALBやらKubernetesやらがあって、信頼性やスケーラビリティはGoではなくそういったクラウドインフラの層で担保するんだよ。
Goをプロダクション運用したいなら、GoよりAWSの知識の方がずっと重要だ。
178デフォルトの名無しさん
2019/12/29(日) 18:17:57.65ID:rmxnHa0h >>177
アホ
アホ
179デフォルトの名無しさん
2019/12/30(月) 09:38:05.31ID:QVGDKUrk 標準パッケージのjsonのUnmarshal
なんでReaderインターフェースでなくてバイト配列を引数にしたんだろ?
DecoderはSAXみたいなトークナイザだしなぁ
なんでReaderインターフェースでなくてバイト配列を引数にしたんだろ?
DecoderはSAXみたいなトークナイザだしなぁ
180デフォルトの名無しさん
2019/12/30(月) 09:50:44.52ID:QVGDKUrk181デフォルトの名無しさん
2019/12/30(月) 10:12:03.12ID:5236BLqU だったらQiitaのコピペ記事で十分だな
182デフォルトの名無しさん
2019/12/30(月) 13:50:14.69ID:vvSvem59 >>179
いやNewDecoder(r).Decodeでいいだろ
いやNewDecoder(r).Decodeでいいだろ
183デフォルトの名無しさん
2019/12/30(月) 14:37:33.59ID:QVGDKUrk184デフォルトの名無しさん
2019/12/30(月) 14:40:19.65ID:wDUvJCMS 一見落着
185デフォルトの名無しさん
2020/01/01(水) 23:38:38.47ID:N0k15467 goルーチンってプログラム終了前に全部終了させる必要ありますか?
186デフォルトの名無しさん
2020/01/02(木) 02:53:52.42ID:YsIrUWNq >>185
必要かと言えば、必要はない
goroutineが終わらなくてもプロセスは終わる
でも、goroutineのdeferルーチンは呼ばれない
https://play.golang.org/p/Tt1Hbxzbr8v
つまり後始末とかはされない
後始末したければ、
1. context使って終了を通知
2. WaitGroup使ってgoroutineの終了を待つ
必要かと言えば、必要はない
goroutineが終わらなくてもプロセスは終わる
でも、goroutineのdeferルーチンは呼ばれない
https://play.golang.org/p/Tt1Hbxzbr8v
つまり後始末とかはされない
後始末したければ、
1. context使って終了を通知
2. WaitGroup使ってgoroutineの終了を待つ
187デフォルトの名無しさん
2020/01/02(木) 04:32:00.19ID:DNldEsUw ありがとう
188デフォルトの名無しさん
2020/01/08(水) 00:07:12.80ID:xIk/A1LK golangはgoroutineでNAMESPACEを適切にコントロールする手段がないのでDockerコンテナを記述するには適していない、という記事を読んだんだけど
これって対策とかロードマップとか何か打ち出されてない?
これって対策とかロードマップとか何か打ち出されてない?
189デフォルトの名無しさん
2020/01/12(日) 02:20:29.72ID:/FVSphLE >>188
記事はどこ?
記事はどこ?
190デフォルトの名無しさん
2020/01/12(日) 02:36:05.34ID:K4o7W11h >>189
2017だから結構古い話
https://www.publickey1.jp/blog/17/rustdockerrailcarrust.html
OracleがDockerコンテナランタイムの実装言語としてgoじゃなくRUSTを採用した理由
んで、goroutine関係って改修ってされてる話って見たことなかったんで、これってどうなってるのと
2017だから結構古い話
https://www.publickey1.jp/blog/17/rustdockerrailcarrust.html
OracleがDockerコンテナランタイムの実装言語としてgoじゃなくRUSTを採用した理由
んで、goroutine関係って改修ってされてる話って見たことなかったんで、これってどうなってるのと
191デフォルトの名無しさん
2020/01/12(日) 10:07:33.12ID:EKUpo6h1 記事読んでみたけど、問題はnamespaceそのものじゃなくてnative threadへのアクセスじゃないのかな。
192デフォルトの名無しさん
2020/01/12(日) 10:35:25.29ID:F6k+/xNL 言語選択ネタは基本的に使いたいものを正当化するためのゴリ押しになりがちだから話半分に聞いておくのが正しい態度
193デフォルトの名無しさん
2020/01/12(日) 10:41:45.99ID:K4o7W11h 根本的な原因はそうなんだろうけど、クリアするハードルは名前空間なのかなと
まあ、自分はDockerコンテナ自身には今のところ手を出す気はないアプリ作者だけど、ちょっと気になっただけなんだ
元からgolangはデバイスドライバとかの低レベルのシステム開発は対象としてないように見える(主観)ことから、それと同様に不要な機能としてガン無視なのかな?
それならそれで文句がある訳じゃない
まあ、自分はDockerコンテナ自身には今のところ手を出す気はないアプリ作者だけど、ちょっと気になっただけなんだ
元からgolangはデバイスドライバとかの低レベルのシステム開発は対象としてないように見える(主観)ことから、それと同様に不要な機能としてガン無視なのかな?
それならそれで文句がある訳じゃない
194デフォルトの名無しさん
2020/01/12(日) 11:31:15.29ID:LxAQ0O23 いつぞやの「味見」の兄チャンか?
195デフォルトの名無しさん
2020/01/12(日) 11:45:59.65ID:K4o7W11h えーと、多分そう
ツール書くのにperl awkからjava c#経由して今はgolangが便利すぎて引っ越してきた
ツール書くのにperl awkからjava c#経由して今はgolangが便利すぎて引っ越してきた
196デフォルトの名無しさん
2020/01/12(日) 11:48:51.94ID:K4o7W11h 過去ログ見たら別の人
自分はmodulesが安定しねーっ、と嘆いていたクチ
自分はmodulesが安定しねーっ、と嘆いていたクチ
197デフォルトの名無しさん
2020/01/12(日) 12:49:08.86ID:1tVaWxzz おまえか!
198デフォルトの名無しさん
2020/01/13(月) 04:33:46.15ID:zAmpThch199デフォルトの名無しさん
2020/01/15(水) 23:33:03.13ID:HHNoDBvB プログラミング言語ごとの年収
https://pbs.twimg.com/media/EOSS8tqU4AAY75v.png
https://pbs.twimg.com/media/EOSS8tqU4AAY75v.png
200デフォルトの名無しさん
2020/01/15(水) 23:43:56.51ID:A/ClkkqP 今のところGoはAWSやGCPを極めた人が使うイメージだな
年収が高いのもそのためだろう
Goはドカタグラミングにも最適だから、もし今後も順調に普及していけば平均年収は大幅に下がりそう
年収が高いのもそのためだろう
Goはドカタグラミングにも最適だから、もし今後も順調に普及していけば平均年収は大幅に下がりそう
201デフォルトの名無しさん
2020/01/16(木) 08:41:54.42ID:FflLw5gy 覚えなきゃならない独特で特殊なことがインターフェースの概念くらいで、構文は平凡以下の厳選されたものしかないから学習ハードル低いよな
自分はc言語とJavaとJavaScriptを経験してるから、一週間でほぼ使えるようになった
自分はc言語とJavaとJavaScriptを経験してるから、一週間でほぼ使えるようになった
202デフォルトの名無しさん
2020/01/16(木) 19:01:13.36ID:aiRikJgB 下手すると何も特に勉強しなくてもただ人の書いたコードながめるだけで
「ああこんな感じか?」って雰囲気だけでそれなりのコードかけるようになっちゃう言語
「ああこんな感じか?」って雰囲気だけでそれなりのコードかけるようになっちゃう言語
203デフォルトの名無しさん
2020/01/16(木) 21:24:12.96ID:u+AvDfAm goはシンタックスシュガー多めで、初学者が見よう見まねで学習すると嵌りやすい印象。
204デフォルトの名無しさん
2020/01/16(木) 21:59:12.79ID:TiSttWiL ほとんど使う局面がないstruct実体はでっかい落とし穴
実体配列rangeで回して更新されねーっと悩む初心者のいかに多いことか
実体配列rangeで回して更新されねーっと悩む初心者のいかに多いことか
205デフォルトの名無しさん
2020/01/16(木) 22:08:19.79ID:TiSttWiL 糖衣構文?なんかあったっけ?
206デフォルトの名無しさん
2020/01/16(木) 22:19:59.62ID:rwq+tT6g207デフォルトの名無しさん
2020/01/16(木) 22:45:35.06ID:TiSttWiL 落ちるなら、そちらのほうが万倍はマシでしょ
落ちなくて値が更新されないという恐怖
落ちなくて値が更新されないという恐怖
208デフォルトの名無しさん
2020/01/16(木) 23:37:40.70ID:v13qNblq 誰も staticcheck 使ってないのか……
209デフォルトの名無しさん
2020/01/18(土) 11:13:25.73ID:8BJKylNj golangのシンタックスシュガーは思いつく限りだと
1. := での型推論による変数宣言の代替
2. レシーバがポインタ型の場合に構造体実体でメソッドを呼び出すと、ポインタに変換して呼び出す
C言語からの後方互換性を意識するなら -> は廃止しなけりゃいいのに、中途半端
モダンな言語と同じにポインタを参照と呼び替えて、実体が欲しけりゃunsafeでやれと
1. := での型推論による変数宣言の代替
2. レシーバがポインタ型の場合に構造体実体でメソッドを呼び出すと、ポインタに変換して呼び出す
C言語からの後方互換性を意識するなら -> は廃止しなけりゃいいのに、中途半端
モダンな言語と同じにポインタを参照と呼び替えて、実体が欲しけりゃunsafeでやれと
210デフォルトの名無しさん
2020/01/18(土) 11:28:22.96ID:s9OHHI5s 学習時に2は一貫性なくて嫌だった
211デフォルトの名無しさん
2020/01/18(土) 11:30:13.71ID:8BJKylNj 3. {フィールド:値, ...} 形式の構造体生成式
・・・これは構文だしシンタックスシュガーなのか微妙
シンタックスシュガー多めという意見は、どういう観点で構文をシンタックスシュガーだと判断しているのか俺にはサッパリわからない
むしろラムダ式(本来の無名関数という意味ではなく -> で書く記法)というシンタックスシュガーすらないgolangはむしろシンタックスシュガー少なすぎ(でもそこがシビれ
・・・これは構文だしシンタックスシュガーなのか微妙
シンタックスシュガー多めという意見は、どういう観点で構文をシンタックスシュガーだと判断しているのか俺にはサッパリわからない
むしろラムダ式(本来の無名関数という意味ではなく -> で書く記法)というシンタックスシュガーすらないgolangはむしろシンタックスシュガー少なすぎ(でもそこがシビれ
212デフォルトの名無しさん
2020/01/18(土) 13:18:44.40ID:AhPxC9uw シンタックスシュガーといえば、&Hoge{ ... }で構造体を初期化しつつポインタを取れるのに、&1はダメなのがウザい
213デフォルトの名無しさん
2020/01/18(土) 13:46:22.20ID:4nVoSga0 シンタックスシュガーというか、なんか一貫性に欠ける略記法みたいなのが多いような
214デフォルトの名無しさん
2020/01/18(土) 14:10:48.57ID:8BJKylNj 多いような、と言われてもなぁ
略記法と言っても、_ とか [::2] とかしかぐらいしか思い浮かばないんで、具体的に
略記法と言っても、_ とか [::2] とかしかぐらいしか思い浮かばないんで、具体的に
215デフォルトの名無しさん
2020/01/18(土) 15:16:24.10ID:6ictA0Lc switch w := v.(type) はかなりエイリアン感あるな
Goに存在する数少ない型推論と言えるものの一つ
Goに存在する数少ない型推論と言えるものの一つ
216デフォルトの名無しさん
2020/01/19(日) 06:24:36.25ID:lyRWqXEG Dockerの本社いい所にあるね
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
https://www.youtube.com/watch?v=WkEWDXogjR8
https://duckduckgo.com/bang_lite.html
!yt giants homerun boat
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
https://www.youtube.com/watch?v=WkEWDXogjR8
https://duckduckgo.com/bang_lite.html
!yt giants homerun boat
217デフォルトの名無しさん
2020/01/19(日) 10:59:57.18ID:FsFcJUwr 一貫性に欠ける記述に思い至った
スライスとマップだけ生成すると実体ではなくてポインタを返す
やっぱり、構造体も生成するとポインタを返してほしかった
要らんよな実体
スライスとマップだけ生成すると実体ではなくてポインタを返す
やっぱり、構造体も生成するとポインタを返してほしかった
要らんよな実体
218デフォルトの名無しさん
2020/01/19(日) 11:18:53.24ID:FsFcJUwr 要らないというのはちょっと正確性に欠けてた
普通のロジックを書く場合には要らない
DLL呼び出しとか、バイナリファイル書き出しとか、外部I/Fとして任意のアラインメントでのバイト列に直列化するパッケージがあって、内部では全て参照と言う名のポインタを扱うようにしてくれていたら何も問題は無かった
構造体ポインタでスライス作って、構造体のアドレスを入れて、という書き方を説明するためには、アドレスについて教えなけりゃならない
それを理由として新人研修の言語教育の候補リストから落としたんだった
普通のロジックを書く場合には要らない
DLL呼び出しとか、バイナリファイル書き出しとか、外部I/Fとして任意のアラインメントでのバイト列に直列化するパッケージがあって、内部では全て参照と言う名のポインタを扱うようにしてくれていたら何も問題は無かった
構造体ポインタでスライス作って、構造体のアドレスを入れて、という書き方を説明するためには、アドレスについて教えなけりゃならない
それを理由として新人研修の言語教育の候補リストから落としたんだった
219デフォルトの名無しさん
2020/01/19(日) 18:45:36.29ID:E4qdczJe すべてポインタてJavaか
220デフォルトの名無しさん
2020/01/19(日) 21:41:47.53ID:K0reTlt5 構造体がポインタじゃないのなんでだろ
結局全部ポインタにしがち
イミュータブルな操作に値レシーバ使うことと整合させるため?
結局全部ポインタにしがち
イミュータブルな操作に値レシーバ使うことと整合させるため?
221デフォルトの名無しさん
2020/01/20(月) 00:17:10.01ID:4Ml4H1E5 ・構造体配列のアクセスがゲロ遅い
・GCに負担がかかる
・エスケープ解析が困難
・C/C++との相互運用時に>>218のような変換が必要になりクソ非効率だし実装も面倒
・nilを受け入れないことを保証できない
・GCに負担がかかる
・エスケープ解析が困難
・C/C++との相互運用時に>>218のような変換が必要になりクソ非効率だし実装も面倒
・nilを受け入れないことを保証できない
222デフォルトの名無しさん
2020/01/20(月) 10:38:34.77ID:Ta+b5biN CL 187317 for the current proof-of-concept implementation.
https://go-review.googlesource.com/c/go/+/187317
https://go-review.googlesource.com/c/go/+/187317
223デフォルトの名無しさん
2020/01/20(月) 11:55:50.46ID:eiih9B9I224デフォルトの名無しさん
2020/01/20(月) 13:14:26.10ID:0GX6odYx Cと同じものが欲しいならCを使ってれば良いんだよ
225デフォルトの名無しさん
2020/01/20(月) 14:06:44.63ID:OxRp59bR 正論
226デフォルトの名無しさん
2020/01/20(月) 15:43:03.96ID:lA6Ihl1+ GCが欲しかったんだよ
227デフォルトの名無しさん
2020/01/20(月) 18:15:01.52ID:LSsGv7mq 静的解析でgolangci-lint導入してみた
そしたら gosimple が大量に felse == じゃなく ! 使えと
うるせー!年寄りには ! は見辛くて見逃すんだよ!!
どこだよ、オフする設定方法
そしたら gosimple が大量に felse == じゃなく ! 使えと
うるせー!年寄りには ! は見辛くて見逃すんだよ!!
どこだよ、オフする設定方法
228デフォルトの名無しさん
2020/01/20(月) 18:26:26.20ID:Ta+b5biN felse てw
229デフォルトの名無しさん
2020/01/20(月) 18:33:13.71ID:s/Cy+4Aw フォールス
230デフォルトの名無しさん
2020/01/20(月) 20:08:08.71ID:YdJ/u2zR TYPOした鬱だし
231デフォルトの名無しさん
2020/01/20(月) 22:17:58.60ID:2yM9TKqu だっさ
232デフォルトの名無しさん
2020/01/21(火) 19:27:40.22ID:o0UeX6qu 静的解析の余計な判定をオフする方法がわかったんで書いとく
// nolint:gosimple
とか行の後とか前行に書くとそこだけオフされる
設定ファイルでオフすると設定ファイルを公開する手間が増える
コードに書いておく方がベターだと思った
// nolint:gosimple
とか行の後とか前行に書くとそこだけオフされる
設定ファイルでオフすると設定ファイルを公開する手間が増える
コードに書いておく方がベターだと思った
233デフォルトの名無しさん
2020/01/21(火) 20:10:41.23ID:NzRBbl2V 素直に ! 使えw
234デフォルトの名無しさん
2020/01/21(火) 20:41:44.16ID:UsGwmUNt >>232
色変えろ🎵
色変えろ🎵
235デフォルトの名無しさん
2020/01/23(木) 09:22:53.97ID:pzDfErEA GO2になるのいつや?
236デフォルトの名無しさん
2020/01/23(木) 10:13:08.23ID:yjFFgoKI https://blog.golang.org/toward-go2
Go 1.20がGo 2.0になるらしいから順調にいけば2023年
Go 1.20がGo 2.0になるらしいから順調にいけば2023年
237デフォルトの名無しさん
2020/01/23(木) 22:59:41.19ID:hGTEnJ15 ひとことでいうと
この言語は名前がだめ
この言語は名前がだめ
238デフォルトの名無しさん
2020/01/24(金) 00:05:38.38ID:oUbAtTQV goでググるな
golangでググれ
golangでググれ
239デフォルトの名無しさん
2020/01/24(金) 01:02:54.82ID:07dDYyB2 cとかdよりは……
240デフォルトの名無しさん
2020/01/24(金) 11:30:28.77ID:ytRnz1Ft 一時期Cの関数を検索したかっただけなのにphpのばっかり出て来たときは辟易した
241デフォルトの名無しさん
2020/01/24(金) 16:05:17.82ID:UzV8rxSa 一時期旧日本海軍の軍艦の画像を検索したかっただけなのになぜか
萌え絵のおっぱいおねーさんばっかりでてくる、みたいな状況か
萌え絵のおっぱいおねーさんばっかりでてくる、みたいな状況か
242デフォルトの名無しさん
2020/01/24(金) 16:06:50.05ID:D9pKpEah JULIAが最悪
243デフォルトの名無しさん
2020/01/24(金) 16:20:31.67ID:DOTl6W7s www
244デフォルトの名無しさん
2020/01/24(金) 23:34:56.86ID:e4qsn6ol MFCのCStringもヤバい
245デフォルトの名無しさん
2020/01/25(土) 00:34:31.13ID:xHG8Mzpn ご覧〜
246デフォルトの名無しさん
2020/02/01(土) 05:08:16.60ID:dRW3BMck The Go Programming Language Specification
Version of July 31, 2019
https://golang.org/ref/spec
Goプログラミング言語仕様
Version of September 4, 2012
このサイトの更新が滞っており、情報が古くなっておりますのでご注意ください。
このドキュメントは、http://golang.org/ref/specの翻訳です。
http://golang.jp/go_spec
Version of July 31, 2019
https://golang.org/ref/spec
Goプログラミング言語仕様
Version of September 4, 2012
このサイトの更新が滞っており、情報が古くなっておりますのでご注意ください。
このドキュメントは、http://golang.org/ref/specの翻訳です。
http://golang.jp/go_spec
247デフォルトの名無しさん
2020/02/01(土) 18:04:32.61ID:QlkeBgTk php界隈みたいに翻訳してくれる神様降臨してほしい!
248デフォルトの名無しさん
2020/02/02(日) 01:44:28.81ID:EdXZobHi 頑張ってくれた先人には申し訳ないけど
古い情報がトップに出てくるのは悪影響しか無い気もする
古い情報がトップに出てくるのは悪影響しか無い気もする
249デフォルトの名無しさん
2020/02/02(日) 19:09:21.25ID:iIujTevh どこの言語も同じだよな
特にモジュール関係はどの言語もひどい有様で初心者が皆困惑して言語から離れる
一度使用固めたら不都合でも10年は同じものを使って欲しいw
特にモジュール関係はどの言語もひどい有様で初心者が皆困惑して言語から離れる
一度使用固めたら不都合でも10年は同じものを使って欲しいw
250デフォルトの名無しさん
2020/02/02(日) 19:15:45.79ID:iIujTevh 今発売されているGoの入門書でモジュール対応してるものってあるの?
251デフォルトの名無しさん
2020/02/02(日) 19:31:26.77ID:N5COx75g モジュールと言われても用語としての範囲が膨大すぎて意味が伝わらない
252デフォルトの名無しさん
2020/02/02(日) 22:01:03.97ID:N57GyRxf みんなのGo買ったけど初心者向けじゃなくて読んでないんですが
本当に初心者向けの本ってありませんか?
本当に初心者向けの本ってありませんか?
253デフォルトの名無しさん
2020/02/02(日) 22:10:14.40ID:dqawCQuQ254デフォルトの名無しさん
2020/02/03(月) 00:07:31.65ID:Uql495sI >>252
今いい本はないと思う
今いい本はないと思う
255デフォルトの名無しさん
2020/02/03(月) 12:03:18.74ID:62FLJlST みんなのGoってオンラインで無料で全部読めるやつ?
256デフォルトの名無しさん
2020/02/03(月) 12:29:31.57ID:YoBHNt10 >>252
改訂2版 みんなのGo言語、2019/8/1
この本は、各言語の「Effective 何々」に当たる本
改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015
この本が初心者向けの文法書
>>246
に書いてある、翻訳プロジェクト、公式サイトの日本語訳
http://golang.jp/
は、エイベルの古川部長と社員が書いていた
改訂2版 みんなのGo言語、2019/8/1
この本は、各言語の「Effective 何々」に当たる本
改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015
この本が初心者向けの文法書
>>246
に書いてある、翻訳プロジェクト、公式サイトの日本語訳
http://golang.jp/
は、エイベルの古川部長と社員が書いていた
257デフォルトの名無しさん
2020/02/03(月) 13:10:43.80ID:gvFxJnFo ガチの初心者がGoなんか使って何するのか、嫌味じゃなくて興味がある
Goは言語だけできても全く何の役にも立たないと思うが、
本来のGoのコンセプトの通りに、ペーペーにGoだけ覚えさせてアプリケーションコードだけ書かせるような組織が日本にも存在する時代になったのだろうか
Goは言語だけできても全く何の役にも立たないと思うが、
本来のGoのコンセプトの通りに、ペーペーにGoだけ覚えさせてアプリケーションコードだけ書かせるような組織が日本にも存在する時代になったのだろうか
258256
2020/02/03(月) 16:01:19.93ID:YoBHNt10 サーバー側は、Ruby → Node.js, Go
今世紀最大の起業家、Vagrant の作者・Mitchell Hashimoto なんか、まさにそう。
今や、Go の重鎮
Ruby on Rails, Sinatra などで、サーバー側を一通り作った人が、Go へ行く。
そういうキャリアパスでは「みんなのGo言語」は、良い本
今世紀最大の起業家、Vagrant の作者・Mitchell Hashimoto なんか、まさにそう。
今や、Go の重鎮
Ruby on Rails, Sinatra などで、サーバー側を一通り作った人が、Go へ行く。
そういうキャリアパスでは「みんなのGo言語」は、良い本
259デフォルトの名無しさん
2020/02/03(月) 18:05:01.17ID:XimuQ1Xy >>257
>Goは言語だけできても全く何の役にも立たないと思うが、
Goに限らず汎用言語はみんなそうだろ
標準ライブラリが充実してて言語の構成要素が少ないGoを
最初の言語として選ぶのは悪くない選択だと思うぞ
C/Java/C#/JavaScriptらと比べるとずっと簡単
>Goは言語だけできても全く何の役にも立たないと思うが、
Goに限らず汎用言語はみんなそうだろ
標準ライブラリが充実してて言語の構成要素が少ないGoを
最初の言語として選ぶのは悪くない選択だと思うぞ
C/Java/C#/JavaScriptらと比べるとずっと簡単
260デフォルトの名無しさん
2020/02/03(月) 18:16:47.48ID:Uql495sI だからこそモジュールのバージョン管理が大事なんだと思う
261デフォルトの名無しさん
2020/02/03(月) 18:18:43.56ID:Uql495sI 基礎からわかる Go言語もずぶの素人には難しいと言うか無理だろこれは
262デフォルトの名無しさん
2020/02/03(月) 19:53:53.66ID:fumIbgov 関数の引数で []*xxx と []xxx があるんですが、どっちを使ったらいいんでしょうか
263デフォルトの名無しさん
2020/02/03(月) 20:45:13.09ID:eCgFnDlS 間違ってたらコンパイルエラー出るから、コンパイルエラーが出ないほう
呼んだ先の関数の引数の定義をよーく読め
でも、実際に渡している方の部分を見て書いてる可能性もあるか……
インターフェースの配列を受け取る関数だとすると、どちらでもコンパイルエラーは起こらない
ぶっちゃけ、その場合はどちらでも構わないことが多い
[]xxxxは、xxxxがインターフェースでなく構造体だったなら、十中八九はバグだと思う
バグでなく意図的に使うケースもありはするけど………………
呼んだ先の関数の引数の定義をよーく読め
でも、実際に渡している方の部分を見て書いてる可能性もあるか……
インターフェースの配列を受け取る関数だとすると、どちらでもコンパイルエラーは起こらない
ぶっちゃけ、その場合はどちらでも構わないことが多い
[]xxxxは、xxxxがインターフェースでなく構造体だったなら、十中八九はバグだと思う
バグでなく意図的に使うケースもありはするけど………………
264デフォルトの名無しさん
2020/02/03(月) 21:09:34.89ID:gvFxJnFo >>259
もちろんライブラリやフレームワークの学習は前提だけど、
仮にプログラミング初学者がGo勉強して基本的なCRUDアプリを作れるようになったとして仕事あるか?
極端な話、初学者がSpringとかASP.NETとかRailsとか覚えたら、
サーバーを起動する方法もその上でアプリを動かす方法も知らなくても仕事はいくらでもあるわけだよ
一方Go名指しの求人って、ほぼ例外なく、複数言語が使えてAWSもわかるフルスタックな人が期待されてると思うんだよな
もちろんGoが使えたらプログラミングの素質はあるだろうってことでの採用はありうけど、
そうやって入った環境では多分Goを書かせてはもらえないだろう
もちろんライブラリやフレームワークの学習は前提だけど、
仮にプログラミング初学者がGo勉強して基本的なCRUDアプリを作れるようになったとして仕事あるか?
極端な話、初学者がSpringとかASP.NETとかRailsとか覚えたら、
サーバーを起動する方法もその上でアプリを動かす方法も知らなくても仕事はいくらでもあるわけだよ
一方Go名指しの求人って、ほぼ例外なく、複数言語が使えてAWSもわかるフルスタックな人が期待されてると思うんだよな
もちろんGoが使えたらプログラミングの素質はあるだろうってことでの採用はありうけど、
そうやって入った環境では多分Goを書かせてはもらえないだろう
265デフォルトの名無しさん
2020/02/03(月) 21:11:33.43ID:fumIbgov なんかポインタとsliceが糞だなあ
266デフォルトの名無しさん
2020/02/03(月) 21:12:18.59ID:fumIbgov containsメソッドすらないとか頭おかしい
267デフォルトの名無しさん
2020/02/03(月) 22:08:48.44ID:XimuQ1Xy >>264
同意するかは別にして言いたいことは理解した
そういう内容なら「Goは言語だけできても全く何の役にも立たないぞ」じゃなくて
「初学者がGoだけ習得しても仕事はないぞ」って書けばいいんじゃないかな
同意するかは別にして言いたいことは理解した
そういう内容なら「Goは言語だけできても全く何の役にも立たないぞ」じゃなくて
「初学者がGoだけ習得しても仕事はないぞ」って書けばいいんじゃないかな
268デフォルトの名無しさん
2020/02/03(月) 23:33:18.01ID:MUEM5Vrv >>266
https://play.golang.org/p/fZ3EJyfPYWg
(メソッドじゃないけど)
やはり reflection は遅いな…… 早く >>222 の contracts を正式採用してほしい
https://play.golang.org/p/fZ3EJyfPYWg
(メソッドじゃないけど)
やはり reflection は遅いな…… 早く >>222 の contracts を正式採用してほしい
269デフォルトの名無しさん
2020/02/04(火) 18:47:00.52ID:XAK/YcTO Goは標準ライブラリが洗練されてない感じがする
270デフォルトの名無しさん
2020/02/04(火) 21:23:46.96ID:U30pp8jN go言語って糞じゃね馬鹿じゃね
271デフォルトの名無しさん
2020/02/04(火) 21:32:43.59ID:U30pp8jN 結局みんなと同じようにRuby on RailsとかPHPやっとけばいいんじゃねえのか
人と違うことしてる俺様かっこいいみたいなデスクトップのLinux使ってよく分からないエラー出ながら使ってる奴とか
そういうことじゃねえのかポインタとかスライスとか糞
[]xxxと[]*xxxをAPIのレスポンスで返したら同じjsonが返ってくるとか糞
普通ポインタの配列なんだからアドレスの羅列が返ってくるんじゃねえんか
マジ糞言語
人と違うことしてる俺様かっこいいみたいなデスクトップのLinux使ってよく分からないエラー出ながら使ってる奴とか
そういうことじゃねえのかポインタとかスライスとか糞
[]xxxと[]*xxxをAPIのレスポンスで返したら同じjsonが返ってくるとか糞
普通ポインタの配列なんだからアドレスの羅列が返ってくるんじゃねえんか
マジ糞言語
272デフォルトの名無しさん
2020/02/04(火) 21:58:02.63ID:zLczLA6F スクリプト言語ならpythonじゃないの今は
273デフォルトの名無しさん
2020/02/04(火) 22:07:10.93ID:Z75ak/G2 goはあちらこちら洗練されてない。存在としては好きなんだがなぁ。
274デフォルトの名無しさん
2020/02/04(火) 22:19:47.96ID:/eeo/zhy 洗練されているプログラミング言語ってあるのか?
275デフォルトの名無しさん
2020/02/04(火) 22:39:33.05ID:Bi0juC3i 矛盾が少なくて必要最小限の仕様しかない、という意味ならC
だから未だに現役なわけで
俺はJavaScriptが好きだけど
JSもCと同様Alt-JSが大量に発生したものの殺しきれなかった、という意味ではある程度洗練はしている
言語としての問題は typeof(null)==="object" 位
だから未だに現役なわけで
俺はJavaScriptが好きだけど
JSもCと同様Alt-JSが大量に発生したものの殺しきれなかった、という意味ではある程度洗練はしている
言語としての問題は typeof(null)==="object" 位
276デフォルトの名無しさん
2020/02/04(火) 22:49:15.87ID:U30pp8jN やっぱgoに使い慣れている人でも糞だと思ってるんだな
277デフォルトの名無しさん
2020/02/05(水) 00:01:28.88ID:+M89QQ88 >[]xxxと[]*xxxをAPIのレスポンスで返したら同じjsonが返ってくるとか糞
ちょっと意味がわからないけど、要するにポインタレシーバでのインターフェースで実体も受け取れるという話じゃないかと思うんで同意
すんごくブッ飛んでるよなあれは……
ちょっと意味がわからないけど、要するにポインタレシーバでのインターフェースで実体も受け取れるという話じゃないかと思うんで同意
すんごくブッ飛んでるよなあれは……
278デフォルトの名無しさん
2020/02/05(水) 00:11:37.94ID:+M89QQ88 JavaScriptも嫌いじゃないけど、ほぼほぼ毎年仕様が追加されていて着いていけない
prototypeで書いてもいいよね?bind使っててもいいよね?ダメ?
prototypeで書いてもいいよね?bind使っててもいいよね?ダメ?
279デフォルトの名無しさん
2020/02/05(水) 01:02:22.30ID:gohv3xpv goは何がだめといって、まず名前が駄目
280デフォルトの名無しさん
2020/02/05(水) 01:28:31.42ID:+M89QQ88 公式サイトですらgolangだもんな……
C言語よりは検索性に優れてるよ!w
甲乙じゃなくて丙丁つけがたい争い
C言語よりは検索性に優れてるよ!w
甲乙じゃなくて丙丁つけがたい争い
281デフォルトの名無しさん
2020/02/05(水) 09:20:22.69ID:xGO7LiGl go とか [] とか []* とか すごく検索しづらい
282デフォルトの名無しさん
2020/02/05(水) 09:21:05.78ID:jAnPlWtF >>278
エアプかよ
さすがにbindがNGは今時ないと思うぞ
まあそうやって駄目な理由を探しているようではずっとエアプのままだろうよ
goが洗練されていないのは当たり前、新しい言語だからだ
何だかんだでJavaScriptは25年、Cなんて50年近いのだから、必要な仕様はとっくに入っている
JavaScriptでも、今追加されている仕様はそもそも「あってもなくてもいいもの」でしかない
それに比べて、まだgoは根本的な部分で仕様変更が為されている段階だろ
この意味では、今現在のgoをプログラミング初心者が触るのは間違っているとは言えると思うけど
お前も含めて
エアプかよ
さすがにbindがNGは今時ないと思うぞ
まあそうやって駄目な理由を探しているようではずっとエアプのままだろうよ
goが洗練されていないのは当たり前、新しい言語だからだ
何だかんだでJavaScriptは25年、Cなんて50年近いのだから、必要な仕様はとっくに入っている
JavaScriptでも、今追加されている仕様はそもそも「あってもなくてもいいもの」でしかない
それに比べて、まだgoは根本的な部分で仕様変更が為されている段階だろ
この意味では、今現在のgoをプログラミング初心者が触るのは間違っているとは言えると思うけど
お前も含めて
283デフォルトの名無しさん
2020/02/05(水) 09:26:08.48ID:xGO7LiGl 糞じゃね言って同意って言われるのが終わってる
否定してほしくて敢えて過激なこと言ってるのに
否定してほしくて敢えて過激なこと言ってるのに
284デフォルトの名無しさん
2020/02/05(水) 11:25:45.04ID:xJPwpbdq Goが気持ちいいのは、意識高い先人達が築き上げてきた無駄に複雑な数多の概念を「Goだから」で一蹴できるところ
例えばテストコードの assert that 系のDSL
誰もが薄々糞だと気付いていたが、意識高い空気がそれを許さなかった
それを堂々と「こんな糞は要らんかったんや!ifでええんや!」と言えるお墨付きが貰えた
Goが数々の欠点にも関わらず言語として好まれた本当の理由は、そういうカタルシスにあると思うわ
例えばテストコードの assert that 系のDSL
誰もが薄々糞だと気付いていたが、意識高い空気がそれを許さなかった
それを堂々と「こんな糞は要らんかったんや!ifでええんや!」と言えるお墨付きが貰えた
Goが数々の欠点にも関わらず言語として好まれた本当の理由は、そういうカタルシスにあると思うわ
285デフォルトの名無しさん
2020/02/05(水) 11:28:29.38ID:jAnPlWtF286デフォルトの名無しさん
2020/02/05(水) 11:38:29.79ID:jAnPlWtF >>284
それは一理ある
公式でも言っているとおり、Goは敢えてガラガラポンしている
多分、いわゆる「お作法」に辟易している若くて元気のいい奴に受けているのだと思う
だから「結果的に再発明になってもいい」と思える奴等には良いプラットフォームだろう
(なお俺はassertなんて使わないことは一応付け加えておく)
それは一理ある
公式でも言っているとおり、Goは敢えてガラガラポンしている
多分、いわゆる「お作法」に辟易している若くて元気のいい奴に受けているのだと思う
だから「結果的に再発明になってもいい」と思える奴等には良いプラットフォームだろう
(なお俺はassertなんて使わないことは一応付け加えておく)
287デフォルトの名無しさん
2020/02/05(水) 12:34:56.45ID:qmME163k みんなgoとかgolangって書いてるけど実際はGoなんだよね
288デフォルトの名無しさん
2020/02/05(水) 13:20:07.74ID:a4For48W Goだけで全て完結して欲しい割りとマジで
289デフォルトの名無しさん
2020/02/05(水) 14:25:36.89ID:37hCX2la Hiromi Go
290デフォルトの名無しさん
2020/02/05(水) 14:30:53.97ID:qmME163k 文字関連のライブラリとかかなり雑と言うか古臭く感じる
cから発展したともとれるが嫌な感じだな
uint64を文字列にするのもいまだにググって調べてる
cから発展したともとれるが嫌な感じだな
uint64を文字列にするのもいまだにググって調べてる
291デフォルトの名無しさん
2020/02/05(水) 14:47:19.60ID:37hCX2la 毎回ググって調べてる奴の方が雑…というか鈍くさい
292デフォルトの名無しさん
2020/02/13(木) 21:15:58.79ID:T5TlK5HS293デフォルトの名無しさん
2020/02/13(木) 22:33:18.92ID:iq5JxXln interfaceとgoroutineはオシャレだと思うぞ。あとはダサダサだけどw
294デフォルトの名無しさん
2020/02/13(木) 23:42:46.27ID:XZZdbCcO selectの非同期待ち受けって、素敵だと思うの
もじもじ……
もじもじ……
295デフォルトの名無しさん
2020/02/13(木) 23:49:11.45ID:TfOBxj3E goroutine周りは記述が簡便で初心者も手を出しやすい雰囲気を醸し出してるのに、実際には低レベルで罠が多いんだよなあ
これだけ徹底的な低能仕様なのにデッドロックに対する安全機構のようなものが何もないのはいかがなものか
せめてpromise的なのくらいは欲しい
これだけ徹底的な低能仕様なのにデッドロックに対する安全機構のようなものが何もないのはいかがなものか
せめてpromise的なのくらいは欲しい
296デフォルトの名無しさん
2020/02/13(木) 23:58:15.23ID:Dd88Q3ZL context を使えばいいじゃない
297デフォルトの名無しさん
2020/02/13(木) 23:59:19.40ID:WnzNNrEx Goの非同期機能の公式の説明で共有メモリは危険だとかドヤ顔で講釈垂れてる割には
ちょっとchannelの扱いをミスると簡単にデッドロックするんだよな
Goの設計のセンスは基本的には素晴らしいと思うけど、
非同期処理の難しさに関してはGoをもってしても効果的な解決法を見つけられなかったのは残念だな
ちょっとchannelの扱いをミスると簡単にデッドロックするんだよな
Goの設計のセンスは基本的には素晴らしいと思うけど、
非同期処理の難しさに関してはGoをもってしても効果的な解決法を見つけられなかったのは残念だな
298デフォルトの名無しさん
2020/02/14(金) 00:51:14.63ID:omTyaEgD 日本人がROKUを作るしかないん?
299デフォルトの名無しさん
2020/02/14(金) 01:41:01.83ID:ZOPvzA9P わー、おもしろーい(棒
300デフォルトの名無しさん
2020/02/14(金) 01:56:54.67ID:Hve2JDLg rokuなもんにならんぞ(´・ω・`)
301デフォルトの名無しさん
2020/02/14(金) 02:26:38.26ID:uaJ858N7 おっさんが多いスレッド
302デフォルトの名無しさん
2020/02/14(金) 17:05:12.42ID:eYQzFX5X Raku?
303デフォルトの名無しさん
2020/02/23(日) 01:33:36.39ID:U23kWfzF golang.jpが壊れて治らないから諦めてwebarchive行くことにした
304デフォルトの名無しさん
2020/02/23(日) 05:51:08.90ID:PJULYhLo あのサイト更新しないなら迷惑だから手放して欲しい
305デフォルトの名無しさん
2020/02/23(日) 07:32:28.47ID:o7OSgZYn golangが完全に終焉するとき
名前がgoneにかわる
名前がgoneにかわる
306デフォルトの名無しさん
2020/02/23(日) 17:32:58.19ID:7lSJO0LZ golang-jp.netみたいな日本向けドメイン取って誰かが新しいサイト作って
307デフォルトの名無しさん
2020/02/23(日) 17:33:15.17ID:7lSJO0LZ アフィリエイトで広告踏みますのでよろしくおねがいします
308デフォルトの名無しさん
2020/02/23(日) 18:26:12.17ID:gLwCsTk/ gone lang
309デフォルトの名無しさん
2020/02/24(月) 09:46:04.88ID:bte5/Coq Ghosn lang
310デフォルトの名無しさん
2020/02/25(火) 09:16:55.76ID:FJcTVnd7 go(rust)lang
311デフォルトの名無しさん
2020/02/26(水) 01:59:09.78ID:YauYlfg9 goとrustは目指す目的が違いすぎて、並べて書く意味がなさすぎ
312デフォルトの名無しさん
2020/02/26(水) 12:27:16.65ID:/3rsbH1+ go 1.14
313デフォルトの名無しさん
2020/02/26(水) 13:50:20.35ID:j/r89lCN キタ━━━━(゚∀゚)━━━━!!
314デフォルトの名無しさん
2020/02/26(水) 20:33:01.24ID:QT81+JLb 1.14のissueって昨日まで20個以上残ってたと思ったけど、あれどうしたのかな
315デフォルトの名無しさん
2020/02/26(水) 20:55:36.03ID:XPF0nW9S release blocker issueは2個くらいだったし
それ以外は次バージョンに延期でしょ
それ以外は次バージョンに延期でしょ
316デフォルトの名無しさん
2020/02/27(木) 01:35:23.22ID:G3iz3let317デフォルトの名無しさん
2020/03/03(火) 01:30:23.85ID:x7gOP/hQ プログラミング言語人気ランキング2020、2位に「大躍進」したあの言語
https://active.nikkeibp.co.jp/atcl/act/19/00124/022700001/
https://active.nikkeibp.co.jp/atcl/act/19/00124/022700001/
318デフォルトの名無しさん
2020/03/03(火) 01:54:48.77ID:GH0v9Mba >>317
なにこのクソ統計
なにこのクソ統計
319デフォルトの名無しさん
2020/03/03(火) 06:54:36.36ID:FZdU/a7Y 「つまらないアンケートに答える層が使っている言語」の統計
FORTRANより下に主流の言語があるのがなかなか
FORTRANより下に主流の言語があるのがなかなか
320デフォルトの名無しさん
2020/03/03(火) 15:18:27.96ID:XIdDQCX/ C/C++いまだに多いけどどういう人が投票してるんだろう
統計でデタラメな誘導するのはやめて欲しいよ
統計でデタラメな誘導するのはやめて欲しいよ
321デフォルトの名無しさん
2020/03/03(火) 15:55:28.64ID:2rm+3KZn お前らが見慣れてるような言語ランキングだって相当なバイアスがかかってるだろう
日本の実情としてはまあ納得できるランキングだと思うけどな
むしろこの面子でGoが意外と健闘してるのは驚き
C/C++が多いのは、業務システム分野では互いに競合する言語が比較的多いのに対して、組み込みや制御の分野の中では代替が事実上存在しないからだろうね
日本の実情としてはまあ納得できるランキングだと思うけどな
むしろこの面子でGoが意外と健闘してるのは驚き
C/C++が多いのは、業務システム分野では互いに競合する言語が比較的多いのに対して、組み込みや制御の分野の中では代替が事実上存在しないからだろうね
322デフォルトの名無しさん
2020/03/03(火) 17:03:27.84ID:dzRX5ub5 Rubyは始まりも、オワコンなのよ
そうよ、Perlと共にお墓に向かってるの
どんなときでも時代はPHP♪
homubrewもrubyを切り捨てた現実を受け入れなさい!
そうよ、Perlと共にお墓に向かってるの
どんなときでも時代はPHP♪
homubrewもrubyを切り捨てた現実を受け入れなさい!
323デフォルトの名無しさん
2020/03/03(火) 17:35:54.85ID:XIdDQCX/ FORTRANがあるということは製造業なのかな
それも主に自動車産業
それも主に自動車産業
324デフォルトの名無しさん
2020/03/03(火) 18:07:23.29ID:GH0v9Mba アセンブリも多すぎ
325デフォルトの名無しさん
2020/03/07(土) 02:35:58.91ID:uuMmixxo >>317
4位SQLてw
4位SQLてw
326デフォルトの名無しさん
2020/03/07(土) 07:25:40.42ID:YTwNY1/M まあ、職業プログラマーでSQL使わない奴なんてまず居ないだろから
327デフォルトの名無しさん
2020/03/07(土) 22:21:25.44ID:NtlWTdSr 今の現場、DBが完全にDynamoDB(KvS)に移行したぞ
リレーショナルデータベース使わなくなった
リレーショナルデータベース使わなくなった
328デフォルトの名無しさん
2020/03/08(日) 02:34:50.44ID:4UY9QB9Z いくらサービスのOLTP系のDBがDynamoDBオンリーでも、会社なら業務系のDBとかデータ分析用のDWHとかあるしWebエンジニアでもたまにはそういうところ触ることもあるだろ?
お前の狭い業務では使わなくなった、の間違いだ
お前の狭い業務では使わなくなった、の間違いだ
329デフォルトの名無しさん
2020/03/08(日) 03:17:31.31ID:HYkfeWN3 どうでもええわw
330デフォルトの名無しさん
2020/03/08(日) 04:52:01.22ID:upYPFzc2 それにしても使えば使うほどクソさが見えてきて
嫌悪しかでてこない言語だなgolangは
嫌悪しかでてこない言語だなgolangは
331デフォルトの名無しさん
2020/03/08(日) 08:39:45.83ID:Dz/wpeTc なんでそんなこと言うの?
332デフォルトの名無しさん
2020/03/08(日) 13:05:02.79ID:Y2NtS7Rm >それにしても使えば使うほどクソさが見えてきて
これはほぼどの言語にも当てはまらなくはない
>嫌悪しかでてこない言語だなgolangは
個人の主観です
これはほぼどの言語にも当てはまらなくはない
>嫌悪しかでてこない言語だなgolangは
個人の主観です
333デフォルトの名無しさん
2020/03/12(木) 09:34:07.31ID:Ebv8j1sh Kotlinは使えば使うほど良いなと思う
サーバーサイドもKotlinの世界になればいいのだ
サーバーサイドもKotlinの世界になればいいのだ
334デフォルトの名無しさん
2020/03/12(木) 12:44:20.39ID:anpcnzvY ちょっと鮮度が落ちた話だけど Let's Encrypt が幾つかの証明書を無効化する羽目に
その原因がgolangあるあるの、実体配列ループでコピーしたオブジェクト書き換えてたバグらしい
実体配列ってクソだな
その原因がgolangあるあるの、実体配列ループでコピーしたオブジェクト書き換えてたバグらしい
実体配列ってクソだな
335デフォルトの名無しさん
2020/03/12(木) 12:51:29.46ID:/zI1t72q 何で参照を渡していたのか不思議…
数行下では値渡しにしているのに
数行下では値渡しにしているのに
336デフォルトの名無しさん
2020/03/13(金) 02:40:12.76ID:4YqISaPE >>334
大人しくpython使ってればこんなことには
大人しくpython使ってればこんなことには
337デフォルトの名無しさん
2020/03/13(金) 05:59:29.90ID:Rzi4PTPR pythonのほうでも、旧アマ driveを便利に使えるようにする一番有名だった
3rd partyツールが、関数に渡す引数の扱いを間違えて別の人のファイルが
見えるようになったりしてたけどね
旧driveの容量無制限と3rd partyへのAPI解放をやめさせた遠因
3rd partyツールが、関数に渡す引数の扱いを間違えて別の人のファイルが
見えるようになったりしてたけどね
旧driveの容量無制限と3rd partyへのAPI解放をやめさせた遠因
338デフォルトの名無しさん
2020/03/14(土) 11:58:15.74ID:uur41bNT >>333
goとcとphpしかやったことないんだけど、Kotlinええの?
goとcとphpしかやったことないんだけど、Kotlinええの?
339デフォルトの名無しさん
2020/03/14(土) 12:17:59.41ID:QJEYt0Xf340デフォルトの名無しさん
2020/03/14(土) 14:12:55.38ID:vQxdnG1j コンテナ時代にJavaはなあ
Java系はそのエコシステムの中だけで完結するからこそ意味があるんだよ
そもそもJavaプラットフォームは十分にポータブルで、コンテナのような低レイヤの抽象化を必要としない
Javaをコンテナに閉じ込めて動かすのはJavaの全盛期を知る者としては屈辱だよ
Java系はそのエコシステムの中だけで完結するからこそ意味があるんだよ
そもそもJavaプラットフォームは十分にポータブルで、コンテナのような低レイヤの抽象化を必要としない
Javaをコンテナに閉じ込めて動かすのはJavaの全盛期を知る者としては屈辱だよ
341デフォルトの名無しさん
2020/03/14(土) 14:50:10.22ID:XTUayws2 WSLは許せるのか
342デフォルトの名無しさん
2020/03/15(日) 00:47:49.73ID:KkMos+RN Javaの欠点はメモリを食い過ぎること
本当にこれだけだと思う
本当にこれだけだと思う
343デフォルトの名無しさん
2020/03/15(日) 08:43:01.20ID:8J0oZhmC javaの欠点はメソッド名が長すぎ
何をするにも面倒臭い
アレとアレをつなげてコレとコレをつなげてやっとこさHellow World
何をするにも面倒臭い
アレとアレをつなげてコレとコレをつなげてやっとこさHellow World
344デフォルトの名無しさん
2020/03/16(月) 09:48:42.75ID:f+IsD9WS Javaとかいて邪魔と読みます。くらいに要らない子
345デフォルトの名無しさん
2020/03/27(金) 23:34:18.93ID:D2Bp07zH Java馬鹿にしてるやついるけど
if err != nil をコピペしまくる言語よりかはダサくないよ(笑)
if err != nil をコピペしまくる言語よりかはダサくないよ(笑)
346デフォルトの名無しさん
2020/03/28(土) 00:54:18.47ID:FwiSGISO JavaをバカにしていいのはC#とかの直系親族かなー
でも御先祖様だから敬わないと
golangから見てそれこそカブる部分が少ないんで他所の御家庭
でもVBさんちは何とかしてほしいと思ってしまう自分を許して
でも御先祖様だから敬わないと
golangから見てそれこそカブる部分が少ないんで他所の御家庭
でもVBさんちは何とかしてほしいと思ってしまう自分を許して
347デフォルトの名無しさん
2020/03/28(土) 10:49:35.20ID:uzyy0FkO コピペって(笑)、インテリセンスとかスニペットが無い世界の人は大変だな
348デフォルトの名無しさん
2020/03/28(土) 13:55:52.36ID:0D5kTPqj Javaがバカにされるのはそれを使っているプログラマのせいじゃないかと思う。
企業需要が大きいから促成栽培のドカタが量産されたという。
純粋に言語として評価したら、CやC++の問題点をよく研究している印象なんだがな。
企業需要が大きいから促成栽培のドカタが量産されたという。
純粋に言語として評価したら、CやC++の問題点をよく研究している印象なんだがな。
349デフォルトの名無しさん
2020/03/28(土) 14:41:47.75ID:+WXFsbEZ ダサいと感じるかどうかは人それぞれだが
エラーハンドリングのボイラープレートが
どうしようもなく多いのは事実だよね
Go2に期待してたんだがな
エラーハンドリングのボイラープレートが
どうしようもなく多いのは事実だよね
Go2に期待してたんだがな
350デフォルトの名無しさん
2020/03/28(土) 14:51:39.39ID:rPoOVFdT Goのやり方の是非はともかく、例外がいつどこから飛んでくるかわからない「漠然とした不安」がないのはいい
あの不安は少なからず脳の働きを阻害して生産性を下げてると思うわ
あの不安は少なからず脳の働きを阻害して生産性を下げてると思うわ
351デフォルトの名無しさん
2020/03/28(土) 18:25:33.89ID:1J/Yumyc 書く量が多くなるとかそれぐらいは別にいいんだけどさぁー
どうせコピペするだけだし(笑)
最初にエラーハンドリングはそこまで要らないなと思って書いてたコード群が
後で扱うデータの仕様変更があってエラーハンドリングが必要になったときに
ガッポリその部分覆ってまとめてエラー扱うってのが一切できないんだよな
こうなってしまうと全部のコードリファクタしないといけないしなんなら
個別のロジックまで追いかけて問題ないかチェックしないといけなくなる
こういうところがgoはクソなんだよな
どうせコピペするだけだし(笑)
最初にエラーハンドリングはそこまで要らないなと思って書いてたコード群が
後で扱うデータの仕様変更があってエラーハンドリングが必要になったときに
ガッポリその部分覆ってまとめてエラー扱うってのが一切できないんだよな
こうなってしまうと全部のコードリファクタしないといけないしなんなら
個別のロジックまで追いかけて問題ないかチェックしないといけなくなる
こういうところがgoはクソなんだよな
352デフォルトの名無しさん
2020/03/28(土) 18:48:45.17ID:Agae4kCA > 最初にエラーハンドリングはそこまで要らないなと思って書いてたコード群が
単に見通しが甘いだけなんじゃないか
単に見通しが甘いだけなんじゃないか
353デフォルトの名無しさん
2020/03/28(土) 19:28:58.20ID:FwiSGISO Cでlongjump使いまくってたタイプじゃね?
354デフォルトの名無しさん
2020/03/29(日) 01:28:26.45ID:vMR/aJN9355デフォルトの名無しさん
2020/03/29(日) 01:31:05.49ID:1P3bfo+B 顔真っ赤だぞw
356デフォルトの名無しさん
2020/03/29(日) 01:58:14.56ID:+kVWuPRr 由緒正しい2chの流れだな
357デフォルトの名無しさん
2020/03/29(日) 09:36:10.09ID:ryRl/n6a >後で扱うデータの仕様変更があってエラーハンドリングが必要になったときに
>ガッポリその部分覆ってまとめてエラー扱うってのが一切できないんだよな
これ自体が例外ありきの発想のように思う
>ガッポリその部分覆ってまとめてエラー扱うってのが一切できないんだよな
これ自体が例外ありきの発想のように思う
358デフォルトの名無しさん
2020/03/29(日) 09:50:09.28ID:DYy7qpQK Goだと極一部の簡単な関数を除けば基本的にerrを返すから、後でerr発生箇所が増えても影響は関数一つだけだろう
それが問題になるようなアホみたいに長い関数を書いてるならそれ以前の問題だな
それが問題になるようなアホみたいに長い関数を書いてるならそれ以前の問題だな
359デフォルトの名無しさん
2020/03/29(日) 10:32:30.34ID:a0L6N7lT errorを返すように関数を変えたなら
call siteをすべて変更しなきゃいけないってのは仕方がない
それは考え方の違いだから将来的にも修正されることは無いと思われる
ただcall siteで単にエラーをpropagateするだけなのに
毎度毎度`if err != nil`書かせるのは頭悪いしノイズ比が高すぎる
開発陣も問題だと思ってるからどうにか改善しようとしてるけど
下の提案はダメになったからどんなに早くてもあと数年は現状維持だろうね
https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md
https://go.googlesource.com/proposal/+/master/design/32437-try-builtin.md
call siteをすべて変更しなきゃいけないってのは仕方がない
それは考え方の違いだから将来的にも修正されることは無いと思われる
ただcall siteで単にエラーをpropagateするだけなのに
毎度毎度`if err != nil`書かせるのは頭悪いしノイズ比が高すぎる
開発陣も問題だと思ってるからどうにか改善しようとしてるけど
下の提案はダメになったからどんなに早くてもあと数年は現状維持だろうね
https://go.googlesource.com/proposal/+/master/design/go2draft-error-handling-overview.md
https://go.googlesource.com/proposal/+/master/design/32437-try-builtin.md
360デフォルトの名無しさん
2020/03/29(日) 12:46:52.07ID:+4DfA9hG vscode で if err!=nil のブロックをデフォルトで折り畳んでくれたら、おれは嬉しい
361デフォルトの名無しさん
2020/03/30(月) 01:14:32.45ID:QPHAwv8T err返すくせに型に現れないのは正直ゴミ
362デフォルトの名無しさん
2020/03/30(月) 01:28:23.67ID:0o9j5Yzo またお前か
363デフォルトの名無しさん
2020/03/30(月) 03:48:40.78ID:QPHAwv8T またお前かって初めてこのスレに書き込んだんだが
そういって一生ゴミ仕様から目を背け続けろな
そういって一生ゴミ仕様から目を背け続けろな
364デフォルトの名無しさん
2020/03/30(月) 09:45:11.16ID:0o9j5Yzo わかったよ、ゴミ
365デフォルトの名無しさん
2020/03/30(月) 10:59:24.22ID:wxYru4jb errさんイライラwwwwwwwwwwwwwwwwww
366デフォルトの名無しさん
2020/03/30(月) 11:27:55.23ID:LyRXd+nE errさんはPHPしか触ってこなかったから気にしないんだよ
367デフォルトの名無しさん
2020/04/01(水) 02:09:08.12ID:aJRtEUWu Cだともっと酷いよ?
戻りでエラー返すと本来の戻り値が潰れるから
&errorとかいう独自定義のエラー用構造体を引数に毎回渡す
これに比べたら天国
戻りでエラー返すと本来の戻り値が潰れるから
&errorとかいう独自定義のエラー用構造体を引数に毎回渡す
これに比べたら天国
368デフォルトの名無しさん
2020/04/01(水) 10:12:05.33ID:0Fs3VJge Goは標準ライブラリが豊富っていうけどどこらへんが豊富なの?
Goは並行処理が得意なのに並列処理が得意とか実際に触ってるわけでもないのに書く人多いから豊富ってのも嘘なんじゃないかと思ってる
Goは並行処理が得意なのに並列処理が得意とか実際に触ってるわけでもないのに書く人多いから豊富ってのも嘘なんじゃないかと思ってる
369デフォルトの名無しさん
2020/04/01(水) 10:14:23.29ID:FRt48CYK そうだよ嘘だよ。じゃね〜さよなら
370デフォルトの名無しさん
2020/04/01(水) 10:49:13.13ID:5VJq6KKK371デフォルトの名無しさん
2020/04/01(水) 11:07:46.88ID:8ZaizB3r GetLastError() って Windows OS のみ?
372デフォルトの名無しさん
2020/04/01(水) 12:24:45.60ID:mttQXJSO Cだと戻り値でデータ返したりエラーコード返したりやりたい放題で一貫性が無さすぎ
Javaとかはtry catch地獄
Cでレジスタで戻り値返さずに複数値返せる設計にしてれば標準となって皆幸福だったのに
Javaとかはtry catch地獄
Cでレジスタで戻り値返さずに複数値返せる設計にしてれば標準となって皆幸福だったのに
373デフォルトの名無しさん
2020/04/01(水) 12:30:21.07ID:vhJXsBKc 最近のは(小さい)構造体なら返せるやろ
デカいのは無駄だし
mallocしたのだと解放が面倒だが
デカいのは無駄だし
mallocしたのだと解放が面倒だが
374デフォルトの名無しさん
2020/04/01(水) 14:22:10.98ID:BVkSt5Rw375デフォルトの名無しさん
2020/04/01(水) 14:28:21.58ID:8ZaizB3r スレ違い
376デフォルトの名無しさん
2020/04/01(水) 16:03:45.28ID:aJRtEUWu377デフォルトの名無しさん
2020/04/02(木) 08:03:50.65ID:I1YrR7G1 >>374
ん、その昔の段階で戻り値の返し方で言語仕様的に一工夫してくれてたらという正直ムチャ振りなレスだったんだけど
ん、その昔の段階で戻り値の返し方で言語仕様的に一工夫してくれてたらという正直ムチャ振りなレスだったんだけど
378デフォルトの名無しさん
2020/04/02(木) 17:36:34.36ID:iZOXAvDa Goって複数の戻り値はスタックにおいてるのかね?
その辺どうなってるんだろう
その辺どうなってるんだろう
379デフォルトの名無しさん
2020/04/02(木) 21:18:47.20ID:Fd9E2tX0 コンパイル時にサイズが決まるならスタックに積んで返すのは難しくないだろう。
今どきCでも構造体を返したりできるし。
今どきCでも構造体を返したりできるし。
380デフォルトの名無しさん
2020/04/14(火) 13:45:39.46ID:/GVdva5P 老人介護用言語すぎてストレスしかない
なんで今の御時世にこんな微妙な言語使わなければならんのだ
ポインタ意識したりするよりドメイン層の設計に時間を割いたほうがマシだわ
はぁ…
なんで今の御時世にこんな微妙な言語使わなければならんのだ
ポインタ意識したりするよりドメイン層の設計に時間を割いたほうがマシだわ
はぁ…
381デフォルトの名無しさん
2020/04/14(火) 13:52:00.63ID:cNjCA9WS 無理して使わんでもええがな
382デフォルトの名無しさん
2020/04/14(火) 13:58:34.65ID:VpWClbHP どの言語にも言えるけど
全ては実験台でしかない
全ては実験台でしかない
383デフォルトの名無しさん
2020/04/14(火) 14:26:34.45ID:/GVdva5P 権限だけ持ってる考えなしの馬鹿が採用を決めたせいで無理して使うしかないんだわ
トラップ多くてその調査のせいで学習コスト跳ね上がるし
並列処理簡単って動かすだけならそりゃ簡単だろうが…ってレベルの完成度の低さで
CPUフルで使い切るような事やらせようと思ったら面倒さも管理も段違いの面倒さ…
愚痴はまぁともかく、structって脳死して全部ポインタで扱うほうがいいんけ?
というかstructに実装持たせるような意識なんて投げ捨てて旧石器時代を目指すほうが良い言語?
トラップ多くてその調査のせいで学習コスト跳ね上がるし
並列処理簡単って動かすだけならそりゃ簡単だろうが…ってレベルの完成度の低さで
CPUフルで使い切るような事やらせようと思ったら面倒さも管理も段違いの面倒さ…
愚痴はまぁともかく、structって脳死して全部ポインタで扱うほうがいいんけ?
というかstructに実装持たせるような意識なんて投げ捨てて旧石器時代を目指すほうが良い言語?
384デフォルトの名無しさん
2020/04/14(火) 14:32:51.20ID:ARe9d0+J あくまで関数が主体であり、structはオブジェクト指向的な実体というより、単なる文脈と考えればいい
Rustも同様の考え方だし、C#なんかも最近はそういう方向へ進みつつある
善し悪しはともかく最近の流行りではある
Rustも同様の考え方だし、C#なんかも最近はそういう方向へ進みつつある
善し悪しはともかく最近の流行りではある
385デフォルトの名無しさん
2020/04/14(火) 14:38:21.41ID:Nk5zmway386デフォルトの名無しさん
2020/04/14(火) 17:35:01.14ID:pIyDz3cF387デフォルトの名無しさん
2020/04/14(火) 17:47:59.69ID:Nk5zmway ハイパースレッディング的にCPUを並列化したいならGoなんで使うものじゃないよ
388デフォルトの名無しさん
2020/04/14(火) 17:55:25.26ID:6iFFCKsF simulationライブラリで純粋な関数式プログラミングをする
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
ttp://x0000.net/topic.aspx?id=3631-0
UIライブラリ (C#, 2D) を作ったよ
ttp://x0000.net/topic.aspx?id=3688-0
連続と離散を統一した!
ttp://x0000.net/topic.aspx?id=3709-0
4Dエンジン
ttp://x0000.net/topic.aspx?id=3677-0
matrixのライブラリ
ttp://x0000.net/topic.aspx?id=3711-0
ある強力なFor関数
ttp://x0000.net/topic.aspx?id=3630-0
SQLライブラリ
ttp://x0000.net/topic.aspx?id=3675-0
389デフォルトの名無しさん
2020/04/14(火) 21:22:08.02ID:VoNykKzR >>383
コア数分のgoroutineでCPU使ってくれない?なにかそんなに面倒なことあったっけ?
コア数分のgoroutineでCPU使ってくれない?なにかそんなに面倒なことあったっけ?
390デフォルトの名無しさん
2020/04/14(火) 22:32:46.86ID:mT2xysIe golangのポインタ周りはrangeでイラっとしたくらいだわ
他はわかりやすいし使いやすい印象
他はわかりやすいし使いやすい印象
391デフォルトの名無しさん
2020/04/15(水) 00:46:12.61ID:cYQn0cTu いやいや・・ポインタも構造体の実体からもアクセスがどっちも . とか
トラップすぎて草はえるわ
そりゃさだいたいは問題ないよ、だけどな大体のとこは良いけどたまーに
罠にハマるっていうパターンの問題が一番やっかいな罠になるもんなんだよ
そんな中途半端なことするぐらいならいっそハナから面倒なままにしてくれるか
あるいはしょうっちゅう問題が起きるから常に注意して書く必要がある、ぐらい
のほうがよっぽどマシ
GO言語はこの「だいたいいいけどたまに罠」がクソ多すぎてほんとクソ言語だよ
トラップすぎて草はえるわ
そりゃさだいたいは問題ないよ、だけどな大体のとこは良いけどたまーに
罠にハマるっていうパターンの問題が一番やっかいな罠になるもんなんだよ
そんな中途半端なことするぐらいならいっそハナから面倒なままにしてくれるか
あるいはしょうっちゅう問題が起きるから常に注意して書く必要がある、ぐらい
のほうがよっぽどマシ
GO言語はこの「だいたいいいけどたまに罠」がクソ多すぎてほんとクソ言語だよ
392デフォルトの名無しさん
2020/04/15(水) 01:09:47.19ID:GWGZY8rP /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
393デフォルトの名無しさん
2020/04/15(水) 02:17:30.11ID:aGpPkdQy 全部ポインタにしてるわ
現代のアーキテクチャからしたら明らかに遅くなりそうだが
C脳だから全部ポインタw
現代のアーキテクチャからしたら明らかに遅くなりそうだが
C脳だから全部ポインタw
394デフォルトの名無しさん
2020/04/15(水) 03:27:51.37ID:j+vnhNUd 全部ポインタは無駄処理増えてパフォーマンス的に良くないようだけど
そうした方が言語トラップを回避できる可能性が高いって時点でうんこであることは間違いないと思うよ
コードをひと目見てすぐ問題があると判断できないようなトラップが散りばめられてて学習コストが低いとか嘘だわ
インポートも微妙、名前ぶつかりすぎでローカル変数名が半端になっていく
エクスポートの仕様も半端、プロパティとかないから構造体のフィールドは全開放で
扱う側に全責任が委ねられてしまうしパッケージ変数とか公開した日にゃノーガード戦法しかない
その割にリフレクションでの制限だけはクソきつくて非エクスポート関数の参照や値の変更は実質ほぼ不可能
あとエラーもうんこ
goのerrorをバケツリレーしていくような実装って、結局のところJavaでいうところの throws Exception を
全メソッドに書いちゃうようなゴミ実装をより面倒くさい記述にしただけみたいな感じ
エラーの中身が型として読み解けないせいで意識しないといけないスコープが広がりすぎるから超めんどくさい
エラー処理をせずもみ消したいときにtry/catchがいらないみたいな、死ぬほどどうでもいい利点くらいしかひねり出せない
言語の決定権がなく仕方がなく使ってるけど、全てを把握できてて自分以外が触らないような
単機能の小さいツール作るくらいの用途くらいでしか使いたくない言語って感じで、書くほどストレスが溜まっていくぜ…
これを絶賛する人たちが本当に最高だと思ってるのかマジでわからんくなる…
そうした方が言語トラップを回避できる可能性が高いって時点でうんこであることは間違いないと思うよ
コードをひと目見てすぐ問題があると判断できないようなトラップが散りばめられてて学習コストが低いとか嘘だわ
インポートも微妙、名前ぶつかりすぎでローカル変数名が半端になっていく
エクスポートの仕様も半端、プロパティとかないから構造体のフィールドは全開放で
扱う側に全責任が委ねられてしまうしパッケージ変数とか公開した日にゃノーガード戦法しかない
その割にリフレクションでの制限だけはクソきつくて非エクスポート関数の参照や値の変更は実質ほぼ不可能
あとエラーもうんこ
goのerrorをバケツリレーしていくような実装って、結局のところJavaでいうところの throws Exception を
全メソッドに書いちゃうようなゴミ実装をより面倒くさい記述にしただけみたいな感じ
エラーの中身が型として読み解けないせいで意識しないといけないスコープが広がりすぎるから超めんどくさい
エラー処理をせずもみ消したいときにtry/catchがいらないみたいな、死ぬほどどうでもいい利点くらいしかひねり出せない
言語の決定権がなく仕方がなく使ってるけど、全てを把握できてて自分以外が触らないような
単機能の小さいツール作るくらいの用途くらいでしか使いたくない言語って感じで、書くほどストレスが溜まっていくぜ…
これを絶賛する人たちが本当に最高だと思ってるのかマジでわからんくなる…
395デフォルトの名無しさん
2020/04/15(水) 04:05:18.88ID:aGpPkdQy 今Go使ってる人はなんちゃっての人は少ないからねえ
まともにGoやってますって人の少なさよ
まともにGoやってますって人の少なさよ
396デフォルトの名無しさん
2020/04/15(水) 07:24:14.59ID:pyZsKR91 はて、ポインタで無駄処理ってのは聞いたことないな
アセンブラのレベルから見ると、実体って概念は配列要素へのアクセスを先頭からの相対位置で行うという、限られた局面でしか現れないもの
あ、自動変数の実現としてスタックを積んでスタックボトムからのオフセットを使用するのは一般的ではあるか
ともかく実体渡しはCとかあの辺りの言語で実装された二次的なもので、あくまでポインタの糖衣構文じゃないの?
俺が最近のCPUを知らないからトンチンカンなのかな?
ベクタ計算がプリミティブに使われない限り、よりマシンに近い記述がポインタだと理解しているんだが
アセンブラのレベルから見ると、実体って概念は配列要素へのアクセスを先頭からの相対位置で行うという、限られた局面でしか現れないもの
あ、自動変数の実現としてスタックを積んでスタックボトムからのオフセットを使用するのは一般的ではあるか
ともかく実体渡しはCとかあの辺りの言語で実装された二次的なもので、あくまでポインタの糖衣構文じゃないの?
俺が最近のCPUを知らないからトンチンカンなのかな?
ベクタ計算がプリミティブに使われない限り、よりマシンに近い記述がポインタだと理解しているんだが
397デフォルトの名無しさん
2020/04/15(水) 11:39:38.66ID:Y2mip1WI せっかくのキャッシュなのに
キャッシュ捨てまくりが発生
キャッシュ捨てまくりが発生
398デフォルトの名無しさん
2020/04/15(水) 11:42:52.38ID:002QZQQA ちゃんと読んで答えてるっぽい奴居て草
今君は川に流れてるウンコを態々拾いに行ったのだ
ばっちぃから触っちゃ駄目だろ、ちゃんと反省しろよ
今君は川に流れてるウンコを態々拾いに行ったのだ
ばっちぃから触っちゃ駄目だろ、ちゃんと反省しろよ
399デフォルトの名無しさん
2020/04/15(水) 13:07:39.95ID:+cwiaTs6400デフォルトの名無しさん
2020/04/15(水) 19:49:21.31ID:pyZsKR91 >>399
それが何で遅くなるのか理解して言ってるか?
ポインタが無駄な処理になるからじゃなく、メモリアクセスとメモリ管理を最適化するため
実体配列のニッチな需要があるかぎりは実体は廃止できないという意見
正直、そういう需要なんて切って捨てていいと思う
Javaみたいに
それが何で遅くなるのか理解して言ってるか?
ポインタが無駄な処理になるからじゃなく、メモリアクセスとメモリ管理を最適化するため
実体配列のニッチな需要があるかぎりは実体は廃止できないという意見
正直、そういう需要なんて切って捨てていいと思う
Javaみたいに
401デフォルトの名無しさん
2020/04/17(金) 18:19:15.53ID:fJoVda10 Javaはスレッド跨ぐ場合はスレッドごとにコピーした値をキャッシュしたりはしているし
それで起きる問題を回避するための手段も用意されてる
Goがただ面倒くさいゴミ言語って話でJavaを例えに上げるのは理解してなさそうに見えちゃわない?
それで起きる問題を回避するための手段も用意されてる
Goがただ面倒くさいゴミ言語って話でJavaを例えに上げるのは理解してなさそうに見えちゃわない?
402デフォルトの名無しさん
2020/04/17(金) 18:27:51.48ID:FR4eJIAH だって Java thread って context switch が遅いんですもの…(仕方ないけど)
403デフォルトの名無しさん
2020/04/18(土) 03:21:59.85ID:7LGZx49d 皆んとこインフラでGo使ってないんか?
クラウドならGo一択だと思ってた
クラウドならGo一択だと思ってた
404デフォルトの名無しさん
2020/04/18(土) 08:06:56.22ID:dJZrVSnf Go製のキラーアプリであるDocker
それをRustで書き直すって話無かった?もう公開されてる?
厳密なコンテキスト操作がGoでは実装できないからって
それとも自分の勘違い?
それをRustで書き直すって話無かった?もう公開されてる?
厳密なコンテキスト操作がGoでは実装できないからって
それとも自分の勘違い?
405デフォルトの名無しさん
2020/04/18(土) 10:25:08.47ID:xaEKv27U Dockerの記述言語なんて使う分には関係ないからキラーアプリとは違うような。
406デフォルトの名無しさん
2020/04/18(土) 17:50:04.38ID:0gvlJnyA コンプライアンスに即した範囲でできるテレワークって事で
最近「他社ゲームのアーキテクチャを調査」ってタスクをやったんだけど
Golangは無いね。Node.jsばっか
個人的にはgo使いたいから、家にいる期間になんか一個作りたいけどなぁ…。
最近「他社ゲームのアーキテクチャを調査」ってタスクをやったんだけど
Golangは無いね。Node.jsばっか
個人的にはgo使いたいから、家にいる期間になんか一個作りたいけどなぁ…。
407デフォルトの名無しさん
2020/04/18(土) 18:26:19.74ID:ZX/dL4qt ゲーム会社でもコンプライアンスの関係でテレワークできない業務なんかあんの?
少なくともゲーム会社よりはお堅い会社に勤めてるけど、全部在宅で何の問題もないな
コードは主にNode.js(オンライン)とPython(バッチ)で、オンラインについてはGoへの書き直しを進めてる
少なくともゲーム会社よりはお堅い会社に勤めてるけど、全部在宅で何の問題もないな
コードは主にNode.js(オンライン)とPython(バッチ)で、オンラインについてはGoへの書き直しを進めてる
408デフォルトの名無しさん
2020/04/18(土) 18:31:11.51ID:0gvlJnyA >>407
外注だからね
外注だからね
409デフォルトの名無しさん
2020/04/18(土) 18:45:55.45ID:zYPZ4Na5 JavaとかScalaで作ってたものをGoに置き換えるみたいな流れは割とある
410デフォルトの名無しさん
2020/04/18(土) 19:32:53.45ID:/YIE32O/ windowsとlinuxで動かさなきゃいけないアプリをJavaで書いてて
全く問題なかったんだけど
実質有償化に伴って他の言語で書き直そうかと思ってるけど
Goってwindows上でも安定して動くのかね?
ちなみに24時間稼働しっぱなしのアプリ
全く問題なかったんだけど
実質有償化に伴って他の言語で書き直そうかと思ってるけど
Goってwindows上でも安定して動くのかね?
ちなみに24時間稼働しっぱなしのアプリ
411デフォルトの名無しさん
2020/04/18(土) 20:00:40.33ID:7LGZx49d そんな君にはC#おすすめ
412デフォルトの名無しさん
2020/04/18(土) 20:18:48.00ID:C8MVcACH まあC#だろな
413デフォルトの名無しさん
2020/04/18(土) 20:31:40.92ID:/YIE32O/ C#ってlinux上ではmonoとか使うわけでしょ?
流石にないわー
流石にないわー
414デフォルトの名無しさん
2020/04/18(土) 20:33:06.29ID:nL76etRG415デフォルトの名無しさん
2020/04/18(土) 20:41:10.89ID:uOWDKjxa416デフォルトの名無しさん
2020/04/18(土) 20:51:17.88ID:3iH77Bzz >>413
ひどい無知
ひどい無知
417デフォルトの名無しさん
2020/04/18(土) 20:57:00.49ID:C8MVcACH >>413
何言ってんのこいつ
何言ってんのこいつ
418デフォルトの名無しさん
2020/04/18(土) 21:20:46.34ID:0gvlJnyA419デフォルトの名無しさん
2020/04/18(土) 21:42:45.13ID:RW5npENu 今からC#勧めるってお前ら悪い奴やな〜
420デフォルトの名無しさん
2020/04/18(土) 22:33:18.98ID:7LGZx49d 今のC#知らない人多そう
特定の言語に拘らず積極的に情報収集した方がいいと思うけどね
スレチだからここまで
特定の言語に拘らず積極的に情報収集した方がいいと思うけどね
スレチだからここまで
421デフォルトの名無しさん
2020/04/18(土) 23:45:31.62ID:Fpx5gr7r 今のC#センスいい言語になってると思うよ、俺も。
422デフォルトの名無しさん
2020/04/19(日) 00:11:47.49ID:gEgC0AtJ たまには F# のことも思い出してあげて下さい
423デフォルトの名無しさん
2020/04/19(日) 19:53:26.80ID:GbCXYg+t だが断るっ!
424デフォルトの名無しさん
2020/04/22(水) 17:15:41.53ID:2MssAlkL 流石にJavaやScalaからGo移行とかになるとあまりの言語機能のゴミっぷりに開発者がキレそう
今までハサミつかって紙きってたのに石器渡されるようもんだわ
今までハサミつかって紙きってたのに石器渡されるようもんだわ
425デフォルトの名無しさん
2020/04/22(水) 17:57:25.70ID:gFNuxdvi /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
426デフォルトの名無しさん
2020/04/22(水) 18:22:16.77ID:LU+JwGqd この言語はCでサーバを書いているようなニッチな要求の仕事を置き換えるんだろうな
なに?そんな仕事があるわけない?
…去年回って来ちゃってたよ、そんな仕事が
ミリ秒縛り要求で数十の機器の管制をするサーバ
当時はgo知らなかったんでgccで書いた
なに?そんな仕事があるわけない?
…去年回って来ちゃってたよ、そんな仕事が
ミリ秒縛り要求で数十の機器の管制をするサーバ
当時はgo知らなかったんでgccで書いた
427デフォルトの名無しさん
2020/04/22(水) 19:29:43.68ID:5I5B70Wh リアルタイム性重視なら、GCあるGoは向いてないんじゃ
その用途で置き換えるならRustになりそう
その用途で置き換えるならRustになりそう
428デフォルトの名無しさん
2020/04/22(水) 20:01:17.39ID:LU+JwGqd Goは半日で理解できたがRustは無理だった
429デフォルトの名無しさん
2020/04/23(木) 00:05:34.25ID:b8mXccsZ 鯖は比較的余裕有るけど、クライアント側でGCが痛い子になる事はありそう
Rustは半日では無理だなぁ〜、概念は直ぐ理解出来るけど書き方に統一感無さ過ぎてキレそう<'a>&'a *ref
Rustは半日では無理だなぁ〜、概念は直ぐ理解出来るけど書き方に統一感無さ過ぎてキレそう<'a>&'a *ref
430デフォルトの名無しさん
2020/04/23(木) 00:49:14.99ID:3qWTs6XO Rustは人類には早すぎる
431デフォルトの名無しさん
2020/04/23(木) 00:55:50.26ID:1fYIb7dj 禿しく同意
432デフォルトの名無しさん
2020/04/23(木) 08:01:42.02ID:6AabYYA1 Rustはバカ速いとか聞くから覚えたいんだけど
学習コストもバカ高いよなぁ
CとかPascalやっててJavaを始めたときの倍くらい大変な感じがする
C#はJavaを丸パクりで基本構文ができてたから、1日
学習コストもバカ高いよなぁ
CとかPascalやっててJavaを始めたときの倍くらい大変な感じがする
C#はJavaを丸パクりで基本構文ができてたから、1日
433デフォルトの名無しさん
2020/04/23(木) 08:06:05.23ID:AGd9KY8X そりゃあif文for文みたいなコードだけなら1日だろうよ
434デフォルトの名無しさん
2020/04/23(木) 08:41:47.89ID:Q66hfIcW rust、利便性のためにライフタイムの省略パターンとか作ったんだろうけれど、逆にわかりづらくなってるわ。
435デフォルトの名無しさん
2020/04/23(木) 10:29:03.11ID:6AabYYA1 >>433
クラスの定義の書き方とかもだよ
Javaでない言語のクラスの書き方は、クラス定義にはメソッドの宣言を書いて、定義の外で実装するスタイルが主流だった(他の言語には無いとは言わないが非主流)
これはC++とかObjectPASCAL、そしてGoもこちらのスタイルではある
C#では、基本的にデフォルト仮想なJavaメソッドに対して、デフォルトは非仮想って程度の差(充分にでかい差ではある、ちなみにジェネリックはまだない時分)
だから、覚えるというより慣れるのに1日
SalesforceのAPECはまた面白くて構文はC#以上にJavaなのにデフォルト非仮想だったかな
よく似た兄弟すぎて、仕事とプライベートそれぞれ違う言語で書いてると混乱する
クラスの定義の書き方とかもだよ
Javaでない言語のクラスの書き方は、クラス定義にはメソッドの宣言を書いて、定義の外で実装するスタイルが主流だった(他の言語には無いとは言わないが非主流)
これはC++とかObjectPASCAL、そしてGoもこちらのスタイルではある
C#では、基本的にデフォルト仮想なJavaメソッドに対して、デフォルトは非仮想って程度の差(充分にでかい差ではある、ちなみにジェネリックはまだない時分)
だから、覚えるというより慣れるのに1日
SalesforceのAPECはまた面白くて構文はC#以上にJavaなのにデフォルト非仮想だったかな
よく似た兄弟すぎて、仕事とプライベートそれぞれ違う言語で書いてると混乱する
436デフォルトの名無しさん
2020/04/23(木) 10:36:37.69ID:AGd9KY8X >>435
完全にコーダーの発想だな
完全にコーダーの発想だな
437デフォルトの名無しさん
2020/04/23(木) 10:37:35.02ID:6AabYYA1 >>433
ああ、そういえばCとかではエントリがmain関数だったのが、クラスになっているスタイルもJavaで覚えた
そのためC#でもほぼ同じだから、そこで引っ掛かることが無かった
そういう観点であってifとかforなどの構文じゃないよ
ああ、そういえばCとかではエントリがmain関数だったのが、クラスになっているスタイルもJavaで覚えた
そのためC#でもほぼ同じだから、そこで引っ掛かることが無かった
そういう観点であってifとかforなどの構文じゃないよ
438デフォルトの名無しさん
2020/04/23(木) 10:39:55.23ID:6AabYYA1439デフォルトの名無しさん
2020/04/23(木) 10:55:34.68ID:AGd9KY8X キチガイに触ってしまったごめんなさい
440デフォルトの名無しさん
2020/04/23(木) 10:55:50.60ID:3P7Oolim JavaとC#では技術スタックが全然違うだろう
サーバーの構築から通信方法からフレームワーク等の選定から何から、
そういう足回りを全部すっ飛ばして全部あらかじめ他人に与えられた環境を使って
「さあ、アプリケーションコードを書いてください」ならそら大差ないだろ
俺は436じゃないが「コーダー」ってそういう意味じゃないかな
サーバーの構築から通信方法からフレームワーク等の選定から何から、
そういう足回りを全部すっ飛ばして全部あらかじめ他人に与えられた環境を使って
「さあ、アプリケーションコードを書いてください」ならそら大差ないだろ
俺は436じゃないが「コーダー」ってそういう意味じゃないかな
441デフォルトの名無しさん
2020/04/23(木) 11:30:36.92ID:1fYIb7dj ハゲしくスレ違い
442デフォルトの名無しさん
2020/04/23(木) 14:11:43.18ID:6AabYYA1 出だしが学習コストの話で、人格攻撃やらサーバの構築とか的外れな事を言い出してくるやら
詭弁術だけはお得意なことはよくわかりました
詭弁術だけはお得意なことはよくわかりました
443デフォルトの名無しさん
2020/04/25(土) 02:28:33.10ID:wAZrgsxC ギスギスしててワロ
Goは誰でもある程度のレベルくらいまでなら使いこなせる優しい言語
Goは誰でもある程度のレベルくらいまでなら使いこなせる優しい言語
444デフォルトの名無しさん
2020/04/26(日) 19:49:45.56ID:xNjL7Ex+ ものすごく当たり前の落とし穴に落ちた
ファクトリから構造体アドレス返してたのをインタフェース返すように変更したらテストでコケた
キャストチェックのテストだったんだけど、レシーバのシグネチャが同じ別のインタフェースがあって、そいつにキャストできちゃった
インタフェースが同じなら同じものとして使えるってことは、そういう問題を想定しとかないとならなかった
ファクトリから構造体アドレス返してたのをインタフェース返すように変更したらテストでコケた
キャストチェックのテストだったんだけど、レシーバのシグネチャが同じ別のインタフェースがあって、そいつにキャストできちゃった
インタフェースが同じなら同じものとして使えるってことは、そういう問題を想定しとかないとならなかった
445デフォルトの名無しさん
2020/04/28(火) 19:31:28.17ID:Ce9HOSET 大きくなってきたんでパッケージを分割
設定とか全体を管理するAパッケージ
httpのリクエストを管理するBパッケージ
webAPIのロジックを管理するCパッケージ
ロジックのインスタンスは設定で作って、リクエストから呼び出して処理してもらう
さて、ここで落とし穴
Cパッケージから設定を参照するためにAパッケージをインポートすると import cycle not arrowed 発生
AパッケージではCパッケージをインポートして、ロジックのファクトリを呼び出してる
インポートの循環の制約とか、それは厳しすぎやしませんかね
第三の上位パッケージを作ればなんとかなるのかなぁ?
設定とか全体を管理するAパッケージ
httpのリクエストを管理するBパッケージ
webAPIのロジックを管理するCパッケージ
ロジックのインスタンスは設定で作って、リクエストから呼び出して処理してもらう
さて、ここで落とし穴
Cパッケージから設定を参照するためにAパッケージをインポートすると import cycle not arrowed 発生
AパッケージではCパッケージをインポートして、ロジックのファクトリを呼び出してる
インポートの循環の制約とか、それは厳しすぎやしませんかね
第三の上位パッケージを作ればなんとかなるのかなぁ?
446デフォルトの名無しさん
2020/04/28(火) 20:20:55.63ID:iogl+PJs arrowed ?
447デフォルトの名無しさん
2020/04/28(火) 20:31:42.46ID:ghSBG3zr448デフォルトの名無しさん
2020/04/28(火) 20:48:56.59ID:SLRJSTJf > 設定とか全体を管理するパッケージ
インターフェース云々以前に、そんなふわっとしたモジュール強度の低いパッケージが存在することが問題
設定なら設定で分けろ
設定はデータ構造自体がインターフェイスなんだからカプセル化とか要らん
インターフェース云々以前に、そんなふわっとしたモジュール強度の低いパッケージが存在することが問題
設定なら設定で分けろ
設定はデータ構造自体がインターフェイスなんだからカプセル化とか要らん
449デフォルトの名無しさん
2020/04/28(火) 20:51:51.61ID:OCson2MM450デフォルトの名無しさん
2020/04/28(火) 22:00:57.39ID:Ce9HOSET >>449
ロジックのインタフェースの実体を得るファクトリ関数なんだがおかしいのか?
でも、そもそもが設定情報のパッケージにシステムを管理するデータの生成を担わせてる設計が原因臭いとはうすうす
やっぱそこを別パッケージに分離して結合を弱めないとだめだな
ロジックのインタフェースの実体を得るファクトリ関数なんだがおかしいのか?
でも、そもそもが設定情報のパッケージにシステムを管理するデータの生成を担わせてる設計が原因臭いとはうすうす
やっぱそこを別パッケージに分離して結合を弱めないとだめだな
451デフォルトの名無しさん
2020/04/28(火) 22:23:30.36ID:Ce9HOSET 結局、日和ってロジックのインスタンスはCパッケージにシングルトンとして実装してBから呼ぶことでallowedを回避した
根本的な解決ではないが、動けばいい!(うわっ自分で言ってて恥ずかしい
根本的な解決ではないが、動けばいい!(うわっ自分で言ってて恥ずかしい
452デフォルトの名無しさん
2020/05/01(金) 06:16:44.51ID:txiwXjh+ VScodeなのかdelveなのか、デバッガでスライスを見たとき64個までしか見えません
どこの設定を弄れば最後まで見せてもらえるのか、調べてみたけれど分かりません
→ githubのgo-delveとかvscode-goとか
このカスタマイズについて情報があれば教えてください
どこの設定を弄れば最後まで見せてもらえるのか、調べてみたけれど分かりません
→ githubのgo-delveとかvscode-goとか
このカスタマイズについて情報があれば教えてください
453デフォルトの名無しさん
2020/05/01(金) 11:36:26.80ID:txiwXjh+ 各プラットフォームのランタイムのせいだろうとは思うけど・・・
io パッケージの
func Copy(dst Writer, src Reader) (written int64, err error)
と
type Writer interface {
Write(p []byte) (n int, err error)
}
で戻り値に一貫性がない事に気づいて、ちょっとイラっときた
(io.Writer).Write() では n の合計が len(p) になるまで繰り返さないとダメ?
かと思ったけど、
Write must return a non-nil error if it returns n < len(p).
って書いてあるよ・・・
io パッケージの
func Copy(dst Writer, src Reader) (written int64, err error)
と
type Writer interface {
Write(p []byte) (n int, err error)
}
で戻り値に一貫性がない事に気づいて、ちょっとイラっときた
(io.Writer).Write() では n の合計が len(p) になるまで繰り返さないとダメ?
かと思ったけど、
Write must return a non-nil error if it returns n < len(p).
って書いてあるよ・・・
454デフォルトの名無しさん
2020/05/01(金) 11:43:36.06ID:txiwXjh+ ああっ
The built-in functions len and cap take arguments of various types and return a result of type int.
だからなのか
いいのかそんな仕様で
The built-in functions len and cap take arguments of various types and return a result of type int.
だからなのか
いいのかそんな仕様で
455デフォルトの名無しさん
2020/05/01(金) 12:06:06.92ID:Ia4c8IgS Goではintのサイズと配列の最大長は環境依存だからそれで正しい
そして、CopyはWriteを一発呼ぶだけじゃなくて指定された長さをコピーし終えるまで読み書きを繰り返すように実装するもの
だから配列の最大長とか無関係
やってることが全然違うんだから一貫性もクソもない
そして、CopyはWriteを一発呼ぶだけじゃなくて指定された長さをコピーし終えるまで読み書きを繰り返すように実装するもの
だから配列の最大長とか無関係
やってることが全然違うんだから一貫性もクソもない
456デフォルトの名無しさん
2020/05/01(金) 12:20:25.30ID:OD5xAYpx Rob Pike interview: “Go has become the language of cloud infrastructure”
https://evrone.com/rob-pike-interview
https://evrone.com/rob-pike-interview
457デフォルトの名無しさん
2020/05/01(金) 13:10:50.80ID:txiwXjh+ >指定された長さ
ダウト
Copy見てきてください
こいつはReaderからバイトストリーム(厳密には意訳)をEOFに達するまでWriterに書き込み、その書き込みバイト数を返します
サイズなんて指定しません
Writerに書き出すソースが固定のスライスではないだけで、Writerに書き出すという目的から見ればWriteと同じでしょ
まあ違うとあえて言うなら、私とあなたは考え方が違うんでしょうね (私は「何をするか」という目的で言ったので)
ダウト
Copy見てきてください
こいつはReaderからバイトストリーム(厳密には意訳)をEOFに達するまでWriterに書き込み、その書き込みバイト数を返します
サイズなんて指定しません
Writerに書き出すソースが固定のスライスではないだけで、Writerに書き出すという目的から見ればWriteと同じでしょ
まあ違うとあえて言うなら、私とあなたは考え方が違うんでしょうね (私は「何をするか」という目的で言ったので)
458デフォルトの名無しさん
2020/05/01(金) 23:48:52.57ID:txiwXjh+ log.Logger の出力でファイル名も出させるようにして気づいたけど、ソースファイルのパスって実行ファイルの中にしっかりと記録されてる?
Loggerでファイル名を指定すると内部でruntime.Caller呼んでスタック情報拾うんだけど
ログにはソースファイルの完全パスがしっかりと出てくる
実行ファイルを別ディレクトリはにコピーして実行しても出るから、実行ファイルの置き場所を利用している訳じゃない
また、runtimeパッケージがソースファイル情報をもってる訳もないからリンカが埋め込んでるんだろうと推測
runtimeパッケージを使う使わないで、リンカが埋め込む埋め込まないを切り替えるなんて器用な真似はさせていないだろうし
だとすると、ソースファイルの情報って全て記録されているはず(stringsで実行ファイルの中を見た訳じゃないけど)
という推測
完全パスで困るのはユーザ名がしっかり出ちゃうことなんだよな
それが嫌ならユーザディレクトリで開発するなという事なのか
Loggerでファイル名を指定すると内部でruntime.Caller呼んでスタック情報拾うんだけど
ログにはソースファイルの完全パスがしっかりと出てくる
実行ファイルを別ディレクトリはにコピーして実行しても出るから、実行ファイルの置き場所を利用している訳じゃない
また、runtimeパッケージがソースファイル情報をもってる訳もないからリンカが埋め込んでるんだろうと推測
runtimeパッケージを使う使わないで、リンカが埋め込む埋め込まないを切り替えるなんて器用な真似はさせていないだろうし
だとすると、ソースファイルの情報って全て記録されているはず(stringsで実行ファイルの中を見た訳じゃないけど)
という推測
完全パスで困るのはユーザ名がしっかり出ちゃうことなんだよな
それが嫌ならユーザディレクトリで開発するなという事なのか
459デフォルトの名無しさん
2020/05/02(土) 08:59:25.19ID:+Au1iQ6P みんなはGW中は嫁さんとセックスしまくりなの?
独身の俺からすると羨ましいんだけど
独身の俺からすると羨ましいんだけど
460デフォルトの名無しさん
2020/05/02(土) 13:46:40.57ID:iDDOId/p 嫁さんとセクロスなんて1年で飽きるぞ
461デフォルトの名無しさん
2020/05/02(土) 14:11:11.13ID:H63qqmuN セクロスはセフレとしかしないな
462デフォルトの名無しさん
2020/05/02(土) 14:12:11.64ID:1t1QmWMu 疲れるだけだぞ
463デフォルトの名無しさん
2020/05/02(土) 14:21:57.66ID:z5TAOMiI 飽きるか?全然飽きないんだが。
嫁ともっとセクロスしたいわ。
嫁ともっとセクロスしたいわ。
464デフォルトの名無しさん
2020/05/02(土) 14:26:10.42ID:jSLKT64y ∧∧ ミ _ ドスッ
( ,,)┌─┴┴─┐
/ つ. 終 了 │
〜′ /´ └─┬┬─┘
∪ ∪ ││ _ε3
゛゛'゛'゛
( ,,)┌─┴┴─┐
/ つ. 終 了 │
〜′ /´ └─┬┬─┘
∪ ∪ ││ _ε3
゛゛'゛'゛
465デフォルトの名無しさん
2020/05/02(土) 16:06:20.88ID:3+K3/vn9 GoのスレなんだからせめてGopherくんで抜けるかどうかの議論しろよ
466デフォルトの名無しさん
2020/05/02(土) 16:30:21.85ID:1t1QmWMu gopherくんみたいな女いるよな
目がでかくて歯並び悪いやつ
抜ける
目がでかくて歯並び悪いやつ
抜ける
467デフォルトの名無しさん
2020/05/02(土) 17:53:36.77ID:+BhrZUVp 常駐しつつ標準入力からのコマンドを受け付ける構成のプログラム書いてる
だけど、デバッグターミナルからの標準入力はサポートされないんだな(vscode-go/
issues/219)
VScodeの問題かと探したのにdelveの問題?
だけど、デバッグターミナルからの標準入力はサポートされないんだな(vscode-go/
issues/219)
VScodeの問題かと探したのにdelveの問題?
468デフォルトの名無しさん
2020/05/02(土) 17:56:31.80ID:+BhrZUVp ちなみにシグナル使えという話は横に置いといてね
os.Interruptとかのハンドリングはもう入ってる
Windowsでkillしても受け取らないんだこれが
os.Interruptとかのハンドリングはもう入ってる
Windowsでkillしても受け取らないんだこれが
469デフォルトの名無しさん
2020/05/08(金) 09:06:51.86ID:+d3XVyIT470デフォルトの名無しさん
2020/05/08(金) 09:16:00.33ID:le9A8gSm どうでもいい内容なんだよなーそれ
471デフォルトの名無しさん
2020/05/08(金) 09:28:21.26ID:/imhMepR ところどころ抜けてて口頭説明前提の作りで肝心な内容が無い資料公開されてもな
472デフォルトの名無しさん
2020/05/08(金) 09:47:37.47ID:oIDbptWL473デフォルトの名無しさん
2020/05/08(金) 09:48:51.29ID:oIDbptWL474デフォルトの名無しさん
2020/05/08(金) 09:50:21.63ID:oIDbptWL475デフォルトの名無しさん
2020/05/08(金) 16:04:03.09ID:SpWQlQbz 言語仕様より標準ライブラリのクックブック的な本が充実して欲しいかな
結局Goのソースやテストコード読まなきゃ使い方がわからないのが多過ぎるし
結局Goのソースやテストコード読まなきゃ使い方がわからないのが多過ぎるし
476デフォルトの名無しさん
2020/05/08(金) 18:12:47.83ID:QcJ6udj9477デフォルトの名無しさん
2020/05/08(金) 22:59:05.96ID:tAyMPd7a Golang逆引きレシピ(version1.14対応)
って本出してくれ
kindleで5000円までなら買う
って本出してくれ
kindleで5000円までなら買う
478デフォルトの名無しさん
2020/05/09(土) 18:13:17.56ID:m4Vh3zrv 2.0はいつリリースされますのん?
479デフォルトの名無しさん
2020/05/09(土) 18:28:27.39ID:4jg1EkWA 予定は未定
480デフォルトの名無しさん
2020/05/09(土) 19:27:11.31ID:CUL9xwyE 開発陣のモチベーションはどうなんだろう。
なんかrubyと同じような臭いが。
なんかrubyと同じような臭いが。
481デフォルトの名無しさん
2020/05/10(日) 09:38:46.23ID:XQ0sO87J サーバで使われることが割と一般的なコンパイル言語(Java以外)って
Go以外になんかあったっけ
Go以外になんかあったっけ
482デフォルトの名無しさん
2020/05/10(日) 11:01:30.61ID:hDQHcieg apache は何でコンパイルされてる?
483デフォルトの名無しさん
2020/05/10(日) 11:02:41.97ID:ot41mX7+ C#
海外を含めるならWin鯖除外でも今やGoよりは多いんじゃないか
海外を含めるならWin鯖除外でも今やGoよりは多いんじゃないか
484デフォルトの名無しさん
2020/05/10(日) 11:59:28.84ID:XQ0sO87J485デフォルトの名無しさん
2020/05/10(日) 13:04:42.48ID:+Vdduh76 C++
486デフォルトの名無しさん
2020/05/10(日) 14:28:40.79ID:p9tAaMVr Javaじゃね?って言葉を無視するのであれば、Scalaは聞いたことある。
487デフォルトの名無しさん
2020/05/10(日) 15:35:37.07ID:FhPtT+Xo コンパイル言語で伸びそうなのはKotlin
488デフォルトの名無しさん
2020/05/10(日) 18:14:39.27ID:onDYsAIY javaがinnullable化すればいいんだ
いつ達成されるのか
いつ達成されるのか
489デフォルトの名無しさん
2020/05/10(日) 18:21:05.86ID:BbBbqgLD 凄いスレ違い
490デフォルトの名無しさん
2020/05/13(水) 07:56:28.24ID:p0Yu02SZ Goは学習コストが少ないっていう嘘に騙されてるやつとそう信じてる信者が多いのが最大の失敗
コード読むだけじゃ見落とすような罠が簡単につくれるし直感的に分かりづらい仕様と機能不足が多すぎる
書き捨てるだけなら簡単だがチーム開発で採用するには残念すぎる言語
コード読むだけじゃ見落とすような罠が簡単につくれるし直感的に分かりづらい仕様と機能不足が多すぎる
書き捨てるだけなら簡単だがチーム開発で採用するには残念すぎる言語
491デフォルトの名無しさん
2020/05/13(水) 08:32:08.19ID:Q3kP6cCa /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
492デフォルトの名無しさん
2020/05/13(水) 08:34:54.68ID:+HM7ZWjz 見えない罠が多すぎる言語よりは数段マシなんだよな
493デフォルトの名無しさん
2020/05/14(木) 17:27:46.77ID:ljUxN++I >>447
ものすごく遅い話なんだけど
そっかー、インタフェース定義とファクトリの実装が同じパッケージにある必然性って全くなかったんだな
io.Reader の実装が到るところにあるように、定義と実装を分離させれば済む話だった
あーでもない、こーでもない
いつの間にかそうリファクタリングしていて、アレ?となった
ものすごく遅い話なんだけど
そっかー、インタフェース定義とファクトリの実装が同じパッケージにある必然性って全くなかったんだな
io.Reader の実装が到るところにあるように、定義と実装を分離させれば済む話だった
あーでもない、こーでもない
いつの間にかそうリファクタリングしていて、アレ?となった
494デフォルトの名無しさん
2020/05/15(金) 00:10:35.84ID:WhbhAQET >>490
他と比べたら、って話でしょ
他と比べたら、って話でしょ
495デフォルトの名無しさん
2020/05/15(金) 01:28:18.31ID:kU/eypzI >>493
ていうかinterfaceを返すファクトリというもの自体があまりGo的ではない
その辺は思想がJavaなんかと大きく違うところで、Goでは戻り値には具象型を使うのが基本
interfaceは関数の引数に使うもんで、その関数を使う側のパッケージが必要に応じてinterfaceを実装するんだよ
それに従えば結果的にファクトリとinterface定義は別パッケージになる
ていうかinterfaceを返すファクトリというもの自体があまりGo的ではない
その辺は思想がJavaなんかと大きく違うところで、Goでは戻り値には具象型を使うのが基本
interfaceは関数の引数に使うもんで、その関数を使う側のパッケージが必要に応じてinterfaceを実装するんだよ
それに従えば結果的にファクトリとinterface定義は別パッケージになる
496デフォルトの名無しさん
2020/05/15(金) 05:05:48.78ID:02fpr2+t497デフォルトの名無しさん
2020/05/16(土) 11:46:57.57ID:e+rgeli+ 1.12 の http/request.go に、でっかい落とし穴が
こいつは、1210 行目で ContextType == "multipart/form-data" の処理が未実装
そして、 Chrome は FormData オブジェクトを XMLHttpRequest で send() すると問題のマルチパートで送りつける
よって、FormData は使えない……
他のブラウザだとどうなんだろ?困るな
こいつは、1210 行目で ContextType == "multipart/form-data" の処理が未実装
そして、 Chrome は FormData オブジェクトを XMLHttpRequest で send() すると問題のマルチパートで送りつける
よって、FormData は使えない……
他のブラウザだとどうなんだろ?困るな
498デフォルトの名無しさん
2020/05/16(土) 12:28:15.83ID:bJ5k+aLx xmlHttpRequest.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
じゃダメなん?
じゃダメなん?
499デフォルトの名無しさん
2020/05/16(土) 12:29:08.12ID:e+rgeli+ うーん、コード追ってみたら未実装は間違いでParseMultipartFormを使うらしいけど、わけわかんない
単純にParseFormを置き換えたら、エラーかえしやんの
単純にParseFormを置き換えたら、エラーかえしやんの
500デフォルトの名無しさん
2020/05/16(土) 12:30:20.91ID:e+rgeli+501デフォルトの名無しさん
2020/05/16(土) 12:34:33.17ID:e+rgeli+ 普通、ParseForm が判定して取り込むよね
なんで分離してんの?
なんで分離してんの?
502デフォルトの名無しさん
2020/05/16(土) 13:02:51.76ID:e+rgeli+ エラーが起こる第一原因判明
ヘッダにContent-Typeが無いリクエストでParseMultipartFormすると、パースを打ち切るのではなくてエラーを返す
ショボい作りだ
ヘッダにContent-Typeが無いリクエストでParseMultipartFormすると、パースを打ち切るのではなくてエラーを返す
ショボい作りだ
503デフォルトの名無しさん
2020/05/16(土) 13:05:20.47ID:e+rgeli+ request.go の中身を初めて見たけど、エラー処理は雑だし残念すぎるなコレ
504デフォルトの名無しさん
2020/05/16(土) 13:11:02.15ID:bJ5k+aLx request.MultipartReader() の方を使ってみたら
505デフォルトの名無しさん
2020/05/16(土) 13:14:14.23ID:e+rgeli+506デフォルトの名無しさん
2020/05/16(土) 14:52:00.85ID:9I4cSVvN マルチパートって、要は多段formだっけ
507デフォルトの名無しさん
2020/05/16(土) 14:59:51.10ID:e+rgeli+ なのかな?よく知らない
でも、WebAPIでFormとしてデータを受けるときはParseFormの使用が罠なのは確実
それともbodyを自分で解析するのが定石だったりする?
でも、WebAPIでFormとしてデータを受けるときはParseFormの使用が罠なのは確実
それともbodyを自分で解析するのが定石だったりする?
508デフォルトの名無しさん
2020/05/16(土) 15:12:59.98ID:F08ATzLT >>502
>ヘッダにContent-Typeが無いリクエストでParseMultipartFormすると、パースを打ち切るのではなくてエラーを返す
これは正常な処理だよ
Context-Typeが"multipart/form-data" の場合
Context-Type のmultipart/form-dataの後に続くboundaryをキーにしてmultipartをパースするんだから
ParseMultipartFormがContext-Typeからパースに必要なboundaryを取得できなくてエラーになるのはいたって正常なことだよ
>ヘッダにContent-Typeが無いリクエストでParseMultipartFormすると、パースを打ち切るのではなくてエラーを返す
これは正常な処理だよ
Context-Typeが"multipart/form-data" の場合
Context-Type のmultipart/form-dataの後に続くboundaryをキーにしてmultipartをパースするんだから
ParseMultipartFormがContext-Typeからパースに必要なboundaryを取得できなくてエラーになるのはいたって正常なことだよ
509デフォルトの名無しさん
2020/05/16(土) 15:26:41.59ID:F08ATzLT >>508の補足
Content-Typeが無かったらboundaryが取得できないのにParseMultipartFormでパースしようとするからエラーを返す
Content-Typeが無かったらboundaryが取得できないのにParseMultipartFormでパースしようとするからエラーを返す
510デフォルトの名無しさん
2020/05/16(土) 15:30:06.54ID:9I4cSVvN 「この中にformがいっぱい入ってますよ」っていうformなんだよね
511デフォルトの名無しさん
2020/05/16(土) 15:43:30.65ID:F08ATzLT ヘッダーのContext-Typeで分岐して適切なParseなにがしを呼べってことです。
512デフォルトの名無しさん
2020/05/16(土) 16:52:50.26ID:e+rgeli+ >>511
何のメリットがあって呼ぶ方が判定しなければならないのか、教えてください
何のメリットがあって呼ぶ方が判定しなければならないのか、教えてください
513デフォルトの名無しさん
2020/05/16(土) 17:00:10.79ID:9I4cSVvN 駄々こねてるようにしか見えんぞ
514デフォルトの名無しさん
2020/05/16(土) 17:24:44.07ID:bJ5k+aLx う〜ん、Context-Type が指定されていないのに multipart を自動判別して
くれるライブラリとかフレームワークって他所の言語にあったりするのかな…?
くれるライブラリとかフレームワークって他所の言語にあったりするのかな…?
515デフォルトの名無しさん
2020/05/16(土) 17:34:03.50ID:e+rgeli+ 自動的に判定して分岐できるんだったら、それをライブラリがしないというのは手抜きだろ、と言っている
しかし、例えば文字コードの自動判定ではSJISとUTF-8のどちらでも有効であるマルチバイト文字が存在する
例)"【D"と"縲識"はどちらも E3 80 90 44
このようなケースがある課題では自動処理できないので、ライブラリの外側で何かしらの対応をしてやる必要がある
マルチパートFormという課題でも同じように呼ぶ方が対処してやらなければならない問題があるのだろうと思った
だから、その問題について教えてくださいと書いたんだ
駄々ではないと思うんだが間違っているか?
しかし、例えば文字コードの自動判定ではSJISとUTF-8のどちらでも有効であるマルチバイト文字が存在する
例)"【D"と"縲識"はどちらも E3 80 90 44
このようなケースがある課題では自動処理できないので、ライブラリの外側で何かしらの対応をしてやる必要がある
マルチパートFormという課題でも同じように呼ぶ方が対処してやらなければならない問題があるのだろうと思った
だから、その問題について教えてくださいと書いたんだ
駄々ではないと思うんだが間違っているか?
516デフォルトの名無しさん
2020/05/16(土) 17:40:18.88ID:e+rgeli+ 505で書いたように、一見問題がないような対処はできるけど(自分でも手抜きとはわかってる)、問題点の実体が見えてないと対処に漏れが無いという確証が持てないから
517デフォルトの名無しさん
2020/05/16(土) 17:40:39.14ID:is04b0b3 MIME Type
MIME Encoding
MIME Encoding
518デフォルトの名無しさん
2020/05/16(土) 17:45:07.11ID:GaPEU8I0 それはバウンダリの中身に、
Content-disposition: attachment; filename="xxxxx"
Content-Type: text/plain
なんかが書いてあるからできる動作であって、実はバウンダリの中身はかなり自由。
マルチパートの中にさらにマルチパートを入れるマトリョーシカのようなことをしてもかまわん。仕様上は。
これをきれいに自動でデシリアライズするのは結構難しいと思うけど。
そういう意味では、呼ぶ側が解釈を与えないといかんって割り切りは間違っちゃないんじゃないか?
他のコンパイル言語でどう対応してるのか気になるな。
Content-disposition: attachment; filename="xxxxx"
Content-Type: text/plain
なんかが書いてあるからできる動作であって、実はバウンダリの中身はかなり自由。
マルチパートの中にさらにマルチパートを入れるマトリョーシカのようなことをしてもかまわん。仕様上は。
これをきれいに自動でデシリアライズするのは結構難しいと思うけど。
そういう意味では、呼ぶ側が解釈を与えないといかんって割り切りは間違っちゃないんじゃないか?
他のコンパイル言語でどう対応してるのか気になるな。
519デフォルトの名無しさん
2020/05/16(土) 17:51:34.17ID:9I4cSVvN 仕事でAWSのAPI Gatewayって機能使った時に
マルチパートフォームデータだけは解釈してくれなかった
クラウドサービスの都合上外部のライブラリ入れるにはソースに同梱するしか無く、
それは嫌だったからバックエンドのLambda(goに対応しているけど仕事で使ったのは非go)で
自前でバウンダリのfrom-toを切り取った上でガン無視してリクエストbodyを拾うだけの処理を書いた記憶があるw
完全にスレチだけど
マルチパートフォームデータだけは解釈してくれなかった
クラウドサービスの都合上外部のライブラリ入れるにはソースに同梱するしか無く、
それは嫌だったからバックエンドのLambda(goに対応しているけど仕事で使ったのは非go)で
自前でバウンダリのfrom-toを切り取った上でガン無視してリクエストbodyを拾うだけの処理を書いた記憶があるw
完全にスレチだけど
520デフォルトの名無しさん
2020/05/16(土) 17:54:45.69ID:4LNE0T1O >>515
だってContent-Typeに現れるのはその2種類だけとは限らないから全部ライブラリ任せにはできんだろ。
だってContent-Typeに現れるのはその2種類だけとは限らないから全部ライブラリ任せにはできんだろ。
521デフォルトの名無しさん
2020/05/16(土) 17:55:54.20ID:e+rgeli+ ParseMultipartFormの説明で、必要に応じてParseFormを呼び出しますと書いてるのに、
ヘッダにContent-Typeが無ければエラーとするというParseFormにはない条件を入れてしまっているのがおかしいポイントだと思うんだけど
maxMemory引数はデフォルト値を中に持って、オプションとして変更できるようにするのが、こういったライブラリの定石だから(ソケットのタイムアウト時間設定とか)、これは問題点じゃない
いや引数の設計上の問題点だけど
ヘッダにContent-Typeが無ければエラーとするというParseFormにはない条件を入れてしまっているのがおかしいポイントだと思うんだけど
maxMemory引数はデフォルト値を中に持って、オプションとして変更できるようにするのが、こういったライブラリの定石だから(ソケットのタイムアウト時間設定とか)、これは問題点じゃない
いや引数の設計上の問題点だけど
522デフォルトの名無しさん
2020/05/16(土) 18:06:23.99ID:e+rgeli+ >>520
それが、parsePostForm関数ではその二種類しかハンドリングしてないんだよなぁ
ブラウザ側でとんでもない(サーバで汎用的な方法で解析できない)フォームデータを送るならブラウザの問題だろう
FormDataオブジェクトを使うと発生するContent-Typeくらい自動で処理しないライブラリってどうなの?
それが、parsePostForm関数ではその二種類しかハンドリングしてないんだよなぁ
ブラウザ側でとんでもない(サーバで汎用的な方法で解析できない)フォームデータを送るならブラウザの問題だろう
FormDataオブジェクトを使うと発生するContent-Typeくらい自動で処理しないライブラリってどうなの?
523デフォルトの名無しさん
2020/05/16(土) 18:13:07.38ID:bJ5k+aLx request.parsePostForm() は Content-Type が無ければ application/octet-stream と見なす様だ
func parsePostForm(r *Request) (vs url.Values, err error) {
:
ct := r.Header.Get("Content-Type")
// RFC 7231, section 3.1.1.5 - empty type
// MAY be treated as application/octet-stream
if ct == "" {
ct = "application/octet-stream"
}
ct, _, err = mime.ParseMediaType(ct)
:
func parsePostForm(r *Request) (vs url.Values, err error) {
:
ct := r.Header.Get("Content-Type")
// RFC 7231, section 3.1.1.5 - empty type
// MAY be treated as application/octet-stream
if ct == "" {
ct = "application/octet-stream"
}
ct, _, err = mime.ParseMediaType(ct)
:
524デフォルトの名無しさん
2020/05/16(土) 18:26:33.81ID:bJ5k+aLx RFC 7231 HTTP/1.1: Semantics and Content(日本語訳)
https://triple-underscore.github.io/RFC7231-ja.html#section-3.1.1.5
> 実施においては、リソースの所有者は、[生成元サーバが[所与の表現用
> に正しい Content-Type を供する]ように、常に適正に環境設定されてい
> る]とは限らないため、クライアントには、[ペイロードの内容を精査し
> て、指定された型を上書きする]ものもある【例:MIME sniffing】。その
> ようにするクライアントは、不正な結論を導くリスクを負い、追加のセ
> キュリティリスクを公開し得る(例:"特権拡大")。更には、送信者の意図
> をデータ形式を精査して決定するのは、不可能である: 多くのデータ形
> 式は、処理の意味論においてのみ相違するような、複数の MIME 型に合
> 致する。実装者には、そのような "内容 sniff 法" を利用するときは、
> それを不能化する手段を供することが奨励される。
https://triple-underscore.github.io/RFC7231-ja.html#section-3.1.1.5
> 実施においては、リソースの所有者は、[生成元サーバが[所与の表現用
> に正しい Content-Type を供する]ように、常に適正に環境設定されてい
> る]とは限らないため、クライアントには、[ペイロードの内容を精査し
> て、指定された型を上書きする]ものもある【例:MIME sniffing】。その
> ようにするクライアントは、不正な結論を導くリスクを負い、追加のセ
> キュリティリスクを公開し得る(例:"特権拡大")。更には、送信者の意図
> をデータ形式を精査して決定するのは、不可能である: 多くのデータ形
> 式は、処理の意味論においてのみ相違するような、複数の MIME 型に合
> 致する。実装者には、そのような "内容 sniff 法" を利用するときは、
> それを不能化する手段を供することが奨励される。
525デフォルトの名無しさん
2020/05/16(土) 18:28:03.02ID:e+rgeli+526デフォルトの名無しさん
2020/05/16(土) 18:35:18.02ID:bJ5k+aLx >>525
GitHub リポジトリの develop branch から引っ張ってビルドしたもの
$ go version
go version devel +810c27e9be Wed May 13 11:59:26 2020 +0000
GitHub リポジトリの develop branch から引っ張ってビルドしたもの
$ go version
go version devel +810c27e9be Wed May 13 11:59:26 2020 +0000
527デフォルトの名無しさん
2020/05/16(土) 18:49:32.90ID:e+rgeli+ あ、それ違う
それはParseForm(1180行あたり)から呼ばれる奴だ
つまりマルチパート非対応
ParseMultipartForm(1294行あたり)から呼ばれるmultipartReader(480行あたり)ではContent-Typeが無いと、やっぱりエラーを叩き返してる
それはParseForm(1180行あたり)から呼ばれる奴だ
つまりマルチパート非対応
ParseMultipartForm(1294行あたり)から呼ばれるmultipartReader(480行あたり)ではContent-Typeが無いと、やっぱりエラーを叩き返してる
528デフォルトの名無しさん
2020/05/16(土) 18:53:01.16ID:e+rgeli+ つまり現状でも
マルチパート非対応のParseFormでは、ctが無くてもOK
マルチパート対応のParseMultipartFormでは、ctが無ければエラー
という差異が存在している
マルチパート非対応のParseFormでは、ctが無くてもOK
マルチパート対応のParseMultipartFormでは、ctが無ければエラー
という差異が存在している
529デフォルトの名無しさん
2020/05/16(土) 18:57:51.02ID:e+rgeli+ ParseFormだとURLにフォームくっ付けてContent-Typeがないリクエストを想定してるけど
ParseMultipartFormだと、そういう形式のリクエストは認めていないという違いになって現れる
ParseMultipartFormだと、そういう形式のリクエストは認めていないという違いになって現れる
530デフォルトの名無しさん
2020/05/16(土) 19:07:51.23ID:e+rgeli+ 意図的にContent-Typeのないような感じのフォームデータは許さないサーバを書いてるから、エラーチェックしないという対応だけでも問題なさそう
531デフォルトの名無しさん
2020/05/16(土) 19:47:58.26ID:F08ATzLT >>530
content-typeがない場合
Request.Bodyの内容からapplication/x-www-form-urlencodedやmultipart/form-dataなどのデータ形式(content-type相当)を判断する必要がる。
multipart/form-dataに限ってはboundaryをRequest.Body内容から見つけ出す必要がある。
(keyValueを取得するにもboundaryが必要。)
で、ここで問題なのがRequest.BodyはSTDINからの入力でseekが出来ないのでデータ形式判定後に再度Request.Bodyを読み込むために何らかの方法でRequest.Bodyをキャッシュする必要が出てくる。
(multipart/form-dataはファイルもアップロード出来るのでメモリ上でのキャッシュには向かない)
それとhttp.Serverは常駐プロセスになるので、無駄なリソースを使って自動判別して自動でパースするよりcontent-typeで分岐してパースする方が合理的。
content-typeがない場合
Request.Bodyの内容からapplication/x-www-form-urlencodedやmultipart/form-dataなどのデータ形式(content-type相当)を判断する必要がる。
multipart/form-dataに限ってはboundaryをRequest.Body内容から見つけ出す必要がある。
(keyValueを取得するにもboundaryが必要。)
で、ここで問題なのがRequest.BodyはSTDINからの入力でseekが出来ないのでデータ形式判定後に再度Request.Bodyを読み込むために何らかの方法でRequest.Bodyをキャッシュする必要が出てくる。
(multipart/form-dataはファイルもアップロード出来るのでメモリ上でのキャッシュには向かない)
それとhttp.Serverは常駐プロセスになるので、無駄なリソースを使って自動判別して自動でパースするよりcontent-typeで分岐してパースする方が合理的。
532デフォルトの名無しさん
2020/05/16(土) 21:02:30.65ID:e+rgeli+533デフォルトの名無しさん
2020/05/16(土) 21:30:32.48ID:e+rgeli+ 最終的に
func (i *rInst) ParseForm() error {
v := i.request.Header.Get("Content-Type")
if v == "" {
return i.request.ParseForm()
} else {
return i.request.ParseMultipartForm(100 * 1024)
}
}
とすることにした
func (i *rInst) ParseForm() error {
v := i.request.Header.Get("Content-Type")
if v == "" {
return i.request.ParseForm()
} else {
return i.request.ParseMultipartForm(100 * 1024)
}
}
とすることにした
534デフォルトの名無しさん
2020/05/17(日) 07:48:09.08ID:8deP89zB >>532
> としても、ParseForm内で分岐させない理由にはなってないと思っちゃうんだけど、それについては?
そもそもParseFormがリクエストのパース処理を包括したラッパー関数だと何処で勘違いしたの?
なぜそこまで頑なにRequest-MethodとContent-Typeの値で分岐しようとしないの?
(Content-Typeの値の有無だけ確認して分岐したって言うのは無しよ)
>>533のあなたの最終的な実装を見るとあなたはContent-TypeとParseFormとParseMultipartFormを理解して使って無いの、何となく動くからってやっつけで実装したようにしか見えないの。
> としても、ParseForm内で分岐させない理由にはなってないと思っちゃうんだけど、それについては?
そもそもParseFormがリクエストのパース処理を包括したラッパー関数だと何処で勘違いしたの?
なぜそこまで頑なにRequest-MethodとContent-Typeの値で分岐しようとしないの?
(Content-Typeの値の有無だけ確認して分岐したって言うのは無しよ)
>>533のあなたの最終的な実装を見るとあなたはContent-TypeとParseFormとParseMultipartFormを理解して使って無いの、何となく動くからってやっつけで実装したようにしか見えないの。
535デフォルトの名無しさん
2020/05/17(日) 07:48:39.85ID:8deP89zB >>533
あなたの最終的な実装を元にして実装するならこんな感じかな(勝ってに拡張しちゃってるけど)
func (i *rInst) ParseForm() error {
var err error
r := i.request
ct := r.Header.Get("Content-Type")
ct, _, err = mime.ParseMediaType(ct)
if err == nil {
switch ct {
case "multipart/form-data":
if r.Method == "POST" {
err = r.ParseMultipartForm(100 * 1024)
} else {
err = errors.New(“invalid request”)
}
case “application/json”:
d := json.NewDecoder(r.Body)
// i.Json = make(map[string]interface{})
i.Json = &BindStructure{}
err = d.Decode(&i.Json)
default:
err = r.ParseForm()
}
}
return err
}
まぁ、頑張って。
あなたの最終的な実装を元にして実装するならこんな感じかな(勝ってに拡張しちゃってるけど)
func (i *rInst) ParseForm() error {
var err error
r := i.request
ct := r.Header.Get("Content-Type")
ct, _, err = mime.ParseMediaType(ct)
if err == nil {
switch ct {
case "multipart/form-data":
if r.Method == "POST" {
err = r.ParseMultipartForm(100 * 1024)
} else {
err = errors.New(“invalid request”)
}
case “application/json”:
d := json.NewDecoder(r.Body)
// i.Json = make(map[string]interface{})
i.Json = &BindStructure{}
err = d.Decode(&i.Json)
default:
err = r.ParseForm()
}
}
return err
}
まぁ、頑張って。
536デフォルトの名無しさん
2020/05/17(日) 08:01:02.13ID:Y3GCZn29537デフォルトの名無しさん
2020/05/17(日) 08:02:56.61ID:8deP89zB > i.Json = &BindStructure{}
の部分は
i.Json = BindStructure{}
の間違えでした。
の部分は
i.Json = BindStructure{}
の間違えでした。
538デフォルトの名無しさん
2020/05/17(日) 08:07:59.87ID:Y3GCZn29539デフォルトの名無しさん
2020/05/17(日) 08:10:55.71ID:8deP89zB 寝ぼけてるぽい、もう一回上げ直し
>>533
あなたの最終的な実装を元にして実装するならこんな感じかな(勝ってに拡張しちゃってるけど)
func (i *rInst) ParseForm() error {
var err error
r := i.request
ct := r.Header.Get("Content-Type")
ct, _, err = mime.ParseMediaType(ct)
if err == nil {
switch ct {
case "multipart/form-data":
if r.Method == "POST" {
err = r.ParseMultipartForm(100 * 1024)
} else {
err = errors.New(“invalid request”)
}
case “application/json”:
d := json.NewDecoder(r.Body)
// i.Json = make(map[string]interface{})
// err = d.Decode(&i.Json)
i.Json = &BindStructure{}
err = d.Decode(i.Json)
default:
err = r.ParseForm()
}
}
return err
}
>>533
あなたの最終的な実装を元にして実装するならこんな感じかな(勝ってに拡張しちゃってるけど)
func (i *rInst) ParseForm() error {
var err error
r := i.request
ct := r.Header.Get("Content-Type")
ct, _, err = mime.ParseMediaType(ct)
if err == nil {
switch ct {
case "multipart/form-data":
if r.Method == "POST" {
err = r.ParseMultipartForm(100 * 1024)
} else {
err = errors.New(“invalid request”)
}
case “application/json”:
d := json.NewDecoder(r.Body)
// i.Json = make(map[string]interface{})
// err = d.Decode(&i.Json)
i.Json = &BindStructure{}
err = d.Decode(i.Json)
default:
err = r.ParseForm()
}
}
return err
}
540デフォルトの名無しさん
2020/05/17(日) 08:16:05.54ID:Y3GCZn29 >>535
あ、REST-APIでよく使われる形式なのか
そういうForm使わない呼び出しはサポートしないんで割愛
POST以外のAPIアクセスは事前に拒絶してるから割愛
現状でも問題ないな(手抜き)
あ、REST-APIでよく使われる形式なのか
そういうForm使わない呼び出しはサポートしないんで割愛
POST以外のAPIアクセスは事前に拒絶してるから割愛
現状でも問題ないな(手抜き)
541デフォルトの名無しさん
2020/05/17(日) 08:21:16.95ID:Y3GCZn29542デフォルトの名無しさん
2020/05/17(日) 08:26:21.18ID:8deP89zB スレチになるのでちょっとだけ。
ブラウザが送るって言う解釈とはちょっと違うけどjavascriptで
fetch(url, {
method: 'POST',
headers:{"Content-Type": "application/json"},
body: JSON.stringify(data)
}).then(res => res.json()).then(function(resp) {
// ...
})
みたいにapplication/jsonでリクエストできます。
ブラウザが送るって言う解釈とはちょっと違うけどjavascriptで
fetch(url, {
method: 'POST',
headers:{"Content-Type": "application/json"},
body: JSON.stringify(data)
}).then(res => res.json()).then(function(resp) {
// ...
})
みたいにapplication/jsonでリクエストできます。
543デフォルトの名無しさん
2020/05/17(日) 08:35:11.77ID:Y3GCZn29 >>539
まって、Content-Typeが無いと mime: no media type になる気がするんだが(コード見ただけだけど)
Context-Type が無かったらParseFormの出番だと思う
まって、Content-Typeが無いと mime: no media type になる気がするんだが(コード見ただけだけど)
Context-Type が無かったらParseFormの出番だと思う
544デフォルトの名無しさん
2020/05/17(日) 08:36:58.14ID:8deP89zB >>541
> mime.ParseMultimediaTypeは呼んだ方がいい?
// ct に「;」がある場合に「;」より前を取得してるだけなので
// mime.ParseMultimediaType使わずにこれでもいい
if pos := strings.Index(ct. “;”); pos != -1 {
ct = ct[:pos]
}
> mime.ParseMultimediaTypeは呼んだ方がいい?
// ct に「;」がある場合に「;」より前を取得してるだけなので
// mime.ParseMultimediaType使わずにこれでもいい
if pos := strings.Index(ct. “;”); pos != -1 {
ct = ct[:pos]
}
545デフォルトの名無しさん
2020/05/17(日) 08:38:10.44ID:Y3GCZn29546デフォルトの名無しさん
2020/05/17(日) 08:40:22.86ID:8deP89zB > まって、Content-Typeが無いと mime: no media type になる気がするんだが(コード見ただけだけど)
ごめんこっちに置き換えてw
if pos := strings.Index(ct. “;”); pos != -1 {
ct = ct[:pos]
}
iphoneで書いてるからちょっと適当になりましたw
ごめんこっちに置き換えてw
if pos := strings.Index(ct. “;”); pos != -1 {
ct = ct[:pos]
}
iphoneで書いてるからちょっと適当になりましたw
547デフォルトの名無しさん
2020/05/17(日) 08:45:00.28ID:8deP89zB func (i *rInst) ParseForm() error {
var err error
r := i.request
ct := r.Header.Get("Content-Type")
if pos := strings.Index(ct. “;”); pos != -1 {
ct = ct[:pos]
}
switch ct {
case "multipart/form-data":
if r.Method == "POST" {
err = r.ParseMultipartForm(100 * 1024)
} else {
err = errors.New(“invalid request”)
}
case “application/json”:
d := json.NewDecoder(r.Body)
// i.Json = make(map[string]interface{})
// err = d.Decode(&i.Json)
i.Json = &BindStructure{}
err = d.Decode(i.Json)
default:
err = r.ParseForm()
}
return err
}
var err error
r := i.request
ct := r.Header.Get("Content-Type")
if pos := strings.Index(ct. “;”); pos != -1 {
ct = ct[:pos]
}
switch ct {
case "multipart/form-data":
if r.Method == "POST" {
err = r.ParseMultipartForm(100 * 1024)
} else {
err = errors.New(“invalid request”)
}
case “application/json”:
d := json.NewDecoder(r.Body)
// i.Json = make(map[string]interface{})
// err = d.Decode(&i.Json)
i.Json = &BindStructure{}
err = d.Decode(i.Json)
default:
err = r.ParseForm()
}
return err
}
548デフォルトの名無しさん
2020/05/17(日) 08:51:07.87ID:Y3GCZn29 現時点で
// SetParseMemory は ParseMultipartForm で指定するメモリサイズを変更します。
func (i *rInst) SetParseMemory(size int64) {
i.size = size
}
// ParseForm() error
func (i *rInst) ParseForm() error {
v := i.request.Header.Get("Content-Type")
if v == "" {
return i.request.ParseForm()
} else {
if pos := strings.Index(v, ";"); pos != -1 {
v = v[:pos]
}
if v == "multipart/form-data" {
return i.request.ParseMultipartForm(i.size)
} else {
return i.request.ParseForm()
}
}
}
とした
// SetParseMemory は ParseMultipartForm で指定するメモリサイズを変更します。
func (i *rInst) SetParseMemory(size int64) {
i.size = size
}
// ParseForm() error
func (i *rInst) ParseForm() error {
v := i.request.Header.Get("Content-Type")
if v == "" {
return i.request.ParseForm()
} else {
if pos := strings.Index(v, ";"); pos != -1 {
v = v[:pos]
}
if v == "multipart/form-data" {
return i.request.ParseMultipartForm(i.size)
} else {
return i.request.ParseForm()
}
}
}
とした
549デフォルトの名無しさん
2020/05/17(日) 08:54:49.63ID:Y3GCZn29 あ、これでいいのか
// ParseForm() error
func (i *rInst) ParseForm() error {
v := i.request.Header.Get("Content-Type")
if pos := strings.Index(v, ";"); pos != -1 {
v = v[:pos]
}
if v == "multipart/form-data" {
return i.request.ParseMultipartForm(i.size)
} else {
return i.request.ParseForm()
}
}
// ParseForm() error
func (i *rInst) ParseForm() error {
v := i.request.Header.Get("Content-Type")
if pos := strings.Index(v, ";"); pos != -1 {
v = v[:pos]
}
if v == "multipart/form-data" {
return i.request.ParseMultipartForm(i.size)
} else {
return i.request.ParseForm()
}
}
550デフォルトの名無しさん
2020/05/17(日) 08:55:11.84ID:8deP89zB >>545
>うん、でもそこはAPIの仕様だから
>汎用的なForm解析ならば必要だけど、自分のAPIだと割愛してよいってだけの話
わかりました。
サンプルがちょっとグダグダになってこめんなさいw
とりあえす頑張ってください。
>うん、でもそこはAPIの仕様だから
>汎用的なForm解析ならば必要だけど、自分のAPIだと割愛してよいってだけの話
わかりました。
サンプルがちょっとグダグダになってこめんなさいw
とりあえす頑張ってください。
551デフォルトの名無しさん
2020/05/17(日) 08:57:15.07ID:8deP89zB >>549
それでもいいです。
それでもいいです。
552デフォルトの名無しさん
2020/05/17(日) 09:00:02.16ID:Y3GCZn29 結局、application/json のために ParseForm から ParseMultipartForm を追い出してる?
やっぱり自分的には納得いかない
やっぱり自分的には納得いかない
553デフォルトの名無しさん
2020/05/19(火) 00:48:43.53ID:uas/zK5F archive/zip パッケージの仕様なのか、zip 自体の仕様なのかわからんけど
まーた穴に嵌まった
zip内のトップディレクトリにファイルがある
file1.txt
sub/file2.txt
という構成だったときには
sub/
というzipエントリもReadCloser.File配列に入ってくるのに
トップにファイルがなくて
sub/file2.txt
というように、サブディレクトリ以下にしかファイルが無かったときには
sub/
が入ってきてない(もしくは入らないzipがある)
orz
まーた穴に嵌まった
zip内のトップディレクトリにファイルがある
file1.txt
sub/file2.txt
という構成だったときには
sub/
というzipエントリもReadCloser.File配列に入ってくるのに
トップにファイルがなくて
sub/file2.txt
というように、サブディレクトリ以下にしかファイルが無かったときには
sub/
が入ってきてない(もしくは入らないzipがある)
orz
554デフォルトの名無しさん
2020/05/19(火) 00:49:54.57ID:uas/zK5F package main
import (
"archive/zip"
"fmt"
)
func main() {
list("jquery-ui-1.12.1.zip")
list("ant-1.10.7-javadoc.jar")
}
func list(name string) {
fmt.Println("----- " + name)
if f, err := zip.OpenReader(name); err == nil {
defer f.Close()
for _, fi := range f.File {
fmt.Println(fi.Name)
}
}
}
import (
"archive/zip"
"fmt"
)
func main() {
list("jquery-ui-1.12.1.zip")
list("ant-1.10.7-javadoc.jar")
}
func list(name string) {
fmt.Println("----- " + name)
if f, err := zip.OpenReader(name); err == nil {
defer f.Close()
for _, fi := range f.File {
fmt.Println(fi.Name)
}
}
}
555デフォルトの名無しさん
2020/05/19(火) 00:52:26.39ID:uas/zK5F 実行例
----- jquery-ui-1.12.1.zip
jquery-ui-1.12.1/jquery-ui.theme.css
・・・
----- ant-1.10.7-javadoc.jar
META-INF/
・・・
----- jquery-ui-1.12.1.zip
jquery-ui-1.12.1/jquery-ui.theme.css
・・・
----- ant-1.10.7-javadoc.jar
META-INF/
・・・
556デフォルトの名無しさん
2020/05/19(火) 04:56:52.36ID:eSOcgsmn Go最近始めたんだけど[]stringって型の書き方が違和感すぎるんだけど理由ってあるの?
他にこの配列の型導入してる言語もしりたい
他にこの配列の型導入してる言語もしりたい
557デフォルトの名無しさん
2020/05/19(火) 07:27:40.15ID:uas/zK5F 想像に過ぎないんだけど、
[]が後置だとmapも
map[keyType]valueTypeはvalueType[keyType]mapとなるはず
そしてmapをvalueとして持つmap
map[keyType]map[keyType]valueTypeはvalueType[keyType]map[keyType]map
なんか見辛いような、そうでもないような
そもそもmapって、なんで付けなきゃならないんだろ?
keyType付いてたら文脈で分かりそう
連想配列って元からそうだよな
[]が後置だとmapも
map[keyType]valueTypeはvalueType[keyType]mapとなるはず
そしてmapをvalueとして持つmap
map[keyType]map[keyType]valueTypeはvalueType[keyType]map[keyType]map
なんか見辛いような、そうでもないような
そもそもmapって、なんで付けなきゃならないんだろ?
keyType付いてたら文脈で分かりそう
連想配列って元からそうだよな
558デフォルトの名無しさん
2020/05/19(火) 09:57:39.34ID:uas/zK5F559デフォルトの名無しさん
2020/05/19(火) 15:39:15.28ID:uas/zK5F サーバで http.ResponseWriter への書き込みが WSAECONNABORTED (10053) でエラーになっているとき
http.server.go#1905 で return してるため、1907のc.setState で StateIdle がセットされない
そのため、http.Server の ConnState ハンドラでコネクション数を勘定してると数が合わなくなる
という罠に嵌まった
どうしよう……エラーを検知した時に勘定している数をデクリメントするか?
だって、 return の判定で使われてる shouldReuseConnection って隠蔽されてるから
http.server.go#1905 で return してるため、1907のc.setState で StateIdle がセットされない
そのため、http.Server の ConnState ハンドラでコネクション数を勘定してると数が合わなくなる
という罠に嵌まった
どうしよう……エラーを検知した時に勘定している数をデクリメントするか?
だって、 return の判定で使われてる shouldReuseConnection って隠蔽されてるから
560デフォルトの名無しさん
2020/05/19(火) 15:42:09.41ID:jC0iCWsp 罠にハマりっぱなしだな
561デフォルトの名無しさん
2020/05/19(火) 15:46:50.47ID:uas/zK5F テストでの罠検出には定評のある人材だから
すごかろう(やけくそ)
すごかろう(やけくそ)
562デフォルトの名無しさん
2020/05/19(火) 15:56:36.95ID:UZUeOLhY >>556
英語と同じ語順にした
array of string => []string
Cの場合それを使う構文と宣言を同じにしたせいで
ややこしくなったし
その反面教師だと思う
Cだと使う時も宣言もstring[]なんだよね
英語と同じ語順にした
array of string => []string
Cの場合それを使う構文と宣言を同じにしたせいで
ややこしくなったし
その反面教師だと思う
Cだと使う時も宣言もstring[]なんだよね
563デフォルトの名無しさん
2020/05/19(火) 15:57:44.45ID:uas/zK5F そもそも、問題のレスポンスでは20MBくらいのmpgファイルがリクエストされてるんだけど
こういったデカイ応答を返す場合って自分が知らない注意点がある?
Content-Length はファイルサイズ(21614145)
Content-Type は application/octet-stream
で送ってる
ブラウザでは動画はちゃんと出てる
こういったデカイ応答を返す場合って自分が知らない注意点がある?
Content-Length はファイルサイズ(21614145)
Content-Type は application/octet-stream
で送ってる
ブラウザでは動画はちゃんと出てる
564デフォルトの名無しさん
2020/05/19(火) 16:05:09.36ID:uas/zK5F ブラウザ側では数十msで受信してるから、タイムアウトじゃない
565デフォルトの名無しさん
2020/05/19(火) 16:16:50.77ID:uas/zK5F う、もしかすると送信するストリームが Content-Length よりも長いという可能性もあるのか
それでブラウザ側から終わった!と切断されてる可能性
面倒極まりないな
それでブラウザ側から終わった!と切断されてる可能性
面倒極まりないな
566デフォルトの名無しさん
2020/05/19(火) 16:50:34.24ID:uas/zK5F 深く考えずに
レスポンスの書き込みに失敗したらコネクション数をデクリメントする
ことにした
コネクション数が0になるまではWaitGroup.Waitで待ってる作りにしてたんで
レスポンスの書き込みに失敗したらコネクション数をデクリメントする
ことにした
コネクション数が0になるまではWaitGroup.Waitで待ってる作りにしてたんで
567デフォルトの名無しさん
2020/05/19(火) 17:19:44.24ID:h69Ba80R 普通は適当なサイズに分けてチャンクで送る
568デフォルトの名無しさん
2020/05/19(火) 17:35:35.62ID:uas/zK5F >>567
ResponseWriter の実体って、 chunkWriter ってstruct だから自動的にチャンクで送られるんじゃないの?
ResponseWriter の実体って、 chunkWriter ってstruct だから自動的にチャンクで送られるんじゃないの?
569デフォルトの名無しさん
2020/05/19(火) 17:38:29.19ID:uas/zK5F >>567
うわ、Headerでなんか設定しないと駄目なのか
うわ、Headerでなんか設定しないと駄目なのか
570デフォルトの名無しさん
2020/05/19(火) 17:57:05.30ID:uas/zK5F >>567
うーん、HTTP1.1だとTransfer-Encodingにidentityを指定していない場合は強制的にchunkで送られるんじゃないか疑惑
Content-Length不要のお知らせ?
うーん、HTTP1.1だとTransfer-Encodingにidentityを指定していない場合は強制的にchunkで送られるんじゃないか疑惑
Content-Length不要のお知らせ?
571デフォルトの名無しさん
2020/05/19(火) 18:02:54.20ID:uas/zK5F572デフォルトの名無しさん
2020/05/19(火) 18:09:43.56ID:MXbRkdCy 一貫してオレの都合よく動くようにできてないと騒いでるだけだな
573デフォルトの名無しさん
2020/05/19(火) 18:33:39.64ID:uas/zK5F 呼び出し順序に則って作らなければ動かないフレームワークってのは
屑って言うんじゃないの?
屑って言うんじゃないの?
574デフォルトの名無しさん
2020/05/19(火) 18:35:39.76ID:uas/zK5F いや、呼び出し順序に従わない場合はエラーにする
ならば仕方ないよそりゃ
OpenしないでReadできないのはおかしい、とか言わないから
ならば仕方ないよそりゃ
OpenしないでReadできないのはおかしい、とか言わないから
575デフォルトの名無しさん
2020/05/19(火) 18:38:32.19ID:uas/zK5F 明記しない制約は常識とは言わないから
576デフォルトの名無しさん
2020/05/19(火) 21:21:52.33ID:uas/zK5F >>567
Content-Length不要…以前の、設定しなけりゃチャンク送信!
orz
ちなみに、レスポンス書き込みがエラーになるブラウザはChromeとEdge
Firefoxだとエラーにならないのは何故だろう
Content-Length不要…以前の、設定しなけりゃチャンク送信!
orz
ちなみに、レスポンス書き込みがエラーになるブラウザはChromeとEdge
Firefoxだとエラーにならないのは何故だろう
577デフォルトの名無しさん
2020/05/19(火) 22:18:59.14ID:sE19LTm8 むしろエラーにしてほしい
変な俺様拡張がまかり通ると
そっちに甘えてそれが当たり前になって
文化や規約を企業に乗っ取られてしまう
変な俺様拡張がまかり通ると
そっちに甘えてそれが当たり前になって
文化や規約を企業に乗っ取られてしまう
578デフォルトの名無しさん
2020/05/20(水) 09:29:17.16ID:AEWLFsS8 458 に関係しての罠
プロジェクトをユーザ名とは関係しないディレクトリに置いても、まだ駄目だった
C:/Users/ユーザ名/go/pkg/mod/golang.org/x/text@v0.3.2/encoding/japanese/all.go
というように go get したパッケージの置き場から、ユーザ名は露呈する
嫌ならば GOPATH はユーザディレクトリの下に置いてはいけない
プロジェクトをユーザ名とは関係しないディレクトリに置いても、まだ駄目だった
C:/Users/ユーザ名/go/pkg/mod/golang.org/x/text@v0.3.2/encoding/japanese/all.go
というように go get したパッケージの置き場から、ユーザ名は露呈する
嫌ならば GOPATH はユーザディレクトリの下に置いてはいけない
579デフォルトの名無しさん
2020/05/20(水) 09:36:09.90ID:AEWLFsS8 そりゃ当たり前で気がつかないのがウカツだった…
参照してるパッケージだってコンパイルされるんだもんなぁ
参照してるパッケージだってコンパイルされるんだもんなぁ
580デフォルトの名無しさん
2020/05/25(月) 08:12:24.13ID:Jp/r3UJz 雑誌でGoはC++を嫌ったGoogleの技術者が作ったって書かれてたんだけどそうなの?
色んな情報見てきて初めて見たんだけど
色んな情報見てきて初めて見たんだけど
581デフォルトの名無しさん
2020/05/25(月) 09:08:49.12ID:D0zggZTk コンパイルの遅さに嫌気が差したってのは見たこと有るな、尚ソースは無い
582デフォルトの名無しさん
2020/05/25(月) 10:00:32.41ID:Qw1nrBQZ C++を嫌った技術者が作ったというのは曲解だと思うけど、
1. C++プログラマーだった人たちが新しい言語の研究プロジェクトを始めた
2. 新しい言語を作るにあたってC++のダメな点を洗い出す -> 結果としてC++嫌いになったw
という、特に驚くこともない話(C++のダメなところはそこらじゅうに既出ですし)
過去のインタビューでも出てた話だし、カンファレンスでもネタにされてた
https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html
https://www.drdobbs.com/open-source/interview-with-ken-thompson/229502480
1. C++プログラマーだった人たちが新しい言語の研究プロジェクトを始めた
2. 新しい言語を作るにあたってC++のダメな点を洗い出す -> 結果としてC++嫌いになったw
という、特に驚くこともない話(C++のダメなところはそこらじゅうに既出ですし)
過去のインタビューでも出てた話だし、カンファレンスでもネタにされてた
https://commandcenter.blogspot.com/2012/06/less-is-exponentially-more.html
https://www.drdobbs.com/open-source/interview-with-ken-thompson/229502480
583デフォルトの名無しさん
2020/05/25(月) 11:32:33.83ID:ltgSCU1m 目的と合ってないから、目的を絞り混んで作った、いわゆるドメイン固有言語って認識
言語は問題解決に向いてる向いてないはあっても、良い悪いってのはそんなに無いよねという持論
言語は問題解決に向いてる向いてないはあっても、良い悪いってのはそんなに無いよねという持論
584デフォルトの名無しさん
2020/05/25(月) 12:20:31.75ID:83qlHvUW 同意しない
Goが絞り込んでいるのは用途ではなく開発スタイル
Goが絞り込んでいるのは用途ではなく開発スタイル
585デフォルトの名無しさん
2020/05/25(月) 13:20:36.16ID:gis+qwRr Go は、Ruby を極端にした感じ
継承より委譲。
継承を無くして、Duck Typing だけにした!
Ruby on Rails をやったら、やっぱり継承・抽象クラスがあると便利!
フレームワークには必要
継承より委譲。
継承を無くして、Duck Typing だけにした!
Ruby on Rails をやったら、やっぱり継承・抽象クラスがあると便利!
フレームワークには必要
586デフォルトの名無しさん
2020/05/25(月) 13:44:33.12ID:ltgSCU1m587デフォルトの名無しさん
2020/05/25(月) 16:38:07.00ID:Jp/r3UJz 問題解決力だけで言うとGoが一番高いの?
個人的にはフロントのネイティブ実装を強制されるって意味も含めてJSか、ライブラリの豊富さでPythonとかだと個人的に思うけど
個人的にはフロントのネイティブ実装を強制されるって意味も含めてJSか、ライブラリの豊富さでPythonとかだと個人的に思うけど
588デフォルトの名無しさん
2020/05/25(月) 16:41:08.15ID:AxcX2SLe 場合による
589デフォルトの名無しさん
2020/05/25(月) 17:19:57.39ID:quw8Fr75 pythonってそこまで書きやすいとは思わないなあ
インターフェースがないから
どのオブジェクトが何を実装してるのかわからない
やはりインターフェースは偉大
インターフェースがないから
どのオブジェクトが何を実装してるのかわからない
やはりインターフェースは偉大
590デフォルトの名無しさん
2020/05/25(月) 17:29:12.78ID:83qlHvUW Goはクラウドネイティブ開発に習熟してるがオーバークォリティなことをやりがちな奴が多い
JSは大半はゴミ、たまに凄いのもいる
Pythonは全体的に高学歴で頭良いけど動きゃいいって感じの奴が多い
どんな人間が欲しいか次第じゃないかな
JSは大半はゴミ、たまに凄いのもいる
Pythonは全体的に高学歴で頭良いけど動きゃいいって感じの奴が多い
どんな人間が欲しいか次第じゃないかな
591デフォルトの名無しさん
2020/05/25(月) 17:31:51.89ID:AueT0Sbh pythonは
import Hoge
したら
help(Hoge)
a = Hoge.hoge()
だったら
help(a)
import Hoge
したら
help(Hoge)
a = Hoge.hoge()
だったら
help(a)
592デフォルトの名無しさん
2020/05/25(月) 18:10:55.04ID:ltgSCU1m 場合つまり解決しようという問題による
問題解決能力って何よという話
グラフィカルでない
非同期処理が効果的
ならば少ない労力で実装できるという強みが売りかな
労力に関しては仕様が一頁で網羅できるGoの学習コストの低さが大きい
PythonだとCの知識前提で使うCythonでないとGoには太刀打ちできないというQuiita記事もある
総合力ではPythonの圧勝だろうけど、限定された問題ってのはそういうもの
問題解決能力って何よという話
グラフィカルでない
非同期処理が効果的
ならば少ない労力で実装できるという強みが売りかな
労力に関しては仕様が一頁で網羅できるGoの学習コストの低さが大きい
PythonだとCの知識前提で使うCythonでないとGoには太刀打ちできないというQuiita記事もある
総合力ではPythonの圧勝だろうけど、限定された問題ってのはそういうもの
593デフォルトの名無しさん
2020/05/25(月) 18:27:04.86ID:ltgSCU1m >>590
オーバークォリティか……耳に痛すぎる指摘だ
オーバークォリティか……耳に痛すぎる指摘だ
594デフォルトの名無しさん
2020/05/25(月) 19:39:14.90ID:UFuP99WV 用途によるとしか言いようがない気がする。
どれも銀の弾丸にはならんよ。
どれも銀の弾丸にはならんよ。
595デフォルトの名無しさん
2020/05/25(月) 21:22:07.97ID:oQRyx0Ul 銀の弾丸は狼男(もしくは悪魔)を倒すという用途に特化されてるんですが・・
596デフォルトの名無しさん
2020/05/25(月) 22:09:38.90ID:UFuP99WV ブルックスの論文を知ってて言ってたら申し訳ないんだが、ソフトウエアプロジェクトと言うものに対する銀の弾丸は無いって話だよ。
597デフォルトの名無しさん
2020/05/26(火) 06:33:05.73ID:tQI2iyhC オーバークォリティなことをやりがちな奴が多い
ってのは質が良いプロダクトを作るのには向いてないってこと?
ってのは質が良いプロダクトを作るのには向いてないってこと?
598デフォルトの名無しさん
2020/05/26(火) 06:39:27.10ID:12NedZz3599デフォルトの名無しさん
2020/05/26(火) 07:21:02.22ID:uV+m0fgU 単体テストやってたら過剰品質だと怒られたんだよな○KI電気SI
600デフォルトの名無しさん
2020/05/26(火) 07:48:46.09ID:FE3JTR8c 過ぎたるは猶及ばざるが如し
601デフォルトの名無しさん
2020/05/26(火) 08:32:48.79ID:2WnNvGhA >>599
カバレッジ100%とかを目標にしてたんなら過剰品質だと言われてもしかたがない
カバレッジ100%とかを目標にしてたんなら過剰品質だと言われてもしかたがない
602デフォルトの名無しさん
2020/05/26(火) 09:09:34.75ID:285tMFTY Web関連の自動化でselenium使いたくて、
Pythonでいいかってなったとこはある。
Pythonでいいかってなったとこはある。
603デフォルトの名無しさん
2020/05/26(火) 11:43:23.28ID:6ileE2Zc 自動テストのコストは成果物を運用しながら継続的に改良していく中でペイしていくもので、SIなら突貫で作って一発動いたらあとは納品して終わりなんだから自動テストは実際要らんわ
Goで書くようなものなんて複雑怪奇な業務ロジックとかじゃなくシンプルな小物だろうし
Goで書くようなものなんて複雑怪奇な業務ロジックとかじゃなくシンプルな小物だろうし
604デフォルトの名無しさん
2020/05/26(火) 12:30:08.40ID:navi3B+X そんな会社まだ生き残ってんだ
605デフォルトの名無しさん
2020/05/26(火) 12:38:46.36ID:uV+m0fgU 特に一部上場に多い感触
606デフォルトの名無しさん
2020/05/26(火) 12:50:01.40ID:tQI2iyhC >>592
Qiitaの記事欲しい
てかPython触るぐらいなら機械学習分野もGoに入れ替わってほしいわ
PythonのC/C++バックエンドよりは多少遅くなるけど、クラウドの相性のよさとかライブラリの質考えたらGoのほうがいい(Numpyとかpandasとかはまた別だけど)
自動テストってどのテストを指してるのか分からないけど、テスト書かないのは後戻りできない負債になるよ
Qiitaの記事欲しい
てかPython触るぐらいなら機械学習分野もGoに入れ替わってほしいわ
PythonのC/C++バックエンドよりは多少遅くなるけど、クラウドの相性のよさとかライブラリの質考えたらGoのほうがいい(Numpyとかpandasとかはまた別だけど)
自動テストってどのテストを指してるのか分からないけど、テスト書かないのは後戻りできない負債になるよ
607デフォルトの名無しさん
2020/05/26(火) 13:08:22.92ID:uV+m0fgU608デフォルトの名無しさん
2020/05/26(火) 13:12:24.26ID:uV+m0fgU 事情通に聞いてみたのよ
なんで自動テストしないのか、って
それ始めちゃうと、なんで今までやらなかったのか、そう言われて困るお偉いさんが山ほどいるから、だとさ
なんで自動テストしないのか、って
それ始めちゃうと、なんで今までやらなかったのか、そう言われて困るお偉いさんが山ほどいるから、だとさ
609デフォルトの名無しさん
2020/05/26(火) 13:33:50.23ID:xe35/PQB 自社サービスとSIじゃビジネスモデルが全然違うんだから開発手法も違って当たり前
(俺は必ずしもそうだとは思わないが)仮に自動テストによってSIにおいても大幅な工数削減が可能だとして、それに何の意味がある?売上が減るだけじゃないか
お偉いさんの面子だのと人に鬱憤を押しつける悪い癖を自覚し、自分とその周囲の状況、そして問題の本質を正しく理解しよう
(俺は必ずしもそうだとは思わないが)仮に自動テストによってSIにおいても大幅な工数削減が可能だとして、それに何の意味がある?売上が減るだけじゃないか
お偉いさんの面子だのと人に鬱憤を押しつける悪い癖を自覚し、自分とその周囲の状況、そして問題の本質を正しく理解しよう
610デフォルトの名無しさん
2020/05/26(火) 13:44:25.86ID:uV+m0fgU フーン
611デフォルトの名無しさん
2020/05/26(火) 14:07:06.10ID:e8iGmvo7 NGワード:本質
612デフォルトの名無しさん
2020/05/26(火) 19:07:23.67ID:lsuseEJR Go は名前がダサい
以上
以上
613デフォルトの名無しさん
2020/05/26(火) 19:13:02.05ID:uV+m0fgU 検索で困るもんな
614デフォルトの名無しさん
2020/05/26(火) 19:15:33.38ID:7QcVxoyH C の立場も慮って下さい
615デフォルトの名無しさん
2020/05/26(火) 19:44:28.32ID:uV+m0fgU はじめての C
まぁいやらしい
という定番ネタのあるひとは黙っててください
D 言語は泣いていい
まぁいやらしい
という定番ネタのあるひとは黙っててください
D 言語は泣いていい
616デフォルトの名無しさん
2020/05/27(水) 01:44:41.20ID:lDZQxe+h 構造体の初期化で省略されたフィールドを既定値で初期化する方法を考えてたんだけど、こんなやり方でも構造体を初期化できるんだな(アンチパターンって言われそうだけど)
type Logger struct {
_ struct{}
mutex *sync.Mutex
Prefix string
Writer io.Writer
}
func (l Logger) New() *Logger {
l.mutex = &sync.Mutex{}
if l.Writer == nil {
l.Writer = os.Stdout
}
return &l
}
func main() {
l1 := Logger{}.New()
l2 := Logger{Prefix: "Looger: "}.New()
}
type Logger struct {
_ struct{}
mutex *sync.Mutex
Prefix string
Writer io.Writer
}
func (l Logger) New() *Logger {
l.mutex = &sync.Mutex{}
if l.Writer == nil {
l.Writer = os.Stdout
}
return &l
}
func main() {
l1 := Logger{}.New()
l2 := Logger{Prefix: "Looger: "}.New()
}
617デフォルトの名無しさん
2020/05/31(日) 22:30:09.36ID:MeZ7svrP https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=composite
webフレームワークのベンチマーク比較
1位にC#の新FW「dragon」ってのが入って話題になってた
これechoが入ってないのが気になるんだけど
流石にdjangoとかに負けると思えんし
どうなってんのこれ
webフレームワークのベンチマーク比較
1位にC#の新FW「dragon」ってのが入って話題になってた
これechoが入ってないのが気になるんだけど
流石にdjangoとかに負けると思えんし
どうなってんのこれ
618デフォルトの名無しさん
2020/05/31(日) 22:39:20.95ID:8Mxh+OkW drogonな
しかもC++じゃなね?
ttps://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/C%2B%2B/drogon
しかもC++じゃなね?
ttps://github.com/TechEmpower/FrameworkBenchmarks/tree/master/frameworks/C%2B%2B/drogon
619デフォルトの名無しさん
2020/05/31(日) 23:27:34.17ID:MeZ7svrP はい。諸々すみませんでした(´・ω・`)
echoはなんかあったのかな
使ってるからゴタゴタとかちょっと気になる
iris?だっけ?(うろ覚え)goは前にも消滅したFWあったし
echoはなんかあったのかな
使ってるからゴタゴタとかちょっと気になる
iris?だっけ?(うろ覚え)goは前にも消滅したFWあったし
620デフォルトの名無しさん
2020/06/01(月) 00:44:15.52ID:0lojqVgc aspnetcoreって結構速かったんだな
621デフォルトの名無しさん
2020/06/01(月) 00:58:25.61ID:pVetmaYN ginはいるね
622デフォルトの名無しさん
2020/06/01(月) 01:12:53.36ID:RpkIRyj6 >>620
汎用フレームワークでここまでパフォーマンスいいのはすごいよね
汎用フレームワークでここまでパフォーマンスいいのはすごいよね
623デフォルトの名無しさん
2020/06/01(月) 08:54:16.54ID:glX8U9VC MSはaspnetcoreのベンチマークにTechEmpowerを使ってることを公言してるんで眉唾
オーバーフィッティングの可能性がある
オーバーフィッティングの可能性がある
624デフォルトの名無しさん
2020/06/01(月) 08:59:51.67ID:RpkIRyj6 >>623
ふーん具体的には?
ふーん具体的には?
625デフォルトの名無しさん
2020/06/01(月) 09:09:20.85ID:glX8U9VC 具体的にも何も
MSがTechEmpowerのシナリオをaspnetcoreのベンチマークとして使っているのは事実だし、TechEmpowerに対してAzureのクレジットの提供までしてる
https://github.com/aspnet/Benchmarks
https://www.techempower.com/blog/2016/11/
癒着とかズルとかそういうことじゃなくて、ソフトウェアが特定のベンチマークのシナリオに対して過剰に最適化されるというのはよくある話でしょ
MSがTechEmpowerのシナリオをaspnetcoreのベンチマークとして使っているのは事実だし、TechEmpowerに対してAzureのクレジットの提供までしてる
https://github.com/aspnet/Benchmarks
https://www.techempower.com/blog/2016/11/
癒着とかズルとかそういうことじゃなくて、ソフトウェアが特定のベンチマークのシナリオに対して過剰に最適化されるというのはよくある話でしょ
626デフォルトの名無しさん
2020/06/01(月) 09:33:53.72ID:RpkIRyj6 ケチつけたい人は口だけならなんとでも言えるからね
627デフォルトの名無しさん
2020/06/01(月) 09:36:11.66ID:EwlGxu65 信じる者は救われる
628デフォルトの名無しさん
2020/06/01(月) 09:42:56.72ID:XQZordO8 学習に使ったのと同じ入力で評価してるわけだからまさにオーバーフィッティングだね
論理的に公平になり得ない
まあ他の上位陣も一緒なんだろうけど
論理的に公平になり得ない
まあ他の上位陣も一緒なんだろうけど
629デフォルトの名無しさん
2020/06/01(月) 09:51:09.76ID:uzzQenht お気に入りのフレームワークの順位が低くて悔しい人たち
630デフォルトの名無しさん
2020/06/01(月) 10:47:32.29ID:XZPQztQU >>607 での Cython との比較でも、Go 側が「並列化してない」という批判がコメントに寄せられてるけど訂正されてないんだよな
つまり足を縛って比較して Python 負けてないよ!と主張している記事
つまり足を縛って比較して Python 負けてないよ!と主張している記事
631デフォルトの名無しさん
2020/06/01(月) 10:50:08.36ID:C06u/BLG qiitaのは、あそこのあるあるで理解しないで書いてるだけだ
意図して縛ってるんじゃなくて、わかってないだけ
意図して縛ってるんじゃなくて、わかってないだけ
632デフォルトの名無しさん
2020/06/04(木) 15:37:13.98ID:Sjg+zlaz セットアップとかPythonで書かれてたりすることが多くて、在宅学習でセミナー受講したりしはじめてる
スライスってPythonとかが由来なんだな
でもar[-1]とか、そんなの要るの?という書き方が多いな
覚えるのメンドクサ
スライスってPythonとかが由来なんだな
でもar[-1]とか、そんなの要るの?という書き方が多いな
覚えるのメンドクサ
633デフォルトの名無しさん
2020/06/04(木) 15:40:02.38ID:Sjg+zlaz >>632
正直、Go脳と罵られても仕方ないw
正直、Go脳と罵られても仕方ないw
634デフォルトの名無しさん
2020/06/07(日) 10:34:28.20ID:7hGJT77n なぜかVScodeで保存しようとすると、go listが大暴走して動かないようになってしまった
リファクタリング中でぐちゃぐちゃな状態だから臭いけど
リファクタリング中でぐちゃぐちゃな状態だから臭いけど
635デフォルトの名無しさん
2020/06/11(木) 06:50:08.94ID:W3hFmJjT スクリプト言語としてのGo
https://www.infoq.com/jp/news/2020/06/go-scripting-language/?itm_source=infoq&itm_medium=popular_widget&itm_campaign=popular_content_list&itm_content=
https://www.infoq.com/jp/news/2020/06/go-scripting-language/?itm_source=infoq&itm_medium=popular_widget&itm_campaign=popular_content_list&itm_content=
636デフォルトの名無しさん
2020/06/11(木) 09:58:07.91ID:lkbUBWj2 無駄に長いURLに意味はあるのか?
https://www.infoq.com/jp/news/2020/06/go-scripting-language/
https://www.infoq.com/jp/news/2020/06/go-scripting-language/
637デフォルトの名無しさん
2020/06/11(木) 16:30:03.15ID:puJvD3me TypeScriptがあるから要らんすね
638デフォルトの名無しさん
2020/06/12(金) 16:07:02.79ID:6Yfh5mGy JavaでdirectXやるにはCじゃ無くてGoって聞いて来たんだけどホント?
何から始めたら良い?
何から始めたら良い?
639デフォルトの名無しさん
2020/06/12(金) 16:13:47.97ID:1pXOSbLZ アホか
お前が自分で言っただけだろ
https://mevius.5ch.net/test/read.cgi/tech/1586142285/796
796 デフォルトの名無しさん sage 2020/06/12(金) 15:39:27.21ID:6Yfh5mGy(1)
証拠は俺、天下無双さん
他のスレでJavaでdirectXするにはC覚えろみたいに言われたんだけどGOやったら出来る?
お前が自分で言っただけだろ
https://mevius.5ch.net/test/read.cgi/tech/1586142285/796
796 デフォルトの名無しさん sage 2020/06/12(金) 15:39:27.21ID:6Yfh5mGy(1)
証拠は俺、天下無双さん
他のスレでJavaでdirectXするにはC覚えろみたいに言われたんだけどGOやったら出来る?
640デフォルトの名無しさん
2020/06/12(金) 16:20:15.28ID:6Yfh5mGy >>639
ほかスレで案内されたから
【C++】 DirectX初心者質問スレ Part41 【C】
http://itest.5ch.net/mevius/test/read.cgi/tech/1521786252/505
0505 デフォルトの名無しさん 2020/06/12 15:46:34
続きはGoスレ
ほかスレで案内されたから
【C++】 DirectX初心者質問スレ Part41 【C】
http://itest.5ch.net/mevius/test/read.cgi/tech/1521786252/505
0505 デフォルトの名無しさん 2020/06/12 15:46:34
続きはGoスレ
641デフォルトの名無しさん
2020/06/13(土) 00:50:26.26ID:4pgJdF6v その最後の行は
「続きはGoスレへGo!」にするべきだった
「続きはGoスレへGo!」にするべきだった
642デフォルトの名無しさん
2020/06/17(水) 22:30:52.85ID:86TiijZ7 Go言語のChannelはチャネル、チャンネルのどっちの読み方が正しいの?
チャネルは多いけど最新のGo言語の本ではチャンネルと書いてある
チャネルは多いけど最新のGo言語の本ではチャンネルと書いてある
643デフォルトの名無しさん
2020/06/17(水) 22:52:58.26ID:8/53+M2F 英語の音を無理やりカタカナ語で表現してるだけだから
どっちがっていうと難しくない?
一応発音的にはチャンネルよりチャネルの方が近いと思うけど
日本語的にはチャンネルという読み方の方がなじんでるし
どっちがっていうと難しくない?
一応発音的にはチャンネルよりチャネルの方が近いと思うけど
日本語的にはチャンネルという読み方の方がなじんでるし
644デフォルトの名無しさん
2020/06/18(木) 08:21:30.61ID:RT744x39 正解は「チャノォー」です
645デフォルトの名無しさん
2020/06/18(木) 09:30:03.51ID:VEwWQ4Xk 正解は「チャネ」です
俺にはそう聞こえるから間違いないです
俺にはそう聞こえるから間違いないです
646デフォルトの名無しさん
2020/06/18(木) 09:43:31.78ID:jBRL/Eep チャノ
647デフォルトの名無しさん
2020/06/18(木) 09:59:21.97ID:8/3vTp6f チャゥノゥ
648デフォルトの名無しさん
2020/06/18(木) 10:53:06.36ID:fvUfFECc649デフォルトの名無しさん
2020/06/19(金) 07:17:53.69ID:oFfAVAYE cmd フォルダなのに main パッケージにしなければならないのはなんとかしてくれ
go build cmd/main.go だと動かない exe が出来るし
go run cmd/main.go だと cannot run non-main package
なんで main パッケージなんてあるんだ?
main() 関数あったらどのパッケージだろうと実行させりゃいいじゃん?
go build cmd/main.go だと動かない exe が出来るし
go run cmd/main.go だと cannot run non-main package
なんで main パッケージなんてあるんだ?
main() 関数あったらどのパッケージだろうと実行させりゃいいじゃん?
650デフォルトの名無しさん
2020/06/19(金) 08:23:18.84ID:oFfAVAYE Javaやらと同じでパッケージの仕様が練られてないんだよな
C#みたいにフォルダ?関係ないね、namespace で書けよ
だと嬉しい
C#みたいにフォルダ?関係ないね、namespace で書けよ
だと嬉しい
651デフォルトの名無しさん
2020/06/19(金) 09:59:49.78ID:cY3u7e4Z cmdフォルダのpackage cmdを他からインポートすれば良いのでは?
652デフォルトの名無しさん
2020/06/19(金) 10:18:48.69ID:oFfAVAYE そりゃmainフォルダにすれば解決なんだけどさ
パッケージがディレクトリのパスでアクセスするimport機構なのに、mainパッケージだけ例外というのがモニョる
パッケージがディレクトリのパスでアクセスするimport機構なのに、mainパッケージだけ例外というのがモニョる
653デフォルトの名無しさん
2020/06/19(金) 10:24:08.64ID:oFfAVAYE 単に、mainパッケージだけ例外、というのが残念だという愚痴に過ぎないよ
回避以前に、例外なんだと納得すれば問題はないもんな
回避以前に、例外なんだと納得すれば問題はないもんな
654デフォルトの名無しさん
2020/06/19(金) 17:37:14.13ID:Kn9/9Nuz pythonでいう__name__ == ‘__main__’を外出しした感覚だと思う
変にCを引きずってるからおかしなことになった
ぶっちゃけかなりわかりにくいと思う
変にCを引きずってるからおかしなことになった
ぶっちゃけかなりわかりにくいと思う
655デフォルトの名無しさん
2020/06/21(日) 11:24:25.44ID:vfiIwLIM https://play.golang.org/p/Ido4pfGMpHn
の
if s=="a" {
return a()
} else {
return b()
}
の else 文で
if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
と go-lint が吐き出すんだけど、どう書けばいい?
の
if s=="a" {
return a()
} else {
return b()
}
の else 文で
if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)
と go-lint が吐き出すんだけど、どう書けばいい?
656デフォルトの名無しさん
2020/06/21(日) 11:26:37.35ID:vfiIwLIM 正直、こないだからgolintは腐ってない?
657デフォルトの名無しさん
2020/06/21(日) 11:49:23.56ID:athxwRrE if s=="a" {
return a()
}
return b()
return a()
}
return b()
658デフォルトの名無しさん
2020/06/21(日) 12:04:53.11ID:vfiIwLIM おおう、ありがとう
659デフォルトの名無しさん
2020/06/21(日) 13:18:25.60ID:tbjMp+cP それってgofmtで自動で直してくれるんじゃないの
660デフォルトの名無しさん
2020/06/21(日) 13:41:52.84ID:vfiIwLIM セーブ時のフォーマットでは直してくれてない
gofmt呼んでるのかわからない
しかし、if ブロックで return してたなら、確かに else は不要
コーディングスタイルまで口出しするとは、他の書き方許さん理念は極まってるもんだな
gofmt呼んでるのかわからない
しかし、if ブロックで return してたなら、確かに else は不要
コーディングスタイルまで口出しするとは、他の書き方許さん理念は極まってるもんだな
661デフォルトの名無しさん
2020/06/21(日) 14:04:24.81ID:TjPGVxwO Goのバージョン30ぐらいにはコードを書かなくても全部自動生成してくれるようになるよ
662デフォルトの名無しさん
2020/06/21(日) 20:37:22.98ID:HI56XBlv たのしみ
663デフォルトの名無しさん
2020/06/21(日) 22:24:56.84ID:85zGBKLZ Goがブレインハッキングすると聞いて
664デフォルトの名無しさん
2020/06/21(日) 22:35:42.11ID:f5OiD0I/ go+いいやん
https://github.com/qiniu/goplus
https://github.com/qiniu/goplus
665デフォルトの名無しさん
2020/06/21(日) 22:40:20.19ID:x1/M2+NK オーケーGo
クリーンアーキテクチャで掲示板作って
これでモダンな技術の5chが作れる時代が来ます
クリーンアーキテクチャで掲示板作って
これでモダンな技術の5chが作れる時代が来ます
666デフォルトの名無しさん
2020/06/22(月) 11:38:02.76ID:Cm+rhTCh そういや、range キーワードって省略されても構文解析できそうな気がするんだけど、なんか問題あるのかな?
667デフォルトの名無しさん
2020/06/22(月) 11:40:50.79ID:Cm+rhTCh 代入として見ると、一貫性が無くなるからかな?
668デフォルトの名無しさん
2020/06/23(火) 00:55:56.74ID:JUPHg4sS そうだね、一貫性が無くなるよね。バッドプラクティス度合いで言うと最悪ウンコをLv10としてLv10だな
669デフォルトの名無しさん
2020/06/24(水) 21:07:48.82ID:++yRJMmE Scalaかな?
670デフォルトの名無しさん
2020/07/05(日) 17:58:02.65ID:3hRtzTvh すんごい基礎的な疑問
go get した外部パッケージって、呼び出されないソースもコンパイルされてリンクされる?
go get した外部パッケージって、呼び出されないソースもコンパイルされてリンクされる?
671デフォルトの名無しさん
2020/07/05(日) 18:02:06.09ID:gmGxEZ+k いいえ
672デフォルトの名無しさん
2020/07/05(日) 18:06:42.96ID:3hRtzTvh >>670
詳しく書くと、例えば
import "github.com/hoge/pkg/util"
したら、util に涛ってる全ての滑ヨ数が、呼び出bオしなくてもリャ塔Nされたりすb驕H
(更にはmainパッケージとか別のパッケージも)
詳しく書くと、例えば
import "github.com/hoge/pkg/util"
したら、util に涛ってる全ての滑ヨ数が、呼び出bオしなくてもリャ塔Nされたりすb驕H
(更にはmainパッケージとか別のパッケージも)
673デフォルトの名無しさん
2020/07/05(日) 18:07:40.70ID:3hRtzTvh674デフォルトの名無しさん
2020/07/05(日) 20:01:56.65ID:0gld4/HX デカいプロジェクトの時のパッケージ構成ってどうしてる?dddはなんかやり過ぎ感あるし
675デフォルトの名無しさん
2020/07/08(水) 22:34:33.70ID:tDYsCvpq 気付いてなかったけど、VScodeでgo.modのrequireにカーソル合わせたら、パッケージを最新バージョンにアップデートするかが出てきた
676デフォルトの名無しさん
2020/07/12(日) 08:52:10.08ID:abSV8fb7 先週、golang.jp が復活した
677デフォルトの名無しさん
2020/07/18(土) 10:23:07.73ID:9EMumvg2 >>655
if e, err := hoge(); err!=nil {
return e.method()
} else {
return err
}
と書きたいのに、外に出せとか
外に出すと今度はerrが定義されてないとか言うから、errをブロック外でvar定義しなきゃならん
頭悪いよなgolint
if e, err := hoge(); err!=nil {
return e.method()
} else {
return err
}
と書きたいのに、外に出せとか
外に出すと今度はerrが定義されてないとか言うから、errをブロック外でvar定義しなきゃならん
頭悪いよなgolint
678デフォルトの名無しさん
2020/07/18(土) 11:21:37.51ID:/ePLcmBm えーと
679デフォルトの名無しさん
2020/07/18(土) 11:25:06.59ID:6UJBCs7F >>677
話は変わるけど err!=nil は err==nil なんじゃねーの
話は変わるけど err!=nil は err==nil なんじゃねーの
680デフォルトの名無しさん
2020/07/18(土) 11:55:59.23ID:9EMumvg2 >>679
おおっと!
おおっと!
681デフォルトの名無しさん
2020/07/18(土) 12:18:15.74ID:sbSUEl2y e,err :=hoge()
if err !=nil{
return err
}
return e.method()
の方が自然じゃね
if err !=nil{
return err
}
return e.method()
の方が自然じゃね
682デフォルトの名無しさん
2020/07/18(土) 12:23:34.88ID:sbSUEl2y return _,err
return e.method,nil
とかになるかもしれんが
return e.method,nil
とかになるかもしれんが
683デフォルトの名無しさん
2020/08/02(日) 13:07:30.10ID:scrCUlqp Go, Kotlin Swiftの文法対応表を作って欲しいぜ
684デフォルトの名無しさん
2020/08/12(水) 09:26:40.73ID:PUqooE+h Go 1.15 is released
https://blog.golang.org/go1.15
https://blog.golang.org/go1.15
685デフォルトの名無しさん
2020/08/13(木) 18:01:27.94ID:2DHzeARd >>684
英語だから何書いてあるかわからないよ〜(;O;)
英語だから何書いてあるかわからないよ〜(;O;)
686デフォルトの名無しさん
2020/08/13(木) 19:06:58.68ID:xsanodvm687デフォルトの名無しさん
2020/08/13(木) 19:50:58.84ID:uooXk5Tm 今なら Deepl がオススメ
688デフォルトの名無しさん
2020/08/25(火) 10:24:08.87ID:D0K2qmbJ すんでで気がついて事なきを得たけど
参考にしたサンプルからコピーしたコードだったんで
context.Background() を、そのまま使ってた
マルチスレッドではWithCancelなどで別々に作ってやらなきゃなんないよな
参考にしたサンプルからコピーしたコードだったんで
context.Background() を、そのまま使ってた
マルチスレッドではWithCancelなどで別々に作ってやらなきゃなんないよな
689デフォルトの名無しさん
2020/08/25(火) 14:37:27.29ID:QsZwrXdx 英語読めないって人って高卒?
受験で勉強すると思うのだが
受験で勉強すると思うのだが
690デフォルトの名無しさん
2020/08/25(火) 23:26:52.17ID:Y7jc20E9 >>689
Golang Cafe — The Best Place To Find Your Next Golang Job
https://golang.cafe/about
https://twitter.com/golangcafe
https://www.youtube.com/channel/UCq4YrlwwXwF74Z3g-VDae2w/videos
「!gocafe remote」をDuckDuckGoで検索
https://twitter.com/5chan_nel (5ch newer account)
Golang Cafe — The Best Place To Find Your Next Golang Job
https://golang.cafe/about
https://twitter.com/golangcafe
https://www.youtube.com/channel/UCq4YrlwwXwF74Z3g-VDae2w/videos
「!gocafe remote」をDuckDuckGoで検索
https://twitter.com/5chan_nel (5ch newer account)
691デフォルトの名無しさん
2020/08/31(月) 11:00:12.17ID:4ktuLIOK ホストがMacなんだけど、dockerでgolang/Fyneを試してみたいんだけど無理かな?
なんかXエラーみたいな感じなの
なんかXエラーみたいな感じなの
692デフォルトの名無しさん
2020/08/31(月) 13:01:38.43ID:rMwNX/5+ iOSはBSDベースなんだから余程アップルが魔改造してなきゃBSDと同様な程度にはサポートされてるだろ?
BSDでリリースされてるかどうか知らないんだが
BSDでリリースされてるかどうか知らないんだが
693デフォルトの名無しさん
2020/09/04(金) 13:17:23.06ID:y4RkOJ/U まずgolangに関係のない話
chrome だけかもしれないけど XMLHttpRequest だと単純リクエストなのに CORS に引っ掛かってしまう
で、ここから本題
echo 使ってるんだけど、ハンドラ別に allow なオリジンを切り替えたいんだけど、やり方が分からなかった
orz
chrome だけかもしれないけど XMLHttpRequest だと単純リクエストなのに CORS に引っ掛かってしまう
で、ここから本題
echo 使ってるんだけど、ハンドラ別に allow なオリジンを切り替えたいんだけど、やり方が分からなかった
orz
694デフォルトの名無しさん
2020/09/06(日) 14:36:03.50ID:l3n8psbq a := make([]int, 0)
makeの第一引数って何を渡してるの?
普通のプリミティブじゃないよね
makeの第一引数って何を渡してるの?
普通のプリミティブじゃないよね
695デフォルトの名無しさん
2020/09/06(日) 15:27:49.33ID:FQOSALvE 長さだよ。2番目は容量な
696デフォルトの名無しさん
2020/09/06(日) 15:50:34.25ID:iNxLllkp []intが第一引数で、0が第二引数じゃろ?
697デフォルトの名無しさん
2020/09/06(日) 19:34:19.64ID:uoPkQvi9 言語仕様にスライス、マップ、チャネルの型って書いてあるじゃん
698デフォルトの名無しさん
2020/09/06(日) 19:37:12.75ID:gKeBUEkF その辺は最近のモダンな言語からしたらすげー泥臭い仕様だよな
699デフォルトの名無しさん
2020/09/06(日) 20:33:01.20ID:gGwX7R3F なんか全体的にそんなところがあるよな。べつに機能的に問題があるというわけじゃないんだが。
700デフォルトの名無しさん
2020/09/06(日) 21:12:04.30ID:l3n8psbq "[]int"だとstringだけど、ダブルクォーテーションなしだと何を渡してるんだろうと思って
701デフォルトの名無しさん
2020/09/06(日) 21:17:56.45ID:uoPkQvi9 確かにもやっとしないでもないね
t := []string
とかで型の変数を作れる訳でもないのにポッと出てくる型指定
t := []string
とかで型の変数を作れる訳でもないのにポッと出てくる型指定
702デフォルトの名無しさん
2020/09/06(日) 21:28:38.24ID:6MGWJWDR 引数に見えて引数ではない構文の一部
703デフォルトの名無しさん
2020/09/06(日) 21:49:44.73ID:uoPkQvi9 makeは組み込み関数にカウントされてるから、むしろ型を変数として生成できないという縛りなんだな
滅多にmake関数使わないな
チャネルの容量を設定する時くらい
固定長配列なんて作らないし
滅多にmake関数使わないな
チャネルの容量を設定する時くらい
固定長配列なんて作らないし
704デフォルトの名無しさん
2020/09/06(日) 21:53:27.07ID:uoPkQvi9 構文見てて思った
new関数なんてあったのか
使ったことある?
new関数なんてあったのか
使ったことある?
705デフォルトの名無しさん
2020/09/07(月) 00:08:24.76ID:tKSaDgWF makeが関数でrangeが式なの違和感あるんだよな
逆であるべきなのではと思ってしまう
逆であるべきなのではと思ってしまう
706デフォルトの名無しさん
2020/09/07(月) 00:52:09.45ID:ocp9ke30 その辺は一貫性より実用性を重視した結果だろう
707デフォルトの名無しさん
2020/09/10(木) 17:49:37.70ID:iYKQgeEI go: finding dmitri.shuralyov.com/gpu/mtl latest
go: downloading dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
go: extracting dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
build dmitri.shuralyov.com/gpu/mtl: cannot load dmitri.shuralyov.com/gpu/mtl: no Go source files
● 根本原因
dmitri.shuralyov.com が落ちてるんで GCP のビルドが通らない
● 状況
go.sum 見てみるとfirebaseが要求してるパッケージ
したがって firebase を使って GCP でサービスを提供しているすべてに影響するはず
こまるわー
go: downloading dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
go: extracting dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
build dmitri.shuralyov.com/gpu/mtl: cannot load dmitri.shuralyov.com/gpu/mtl: no Go source files
● 根本原因
dmitri.shuralyov.com が落ちてるんで GCP のビルドが通らない
● 状況
go.sum 見てみるとfirebaseが要求してるパッケージ
したがって firebase を使って GCP でサービスを提供しているすべてに影響するはず
こまるわー
708デフォルトの名無しさん
2020/09/10(木) 17:52:24.85ID:iYKQgeEI 既存のパッケージがGOPATHにはあるはずなんだけど、どうしたらいい?
709デフォルトの名無しさん
2020/09/10(木) 18:01:50.68ID:iYKQgeEI firebaseにはissue上げたけど
710デフォルトの名無しさん
2020/09/10(木) 18:56:30.40ID:iYKQgeEI なんとなくGCPのビルドシステムの問題にも思えてきた
だってGOPATH(~/gopath/pkg)には一式存在してるもん
なんでダウンロード(というか最新版チェックしに行ってる?)できないからってビルドを失敗にすんのよ
だってGOPATH(~/gopath/pkg)には一式存在してるもん
なんでダウンロード(というか最新版チェックしに行ってる?)できないからってビルドを失敗にすんのよ
711デフォルトの名無しさん
2020/09/10(木) 19:25:21.92ID:iYKQgeEI いや困ったね…
インポートを辿ったら
https://github.com/googleapis/google-cloud-go
が原因っぽい
個人ホストに依存しちゃうライブラリって、ビジネス的に極めて不味くないか?
インポートを辿ったら
https://github.com/googleapis/google-cloud-go
が原因っぽい
個人ホストに依存しちゃうライブラリって、ビジネス的に極めて不味くないか?
712デフォルトの名無しさん
2020/09/10(木) 19:46:17.35ID:QWaq+avL 個人ホスト?
713デフォルトの名無しさん
2020/09/10(木) 20:19:53.75ID:iYKQgeEI714デフォルトの名無しさん
2020/09/11(金) 00:38:28.29ID:u7dYfbNO よかった復活した
そしてやはり個人持ちのホストの模様
ホストでしっくりこないならサーバー
Google Domainsでドメイン管理してるからGoogleCloud上にあるのかも
そしてやはり個人持ちのホストの模様
ホストでしっくりこないならサーバー
Google Domainsでドメイン管理してるからGoogleCloud上にあるのかも
715デフォルトの名無しさん
2020/09/11(金) 20:06:33.99ID:fDVUo6av しかし個人のホストからimportするリスクやばいな
Goチームの人だから許されてるのか?
Goチームの人だから許されてるのか?
716デフォルトの名無しさん
2020/09/11(金) 20:12:33.09ID:ICNKkV5S GitHubかGoogleSourceRepositoryにホストすればいいのにな
717デフォルトの名無しさん
2020/09/11(金) 20:20:51.53ID:ICNKkV5S う、Google Source Repositoryって、もしかして
source.developers.google.com/p/プロジェクト/r/リポジトリ/...
ってパッケージ名になるのか?長
source.developers.google.com/p/プロジェクト/r/リポジトリ/...
ってパッケージ名になるのか?長
718デフォルトの名無しさん
2020/09/29(火) 08:17:01.67ID:1HGJd50O 引数を値渡しするか、ポインタ渡しするか
それが問題だ
sliceは値渡しでも良いよね
要素を追加しようとすると結局新しいsliceが必要
ポインタのポインタとかやりたくないし
stringは普通は変化させる時は新しい物を作るから、値渡しで充分
空を表現するには空文字列で良いし
構造体はどうすべきか
全部ポインタ渡し?
それが問題だ
sliceは値渡しでも良いよね
要素を追加しようとすると結局新しいsliceが必要
ポインタのポインタとかやりたくないし
stringは普通は変化させる時は新しい物を作るから、値渡しで充分
空を表現するには空文字列で良いし
構造体はどうすべきか
全部ポインタ渡し?
719デフォルトの名無しさん
2020/09/29(火) 08:42:58.32ID:ztORdlGy >>718
基本的にポインタで渡すべきと思ってる
値を使うには細心の注意が必要になるから
速度的に有利とかいう話はあるけど
スライスなんかは内部にポインタ入ってるし、文字列だってポインタだから、メンバとしてそれらを持ってる構造体を値渡しするのもナンセンスじゃね?
それらのメンバにアクセスしたとたんにページフォルト起こる可能性があるから、速度面での優位は怪しくなるという意味でナンセンスだろうという
値渡しはスタックに積むだろう(それ以外に方法があるのか知らない)から、スタックを圧迫するはずという理屈も加味
基本的にポインタで渡すべきと思ってる
値を使うには細心の注意が必要になるから
速度的に有利とかいう話はあるけど
スライスなんかは内部にポインタ入ってるし、文字列だってポインタだから、メンバとしてそれらを持ってる構造体を値渡しするのもナンセンスじゃね?
それらのメンバにアクセスしたとたんにページフォルト起こる可能性があるから、速度面での優位は怪しくなるという意味でナンセンスだろうという
値渡しはスタックに積むだろう(それ以外に方法があるのか知らない)から、スタックを圧迫するはずという理屈も加味
720デフォルトの名無しさん
2020/09/29(火) 09:38:24.05ID:rZRnYPTQ >>719
いや、サイズが大きいのは基本的に可変長であるスライス、string、mapなのだから、それらだけは内部的にポインタを持って実質的に常にポインタ渡しとなるようにしておけば、常に値渡しでもパフォーマンス的にほぼ問題にならんだろうというのがGoの設計意図だよ
個人的には、同一の実体として振る舞うようなOOのインスタンスに近い性質の構造体はポインタ渡し、単なる値の寄せ集めは値渡しとして使い分ける
いや、サイズが大きいのは基本的に可変長であるスライス、string、mapなのだから、それらだけは内部的にポインタを持って実質的に常にポインタ渡しとなるようにしておけば、常に値渡しでもパフォーマンス的にほぼ問題にならんだろうというのがGoの設計意図だよ
個人的には、同一の実体として振る舞うようなOOのインスタンスに近い性質の構造体はポインタ渡し、単なる値の寄せ集めは値渡しとして使い分ける
721デフォルトの名無しさん
2020/09/29(火) 15:53:59.37ID:ztORdlGy >>720
ググってみたら、goではスタック足りなくなると拡張すんのか……すげーな
ググってみたら、goではスタック足りなくなると拡張すんのか……すげーな
722デフォルトの名無しさん
2020/09/29(火) 16:39:20.25ID:aaxcyAZi 論理アドレス空間ははじめから確保してるんじゃないの?
だったら他の言語と変わらない気が
だったら他の言語と変わらない気が
723デフォルトの名無しさん
2020/09/29(火) 17:34:34.66ID:ztORdlGy 例えばjavaではStackOverflowErrorになるし、cだと検出すらされない(今は知らない
goでは関数呼び出し時にオーバーフローをチェックして拡張するらしく、初期値は4KBだとか
ほんまかいな?
goでは関数呼び出し時にオーバーフローをチェックして拡張するらしく、初期値は4KBだとか
ほんまかいな?
724デフォルトの名無しさん
2020/09/29(火) 17:41:44.13ID:ztORdlGy 考えてみれば何万とgoroutine作ってもびくともしないようにするには、それくらいやらなきゃダメだろうから納得すべきか
725デフォルトの名無しさん
2020/09/29(火) 20:23:20.93ID:ztORdlGy726デフォルトの名無しさん
2020/09/29(火) 23:23:58.36ID:UIxEJt2R727デフォルトの名無しさん
2020/09/30(水) 05:11:09.54ID:/dbaz1tV Elixir は、10万の小プロセスが、並列で動く
結局、Rust, Elixir は、普及のキャズムを越えられなかったから、
Go の1強になってしまったけど
結局、Rust, Elixir は、普及のキャズムを越えられなかったから、
Go の1強になってしまったけど
728デフォルトの名無しさん
2020/09/30(水) 05:27:53.12ID:s3VbgSNe かえすがえすも、名前がイケてないのが悔やまれる
もっとマシなネーミングをできなかったのか
もっとマシなネーミングをできなかったのか
729デフォルトの名無しさん
2020/09/30(水) 12:14:35.40ID:/4YRR7IY では、Gopher言語でよろしいか
730デフォルトの名無しさん
2020/09/30(水) 12:40:46.26ID:NNWpaWfq ごふぁっ、ゲホッがはっ、ゴホゴホッ
731デフォルトの名無しさん
2020/09/30(水) 18:10:46.15ID:ktFuXCYv 正直goって流行っている感じじゃないんだよなぁ
めんどくさいし
めんどくさいし
732デフォルトの名無しさん
2020/09/30(水) 19:21:27.15ID:baSuoz7K むしろGoよりめんどくさくない言語の方が少ないだろ
733デフォルトの名無しさん
2020/09/30(水) 20:05:41.54ID:HXdd4xfV ゴリゴリ書かなきゃいけないという点で面倒くさいけどゴリゴリ書いてしまえるという点で面倒くさくない
734デフォルトの名無しさん
2020/09/30(水) 20:17:57.84ID:pc2vUBN1 Pythonとかの思い付くまま適当に書いたらシンタックスシュガーでなんとなく動く、それを簡単だと言ってるんだと思う
735デフォルトの名無しさん
2020/09/30(水) 20:32:41.83ID:pc2vUBN1 PHPとかの方面の人から見ると、面倒で使えないと思うんだろう
node.jsやらと比べて数倍の性能を叩き出すWebAPIをちょちょいと書けてしまうから手放せない
Webアプリなんて、WebAPIとJavaScriptとHTMLがあればすむ話だからPHPとかやる奴こそ面倒なことやってんなーと思う
node.jsやらと比べて数倍の性能を叩き出すWebAPIをちょちょいと書けてしまうから手放せない
Webアプリなんて、WebAPIとJavaScriptとHTMLがあればすむ話だからPHPとかやる奴こそ面倒なことやってんなーと思う
736デフォルトの名無しさん
2020/09/30(水) 21:03:01.73ID:zBrjSaD6 >>735
ひと昔前はそれが普通だったからねえ
railsもphpもサーバーがHTMLを組み立てるという思想ありきで生まれたから仕方ない
今その役目は消えたからほぼ全てのフレームワークがオーバースペックになってしまった
ひと昔前はそれが普通だったからねえ
railsもphpもサーバーがHTMLを組み立てるという思想ありきで生まれたから仕方ない
今その役目は消えたからほぼ全てのフレームワークがオーバースペックになってしまった
737デフォルトの名無しさん
2020/10/07(水) 08:43:42.09ID:9tAnRZjq Pythonでマップのインデックスで {(a,b): c} とやってるのを見て、ちょっと羨ましく感じた
Goだとタプルは型じゃないもんな
Goだとタプルは型じゃないもんな
738デフォルトの名無しさん
2020/10/09(金) 10:30:34.93ID:fFeZzUQc エディタは何使ってる?
739デフォルトの名無しさん
2020/10/09(金) 10:40:12.61ID:cZJOIaI8 VSCode
VSCodeのGoの拡張機能は結構クソだが、Goばかり書くわけじゃないのでGoに最適なエディタはどれかとか興味ない
VSCodeのGoの拡張機能は結構クソだが、Goばかり書くわけじゃないのでGoに最適なエディタはどれかとか興味ない
740デフォルトの名無しさん
2020/10/09(金) 10:45:34.46ID:fFeZzUQc >>739 ありがとう。使ってみる。
741デフォルトの名無しさん
2020/10/09(金) 11:57:27.87ID:CFMMOtfU742デフォルトの名無しさん
2020/10/09(金) 12:01:58.43ID:CFMMOtfU743デフォルトの名無しさん
2020/10/09(金) 12:20:13.85ID:fFeZzUQc VSCODE良いね。
Goプログラマーの仲間入りしました。
Goプログラマーの仲間入りしました。
744デフォルトの名無しさん
2020/10/13(火) 13:52:15.74ID:oLYkpKK8745デフォルトの名無しさん
2020/10/13(火) 16:42:37.40ID:UHobSDno Goは補完が大事だから他の環境はマジで貧弱すぎる
vim拡張とかこれでコード書いてる人いるのか?と感じた
vim拡張とかこれでコード書いてる人いるのか?と感じた
746デフォルトの名無しさん
2020/10/13(火) 23:14:35.57ID:vh7uCC06 俺は補完は好きじゃなくて逆に鬱陶しく感じてしまう。
タイピングのリズムというか、今xxxという操作/入力しようとしたのに余計なことすんな と思うことしばしば。
タイピングのリズムというか、今xxxという操作/入力しようとしたのに余計なことすんな と思うことしばしば。
747デフォルトの名無しさん
2020/10/14(水) 07:23:06.90ID:kUBYMwHY わかりみ
748デフォルトの名無しさん
2020/10/14(水) 10:18:40.21ID:GsUUoEHv 「(」打つと勝手に「)」も入るやつとか
おせっかいに「()」の真ん中にカーソル移動するやつとか
自分でタイプすると hoge()) みたいになってうざい
おせっかいに「()」の真ん中にカーソル移動するやつとか
自分でタイプすると hoge()) みたいになってうざい
749デフォルトの名無しさん
2020/10/14(水) 10:40:49.08ID:W+IeOFJe 設定変えろよ無能
750デフォルトの名無しさん
2020/10/14(水) 22:53:52.84ID:Eee7omWn 変えてるに決まってるだろ
751デフォルトの名無しさん
2020/10/14(水) 22:57:57.74ID:RfMuLTxu go.modに勝手にgo1.13みたいなものが入ります
やめてほしいですが誰に言えばいいですか?
やめてほしいですが誰に言えばいいですか?
752デフォルトの名無しさん
2020/10/15(木) 00:02:00.61ID:jde/MWAn >>751
ロブパイク
ロブパイク
753デフォルトの名無しさん
2020/10/15(木) 13:01:09.76ID:AQ4Pln/N 自分で指定すると思ったけど
もしかすると、参照するパッケージに引きずられる可能性があるのか?
パッケージがリンクするランタイムの中で最新になっちゃうとしたらどうしようもないかな
もしかすると、参照するパッケージに引きずられる可能性があるのか?
パッケージがリンクするランタイムの中で最新になっちゃうとしたらどうしようもないかな
754デフォルトの名無しさん
2020/10/15(木) 17:14:56.53ID:AQ4Pln/N ツールアップデートしたら#41870にバッチリ引っ掛かってしまった
755デフォルトの名無しさん
2020/10/28(水) 09:08:16.05ID:pr+rUhRZ 俺はコンパイラが無様すぎると思うんだけど、どう思う?
https://play.golang.org/p/XRFmBiqhqJp
インタフェースAを返すメソッドを持つインタフェースB。
そのメソッド実装がインタフェースAを実装しているポインタを返しても、
./prog.go:34:4: cannot use &Base literal (type *Base) as type IBase in assignment:
*Base does not implement IBase (wrong type for Sub method)
have Sub() *Sub
want Sub() ISub
と、インタフェースAを返しているとは認められない。
https://play.golang.org/p/XRFmBiqhqJp
インタフェースAを返すメソッドを持つインタフェースB。
そのメソッド実装がインタフェースAを実装しているポインタを返しても、
./prog.go:34:4: cannot use &Base literal (type *Base) as type IBase in assignment:
*Base does not implement IBase (wrong type for Sub method)
have Sub() *Sub
want Sub() ISub
と、インタフェースAを返しているとは認められない。
756デフォルトの名無しさん
2020/10/28(水) 10:08:54.99ID:yBdqeWro 天才のお前が新しい言語でも作ってくれよ
757デフォルトの名無しさん
2020/10/28(水) 11:33:48.41ID:Mf8tEr2f C / C++ のプリプロセッサのマクロって
#define A(X, ...) X A(__VA_ARGS__)
みたいな再帰的な処理出来ないけど
この問題昔から指摘されてるのに
40年経っても1000年経っても解決されないよね
解決しようと思えば出来るのに C++ の拡張とかばっかりやってる
#define A(X, ...) X A(__VA_ARGS__)
みたいな再帰的な処理出来ないけど
この問題昔から指摘されてるのに
40年経っても1000年経っても解決されないよね
解決しようと思えば出来るのに C++ の拡張とかばっかりやってる
758デフォルトの名無しさん
2020/10/28(水) 11:46:44.44ID:HlOHZvAz >>757 そしてあなたも解決しようと思わないのでしょう?
759デフォルトの名無しさん
2020/10/28(水) 11:52:07.24ID:9TmkPH0P760デフォルトの名無しさん
2020/10/28(水) 12:47:58.74ID:Mf8tEr2f >>758
解決しようとした人は *by や python や D を造ってしまいましたね
既存の C/C++ そのものに手を入れるのは中の人以外には無駄な努力に感じます
再帰マクロ専用の ぷりぷりプロセッサを書くのは手かも知れません
あと #include __FILE__ でループしてる人はいるようです
https://qiita.com/alucky0707/items/3599cdcf973382df978b
解決しようとした人は *by や python や D を造ってしまいましたね
既存の C/C++ そのものに手を入れるのは中の人以外には無駄な努力に感じます
再帰マクロ専用の ぷりぷりプロセッサを書くのは手かも知れません
あと #include __FILE__ でループしてる人はいるようです
https://qiita.com/alucky0707/items/3599cdcf973382df978b
761デフォルトの名無しさん
2020/10/28(水) 12:50:42.86ID:sJQyfcEU スレ違いも甚だしい
762デフォルトの名無しさん
2020/10/29(木) 21:05:36.10ID:K8k/YFeK >>760
スレ違いだが通りすがりに言っておくと、
マクロにそこまでの機能を求めるのなら、
自前でスクリプト言語(AWK/Perl/Python/Ruby)等でソースの事前処理をmakefileに書いた方がいい。
それだと無限に機能拡張出来る。
だからC++というかmakefileシステムでそれをやる意味はない。
よってまともな奴は誰もマクロの拡張なんかしようとは思わない。
「言語」にそれを持たせる意味がないから。
(言語による垂直統合ではなく、makefileによる水平分業で全く問題ないし、融通も利く)
ただしGoはそれを標準機能で付けてる。
これがどう役に立っているのかは知らん。
(Go generate、AST木が参照出来るので上記のマクロ拡張とは次元が違うが)
スレ違いだが通りすがりに言っておくと、
マクロにそこまでの機能を求めるのなら、
自前でスクリプト言語(AWK/Perl/Python/Ruby)等でソースの事前処理をmakefileに書いた方がいい。
それだと無限に機能拡張出来る。
だからC++というかmakefileシステムでそれをやる意味はない。
よってまともな奴は誰もマクロの拡張なんかしようとは思わない。
「言語」にそれを持たせる意味がないから。
(言語による垂直統合ではなく、makefileによる水平分業で全く問題ないし、融通も利く)
ただしGoはそれを標準機能で付けてる。
これがどう役に立っているのかは知らん。
(Go generate、AST木が参照出来るので上記のマクロ拡張とは次元が違うが)
763デフォルトの名無しさん
2020/10/30(金) 00:29:21.26ID:Nsw5dj/j makefieて
764デフォルトの名無しさん
2020/10/30(金) 09:21:51.84ID:rRvEIPSO 知らないだけかも知れないけど、generate が build と分けられてるのが使いづらく感じる
go.mod に generate のパラメーター書いておくと build で実行するとかじゃダメなのかな
go.mod に generate のパラメーター書いておくと build で実行するとかじゃダメなのかな
765デフォルトの名無しさん
2020/10/30(金) 10:57:17.98ID:7MkyV1Cp Qt良いよね
766デフォルトの名無しさん
2020/10/30(金) 11:07:56.86ID:SoGDmizs そもそもプリプロセッサーが何をやっているか考えたら再帰なんかできない事ぐらい分かるやろ
もう相当前のものだしなぁ
逆にC#とかだとCで出来たような事が出来ないから不便だと思った事があるわ
もう相当前のものだしなぁ
逆にC#とかだとCで出来たような事が出来ないから不便だと思った事があるわ
767デフォルトの名無しさん
2020/10/30(金) 22:12:31.86ID:k5fqQBZK いまどきポインタとかwww
768デフォルトの名無しさん
2020/10/31(土) 11:21:06.88ID:9I3xwucX 今時も何もgolangではポインタはバリ現役
というか、golang使ったことないんだな哀れ
というか、golang使ったことないんだな哀れ
769デフォルトの名無しさん
2020/10/31(土) 15:42:09.93ID:rQ5gc14Z ポインタが散々叩かれて色んな言語で無くしたけど
最近のモダンな言語では復活してきてるのは面白い
最近のモダンな言語では復活してきてるのは面白い
770デフォルトの名無しさん
2020/10/31(土) 16:08:49.76ID:73vG42Ru ぽ、ポインタじゃねえし!リファレンスだし!
771デフォルトの名無しさん
2020/10/31(土) 16:39:03.74ID:o6XGTKTG つーか名前をへんてこにして誤魔化すとかじゃなく
リアルにポインタの概念(何かのオブジェクトを指す変数)を消し去ろうとしたら
あらゆるものをコピーでもっといてしかもそれらを常に同期して同じ値になるように
常に維持する仕組みにするしかないがそんな非効率きわまりない言語が実用に値するはずがない
リアルにポインタの概念(何かのオブジェクトを指す変数)を消し去ろうとしたら
あらゆるものをコピーでもっといてしかもそれらを常に同期して同じ値になるように
常に維持する仕組みにするしかないがそんな非効率きわまりない言語が実用に値するはずがない
772デフォルトの名無しさん
2020/10/31(土) 16:55:27.17ID:fxcwqRC2 lisp とかってコピーしてないの?
773デフォルトの名無しさん
2020/10/31(土) 17:00:05.47ID:rQ5gc14Z ポインタがない言語ではオブジェクトは参照コピー
プリミティブはコピーというのが最近のスクリプト言語の常識
ただ細かい違いは言語ごとに違ってハマりどころになってる
プリミティブはコピーというのが最近のスクリプト言語の常識
ただ細かい違いは言語ごとに違ってハマりどころになってる
774デフォルトの名無しさん
2020/10/31(土) 17:32:11.09ID:Zi1/vk95775デフォルトの名無しさん
2020/10/31(土) 17:59:24.46ID:pRffs5ZU776デフォルトの名無しさん
2020/10/31(土) 20:21:41.59ID:yaU57lgN >>775
Haskellはモナドの裏に隠してる
正確にはランタイムと言った方が近いかもしれないが
ていうかHaskellのイミュータブルな配列でもUArray(UnboxedのU)が提供されてるしポインタ・参照・Boxedからは逃れられんよ
Haskellはモナドの裏に隠してる
正確にはランタイムと言った方が近いかもしれないが
ていうかHaskellのイミュータブルな配列でもUArray(UnboxedのU)が提供されてるしポインタ・参照・Boxedからは逃れられんよ
777デフォルトの名無しさん
2020/10/31(土) 21:01:42.97ID:NOhP3tKc >>771
>>773
× 最近のスクリプト言語
○ ポインタを使えないほぼ全部の言語
だよ。C#もJavaも同じだ。
ただ実際のところ、これで大して問題にも遭遇しない。
そもそもCですら . なんてゴリゴリ速度チューニング時以外は使わず、 -> と []ばかりだ。
そしてC++で参照(&)が導入され、今君が認識しているいわゆる「オブジェクト参照」は全部これになった。
だから俺はあんまりポインタは必要なくて、 -> を . として結果的に -> しか使えないようにした、
最近のほぼ全ての(というかC/C++以外全部、多分Goも含めて)言語の方が正しいと思ってるけど。
Goも制限付きポインタで、C++の&相当でしかなかった気がしたけど、違ったっけ?
なお、ポインタという「概念」を消し去るのは無理だよ。
これを何故か理解出来ない馬鹿が多いのか、Python使いは無駄に吠えてくるけど、
プログラミングを本気でやるつもりなら、その根幹の実装を理解することは避けて通れない。
>>775
erlangは全部インミュータブルで、ループ(for文)すらなく、全部再帰らしいよ。
>>773
× 最近のスクリプト言語
○ ポインタを使えないほぼ全部の言語
だよ。C#もJavaも同じだ。
ただ実際のところ、これで大して問題にも遭遇しない。
そもそもCですら . なんてゴリゴリ速度チューニング時以外は使わず、 -> と []ばかりだ。
そしてC++で参照(&)が導入され、今君が認識しているいわゆる「オブジェクト参照」は全部これになった。
だから俺はあんまりポインタは必要なくて、 -> を . として結果的に -> しか使えないようにした、
最近のほぼ全ての(というかC/C++以外全部、多分Goも含めて)言語の方が正しいと思ってるけど。
Goも制限付きポインタで、C++の&相当でしかなかった気がしたけど、違ったっけ?
なお、ポインタという「概念」を消し去るのは無理だよ。
これを何故か理解出来ない馬鹿が多いのか、Python使いは無駄に吠えてくるけど、
プログラミングを本気でやるつもりなら、その根幹の実装を理解することは避けて通れない。
>>775
erlangは全部インミュータブルで、ループ(for文)すらなく、全部再帰らしいよ。
778デフォルトの名無しさん
2020/10/31(土) 22:40:56.17ID:KVw9iANV c#はunsafeでめちゃくちゃできるけどね
やろうと思わんが
やろうと思わんが
779デフォルトの名無しさん
2020/10/31(土) 23:29:32.75ID:NOhP3tKc >>778
うん知ってる。
ついでに言うとstructが値渡しで、Cで言う . による高速化もつまみ食い出来るようになっている。
ただしこちらも主な使い方ではなく、実際に効果が出る小オブジェクト(確か16バイト以下)で限定使用することが推奨されてる。
その辺はC#は実用言語だから地味に整備してある。
unsafeもその一環でしかない。
だが結局のところ、その辺の小異に目をつぶればC/C++/C#/Java/Python/JavaScript等の現在の主力言語はどれもほぼ同じで、
C/C++だと直接ポインタを扱える、位の違いしかない。
それはつまらないとして、敢えて独自路線を行ったのがGoだが、ポインタ周りは大して独自でもなかった気がした。
Goじゃないと出来ない/他言語でやると凄く苦労する、てのはないよね?
(というかポインタ自体Cの時点で完成してて、その後は精々間違いを自動検出する方向にしか進化出来てない)
多分Goの売りはgoroutineとgenerateなのだと思う。
ただ俺にはgoroutineがそんなに便利とは思えなかったし、そもそもあれコルーチンではなく単なるスレッドだから名前間違えてるだろ、だ。
generateについてはCマクロをゴリゴリしたい奴には非常に有用なのだろうけど、そもそもそんな奴は多数派ではないし、俺もそうじゃない。
ただしAST木が標準で出せるというのはかなりインパクトはある。
とはいえ、AST木では低レベル過ぎて困るので、本当はもっと上のレベルが欲しいのが大半なんじゃないかと思う。
ちなみに最近の言語でも評価が固まってないのは例外周りで、これは各言語によってまるっきり違う。
Goはドベタにerrを値で返す、仕様としてはCモドキだが、現実的には一つの選択肢だとは思う。
格好良くはないが。
うん知ってる。
ついでに言うとstructが値渡しで、Cで言う . による高速化もつまみ食い出来るようになっている。
ただしこちらも主な使い方ではなく、実際に効果が出る小オブジェクト(確か16バイト以下)で限定使用することが推奨されてる。
その辺はC#は実用言語だから地味に整備してある。
unsafeもその一環でしかない。
だが結局のところ、その辺の小異に目をつぶればC/C++/C#/Java/Python/JavaScript等の現在の主力言語はどれもほぼ同じで、
C/C++だと直接ポインタを扱える、位の違いしかない。
それはつまらないとして、敢えて独自路線を行ったのがGoだが、ポインタ周りは大して独自でもなかった気がした。
Goじゃないと出来ない/他言語でやると凄く苦労する、てのはないよね?
(というかポインタ自体Cの時点で完成してて、その後は精々間違いを自動検出する方向にしか進化出来てない)
多分Goの売りはgoroutineとgenerateなのだと思う。
ただ俺にはgoroutineがそんなに便利とは思えなかったし、そもそもあれコルーチンではなく単なるスレッドだから名前間違えてるだろ、だ。
generateについてはCマクロをゴリゴリしたい奴には非常に有用なのだろうけど、そもそもそんな奴は多数派ではないし、俺もそうじゃない。
ただしAST木が標準で出せるというのはかなりインパクトはある。
とはいえ、AST木では低レベル過ぎて困るので、本当はもっと上のレベルが欲しいのが大半なんじゃないかと思う。
ちなみに最近の言語でも評価が固まってないのは例外周りで、これは各言語によってまるっきり違う。
Goはドベタにerrを値で返す、仕様としてはCモドキだが、現実的には一つの選択肢だとは思う。
格好良くはないが。
780デフォルトの名無しさん
2020/11/01(日) 07:15:14.81ID:BkYHp1gf >>779
いや、goroutineはスレッドとは隔絶してるんよ
そしてこの間まで理解してなかったけど
goのスタックフレームつまり自動変数も他の言語とは隔絶
それはgo独自の優位性で、goroutineは初期スタックサイズは今では2kBしかない
そのため、数百万のgoroutineを作成できる
これは巨大なコンテキストを必要とするスレッドでは太刀打ちできない性能なん
いや、goroutineはスレッドとは隔絶してるんよ
そしてこの間まで理解してなかったけど
goのスタックフレームつまり自動変数も他の言語とは隔絶
それはgo独自の優位性で、goroutineは初期スタックサイズは今では2kBしかない
そのため、数百万のgoroutineを作成できる
これは巨大なコンテキストを必要とするスレッドでは太刀打ちできない性能なん
781デフォルトの名無しさん
2020/11/01(日) 08:14:15.41ID:0aiHjqpe >>780
> goのスタックフレームつまり自動変数も他の言語とは隔絶
どこが?サイズだけならCは調整出来たと思ったけど
> そのため、数百万のgoroutineを作成できる
それは既に結論は出てる。
以下ブログ、俺が読んだ時とはだいぶ趣が異なるが、(当時は確か初期サイズ4KBだったはず)
https://github.com/maxpert/raspchat/releases/tag/v1.0.0-alpha
要は2KBでも十分大きすぎて、Nodeの方が断然まし、ってことになってる。
これは当たり前で、Linuxのkernel領域でのスタックサイズが128Bだったか256Bかに制限されているらしいから、
その気になればLinuxは256B/threadでスレッドを起動出来る。
そしてNodeはシングルスレッドだからスタック領域が余すところなく全部消費される。
これはGoではどうやっても出来ないことだ。
というよりJSのシングルスレッドアーキテクチャは最初からこのc10k問題解決を主眼にしてる。
だからその領域ではそれ用に作られたJSに勝てるはずもなく、実際そうだった、というだけ。
goroutineのサイズをケチってどうこう、って作戦は究極にはJSのシングルスレッドアーキテクチャに行き着く。
だからその方向ではNodeには勝てないのは仕様だよ。
そうじゃなくて、言語サポートがあるからスレッドがお気楽に使え、それがgoroutineです!って方が順当で、
実際そのブログの作者も喜んで使ってみたが、思ってたと違う、、、というのがそのブログだよ。
> そのため、数百万のgoroutineを作成できる
数百万のthreadなんて実際あり得ないし、管理も出来ない。
そこをgoroutineならお気楽に生成/消滅出来るので、これまで「面倒/管理が難しい」等でthread起動しなかったところを、
「これは別スレッドでも動く」というだけの理由でお気楽にすべてgoroutineで切り離して行けば一見超並列出来そうに見える。
ただ、実際それをやったらそこで遭遇している問題、つまりgoroutineは思っているほど軽くない、に遭遇してしまう。
現実的にはthreadなんて論理CPU数の2倍程度あればCPU処理だけなら埋まってしまうからそれ以上起動しても意味がない。
I/Oで引っかかった時のスタックサイズをケチりたいのなら、
JSのように非同期でシングルスレッドにする方が原理的に上だし、実際そうだった、というのがそのブログだ。
> goのスタックフレームつまり自動変数も他の言語とは隔絶
どこが?サイズだけならCは調整出来たと思ったけど
> そのため、数百万のgoroutineを作成できる
それは既に結論は出てる。
以下ブログ、俺が読んだ時とはだいぶ趣が異なるが、(当時は確か初期サイズ4KBだったはず)
https://github.com/maxpert/raspchat/releases/tag/v1.0.0-alpha
要は2KBでも十分大きすぎて、Nodeの方が断然まし、ってことになってる。
これは当たり前で、Linuxのkernel領域でのスタックサイズが128Bだったか256Bかに制限されているらしいから、
その気になればLinuxは256B/threadでスレッドを起動出来る。
そしてNodeはシングルスレッドだからスタック領域が余すところなく全部消費される。
これはGoではどうやっても出来ないことだ。
というよりJSのシングルスレッドアーキテクチャは最初からこのc10k問題解決を主眼にしてる。
だからその領域ではそれ用に作られたJSに勝てるはずもなく、実際そうだった、というだけ。
goroutineのサイズをケチってどうこう、って作戦は究極にはJSのシングルスレッドアーキテクチャに行き着く。
だからその方向ではNodeには勝てないのは仕様だよ。
そうじゃなくて、言語サポートがあるからスレッドがお気楽に使え、それがgoroutineです!って方が順当で、
実際そのブログの作者も喜んで使ってみたが、思ってたと違う、、、というのがそのブログだよ。
> そのため、数百万のgoroutineを作成できる
数百万のthreadなんて実際あり得ないし、管理も出来ない。
そこをgoroutineならお気楽に生成/消滅出来るので、これまで「面倒/管理が難しい」等でthread起動しなかったところを、
「これは別スレッドでも動く」というだけの理由でお気楽にすべてgoroutineで切り離して行けば一見超並列出来そうに見える。
ただ、実際それをやったらそこで遭遇している問題、つまりgoroutineは思っているほど軽くない、に遭遇してしまう。
現実的にはthreadなんて論理CPU数の2倍程度あればCPU処理だけなら埋まってしまうからそれ以上起動しても意味がない。
I/Oで引っかかった時のスタックサイズをケチりたいのなら、
JSのように非同期でシングルスレッドにする方が原理的に上だし、実際そうだった、というのがそのブログだ。
782デフォルトの名無しさん
2020/11/01(日) 09:44:48.65ID:Gkt9gY6r 軽さ速さは環境によって変わる
少コア環境ではM:Nスレッドモデルのgoroutineは有効に機能しない場合がある
少なくともGo開発側はM:Nスレッドモデルに合わせるにはasync/awaitモデルよりスレッド/チャネルモデルの方がいいと判断した
位の話でしょ
goroutineのモチベーションは非同期処理についてG社が持つようなメニーコアかつ分散な環境でスケールするかって話をしないと伝わらないよ
少コア環境ではM:Nスレッドモデルのgoroutineは有効に機能しない場合がある
少なくともGo開発側はM:Nスレッドモデルに合わせるにはasync/awaitモデルよりスレッド/チャネルモデルの方がいいと判断した
位の話でしょ
goroutineのモチベーションは非同期処理についてG社が持つようなメニーコアかつ分散な環境でスケールするかって話をしないと伝わらないよ
783デフォルトの名無しさん
2020/11/01(日) 09:56:36.00ID:MfA1nG9+ あんまGo知らない、まで読んだ。
784デフォルトの名無しさん
2020/11/01(日) 10:42:25.33ID:0aiHjqpe >>782
逆に言えばそれ以外の環境では他言語に劣るわけだろ。
元々は多分、命名からして、コルーチンをgoroutineで、ということなのだと思う。
コルーチンは通常は本体側と交代で間欠的に動作する前提で書かれているから、スレッドで切り離すことはしない。
ただ、もしそれが本体と並行に動作可能なら、スレッドとして切り離せば、
本体側が動いている間に次のyieldまで動作させられ、コルーチン部分の処理時間を見た目ゼロに出来る。
実際、大半のコルーチンはこれが可能なはずで、これまでは単に面倒/スレッド生成消滅のコストの為にそこまでやらなかっただけ。
だから、スレッドよりもっとお手軽で軽いgoroutineを用意すれば、という訳だ。
OSでの並行はprocessだが、multi processは重すぎるのでアプリ内processとしてthreadが出来た。
それと同様に、thread内の並行として、goroutineという、もう一段軽い物を用意した。
だからここまでのストーリーは辻褄が合っているとして、それがどこに適用出来るかだよ。
CPUが精々数個しかないそこら辺のPCだと、threadだけで埋めきれるので、普通にそれが最適解になる。
threadだけでは埋めきれないほどのCPUがあり、積極的に並行goroutineとして切り出してくれないといけない、
という、いわゆるメニーコアならGoの方が有利になる可能性があるけど、実際この場合はキャッシュコヒーレンシの問題が発生してくる。
勿論チャネルだし、後はオブジェクトの中身も含めてインミュータブル、
つまりErlangの世界まで行けたらこの辺の問題も無くなるけど、Goはそういう感じじゃないでしょ。
そもそもメニーコアの筆頭のXeonPiも死に体だし。(これはGoのせいではないけど)
逆に言えばそれ以外の環境では他言語に劣るわけだろ。
元々は多分、命名からして、コルーチンをgoroutineで、ということなのだと思う。
コルーチンは通常は本体側と交代で間欠的に動作する前提で書かれているから、スレッドで切り離すことはしない。
ただ、もしそれが本体と並行に動作可能なら、スレッドとして切り離せば、
本体側が動いている間に次のyieldまで動作させられ、コルーチン部分の処理時間を見た目ゼロに出来る。
実際、大半のコルーチンはこれが可能なはずで、これまでは単に面倒/スレッド生成消滅のコストの為にそこまでやらなかっただけ。
だから、スレッドよりもっとお手軽で軽いgoroutineを用意すれば、という訳だ。
OSでの並行はprocessだが、multi processは重すぎるのでアプリ内processとしてthreadが出来た。
それと同様に、thread内の並行として、goroutineという、もう一段軽い物を用意した。
だからここまでのストーリーは辻褄が合っているとして、それがどこに適用出来るかだよ。
CPUが精々数個しかないそこら辺のPCだと、threadだけで埋めきれるので、普通にそれが最適解になる。
threadだけでは埋めきれないほどのCPUがあり、積極的に並行goroutineとして切り出してくれないといけない、
という、いわゆるメニーコアならGoの方が有利になる可能性があるけど、実際この場合はキャッシュコヒーレンシの問題が発生してくる。
勿論チャネルだし、後はオブジェクトの中身も含めてインミュータブル、
つまりErlangの世界まで行けたらこの辺の問題も無くなるけど、Goはそういう感じじゃないでしょ。
そもそもメニーコアの筆頭のXeonPiも死に体だし。(これはGoのせいではないけど)
785デフォルトの名無しさん
2020/11/01(日) 10:42:50.15ID:0aiHjqpe だから、>>782の観点だけなら、
Goは素晴らしい実験用言語だったけど、現実的ではなかったね、で終わると思うよ。
実際、Goって使用者は増えてるのか?
Rustは前年度「Rust新規に始めた人数よりCを新規に始めた人数の方が多くなっちまったよオイオイ」とか話題になっていたが。
JSはプログラマに、I/Oを明示的に切り離して高速化することを求め、(実際あの非同期は壮絶にウザイが)現実的にはものすごく機能してる。
Goはプログラマに、並行可能な部分を積極的に切り離すことにより超並行によって高速化を目指している、と捕らえることは出来るが、
実際これは全く上手く行ってないし、今後とも上手く行く気配もないでしょ。
一時期、CUDAよりもXeonPiだ、という時期もあったはずだけど、なんか話題はCUDAに戻ってるしさ。
Goは素晴らしい実験用言語だったけど、現実的ではなかったね、で終わると思うよ。
実際、Goって使用者は増えてるのか?
Rustは前年度「Rust新規に始めた人数よりCを新規に始めた人数の方が多くなっちまったよオイオイ」とか話題になっていたが。
JSはプログラマに、I/Oを明示的に切り離して高速化することを求め、(実際あの非同期は壮絶にウザイが)現実的にはものすごく機能してる。
Goはプログラマに、並行可能な部分を積極的に切り離すことにより超並行によって高速化を目指している、と捕らえることは出来るが、
実際これは全く上手く行ってないし、今後とも上手く行く気配もないでしょ。
一時期、CUDAよりもXeonPiだ、という時期もあったはずだけど、なんか話題はCUDAに戻ってるしさ。
786デフォルトの名無しさん
2020/11/01(日) 11:09:39.44ID:MfA1nG9+ ホントにあんまり知らんのだろ。
恥かく前にやめとけ。
恥かく前にやめとけ。
787デフォルトの名無しさん
2020/11/01(日) 11:10:33.72ID:LntMOfOE シリコンバレーって所でPythonから移行が進んでるそうです
788デフォルトの名無しさん
2020/11/01(日) 11:11:59.03ID:MfA1nG9+ yieldが必要なコルーチンとは全く関係なく、昔で言うグリーンスレッドを超低コストで実現してるという方が正しい。
エアプしてる時間があったらスケジューラの動きとか調べてみたらいいよ。
エアプしてる時間があったらスケジューラの動きとか調べてみたらいいよ。
789デフォルトの名無しさん
2020/11/01(日) 11:12:40.44ID:MfA1nG9+ スレッドプールとかが効いてくるネイティブスレッドではなくて、あくまでグリーンスレッドだからな。
790デフォルトの名無しさん
2020/11/01(日) 11:13:16.44ID:Gkt9gY6r791デフォルトの名無しさん
2020/11/01(日) 11:35:22.25ID:MfA1nG9+ メインスレッドすらグリーンスレッドで、数本立ってるネイティブスレッド上でタスクを持ち回りで実行してるから、await asyncは自動的にされてると思って良いぐらい。
792デフォルトの名無しさん
2020/11/01(日) 11:45:38.74ID:b3NlQgn4793デフォルトの名無しさん
2020/11/01(日) 11:52:11.44ID:0aiHjqpe >>788
> グリーンスレッド
この言葉は初めて聞いたが、確かにJavaやRubyでは普通に使われてる言葉らしい。意味は確認した。
なるほど、スレッドだと論理CPUを跨げるので、その部分がOS管轄になるから重いのか。
goroutineがグリーンスレッドなら、マルチコアだと全く性能が出ないな。
まあそれはいいとして。
なら、そもそもネーミングが悪いよ。
gogreenthreadとか、まんまの名前の方が良かったよ。
(ただしGoは意図的に他言語に合わせてない部分があるからここもかもしれんが)
確かにthreadではないのは理解した。
>>790
> Xeon PhiなどではなくXeonやEPYCのようなパッケージのコア数の向上とそれを積んだ大規模分散環境の話だ
いやそれは同じだぞ。少なくともプログラミングモデルは変わらないだろ。
実は俺は785投稿した後に、「あ、もしかしてNiagara等(有名なのは京)のCPU内メニースレッドの話か?」と思ってしまったが、
そうじゃないのならそっちも間違ってるぞ。
上記の通り、それだとgoroutineでの性能向上は不可能だ。
そしてグリーンスレッドだというのなら、CPU内メニースレッドには非常にマッチする。
実際Niagaraとか64スレッドだが、正直64スレッドなんて普通のthreadでは埋めきれないし、
それ向けにプログラマが積極的に切り出せ、というのは技術的にはかなり納得する。
だからグリーンスレッドの多用での性能向上を目指した、というのが合ってるんだと思うよ。
その後の話はその通り。
確かに俺にとって有用ではないから俺は使わない、で終わりだ。
やってる連中はそれが役に立つと思ってるからやってるだけ、というのは確かにそりゃそうだ。
> グリーンスレッド
この言葉は初めて聞いたが、確かにJavaやRubyでは普通に使われてる言葉らしい。意味は確認した。
なるほど、スレッドだと論理CPUを跨げるので、その部分がOS管轄になるから重いのか。
goroutineがグリーンスレッドなら、マルチコアだと全く性能が出ないな。
まあそれはいいとして。
なら、そもそもネーミングが悪いよ。
gogreenthreadとか、まんまの名前の方が良かったよ。
(ただしGoは意図的に他言語に合わせてない部分があるからここもかもしれんが)
確かにthreadではないのは理解した。
>>790
> Xeon PhiなどではなくXeonやEPYCのようなパッケージのコア数の向上とそれを積んだ大規模分散環境の話だ
いやそれは同じだぞ。少なくともプログラミングモデルは変わらないだろ。
実は俺は785投稿した後に、「あ、もしかしてNiagara等(有名なのは京)のCPU内メニースレッドの話か?」と思ってしまったが、
そうじゃないのならそっちも間違ってるぞ。
上記の通り、それだとgoroutineでの性能向上は不可能だ。
そしてグリーンスレッドだというのなら、CPU内メニースレッドには非常にマッチする。
実際Niagaraとか64スレッドだが、正直64スレッドなんて普通のthreadでは埋めきれないし、
それ向けにプログラマが積極的に切り出せ、というのは技術的にはかなり納得する。
だからグリーンスレッドの多用での性能向上を目指した、というのが合ってるんだと思うよ。
その後の話はその通り。
確かに俺にとって有用ではないから俺は使わない、で終わりだ。
やってる連中はそれが役に立つと思ってるからやってるだけ、というのは確かにそりゃそうだ。
794デフォルトの名無しさん
2020/11/01(日) 12:02:49.50ID:fO/k/B8X > > グリーンスレッド
> この言葉は初めて聞いたが、
ええっ!?
> この言葉は初めて聞いたが、
ええっ!?
795デフォルトの名無しさん
2020/11/01(日) 12:21:49.13ID:0aiHjqpe >>791
まあとにかくgreenthreadだというのは理解した。
(仕様を確認したわけではなく、そちらの主張通りの方が色々辻褄が合うからそうなのだと思う)
> await asyncは自動的にされてると思って良いぐらい。
それはgreenthreadの話ではなく、他の普通のマルチスレッド言語は全部そうだよ。
実際、PHPが使いやすいのはこれだし。
むしろJSだけが異端。ただし、俺はあれはそうする意味があったと思っている。
>>792
> コルーチンを指向していたならchannelなんて使わんだろう。
これは間違い。
コルーチンならyieldだけであり、channelでも全く問題なく機能する。
そしてchannelにするのは、(君はおそらく完全なソフトウェアプログラマだから理解出来ないのだろうが)
一般的には共有メモリを使わせず、一番速い同期機構にする為。通常はそれがchannelだとされている。
ただし共有メモリが遅くなるのはキャッシュコヒーレンシがらみであり、
greenthreadなら共有メモリ同期でも全く遅くもならない筈だから、本来は禁止にする必要もないし、チャネル縛りにする必要もない。
(実際Goだと禁止も縛りもされてなかった気はするので、言語的には辻褄は合ってるが)
ただし間欠動作ではない為、mutex等の同期化機構は必要で、それも嫌だというのならチャネルになる。
> どっちかというと軽量プロセスの方向性。
これは俺はそう言ってる。
まあとにかくgreenthreadだというのは理解した。
(仕様を確認したわけではなく、そちらの主張通りの方が色々辻褄が合うからそうなのだと思う)
> await asyncは自動的にされてると思って良いぐらい。
それはgreenthreadの話ではなく、他の普通のマルチスレッド言語は全部そうだよ。
実際、PHPが使いやすいのはこれだし。
むしろJSだけが異端。ただし、俺はあれはそうする意味があったと思っている。
>>792
> コルーチンを指向していたならchannelなんて使わんだろう。
これは間違い。
コルーチンならyieldだけであり、channelでも全く問題なく機能する。
そしてchannelにするのは、(君はおそらく完全なソフトウェアプログラマだから理解出来ないのだろうが)
一般的には共有メモリを使わせず、一番速い同期機構にする為。通常はそれがchannelだとされている。
ただし共有メモリが遅くなるのはキャッシュコヒーレンシがらみであり、
greenthreadなら共有メモリ同期でも全く遅くもならない筈だから、本来は禁止にする必要もないし、チャネル縛りにする必要もない。
(実際Goだと禁止も縛りもされてなかった気はするので、言語的には辻褄は合ってるが)
ただし間欠動作ではない為、mutex等の同期化機構は必要で、それも嫌だというのならチャネルになる。
> どっちかというと軽量プロセスの方向性。
これは俺はそう言ってる。
796デフォルトの名無しさん
2020/11/01(日) 13:36:21.44ID:0aiHjqpe >>791
ちなみにgreenスレッドスイッチは何で起動してるか分かるか?
なおgreenthreadについてはありがとう。これだと色々辻褄が合う。
781のブログも、「そもそもgoroutineってそんなに使いたいか?」という疑問があったのだが、
greenthreadでchannel同期なら、実装は単なるFIFO=リングバッファだから原理的に最速だ。
だから何でもかんでも「goroutineに出来る物はgoroutineにする」という方向性で悪ノリしたくなるのは分かる。
ただ、2KBはオーバースペック過ぎるから、それで頓死するのも分かる。
さてスレッドスイッチ、理想的にはキャッシュミスでgreenthreadスイッチが行われればいいのだが、
現状のx86ではこれは出来ないよな?
そもそも例外はOSに行ってしまうし、キャッシュミス時はそのCPUスレッドはそこでストールしてしまう。
一番近いのはTLBミス例外だが、それもOS行きだ。
ページフォールトしていたらプロセススイッチで終わり、
していなければそのまま処理が返ってきてキャッシュが充足されるまでストールしたまま待たされるはずだが、
そこでCPUが遊んでいる時間を他greenthreadで埋めてしまえ、というのは思想としては分かる。
ランタイム側で「TLBミスからの復帰」だと分かればgreenthreadスイッチ可能だが、
一般的には例外からの復帰はユーザープロセスからは見えないだろうから、おそらくカーネルに手を入れないと無理だ。
それでもやってしまえば面白い。ただ、この場合にgreenthread間でスラッシングした場合は悲惨なことになるが。
というわけで、スレッドスイッチ起動のネタは分かるか?
従来通りタイマなら、面白くもないがまあ、というところ。
greenthreadで最小構成ならスレッドスイッチのコストはPC/SP/Flags復帰分=関数1回呼び出し分でしかないから、スイッチし放題ではある。
だから豆にスイッチしまくりというのも面白いが、それでもキャッシュミスでのストールは避けられない。
そこでハードウェアサポートがあってキャッシュミス時にgreethreadスイッチが出来れば圧倒的に面白くなるが、
現状のx86だと出来ないよな?
ちなみにgreenスレッドスイッチは何で起動してるか分かるか?
なおgreenthreadについてはありがとう。これだと色々辻褄が合う。
781のブログも、「そもそもgoroutineってそんなに使いたいか?」という疑問があったのだが、
greenthreadでchannel同期なら、実装は単なるFIFO=リングバッファだから原理的に最速だ。
だから何でもかんでも「goroutineに出来る物はgoroutineにする」という方向性で悪ノリしたくなるのは分かる。
ただ、2KBはオーバースペック過ぎるから、それで頓死するのも分かる。
さてスレッドスイッチ、理想的にはキャッシュミスでgreenthreadスイッチが行われればいいのだが、
現状のx86ではこれは出来ないよな?
そもそも例外はOSに行ってしまうし、キャッシュミス時はそのCPUスレッドはそこでストールしてしまう。
一番近いのはTLBミス例外だが、それもOS行きだ。
ページフォールトしていたらプロセススイッチで終わり、
していなければそのまま処理が返ってきてキャッシュが充足されるまでストールしたまま待たされるはずだが、
そこでCPUが遊んでいる時間を他greenthreadで埋めてしまえ、というのは思想としては分かる。
ランタイム側で「TLBミスからの復帰」だと分かればgreenthreadスイッチ可能だが、
一般的には例外からの復帰はユーザープロセスからは見えないだろうから、おそらくカーネルに手を入れないと無理だ。
それでもやってしまえば面白い。ただ、この場合にgreenthread間でスラッシングした場合は悲惨なことになるが。
というわけで、スレッドスイッチ起動のネタは分かるか?
従来通りタイマなら、面白くもないがまあ、というところ。
greenthreadで最小構成ならスレッドスイッチのコストはPC/SP/Flags復帰分=関数1回呼び出し分でしかないから、スイッチし放題ではある。
だから豆にスイッチしまくりというのも面白いが、それでもキャッシュミスでのストールは避けられない。
そこでハードウェアサポートがあってキャッシュミス時にgreethreadスイッチが出来れば圧倒的に面白くなるが、
現状のx86だと出来ないよな?
797デフォルトの名無しさん
2020/11/01(日) 13:38:20.89ID:BkYHp1gf798デフォルトの名無しさん
2020/11/01(日) 13:40:27.88ID:BkYHp1gf >>781
あと10K問題とか勉強してからにしたほうが恥かかないよ
あと10K問題とか勉強してからにしたほうが恥かかないよ
799デフォルトの名無しさん
2020/11/01(日) 13:43:22.40ID:b3NlQgn4 >> どっちかというと軽量プロセスの方向性。
>これは俺はそう言ってる。
なんか言っていることがむちゃくちゃ。コルーチンの話はどこ行った?
そもそもchannelはコルーチンじゃ無理だろうて。
>これは俺はそう言ってる。
なんか言っていることがむちゃくちゃ。コルーチンの話はどこ行った?
そもそもchannelはコルーチンじゃ無理だろうて。
800デフォルトの名無しさん
2020/11/01(日) 13:47:11.06ID:0aiHjqpe >>797
それはわりとどうでもいいな。
だったらgoroutineの初期値も0であるべきだよ。
スレッド同期に2KBなんて普通は必要ないし。
とは781のブログからなら思うが、要はそんなケチ環境は相手してないって事か。
まあそれもありだな。
それはわりとどうでもいいな。
だったらgoroutineの初期値も0であるべきだよ。
スレッド同期に2KBなんて普通は必要ないし。
とは781のブログからなら思うが、要はそんなケチ環境は相手してないって事か。
まあそれもありだな。
801デフォルトの名無しさん
2020/11/01(日) 13:58:10.45ID:g1rTVVje802デフォルトの名無しさん
2020/11/01(日) 13:58:56.68ID:MfA1nG9+803デフォルトの名無しさん
2020/11/01(日) 14:00:05.35ID:MfA1nG9+ >>795
phpはマルチスレッドと言うよりもマルチプロセスだろ。
他のマルチスレッド言語は言語によって全然違うよ。
pythonなんかは最近aioが整備されたじゃん。
select使うかどうかじゃね?
phpはマルチスレッドと言うよりもマルチプロセスだろ。
他のマルチスレッド言語は言語によって全然違うよ。
pythonなんかは最近aioが整備されたじゃん。
select使うかどうかじゃね?
804デフォルトの名無しさん
2020/11/01(日) 14:01:05.29ID:MfA1nG9+ >>796
コンテキストのスイッチとスケジューラはなかなかなるほど賢いなって思うぐらいのアルゴリズムになってるから、俺が説明するより本家読んできたほうが為になるぞ。
コンテキストのスイッチとスケジューラはなかなかなるほど賢いなって思うぐらいのアルゴリズムになってるから、俺が説明するより本家読んできたほうが為になるぞ。
805デフォルトの名無しさん
2020/11/01(日) 14:06:47.13ID:MfA1nG9+ なんで性能向上が不可能なんだろ。
goroutineがたくさん起動する状態だと、同じような処理がタスクの切れ目でスイッチされることになって、キャッシュのヒット率も低くないし、ブランチ予測もそれなりにあてになる状況だろ。
GILかかる言語でもあるまいし。
goroutineがたくさん起動する状態だと、同じような処理がタスクの切れ目でスイッチされることになって、キャッシュのヒット率も低くないし、ブランチ予測もそれなりにあてになる状況だろ。
GILかかる言語でもあるまいし。
806デフォルトの名無しさん
2020/11/01(日) 14:10:11.35ID:MfA1nG9+ 切り替えについてはこの辺が良いんじゃないか?
https://morsmachine.dk/go-scheduler
https://niconegoto.hatenadiary.jp/entry/2017/04/11/092810
https://morsmachine.dk/go-scheduler
https://niconegoto.hatenadiary.jp/entry/2017/04/11/092810
807デフォルトの名無しさん
2020/11/01(日) 16:52:55.99ID:0aiHjqpe >>806
確認した。(日本語版だけ。英語版は後で読んで少なくとも感想は返す)
スライド若干間違ってる、というかこいつ自身同期分かってねえ感じだが、ソフト屋ならこんなもんだろう。
ただいずれにしろ結論として、「共有メモリは遅いから使うな」で良いし、実際それ以上の理解は現実的に必要ない。
>>805
話がずれているのは俺がgreenthreadの定義を狭く捉えすぎていたからだな。
その記事で言う N : 1 だと思っていた。
これまでの俺のgreenthreadについての書き込みは全てこの定義だ。
だから当然他CPUを掴めないので高速化しようがない。
ただしGoが M:N なのは分かった。
しかしこの場合にCPUを跨ぐ為には当然OSのサポートが必要で、
当然そのスライドでもメッセージをkernelに投げてる。
問題はM:Nだと大して美味しくもないことだよ。
いや、Go界では当然凄く美味しいことになってるんだろうけど、N:1だと使える爆速最小実装がまるで使えない。
なら次段階は通常は「常に同一コアに割り当てるスレッド」をグルーピングしてその間だけでもこれを利用しよう、となるところだが、これもやってない。
勿論こんな事をやると思想に反するからだろうけど。
ただまあ、思想として、スケジューラ周りをランタイムに丸投げして「どんなスケールでも最大効率」を目指してるのは分かった。
とはいっても、メッセージをkernelに投げざるを得ない構造になってるから、改善余地があるとすればスケジューラ程度でしかない。
そして、俺は別段OSのスケジューラが間抜けとも思えないけど。
あれ、CPUが余ってたら振ってくるだけだし、実際演算とかで100%CPU掴む環境ならそれで必要十分だからね。
あるだけよこせならpriorityを上げればいいだけだし。
あと強いて言うならスレッドのスタックサイズが小さく済むことか?
しかしあれ、俺は知らんがthreadがOS管轄ならOS単位でしか指定出来ないものなのか?
それも奇妙だと思うから、普通はシステムコール時に引数与えて指定出来て然るべきであって、
今のLinuxがそうなってなくても当然いつかそうなるものだとも思うけど。
少なくとも.NETはnew Treaadでスレッドの最大サイズを指定出来る。
こいつもランタイムが管理するスレッドかもしれんけどさ。
確認した。(日本語版だけ。英語版は後で読んで少なくとも感想は返す)
スライド若干間違ってる、というかこいつ自身同期分かってねえ感じだが、ソフト屋ならこんなもんだろう。
ただいずれにしろ結論として、「共有メモリは遅いから使うな」で良いし、実際それ以上の理解は現実的に必要ない。
>>805
話がずれているのは俺がgreenthreadの定義を狭く捉えすぎていたからだな。
その記事で言う N : 1 だと思っていた。
これまでの俺のgreenthreadについての書き込みは全てこの定義だ。
だから当然他CPUを掴めないので高速化しようがない。
ただしGoが M:N なのは分かった。
しかしこの場合にCPUを跨ぐ為には当然OSのサポートが必要で、
当然そのスライドでもメッセージをkernelに投げてる。
問題はM:Nだと大して美味しくもないことだよ。
いや、Go界では当然凄く美味しいことになってるんだろうけど、N:1だと使える爆速最小実装がまるで使えない。
なら次段階は通常は「常に同一コアに割り当てるスレッド」をグルーピングしてその間だけでもこれを利用しよう、となるところだが、これもやってない。
勿論こんな事をやると思想に反するからだろうけど。
ただまあ、思想として、スケジューラ周りをランタイムに丸投げして「どんなスケールでも最大効率」を目指してるのは分かった。
とはいっても、メッセージをkernelに投げざるを得ない構造になってるから、改善余地があるとすればスケジューラ程度でしかない。
そして、俺は別段OSのスケジューラが間抜けとも思えないけど。
あれ、CPUが余ってたら振ってくるだけだし、実際演算とかで100%CPU掴む環境ならそれで必要十分だからね。
あるだけよこせならpriorityを上げればいいだけだし。
あと強いて言うならスレッドのスタックサイズが小さく済むことか?
しかしあれ、俺は知らんがthreadがOS管轄ならOS単位でしか指定出来ないものなのか?
それも奇妙だと思うから、普通はシステムコール時に引数与えて指定出来て然るべきであって、
今のLinuxがそうなってなくても当然いつかそうなるものだとも思うけど。
少なくとも.NETはnew Treaadでスレッドの最大サイズを指定出来る。
こいつもランタイムが管理するスレッドかもしれんけどさ。
808デフォルトの名無しさん
2020/11/01(日) 16:54:30.98ID:L/lkYPuH ってなんなのこの流れ
809デフォルトの名無しさん
2020/11/01(日) 17:03:11.92ID:fO/k/B8X 毎度恒例の一人語り祭り
810デフォルトの名無しさん
2020/11/01(日) 17:12:55.06ID:MfA1nG9+ >>807
ソフト屋ソフト屋と言ってるが、何屋なんよ。
解ってないと言うか、お前が何か変な想定してると思うぞ。
M:Nで、かつスケジューラがまともな場合、に関しては相当美味しいと言う事が理解できて、スケジューラのソースはgithubにあるはずだが、読んだ?
stealは無差別にstealする訳じゃないぞ。
1コアあるだけよこせだと、IOバウンドな処理の時に勿体ないでしょ。
小さく済むと言うか、バカほど立てられるんよ。
.Netの話はネイティブスレッド。お前ホント理解できてないのな。
ソフト屋ソフト屋と言ってるが、何屋なんよ。
解ってないと言うか、お前が何か変な想定してると思うぞ。
M:Nで、かつスケジューラがまともな場合、に関しては相当美味しいと言う事が理解できて、スケジューラのソースはgithubにあるはずだが、読んだ?
stealは無差別にstealする訳じゃないぞ。
1コアあるだけよこせだと、IOバウンドな処理の時に勿体ないでしょ。
小さく済むと言うか、バカほど立てられるんよ。
.Netの話はネイティブスレッド。お前ホント理解できてないのな。
811デフォルトの名無しさん
2020/11/01(日) 17:13:59.67ID:MfA1nG9+ >>807
常に同一コア云々に関しては、ソース読め。
常に同一コア云々に関しては、ソース読め。
812デフォルトの名無しさん
2020/11/01(日) 17:19:00.38ID:MfA1nG9+ >>807
CPUをまたぐ場合にはOSのサポート、もちょっと違うだろ。
あくまでグリーンスレッドで、ネイティブスレッドじゃねえぞ。
システムコールだったり、アトミックに処理ができるだったりでタスク覗くときにどうなってるよって話じゃねえの?
CPUをまたぐ場合にはOSのサポート、もちょっと違うだろ。
あくまでグリーンスレッドで、ネイティブスレッドじゃねえぞ。
システムコールだったり、アトミックに処理ができるだったりでタスク覗くときにどうなってるよって話じゃねえの?
813デフォルトの名無しさん
2020/11/01(日) 18:10:32.21ID:WzAcxxGD マジで自演人形劇はやめとけって
どんどん病気がひどくなるぞ
どんどん病気がひどくなるぞ
814デフォルトの名無しさん
2020/11/01(日) 18:37:50.76ID:0aiHjqpe >>810
> M:Nで、かつスケジューラがまともな場合、に関しては相当美味しいと言う事が理解できて
俺は別に美味しいとは思ってないぞ。
M:NならOSのスケジューラと大差ない筈だし、
実際ランタイム判断でN:1に出来る状態でもNodeに負けてるだろ。
カッコイイスケジュールをやりきるより、スケジュールなんてしない、の方がシンプルで速いんだよ。
Goは例の「一方ロシアは鉛筆を使った」のアメリカ側をやりきってる感じがある。
とはいえそれもソフトウェア全体の成長の芽の一つだから、やること自体は頑張れ、でしかないが。
> スケジューラのソースはgithubにあるはずだが、読んだ?
読んでねえよ。ただ、読む価値ねえから読まねえよ。遅いスケジューラなんて意味ねえし。
> Netの話はネイティブスレッド
つまり普通のスレッドだろ?ならWindowsはスレッドのスタックサイズを指摘出来ることになる。
Linuxでこれが出来ないとも思えないので、goroutineは軽いんです、なんて利点はなくなると思うが。
>>812
そりゃお前が理解出来てないと思うぞ。
上述の通り、スライドでもメッセージをkernelに投げてるだろ。
そこを同一CPU内にディスパッチされた場合にのみN:1専用超軽量ルーチンで処理するよう、
スレッドスイッチの際に全部張り直す、というのもありだが、実際それやってても大して速くないと思うぞ。
そこは本来はプログラミングモデルを明示的に変えないと駄目なんだよ。
同一CPU内でのみ動作するスレッドであれば、スイッチのコストはほぼゼロだから、がんがん切り出して問題ない。
一方、メッセージにkernelを挟む必要があるのなら、それはそれだけでコストがかかるから、何でもかんでも切り出したら余計遅くなる。
だから本来は goroutine のみではなく、 golight とか、N:1スケジュール専用のgoroutineを用意しないと駄目なんだ。
それがなくて全部goroutineで扱うから全体的に遅くなってしまう。それがブログ主がやった事だよ。
ただこれを分離するのは思想的にやりたくないんだろ?ならそこが限界だよ。
> M:Nで、かつスケジューラがまともな場合、に関しては相当美味しいと言う事が理解できて
俺は別に美味しいとは思ってないぞ。
M:NならOSのスケジューラと大差ない筈だし、
実際ランタイム判断でN:1に出来る状態でもNodeに負けてるだろ。
カッコイイスケジュールをやりきるより、スケジュールなんてしない、の方がシンプルで速いんだよ。
Goは例の「一方ロシアは鉛筆を使った」のアメリカ側をやりきってる感じがある。
とはいえそれもソフトウェア全体の成長の芽の一つだから、やること自体は頑張れ、でしかないが。
> スケジューラのソースはgithubにあるはずだが、読んだ?
読んでねえよ。ただ、読む価値ねえから読まねえよ。遅いスケジューラなんて意味ねえし。
> Netの話はネイティブスレッド
つまり普通のスレッドだろ?ならWindowsはスレッドのスタックサイズを指摘出来ることになる。
Linuxでこれが出来ないとも思えないので、goroutineは軽いんです、なんて利点はなくなると思うが。
>>812
そりゃお前が理解出来てないと思うぞ。
上述の通り、スライドでもメッセージをkernelに投げてるだろ。
そこを同一CPU内にディスパッチされた場合にのみN:1専用超軽量ルーチンで処理するよう、
スレッドスイッチの際に全部張り直す、というのもありだが、実際それやってても大して速くないと思うぞ。
そこは本来はプログラミングモデルを明示的に変えないと駄目なんだよ。
同一CPU内でのみ動作するスレッドであれば、スイッチのコストはほぼゼロだから、がんがん切り出して問題ない。
一方、メッセージにkernelを挟む必要があるのなら、それはそれだけでコストがかかるから、何でもかんでも切り出したら余計遅くなる。
だから本来は goroutine のみではなく、 golight とか、N:1スケジュール専用のgoroutineを用意しないと駄目なんだ。
それがなくて全部goroutineで扱うから全体的に遅くなってしまう。それがブログ主がやった事だよ。
ただこれを分離するのは思想的にやりたくないんだろ?ならそこが限界だよ。
815デフォルトの名無しさん
2020/11/01(日) 20:10:20.08ID:0aiHjqpe >>806
さて英文の方も読んだ。
なるほどGCの為にスレッドの動作状況を調整する必要があるから、スケジューラはどのみち内部に必要なのか。
これは俺はCでしかスレッドを使ってないから気づかなかったわ。
ただその後GoはノンストップGC入れたと聞いたから今は要らんだろとも思うが。
Syscallの時にハンドオーバーしたいのは、ぶっちゃけもう一つthreadを立てておけば済む話だよね。
(GOMAXPROCSをCore数ではなく、Core数+αにする。ただしそれに似たような話は書いてあるが)
内容は日本語版と同じだね。そりゃそうだが。
ただ、英語版の方が確かに実装した理由が書いてあったから読み物としては良いが。
さて英文の方も読んだ。
なるほどGCの為にスレッドの動作状況を調整する必要があるから、スケジューラはどのみち内部に必要なのか。
これは俺はCでしかスレッドを使ってないから気づかなかったわ。
ただその後GoはノンストップGC入れたと聞いたから今は要らんだろとも思うが。
Syscallの時にハンドオーバーしたいのは、ぶっちゃけもう一つthreadを立てておけば済む話だよね。
(GOMAXPROCSをCore数ではなく、Core数+αにする。ただしそれに似たような話は書いてあるが)
内容は日本語版と同じだね。そりゃそうだが。
ただ、英語版の方が確かに実装した理由が書いてあったから読み物としては良いが。
816デフォルトの名無しさん
2020/11/01(日) 20:36:44.54ID:Cb/zzig7 >>814
スケジュールなんかしない、って全然ありえないんじゃないか?それこそ非同期の時代に。
Nodeにはだいたい勝ってるかと。
読んでもないのに読む価値がわかるとは凄いな。
スレッドのスタックサイズが問題ではなくて、ネイティブスレッドか否かが問題なの。アホか?
だから、スレッドではないから、スイッチのコストが全然違うの。
goroutineはスレッドのようなものであって、スレッドではないからそもそも切り替えのコストがほぼない。
だからガンガン切り出していいの。
なんにも聞いてないのな。グリーンスレッド勉強になったんじゃないの?
スケジュールなんかしない、って全然ありえないんじゃないか?それこそ非同期の時代に。
Nodeにはだいたい勝ってるかと。
読んでもないのに読む価値がわかるとは凄いな。
スレッドのスタックサイズが問題ではなくて、ネイティブスレッドか否かが問題なの。アホか?
だから、スレッドではないから、スイッチのコストが全然違うの。
goroutineはスレッドのようなものであって、スレッドではないからそもそも切り替えのコストがほぼない。
だからガンガン切り出していいの。
なんにも聞いてないのな。グリーンスレッド勉強になったんじゃないの?
817デフォルトの名無しさん
2020/11/01(日) 20:37:48.97ID:Cb/zzig7818デフォルトの名無しさん
2020/11/01(日) 20:48:36.50ID:xkjSw6A1 古いPerlスクリプトをGoogle Compute Engineの無料枠で動かそうとしたら
cpanのDBD:mysqlのmake時のテストで多分メモリエラーで落ちた
いい機会だからgoで作り直すことにしたわ(´・ω・`)
cpanのDBD:mysqlのmake時のテストで多分メモリエラーで落ちた
いい機会だからgoで作り直すことにしたわ(´・ω・`)
819デフォルトの名無しさん
2020/11/01(日) 20:53:11.08ID:0aiHjqpe 一応調べたぞ。
スレッドのスタックサイズは、
.NETのはデフォ1Mで最小値はシステムによるがVista(.NET2.0)なら256KBだそうな。
それより新しいのはよく分からんがこの雰囲気だと64KBか。
https://docs.microsoft.com/ja-jp/dotnet/api/system.threading.thread.-ctor?view=netcore-3.1#System_Threading_Thread__ctor_System_Threading_ThreadStart_System_Int32_
https://docs.microsoft.com/en-us/windows/win32/procthread/thread-stack-size
pthreadはこちらも具体的には書いてないから推測になるが、
oracleが16KB指定してるし、MANPAGEにも書いてあるからここまでは行けるのは確実。
オーバーフロー検出の項目で1ページ以下にも指定出来るとあるから、
スタックサイズは4KBかそれ以下にも指定出来るとも思われるが、断定は出来ない。
https://docs.oracle.com/cd/E19253-01/819-0390/attrib-45427/index.html
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/pthread_attr_setstacksize.3.html
https://linuxjm.osdn.jp/html/glibc-linuxthreads/man3/pthread_attr_init.3.html
いずれも起動時にパラメータでスタックサイズを指定出来る。
スレッドのスタックサイズは、
.NETのはデフォ1Mで最小値はシステムによるがVista(.NET2.0)なら256KBだそうな。
それより新しいのはよく分からんがこの雰囲気だと64KBか。
https://docs.microsoft.com/ja-jp/dotnet/api/system.threading.thread.-ctor?view=netcore-3.1#System_Threading_Thread__ctor_System_Threading_ThreadStart_System_Int32_
https://docs.microsoft.com/en-us/windows/win32/procthread/thread-stack-size
pthreadはこちらも具体的には書いてないから推測になるが、
oracleが16KB指定してるし、MANPAGEにも書いてあるからここまでは行けるのは確実。
オーバーフロー検出の項目で1ページ以下にも指定出来るとあるから、
スタックサイズは4KBかそれ以下にも指定出来るとも思われるが、断定は出来ない。
https://docs.oracle.com/cd/E19253-01/819-0390/attrib-45427/index.html
https://linuxjm.osdn.jp/html/LDP_man-pages/man3/pthread_attr_setstacksize.3.html
https://linuxjm.osdn.jp/html/glibc-linuxthreads/man3/pthread_attr_init.3.html
いずれも起動時にパラメータでスタックサイズを指定出来る。
820デフォルトの名無しさん
2020/11/01(日) 20:58:17.56ID:Cb/zzig7 >>819
それはネイティブスレッドな。
それはネイティブスレッドな。
821デフォルトの名無しさん
2020/11/01(日) 21:30:51.41ID:0aiHjqpe >>816-817
実際Nodeに負けてるのは事実だし、あのブログ読んで技術的に俺は納得してる。
782も納得してるし、他の連中もあの貧弱環境ならそうだな、となると思うが。
ちなみに当たり前だが全ての環境で全敗するわけではないぞ。
俺も数年前に味見でPHP/Node/Goで同じものをPCのXAMPP上で試したが、
GoはNode比2倍、PHP比6倍のパフォーマンスが出た。
(僕のカワイイGoを虐めるな!って感じだから、、これを言ったら満足するか?)
それで俺はPHPで行くことに決定した。
PHPのパフォーマンスで俺には十分だったし、無料鯖は現状PHPのみだからだ。
そしたらGoでやってた奴が「ゴラアふざけんな!」って言ってきたが「知るかボケ」と返した。
あいつはPHPの糞コードがこれ以上世の中に増殖するのが許せなかったらしい。
実は本当はNode無料鯖が大量にあればNodeにしたいのだが、今はそうではない。
よって糞とは分かっているがPHPだ。
ただ、そのGo使いは「Goなんて遅すぎ、Rust行くわ」と言って今はRustでやってるよ。
そりゃパフォーマンスだけで勝負するならRustになるし。
静的なコンパイル言語なんだからスクリプト言語と比べて速いのは当たり前。
それが貧弱環境だと覆るのはアーキが悪いんだよ。
そして何故そうなるのかを色々理解した上で、それぞれが用途に適したものを使えばいいだけ。
今のところ俺がGoを使うことになる芽はない。だからって何だよ、でしかないとは思うけど。
最近のお前らがよく分からんのは、言語べったりで言語と心中しようって奴が多すぎることだ。
お前の使ってる言語が良くても悪くてもお前の成果でもないし、悪口でもないだろ。
ぼくがつかってるげんごすごい=ぼくすごい、なのはゆとり特有な気がするが、
何故お前らがそうなるのかさっぱり分からん。
実際Nodeに負けてるのは事実だし、あのブログ読んで技術的に俺は納得してる。
782も納得してるし、他の連中もあの貧弱環境ならそうだな、となると思うが。
ちなみに当たり前だが全ての環境で全敗するわけではないぞ。
俺も数年前に味見でPHP/Node/Goで同じものをPCのXAMPP上で試したが、
GoはNode比2倍、PHP比6倍のパフォーマンスが出た。
(僕のカワイイGoを虐めるな!って感じだから、、これを言ったら満足するか?)
それで俺はPHPで行くことに決定した。
PHPのパフォーマンスで俺には十分だったし、無料鯖は現状PHPのみだからだ。
そしたらGoでやってた奴が「ゴラアふざけんな!」って言ってきたが「知るかボケ」と返した。
あいつはPHPの糞コードがこれ以上世の中に増殖するのが許せなかったらしい。
実は本当はNode無料鯖が大量にあればNodeにしたいのだが、今はそうではない。
よって糞とは分かっているがPHPだ。
ただ、そのGo使いは「Goなんて遅すぎ、Rust行くわ」と言って今はRustでやってるよ。
そりゃパフォーマンスだけで勝負するならRustになるし。
静的なコンパイル言語なんだからスクリプト言語と比べて速いのは当たり前。
それが貧弱環境だと覆るのはアーキが悪いんだよ。
そして何故そうなるのかを色々理解した上で、それぞれが用途に適したものを使えばいいだけ。
今のところ俺がGoを使うことになる芽はない。だからって何だよ、でしかないとは思うけど。
最近のお前らがよく分からんのは、言語べったりで言語と心中しようって奴が多すぎることだ。
お前の使ってる言語が良くても悪くてもお前の成果でもないし、悪口でもないだろ。
ぼくがつかってるげんごすごい=ぼくすごい、なのはゆとり特有な気がするが、
何故お前らがそうなるのかさっぱり分からん。
822デフォルトの名無しさん
2020/11/01(日) 21:50:55.32ID:b3NlQgn4 >最近のお前らがよく分からんのは、言語べったりで言語と心中しようって奴が多すぎることだ。
なかなかの妄想力
なかなかの妄想力
823デフォルトの名無しさん
2020/11/01(日) 21:54:59.97ID:90RfWjYN 後半完全に何言ってるのか分からん
病気じゃないのかお前
病気じゃないのかお前
824デフォルトの名無しさん
2020/11/01(日) 22:00:10.95ID:Cb/zzig7 >>821
PHPは歯ブラシとしては優秀だからな。
それは認めるわ。
ただ、XAMPPとか無料鯖とか言ってる次元で意味がわからん。
普通自鯖だろ。
ちなみにRustが持て囃されてるのは、早いからではなくて安全だからだぞ。
大量の並行処理をさばくならGoの方を俺は選ぶが。
言語べったりと言うが、このスレはGoのスレなんだし、そもそもお前が他の言語に対して理解がなさすぎて、何でも自己流の解釈するから頭おかしい結論になるんじゃねえか?
PHPは歯ブラシとしては優秀だからな。
それは認めるわ。
ただ、XAMPPとか無料鯖とか言ってる次元で意味がわからん。
普通自鯖だろ。
ちなみにRustが持て囃されてるのは、早いからではなくて安全だからだぞ。
大量の並行処理をさばくならGoの方を俺は選ぶが。
言語べったりと言うが、このスレはGoのスレなんだし、そもそもお前が他の言語に対して理解がなさすぎて、何でも自己流の解釈するから頭おかしい結論になるんじゃねえか?
825デフォルトの名無しさん
2020/11/01(日) 22:05:20.17ID:HCtespKR 病人構うな
826デフォルトの名無しさん
2020/11/01(日) 22:20:51.95ID:fO/k/B8X お前らな、「グリーンスレッド?知らんかったわw」の時点で気付け
827デフォルトの名無しさん
2020/11/01(日) 22:45:13.37ID:xkjSw6A1 わざわざgoスレに乗り込んできて何がしたかったんだろ
828デフォルトの名無しさん
2020/11/02(月) 08:42:57.13ID:NKtku3y2 スレッドのようなもので、スレッドではないって言ってんのに頭の中スレッドでいっぱいだから理解もできてないし。
何なんだろうなホントに。
何なんだろうなホントに。
829デフォルトの名無しさん
2020/11/02(月) 11:21:06.04ID:pw+0Gz6K 勢いがあってよろしい
830デフォルトの名無しさん
2020/11/02(月) 12:09:27.63ID:N1CJ+2mz goroutineのオンリーワンは当分揺るがないだろな
同接数十万以上とかのWebAPI作るならgolangが第一候補
そこまで性能が求められない場合では、保守性からJavaとかNodeみたいな人員調達容易な言語
同接数十万以上とかのWebAPI作るならgolangが第一候補
そこまで性能が求められない場合では、保守性からJavaとかNodeみたいな人員調達容易な言語
831デフォルトの名無しさん
2020/11/02(月) 13:55:39.65ID:L7ffXO9d Gopherくんがキモいのが全部悪い
832デフォルトの名無しさん
2020/11/02(月) 16:49:39.29ID:++BFvK30 Gopherキモいのが何もかもダメにしとる
833デフォルトの名無しさん
2020/11/02(月) 17:41:48.74ID:O3lt5Om/ Go書けるまともな人相当少ないからかなり美味しいんだよな
世の中の人プログラミング苦手なのか?と思ってしまう
スクリプト言語かいてイキってた人達が沈黙したし
世の中の人プログラミング苦手なのか?と思ってしまう
スクリプト言語かいてイキってた人達が沈黙したし
834デフォルトの名無しさん
2020/11/02(月) 19:04:40.88ID:jaqc7xr4 この10年ぐらいはスクリプトでイキリがほんと多くてウンザリした
835デフォルトの名無しさん
2020/11/02(月) 21:24:24.64ID:N3jY4ti2 >>816
君がその程度の理解なのは理解した。
ただそれはGoの思想「何でもかんでもgoroutineに切り出せば自動的に速くなります」なのだろうからGoUserとしては悪くない。
しかし現実にはNodeに負けてる、ってこと。
君らの問題は、何故それが起きるのか理解出来ないことだ。
これは806のスライド作った奴もそうだが、何故遅くなるのか、何故速くなるのか、理解出来てない。
ただ、そう教えてもらったから、という知識しかない。
しかしこれもそんなに酷いことではない。
最近は複雑化したハードウェアに対応する為に、ソフトウェアも複雑化してる。
学生では単純に知識量が追いつかない。
となるといわゆる正しい作法で洗脳する、というのが現実的な解で、
それがJavaでのオブジェクト教、Goの場合はgoroutine教なのだろう。
しかし既に言ったがchannelしか使わないのなら現実的にそれでいいんだよ。理由は分からなくても。
ソフトウェアを資産として捉えた場合、正しい作法で書かれた物が大量にあることが重要であり、
君らがGo流の正しい作法で書くのなら、それはGo界の資産となる。だから貢献してる。
君がその程度の理解なのは理解した。
ただそれはGoの思想「何でもかんでもgoroutineに切り出せば自動的に速くなります」なのだろうからGoUserとしては悪くない。
しかし現実にはNodeに負けてる、ってこと。
君らの問題は、何故それが起きるのか理解出来ないことだ。
これは806のスライド作った奴もそうだが、何故遅くなるのか、何故速くなるのか、理解出来てない。
ただ、そう教えてもらったから、という知識しかない。
しかしこれもそんなに酷いことではない。
最近は複雑化したハードウェアに対応する為に、ソフトウェアも複雑化してる。
学生では単純に知識量が追いつかない。
となるといわゆる正しい作法で洗脳する、というのが現実的な解で、
それがJavaでのオブジェクト教、Goの場合はgoroutine教なのだろう。
しかし既に言ったがchannelしか使わないのなら現実的にそれでいいんだよ。理由は分からなくても。
ソフトウェアを資産として捉えた場合、正しい作法で書かれた物が大量にあることが重要であり、
君らがGo流の正しい作法で書くのなら、それはGo界の資産となる。だから貢献してる。
836デフォルトの名無しさん
2020/11/02(月) 21:25:09.49ID:N3jY4ti2 問題は、その程度の理解なのに限界領域の最速を目指せると勘違いしていることだ。
それは無理なんだよ。ハードウェア上で動いているのだから、ある程度のハードウェアの知識がないといけない。
実際、Nodeに負けてるのも、その理由も、君には理解出来ないんだろ。
なおNodeのはスケジューラとは言わない。ああいうのはキューという。積まれた順に吐いているだけだから。
あれをスケジューラと呼ぶのは、まともなスケジューラ作ってる(つもり)なGoの連中に対しても失礼だ。
ただそこで負けてるのはやっぱりアーキが悪いんだよ。
スケジューラを入れると、一般的にディスパッチの際にその分オーバーヘッドが入る。
だからディスパッチされるジョブが小さければ小さいほどそのオーバーヘッドが大きく見えてしまう。
それは「goroutineで何でもかんでも切り出せ」という思想と矛盾してしまうだろ。
だからNodeに負けた。
それは無理なんだよ。ハードウェア上で動いているのだから、ある程度のハードウェアの知識がないといけない。
実際、Nodeに負けてるのも、その理由も、君には理解出来ないんだろ。
なおNodeのはスケジューラとは言わない。ああいうのはキューという。積まれた順に吐いているだけだから。
あれをスケジューラと呼ぶのは、まともなスケジューラ作ってる(つもり)なGoの連中に対しても失礼だ。
ただそこで負けてるのはやっぱりアーキが悪いんだよ。
スケジューラを入れると、一般的にディスパッチの際にその分オーバーヘッドが入る。
だからディスパッチされるジョブが小さければ小さいほどそのオーバーヘッドが大きく見えてしまう。
それは「goroutineで何でもかんでも切り出せ」という思想と矛盾してしまうだろ。
だからNodeに負けた。
837デフォルトの名無しさん
2020/11/02(月) 21:25:43.73ID:N3jY4ti2 C界で有名な話で、「K&Rのmalloc(30行程度)に勝つ為には5000行のコードが必要だった」というのがある。
https://www.wdic.org/w/TECH/malloc
何もやらないのが一番速いから、シンプルなソフトウェアはそれだけで速い。
OSのスケジューラもほぼキューでしかないはずで、Nodeと同様に「積まれた順に吐くだけ」だけど、
逆に、それでいい領域であればそれ以上のスケジューラを持たせても原理的に勝てない。
それがNodeに負けた理由。
JSのシングルスレッドアーキテクチャというのはかなりトリッキーなアイデアではあるが、
ああ割り切ってしまえば世界がシンプルになるから色々省略出来る。
結果、ソフトウェアが全体的にコンパクトになるから思っている以上に速くなる。
それがNodeに負けた理由。
逆にGoの思想でNodeに勝つ為には、「積まれた順に吐くだけ」な馬鹿キューを上回る為に、
「このgoroutineは『いつ』『どこ』にディスパッチすべきか」をきっちり管理しないといけない。
それは今の「空いてれば取ってきます」程度では全然駄目で、上記mallocの戦いなら今はまだ一合目でしかない。
後10倍くらい複雑化してプロファイラーも整備しなければ「シンプルなだけ」のソフトには速度で勝てない。
(プロファイラーを実装したくなければユーザーが明示的に指定するgolightみたいなのがあればいいのだが、
そういうの無しでやりたければ、プロファイラーが要る)
後君らが見えてないのは、複数のCPUを並列/並行動作させるのは実はものすごくオーバーヘッドがあること。
これはx86だと全部ハードウェアがやってくれるのでソフトウェア上では負担がないのだけど、
それはコードから見えないだけで、実際のCPUは止まりまくってるから実行速度はがた落ちになってる。
それがNodeに負けた理由。シングルスレッド限定だとこのオーバーヘッドがないんだよ。
https://www.wdic.org/w/TECH/malloc
何もやらないのが一番速いから、シンプルなソフトウェアはそれだけで速い。
OSのスケジューラもほぼキューでしかないはずで、Nodeと同様に「積まれた順に吐くだけ」だけど、
逆に、それでいい領域であればそれ以上のスケジューラを持たせても原理的に勝てない。
それがNodeに負けた理由。
JSのシングルスレッドアーキテクチャというのはかなりトリッキーなアイデアではあるが、
ああ割り切ってしまえば世界がシンプルになるから色々省略出来る。
結果、ソフトウェアが全体的にコンパクトになるから思っている以上に速くなる。
それがNodeに負けた理由。
逆にGoの思想でNodeに勝つ為には、「積まれた順に吐くだけ」な馬鹿キューを上回る為に、
「このgoroutineは『いつ』『どこ』にディスパッチすべきか」をきっちり管理しないといけない。
それは今の「空いてれば取ってきます」程度では全然駄目で、上記mallocの戦いなら今はまだ一合目でしかない。
後10倍くらい複雑化してプロファイラーも整備しなければ「シンプルなだけ」のソフトには速度で勝てない。
(プロファイラーを実装したくなければユーザーが明示的に指定するgolightみたいなのがあればいいのだが、
そういうの無しでやりたければ、プロファイラーが要る)
後君らが見えてないのは、複数のCPUを並列/並行動作させるのは実はものすごくオーバーヘッドがあること。
これはx86だと全部ハードウェアがやってくれるのでソフトウェア上では負担がないのだけど、
それはコードから見えないだけで、実際のCPUは止まりまくってるから実行速度はがた落ちになってる。
それがNodeに負けた理由。シングルスレッド限定だとこのオーバーヘッドがないんだよ。
838デフォルトの名無しさん
2020/11/02(月) 21:27:00.51ID:N3jY4ti2 >>830
CPUリソースを余すことなく使う、という意味では原理的にNodeの方が上なんだよ。
本体ジョブしかしないんだから。
ただNodeの場合はマルチコアだと束ねて使うしかない。
これも既に行われているはずだけど、この場合はそれぞれのNode間の直接情報交換は無理筋になる。
(やる場合はDB(或いはエミュレーションレイヤ)経由だが、直接RAM上での交換とは速度では全く勝負にならない)
しかし数十万のコネクションを一度に張って、その間で頻繁にやりとりするって何がある?ほぼ無いよね?
チャットはそうだけど、だからこそチャットアプリでNodeに現実的に負けたあのブログは大きいんだよ。
だからGoUserが噛みついてDisclaimerまで付いてGitHubにまで追いつめられちゃって、になってる。
ただし、実は現実的にはネットワーク出力は一つなのだからチャットでも何でもシリアル処理実装で全く問題ない。
よって根本的にはCPU単体速度>=ネットワーク速度なそこらのPC程度だとNodeでも問題の発生しようがなく、対応出来てしまう。
これはレン鯖等も含めて。
そうではなく、ネットワーク速度>>>CPU単体の速度、な環境ではNodeでは全く無理筋だが、これがどこにあるかだよ。
クラスタで中身は束ねたPC程度だとNodeで全く問題は発生しないはずで、実際それがNode鯖を使ってる連中の使い方だろ。
GoはNodeの思想からすれば盛大に屋上屋を架している。
それでパフォーマンスが出れば大したもんだけど、スケジューラがあの程度ならまだまだ遠いよ。
「CPUが十分速い」という大前提が成り立つ限りJSの思想はかなり筋が良いんだ。
ただそれが1995の時点で見切れたのか、単にラッキーなのかは謎だが。
CPUリソースを余すことなく使う、という意味では原理的にNodeの方が上なんだよ。
本体ジョブしかしないんだから。
ただNodeの場合はマルチコアだと束ねて使うしかない。
これも既に行われているはずだけど、この場合はそれぞれのNode間の直接情報交換は無理筋になる。
(やる場合はDB(或いはエミュレーションレイヤ)経由だが、直接RAM上での交換とは速度では全く勝負にならない)
しかし数十万のコネクションを一度に張って、その間で頻繁にやりとりするって何がある?ほぼ無いよね?
チャットはそうだけど、だからこそチャットアプリでNodeに現実的に負けたあのブログは大きいんだよ。
だからGoUserが噛みついてDisclaimerまで付いてGitHubにまで追いつめられちゃって、になってる。
ただし、実は現実的にはネットワーク出力は一つなのだからチャットでも何でもシリアル処理実装で全く問題ない。
よって根本的にはCPU単体速度>=ネットワーク速度なそこらのPC程度だとNodeでも問題の発生しようがなく、対応出来てしまう。
これはレン鯖等も含めて。
そうではなく、ネットワーク速度>>>CPU単体の速度、な環境ではNodeでは全く無理筋だが、これがどこにあるかだよ。
クラスタで中身は束ねたPC程度だとNodeで全く問題は発生しないはずで、実際それがNode鯖を使ってる連中の使い方だろ。
GoはNodeの思想からすれば盛大に屋上屋を架している。
それでパフォーマンスが出れば大したもんだけど、スケジューラがあの程度ならまだまだ遠いよ。
「CPUが十分速い」という大前提が成り立つ限りJSの思想はかなり筋が良いんだ。
ただそれが1995の時点で見切れたのか、単にラッキーなのかは謎だが。
839デフォルトの名無しさん
2020/11/02(月) 21:28:45.62ID:N3jY4ti2 >>830
と思ったが、オンゲか?
オンゲは確かにNodeでは無理だろう。これは根本的にNode向きではないから。
コネクション単品の処理も重く、コネクション間の情報交換も多い。
逆にコネクション単品が軽いチャット程度だと、goroutineがオーバースペック過ぎてNodeに負けてしまってる。
これはある意味単なる設計ミスで、起動時にもっと小さいスタックサイズを指定出来るようにすれば済む話なのだけど、
それをしないところをみると何か出来ない/したくない理由があるんだろう。
あのブログを出されて噛みつくってのは民度が低くて、スタックサイズを可変にするってのが建設的対応だよ。
ただ、可変スタックサイズなんてやれば出来る話でしかないし、
理由はおそらくスケジューラの性能がその辺だからだろう。
goroutineに切り出すと「スケジューラ」「同期化機構」分だけオーバーヘッドが生じる。
それは「賢いスケジューリング」で取り戻すしかないが、元々軽いgoroutineでは無理がある。
だからある程度重いジョブをgoroutineに切り出すことが必要で、
それ以下の軽いジョブだと到底無理だから消極的に制限してるのだろう。
これだとチャットでNodeに負けた理由も、
またそれでもなおgoroutineのスタックサイズを2KBと巨大なままに保っていることも説明が付く。
実際、データを置かず、再帰も必要な時にしかしないのなら、スタックサイズ2KBなんて埋めようがないし。
と思ったが、オンゲか?
オンゲは確かにNodeでは無理だろう。これは根本的にNode向きではないから。
コネクション単品の処理も重く、コネクション間の情報交換も多い。
逆にコネクション単品が軽いチャット程度だと、goroutineがオーバースペック過ぎてNodeに負けてしまってる。
これはある意味単なる設計ミスで、起動時にもっと小さいスタックサイズを指定出来るようにすれば済む話なのだけど、
それをしないところをみると何か出来ない/したくない理由があるんだろう。
あのブログを出されて噛みつくってのは民度が低くて、スタックサイズを可変にするってのが建設的対応だよ。
ただ、可変スタックサイズなんてやれば出来る話でしかないし、
理由はおそらくスケジューラの性能がその辺だからだろう。
goroutineに切り出すと「スケジューラ」「同期化機構」分だけオーバーヘッドが生じる。
それは「賢いスケジューリング」で取り戻すしかないが、元々軽いgoroutineでは無理がある。
だからある程度重いジョブをgoroutineに切り出すことが必要で、
それ以下の軽いジョブだと到底無理だから消極的に制限してるのだろう。
これだとチャットでNodeに負けた理由も、
またそれでもなおgoroutineのスタックサイズを2KBと巨大なままに保っていることも説明が付く。
実際、データを置かず、再帰も必要な時にしかしないのなら、スタックサイズ2KBなんて埋めようがないし。
840デフォルトの名無しさん
2020/11/02(月) 21:30:11.08ID:UfGVYnOo 長くて読む気がしない
3行にまとめて
3行にまとめて
841デフォルトの名無しさん
2020/11/02(月) 21:34:24.83ID:NKtku3y2 >>835
Nodeに負けてるが定量的でないぞ。
お前が書いたNodeのコードに負けてるのであれば、goroutineをどう使えばよいか解ってないお前がポンコツだって事だ。
主観的すぎる。やりなおせ。
Nodeに負けてるが定量的でないぞ。
お前が書いたNodeのコードに負けてるのであれば、goroutineをどう使えばよいか解ってないお前がポンコツだって事だ。
主観的すぎる。やりなおせ。
842デフォルトの名無しさん
2020/11/02(月) 21:44:01.67ID:VXnjPqGh また発作か…
843デフォルトの名無しさん
2020/11/02(月) 22:10:55.63ID:N3jY4ti2 >>841
負けてるのは781のブログだよ。詳しく知りたければ読めよ。
俺は彼の分析には納得してるし、その通りだと思ってる。
だから同じような環境なら間違いなく負けるとも思っている。
お前らって(というよりは最近は他言語もだが)
結局Goが「最速最高」じゃないと文句を必ず言ってくるけど、それはないでしょ。
速度ならC/C++/Rustには負けるし、お手軽さではPHPやJSには負けてる。
だからいちいちそんなところで噛みついてくて欲しくないね。建設的な話が出来ない。
完璧な言語なんてないのだから、己の状況でどれが一番ましか判断してそれを使うしかない。
なら、いろんな言語を客観的に見てないと駄目でしょ。
ただ、スレッドで切り離せるところをgoroutineで積極的に切り離せば解があるのではないか?
という着眼点でGoが動いているのは分かった。
確かにこれは面白いし、実際threadはそういう風に使われることを想定されてない。
だからこれをやりたかった人達はネイティブスレッドには文句たらたらだったのだろう。
ただ問題は、同期自体が凄く重いのと、
現存のハードウェアはそういった大量の軽量スレッドを生かす方向には出来てないことだよ。
Niagaraは比較的向いてるけど、SPARC自体が死んでしまってるし、富岳もARMになってしまったからね。
負けてるのは781のブログだよ。詳しく知りたければ読めよ。
俺は彼の分析には納得してるし、その通りだと思ってる。
だから同じような環境なら間違いなく負けるとも思っている。
お前らって(というよりは最近は他言語もだが)
結局Goが「最速最高」じゃないと文句を必ず言ってくるけど、それはないでしょ。
速度ならC/C++/Rustには負けるし、お手軽さではPHPやJSには負けてる。
だからいちいちそんなところで噛みついてくて欲しくないね。建設的な話が出来ない。
完璧な言語なんてないのだから、己の状況でどれが一番ましか判断してそれを使うしかない。
なら、いろんな言語を客観的に見てないと駄目でしょ。
ただ、スレッドで切り離せるところをgoroutineで積極的に切り離せば解があるのではないか?
という着眼点でGoが動いているのは分かった。
確かにこれは面白いし、実際threadはそういう風に使われることを想定されてない。
だからこれをやりたかった人達はネイティブスレッドには文句たらたらだったのだろう。
ただ問題は、同期自体が凄く重いのと、
現存のハードウェアはそういった大量の軽量スレッドを生かす方向には出来てないことだよ。
Niagaraは比較的向いてるけど、SPARC自体が死んでしまってるし、富岳もARMになってしまったからね。
844デフォルトの名無しさん
2020/11/02(月) 22:29:00.53ID:N3jY4ti2 と思ったけど、SPARCはOracleが独自改造しまくってたな。
実際OracleみたいなDBサーバーならGoはハードウェア的にもソフトウェア的にも向いてるのかもしれん。
実際OracleみたいなDBサーバーならGoはハードウェア的にもソフトウェア的にも向いてるのかもしれん。
845デフォルトの名無しさん
2020/11/02(月) 22:39:52.04ID:N3jY4ti2846デフォルトの名無しさん
2020/11/02(月) 23:27:43.59ID:O3lt5Om/ >>845
俺から見れば1番イキってるのは君だよ
俺から見れば1番イキってるのは君だよ
847デフォルトの名無しさん
2020/11/03(火) 00:10:32.82ID:OQJ1TfTq >>846
そりゃご丁寧にどうも。
ただ、今ここで話した限り、以前の印象「Go使いはC++を使えない馬鹿」ってのを再認識したけどな。
C++も無駄に複雑になって、しかもそれを使いこなすのが目的みたいな勘違い野郎がネット上には増えてるし、
あれはあれでおかしな事になってるが。
ただGoはちょっと立ち位置が悪い。
「端の言語」はとりあえずは生き残れるんだよ。Goはどの面もそこに該当しない。
今なら「最易」枠がPHP/JS/Python。
「最速」枠がC/C++。
「堅牢」枠がJava。
中庸といえば聞こえは良いが、実際に積極的にGoを選ぶ理由がない。
上記の言語はそれなりに糞だと分かってても最○を求めたら他に選択肢がないから選ばれる。
だからのさばってる。
goroutineの思想は確かに面白いが、今はそれを生かせるハードがない。
そしてそのハードを開発させるほど影響力も大きくない。
(ただしGo向けハードウェア開発自体は簡単だから、やる気になればすぐ出来るが)
あとはgenerateだね。
ただしgenerateが向いてるのは下地の言語が全機能を持っている場合であって、(つまりC++)
Goみたいに綺麗に制限されてる言語には向いてないんだな。
そりゃご丁寧にどうも。
ただ、今ここで話した限り、以前の印象「Go使いはC++を使えない馬鹿」ってのを再認識したけどな。
C++も無駄に複雑になって、しかもそれを使いこなすのが目的みたいな勘違い野郎がネット上には増えてるし、
あれはあれでおかしな事になってるが。
ただGoはちょっと立ち位置が悪い。
「端の言語」はとりあえずは生き残れるんだよ。Goはどの面もそこに該当しない。
今なら「最易」枠がPHP/JS/Python。
「最速」枠がC/C++。
「堅牢」枠がJava。
中庸といえば聞こえは良いが、実際に積極的にGoを選ぶ理由がない。
上記の言語はそれなりに糞だと分かってても最○を求めたら他に選択肢がないから選ばれる。
だからのさばってる。
goroutineの思想は確かに面白いが、今はそれを生かせるハードがない。
そしてそのハードを開発させるほど影響力も大きくない。
(ただしGo向けハードウェア開発自体は簡単だから、やる気になればすぐ出来るが)
あとはgenerateだね。
ただしgenerateが向いてるのは下地の言語が全機能を持っている場合であって、(つまりC++)
Goみたいに綺麗に制限されてる言語には向いてないんだな。
848デフォルトの名無しさん
2020/11/03(火) 00:18:35.41ID:ab1rhHuA ↑ キング・オブ・イキリ
849デフォルトの名無しさん
2020/11/03(火) 01:02:06.59ID:cdE7yZQv850デフォルトの名無しさん
2020/11/03(火) 01:05:11.27ID:L2dwgQ1p >>847
goはバランスをとったのだと思うな。
最易ではphpやpythonに負けるけどそれらよりは速くできる。
最速ではc, c++, rustに負けるけどそれらよりは簡易に利用できる。
堅牢さでは、、、んー、これはjavaに負けてるのかな?rustには負けてそうだけど。
バランスとったから突き詰めたら他のものに負けるのはしょうがない。
0か100じゃないんだからそれでいいと思う。
goの良さはchannelやgoroutineを用いて従来言語よりcsp(communicating sequential processes)を利用しやすくなったところだと思う。
goはバランスをとったのだと思うな。
最易ではphpやpythonに負けるけどそれらよりは速くできる。
最速ではc, c++, rustに負けるけどそれらよりは簡易に利用できる。
堅牢さでは、、、んー、これはjavaに負けてるのかな?rustには負けてそうだけど。
バランスとったから突き詰めたら他のものに負けるのはしょうがない。
0か100じゃないんだからそれでいいと思う。
goの良さはchannelやgoroutineを用いて従来言語よりcsp(communicating sequential processes)を利用しやすくなったところだと思う。
851デフォルトの名無しさん
2020/11/03(火) 02:20:11.37ID:irabVcQc 疲れてるのに長い文章読む気もおこらんから読んでないが
>>847 だけ読んで俺は基本的に同意の人間なんだが・・
ちなみにわしはC++が一番好みで最初の数行に同意なんだが
複雑すぎるとか難癖つけるやつが多いがC++が今の形に発展したのには理由がある
哲学、美学先行で必要もなくわかりにくくしているわけではない実用が最優先言語なのだ
Go も正直なんでこんな流行してるのか今一理由がわかんない
これ使うくらいなら既存言語を用途にあわせてチョイスすりゃいいじゃん、ともおもうが
まあ小型のプログラムをサクサクと書くには便利な言語だね
ただし、Go は名前がクソ
あとエラーハンドリングはなんとかしろわりとマジで
>>847 だけ読んで俺は基本的に同意の人間なんだが・・
ちなみにわしはC++が一番好みで最初の数行に同意なんだが
複雑すぎるとか難癖つけるやつが多いがC++が今の形に発展したのには理由がある
哲学、美学先行で必要もなくわかりにくくしているわけではない実用が最優先言語なのだ
Go も正直なんでこんな流行してるのか今一理由がわかんない
これ使うくらいなら既存言語を用途にあわせてチョイスすりゃいいじゃん、ともおもうが
まあ小型のプログラムをサクサクと書くには便利な言語だね
ただし、Go は名前がクソ
あとエラーハンドリングはなんとかしろわりとマジで
852デフォルトの名無しさん
2020/11/03(火) 02:32:57.50ID:ab1rhHuA /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐—´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐—´´\
853デフォルトの名無しさん
2020/11/03(火) 02:34:49.96ID:+BH8gwHp 思うに、go言語に未練あるけどもういじりたくない(または理解できなかった)人なんだろうな
どうにかして貶めたいという固い意志を感じる
どうにかして貶めたいという固い意志を感じる
854デフォルトの名無しさん
2020/11/03(火) 07:09:16.22ID:tMe0SN9n Goが理解できなかったわ無いわ
こんなのスクリプト言語レベルだろ
こんなのスクリプト言語レベルだろ
855デフォルトの名無しさん
2020/11/03(火) 07:45:30.12ID:cdE7yZQv856デフォルトの名無しさん
2020/11/03(火) 12:41:08.52ID:DpLu5A+Z goroutine はスレッドをダメだこりゃと車輪再発明する暴挙に出た一品
更にスタックが固定じゃ限界があるって考えて魔改造
そこまで無茶苦茶やらかすことで数百万の平行処理を可能とした鬼子
逆を言えば、そこまでしなければ数百万のリクエストは捌けない
デメリットは関数呼び出しからやらかしているためC呼び出しな低レベル処理が書けないという点
WebAPI用途のドメイン固有言語と言ってもいいかもしんない?
到るところでベンチマークが出ていてすら認めたくないのが笑える
https://postd.cc/the-way-of-the-gopher/
更にスタックが固定じゃ限界があるって考えて魔改造
そこまで無茶苦茶やらかすことで数百万の平行処理を可能とした鬼子
逆を言えば、そこまでしなければ数百万のリクエストは捌けない
デメリットは関数呼び出しからやらかしているためC呼び出しな低レベル処理が書けないという点
WebAPI用途のドメイン固有言語と言ってもいいかもしんない?
到るところでベンチマークが出ていてすら認めたくないのが笑える
https://postd.cc/the-way-of-the-gopher/
857デフォルトの名無しさん
2020/11/03(火) 14:25:22.75ID:cdE7yZQv erlangなんかはこういう発想で軽量プロセスにしてるよね。
とはいえCouchDBでしerlang使ってないけど。
とはいえCouchDBでしerlang使ってないけど。
858デフォルトの名無しさん
2020/11/03(火) 19:17:11.84ID:54lsvwds goは名前とマスコットキャラがダメ
859デフォルトの名無しさん
2020/11/03(火) 19:57:00.21ID:ggNJ+eTh サーバーサイドはGo一択でいいんじゃないか?
速いし運用もこれまでのlinuxの知識があれば問題ない
ライブラリも充実してるし
並行処理も便利
これまでforkを駆使して面倒なことしてたけどしなくて良くなった
速いし運用もこれまでのlinuxの知識があれば問題ない
ライブラリも充実してるし
並行処理も便利
これまでforkを駆使して面倒なことしてたけどしなくて良くなった
860デフォルトの名無しさん
2020/11/03(火) 20:15:39.32ID:L2dwgQ1p goも性能やスケールを突き詰めていくとダメよ。
https://www.atmarkit.co.jp/ait/spv/2002/10/news038.html
https://www.atmarkit.co.jp/ait/spv/2002/10/news038.html
861デフォルトの名無しさん
2020/11/03(火) 20:58:25.32ID:p/G0GWsV862デフォルトの名無しさん
2020/11/03(火) 21:11:05.72ID:OQJ1TfTq >>850
> csp(communicating sequential processes)
何ぞそれ?と思ってwiki読んだが、「応用」以前はハア?って感じだな。
応用部分は納得出来るが、それはどちらかというとモデリング&シミュレーションであって、(従来の)プログラミング言語って感じではない。
勿論それ以前の部分はプログラミング言語としてのCSPについて説明してあるはずなのだが、
大半の連中はこれ読んでも俺と同様「何のこっちゃ?」だと思うぜ。
それはさておき、記述しやすいのは事実だから、cspに金脈があるのならいきなりブレークするのだろう。
> csp(communicating sequential processes)
何ぞそれ?と思ってwiki読んだが、「応用」以前はハア?って感じだな。
応用部分は納得出来るが、それはどちらかというとモデリング&シミュレーションであって、(従来の)プログラミング言語って感じではない。
勿論それ以前の部分はプログラミング言語としてのCSPについて説明してあるはずなのだが、
大半の連中はこれ読んでも俺と同様「何のこっちゃ?」だと思うぜ。
それはさておき、記述しやすいのは事実だから、cspに金脈があるのならいきなりブレークするのだろう。
863デフォルトの名無しさん
2020/11/03(火) 21:21:56.26ID:OQJ1TfTq >>851
C++の現状に歴史的経緯と必然性があるのは認める。
しかしそれは新しく始める人にとっては関係ない話なのだから、言い訳にはならないだろ。
C++は(普通のプログラミング言語を目指すなら)ちょっと仕様を整理しないと駄目だよ。
ただC++陣営は「全部入り、仕様の整理は各人がコーディングルールで制限しろ」で多分考えてて、
確かにそれもありではあるのだが。
実際、C++を気に入ってる奴って、「俺がこうしたい」を記述する方法があるからだろうし。
他言語で「それは書けない」に遭遇すると本当にどうしようもないからね。
Goが受けてるのは簡単だからだよ。
PHPは簡単だがパフォーマンスと文法が糞過ぎ。
JSは非同期がウザ過ぎ、あとフニャフニャすぎて駄目。
Goは型もあるし!難しくないし!パフォーマンスも出るし!
となるだけ。俺個人はJSのフニャフニャっぷりが気に入ってるのでそこで止まってるが。
型あり言語出身の奴等が上記フローを流されたら順当にGoに行き着く。最近はTSに行ってるかもだが。
C++の現状に歴史的経緯と必然性があるのは認める。
しかしそれは新しく始める人にとっては関係ない話なのだから、言い訳にはならないだろ。
C++は(普通のプログラミング言語を目指すなら)ちょっと仕様を整理しないと駄目だよ。
ただC++陣営は「全部入り、仕様の整理は各人がコーディングルールで制限しろ」で多分考えてて、
確かにそれもありではあるのだが。
実際、C++を気に入ってる奴って、「俺がこうしたい」を記述する方法があるからだろうし。
他言語で「それは書けない」に遭遇すると本当にどうしようもないからね。
Goが受けてるのは簡単だからだよ。
PHPは簡単だがパフォーマンスと文法が糞過ぎ。
JSは非同期がウザ過ぎ、あとフニャフニャすぎて駄目。
Goは型もあるし!難しくないし!パフォーマンスも出るし!
となるだけ。俺個人はJSのフニャフニャっぷりが気に入ってるのでそこで止まってるが。
型あり言語出身の奴等が上記フローを流されたら順当にGoに行き着く。最近はTSに行ってるかもだが。
864デフォルトの名無しさん
2020/11/03(火) 21:22:40.23ID:OQJ1TfTq あとGoは意図的に「若者の楽園」を目指しているのが、「見た目は」奏効しているかも。
意図的に用語等を他言語と変えていて、既存言語既習者の参入障壁を上げている。
色々あるが今回ならgoroutine、やっぱりあれはgolwp(lightWeightProcessの略)とかが妥当だろ。
それをgoroutineなんて言葉を使うから、thread/lightWeightProcess/co-routine/greenthread等を知っている奴等は余計に混乱する。
ところがこれらを何も知らない若者は全く混乱しない。だから結果的に若者が後れを取らない。
ちゃんと用語を合わせた新規言語(Go以外は全部こうだが)を作った場合、
他言語既習者は文法だけの修得でがんがん進めるのに対し、
新規プログラミング学習者(=若者)はOOP等の「プログラミングそのもの」の部分で学習に時間がかかり、
早々に頭を抑えられて、結果、「老害」とわめくことになる。
Goのように意図的に既存言語から変更している場合、既存言語を知っている奴等だけが混乱する。
結果的に、既存言語既習者の流入が減り、「老害」が比較的少ない環境=若者にとって居心地が良い環境になるわけだ。
ただしそれは見た目だけで、実際は人材が枯渇してる。「老害」と共に「老兵」も来なくなるから当たり前だが。
例えば、806のスライド、作ったのは東大の学生のようだが、中身を見る限り、こいつは、
共有メモリを使ったことがないし、それが何なのかも理解してない。
というより多分Goのチャネルしか使ったことがない。
その程度の奴をカンファレンスに呼ばないといけないほど人材がいない。
そしてここで「Goのスケジューラが読むに値するコードだ」と吠えている馬鹿もそう。
その程度のコードをありがたがらないといけないほど全体のレベルが低い。
「空いてりゃ取ってくる」程度のスケジューラなんてすぐ書けるし、
むしろそれすら書けない馬鹿は死ね、なのがC/C++/Rustの世界だと思うが、Goはそうじゃない。
だからこの意味ではGoUserは「イキっている」のを自覚出来てない。
意図的に用語等を他言語と変えていて、既存言語既習者の参入障壁を上げている。
色々あるが今回ならgoroutine、やっぱりあれはgolwp(lightWeightProcessの略)とかが妥当だろ。
それをgoroutineなんて言葉を使うから、thread/lightWeightProcess/co-routine/greenthread等を知っている奴等は余計に混乱する。
ところがこれらを何も知らない若者は全く混乱しない。だから結果的に若者が後れを取らない。
ちゃんと用語を合わせた新規言語(Go以外は全部こうだが)を作った場合、
他言語既習者は文法だけの修得でがんがん進めるのに対し、
新規プログラミング学習者(=若者)はOOP等の「プログラミングそのもの」の部分で学習に時間がかかり、
早々に頭を抑えられて、結果、「老害」とわめくことになる。
Goのように意図的に既存言語から変更している場合、既存言語を知っている奴等だけが混乱する。
結果的に、既存言語既習者の流入が減り、「老害」が比較的少ない環境=若者にとって居心地が良い環境になるわけだ。
ただしそれは見た目だけで、実際は人材が枯渇してる。「老害」と共に「老兵」も来なくなるから当たり前だが。
例えば、806のスライド、作ったのは東大の学生のようだが、中身を見る限り、こいつは、
共有メモリを使ったことがないし、それが何なのかも理解してない。
というより多分Goのチャネルしか使ったことがない。
その程度の奴をカンファレンスに呼ばないといけないほど人材がいない。
そしてここで「Goのスケジューラが読むに値するコードだ」と吠えている馬鹿もそう。
その程度のコードをありがたがらないといけないほど全体のレベルが低い。
「空いてりゃ取ってくる」程度のスケジューラなんてすぐ書けるし、
むしろそれすら書けない馬鹿は死ね、なのがC/C++/Rustの世界だと思うが、Goはそうじゃない。
だからこの意味ではGoUserは「イキっている」のを自覚出来てない。
865デフォルトの名無しさん
2020/11/03(火) 21:23:08.75ID:OQJ1TfTq ただこれはGoの仕様だ。
実際いちいちグダグダ言われてもモチベーション下がるし、やりたいようにやらせろ、ってのはある。
そこで若者が天才的なコードを連発出来れば素晴らしい楽園が出来上がるわけだが、
実際はプログラミング自体、才能だけで突破出来るものではなく、地道な修練が必要なものだから、
そうは行かなかった、というだけ。(若いだけでは何ともならない)
結果的に「若者の楽園」=レベルの低い「馬鹿者の楽園」になってる。ただまあ、それもありだと思うけど。
ただそれによって本来はGo界にも存在したはずの「凄いコード」に触れられる機会を逸していることは認識した方がいいとは思うが。
だから「若者」に受けているだけだとは思うが、実際それも分かる。
今のC++の仕様なんて色々複雑になりすぎてるし、あれ見たら引くだろ。使いもしない細かい仕様が多すぎる。
Javaは無駄に清書させられる、C++は意味不明、Rustはコンパイルが通らん、CはGUIには不向き、ならGoになる。
他のスクリプト言語よりは速いし。
伝わるかな?言い方を変えればユース、サッカーのU21みたいなのをプログラミング言語界に意図的に作ってる。
そこでは若者が馬鹿やってる、勿論レベルは低いがフルレギュで戦ってる大人がそれを揶揄するのは野暮ってもの、みたいな。
実際「共有RAM知りません」「空なら取ってくるだけのスケジューラは凄いです」
(この後投稿するが)「なんとNodeはシングルスレッドでした!」とか、グーで殴るぞ、のレベルだろ。
ただそれでもそういう環境の方が合う奴もいるだろうから、本人が選べばいい。
実際いちいちグダグダ言われてもモチベーション下がるし、やりたいようにやらせろ、ってのはある。
そこで若者が天才的なコードを連発出来れば素晴らしい楽園が出来上がるわけだが、
実際はプログラミング自体、才能だけで突破出来るものではなく、地道な修練が必要なものだから、
そうは行かなかった、というだけ。(若いだけでは何ともならない)
結果的に「若者の楽園」=レベルの低い「馬鹿者の楽園」になってる。ただまあ、それもありだと思うけど。
ただそれによって本来はGo界にも存在したはずの「凄いコード」に触れられる機会を逸していることは認識した方がいいとは思うが。
だから「若者」に受けているだけだとは思うが、実際それも分かる。
今のC++の仕様なんて色々複雑になりすぎてるし、あれ見たら引くだろ。使いもしない細かい仕様が多すぎる。
Javaは無駄に清書させられる、C++は意味不明、Rustはコンパイルが通らん、CはGUIには不向き、ならGoになる。
他のスクリプト言語よりは速いし。
伝わるかな?言い方を変えればユース、サッカーのU21みたいなのをプログラミング言語界に意図的に作ってる。
そこでは若者が馬鹿やってる、勿論レベルは低いがフルレギュで戦ってる大人がそれを揶揄するのは野暮ってもの、みたいな。
実際「共有RAM知りません」「空なら取ってくるだけのスケジューラは凄いです」
(この後投稿するが)「なんとNodeはシングルスレッドでした!」とか、グーで殴るぞ、のレベルだろ。
ただそれでもそういう環境の方が合う奴もいるだろうから、本人が選べばいい。
866デフォルトの名無しさん
2020/11/03(火) 21:23:25.98ID:G4Sy/omH インメモリなキャッシュと分散データベースでメモリ管理コストが影響する幅は変わるに決まってるし、そうでなくとも実測で改善してるならそれが全てでしょ
ここで比較するならC/C++/Rustみたいな言語で書き切るコストやそれを行える人材を確保するコストに対して、Goのまま書き換えなり他の手段で対処するコストがどうなのかという話だと思うよ
JavaのGCだって今や複数のリリース元から日夜改善されてってる訳で
Go自体は良さがあると思ってるけど他を眉唾だなどと語り貶めす形で話をするのはいい気持ちしないなぁ
ここで比較するならC/C++/Rustみたいな言語で書き切るコストやそれを行える人材を確保するコストに対して、Goのまま書き換えなり他の手段で対処するコストがどうなのかという話だと思うよ
JavaのGCだって今や複数のリリース元から日夜改善されてってる訳で
Go自体は良さがあると思ってるけど他を眉唾だなどと語り貶めす形で話をするのはいい気持ちしないなぁ
867デフォルトの名無しさん
2020/11/03(火) 21:23:39.46ID:OQJ1TfTq あと話を聞いてる限り、新規の若者は「全部の文法」を抑えてから次に行こうとする。
本来はこれが一番効率がいいから当たり前なのだが、
C/C++はその点、古い文法=今では使うべきではない、というのがそのまま残っていて、
何も知らない若者がそれを活用しようとしてるのが散見される。
んで、「そんなん使うなボケ」と言ったら逆ギレされることが多々ある。
ただこれらも新規参入者にとっては落とし穴でしかないから、ウザイのは事実だよ。無いに越したことはない。
これらが存在する理由はレガシー=互換性だから、新しい言語なら比較的少ないのも事実。勿論Goも。
だからC/C++なんて最速枠でなければとっくに死んでるよ。C/C++は新規を獲得する努力をしてない。
本来はこれが一番効率がいいから当たり前なのだが、
C/C++はその点、古い文法=今では使うべきではない、というのがそのまま残っていて、
何も知らない若者がそれを活用しようとしてるのが散見される。
んで、「そんなん使うなボケ」と言ったら逆ギレされることが多々ある。
ただこれらも新規参入者にとっては落とし穴でしかないから、ウザイのは事実だよ。無いに越したことはない。
これらが存在する理由はレガシー=互換性だから、新しい言語なら比較的少ないのも事実。勿論Goも。
だからC/C++なんて最速枠でなければとっくに死んでるよ。C/C++は新規を獲得する努力をしてない。
868デフォルトの名無しさん
2020/11/03(火) 21:54:35.32ID:0gT2OZTN >それをgoroutineなんて言葉を使うから、thread/lightWeightProcess/co-routine/greenthread等を知っている奴等は余計に混乱する。
名前だけ見てコルーチンみたいなものだろうなんて思い込むうのはおっちょこちょいだろうが
使ってみりゃすぐわかるだろう、普通。
名前だけ見てコルーチンみたいなものだろうなんて思い込むうのはおっちょこちょいだろうが
使ってみりゃすぐわかるだろう、普通。
869デフォルトの名無しさん
2020/11/03(火) 22:02:11.61ID:foawy7GJ つーか Go の発案者て老人ばっかりじゃなかったっけ?
なんか皆 C++ 嫌い(それもいかにもロートルにありそうな理由)で
それであえてC++的な要素(ジェネリック、継承によるオブジェクトの多態モデル
try..catchスタイルの例外等々)は全部入れないようにしたって話だが
つまり若者向けではなく、モダンなプログラムをやりたいがCではきついので
ちょっとだけモダンになったCっぽいシンプルな言語、みたいなイメージだと思ってた
なんか皆 C++ 嫌い(それもいかにもロートルにありそうな理由)で
それであえてC++的な要素(ジェネリック、継承によるオブジェクトの多態モデル
try..catchスタイルの例外等々)は全部入れないようにしたって話だが
つまり若者向けではなく、モダンなプログラムをやりたいがCではきついので
ちょっとだけモダンになったCっぽいシンプルな言語、みたいなイメージだと思ってた
870デフォルトの名無しさん
2020/11/03(火) 22:10:57.27ID:OQJ1TfTq871デフォルトの名無しさん
2020/11/03(火) 22:17:11.15ID:ab1rhHuA 今日もイキリの神様が暴れているのか
872デフォルトの名無しさん
2020/11/03(火) 22:28:43.57ID:XctsM+Su >>870
たくさん書き込んでるけどもう良いだろ、Rubyスレに帰ろうな
たくさん書き込んでるけどもう良いだろ、Rubyスレに帰ろうな
873デフォルトの名無しさん
2020/11/03(火) 22:33:32.93ID:OQJ1TfTq >>856
Nodeがシングルスレッドなのは基本中の基本で、そんなのでこんな記事書いてること自体がびっくりだよ。
お前はそれすら知らずにNode使ってたのかよ!(Go界は人材不足だからこんなもんかもしれんが)
そこら辺がWeb系が馬鹿ばかり、と言われる点だと思うよ。これで仕事してることになっちゃってるし。
ただこいつのイベントループの部分の理解も間違ってると思うけど。
イベントループを抜ければスタックは空になる。スタックフレームガーなんて事にはならない。
そして「燃え上がるグラフ」になってるのはお前がそう組んだからで、完全に組み方が悪い。
(燃え上がってるのは「負荷」ではなくて自分が呼んだ「関数ネスト」だから)
ただまあ、組み方が悪かろうが何しようが、動くってのは重要なんだが。
だからこのケース(=同じ奴=同じ技術レベルの奴)が組んで動くようになったんだから、Goの方が向いているのは事実だ。
状況からすると、timeoutした場合はおそらく優先処理しないといけなくて、
それを放置して次のリクエストを積んだら余計な手間が発生するのだろう。
そうじゃないと「燃え上がるグラフ」にはならないから。
この点、NodeというかJSのイベントループには優先順位がないから、筆者の言うように「最後まで待たされる」事になる。
だから優先順位を付ける必要がある場合は自前でsetTimeoutをラップしてやる必要があるけど、逆に言えばそれだけだね。
それすら思いつかない人でもGoなら上手く行く、というのもまた重要な点ではあるけど、
781のブログと同様に噛みつかれ、「お前のコードが糞なだけ」と言われた場合、それは事実だと思うよ。
(なおこのケースはI/Oのようなので優先順位付加ではなく自前キューの方がいいが)
Nodeがシングルスレッドなのは基本中の基本で、そんなのでこんな記事書いてること自体がびっくりだよ。
お前はそれすら知らずにNode使ってたのかよ!(Go界は人材不足だからこんなもんかもしれんが)
そこら辺がWeb系が馬鹿ばかり、と言われる点だと思うよ。これで仕事してることになっちゃってるし。
ただこいつのイベントループの部分の理解も間違ってると思うけど。
イベントループを抜ければスタックは空になる。スタックフレームガーなんて事にはならない。
そして「燃え上がるグラフ」になってるのはお前がそう組んだからで、完全に組み方が悪い。
(燃え上がってるのは「負荷」ではなくて自分が呼んだ「関数ネスト」だから)
ただまあ、組み方が悪かろうが何しようが、動くってのは重要なんだが。
だからこのケース(=同じ奴=同じ技術レベルの奴)が組んで動くようになったんだから、Goの方が向いているのは事実だ。
状況からすると、timeoutした場合はおそらく優先処理しないといけなくて、
それを放置して次のリクエストを積んだら余計な手間が発生するのだろう。
そうじゃないと「燃え上がるグラフ」にはならないから。
この点、NodeというかJSのイベントループには優先順位がないから、筆者の言うように「最後まで待たされる」事になる。
だから優先順位を付ける必要がある場合は自前でsetTimeoutをラップしてやる必要があるけど、逆に言えばそれだけだね。
それすら思いつかない人でもGoなら上手く行く、というのもまた重要な点ではあるけど、
781のブログと同様に噛みつかれ、「お前のコードが糞なだけ」と言われた場合、それは事実だと思うよ。
(なおこのケースはI/Oのようなので優先順位付加ではなく自前キューの方がいいが)
874デフォルトの名無しさん
2020/11/03(火) 22:33:55.31ID:OQJ1TfTq ただこれは「後付」であって、ここまで解明していればNodeでも対策は簡単に出来るわけだが、
実際はここまで解明するまでに時間がかかる。
AmazonS3がそういった類の、
つまり「timeoutのエラー処理を優先的に処理しないとその後の処理も遅れます?」みたいな特性を持っているとすると、
スペック上からは見えない落とし穴であり、Nodeなら嵌るがGoなら(知らなくても)嵌らない、というのはあり得る。
それはやっぱりNodeのシングルスレッドアーキテクチャの方が世間(他言語)からは特殊で、
Nodeだけ嵌り得る落とし穴も世の中には存在するということ。
こういうのに遭遇したくない場合、Goの方が安牌、というのはその通り。この点はNodeだけが特殊だから。
勿論この人が最初からGo使ってたら一番幸せだったろう、というのもその通り。
実際はここまで解明するまでに時間がかかる。
AmazonS3がそういった類の、
つまり「timeoutのエラー処理を優先的に処理しないとその後の処理も遅れます?」みたいな特性を持っているとすると、
スペック上からは見えない落とし穴であり、Nodeなら嵌るがGoなら(知らなくても)嵌らない、というのはあり得る。
それはやっぱりNodeのシングルスレッドアーキテクチャの方が世間(他言語)からは特殊で、
Nodeだけ嵌り得る落とし穴も世の中には存在するということ。
こういうのに遭遇したくない場合、Goの方が安牌、というのはその通り。この点はNodeだけが特殊だから。
勿論この人が最初からGo使ってたら一番幸せだったろう、というのもその通り。
875デフォルトの名無しさん
2020/11/03(火) 22:34:19.61ID:OQJ1TfTq ただgoroutineって優先順位付けられたっけ?
何かこの人たまたま直ってるだけで、さらに負荷かけたらやっぱだめでした、になるだけの気がするが。
「燃え上がるグラフ」になってるのは「処理が遅い」のではなく「処理時のネストが深い」だからね。
AmazonS3のせいでもなくて、
いわゆる「コールバック地獄」的な組み方=コールバックを深くネストして『最初の段階』で全部積み上げてしまうから、
後で止まれなくて実はtimeoutしてた時に余計な処理が多々発生してネストが深くなっているだけの気はする。
ただこの手の「不味い組み方」な奴はJSには多いのも事実。もっとフラットに組めよ、と言っても通じないし。
多分彼等にとってはJSの非同期ってのが至極相性が悪くて、
彼等的に非同期を解消する方法がコールバックネストしかないのだと思う。
その点、Goだと最初から同期で書けるので、そういった「糞コード」には(初心者でも)ならない。
この辺はC/C++/Rustだと「お前が糞なだけ」で片づけられるだろうけど、
俺自身は「初心者でも糞コードになりにくい」のは大変良い特性だとは思う。(というよりこの点はJSが糞なだけだが)
というわけで俺のその記事に対する感想は、
goroutineが優先順位付けられた場合:Nodeだけ嵌る落とし穴に命中してご愁傷様でした
goroutineが優先順位付けられなかった場合:初心者JS使いだけが何故か嵌る糞コードになっててご愁傷様でした
だな。多分後者で、初心者でも糞コードになりにくいGoだから救われた、だけの気がする。
(Goが良いというよりはJSの非同期ってのが糞コードの産地になってて、筆者もそうだっただけだが)
何かこの人たまたま直ってるだけで、さらに負荷かけたらやっぱだめでした、になるだけの気がするが。
「燃え上がるグラフ」になってるのは「処理が遅い」のではなく「処理時のネストが深い」だからね。
AmazonS3のせいでもなくて、
いわゆる「コールバック地獄」的な組み方=コールバックを深くネストして『最初の段階』で全部積み上げてしまうから、
後で止まれなくて実はtimeoutしてた時に余計な処理が多々発生してネストが深くなっているだけの気はする。
ただこの手の「不味い組み方」な奴はJSには多いのも事実。もっとフラットに組めよ、と言っても通じないし。
多分彼等にとってはJSの非同期ってのが至極相性が悪くて、
彼等的に非同期を解消する方法がコールバックネストしかないのだと思う。
その点、Goだと最初から同期で書けるので、そういった「糞コード」には(初心者でも)ならない。
この辺はC/C++/Rustだと「お前が糞なだけ」で片づけられるだろうけど、
俺自身は「初心者でも糞コードになりにくい」のは大変良い特性だとは思う。(というよりこの点はJSが糞なだけだが)
というわけで俺のその記事に対する感想は、
goroutineが優先順位付けられた場合:Nodeだけ嵌る落とし穴に命中してご愁傷様でした
goroutineが優先順位付けられなかった場合:初心者JS使いだけが何故か嵌る糞コードになっててご愁傷様でした
だな。多分後者で、初心者でも糞コードになりにくいGoだから救われた、だけの気がする。
(Goが良いというよりはJSの非同期ってのが糞コードの産地になってて、筆者もそうだっただけだが)
876デフォルトの名無しさん
2020/11/03(火) 22:46:43.82ID:OQJ1TfTq >>866
ついでだから本家の方読んできた。
まずそもそもReadStatesをそんなにバカスカ更新するようなアーキが必要なのか?という疑問はあるが、
それはさておき。
これは、多数のオブジェクトを「生存したまま」でメモリを埋める、
つまりオンメモリDBのような使い方をするアプリとGCが絶望的に相性が悪くて、それに該当した、ということなのだろう。
これはGoがショボイというよりはGCの限界で、C++/Rustしかねえわな、ということだと思うよ。
JavaでもC#でも同じ結果になる気はする。
だからそういうアプリでGC言語使っちゃ駄目、というのが教訓だと思うよ。
ついでだから本家の方読んできた。
まずそもそもReadStatesをそんなにバカスカ更新するようなアーキが必要なのか?という疑問はあるが、
それはさておき。
これは、多数のオブジェクトを「生存したまま」でメモリを埋める、
つまりオンメモリDBのような使い方をするアプリとGCが絶望的に相性が悪くて、それに該当した、ということなのだろう。
これはGoがショボイというよりはGCの限界で、C++/Rustしかねえわな、ということだと思うよ。
JavaでもC#でも同じ結果になる気はする。
だからそういうアプリでGC言語使っちゃ駄目、というのが教訓だと思うよ。
877デフォルトの名無しさん
2020/11/03(火) 23:20:17.15ID:UEeX42rQ マジで怖いんだけどこの人
何かやらかさないか心配
何かやらかさないか心配
878デフォルトの名無しさん
2020/11/03(火) 23:44:46.53ID:cdE7yZQv お前ほんとに学習しないのな。
879デフォルトの名無しさん
2020/11/03(火) 23:52:01.26ID:pWieQE6j Ruby のコンパイルに、1CPU なら、20分掛かるけど、
4CPUなら、5分で済む
CPUセントリックな処理では、CPU並列処理は意味がある
4CPUなら、5分で済む
CPUセントリックな処理では、CPU並列処理は意味がある
880デフォルトの名無しさん
2020/11/04(水) 00:08:44.43ID:BNFfXKWA >>862
cspは概念・モデリングっつう理解でだいたいいいと思うよ。
昔から並行処理システム関わった奴ならたいていは似たようなモデルは考えてる。
cspはそれを厳密に数学的に記述するって感じ。
極端なこと言えばメッセージでやり取りしましょう、だ。
っで、goはプログラミング言語としてgoroutineとchannelがあるから他の言語より並行処理向き。
go以外なら古くはadaやなんかもそう。タスクにランデブポートっつうのがある。
erlangも似たようなメッセージ機構はあるんじゃなかろうか。
本質的に並行処理ってのは非同期的な処理システムなわけだけど、
非同期ioとコールバック(やシンタックスシュガー)でやるより、独自に動く実行体が複数あってそれらがメッセージ通して協調動作するってシステムの方が好きだ。
cspは概念・モデリングっつう理解でだいたいいいと思うよ。
昔から並行処理システム関わった奴ならたいていは似たようなモデルは考えてる。
cspはそれを厳密に数学的に記述するって感じ。
極端なこと言えばメッセージでやり取りしましょう、だ。
っで、goはプログラミング言語としてgoroutineとchannelがあるから他の言語より並行処理向き。
go以外なら古くはadaやなんかもそう。タスクにランデブポートっつうのがある。
erlangも似たようなメッセージ機構はあるんじゃなかろうか。
本質的に並行処理ってのは非同期的な処理システムなわけだけど、
非同期ioとコールバック(やシンタックスシュガー)でやるより、独自に動く実行体が複数あってそれらがメッセージ通して協調動作するってシステムの方が好きだ。
881デフォルトの名無しさん
2020/11/04(水) 00:15:06.09ID:BNFfXKWA >>876
まぁーやっぱ、gcってよくねーわ。
捨てる前提のプロトタイプにはgcあり言語もよいと思う、ほんで大部分の案件はそれで十分ってのもあっる。
げももっと性能を、、、てやると今なら c/c++/rust の3つしかナイショ。
まぁーやっぱ、gcってよくねーわ。
捨てる前提のプロトタイプにはgcあり言語もよいと思う、ほんで大部分の案件はそれで十分ってのもあっる。
げももっと性能を、、、てやると今なら c/c++/rust の3つしかナイショ。
882デフォルトの名無しさん
2020/11/04(水) 00:48:58.46ID:thexrnOY >>880
それアクターモデルだろよ、と思ってwiki確認したら、CSPがモロに書いてあったわ。
ただ、アクターは浮かんでは消え、という印象があるが。
smalltalk信者等、通信したい奴は確かにいるようだが、それがイマイチ何になるのか明確でない。
あと、コード上で通信したいのならGoだが、アクターモデル自体は普通にオブジェクト指向で組めるし、
C++なら(あまりよろしくはないが) >> と << をオーバーロードしてそれっぽく見せることは可能だ。
実際その方がgoroutineより何倍も速く動く。
Erlangは俺も以下を半分くらい読んだ程度しか知らないが、
https://www.ymotongpoo.com/works/lyse-ja/index.html
あれは実用本位で、理論側から出てきたものでは全然無い。
電話交換機筐体を複数並べてスケールアウトした時にも性能が低下しないように作られてる。
だから最初から共有RAMなんて禁止されてる。そして当然メッセージ交換だが、
最初から上記のような疎結合でのメッセージ交換を想定されてるから、
Goみたいな密結合を想定されているものとはちょっと違うが。
それアクターモデルだろよ、と思ってwiki確認したら、CSPがモロに書いてあったわ。
ただ、アクターは浮かんでは消え、という印象があるが。
smalltalk信者等、通信したい奴は確かにいるようだが、それがイマイチ何になるのか明確でない。
あと、コード上で通信したいのならGoだが、アクターモデル自体は普通にオブジェクト指向で組めるし、
C++なら(あまりよろしくはないが) >> と << をオーバーロードしてそれっぽく見せることは可能だ。
実際その方がgoroutineより何倍も速く動く。
Erlangは俺も以下を半分くらい読んだ程度しか知らないが、
https://www.ymotongpoo.com/works/lyse-ja/index.html
あれは実用本位で、理論側から出てきたものでは全然無い。
電話交換機筐体を複数並べてスケールアウトした時にも性能が低下しないように作られてる。
だから最初から共有RAMなんて禁止されてる。そして当然メッセージ交換だが、
最初から上記のような疎結合でのメッセージ交換を想定されてるから、
Goみたいな密結合を想定されているものとはちょっと違うが。
883デフォルトの名無しさん
2020/11/04(水) 00:55:48.53ID:thexrnOY >>881
ちなみに本家の方はコメントも付いてて、GoUserが吠えてる(事になってる。
ただあの程度で噛みつきと捕らえられるのも厳しい気はするが)
Rust試す前にGoのバージョン上げろよ、というのもそうだが、
キャッシュサーバー使えよ、というのは確かにな、とは思った。
ちなみに本家の方はコメントも付いてて、GoUserが吠えてる(事になってる。
ただあの程度で噛みつきと捕らえられるのも厳しい気はするが)
Rust試す前にGoのバージョン上げろよ、というのもそうだが、
キャッシュサーバー使えよ、というのは確かにな、とは思った。
884デフォルトの名無しさん
2020/11/04(水) 04:35:34.49ID:o5YVwgYf 言葉の端々に今どきの若者は〜みたいなのを感じる
周りから相当クソ扱いされて5chで鬱憤晴らしてるんだろうな
周りから相当クソ扱いされて5chで鬱憤晴らしてるんだろうな
885デフォルトの名無しさん
2020/11/04(水) 06:03:20.20ID:bB+A/rRK それか単なるヒキニート
886デフォルトの名無しさん
2020/11/04(水) 07:42:42.00ID:a9nrTc1S887デフォルトの名無しさん
2020/11/04(水) 08:59:07.22ID:thexrnOY >>886
参照カウンタのGCとマーク&スイープのGCは意味合いが全然違う。
それを一緒くたにしてるようでは駄目だよ。
そこら辺がGoスゲーって言ってる奴のレベルが低いところだよ。
それ以外も君は間違いすぎていちいち指摘するのは諦めたけど、
多分もうちょっと勉強した方がいい。
Goは酷い言語でもないけど、凄い言語でもない。
860の本家にRustと冷静に比較しているコメントがあるから読んでくるといい。
参照カウンタのGCとマーク&スイープのGCは意味合いが全然違う。
それを一緒くたにしてるようでは駄目だよ。
そこら辺がGoスゲーって言ってる奴のレベルが低いところだよ。
それ以外も君は間違いすぎていちいち指摘するのは諦めたけど、
多分もうちょっと勉強した方がいい。
Goは酷い言語でもないけど、凄い言語でもない。
860の本家にRustと冷静に比較しているコメントがあるから読んでくるといい。
888デフォルトの名無しさん
2020/11/04(水) 10:32:02.91ID:BNFfXKWA889デフォルトの名無しさん
2020/11/04(水) 10:57:28.03ID:BNFfXKWA >>887
広義では参照カウンタもgcじゃん。
gcも色々改良されてるし未だに古典的なマークスイープgcのみってのはあまり無いんじゃろか。
だから案件の多いweb系とかアプリとかの上のレイヤーでgcが問題になるケースはあまり無い。
gcはそれより下のエンジンとかのシステムレイヤーで問題視されることが多い。
で、一応goはc/c++/rust同様のシステム言語のくくりで語られることもあるからその辺から叩かれたりするけど、そうじゃなくて上のレイヤーの言語として使えばいい感じの言語だと思う。
広義では参照カウンタもgcじゃん。
gcも色々改良されてるし未だに古典的なマークスイープgcのみってのはあまり無いんじゃろか。
だから案件の多いweb系とかアプリとかの上のレイヤーでgcが問題になるケースはあまり無い。
gcはそれより下のエンジンとかのシステムレイヤーで問題視されることが多い。
で、一応goはc/c++/rust同様のシステム言語のくくりで語られることもあるからその辺から叩かれたりするけど、そうじゃなくて上のレイヤーの言語として使えばいい感じの言語だと思う。
890デフォルトの名無しさん
2020/11/04(水) 11:27:49.81ID:8aX5ek4k 哀しき中間管理職みたいな言語なんだね
891デフォルトの名無しさん
2020/11/04(水) 11:50:37.38ID:8aX5ek4k >>887
> 860の本家にRustと冷静に比較しているコメントがあるから読んでくるといい。
>>860 の本家ってこれかな?
Why Discord is switching from Go to Rust(Discord Blog)
https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f
コメント58件あるけどGo信者の圧が凄い…
> 860の本家にRustと冷静に比較しているコメントがあるから読んでくるといい。
>>860 の本家ってこれかな?
Why Discord is switching from Go to Rust(Discord Blog)
https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f
コメント58件あるけどGo信者の圧が凄い…
892デフォルトの名無しさん
2020/11/04(水) 11:56:43.57ID:q9h9Yk1J >>887
参照カウントに対して、俺がどういう意図で話してるかわかってる?
一緒くたにしてるわけではなくて、参照カウントのメリットってのもきちんとあるんだよ。
勘違いが多すぎるのはお前の方だと思うよ。
グリーンスレッド知らなかったんだっけ?
グリーンスレッドの切り替えにはコストがかかるんだっけ?
全部スレッドの話だよな。
いちいち都合の悪いところをネグってレスつけるのやめろよ。
参照カウントに対して、俺がどういう意図で話してるかわかってる?
一緒くたにしてるわけではなくて、参照カウントのメリットってのもきちんとあるんだよ。
勘違いが多すぎるのはお前の方だと思うよ。
グリーンスレッド知らなかったんだっけ?
グリーンスレッドの切り替えにはコストがかかるんだっけ?
全部スレッドの話だよな。
いちいち都合の悪いところをネグってレスつけるのやめろよ。
893デフォルトの名無しさん
2020/11/04(水) 11:58:46.84ID:5Emk5REP Go vs Rust、じゃなくてむしろこの2つ以外が要らんのだけど
取り敢えずGoが分からないグリーンスレッド君がRustを理解出来るとは思えない(笑)
取り敢えずGoが分からないグリーンスレッド君がRustを理解出来るとは思えない(笑)
894デフォルトの名無しさん
2020/11/04(水) 12:03:20.78ID:q9h9Yk1J 参照カウント方式には結構なメリットがある。
別スレッドも必要ないし、速度も出る。ストップザ・ワールドも必要ない。
オブジェクトの開放が「かならず」「一定の場所」で行われてデストラクタの動作タイミングを保証できる。
弱参照がきっちりしてればそれこそ循環参照もそれほど恐れることはない。
組み合わせて使うのが良いと思うよ。俺的には。
だからこそ引き合いに出したんだが。
C++好きならshared_ptrあたりから理解が及びそうなもんなんだが。
別スレッドも必要ないし、速度も出る。ストップザ・ワールドも必要ない。
オブジェクトの開放が「かならず」「一定の場所」で行われてデストラクタの動作タイミングを保証できる。
弱参照がきっちりしてればそれこそ循環参照もそれほど恐れることはない。
組み合わせて使うのが良いと思うよ。俺的には。
だからこそ引き合いに出したんだが。
C++好きならshared_ptrあたりから理解が及びそうなもんなんだが。
895デフォルトの名無しさん
2020/11/04(水) 12:04:06.32ID:q9h9Yk1J896デフォルトの名無しさん
2020/11/04(水) 12:22:41.50ID:Q20JRtoy 循環参照検出付きの参照カウント方式は、GC?
897デフォルトの名無しさん
2020/11/04(水) 15:06:50.39ID:q9h9Yk1J >>896
自動的にメモリを開放してくれて、フラグメントを解消してくれる仕組みは、大雑把に言ってガベージコレクションの仲間に入れるもんじゃない?
自動的にメモリを開放してくれて、フラグメントを解消してくれる仕組みは、大雑把に言ってガベージコレクションの仲間に入れるもんじゃない?
898デフォルトの名無しさん
2020/11/04(水) 16:33:07.68ID:bB+A/rRK 誰かこの人形劇を止めてくれよ
899デフォルトの名無しさん
2020/11/04(水) 18:33:48.20ID:q9h9Yk1J とりあえずGoのリリースノートを全部読んでから話してほしいな。彼には。
1.14あたりでgoroutineのスケジューラちょっと変わってるし。
1.14あたりでgoroutineのスケジューラちょっと変わってるし。
900デフォルトの名無しさん
2020/11/04(水) 22:39:50.46ID:thexrnOY >>889
> 広義では参照カウンタもgcじゃん。
そう。俺も「参照カウンタのGC」とも言っている。
馬鹿は放置として、君も疑問のようだから回答しておくと、
参照カウンタ方式は「ユーザーが間違ってない」前提が必要で、「ユーザー補助」でしかない。
対してマーク&スイープは「ユーザーが間違ってても」GCが為されるから、「システム保護」なんだよ。
だから役割が全然違う。少なくとも真面目に24時間365日動作させるつもりなら、単純に交換は出来ない。
これが結局何だかんだでマーク&スイープから離れられない理由で、
JavaもC#もJSも、勿論Goもマーク&スイープしてる。
勿論それが重いのはみんな分かってるから、色々工夫してるけど、最終的にはやるしかないから。
だから参照カウンタ方式のGCでマーク&スイープと同様に「システム保護」を得る為には、
「ユーザーがどんな書き方をしても」解放されることが必要で、
例えば>>896のようなのが有ればいいけど、これで実装してる例ってあったっけ?
(なお循環参照の検出自体は簡単だが、適切に起動する為のイベントがないから、実装時に困るのはそこだと思うが)
> そうじゃなくて上のレイヤーの言語として使えばいい感じの言語だと思う。
そこは今どっかりとC#が根を下ろそうとしている。
C#は俺は良い言語だと思うけど、Javaに食われて死にそうなのがなあ、という見方だったが、
少なくとも俺の予想以上には大健闘していて、生き残るかもしれないなあ、とは思いつつある。
これまではC#もC++もWeb系が手薄だったけど、どっちもガチで整備し始めてるから、それが完了した時にどうなるかだね。
そしたら本当にGoを使う意味が全くなくなる。
逆にRustはCPU負荷無しで「システム保護」出来るわけだから、GC言語を皆殺しにかかってる。
そしてC並に速いのだから、確かに最終兵器ではあるんだよ。盛り上がる理由はそれ。
> 広義では参照カウンタもgcじゃん。
そう。俺も「参照カウンタのGC」とも言っている。
馬鹿は放置として、君も疑問のようだから回答しておくと、
参照カウンタ方式は「ユーザーが間違ってない」前提が必要で、「ユーザー補助」でしかない。
対してマーク&スイープは「ユーザーが間違ってても」GCが為されるから、「システム保護」なんだよ。
だから役割が全然違う。少なくとも真面目に24時間365日動作させるつもりなら、単純に交換は出来ない。
これが結局何だかんだでマーク&スイープから離れられない理由で、
JavaもC#もJSも、勿論Goもマーク&スイープしてる。
勿論それが重いのはみんな分かってるから、色々工夫してるけど、最終的にはやるしかないから。
だから参照カウンタ方式のGCでマーク&スイープと同様に「システム保護」を得る為には、
「ユーザーがどんな書き方をしても」解放されることが必要で、
例えば>>896のようなのが有ればいいけど、これで実装してる例ってあったっけ?
(なお循環参照の検出自体は簡単だが、適切に起動する為のイベントがないから、実装時に困るのはそこだと思うが)
> そうじゃなくて上のレイヤーの言語として使えばいい感じの言語だと思う。
そこは今どっかりとC#が根を下ろそうとしている。
C#は俺は良い言語だと思うけど、Javaに食われて死にそうなのがなあ、という見方だったが、
少なくとも俺の予想以上には大健闘していて、生き残るかもしれないなあ、とは思いつつある。
これまではC#もC++もWeb系が手薄だったけど、どっちもガチで整備し始めてるから、それが完了した時にどうなるかだね。
そしたら本当にGoを使う意味が全くなくなる。
逆にRustはCPU負荷無しで「システム保護」出来るわけだから、GC言語を皆殺しにかかってる。
そしてC並に速いのだから、確かに最終兵器ではあるんだよ。盛り上がる理由はそれ。
901デフォルトの名無しさん
2020/11/04(水) 23:37:57.93ID:7oWZmWjZ902デフォルトの名無しさん
2020/11/05(木) 00:53:39.27ID:iOSFoZGZ >>900
ユーザーが参照カウントを上げ下げすることなんてほぼないぞ
言語内の仕組みなんだから
C拡張とか書く場合もたいていスコープ抜けたら
それまでの一時変数は全解放するって書き方があるし
他のGCでもそれは同じ
だからほとんど中身の仕組みを意識しなくても良い
むしろそれができないなら実装がしょぼい
ユーザーが参照カウントを上げ下げすることなんてほぼないぞ
言語内の仕組みなんだから
C拡張とか書く場合もたいていスコープ抜けたら
それまでの一時変数は全解放するって書き方があるし
他のGCでもそれは同じ
だからほとんど中身の仕組みを意識しなくても良い
むしろそれができないなら実装がしょぼい
903デフォルトの名無しさん
2020/11/05(木) 01:09:47.48ID:dYXzTkiF Goが人気出た大きな理由の一つは、過不足がなく比較的高品質な標準ライブラリ
その点でいえばNodeも同じだが、Nodeと違って変なのを噛まさず標準ライブラリを素のまま普通に使うことを美徳とする文化があるのも効いてる
くだらない流行り廃りに惑わされずに決まったものをただ普通に使えばよいというのが近年の複雑化しすぎたWeb界には受けた
Rustはそのへんは全然ダメだね
その点でいえばNodeも同じだが、Nodeと違って変なのを噛まさず標準ライブラリを素のまま普通に使うことを美徳とする文化があるのも効いてる
くだらない流行り廃りに惑わされずに決まったものをただ普通に使えばよいというのが近年の複雑化しすぎたWeb界には受けた
Rustはそのへんは全然ダメだね
904デフォルトの名無しさん
2020/11/05(木) 01:17:10.50ID:x7P4NeVz またそんな煽りを…
まったくオマイラときたら変な輩を呼び寄せる呪文を唱える
才能に関しては天才的だな
まったくオマイラときたら変な輩を呼び寄せる呪文を唱える
才能に関しては天才的だな
905デフォルトの名無しさん
2020/11/05(木) 07:04:56.97ID:40Zkap5B >>900
それで実装してる例がPython
それで実装してる例がPython
906デフォルトの名無しさん
2020/11/05(木) 07:24:03.07ID:td0oky8W RustはRustでC++の標準ライブラリがゴテゴテと九龍城が如く聳え立ってきた反動でもあるので許してやれという気持ちがある
それにしたって初期の標準が貧弱で標準に取り込むまでの右往左往が長すぎるというのも分かるが
それにしたって初期の標準が貧弱で標準に取り込むまでの右往左往が長すぎるというのも分かるが
907デフォルトの名無しさん
2020/11/05(木) 09:00:41.20ID:/CgVmiK8908デフォルトの名無しさん
2020/11/05(木) 09:25:14.26ID:gkJnxR7E Rustは今でも面白いよ。標準ライブラリが貧弱でも大して困らんけ、並列ランタイムだけは標準に入れて欲しかった。
メジャーなtokioとasync-stdの両対応してる場合も有るけど、大抵枝分かれしてて共存も出来ないから無駄なんだよな。
メジャーなtokioとasync-stdの両対応してる場合も有るけど、大抵枝分かれしてて共存も出来ないから無駄なんだよな。
909デフォルトの名無しさん
2020/11/05(木) 10:34:46.60ID:/CgVmiK8910デフォルトの名無しさん
2020/11/05(木) 10:59:39.83ID:OMGYJi8L 参照カウントって、本当に「言語の仕組み」なの?
911デフォルトの名無しさん
2020/11/05(木) 11:05:21.21ID:x7P4NeVz912デフォルトの名無しさん
2020/11/05(木) 11:08:21.64ID:+m168BhN C#が充実したらGoが要らなくなる論は全然わからんな。
一体どういう理屈なんだろうか。
同じサーバサイドでもお互いに分担するエリア全然違うくないか?
というか、全然手薄でもなかったし。C#。
一体どういう理屈なんだろうか。
同じサーバサイドでもお互いに分担するエリア全然違うくないか?
というか、全然手薄でもなかったし。C#。
913デフォルトの名無しさん
2020/11/05(木) 11:27:44.88ID:pymKzIg5 ファットなランタイムに依存しながらも比較的デプロイ時の取り回しが良い
わりと固定されたツールセットで無難に迷わずに使える
まあ近いと言えば近いんじゃないかな
C#をバリバリ使ってるとこだとGoの出番はないだろうし
わりと固定されたツールセットで無難に迷わずに使える
まあ近いと言えば近いんじゃないかな
C#をバリバリ使ってるとこだとGoの出番はないだろうし
914デフォルトの名無しさん
2020/11/05(木) 11:59:24.87ID:/CgVmiK8 C#ならGUIもサービスも書けるし遅くもないから、Windowsアプリを書くなら鉄板の選択肢だよな
どうしても高速化したいとか解析されたくない時だけC++
ただ事前にランタイムのインストールが必要なんで、Linuxとかマルチプラットフォーム展開の敷居がちょっとあるんで、CLIツールとか書いてもGoに比べてデプロイが不便
充分に住み分けされてるからどっちを使う論争は不毛
どうしても高速化したいとか解析されたくない時だけC++
ただ事前にランタイムのインストールが必要なんで、Linuxとかマルチプラットフォーム展開の敷居がちょっとあるんで、CLIツールとか書いてもGoに比べてデプロイが不便
充分に住み分けされてるからどっちを使う論争は不毛
915デフォルトの名無しさん
2020/11/05(木) 12:39:02.69ID:+m168BhN Windowsアプリを作るときの鉄板に関しては異論はないが、C#のデプロイはガッカリ仕様だぞ。
.Net 5でも。
.Net 5でも。
916デフォルトの名無しさん
2020/11/05(木) 13:08:26.70ID:LX/aXWmP SCDも知らんのか
917デフォルトの名無しさん
2020/11/05(木) 13:22:01.75ID:+m168BhN >>916
SCDでデプロイしたことあるか?
むちゃくちゃファイル数多いぞ。
SingleBinaryが自己展開ではなく直接アセンブリをロードする形にやっと.Net5でなったけど、そのままだとSingleBinaryと言ってるくせに数ファイル漏れるので、
それも完全にSingleBinaryにするには結局自己展開ファイルにせざるを得ない。
ファイルサイズも結構でかくて、最近は使ってるメソッドのみと言う形でTrimできるようになったけど、誤爆もまだまだあって実用とは言えんし。
ホントにやってみ。期待してただけにすごくガッカリしたから。
SCDでデプロイしたことあるか?
むちゃくちゃファイル数多いぞ。
SingleBinaryが自己展開ではなく直接アセンブリをロードする形にやっと.Net5でなったけど、そのままだとSingleBinaryと言ってるくせに数ファイル漏れるので、
それも完全にSingleBinaryにするには結局自己展開ファイルにせざるを得ない。
ファイルサイズも結構でかくて、最近は使ってるメソッドのみと言う形でTrimできるようになったけど、誤爆もまだまだあって実用とは言えんし。
ホントにやってみ。期待してただけにすごくガッカリしたから。
918デフォルトの名無しさん
2020/11/05(木) 14:44:49.50ID:BWbga0la >>908
Rustは非同期まわりが不安だよな。
Rustは非同期まわりが不安だよな。
919デフォルトの名無しさん
2020/11/05(木) 17:50:15.36ID:goPbZhqC >>914
F#とかどうよ
https://qiita.com/cannorin/items/59d79cc9a3b64c761cd4#%E9%96%8B%E7%99%BA%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83-net-core--vscode
高速な動作, 簡単な配布
・.NET Core は現状で最も高速な .NET 実装の1つで, ベンチマーク上では例えば Go とほぼ同等〜少し速い程度のパフォーマンスを発揮します.
・.NET Core は Go と似たようなスタンドアロンバイナリの生成をサポートしており23, .NET Core ランタイムがインストールされていない Windows / OS X / Linux 環境上で実行可能な状態で配布することができます.
F#とかどうよ
https://qiita.com/cannorin/items/59d79cc9a3b64c761cd4#%E9%96%8B%E7%99%BA%E5%AE%9F%E8%A1%8C%E7%92%B0%E5%A2%83-net-core--vscode
高速な動作, 簡単な配布
・.NET Core は現状で最も高速な .NET 実装の1つで, ベンチマーク上では例えば Go とほぼ同等〜少し速い程度のパフォーマンスを発揮します.
・.NET Core は Go と似たようなスタンドアロンバイナリの生成をサポートしており23, .NET Core ランタイムがインストールされていない Windows / OS X / Linux 環境上で実行可能な状態で配布することができます.
920デフォルトの名無しさん
2020/11/05(木) 17:54:16.33ID:/CgVmiK8 >>918
まあ、不安ったって迷走してる程度で、根本的にはCの代替として落ち着いていくでしょ
確かどっか大手がコンテナの記述用途でテコ入れするとか
対立煽りしたいらしい奴は、方向性がまるで違うんだからC++のスレにでも行けって感じ
まあ、不安ったって迷走してる程度で、根本的にはCの代替として落ち着いていくでしょ
確かどっか大手がコンテナの記述用途でテコ入れするとか
対立煽りしたいらしい奴は、方向性がまるで違うんだからC++のスレにでも行けって感じ
921デフォルトの名無しさん
2020/11/05(木) 20:03:23.12ID:LX/aXWmP >>917
あるに決まってるだろ
あるに決まってるだろ
922デフォルトの名無しさん
2020/11/05(木) 20:13:34.79ID:40Zkap5B923デフォルトの名無しさん
2020/11/05(木) 20:34:00.27ID:LX/aXWmP >>922
うん、めっちゃ楽
うん、めっちゃ楽
924デフォルトの名無しさん
2020/11/05(木) 21:13:05.05ID:rDKR4t8H >>901
>>905
俺が無知なのはさておき、GCを実装してる連中はそこら辺まで調査して選択してる。
Go含めて重鎮が地味にマーク&スイープを選択するのは、それなりに理由がある。
ただし、マーク&スイープは、「大量の生存オブジェクト」には不向きで、Discordの件はそれに該当する。
逆に言えばそれが不向きなだけで、「最小限の生存オブジェクトと大量のゴミ」という、
普通の使い方の場合には、マーク&スイープの方がいいと判断したからそっちを選択してるわけだ。
kotolin-nativeは多分新しいことを試してみたかったんだろうと思うが、
Pythonはおそらく判断をミスっていて、通常向けに最適化するべきだと思う。
(これがPythonが無駄に遅い理由の一つになっているかも)
ただしGC機構についてだけ言えば、Python型なら今回のDiscordみたいなことにはならなかったはずだ。
だからあれはより正確に言えば「『マーク&スイープ方式の』GCの限界」だな。
>>905
俺が無知なのはさておき、GCを実装してる連中はそこら辺まで調査して選択してる。
Go含めて重鎮が地味にマーク&スイープを選択するのは、それなりに理由がある。
ただし、マーク&スイープは、「大量の生存オブジェクト」には不向きで、Discordの件はそれに該当する。
逆に言えばそれが不向きなだけで、「最小限の生存オブジェクトと大量のゴミ」という、
普通の使い方の場合には、マーク&スイープの方がいいと判断したからそっちを選択してるわけだ。
kotolin-nativeは多分新しいことを試してみたかったんだろうと思うが、
Pythonはおそらく判断をミスっていて、通常向けに最適化するべきだと思う。
(これがPythonが無駄に遅い理由の一つになっているかも)
ただしGC機構についてだけ言えば、Python型なら今回のDiscordみたいなことにはならなかったはずだ。
だからあれはより正確に言えば「『マーク&スイープ方式の』GCの限界」だな。
925デフォルトの名無しさん
2020/11/05(木) 21:25:07.21ID:rDKR4t8H >>903
最後の部分
> 近年の複雑化しすぎたWeb界には受けた
以外には同意だ。
俺は「Web系は複雑化しないところがいい」と見ている。
Web系は馬鹿ばかり、と揶揄されつつも、それでもWebが回ってるのは馬鹿でも回せる構造になってるからだ。
それは水平分業がしっかりしていて、しかもそれを普通に選択する文化だと思う。
例えばPHP、3層構造にするのについて誰も文句言わないだろ。
対して今回のDiscord、あれは指摘されてるとおり、キャッシュサーバーを使っていれば発生しなかった問題だと思う。
そこをなまじ実装力があって自前で実装してしまうからこそ命中する。
実際キャッシュなんて100行程度で書けるから、
不必要な機能も付いてて遅く、さらにブラックボックス的な他ライブラリ等に頼るよりは、
自前で実装する方が気分が楽なんだよ。
(ソースが読めるとしても100行程度で書けるのだから書いた方がまし、という選択になる)
その辺Web系は実装力もないからさっさと外部ライブラリ/フレームワークに頼るのだけど、
結果的にはそれの方が正しいように俺には見えてる。
この文化だと「○○が欲しい」というリクエストも感謝も明確に出てくるのでライブラリも揃う。
C++だと「そんなゴミ要らん自分で書いた方がましじゃボケ」になるからね。
だから遅々として整備は進まないが、それでも徐々には進むから、最終的にはどうなるかだけどね。
Web系が複雑化しているように見えるのは、やたらフレームワーク/ライブラリが乱立するからだと思うが、
それは外部的に見えるから複雑化しているように感じるだけ。
C++等だと内部的にみんなやってるのが出てきてないだけで、確実に重複しまくってて再開発しまくってる。
だから乱立に見えるけども一応外部に出てきて重複開発しないWeb系の方がエコシステムとしては効率がいいと思うよ。
最後の部分
> 近年の複雑化しすぎたWeb界には受けた
以外には同意だ。
俺は「Web系は複雑化しないところがいい」と見ている。
Web系は馬鹿ばかり、と揶揄されつつも、それでもWebが回ってるのは馬鹿でも回せる構造になってるからだ。
それは水平分業がしっかりしていて、しかもそれを普通に選択する文化だと思う。
例えばPHP、3層構造にするのについて誰も文句言わないだろ。
対して今回のDiscord、あれは指摘されてるとおり、キャッシュサーバーを使っていれば発生しなかった問題だと思う。
そこをなまじ実装力があって自前で実装してしまうからこそ命中する。
実際キャッシュなんて100行程度で書けるから、
不必要な機能も付いてて遅く、さらにブラックボックス的な他ライブラリ等に頼るよりは、
自前で実装する方が気分が楽なんだよ。
(ソースが読めるとしても100行程度で書けるのだから書いた方がまし、という選択になる)
その辺Web系は実装力もないからさっさと外部ライブラリ/フレームワークに頼るのだけど、
結果的にはそれの方が正しいように俺には見えてる。
この文化だと「○○が欲しい」というリクエストも感謝も明確に出てくるのでライブラリも揃う。
C++だと「そんなゴミ要らん自分で書いた方がましじゃボケ」になるからね。
だから遅々として整備は進まないが、それでも徐々には進むから、最終的にはどうなるかだけどね。
Web系が複雑化しているように見えるのは、やたらフレームワーク/ライブラリが乱立するからだと思うが、
それは外部的に見えるから複雑化しているように感じるだけ。
C++等だと内部的にみんなやってるのが出てきてないだけで、確実に重複しまくってて再開発しまくってる。
だから乱立に見えるけども一応外部に出てきて重複開発しないWeb系の方がエコシステムとしては効率がいいと思うよ。
926デフォルトの名無しさん
2020/11/05(木) 21:34:05.29ID:rDKR4t8H ちなみにデプロイって何の話してるんだ?
サーバーサイドなら最低限ビルド出来る奴がセットアップするんだから問題なし。
WindowsへのC#のデプロイは何ら問題ない。
Linuxなんてど素人は使ってない。
残るはMacだけど、お前らMac向けにGoでツールとか書いてるの?
ちなみに俺が言ったのは、「楽に書けて、サクッと動いて、そこそこの性能」という事だよ。
君らの分析の方が技術的に真面目で、さらに当たってるからそれで問題はないけど、要は、
PHPだと超超超楽勝だがポンコツ、
(Pythonだと超楽勝だがPHPと同程度の速度しか出ないポンコツ、ただしPHPからは逃れられる)、
Nodeだと楽勝でそこそこ速い、
Go/C#だと楽勝でもないがまあ普通に速い、
それより速いのはC++/Rustだけどこいつらは非現実的、
と今は並ぶでしょ。速度/容易さで並ぶのはC#。
C#の方が断然巨人だから、色々環境は整ってる。
ただしWebではなくWindowsアプリを主眼にしていたから、Web周りは若干周回遅れになってる。
勿論ASP.NETは昔からあったけどね。
サーバサイドでなくとも、要は「中庸」のプログラミング言語が欲しい場合に何が来るかということ。
一応C#は過度に難しくならないように努力してるから、巨大化している割には肥大化してない。
その辺C++とかかなり最悪だし。
ただしそれは「最速」言語の宿命で、
こちらの方が少しでも速いケースがある、という場合にユーザーが最速記述出来ないのは問題だから、
どうしても仕様が肥大化してしまう。速度面で仕様に妥協が出来ないんだ。
だからほぼ確実にRustもこれから肥大化する。
ただGoではC#を馬鹿にするなんて出来ないよ。
お前らの眼中にないASP.NETの方がGoサーバーよりも100倍シェアがある。
https://w3techs.com/technologies/overview/programming_language
サーバーサイドなら最低限ビルド出来る奴がセットアップするんだから問題なし。
WindowsへのC#のデプロイは何ら問題ない。
Linuxなんてど素人は使ってない。
残るはMacだけど、お前らMac向けにGoでツールとか書いてるの?
ちなみに俺が言ったのは、「楽に書けて、サクッと動いて、そこそこの性能」という事だよ。
君らの分析の方が技術的に真面目で、さらに当たってるからそれで問題はないけど、要は、
PHPだと超超超楽勝だがポンコツ、
(Pythonだと超楽勝だがPHPと同程度の速度しか出ないポンコツ、ただしPHPからは逃れられる)、
Nodeだと楽勝でそこそこ速い、
Go/C#だと楽勝でもないがまあ普通に速い、
それより速いのはC++/Rustだけどこいつらは非現実的、
と今は並ぶでしょ。速度/容易さで並ぶのはC#。
C#の方が断然巨人だから、色々環境は整ってる。
ただしWebではなくWindowsアプリを主眼にしていたから、Web周りは若干周回遅れになってる。
勿論ASP.NETは昔からあったけどね。
サーバサイドでなくとも、要は「中庸」のプログラミング言語が欲しい場合に何が来るかということ。
一応C#は過度に難しくならないように努力してるから、巨大化している割には肥大化してない。
その辺C++とかかなり最悪だし。
ただしそれは「最速」言語の宿命で、
こちらの方が少しでも速いケースがある、という場合にユーザーが最速記述出来ないのは問題だから、
どうしても仕様が肥大化してしまう。速度面で仕様に妥協が出来ないんだ。
だからほぼ確実にRustもこれから肥大化する。
ただGoではC#を馬鹿にするなんて出来ないよ。
お前らの眼中にないASP.NETの方がGoサーバーよりも100倍シェアがある。
https://w3techs.com/technologies/overview/programming_language
927デフォルトの名無しさん
2020/11/05(木) 21:45:04.52ID:rDKR4t8H すまん100倍では済まずに 31,666倍(=9.5/0.0003)だった。
言語名を押せば各詳細が出る。
その他の面もC#は既に巨人だからC#からみればGoなんてゴミ同然で、相手されてないよ。
言語名を押せば各詳細が出る。
その他の面もC#は既に巨人だからC#からみればGoなんてゴミ同然で、相手されてないよ。
928デフォルトの名無しさん
2020/11/05(木) 22:10:29.26ID:40Zkap5B929デフォルトの名無しさん
2020/11/05(木) 22:12:14.15ID:40Zkap5B930デフォルトの名無しさん
2020/11/05(木) 22:16:08.14ID:40Zkap5B >>926
「サーバサイドはできる奴がセットアップするから問題なし、PHPのデプロイが簡単」とか言ってる時点で話についてこれてないから、ちょっと調べてからしっかり喋ってくれ。
少なくともPHPファイルをポン置きするような事は「デプロイ」とすら呼ばん。
C#が眼中に無いのではなくて、ここはGoのスレ。
「サーバサイドはできる奴がセットアップするから問題なし、PHPのデプロイが簡単」とか言ってる時点で話についてこれてないから、ちょっと調べてからしっかり喋ってくれ。
少なくともPHPファイルをポン置きするような事は「デプロイ」とすら呼ばん。
C#が眼中に無いのではなくて、ここはGoのスレ。
931デフォルトの名無しさん
2020/11/05(木) 22:41:27.37ID:BWbga0la932デフォルトの名無しさん
2020/11/05(木) 23:35:22.45ID:5bWXoO+B COBOLは歴史もあるし金融系で使われてたり実績も十分。
933デフォルトの名無しさん
2020/11/05(木) 23:47:46.08ID:/6Zmm2qe C#はビルド速度とNuGetが地味につらい
Goのビルド速度、シンプルな純正テスト環境は大きな利点に思う。小規模開発時には特に。
Goのビルド速度、シンプルな純正テスト環境は大きな利点に思う。小規模開発時には特に。
934デフォルトの名無しさん
2020/11/06(金) 00:13:18.80ID:5acjwhy7 YouTube で有名な雑食系エンジニア・KENTA は、
初心者が進む道を、サーバー側言語のRuby → Go を王道としてる
この2つ以外は、出てこない
GUI 系は、画面の手直しなどで、工数がかさむ。
C#, dot.net などのWindows 系は、いらない。
Java などの土方系も、いらない。
C/C++ などのポインタ系や、ハードウェアの仕組みなども、いらない。
Elixir, Rust は、普及へのchasm・溝を超えられなかった
初心者が進む道を、サーバー側言語のRuby → Go を王道としてる
この2つ以外は、出てこない
GUI 系は、画面の手直しなどで、工数がかさむ。
C#, dot.net などのWindows 系は、いらない。
Java などの土方系も、いらない。
C/C++ などのポインタ系や、ハードウェアの仕組みなども、いらない。
Elixir, Rust は、普及へのchasm・溝を超えられなかった
935デフォルトの名無しさん
2020/11/06(金) 11:27:45.34ID:kU46w3PV そういや Go ってジェネリック入ったの?
936デフォルトの名無しさん
2020/11/06(金) 13:43:45.59ID:4QwN1dUc なんのために?
937デフォルトの名無しさん
2020/11/06(金) 16:04:25.31ID:vuRZSDYg だれのために?
938デフォルトの名無しさん
2020/11/06(金) 16:41:08.49ID:VIMw9dW+ 「俺の考えた最強の型システム」合戦になって収集つかなくなって導入しないことが決定した
939デフォルトの名無しさん
2020/11/06(金) 17:16:52.08ID:t5Qz3yQt 医薬品
940デフォルトの名無しさん
2020/11/06(金) 17:40:20.04ID:RRtA6cm3 これがキャンセルされたってこと?
https://blog.golang.org/generics-next-step
https://blog.golang.org/generics-next-step
941デフォルトの名無しさん
2020/11/06(金) 20:14:23.58ID:DtEkLbzN sort書くときはジェネリクスと型推論効かせて簡潔に書きたくなる
942デフォルトの名無しさん
2020/11/07(土) 11:07:18.19ID:fULQIOig なにかというと interface{} が現れる今の状況をなんとかしてほしい。
943デフォルトの名無しさん
2020/11/07(土) 18:27:21.32ID:WaP+6xrD どこかのブログで「Goはイテレータを書くのに4つの全く異なる方法がある」って書いてあったけど、これマジ?
944デフォルトの名無しさん
2020/11/07(土) 19:50:01.55ID:alCltY04 変数宣言くらいひとつにして欲しかった
945デフォルトの名無しさん
2020/11/07(土) 21:53:29.96ID:sL9l9w2Z >>943
イテレータを書く
と言ってる意味がよく分からない
イテレーションはrange句を書くときだけを意味するが、配列もしくはスライス、文字列、マップ、チャネルでそれぞれ受けとるイテレーション変数に違いがあるんで、それで4種と言ってる?
イテレータを書く
と言ってる意味がよく分からない
イテレーションはrange句を書くときだけを意味するが、配列もしくはスライス、文字列、マップ、チャネルでそれぞれ受けとるイテレーション変数に違いがあるんで、それで4種と言ってる?
946デフォルトの名無しさん
2020/11/07(土) 22:24:39.29ID:alCltY04947デフォルトの名無しさん
2020/11/07(土) 22:35:37.85ID:sL9l9w2Z948デフォルトの名無しさん
2020/11/07(土) 23:59:31.34ID:WaP+6xrD ごめん 前に見たブログが全然見つからない……
けど同じように言及してるブログは見つけた。
3 ways to iterate in Go
https://blog.kowalczyk.info/article/1Bkr/3-ways-to-iterate-in-go.html
けど同じように言及してるブログは見つけた。
3 ways to iterate in Go
https://blog.kowalczyk.info/article/1Bkr/3-ways-to-iterate-in-go.html
949デフォルトの名無しさん
2020/11/08(日) 00:40:26.10ID:cr0qwrbo950デフォルトの名無しさん
2020/11/08(日) 22:36:26.97ID:aJEtBYMB951デフォルトの名無しさん
2020/11/11(水) 16:24:39.37ID:2YRRcyS5952デフォルトの名無しさん
2020/11/12(木) 15:55:37.84ID:x/dKav4D >>948
こんなことやってる奴って他にいる?
こんなことやってる奴って他にいる?
953デフォルトの名無しさん
2020/11/12(木) 16:06:34.24ID:ajQurm37 いや、Goに関わらずAPIの設計としては常識に近いよ
Iteratorデザインパターン
Iteratorデザインパターン
954デフォルトの名無しさん
2020/11/13(金) 09:51:20.25ID:PXZYfUWY Goではfor文がイテレータ
自分でイテレータみたいなものを実装する必要はない
自分でイテレータみたいなものを実装する必要はない
955デフォルトの名無しさん
2020/11/13(金) 12:01:55.68ID:1iElEYNS イテレータ知らんやつばっかりで草生える
956デフォルトの名無しさん
2020/11/13(金) 14:22:31.00ID:PXZYfUWY >>955
じゃあイテレータの定義説明して、どうぞ
じゃあイテレータの定義説明して、どうぞ
957デフォルトの名無しさん
2020/11/13(金) 14:38:40.75ID:/AMzz1sP イテレータは、既定の順序に従って移動できることと、値を逆参照できることが要件になるだろうな。
958デフォルトの名無しさん
2020/11/13(金) 15:13:39.60ID:9KKZC7Fr 意味不明。
はい次!
はい次!
959デフォルトの名無しさん
2020/11/13(金) 15:22:45.15ID:RWm0omqa 覚えたての言葉使って見たかった説に+1
960デフォルトの名無しさん
2020/11/13(金) 22:40:33.20ID:5mXtPG+h 連続した要素を一個ずつ舐めて処理することだよね?(´・ω・`)
961デフォルトの名無しさん
2020/11/13(金) 22:47:58.01ID:PGsPGVPV それはただの繰り返し、
for文の説明にしかなってない。
もう一段の抽象思考が必要。
for文の説明にしかなってない。
もう一段の抽象思考が必要。
962デフォルトの名無しさん
2020/11/13(金) 22:51:34.63ID:IGEbWGrX >>960
キンタマかよ
キンタマかよ
963デフォルトの名無しさん
2020/11/13(金) 22:59:31.91ID:YBOwt/E7 >>960
wikipediaの解説くらい読めよ……
イテレータ(英語: iterator)とは、プログラミング言語において配列やそれに類似する集合的データ構造(コレクションあるいはコンテナ)の各要素に対する繰り返し処理の抽象化である。
「連続した要素」である必要は無いし、「一個ずつ舐め」る必要も「処理する」必要も無いぞ。
wikipediaの解説くらい読めよ……
イテレータ(英語: iterator)とは、プログラミング言語において配列やそれに類似する集合的データ構造(コレクションあるいはコンテナ)の各要素に対する繰り返し処理の抽象化である。
「連続した要素」である必要は無いし、「一個ずつ舐め」る必要も「処理する」必要も無いぞ。
964デフォルトの名無しさん
2020/11/13(金) 23:02:04.54ID:5mXtPG+h965デフォルトの名無しさん
2020/11/13(金) 23:05:36.62ID:PGsPGVPV >>964
しゃぶれよ
しゃぶれよ
966デフォルトの名無しさん
2020/11/13(金) 23:05:54.91ID:PXZYfUWY 舐めるって何だよ(哲学)
967デフォルトの名無しさん
2020/11/14(土) 02:20:57.24ID:J1qSeya3 やっとレベルの高いスレになってきたな!
968デフォルトの名無しさん
2020/11/14(土) 02:41:25.39ID:OEj/Ps5D >>964
何Pするつもりだ
何Pするつもりだ
969デフォルトの名無しさん
2020/11/14(土) 04:48:04.59ID:hiKCjj1+ 一人が同時に何本の竿を処理できるのか
その答えを俺は知ってる
その答えを俺は知ってる
970デフォルトの名無しさん
2020/11/14(土) 09:58:05.81ID:lw/b63Rx GoFのを定義とするならhasNextとnextでラップして要素持ってるだけなんだよな
流石に古いだけあって些か貧弱
流石に古いだけあって些か貧弱
971デフォルトの名無しさん
2020/11/14(土) 10:52:40.49ID:AxEpuS5V イテレータにそれ以上の機能は何も無いだろ。
それ以上を求めると、ジェネレータとの釣り合いが取れなくなるんじゃないか?
連続したもなにもなく「次」の値を取り出していくものでしかない気がするが。
それ以上を求めると、ジェネレータとの釣り合いが取れなくなるんじゃないか?
連続したもなにもなく「次」の値を取り出していくものでしかない気がするが。
972デフォルトの名無しさん
2020/11/14(土) 12:45:38.46ID:O3AqtiwM デザイン「パターン」だぞ
それが理解できないならシステムエンジニア向いてないよ
それが理解できないならシステムエンジニア向いてないよ
973デフォルトの名無しさん
2020/11/14(土) 13:04:34.18ID:wV2mISWm974デフォルトの名無しさん
2020/11/14(土) 14:24:39.45ID:FDvjC4Tu975デフォルトの名無しさん
2020/11/14(土) 14:38:59.30ID:0QjfD/pU976デフォルトの名無しさん
2020/11/14(土) 15:41:11.60ID:PgJDZZ0r >>942
ほんまこれ
Go の何が駄目といって「われらがGoはXXは無くしてシンプルに美しい」
とかなんとか自画自賛してるが、実際はむりくりそのクソみたいな
単純機能を組みあわせてクソ面倒な色々なやりくりしないといけないという
まるで前世紀の遺物みたいなシロモノ
あと Go は名前がクソ
ほんまこれ
Go の何が駄目といって「われらがGoはXXは無くしてシンプルに美しい」
とかなんとか自画自賛してるが、実際はむりくりそのクソみたいな
単純機能を組みあわせてクソ面倒な色々なやりくりしないといけないという
まるで前世紀の遺物みたいなシロモノ
あと Go は名前がクソ
977デフォルトの名無しさん
2020/11/14(土) 15:50:35.31ID:QzputhfI >名前が糞
同意せざるを得ない
同意せざるを得ない
978デフォルトの名無しさん
2020/11/14(土) 16:11:45.05ID:AxEpuS5V うーん、全世紀の遺物から、複数の戻り値とか、deferとかみたいなので別方向に進化したものだと思うけどな。
面倒くさいなって思う事もそんなに無くなったが。
後出しジャンケンみたいなインターフェイスはなかなか便利だし他の言語には無いと思うぞ。
まあ名前はひどい。
面倒くさいなって思う事もそんなに無くなったが。
後出しジャンケンみたいなインターフェイスはなかなか便利だし他の言語には無いと思うぞ。
まあ名前はひどい。
979デフォルトの名無しさん
2020/11/14(土) 16:24:50.71ID:OsCdkw/B インターフェース自体はいいんだよ。
問題は void* のような型消去した interface{} を多用しないとならないところ。
問題は void* のような型消去した interface{} を多用しないとならないところ。
980デフォルトの名無しさん
2020/11/14(土) 16:48:02.38ID:DnZAmAgg981デフォルトの名無しさん
2020/11/14(土) 17:29:12.30ID:chyl+IG1 /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐—´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐—´´\
982デフォルトの名無しさん
2020/11/14(土) 19:22:52.14ID:O3AqtiwM 思い付きのまま検討とかしないで言うんだけど
interface{} と書くところで {} とできたらどうだろう
interface{} と書くところで {} とできたらどうだろう
983デフォルトの名無しさん
2020/11/14(土) 21:01:36.29ID:OsCdkw/B 長いのが嫌だと言ってるわけじゃなくてw
984デフォルトの名無しさん
2020/11/15(日) 03:57:17.44ID:oqZpf0kM また発作が始まったか
985デフォルトの名無しさん
2020/11/15(日) 08:38:13.89ID:QxfrfD5Z for {}
986デフォルトの名無しさん
2020/11/15(日) 13:27:59.77ID:TRv2gWKD987デフォルトの名無しさん
2020/11/15(日) 14:29:31.55ID:b8fPXan8 ハァ…ハァ… 池沼用言語……?
取り消せよ……!!! ハァ… 今の言葉……!!!
取り消せよ……!!! ハァ… 今の言葉……!!!
988デフォルトの名無しさん
2020/11/15(日) 16:13:52.21ID:h7nWKXR3 (´・ω・`) ふむふむ・・・なるほどなるほど・・・
/ `ヽ. お薬増やしておきますね
__/ ┃)) __i |
/ ヽ,,⌒)___(,,ノ\
-----
/ `ヽ. お薬増やしておきますね
__/ ┃)) __i |
/ ヽ,,⌒)___(,,ノ\
-----
989デフォルトの名無しさん
2020/11/15(日) 18:21:39.28ID:P3rs6EJY 重要なのは「その言語でどれだけ稼げるか」なンだわ
単価相場 | ITフリーエンジニアのための【レバテックフリーランス】
https://freelance.levtech.jp/project/marketprice/?det_type=512
単価相場 | ITフリーエンジニアのための【レバテックフリーランス】
https://freelance.levtech.jp/project/marketprice/?det_type=512
990デフォルトの名無しさん
2020/11/15(日) 19:05:53.09ID:uPufg4Im モダンな言語使ってる所だと単価云々より労働環境のメリットの方がデカい
エンジニアファーストだしフルリモート出来るし
単価高くても出社必須・クソスペPC・下請けみたいな所は論外
エンジニアファーストだしフルリモート出来るし
単価高くても出社必須・クソスペPC・下請けみたいな所は論外
991デフォルトの名無しさん
2020/11/15(日) 20:37:01.75ID:TRv2gWKD >>990
俺はJSを気に入ったから転職しようかとも思ったが、
求人見てデザイナの下請けばっかりだから止めた。(少なくともJSは、でも多分PHPも)
もしGoだとプログラマ主導が多数派なのなら、それはわざわざGoを選ぶ意味にもなり得る。
俺はJSを気に入ったから転職しようかとも思ったが、
求人見てデザイナの下請けばっかりだから止めた。(少なくともJSは、でも多分PHPも)
もしGoだとプログラマ主導が多数派なのなら、それはわざわざGoを選ぶ意味にもなり得る。
992デフォルトの名無しさん
2020/11/15(日) 22:32:47.18ID:wf91lH7q Goは何故か食わず嫌いが多すぎて人員が集まらないから、余程の高性能案件でないと
993デフォルトの名無しさん
2020/11/15(日) 23:02:20.54ID:oqZpf0kM Go案件はメルカリ一派しかまともにやってないから
その周辺の会社に行け
給料もクソ高い
その周辺の会社に行け
給料もクソ高い
994デフォルトの名無しさん
2020/11/15(日) 23:28:13.85ID:BAXhy0h1 メルカリって大して儲かってないのに、株価を吊り上げてボロ儲けしてる企業だろ
株主が買った株は役員や社員のステーキ代になることも知らずによく買うよな
ほとんど宗教だな
株主が買った株は役員や社員のステーキ代になることも知らずによく買うよな
ほとんど宗教だな
995デフォルトの名無しさん
2020/11/15(日) 23:34:27.45ID:TRv2gWKD >>992
> 何故か
どう考えても妥当。
言語としては劣化版C++でしかないから、C++を既に使える奴が使う意味がなく、C++erからは最初から無視されてる。
これはC#やJavaを既に使える連中もそう。
要は既存言語で満足してる奴が「機能劣化版」でしかないGoを使う意味がない。
逆にC++が嫌いで嫌いで仕方ないが、それでも仕方なくC++使ってた連中が当初飛びついたが、
こいつらは最近はみんなRust行ってるはず。
結果、他言語を知らない、プログラミング初心者しか残ってないでしょ、このスレ見ても。
(ただこれが悪いことだとは言わないが。俺はそういう実験をする言語があってもいいとは思う)
> 何故か
どう考えても妥当。
言語としては劣化版C++でしかないから、C++を既に使える奴が使う意味がなく、C++erからは最初から無視されてる。
これはC#やJavaを既に使える連中もそう。
要は既存言語で満足してる奴が「機能劣化版」でしかないGoを使う意味がない。
逆にC++が嫌いで嫌いで仕方ないが、それでも仕方なくC++使ってた連中が当初飛びついたが、
こいつらは最近はみんなRust行ってるはず。
結果、他言語を知らない、プログラミング初心者しか残ってないでしょ、このスレ見ても。
(ただこれが悪いことだとは言わないが。俺はそういう実験をする言語があってもいいとは思う)
996デフォルトの名無しさん
2020/11/15(日) 23:43:15.69ID:zDkm2h7Q またGoroutine知らない人が発狂するやつ?
997デフォルトの名無しさん
2020/11/16(月) 00:03:35.53ID:UybeAEe0 >>996
正解!
正解!
998デフォルトの名無しさん
2020/11/16(月) 00:12:27.10ID:/d3b4JrP999デフォルトの名無しさん
2020/11/16(月) 00:31:23.48ID:hWakK6d21000デフォルトの名無しさん
2020/11/16(月) 00:42:31.53ID:/d3b4JrP10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 395日 3時間 4分 27秒
新しいスレッドを立ててください。
life time: 395日 3時間 4分 27秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★5 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 台湾声明 「台湾は独立した主権国家、中国は台湾を統治したことがなく、中国は口出しする権利ない」 中国が高市首相に抗議で ★7 [お断り★]
- 日本が「世界で最も魅力的な国」1位に!✨「魅力的な都市」では東京が2位 「魅力的な地域」は北海道が7位に [煮卵★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- 高市政権「中国さん、日本はいつでも対話に応じるで」 [834922174]
- 吉村はん「高市さんは発言を撤回する必要ないですよ。中国の大阪総領事が謝罪すべき」 [256556981]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 日経平均、49000円割れ 国賊高市を許すな [402859164]
- 【悲報】青森県、今日だけで60cm雪が積もってとうとう100cm越えてしまうwwwww
- 東浩紀「日本はいままさに駆け引きをしている。」高市有事にピシャリ [834922174]
