◎正当な理由による書き込みの削除について:      生島英之とみられる方へ:

Go language part 4 YouTube動画>2本 ->画像>6枚


動画、画像抽出 || この掲示板へ 類似スレ 掲示板一覧 人気スレ 動画人気順

このスレへの固定リンク: http://5chb.net/r/tech/1605467680/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

1デフォルトの名無しさん
2020/11/16(月) 04:14:40.64ID:fB5+0hxC
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。

公式
https://golang.org

公式ドキュメント
https://golang.org/doc/

公式外パッケージドキュメント
https://godoc.org

ブラウザ上で試し書き
https://play.golang.org


※前スレ
Go language part 3
http://2chb.net/r/tech/1571315884/
2デフォルトの名無しさん
2020/11/16(月) 04:15:19.36ID:fB5+0hxC
テンプレは前スレの>>2に変えた
3デフォルトの名無しさん
2020/11/16(月) 04:19:59.26ID:fB5+0hxC
みんな大好きGopherくん

Go language part 4 YouTube動画>2本 ->画像>6枚
4デフォルトの名無しさん
2020/11/16(月) 06:01:26.56ID:H10ZFMik
Gopherくんキモい
5デフォルトの名無しさん
2020/11/16(月) 06:16:05.43ID:wSrfsdTD
【悲報】.日本人、ステマに.簡単に.洗脳される(笑).幼稚.な.多数決.カルト.信仰の.末路
(1)日本人.の.精神.を.腐敗.・.堕落させ.愚民.化.させろ
(2)日本人.の.女.を.集中的に.狙い.洗脳.しろ!
(3)ネトウヨ.、ヘイト.スピーチ.等の言葉を.浸透させ.、同胞へ.の批判.を.封じろ!
(4)「同性婚・LGBTを全面肯定しない者は差別主義者だ!」という雰囲気を作れ!
(5)中身のないアニメを流行らせ、クールジャパンをオワコン化させろ!
(6)「未だにガラケーの奴は笑い者」という雰囲気を作れ.
(7)「日本人の男VS日本人の女」の対立を煽り、分断しろ!
(8)日本人同士で恋愛・結婚させない、子供を生ませないよう誘導しろ。
(9)日本同士で結婚していたら離婚させる方向に仕向けろ
(10)海外セレブやハーフモデルをもてはやし、「日本人は劣等人種だ!」と植えつけろ。。
(11)イケメンブームを定着化させ、「男は外見が全てだ!」と洗脳しろ.
- ソース -
電.通.グループ.会長.成.田.豊.は.朝鮮.半島.生まれ
http://ja.wikipedia.org/wiki/成田豊
6デフォルトの名無しさん
2020/11/16(月) 11:02:37.89ID:2ijHHLJY
Go言語がダメな理由
https://postd.cc/why-go-is-not-good/

6年経ちましたがよくなりましたか?
7デフォルトの名無しさん
2020/11/16(月) 11:36:25.10ID:UybeAEe0
キミの頭よりは良くなってる
8デフォルトの名無しさん
2020/11/16(月) 11:40:25.93ID:sF1WJXNT
Goに入ってはGoに従え
9デフォルトの名無しさん
2020/11/16(月) 11:45:33.74ID:sP+ueWAj
Python&MSの最強タッグに勝てるとは思えん

Pythonの生みの親、グイド・ヴァンロッサム氏、「引退は退屈」とMicrosoft入り - ITmedia NEWS
https://www.itmedia.co.jp/news/articles/2011/13/news066.html
10デフォルトの名無しさん
2020/11/16(月) 12:43:46.88ID:Rp0lnyle
MSがPythonに力入れる夢見てるやついまだにおるんやなw
11デフォルトの名無しさん
2020/11/16(月) 13:31:29.66ID:jIfIZ9ed
言語には得意分野があることを理解できないニワカが大杉
12デフォルトの名無しさん
2020/11/16(月) 14:38:16.63ID:oSwqK6E+
>>9
pythonは可読性上げるために文法強制するくせに、関数呼び出しばかりで可読性劣悪なのがちょっとなぁ。
13デフォルトの名無しさん
2020/11/16(月) 14:55:37.57ID:mOY/lFMt
Goはその関数呼び出しを1関数あたり5行くらいに分けてダラダラと書いてるだけだろ?
その分Goは情報の密度が低くて楽に読めるから、単位時間あたりに読める行数を可読性と定義するならまあGoの可読性はPythonより高いわな
14デフォルトの名無しさん
2020/11/16(月) 17:22:11.33ID:8c1QCVK8
ダラダラ書いてるってどういう事?
15デフォルトの名無しさん
2020/11/16(月) 17:48:06.60ID:+ucL5pJy
>>12
なんでPythonが関数呼び出しばかりだと思ったの?
なんで関数呼び出しばかりだと可読性が低くなると思ったの?
16デフォルトの名無しさん
2020/11/16(月) 18:14:19.92ID:x+MSqxF6
>>14
err = Hoge()
if err != nil {
 return err
}
17デフォルトの名無しさん
2020/11/16(月) 19:09:23.02ID:WZgYyPqf
>>16
これほんと嫌い
18デフォルトの名無しさん
2020/11/16(月) 19:21:21.05ID:UjHg6qpi
>>16
俺はこれ好き
try-catchよりシンプルで読みやすい
19デフォルトの名無しさん
2020/11/16(月) 19:25:59.64ID:qg+eeyPj
これが読みやすいとか、たぶん1000行程度のプログラムしか書いたことないんだろうな
20デフォルトの名無しさん
2020/11/16(月) 19:30:18.80ID:2F7AgOwR
>>19
ごめん
俺土方じゃないからコード書かないんだ
21デフォルトの名無しさん
2020/11/16(月) 20:03:06.45ID:zXKn/1df
goって、

err = Hoge()
if err {
 return err
}

とは書けないんだっけ?
22デフォルトの名無しさん
2020/11/16(月) 20:19:58.38ID:UybeAEe0
Hoge() の戻り値が boolean じゃないとね
23デフォルトの名無しさん
2020/11/16(月) 20:37:39.21ID:+ucL5pJy
頻繁に出てくる定型コードなんだから言語側は糖衣構文実装しろよ
24デフォルトの名無しさん
2020/11/16(月) 20:40:52.00ID:i/HDczYO
err = Hoge() && return err
俺ならこうする
25デフォルトの名無しさん
2020/11/16(月) 20:57:25.55ID:4F0bxqx0
クソダサい
26デフォルトの名無しさん
2020/11/16(月) 21:00:18.04ID:5OAOeu6r
Rust見倣って
result := Hoge()?
にしとけ
27デフォルトの名無しさん
2020/11/16(月) 21:06:21.03ID:jIfIZ9ed
すまん
if err = Hoge(); err != nil {
 return err
}
以外の書き方したことないわ
28デフォルトの名無しさん
2020/11/16(月) 21:07:03.57ID:jIfIZ9ed
あ、:= に直すの忘れてた
29デフォルトの名無しさん
2020/11/16(月) 21:09:26.85ID:2ijHHLJY
=とか:=とかめんどくせえな
30デフォルトの名無しさん
2020/11/16(月) 21:14:24.95ID:J0Iniu1t
>>27
エラー以外の戻り値のある関数使ったことないの?
31デフォルトの名無しさん
2020/11/16(月) 21:30:40.87ID:dv0RbCZr
Go2の改善は今のところ↓コレが有力なの?
https://go.googlesource.com/proposal/+/master/design/32437-try-builtin.md
32デフォルトの名無しさん
2020/11/16(月) 21:37:12.31ID:UybeAEe0
Proposal: A built-in Go error check function, "try" · Issue #32437
https://github.com/golang/go/issues/32437

This proposal has been closed. Thanks, everybody, for your input.
33デフォルトの名無しさん
2020/11/16(月) 22:38:27.44ID:inzbcPAL
>>30
な? これで良いとかおもってるやつなんて
ロクにちゃんとしたコード書いたことすらないのがバレバレ
しょぼいサンプルコードぐらいしか書いたことないんだろう
34デフォルトの名無しさん
2020/11/16(月) 22:46:50.52ID:dv0RbCZr
>>32
で?結局Go2ではどうなるの?
35デフォルトの名無しさん
2020/11/16(月) 23:28:44.33ID:UybeAEe0
>>34
reject されたからどうにもならない
36デフォルトの名無しさん
2020/11/16(月) 23:44:21.27ID:dv0RbCZr
えっ、なんの改善もされないの?
だとするといろんな意味できついね
37デフォルトの名無しさん
2020/11/16(月) 23:48:13.75ID:DSjP5PPU
昔go使ってスレッド同期系の不具合を調査しようとしたが、ログを入れてもスレッドid的なものが一切取得する手段が無くて驚愕した。

そこでmutexをAPI入り口に入れて回避しようとしたが再帰mutexが無くて断念した。

調べたら再帰mutexは使うべきじゃ無いから提供しないらしい。ならば作ろうとしたらスレッドid的な識別子が無いから作れない。

昔のgoは識別子を取れたため再帰mutexライブラリが落ちてたがそれも使えなくなってた。

なんだろうこのクソ言語って思った。
38デフォルトの名無しさん
2020/11/17(火) 00:02:26.25ID:c7e0OkRz
RustはともかくNimとかいう馬の骨にまでコケにされてとてもつらい。

Let's encryptのバグはRustで実装していたら防げたの?
https://qiita.com/komasayuki/items/02785730d486ec4b397f
Let's encryptのバグはNimで実装していたら防げたの?
https://qiita.com/dumblepy/items/37581ef0223a81fa1094
39デフォルトの名無しさん
2020/11/17(火) 00:13:23.50ID:c7e0OkRz
Discordに逃げられてつらい…

実装言語を「Go」から「Rust」に変更、ゲーマー向けチャットアプリ「Discord」の課題とは
https://www.atmarkit.co.jp/ait/spv/2002/10/news038.html
40デフォルトの名無しさん
2020/11/17(火) 00:59:11.79ID:1L4goDpB
>>16
わかりやすくていいじゃん。
このパターンなら、return Hoge()できないか考えるけど。

>>19
1ファイル1000行は異常だと思うぞ。

>>30
複数の戻り値あるときでも、>>27の書き方はできるぞ。
41デフォルトの名無しさん
2020/11/17(火) 01:00:02.16ID:1L4goDpB
>>33
お前もないんだろ…
42デフォルトの名無しさん
2020/11/17(火) 11:54:27.21ID:m07xvYc5
>>30
その一言で馬脚を現すとはなんという出オチ感
ディスるなら言語仕様くらい勉強して出直してこい

具体的にはGoではタプルで戻り値を返してくるのが一般的
一個の戻り値なんて、普通に使っている人間からしたら特殊な使い方だよ
つまり、使ったことが無い素人さんだね貴方
43デフォルトの名無しさん
2020/11/17(火) 13:20:20.82ID:H0+H5RuJ
全部Gopherくんがキモいのが悪いわ
44デフォルトの名無しさん
2020/11/17(火) 14:21:13.31ID:m07xvYc5
年寄りはオライリー表紙で慣れてるから平気
45デフォルトの名無しさん
2020/11/17(火) 15:14:43.85ID:TJ9hBTBs
>>42
さすがにGoスレで多値返却知らないやつはいないてw

可読性の観点で同じパターンと認識してるのかどうかの違い

ちなみにタプルではないよ
46デフォルトの名無しさん
2020/11/17(火) 15:31:54.39ID:m07xvYc5
>>45
型としてのタプルではないから確かに無いといえば無いね
順序を持って並んだ変数の組、という物は構文としてタプルと表現すべきかと思ったので

タプル型って特に使い道思い付かないし要らんよな?

とか思ってたらissuesの#41148でタプルをチャネルで送りたいとかあったわ
なるほど
47デフォルトの名無しさん
2020/11/17(火) 19:53:06.72ID:OUvi357j
>>35, >>37
これマジ?
GolangやめてRustやります
48デフォルトの名無しさん
2020/11/18(水) 03:18:00.14ID:8xI/s5G3
Rustなんて数年経ったらScalaと同じでただの負債になるだけなのによくやる気になるな
個人で趣味程度にやるなら良いと思うけど
49デフォルトの名無しさん
2020/11/18(水) 03:46:26.68ID:uoM+CD8t
RustはMSが正式採用してから始める、で遅くないと思う
50デフォルトの名無しさん
2020/11/18(水) 08:34:38.41ID:pNzxwTD4
RustはOS寄りな案件に突き進むんじゃないか?
シェルじゃなくカーネル
>>39にあるようにGC不要であるという強みはドライバ記述に最適ということを意味するから
51デフォルトの名無しさん
2020/11/18(水) 10:09:02.25ID:hkPPdx4I
負債になるのはGoだろワロタwwww
52デフォルトの名無しさん
2020/11/18(水) 10:16:42.11ID:mXWQ9M3+
Rustは人類が使いこなすには150年くらい早い
53デフォルトの名無しさん
2020/11/18(水) 11:15:56.54ID:ynuaTlxN
小学生レベルでも読み書きできるGoは負債になりにくいだろ
Rust使ってるやつは奴隷身分の癖にアーティストぶって負債を生むウンコマン
54デフォルトの名無しさん
2020/11/18(水) 12:39:37.96ID:hzlSiPtI
Goはあまり変なフレームワーク使ったりしなくて標準ライブラリが基本なので、その意味では負債化する要因が少ない
廃れるのは言語よりも先にフレームワークだからね
55デフォルトの名無しさん
2020/11/18(水) 15:19:46.84ID:hkPPdx4I
Rubyは廃れたけど
Railsが元気なお陰でバッテリーとして生かされてるじゃん
56デフォルトの名無しさん
2020/11/18(水) 17:00:36.82ID:tJL+sE6k
いいかわるいかは別にして >>53 は真理
たとえば Lua なんて糞言語もいいとこだがいまだに
ゲーム組み込みスクリプトとしてちょこちょこ使ってるケースがある
57デフォルトの名無しさん
2020/11/18(水) 17:31:04.33ID:vHQTDRO5
COBOLが負債化した原因は小学生レベルじゃ読み書きできないからなのか?
58デフォルトの名無しさん
2020/11/18(水) 19:44:02.33ID:/Jz+NzoF
go2でジェネリクス入ったら今のコードは負債になりそうだけどな
59デフォルトの名無しさん
2020/11/18(水) 20:00:40.72ID:ngyywPmD
お前ら負債負債って言ってるけど、そもそも「負債」の定義は?
60デフォルトの名無しさん
2020/11/18(水) 20:07:05.16ID:/U1Y9I1j
その言語のコード資産の価値を(最新の言語だったら発生しないはずの無駄な)維持費が上回り始めた状態だろうな
61デフォルトの名無しさん
2020/11/18(水) 21:12:40.25ID:pNzxwTD4
負債ってヨタ話なんて信用なんねー
損益分岐点越えたら切り替えるのが当然
「政治」的な問題だよくだらない
62デフォルトの名無しさん
2020/11/18(水) 22:27:03.20ID:vHQTDRO5
先週はイテレータ知らんやつばっかりで
今週は技術的負債知らんやつばっかりなの?

既存システムへの機能の追加変更時に
クリーンなシステムであれば必要ないであろう作業が
著しく多く必要になるものを負債と呼んでる

相対的なものだから単一指標で数値化することはできないんだけど
「あのシステムの修正は面倒だからやりたくない」と感じる度合いと正の相関がある
63デフォルトの名無しさん
2020/11/18(水) 23:28:09.15ID:pNzxwTD4
>>62
それが「政治」的問題
技術的な問題じゃないね
64デフォルトの名無しさん
2020/11/19(木) 08:13:34.58ID:r3/rn3nu
wikipediaくらい見ようぜ。
Technical debt (also known as design debt[1] or code debt, but can be also related to other technical endeavors) is a concept in software development that reflects the implied cost of additional rework caused by choosing an easy (limited) solution now instead of using a better approach that would take longer.[2]
65デフォルトの名無しさん
2020/11/19(木) 11:43:00.50ID:HmqfGRuh
だから技術的な問題じゃないと再度主張
一般的なプロジェクトマネジメントとかのスレに行け
66デフォルトの名無しさん
2020/11/19(木) 15:50:31.22ID:FmUN+YYe
>>65
君が技術的な問題じゃないと思うのは自由だけど自分勝手な定義を人に押し付けるのは止めようや
67デフォルトの名無しさん
2020/11/19(木) 17:43:38.54ID:HmqfGRuh
>>66
こっちこそお返しするよ
68デフォルトの名無しさん
2020/11/19(木) 18:21:20.90ID:t4OE0bZ/
技術選択や設計選択の問題は多分に組織的要素や人的要素を含むものなのにね

その辺りの要素を考慮しなくていいのは末端の作業員だけ
69デフォルトの名無しさん
2020/11/19(木) 19:24:28.21ID:HmqfGRuh
ここが何のスレだか言ってみろ
プロジェクトマネジメントのスレに行けと
70デフォルトの名無しさん
2020/11/19(木) 19:57:06.69ID:30asaVkd
技術的負債をどう返済するかがプロジェクトマネジメントやろ
元々は「Goは他言語と比べてどれだけ負債化しにくいか」という話じゃなかったか?

技術的負債の発生要因はプログラミング言語のバージョンアップ以外にも色々あるけど
71デフォルトの名無しさん
2020/11/19(木) 20:59:58.99ID:DgF0DEOT
プロジェクトマネジメントじゃなくてエンジニアリングマネジメントだろ
自社サービスだと、こういうのを技術的な問題と思ってない奴はまずいない
72デフォルトの名無しさん
2020/11/19(木) 21:34:12.71ID:aa9bIrjJ
おまいらってほんとマネジメントとかそういうの好きだよな
73デフォルトの名無しさん
2020/11/19(木) 22:14:44.29ID:UQ7DwHyP
>>68
末端の作業員にも使われる言語になったということ
日本でも労働者言語としての地位が定着してきたのかな
74デフォルトの名無しさん
2020/11/20(金) 00:57:26.75ID:6TMCzLQ7
で、実際にメインの仕事で使ってるんだろうな?
75デフォルトの名無しさん
2020/11/20(金) 01:38:39.30ID:kwwa9bjA
>>72
単にGoについて話すことがないだけなんだが…
76デフォルトの名無しさん
2020/11/20(金) 02:38:09.83ID:YhokOqrJ
間違った英語で日本人として恥ずかしい…
go getじゃなくてgo to getだろ…
77デフォルトの名無しさん
2020/11/20(金) 09:09:20.30ID:GA99wsWD
>>72
上流工程(キリッ
78デフォルトの名無しさん
2020/11/20(金) 12:49:28.87ID:27JFXKUI
>>71
これは激しく同意する
上流/下流とか関係ない
79デフォルトの名無しさん
2020/11/21(土) 11:02:08.02ID:7G4VCfLW
>>54
Goが負債化する要因は、コードがコピペだらけになって膨らむことだよ。
Goはコードを絞る手段を提供していない。だから俺はGoを使わないことにした。
長期的にメンテナンスする場合にコストが跳ね上がる。
これが顕在化するのはこれからだね。

逆に、動けばいい使い捨て用途の高速版Pythonと見るなら、全く問題ない。
だから完全に廃れるって事もない気もするが、大規模開発向けのメインストリーム言語として使われることもないね。
今もシェアなんて君らが馬鹿にしているRubyと比べてもゴミ以下でしょ。

自分が使っている言語が廃れるのが嫌なだけなら、今一番無難なのはC#だよ。
勿論Goより仕様が大きいから全部勉強するつもりなら時間がかかるけど、
Goが持っている機能だけ使うつもりならGoの修得と手間はほぼ同じ筈だが。
80デフォルトの名無しさん
2020/11/21(土) 11:20:43.86ID:W0C1PBHz
自社サービス系に関して言うと、C#はエンジニアがWin系の人間に限られてしまうために採用活動で苦労することになり、追加の人的コストが発生する
その意味では負債だ
C#は変わりつつあるとはいえ有名なSaaSとかでも開発環境はやっぱりWindowsとVSとIISだったりするので、Web畑のエンジニアには敬遠される
これ実話な
81デフォルトの名無しさん
2020/11/21(土) 12:12:26.36ID:cuTXIdQY
C#ね……w
どういうところで働いてる人がGoを批判してるのかがよくわかったよ
82デフォルトの名無しさん
2020/11/21(土) 13:07:07.90ID:jkMYYUpW
新形のmacでHello Worldできたよ
83デフォルトの名無しさん
2020/11/21(土) 14:25:13.11ID:7G4VCfLW
>>80
俺が言ってるのは純粋に言語についてだ。

ただ現実的に採用で困る、というのは大きな意味があるが、
それ言ったらGoもWebエンジニアにとってはGoは新規に学ばなければならない言語であって、
PHP/JSと比べたらGoなんて話にならんだろ。
Go選ぶ時点で間違いだよ。

あと、Goにもある機能の範囲だけC#を学ぶだけなら労力は同じだよ。
ただしPHP/JSのエンジニアの方がネットワーク周りの「知識」があるから促成はできるが、
「プログラミング」は技能に近く、一朝一夕には上達しない。
だから、「正しくプログラミング出来るGo技術者」を育成するとして、
PHP/JS等Web周りの知識がある奴にプログラミングを教えるのと、
C#/Java/C++等プログラミング出来てる奴にWeb周りの知識を教えるのとでは、
一通り座学してあとはググりながらやれ、で済む後者の方が断然簡単だ。
ただしWeb系の場合はプログラミングが大して難しくない範囲で収まるから、
PHP/JSからの促成組で何とかなるもの事実だとは思うが。
ぶっちゃけ、他言語は多機能すぎて、そこまで必要ないからこそ、簡素版のGoが使われる余地があるわけでさ。

そしてまあ、C#がWindows/VS/IISなのは多分事実だろう。
それでWeb系はLinux/VSCode/Apache/Nginxで、それ以外は絶対に嫌なのか?
ならEmacs/Vimと同じで永久に交わることはないだろうね。
84デフォルトの名無しさん
2020/11/21(土) 14:29:31.55ID:r9GjlBBW
また発作が始まったか
85デフォルトの名無しさん
2020/11/21(土) 15:40:45.57ID:gJix52fj
>>79
コピペだらけになるって、それはその程度のスキルだからじゃないか?
86デフォルトの名無しさん
2020/11/21(土) 15:41:39.64ID:gJix52fj
>>83
論点がブレてるんだけど。
もう少しまとめて話せよ。
雑談はネグれ。
87デフォルトの名無しさん
2020/11/21(土) 18:07:10.42ID:N6OL6Sv5
Gopherは他の言語やったことないから自分の使ってるGoが一番だと思ってるんだよ
つまりGopherには何をいっても馬の耳に念仏だよ
88デフォルトの名無しさん
2020/11/21(土) 18:23:49.86ID:U5RwLwtV
C#バランスいいよね
Windows/IIS縛りがネックだったけどそれがなくなったから徐々にシェア広げていくと思う
89デフォルトの名無しさん
2020/11/21(土) 18:47:30.43ID:zNfRz+cU
Safari, the new IE
Gopher, the new Rubyist
90デフォルトの名無しさん
2020/11/21(土) 18:49:07.04ID:zNfRz+cU
C# Gaiji, the new Ruby Gaiji
91デフォルトの名無しさん
2020/11/21(土) 19:01:54.31ID:7G4VCfLW
>>87
ただそれは最近はどの言語スレもだよ。勿論C#スレでも。
それを俺は信者化と言っている。

当たり前だけど、どの言語にもそれなりに糞な点はある。
もしそれが無く、他と比べて圧倒的に素晴らしければ、簡単に覇権を取ってる。
それは1993頃のC/C++であり、Cで72%、C++で20%だからC/C++で92%だ。
(その頃のC++なんて今のC++から見れば「それはCだよ」と言われる程度でしかない)


今はシェア25%弱の言語が3つ並んでいる状況なのだから、言ってしまえば「どれも大して変わらない」んだよ。
だから他言語に糞な点があれば、同程度には自分のお気に入り言語にも糞な点があるに決まってる。
この単純な論理を認められないのは、信者だからだよ。
ただこれは既に言ったとおり、Goスレだけの話ではなく、C#も他も同じ感じだけど。
92デフォルトの名無しさん
2020/11/21(土) 20:04:41.58ID:Lvew8AXV
どんなにここでC#の良さをアピールしても現実世界じゃ古臭い会社やUnityでしか使われないゴミ言語なんだよ…
今後Goみたいに流行るといいね…
93デフォルトの名無しさん
2020/11/21(土) 20:18:13.34ID:NFh21L0W
Javaよりはいい言語なんだけどねぇ
でもJavaと同じ戦場だから……

GoやRustは狙ったのか利用シーンがズレてるんで居場所がある
94デフォルトの名無しさん
2020/11/21(土) 20:26:30.28ID:uuh/pdI7
それだけcppが好きならずっとcpp使ってろよ。
グリーンスレッドも知らなかった分際で。
95デフォルトの名無しさん
2020/11/21(土) 20:29:37.15ID:7G4VCfLW
>>92
それが信者の観点だよ。
C#の方がGoよりは1000倍以上流行ってる。
それはシェアからもエコシステムからも明らかだ。
もっともお前らはJavaも流行ってないと言い切るくらい信者なのだとは思うが。

Goはそもそも流行る要因がない。他言語を使える奴が、わざわざGoを使う理由がないから。
だから今後とも今までどおり低空飛行だよ。
新規流入は初心者だけで、エコシステムも今までどおり回りもしないまま。

Rustはその点、明らかにピーキーで、Rustじゃないと駄目な理由が明確にある。
だからわざわざ使う理由にもなるし、今後はしばらくは確実にシェアは増えると思うよ。
ただどこまで行くかは謎だ。FFは死んでしまったし。あれRustのせいだと言っている奴がいるけど、俺もそう思うし。
96デフォルトの名無しさん
2020/11/21(土) 20:56:03.41ID:r9GjlBBW
>>95
アンタは C# の信者だなw
97デフォルトの名無しさん
2020/11/21(土) 21:05:41.22ID:7G4VCfLW
>>96
どこがだよ。そもそも俺はC#は使ってないし。
>>91の動画見てみろよ。Goなんて一度も出てこない。
Rubyは最後落ちるが健闘した方だ。少なくともGopherに馬鹿にされる理由はどこにもない。
サーバーシェアでもGoなんてゴミ以下だろ。
CやLispをサーバーに使ってるなんて聞いたこと無いが、Goはそれ以下だぞ。
https://w3techs.com/technologies/overview/programming_language
98デフォルトの名無しさん
2020/11/21(土) 21:09:38.97ID:ymMOmJrr
GoはMicroserviseとCLIが主戦場
JVMやCLRに依存したくなくて軽量でサクサクコンパイルしたいユーザー層向け

ただGo2が残念な結果になりそうなのとUSで下火になってきてるのを見ると先は明るくない
99デフォルトの名無しさん
2020/11/21(土) 21:11:54.51ID:ymMOmJrr
>>97
フロントエンドとしては使われないからそこには数字出てこないでしょ
100デフォルトの名無しさん
2020/11/21(土) 21:11:58.30ID:r9GjlBBW
使ってもいないのに1000倍以上流行ってるってよく分かるなぁ〜スゴイスゴイ
101デフォルトの名無しさん
2020/11/21(土) 21:23:42.90ID:uuh/pdI7
他言語も使うしC#も結構書くけど、Go書くことも多いぞ。
何一つ処理系もランタイムもインストールする必要ないから、展開めっちゃ楽だし。1ファイルだし。
デカイって言っても.net coreのscdほどデカくもないし。

というかGoのエコシステムって結構しっかりしてると思うけど。
awesome goとawesome dotnet見比べてがっかりしなければ良いけど。
102デフォルトの名無しさん
2020/11/21(土) 21:24:09.33ID:7G4VCfLW
>>99
いやそれはバックエンド限定の話だぞ。
なおフロントエンドなんて言うまでもなくJSの一強だ。その下をつつけば出てくるが、以下。
https://w3techs.com/technologies/overview/client_side_language

前も思ったが、お前ら違う世界に生きてるよな。
103デフォルトの名無しさん
2020/11/21(土) 21:29:36.25ID:r9GjlBBW
この辺りを読んでおけばいいんじゃない

Go Case Studies https://go.dev/solutions#case-studies
Go Use cases https://go.dev/solutions#use-cases
104デフォルトの名無しさん
2020/11/21(土) 21:36:38.77ID:7G4VCfLW
>>103
それはおまえらみたいな初心者は騙されるのかもしれんが、逆なんだよ。
シェアが低いからこそ受注案件を宣伝する必要があるし、
それをやっている時点でまだ数えられるほどしかない、ということなんだよ。

実際、PHPでそんなのやってないだろ。多すぎて無理だし。
105デフォルトの名無しさん
2020/11/21(土) 21:42:04.93ID:r9GjlBBW
中身1文字も読んでないだろw
106デフォルトの名無しさん
2020/11/21(土) 22:03:31.19ID:uSTcEold
>>102
フロントエンドはフロントエンドサーバーのことだよw

クライアントサイドがJSなのは当たり前
こんな話が通じないとは確かに違う世界に生きてるな
107デフォルトの名無しさん
2020/11/21(土) 22:07:14.19ID:YDtC2x5c
ことば遊びしはじめたwww
フロントエンド←→バックエンド
クライアントサイド←→サーバーサイド
はい、では「フロントエンドサーバー」の定義からどうぞ〜😆👍➰
108デフォルトの名無しさん
2020/11/21(土) 22:39:09.79ID:N6OL6Sv5
>>95
FFって何?w
109デフォルトの名無しさん
2020/11/21(土) 22:44:11.34ID:mMQUj5g8
>>107
冗談抜きで知らないんだね

フロントエンドってのはアプリのプレゼテーションレイヤーのこと
プレゼンテーションレイヤーを管理するサーバーがフロントエンドサーバー
Webアプリなら基本的にWebのUIを返すサーバー

クライアントサイドとの違いが理解できたかな?
110デフォルトの名無しさん
2020/11/21(土) 22:53:03.99ID:YDtC2x5c
>>109
そういうのは99.99%の人はBFFと言う。
BFFのfor Front-end、これなんのことか分かる?w
クライアントサイド、ブラウザで動くJSのことだよバーカwww

あのさあ、フロントエンド、なんて一般的な英単語なんだから分野によって指すものが違うのは当たり前なわけよw
例えばコンパイラ構成にもフロントエンド/バックエンドって用語は使われるわけ。
コンパイラ構成の文脈で「バックエンド?ああサーバーのことね!」なんて文脈無視した理解する馬鹿はいないわけ。普通。
ところがここにいたわけ。それがお前wwwww
Webの分野ではフロントエンドはクライアントサイドのことなんだよバーーカwwwww
さすがに腹痛ぇわwwwwwwww
111デフォルトの名無しさん
2020/11/21(土) 23:03:16.63ID:zNfRz+cU
BFFで通ってるものを「フロントエンドサーバー」とか言っちゃってたわけ?
オレオレ用語にしてもセンスなさすぎィ…
今IT用語辞典でBFF必死に調べてそうw
恥ずかしいオレオレ用語晒す前にもちょっとは調べりゃよかったのにw
112デフォルトの名無しさん
2020/11/22(日) 00:30:47.49ID:fxOCHIgd
>>110
残念だけどBFFの解釈も間違えてるよ
Webアプリの開発やったことないんだろうけどさすがに少しは勉強したほうがいい
113デフォルトの名無しさん
2020/11/22(日) 00:57:12.00ID:XUuDe+rV
BFFはAPIをホストするところであってUIをホストするところじゃない

クラシックな3階層に当てはめるとアプリケーションサーバーの一部
114デフォルトの名無しさん
2020/11/22(日) 01:09:14.57ID:ujQ9d+0r
ふ、フロントエンドサーバーwww
それバックエンドにあるわけ?w
115デフォルトの名無しさん
2020/11/22(日) 02:14:58.26ID:x3iNgzKv
フロントエンドサーバーっての俺も初めて聞いた。
こうやってオレオレ用語ができていくのか。
116デフォルトの名無しさん
2020/11/22(日) 20:37:18.20ID:Gg4y3mjc
俺はフロントエンドサーバ使ってるけどな
ページにリクエストが来たときフロントエンドサーバでJavaScriptを1から生成してブラウザに返してる
ITの世界でも鮮度は大事だからなるべく出来たてのスクリプトを提供したいんだよね
思いやりの気持ちを持たない現代のガキに足りない精神を維持するためにもフロントエンドサーバは大事だよ
117デフォルトの名無しさん
2020/11/22(日) 20:57:45.11ID:PbD2huCE
その「ページにリクエストを送っているもの」がフロントエンドなんじゃないかなぁ
118デフォルトの名無しさん
2020/11/22(日) 21:01:28.91ID:Q6nSdh4a
>>116
わかる
自分も思いやりの精神を忘れないために画像は全部リクエストが来る度に作ってる
1日10件ぐらいしか対応できないけどリクエストが来たらPhotoShopをすぐに開いて画像を作ってフロントエンドサーバに格納してる
職人の心を忘れちゃダメだよね
119デフォルトの名無しさん
2020/11/23(月) 00:51:47.46ID:nsFhHMUZ
メルカリの人のプレゼンとか見てみなよ
フロントエンドをどういう意味で使ってるか分かるから

120デフォルトの名無しさん
2020/11/23(月) 11:58:12.66ID:I/OioR1r
イテレータ、技術的負債、フロントエンド/バックエンド

お前ら一般常識知らなすぎ
121デフォルトの名無しさん
2020/11/28(土) 16:04:02.74ID:QqsJcBJb
>>119
バックエンドフォーフロントエンドとか
こんがらかってきてファックって言いかけてるw
122デフォルトの名無しさん
2020/11/28(土) 17:06:17.86ID:VjX5tYGz
>>121
1週間前の無知な自分に気付けて良かったじゃない
Fuck my ignorance! Grazie mille, 5ch amici!!
123デフォルトの名無しさん
2020/11/28(土) 17:27:49.95ID:P/o6eg3s
無知な私め!どうもありがとう、5chの友よ!!
かな?
amiciはイタリア語っぽい
友達の男性複数形かな
Grazie milleは何語だろう?
千のありがとう→Thanks a lotみたいな意味だと思うけど…
124デフォルトの名無しさん
2020/11/28(土) 19:40:17.08ID:/wKXXO7j
dataA, err := getDataA()
if err != nil {〜

dataB, err := getDataB()
if err != nil {〜

ってやりたいんだけど
Bの方のerrが二重定義だから怒られる


var dataB []DataB
dataB, err := getDataB()
if err != nil {〜

ってやると、VSCodeに「dataB []DataB declared but not used」って怒られる


こういう場合ってどうするのがセオリー?
125デフォルトの名無しさん
2020/11/28(土) 20:39:03.39ID:NVwbGZ0v
>>124
前半は、そんなエラーにはならない
https://play.golang.org/p/A3Qg-byXg0p

後半はdataBを使用する部分を書いていないだけ
126デフォルトの名無しさん
2020/11/28(土) 20:41:31.11ID:NVwbGZ0v
>>124
よく見ると、後半は二重定義になるから未使用警告にはならない
見直すこと
127デフォルトの名無しさん
2020/11/28(土) 20:45:20.86ID:/wKXXO7j
>>125
大変失礼しました…
仰るとおり、dataB使う処理書いてないで怒られてるだけでした
128デフォルトの名無しさん
2020/11/29(日) 22:16:54.79ID:QBDMVTbr
ここでバイク乗りがこそっとフォークエンドも混ぜておきますね
129デフォルトの名無しさん
2020/12/01(火) 03:32:25.87ID:kDI+DBO4
めちゃくちゃ腹立わ
Go推すまで密林不買だな

AWS、プログラミング言語「Rust」を重視する理由示す--エンジニア採用中 - ZDNet Japan
https://japan.zdnet.com/article/35163089/
130デフォルトの名無しさん
2020/12/01(火) 06:13:35.60ID:XaRGN9iL
GoとRustは利用分野が違うから関係ないよ
131デフォルトの名無しさん
2020/12/01(火) 19:16:04.40ID:ti2Ftdsd
>>130
どっちも高級C言語という立ち位置だと思ったが違うのか
132デフォルトの名無しさん
2020/12/01(火) 19:42:27.34ID:i0yB1bMz
>>131
RustはモダンC
Goにその役割は無理
別に悪いことでもないと思うが
「なんでもGoでできる!Goサイキョ!!」
とか言ってたらRubyみたいに鼻摘み者になるので注意
133デフォルトの名無しさん
2020/12/01(火) 20:16:43.83ID:XaRGN9iL
>>131
関数呼び出し機構が違うため、Goにはドライバなど低レベル処理が書けない
その代わりにGoは超軽量なgoroutineと可変なスタックを手に入れた

これによりWebAPIなどサーバプログラムで数百万の同時接続でもヘタレない性能を叩き出す
プログラム内プロセスと言えるスレッドに並列処理を頼る他の言語ではメモリ消費の問題で、この性能を求めるのは非現実的
コンテキストもデカけりゃスタックもデカいため
134デフォルトの名無しさん
2020/12/01(火) 20:34:12.24ID:XaRGN9iL
>>131
前にGoからRustにシステムリプレースした会社の話があったが、これはまた話が違う
GoはJavaなどと同じくガベージコレクト(GC)機構を持ってる
時々発生するGCの時にはms単位で他の処理が遅延する
この遅れを嫌ったためGCを使わないRustで処理時間の安定を計ったため
RustではGCではなく所有権という特殊な考え方でメモリを管理している
135デフォルトの名無しさん
2020/12/06(日) 23:01:31.14ID:AwVmewJw
>>131
Goはそういう低レイヤーなことは危険だから使えないようにしますって感じの言語
136デフォルトの名無しさん
2020/12/06(日) 23:39:26.16ID:5daNiVgY
ごー言語勉強しようと思うんですがフルスタックだとどのフレームワークがメジャーですか?
137デフォルトの名無しさん
2020/12/07(月) 00:39:23.46ID:YZYC0EGy
俺はecho使ったけど、特にバニラでも問題はない感じ
パラメータの解析とかCORS実装とかで多少は便利になる
テンプレートはこれどこか改善されてる?
138デフォルトの名無しさん
2020/12/07(月) 02:15:31.25ID:4YXFG9nR
>>136
フルスタックなフレームワークを使うこと自体がGoではメジャーではない
139デフォルトの名無しさん
2020/12/07(月) 04:04:40.95ID:AM6MusHZ
>>136
答えとしてはGinかRevelと思うけど
実態は>>138の通り
140デフォルトの名無しさん
2020/12/08(火) 04:39:06.45ID:VDGXYHkl
趣味でプログラミングしてるんだけど今はPythonとc++/C#あたりを触ってる
goも勉強したらPythonの代わりとして使えるのかな?
それとも趣味レベルなら覚えるだけ無駄?
141デフォルトの名無しさん
2020/12/08(火) 07:51:23.78ID:xomfKp6r
>>140
趣味レベルならばオススメできない

Pythonは拡張に拡張を重ねた巨大な仕様で一つのやりたいことに色々な書き方ができるので、初心者でも自由に書ける言語
専業プログラマーでない研究者でも楽に望むままのプログラムを書けるため、利用者が桁違いで膨大なライブラリが日々作られ続けてる


Goは不自由な仕様のかわりに大量の非同期処理などを高速に処理できる
これは使いどころが限られるし、利用者も限られる
ただし使いどころでは驚異的な性能を誇ることが存在意義
142デフォルトの名無しさん
2020/12/08(火) 10:33:58.70ID:p9ADjhn4
ginでオレオレwebアプリを勉強がてら作ってるのだけどtemplateベタ書きなmvcっぽいので参考サイトやリポジトリないですか?
日本語だとjson返すAPIばかりなので英語でもいいので
143デフォルトの名無しさん
2020/12/08(火) 11:22:36.96ID:xomfKp6r
JSON返すWebAPIが大の得意だからwebページの用途に関してはブログを書く気がないんじゃないかな?
webページでは画面遷移は控えめにシングルページ主体で、JavaScriptによってセッションキー付けてWebAPI叩けば用は足りるだろうという推測

これは一般的に聞いた話ではなく、自分がstrutsページ遷移とかでセッションのデータを管理するのが大変なんで、なるべく使いたくないなーと思ってるための希望的妄想なのですまない
144デフォルトの名無しさん
2020/12/08(火) 12:18:51.20ID:WJUcdgJr
>>140
趣味でやるならLISP forth Nimあたりのマクロの強い言語のほうが面白いよ。
飯の種としてはおすすめしないけど。
145デフォルトの名無しさん
2020/12/09(水) 01:20:46.40ID:WuZTb4kZ
ふざけたもん勧めんじゃねえぞゴルァ!!
146デフォルトの名無しさん
2020/12/09(水) 02:36:15.78ID:1fNUcYVK
自鯖で静的なHTML(貧弱なレンタル鯖用のサイト)を生成するスクリプトを走らせてたんだけど
それをGoogle compute engineの無料枠に移行しようと環境構築してたら
cpanm(perlのモジュール管理ツール)のDBIのインストールのテストで、メモリエラーでコケた
goは余計なリソース一切なく単体で動くという点で、弱小サーバをどう使うかという観点でも有望な気がする
147デフォルトの名無しさん
2020/12/09(水) 08:42:06.56ID:wV8nhMqi
>>146
ちゃんと読んでないけどHugo使えば?
148デフォルトの名無しさん
2020/12/09(水) 22:44:22.66ID:1fNUcYVK
>>147
こんなのあったのね…
もうオレオレでデータ入力用の管理サイトと、
構造化してリンクとか全部付与してサイト生成する部分まで作っちゃってる(´・ω・`)

まあ言いたかったのは少なくともPerl(+cpanm)よりも貧弱な環境で動きそうということ
149デフォルトの名無しさん
2020/12/09(水) 22:59:09.61ID:hK6AFgql
>>12,>>145
関数呼び出しを気にするならマクロのある言語使え
というわけで、lispよりも強力なマクロのあるJuliaを使おう
150デフォルトの名無しさん
2020/12/09(水) 23:40:59.80ID:jODQKuwy
> lispよりも強力なマクロのあるJulia

これ本当?
151デフォルトの名無しさん
2020/12/10(木) 07:24:30.41ID:0VEO1tgk
最強のマクロったら gcc の inline ではないだろうか?
152デフォルトの名無しさん
2020/12/10(木) 19:39:54.81ID:fydmziEi
>>150
「JuliaとLispのマクロの比較」っていうタイトルのブログを読んでそう思った。
リンク貼りたかったけど、はてなブログのリンクはNGワードっぽいから自分でググってくれ
153デフォルトの名無しさん
2020/12/10(木) 20:30:53.92ID:nolBjcag
マクロでlispに勝てる言語ってほとんどlispじゃね?
154デフォルトの名無しさん
2020/12/10(木) 20:45:08.50ID:TmcetjS0
強力という言葉の意味次第だろう
そのブログにも書いてあるけど、
何でも出来るという意味ならlispの方に歩がある
155デフォルトの名無しさん
2020/12/10(木) 20:45:22.05ID:fydmziEi
最強のマクロがある言語はどれなのか
C言語とLisp, Julia, Nim, Rustの5言語に精通してる人なら答えられるかもしれない……
156デフォルトの名無しさん
2020/12/10(木) 20:51:55.95ID:nolBjcag
juliaのマクロはschemeの健全マクロみたいなもんなのかな?そうなら健全なマクロでも変数補足しちゃうはずだよ。マクロに関してはastベタ書きするLISP族が一番適してるとおもうけどな
157デフォルトの名無しさん
2020/12/10(木) 21:16:06.92ID:YXjbRyJb
デフォルトで変数捕捉しません。
させたいときはエスケープする。
158デフォルトの名無しさん
2020/12/11(金) 02:56:17.53ID:/jUQlBbU
そんなにマクロつかいたきゃ
ビルドの途中でC/C++のプリプロセッサを間にかませや
159デフォルトの名無しさん
2020/12/11(金) 03:07:10.50ID:RI9UvvOD
そんなオモチャみたいなマクロの話じゃないから黙ってろ
真のマクロの話をしてるんだ
160デフォルトの名無しさん
2020/12/11(金) 06:25:35.96ID:ki/gtV8Z
GO2のリリース日を教えてください
来年にはきましゅか?
161デフォルトの名無しさん
2020/12/11(金) 20:15:55.93ID:i7+Pb2PU
来まちゅよ!
162デフォルトの名無しさん
2020/12/11(金) 20:31:05.80ID:ozodvswY
来てもなぁ
とりたてて困ってない
滅多に使わなくて実感ないから正規表現が遅いと言われてもピンとこないし
163デフォルトの名無しさん
2020/12/13(日) 00:32:21.22ID:V5v4lW7x
int64をuint64に変換する簡単な方法って無い?
当然に収まらないからマイナス値はif文で0にしてあるものとする

何が困ってるかと言うと、ファイルサイズはosパッケージではint64なのに、zipパッケージではuint64なんで

もう面倒なんで、文字列にしてハイフン取っちゃおうかな
164デフォルトの名無しさん
2020/12/13(日) 02:18:12.88ID:1g8P/X2h
GOでRSSリーダー作れましゅか?
165デフォルトの名無しさん
2020/12/13(日) 02:28:39.75ID:V5v4lW7x
httpで読み込んで
https://qiita.com/ytkhs/items/948f516ec82c82eaa882
とかXMLパースするだけだろRSS

JSONは要素のコメントなしで読み込む機能はあるけど、XMLはどうだったか知らん
名前空間も
166デフォルトの名無しさん
2020/12/13(日) 02:33:15.75ID:RtMOGcGM
>>163
uint64() じゃダメなん?
https://play.golang.org/p/hwbSw8-k3Fn
167デフォルトの名無しさん
2020/12/13(日) 02:48:56.92ID:V5v4lW7x
>>166
orz 組み込み関数見落としかぁ
168デフォルトの名無しさん
2020/12/13(日) 14:24:43.55ID:RBQoQqxa
そういう次元の話じゃない
せめてググろう
169デフォルトの名無しさん
2020/12/13(日) 15:04:34.66ID:V5v4lW7x
Go製のrssリーダーはすでに幾つかあるが、作れるかであって使えるかじゃないから、自作する話だと判断するのが妥当

rssの要素技術はhttpとXML
rssのURLをブラウザで叩けば最低限読めるのだから、他に必要な技術はない
作れるかと聞かれているのだから、要素技術をサポートしているか、という質問だと判断するのが妥当なのでは?
170デフォルトの名無しさん
2020/12/13(日) 15:18:49.96ID:Nr97RBB7
GoでGUIアプリのRSSリーダーを開発できるかという質問なのかな?
QTくらいしか俺は触ったことないけれども
171デフォルトの名無しさん
2020/12/13(日) 16:29:04.67ID:XiV1m0kj
組み込み関数じゃなくて言語の基本仕様レベルだよ
って話じゃないの
172デフォルトの名無しさん
2020/12/18(金) 22:04:00.43ID:+Wrhvh6s
GOってもしかして人気無い?
2〜3年前と比べて下火になってる?
173デフォルトの名無しさん
2020/12/19(土) 00:17:10.67ID:TNlruc2Y
go routineって windows APIで言うと単なるファイバーだったのね。何か昔に戻った見たい。
それなら、パフォーマンス気にする処理なら自分でスレッドとメッセージループでしっかり組んだ方が早いし確実だと思った。

初期のgo routineの中でビジーループすると他の処理が全部止まるってのも笑えたし、最新のgoでの改善策はAPI呼び出した時にディスパッチされますって。プリエンティブ無しの初期のRTOS見たいな動き。VBAのdo procだっけ、ループ中に他の処理動かすやつ。あれと同じ。
174デフォルトの名無しさん
2020/12/19(土) 00:39:26.57ID:x1EY5aRu
そう、劣化Erlangなのだ!
175デフォルトの名無しさん
2020/12/19(土) 00:52:20.88ID:tyWP7Wcq
じゃあGo捨ててErlang/Elixirを学び直すんですか?
貴方、正気ですか?
176デフォルトの名無しさん
2020/12/19(土) 08:38:32.21ID:U4dyNzHj
またVScodeでアップデートしたら
go get package failed: err: exit status 1: stderr: template: main:1:9: executing "main" at <.Module.Path>: nil pointer evaluating *modinfo.ModulePublic.Path
とか出てimportできない!とかほざくようになってしまった
Go自体のアップデートを1.14.2で止めてるからだろうか?
177デフォルトの名無しさん
2020/12/19(土) 08:51:06.40ID:U4dyNzHj
>>176
1.14.13まで上げたけどダメ
他のプロジェクトでは問題なし(解せぬ
go env GOPATH ではちゃんとパスが通ってる
setting.jsonは共通
178デフォルトの名無しさん
2020/12/19(土) 08:59:22.58ID:U4dyNzHj
>>176
ほかのプロジェクトと比較
OneDriveとかユーザーディレクトリからcのサブディレクトリに移したら出なくなった
空白入りとか漢字のパスといった国際化への対応が、またダメになったのかもしれない
179デフォルトの名無しさん
2020/12/19(土) 11:09:41.00ID:/QQvHqFx
>>173
goroutineはファイバーじゃなくて(グリーン)スレッドだろ。
180デフォルトの名無しさん
2020/12/19(土) 11:20:53.48ID:U4dyNzHj
大体がスタックを関数呼び出し毎にチェックして拡張する仕様がどうかしてる
これがあるので他と比較するのはあまり意味がないのでは?
そんな変態的な仕様が過去にあったなら、それとは比較できる
勉強不足で知らんから
181デフォルトの名無しさん
2020/12/20(日) 04:52:15.58ID:sa/VnQLT
>>172
JSとPythonに比べたら人気はない
ただしそこそこの速度が出るので実用的
182デフォルトの名無しさん
2020/12/20(日) 05:40:24.66ID:Udz0+PvH
グーグルの秀才たちが内輪向けに作った言語だから一般向けじゃないんだよなあ
変数の宣言〜初期値代入の形態が何種類あるかってだけでも初心者を脱落させるに十分
183デフォルトの名無しさん
2020/12/20(日) 06:35:14.49ID:1LcS4Wc6
繰り返しは無理してでもforに集約してるクセになんか片手落ちだよなw
184デフォルトの名無しさん
2020/12/20(日) 11:21:25.65ID:1+oqFOqA
マイクロサービスってログイン認証とかどうやってるんですか?
ログインユーザーのトークンをDBに保持してそれぞれのマイクロサービスでDB情報を共有したりするイメージですか?
185デフォルトの名無しさん
2020/12/20(日) 12:03:40.89ID:Dsr91pCp
>>184
JWTを送る方法もあるというか、どちらかと言えば主流?
俺は認証フレームワークの都合で使ったことないけど
186デフォルトの名無しさん
2020/12/20(日) 12:06:57.91ID:Dsr91pCp
>>185
都合というより明らかに手抜きで
187デフォルトの名無しさん
2020/12/20(日) 14:19:56.97ID:4RVTKdnj
>>179
う〜ん、微妙。同じ事言いたいだけかな。複数のファイバーって方がしっくり来る。結局、1万個のgo routineがあったら、動的に5個とか10個とか小数のスレッドが立ち上がり、メッセージループで逐次処理してるだけだから。
まあ関数途中から再開出来たりするのは言語仕様として使いやすくしてるだけ。暗黙的にasync構文が自動挿入されまくっているだけ。
188デフォルトの名無しさん
2020/12/20(日) 14:32:19.95ID:Gd3F49It
普段C#書いてるけどゴルーチン大好きよ
圧倒的に楽
189デフォルトの名無しさん
2020/12/20(日) 14:47:35.49ID:zWi39lLO
普段Rust書いてるけどゴルーチン圧倒的に楽だね
たまに名前が気に入らんだの、ググラビリティ低いだの聞くけど
その辺はCでもGoでもなく、Rustのが辛ぽよ
190デフォルトの名無しさん
2020/12/20(日) 14:47:50.12ID:A6h0ajNd
>>187
プリエンプションするからファイバーじゃなくてグリーンスレッドなの。
191デフォルトの名無しさん
2020/12/20(日) 14:54:10.97ID:U9jbkkr5
n:mでぶん回してタスクのスティールもするし、それをファイバーとは呼ばんと思う。
192デフォルトの名無しさん
2020/12/20(日) 18:12:25.64ID:sa/VnQLT
とはいえスレッド使いたいことはある
重い計算処理を完全に占有させたい時とか
193デフォルトの名無しさん
2020/12/20(日) 20:54:33.91ID:4RVTKdnj
>>190
プリエンプションするの?初期は誰かがループすると他のgo routine呼ばれず、その後、改良されてAPI呼んだタイミングではするけど、純粋な計算とかのループはNGってください記事までは見たけど。最新だとするの?どんどん本物のスレッドに近付けて処理重たくなって最終的に本末転倒な結果にならないのか?
194デフォルトの名無しさん
2020/12/20(日) 21:00:10.73ID:4RVTKdnj
>>188
c# なら taskとgo routineって殆んど同じかなと思ってしまうがどうなの?c#ではスレッド直接使ってたって話し?
195デフォルトの名無しさん
2020/12/20(日) 21:23:39.28ID:Dsr91pCp
for i:=0;i<n;i++ {} というループでも1.2以降ではスタック操作でスイッチングが走るようになったから、for {} と書かない限りは気にすんなという記事を読んだ
196デフォルトの名無しさん
2020/12/20(日) 21:58:32.70ID:4RVTKdnj
>>195
そう言う事なのかぁ。そんな単純ループでも切り替えチェックを毎回実行してるって性能面ではすごいデメリットだな。
197デフォルトの名無しさん
2020/12/20(日) 23:04:35.11ID:Dsr91pCp
>>196
性能では不利だけど、それはGoの優位点でもある

Goはスタックつまり自動変数の領域を初期値2KB(Javaのスレッドの1/500)しか持たず、それを必要時に拡張する
そのため、goroutineを10000個作ってもスタックは初期値なら20MBあれば良い(Javaのスレッドだと10GB)
そんなにgoroutineを使うか?という話だけど、webAPIが同時接続10000とかの場合を想定(昔は10K問題として大問題)
今でも300万同時接続をJavaとかのスレッドで扱おうとすると3TBの仮想メモリが最低限必要になるけど、Goなら最低6GBで済む(スレッドのスタックサイズをデフォルト値で使ったら)

そんなわけでスレッドのメモリ消費を何とかしない限り、webAPIにおいてGoのアドバンテージは無くならない
198デフォルトの名無しさん
2020/12/21(月) 00:48:28.58ID:LJe505L1
>>197
いや、go routineと本物のthread(javaも同じ)で比較するとその通りだと思う。
過去のwebフレームワークが1要求を愚直に1スレッドに割当てして性能限界に至ったのも真実。

だからgo routineを使えば、同じく1要求を愚直に1 go routineに割当したとしてもgo 内部で複数のgo routineを1つのスレッドに割当する事で極力性能、メモリ使用量を抑える事が出来ますって事だけ何だよな。

そして、スレッドのコストが高いってのはある意味常識で、スレッドは最低限に抑えましょうてのは昔から常識。方法としては、古典的なメッセージループ、スレッドプール、ファイバー、タスク、async構文、nodeの全シングルスレッドとあらゆる方法がある中の一つがgo routine。

中身は、まあ他の手法から抜きん出て便利なのか否かは歴史がこれから証明する所。

apacheが歴史的に1要求1プロセスのforkベースだったから、webはプロセスから見たらスレッドの方が軽量って事で性能面は見過ごされて来た歴史がある。組込みシステムはリソース命だからかなり初期からスレッドの高コストはしっかり意識してモノ作りしている。
199デフォルトの名無しさん
2020/12/21(月) 01:00:05.48ID:y0Qc2EqT
わかったから
200デフォルトの名無しさん
2020/12/21(月) 01:21:44.50ID:k4qTN2iI
Unity界隈はどうなんだろ?
基本はC#で部分的にgoroutine使ってるような話を聞いたことあるが正確なところは不明
201デフォルトの名無しさん
2020/12/21(月) 03:21:16.47ID:56qSn/9L
C#のTaskは非同期+スレッドプール(OSスレッド)

>>197
10年くらいまえの認識だね
202デフォルトの名無しさん
2020/12/23(水) 22:22:43.94ID:O5AY10nM
GOはホント話題無いね
いい意味で枯れてきてるのかもしれないけどとにかくトピックが少ない
203デフォルトの名無しさん
2020/12/23(水) 22:48:40.86ID:LHRvotnC
新機能に渇望してないのが大きい
期待の新機能であるジェネリックが欲しい層もあまり数は居なさそうだし
もう、あれば便利だろうし使うけど特に今すぐには要らないよなって

弱点としてよく挙げられる正規表現も、実用性が無いほど遅い訳じゃないし、探せば高速なライブラリもあるんだろなとか思ってる
204デフォルトの名無しさん
2020/12/23(水) 23:55:24.14ID:GvbKZ216
>>203
正規表現そんな遅いんだっけ?
Goだと文字列メソッド使うからあんまり気にしてなかったわ
205デフォルトの名無しさん
2020/12/24(木) 03:36:46.49ID:ieyHo1hw
>>204
アルゴリズムでは決して遅くないが、DFAを再利用するために排他制御するので並列処理で遅くなるとのこと
https://qiita.com/momotaro98/items/09d0f968d44c7027450d
206デフォルトの名無しさん
2020/12/24(木) 04:26:45.03ID:yxJlqEyC
そんな排他制御してるのか
本末転倒じゃねえか
207デフォルトの名無しさん
2020/12/24(木) 04:28:11.75ID:yxJlqEyC
>>202
もう出て10年くらい経ってるんだよな
大きな新機能の追加も無さそうだし
パフォーマンスを極めるフェーズになってるから話題ないねえ
208デフォルトの名無しさん
2020/12/24(木) 05:41:11.22ID:jgmFKpNF
例外がないif err言語さん……w
209デフォルトの名無しさん
2020/12/24(木) 07:24:03.78ID:ieyHo1hw
例外キボンという声は聞いたことないから、やはり
今時例外なのプークスクスとみんな思ってると考えていいかな?
210デフォルトの名無しさん
2020/12/24(木) 08:28:54.70ID:7F4cW8XH
いいよ。
211デフォルトの名無しさん
2020/12/24(木) 08:40:06.16ID:QpUzPsdF
コストの高い例外フロー制御はともかく、
例外専用の戻り値は欲しいわ。
212デフォルトの名無しさん
2020/12/24(木) 09:35:28.02ID:ieyHo1hw
Javaのだと、シグネチャに無い例外を返せないからインターフェースとして呼ぶのに困るし
C#のだとガバガバ
結局、実際には何が帰るのか分かりませんとなってカスタムしたExceptionで受ける一択
更にそのため常にメソッド内でカスタムExceptionにラップするためのcatchを書かないとならんし
面倒すぎたよね例外(過去形でかくな
213デフォルトの名無しさん
2020/12/24(木) 16:16:26.58ID:yxJlqEyC
コールスタックを一気にジャンプするとかおぞましいことはいらないよ
単なるgotoだし
214デフォルトの名無しさん
2020/12/24(木) 18:05:24.14ID:z4h3nURn
if err書いて回るのに比べればgotoのほうがマシでしょ
それにコールスタックを一気にジャンプするのは言語による実装の詳細で必須事項じゃないよね
215デフォルトの名無しさん
2020/12/24(木) 18:07:54.69ID:ieyHo1hw
マシとは思わないから文句が出ないんだよねー
216デフォルトの名無しさん
2020/12/24(木) 18:11:34.30ID:ieyHo1hw
文句が出てないという根拠は、そこそこちゃんと使っている人からの不満点として見たことが無い、というもの
反証は受け付ける
217デフォルトの名無しさん
2020/12/24(木) 18:21:35.08ID:fJ8Afd/q
✕Golang
○IfErang
218デフォルトの名無しさん
2020/12/24(木) 19:41:05.61ID:grZRkp5b
deferがあるぞ
219デフォルトの名無しさん
2020/12/24(木) 21:25:43.87ID:YakLuvNb
googleって地図だけの一発屋やな
220デフォルトの名無しさん
2020/12/24(木) 21:30:49.79ID:ieyHo1hw
突っ込み所しかなくて、えー頑張ってね
きっと良いこともあるよ
221デフォルトの名無しさん
2020/12/24(木) 21:59:07.90ID:NCBnjOT7
err頑張ってね
222デフォルトの名無しさん
2020/12/24(木) 21:59:59.67ID:ieyHo1hw
var exp = flag.Bool("exp", true, "export")
で、-exp false しても *exp が false にならん
どこを間違えてるのか
223デフォルトの名無しさん
2020/12/24(木) 22:32:45.42ID:ieyHo1hw
https://play.golang.org/p/gcNo0xC4tUj

exp:true, CommandLine:&{0x4a6ee0 /tmpfs/play true map[exp:0xc000108040] map[exp:0xc000108040] [false] 1 <nil>}
224デフォルトの名無しさん
2020/12/24(木) 22:34:38.12ID:yxJlqEyC
Win32 APIもエラーコードチェックばっかやらなきゃいけない
それと大して変わらんよ
低レイヤーのプログラミングはいつも同じ
225デフォルトの名無しさん
2020/12/24(木) 22:49:24.53ID:ieyHo1hw
判明というか多分バグ
他のフラグは
-cred admin.json
とかの形式で取り込めるけど、
expは(多分flag.Bool()は)
-exp=false
と指定しないと取り込まれない
226デフォルトの名無しさん
2020/12/24(木) 22:54:47.90ID:ieyHo1hw
ああ?go documentで検索したら、non-boolean only
仕様なの?何で?because the meaning of the command?
227デフォルトの名無しさん
2020/12/24(木) 23:00:26.57ID:ieyHo1hw
文字列で取り込んでbooleanに変換しなきゃならんのか
めんどくさい……
228デフォルトの名無しさん
2020/12/28(月) 21:09:09.98ID:Rt6RXU1L
goオワコン?
229デフォルトの名無しさん
2020/12/28(月) 21:15:09.97ID:1wnarVmc
go routine リーク周りはまだ話があるんじゃないの?
230デフォルトの名無しさん
2020/12/28(月) 22:36:34.04ID:Rt6RXU1L
>>222
デフォルトtrueのフラグパラメータって設計が良くない気がするなー
俺なら、-disableExport(デフォルト:false)って引数にするかも。で指定するときは、
go run main.go -disableExport
って感じでtrueとか、falseとかつけないかなー。なぜならフラグ指定してる時点で「true」だから
231デフォルトの名無しさん
2020/12/28(月) 23:28:27.07ID:w2tkTAcI
>>228
必須スキルだよ?
232デフォルトの名無しさん
2020/12/28(月) 23:52:44.50ID:Rt6RXU1L
>>231
だよね
go好きだから.........
233デフォルトの名無しさん
2020/12/29(火) 08:01:29.87ID:pjgVtImx
>>229
https://qiita.com/kawasin73/items/7f04b2943bdbb7588c3e
でも筆者が勘違いしていたので、単に一度ヒープから確保したメモリはヒープのプールに入るため取得されたまま、になってただけと訂正入ってる

ヒープが利用終わったら解放されると思い込んだ勘違いという結論になったのでは?
234デフォルトの名無しさん
2020/12/29(火) 08:40:46.55ID:+jeJmMuS
>>233
いやそういうリークじゃなくて、正確にはチャンネル待ちリークというかそういう感じの話。
235デフォルトの名無しさん
2020/12/29(火) 09:02:37.84ID:pjgVtImx
待ちなのにリークなん?
送ったはずのチャネル通信が届かない事案だとしたら、それは通信の問題でリークじゃないよね
236デフォルトの名無しさん
2020/12/29(火) 09:27:45.67ID:+jeJmMuS
いやだから通信の問題で実質リークというかgoroutineが溢れるって話をしてるんだが。。
kube並の大きさのプログラムで発生したらデバッグできんの?って話をしてるんだよ。
237デフォルトの名無しさん
2020/12/29(火) 11:28:39.38ID:pjgVtImx
チャネル送信が送られないなんて報告があるの?
と言ってる
238デフォルトの名無しさん
2020/12/29(火) 18:59:11.37ID:SyBq36e1
…ゴルーチンが溢れるって何や?
239デフォルトの名無しさん
2020/12/29(火) 19:07:08.67ID:pjgVtImx
検索しても233にある誤解が原因だった記事くらいしか見つからなかったから、具体的な記事のリンクを張ってくれるのを待ってる
240デフォルトの名無しさん
2020/12/29(火) 19:42:26.61ID:LSI+C1uB
ゴルが解放されないって話なら永続リソースとかを
掴んだまま離さないとかそういうお行儀の悪いプログラムしてるからだよ
動的言語と同じ感覚でプログラミングするとそういう痛い目にあう
241デフォルトの名無しさん
2021/01/02(土) 23:36:52.65ID:hnNoCPhn
goって終わったよね?
242デフォルトの名無しさん
2021/01/02(土) 23:51:01.94ID:hutYk629
無理に使おうとしなくてもええんやで
ウチはインフラ部分はほぼgoに置き換えてる
でもc#の方がすこや
243デフォルトの名無しさん
2021/01/03(日) 02:43:46.82ID:965qc4Vx
>>241
rustの時代とは言われてる
244デフォルトの名無しさん
2021/01/03(日) 03:00:10.23ID:Mk7RJK9u
終わってないが、始まってもない
245デフォルトの名無しさん
2021/01/03(日) 03:00:59.89ID:j7drLdmA
もっと流行るかと思ったけど全くだよな
やっぱ言語仕様に癖がありすぎる
246デフォルトの名無しさん
2021/01/03(日) 11:13:21.86ID:9SkeDBIZ
癖っていうか糞仕様が多い
いまどきこれ??みたいな
247デフォルトの名無しさん
2021/01/03(日) 11:48:40.90ID:ez188GTZ
国内でのGo普及活動家の母体メルカリのGoエンジニアたち全然情報発信しなくなってて草
2の対立とか、そもそもの言語仕様の酷さとかに気づいたのかな
248デフォルトの名無しさん
2021/01/03(日) 16:34:24.05ID:j7drLdmA
>>247
最近ソフトウェアデザインに記事書いてたよ
レベルがクソ高くてますます初心者置いてけぼりだろうな
249デフォルトの名無しさん
2021/01/03(日) 16:44:28.91ID:965qc4Vx
goって、特定の構造体が目的のインターフェース実装してるか見分けるのむずくない?みんなどうやってるの?
250デフォルトの名無しさん
2021/01/03(日) 17:38:40.24ID:PgQRe2mf
>>249
https://play.golang.org/p/0MGZkqhS6Oe
こんな感じでエラーチェックしてるかな

./prog.go:20:2: cannot use &StrE literal (type *StrE) as type IStr in assignment:
*StrE does not implement IStr (missing Func2 method)
./prog.go:21:2: cannot use &StrE2 literal (type *StrE2) as type IStr in assignment:
*StrE2 does not implement IStr (missing Func method)
251デフォルトの名無しさん
2021/01/03(日) 17:46:07.51ID:PgQRe2mf
前スレのこれは対応してほしい……

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を返しているとは認められない。
252デフォルトの名無しさん
2021/01/03(日) 19:26:43.94ID:965qc4Vx
>>250
え、ビルドするまで分からないってこと?クソ面倒じゃない?
あと、ってことはパッと見ただけじゃやっぱ分からんってことかー。。
253デフォルトの名無しさん
2021/01/03(日) 19:29:01.30ID:965qc4Vx
あ、でもそれなら実装漏れに最低ビルド時に気づけるってことか
たしかにその方法良いですね。真似します。
254デフォルトの名無しさん
2021/01/05(火) 01:56:09.22ID:RVMSJAuG
>>248
気が向いて買って読んでみたけど
たいした内容じゃなかたぞ
255デフォルトの名無しさん
2021/01/06(水) 15:29:01.20ID:/bMEAqVx
GODOTってゲームの開発環境あるんだがGOなのかと思ってたよ
256デフォルトの名無しさん
2021/01/06(水) 15:39:08.43ID:9b/ixvsd
>>253
一番の利点は、メインのないライブラリプロジェクトでメソッドの実装ミスを検知できること
テストでもいいんだけど、漏れとか
257デフォルトの名無しさん
2021/01/06(水) 19:57:45.35ID:6LFK/57e
>>256
外部のパッケージ内で、目的のインターフェースの実装探すときどうしてる?
ideとかで実装済みクラス一覧見れたりできるのかな
258デフォルトの名無しさん
2021/01/06(水) 22:46:22.85ID:RqNhj0Vs
>>255
名前の元ネタはゴドーを待ちながらだよ
259デフォルトの名無しさん
2021/01/08(金) 10:42:43.33ID:SFYEeLwk
VScodeでgo.modがパッケージ更新できなくて悩んだ
結局コマンドラインから go get -u で取得したら GOPATH /pkg/mod/... に最新版が取得できた
VScodeのgo拡張って変な動きとかするなぁ
260デフォルトの名無しさん
2021/01/10(日) 08:45:10.91ID:tmTVLRQU
ubuntuのi386って、もしかして32bit?
goをインストールして動かそうとしたらファイル形式エラーで実行できなかった
i386捨ててamd64でやりなおし
261デフォルトの名無しさん
2021/01/10(日) 10:53:20.77ID:tmTVLRQU
>>260
amd64をインストールし直したら動いた
262デフォルトの名無しさん
2021/01/10(日) 11:16:28.28ID:tmTVLRQU
ものすごい当たり前の落とし穴なんだけど
os.MkdirAll() で os.ModeDir だけ指定してたら、Linux に行ったら権限不足でファイルを読み書きできなかった
アホか自分は!当たり前すぎるわ!orz
263デフォルトの名無しさん
2021/01/13(水) 02:41:40.78ID:LRQMEOBI
goエンジニアって0.5割ぐらいの超人エンジニアがいて、残りはマジでカス未満のエンジニアしかいなくないか?
ライブラリよく作ってるようなエンジニア以外の業務コード見たら吐き気するんだが同士おる?
264デフォルトの名無しさん
2021/01/13(水) 02:44:08.87ID:atGCk1//
>>263
それ何系の会社?
メルカリ界隈じゃないよね?
265デフォルトの名無しさん
2021/01/13(水) 03:39:37.52ID:uZRkh4HP
Ruby/Go の神、Vagrant, Terraform, Packer の作者、
今世紀最大の起業家、HashiCorp のMitchell Hashimoto

皆、彼を参考にしてる
266デフォルトの名無しさん
2021/01/13(水) 05:37:10.83ID:vmn8olpj
>>265
お前KENTAガイジやろ?
ここでクソみたいな宣伝すんなボケ
267デフォルトの名無しさん
2021/01/13(水) 08:37:45.48ID:5GOPYdWB
>>266
KENTAって誰ですか?
貴方のせいで検索して動画を再生してしまいました
貴方のせいでKENTAさんに収益が発生しました
268デフォルトの名無しさん
2021/01/13(水) 08:52:35.47ID:u6YyMdJS
>>263
それ〇〇エンジニアの全てが同じ状況だろ、それとも〇〇言語だと超人が増えるのか?
269デフォルトの名無しさん
2021/01/13(水) 10:02:18.24ID:edoUNcFJ
RubyをNGすればケンタガイジも自然に消えるよ
Go使いならRuby触ること無いから問題無いっしょ
270デフォルトの名無しさん
2021/01/13(水) 12:07:29.42ID:GhxYbqoB
ルビィ/Go の神、Vagrant, Terraform, Packer の作者、
今世紀最大の起業家、HashiCorp のMitchell Hashimoto

皆、彼を参考にしてる
271デフォルトの名無しさん
2021/01/13(水) 22:08:57.53ID:lYKbR8rO
KENTA
HashiCorp

KENTAガイジ対策として上記単語をNGワード設定しておきましょう。
プログラム板で二度と不快な投稿を目にしなくてすみましゅよ。
272デフォルトの名無しさん
2021/01/13(水) 22:49:31.14ID:mK+3gZUP
あとrubyのNG登録が浸透してしまったからか最近ルビィて書いとるぞそいつ。
ルビィもNG登録や。
273デフォルトの名無しさん
2021/01/14(木) 02:30:53.33ID:4quR9ect
Linuxはinotify、WindowsはWMIを使ってディレクトリへの更新を検知してくれるパッケージって出来ないかな
iOSにも同じような機構はあるだろうし
274デフォルトの名無しさん
2021/01/14(木) 06:04:18.90ID:AIfhUXVU
ル・ビぃ/Go の神、Vagrant, Terraform, Packer の作者、
今世紀最大の起業家、ハシCorp のMitchell ハシmoto

皆、彼を参考にしてる
275デフォルトの名無しさん
2021/01/14(木) 07:09:01.73ID:E+SJr/XS
あーあ、意固地になっちゃった
お前らガイジ揶揄うのもほどほどにしとけよ?w
276デフォルトの名無しさん
2021/01/14(木) 07:12:10.46ID:iNbGwVKU
猫シCorp
277デフォルトの名無しさん
2021/01/14(木) 08:03:13.12ID:mp+NLhBe
>>275
元々価値の無い駄文を垂れ流して鬱陶しかったけど、日本語としてすら意味をなさなくなれば目に入ってもスルーしやすいからこれはこれでいいような気がするw
278デフォルトの名無しさん
2021/01/14(木) 08:11:02.02ID:AIfhUXVU
>>277
効いてて草

ル・bi、、、ィ

ル、b・ィ
279デフォルトの名無しさん
2021/01/14(木) 08:11:43.95ID:1yd08R70
>>275
NG出来なくてくやちーねーwwwwww

ruuu!biii最強!!!!wwwwwwwww
280デフォルトの名無しさん
2021/01/14(木) 11:50:14.05ID:hXZPMCaj
推奨NGワード:
の神
起業家
参考にしてる
281デフォルトの名無しさん
2021/01/14(木) 13:53:19.60ID:Se9utFzt
ル・bぃ/G,o のG,od、Vag_rant, Terr_aform, Pac_ker の作者、
今世_紀最大の起_業家、ハシCorp のMitケル ハシmoto

皆・彼を参考にしてる
ル・ビぃ/G,o のG・od、Vagrant, Terr_aform, Pac_ker の作者、
今_世紀最大の起_業_家、ハシCorp のMitchell ハシmoto

皆_彼_を参_考にしてる
282デフォルトの名無しさん
2021/01/14(木) 14:07:06.27ID:QYOIxwgk
もはや出会い系のスパム並みの印象になっちゃってるから、色々逆効果だぞ。
283デフォルトの名無しさん
2021/01/14(木) 14:20:45.98ID:mp+NLhBe
狂人のすることは分からんなw
284デフォルトの名無しさん
2021/01/14(木) 15:27:15.99ID:neKmd3sr
ruby is God
285デフォルトの名無しさん
2021/01/14(木) 19:21:51.56ID:ToTdZAIR
糖質をイジメるな!!
286デフォルトの名無しさん
2021/01/14(木) 20:11:58.10ID:VN42fcD2
R u b y 
   G o  の 神

Vagrant, Terraform, Packer の作者


★今世紀最大★の★起業家★

HashiCorp のMitchell Hashimoto

皆 、 彼 を 参 考 に し て る
287デフォルトの名無しさん
2021/01/14(木) 22:26:27.13ID:Bnzn5h4u
火病るガイジを虐めて愉しむ冬の夜
288デフォルトの名無しさん
2021/01/14(木) 22:43:56.58ID:VN42fcD2
キモオタプログラマー君はみんなから虐められてるけど……
289デフォルトの名無しさん
2021/01/14(木) 22:47:16.08ID:VN42fcD2
学生の頃、眼鏡かけた気持ち悪いブス虐めて遊んでたけど
大人になるとそういう奴らがネットで暴れるんだな
俺が植え付けたトラウマは大きかったんだな
青葉みたいにはなるなよ……
290デフォルトの名無しさん
2021/01/14(木) 23:28:29.98ID:mp+NLhBe
Ruby君が日本語の文章っぽいものを書いてるのを初めて見た気がする。
中身はともかくとして。
291デフォルトの名無しさん
2021/01/14(木) 23:29:44.90ID:nxZv0xP1
そいつはタダのなりすめし
292デフォルトの名無しさん
2021/01/14(木) 23:42:03.90ID:X9SM/m5M
なりすましじゃないのは最初のやつだけでしょ
293デフォルトの名無しさん
2021/01/15(金) 01:00:12.28ID:5E/tucpK
なりすましという事にしとこうぜw
294デフォルトの名無しさん
2021/01/15(金) 15:42:02.84ID:uPQddvH2
goの文法教えて

if a, b := c.(*d.Foo); b && o.Bar() {
 ・・・
}

これは2つの変数 a, b に代入ってことであってる?
c.(*d.Foo) この部分がよくわからない
セミコロンは単に2つの式を入れるためだけのもの?
295デフォルトの名無しさん
2021/01/15(金) 16:10:06.13ID:CBMjbZAp
>>294
Type assertions ね
https://golang.org/ref/spec#Type_assertions

こんな感じに使う
https://play.golang.org/p/AupUP2aCZ5c

d はパッケージ名だろうし、o は普通は a のはず
296デフォルトの名無しさん
2021/01/15(金) 16:18:33.58ID:CBMjbZAp
>>294
ざっくり説明すると、これはいわゆる型キャスト
b に型の変換が成功したのか論理値で代える
; 以降が if の判定に使われる論理式
むしろ ; 以前が特殊で、ここで返ってきた変数は {} の中だけで使える
a は Foo へのポインタなので、Foo のメソッドを呼べる
297デフォルトの名無しさん
2021/01/15(金) 21:19:06.47ID:uPQddvH2
ありがとう。他と違う文法はよくわからんw
298デフォルトの名無しさん
2021/01/15(金) 21:57:56.53ID:CBMjbZAp
C や Java とかでも for (int i=0; i<5; i++) {} と作成した i は{}の中だけで有効
それとノリは同じ
C#のusingやら、そういう特殊な構文はどの言語にもある

無理やりキャストするのではなく、キャストできない場合の判定がある分、他の言語よりもいくらか安全
この系統には map のインデックスアクセスがあり
if value, ok := m[key]; ok {
……
}
キーが無ければ ok には false が返る
299265
2021/01/15(金) 22:03:24.03ID:MomngUWn
Vagrant の作者、HashiCorp のMitchell Hashimoto もそうだけど、
皆、Ruby → Go がキャリアパス

メルカリ、カヤック
KENTA、るびきち、mattn

Ruby コミッターが多い、Cookpad、マネーフォワード、Ruby 開発
300デフォルトの名無しさん
2021/01/15(金) 22:13:27.50ID:Al0jsoYD
基地外にレスするつもりはなくて純粋に気になるんだけど、
RubyからGoに乗り換えた奴なんてそんなにいるのか?
俺の知ってるRubyist達はRubyしか知りませんやりませんマイクロサービス何それ食えるのって感じでGoとは遥か遠い連中だわ
GoはJava系かNodeやPythonから来る人が多い印象だな
301デフォルトの名無しさん
2021/01/15(金) 22:39:25.05ID:v2N1LTYS
vscodeでステップ実行してる時に値を見ると+xxx moreになるけど全部見たい場合はどうすればいいねん
302265
2021/01/15(金) 23:02:37.95ID:MomngUWn
Ruby on Rails で、スノーボードのサイトを作っていた、
Shopify の時価総額は、今や15兆円

Amazon は150兆円だけど、このままじゃ抜かれると、ライバル視してる

米国年収では、ついに、サーバー構築運用資格がRails を抜いた。
AWS ソリューション・アーキテクトが、1,500万円
VWware が、1,400万円

Rails が、1,300万円
Node.js が、900万円
ただし、Nodeの求人数は、Railsの2倍ある

Rubyでも、Shopifyアプリを作ったり、AWS Lambda, CloudFormation とか、色々な仕事があるけど、
速度重視のものは、Go へ行くだけ
303デフォルトの名無しさん
2021/01/16(土) 01:44:07.71ID:xzsyPdU6
ゴルーチン使いすぎてasync忘れてもうた
304デフォルトの名無しさん
2021/01/16(土) 01:46:47.49ID:1yiOpWx6
GoはPythonからのイメージすっごいある
305デフォルトの名無しさん
2021/01/16(土) 13:44:55.45ID:D2Bsg9bU
go1.16にちょっと興味が出た
ファイル埋め込みをサポートしてくれるのか
306デフォルトの名無しさん
2021/01/16(土) 16:32:55.26ID:D2Bsg9bU
//go:generate って自動でコマンド実行させられるけど、この機能のセキュリティの資料ってどこ?
ビルドはユーザー権限で動かすからサンドボックスとか無し?
307デフォルトの名無しさん
2021/01/16(土) 22:52:44.09ID:WbzMKQxD
セキュリティに対するケアなんか何もないよ
そもそも何のチェックもなくGitHubから直接パッケージを入れる仕様なんだから、
パッケージ作者がその気になればgo:generate云々以前に利用者のビルド成果物のバイナリに対してマルウェアを仕込むことすら造作もない
パッケージを入れるときには作者を全面的に信頼しそういう重大なリスクを受け入れていることを忘れてはいけない
308デフォルトの名無しさん
2021/01/19(火) 22:24:32.58ID:+d4lPwTs
なんか会社のPCで WSL+Ubuntu に Go をインストールしたら、こんなエラーになって使えなかった

$ go version
go version go1.13.8 linux/amd64
$ go get -u golang.org/x/text
go: extracting golang.org/x/text v0.3.5
go get: rename /home/hoge/go/pkg/mod/golang.org/x/[email protected] /home/hoge/go/pkg/mod/golang.org/x/[email protected]: permission denied
309デフォルトの名無しさん
2021/01/20(水) 01:17:35.14ID:Rdh9isrB
ぐぐったらgoのバグみたいね
310デフォルトの名無しさん
2021/01/20(水) 01:39:00.63ID:sgAeHwon
これだからWSLは...
311デフォルトの名無しさん
2021/01/20(水) 01:44:37.61ID:Rdh9isrB
やっぱり出てきたか、デマ吐き
312デフォルトの名無しさん
2021/01/20(水) 10:21:29.47ID:sOzWFlEJ
Windows 10 Home でも出来るようになった、

WSL2 で、Docker でも使えば?
313デフォルトの名無しさん
2021/01/20(水) 23:51:09.81ID:houPsxKw
go1.16 がまだ出てないから statik 使ってるけど、コマンドラインから
go run github.com/rakyll/statik -f -src=static
叩くと、NISが

カテゴリ: 解決したセキュリティリスク
日時,リスク,活動,状態,推奨される処理,パス - ファイル名
2021/01/20 23:38:45,高,statik.exe (SONAR.SuspScript!g3) が SONAR によって検出されました,\
削除しました,解決しました - 処理の必要はありません,c:\Users\hoge\AppData\Local\Temp\go-build742135550\b001\exe\statik.exe

と容赦なく抹殺に来るんでバッチファイルから作成できない
トホホ

VScode からは実行できるんだけどなぁ
何が違うんだろう
314デフォルトの名無しさん
2021/01/21(木) 01:16:44.85ID:6tk1Snw3
あわしろ氏がDockerはオワコン、これからはWSLと言ってる。
315デフォルトの名無しさん
2021/01/21(木) 03:04:48.79ID:084E4D0G
推奨NGワード:あわしろ
316デフォルトの名無しさん
2021/01/21(木) 05:13:54.11ID:pnbRvl8z
推奨NGワード:NGワード
317デフォルトの名無しさん
2021/01/21(木) 05:17:47.11ID:6tk1Snw3
イクヤさんを馬鹿にしてんのか?
318デフォルトの名無しさん
2021/01/21(木) 07:41:51.93ID:JXSnM7xR
>>317
バカにされているのはお前自信だぞw
319デフォルトの名無しさん
2021/01/21(木) 10:36:56.38ID:9HZQp01R
>>301
これ教えてくれや
320デフォルトの名無しさん
2021/01/22(金) 23:26:34.48ID:vuLukHTi
goのパッケージで、全然違う役割で同じパッケージ名つけなくなったときみんなどうしてる?
321デフォルトの名無しさん
2021/01/22(金) 23:47:27.87ID:clRMgbeK
apiwrapper2
apiwrapper3
saigo_no_apiwrapper
apiwrapper_final
こんなかんじで
322デフォルトの名無しさん
2021/01/24(日) 02:37:19.18ID:49bdBtsk
>>321
そうかぁ...なんだかなぁ
323デフォルトの名無しさん
2021/01/24(日) 04:02:02.83ID:hPeuQsPP
イクヤさんはバカじゃないぞ。
ただの嫌な奴だ。
324デフォルトの名無しさん
2021/01/24(日) 19:31:46.17ID:tQo0lqIt
import (
zenzen "xxx.com/omae/package"
chigau "xxx.com/aitsu/package"
)
325デフォルトの名無しさん
2021/01/24(日) 22:40:05.67ID:49bdBtsk
>>324
いや、自分が作ってるアプリ内でパッケージが被りそうな場合ですー
326デフォルトの名無しさん
2021/01/24(日) 23:29:36.37ID:1VpxryXU
>>325
自分でも同じじゃないか?
327デフォルトの名無しさん
2021/01/25(月) 18:17:56.09ID:d/3tjDJa
>>326
たとえば、

package encrypt

っていう、APIの通信を暗号化するパッケージを自分で作ったとして、あとからユーザーがアップロードした画像を暗号化する処理作りたくなったとき、また

package encrypt

ってつけたくなるけど、最初に作ったAPIを暗号化する処理向けにすでに「encrypt」って使われてるからどうしよーってなるって話ですね

package apiencrypt
package userimageencrypt

にするのが普通ですか?
328デフォルトの名無しさん
2021/01/25(月) 18:55:36.51ID:ViKOXBu7
>>327
いや、同時に使用する場合でも>>324さんの言うようにエイリアスで区別してインポートして使えばいい
例えば標準パッケージのnet/httpに対して、サブリポジトリにもgolang.org/x/net/httpがあったりとか、実験的実装でも同じパッケージ名をつけたりしているし
329デフォルトの名無しさん
2021/01/25(月) 19:17:10.86ID:d/3tjDJa
>>328
いや、importするときの話ではなくて、実装する時の話です!
ちょっとあとでサンプルコード用意しますね!!
330デフォルトの名無しさん
2021/01/25(月) 20:10:27.92ID:ViKOXBu7
>>329
だから公式でもやってるから気にするなw
331デフォルトの名無しさん
2021/01/25(月) 21:54:18.14ID:SeLyUu4E
何がそんなに嫌なんだ?
332デフォルトの名無しさん
2021/01/25(月) 22:12:50.28ID:yfUr2T9s
単にエイリアスのことを理解してないだけでは?
333デフォルトの名無しさん
2021/01/25(月) 23:54:29.57ID:d/3tjDJa
すいません、僕のエイリアスの理解が間違ってました。↑でみなさんが言ってることが正しいです。
意味不明な事言って、誠に申し訳ありませんでした😳
334デフォルトの名無しさん
2021/01/26(火) 00:02:10.18ID:7TBhA+72
このスレでgolangのモヤモヤが一つ解消できました。本当にありがとうございました。
335デフォルトの名無しさん
2021/01/26(火) 01:18:09.44ID:84lZ6EGP
別にgolangだけじゃなく他の言語もほぼ同じ仕様だぞ
336デフォルトの名無しさん
2021/01/26(火) 02:03:46.73ID:wg8lZWjJ
意外と素直なやつで気にいった
337デフォルトの名無しさん
2021/01/26(火) 15:48:34.40ID:7TBhA+72
>>335
別ディレクトリの同一パッケージ名つけちゃうと、同じパッケージという扱いになると勘違いしてました。
ディレクトリが違えば、ちゃんと別パッケージ扱いになるんですね
338デフォルトの名無しさん
2021/01/26(火) 19:32:50.53ID:QK4hy34A
公開したアプリの機能追加しようとしたらgolintがまたゴネはじめた
調べるともうdeprecatedが可決されてるんだな
Apiと書くとAPIにしなきゃ絶許とかアホな子なんで困る
339デフォルトの名無しさん
2021/01/26(火) 19:41:08.73ID:QK4hy34A
すなおにgolangci-lintに切り替えた
340デフォルトの名無しさん
2021/01/27(水) 15:46:00.33ID:dNCRGAZL
最近素直な人多いね🤗
341デフォルトの名無しさん
2021/01/27(水) 19:26:08.32ID:D9j7gzMM
素直に尿道オナニーした
342デフォルトの名無しさん
2021/01/27(水) 20:43:24.94ID:Qr3ry02h
>>341
素直やなあ
343デフォルトの名無しさん
2021/01/30(土) 20:27:47.43ID:Vt3mM499
ごー言語ってどんなメリットがあるの?
344デフォルトの名無しさん
2021/01/30(土) 20:40:40.31ID:qJyO6h8a
高速なWebAPIが超楽に作れる

あとは、慣れるとスクリプト代わりに使える
345デフォルトの名無しさん
2021/01/31(日) 00:23:18.15ID:v0/+r0AQ
実行環境側で準備がいらないから、ちょっとしたツールとか作って人に配ったり、サーバーで実行したりしやすい
346デフォルトの名無しさん
2021/01/31(日) 02:08:30.36ID:sEqffcUE
linuxとwindowsで動かすツールにjava使ってたんだけど
少しづつGoに移植してる
かなり良い感触
ついにjavaを捨てられる
347デフォルトの名無しさん
2021/01/31(日) 02:54:28.37ID:pT/gblY8
>>345
それがあったか!

あとgithubからcloneしてこなくても go run できるのは意外と便利


でもこないだ statik を run したらノートンが怒って temp に作成された statik のイメージを問答無用で削除
build して実行したら動くから、temp にある exe がローカルディレクトリのファイルに書き込みするとヒューリスティック検知が危険と判断してるんだな、多分
348デフォルトの名無しさん
2021/02/03(水) 21:45:23.85ID:CpFR0HHF
>>347
> あとgithubからcloneしてこなくても go run できるのは意外と便利

これどゆこと??
349デフォルトの名無しさん
2021/02/03(水) 22:46:07.77ID:KfiW2k04
>>348
この例だと statik を使うとき、go.mod に github.com/rakyll/statik を追加しとくじゃない
ここで、statik でファイルを固めるために statik コマンドをビルドしなくても
$ go run github.com/rakyll/statik -f -src=static
と打つと実行できるの

でもノートン入れてると危険な動作だと判断されるんで、run じゃなく build して実行ファイル作らないとダメだった
350デフォルトの名無しさん
2021/02/03(水) 23:03:33.06ID:KfiW2k04
このテクニックは
https://qiita.com/yaegashi/items/d1fd9f7d0c75b2bb7446#%E3%82%B5%E3%83%BC%E3%83%89%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF%E3%82%82-go-run-%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B
で知った
351デフォルトの名無しさん
2021/02/04(木) 00:47:53.46ID:J8c7zBiK
>>349
ほーー!これ知らなかった。有益な情報ありがとう!
352デフォルトの名無しさん
2021/02/06(土) 07:34:59.64ID:b91D85Wz
importで現在のpackage宣言からの相対パスが使えなくなったのはクソ仕様変更だと思う
おのれ Russ Cox
353デフォルトの名無しさん
2021/02/06(土) 07:40:15.26ID:b91D85Wz
具体的に恨んでることは、あるサイトのコードを使い回して別のサイトのコードを書くとき、import を全部修正しなきゃならん
というかしてる
Linux ならまあ sed で置換すればなんとかなると思うけど、Windows で開発してるし
354デフォルトの名無しさん
2021/02/06(土) 07:42:46.96ID:b91D85Wz
あ、元のサイトの一部のコードは使い回すために go get して import してるから、sed でも面倒だわコレ
355デフォルトの名無しさん
2021/02/06(土) 07:48:05.22ID:b91D85Wz
なんか上手いことやってくれるツールってあるの?
356デフォルトの名無しさん
2021/02/06(土) 10:01:04.65ID:3JTS0SZe
タダで使わせてもらってるくせに糞とか恨むとか
そういう心根だから日本はソフトウェア技術で海外に負けるんだよ
357デフォルトの名無しさん
2021/02/07(日) 03:51:41.73ID:XZf/W+8m
タダで使わせてもらってるじからって大人しくしてるほうが進展しないと思うよw
もちろん活発にフィードバックが最善だが
358デフォルトの名無しさん
2021/02/07(日) 17:49:54.31ID:7CsMj5zJ
趣味でいじってて、検索に使うAPIを作ろうとしてるんだけど
関数の動的な引数について

ぐぐると出てくるFunctional Option Patternってどれくらい使われてるのかね
structをポインタで渡す(nil判定のため)でいいかなと思い始めてるんだけど
359デフォルトの名無しさん
2021/02/07(日) 19:19:28.11ID:ChxxRz8n
>>358
たまに見るけど、エディタのコード補完と相性悪くてどんなオプションがあるのかがクッソ分かりにくい
個人的には大嫌い
360359
2021/02/07(日) 19:21:38.26ID:ChxxRz8n
Functional Optionの話ね
補足
361デフォルトの名無しさん
2021/02/07(日) 19:31:24.83ID:9kVjsnaW
structをポインタで渡すという一文で、わかってるのかな?という疑念が
FOP はざっくりと、アレンジする対象のオブジェクトを受けて内容を好きに設定する関数を、引数として渡す手法

ここでその関数の引数に対象structのポインタじゃなく実体渡しで受けるようにすると、コピーを書き換えちゃう事になるから設定しても動かない
ポインタで渡す以外の話にはならない
362デフォルトの名無しさん
2021/02/07(日) 19:38:47.51ID:9kVjsnaW
もしかしてstructをというのは、FOPではなくオプション用のstructを用意するという話か
363デフォルトの名無しさん
2021/02/07(日) 21:18:42.15ID:7CsMj5zJ
>>359-360
どもども
サンプル見ても、準備する関数とか増えるから
スコープのためにimportのためにディレクトリのネストもう一個深くしないときついかなとか
色々めんどくさそうだった

>>362
そういうことです
手法として
・そもそも関数を別に切ってしまう(一番簡単だけどメンテがめんどい)
・引数を関数のために定義したstructのポインタにする
・FOP
という3つが挙がってた
364デフォルトの名無しさん
2021/02/08(月) 14:27:57.38ID:UNTBzX6A
13年目のGo言語 - Steve Francia氏との対話から見えたそのエコシステム、進化、そして未来
https://www.infoq.com/jp/articles/go-language-13-years/
365デフォルトの名無しさん
2021/02/10(水) 23:54:39.22ID:yW2IX31f
18か月毎に、Goのユーザベースは2倍に膨れ上がっているのです。これはつまり、今日行われる変更は、5年前に比べて10倍の人々に影響を与える、という意味になります。
366デフォルトの名無しさん
2021/02/10(水) 23:55:51.44ID:yW2IX31f
Goが現在備えている依存管理は素晴らしいものですが、おそらくは5年前に実現するべきものでした。
この遅れが難しい問題をより難しくして、結果的に必要以上のストレスをコミュニティに起こしているのです。

同じように、現在開発を進めている大きな言語変更がジェネリクスです。これもコミュニティに大きな影響を与えるでしょう。
もし最初からすべてをやり直すことができて、この機能がいかに重要かを事前に理解しておくことが可能だったならば、おそらく7年前から本格的な開発を始めておきたかった、と思っています。
367デフォルトの名無しさん
2021/02/10(水) 23:56:43.35ID:yW2IX31f
言語として不足している唯一の大きな機能はジェネリクスです。先程も話したように、現在はこの開発に注力しています。
368デフォルトの名無しさん
2021/02/10(水) 23:58:38.65ID:yW2IX31f
・Goは優れた既定言語(default language)で、システムやサーバ、API、デーモン、データベース、Webサイトなどに適しています。Goはパフォーマンスと開発者の生産性を、高いレベルで両立させています。

・Dart + Flutterは、GUIベースアプリケーション(モバイルおよびデスクトップ)に適しています。Flutterは、複数のOSとフォーマットで動作する単一クライアントアプリケーションの記述というアイデアを、高いレベルで実現しました。

・Rustは、詳細なコントロールが必要な場合に適しています。低レベルな処理やカーネルなどです。Rustは精密性に優れていますが、その分、複雑さは大きくなります。このトレードオフが理に適っている場合もあります。そうであれば、Rustが最適です。
369デフォルトの名無しさん
2021/02/10(水) 23:59:45.15ID:yW2IX31f
Goは1度の週末で学べますし、2週間あればプログラミングに習熟することができます。もっと早い人もいるでしょう。他のいくつかの言語で経験があれば、Goは非常に短期間に習得できます。

Goを導入した企業と会った時に、彼らが一貫して話してくれることのひとつが、Goは習得の容易な言語だ、という点なのです。
370デフォルトの名無しさん
2021/02/11(木) 02:00:07.60ID:Nn8EIl24
ジェネリクス結局どうなるんだよ
371デフォルトの名無しさん
2021/02/11(木) 03:54:00.93ID:y89gNJMQ
議論の末リジェクトされたって結構前に見たけども
372デフォルトの名無しさん
2021/02/11(木) 06:20:02.21ID:MYnJXR31
あったら便利かも知れないけど、無くても不便を感じてないんだよな
多分、普段に書いてる案件の方向性の違いじゃないかな
ライブラリ書きな人は欲しがるのかも
373デフォルトの名無しさん
2021/02/11(木) 06:24:20.93ID:Nn8EIl24
Webアプリだと必要なケースはほぼないかな
複雑なデータ構造を扱う分野とか数値計算なら必要だろうね
374デフォルトの名無しさん
2021/02/11(木) 07:33:17.81ID:MYnJXR31
複雑なデータ構造というより、多様なクラスじゃないか?
クラスが異なるが構造は同じ、といった場合に処理を使い回すための機能だから
たとえばList<Animals>とか
375デフォルトの名無しさん
2021/02/11(木) 09:48:01.53ID:XTRtAjen
https://github.com/golang/go/issues/43651
spec: add generic programming using type parameters #43651
Labels: Proposal Proposal-Accepted Proposal-FinalCommentPeriod

アクセプトされたぞ
376デフォルトの名無しさん
2021/02/11(木) 09:52:52.27ID:XTRtAjen
あと議論の末リジェクトされたのはエラーのキャッチでは?

https://github.com/golang/go/issues/43777
proposal: Go 2: catch error handler #43777
377デフォルトの名無しさん
2021/02/11(木) 10:26:29.66ID:5PMeOFeV
>>375
おお!承認されたのか
ところで、go2はいつくるの?
378デフォルトの名無しさん
2021/02/11(木) 11:34:18.35ID:XTRtAjen
https://blog.golang.org/generics-proposal

v1.18β(今年末)にはジェネリクスが入ってる予定だそうだから
そこからしばらくexperimental feature扱いになるとして
だいたいv1.20(再来年頭)かそこらでexperimentalじゃなくなってv2.0にするんじゃないか

まあこれは一番順調に行ったらって予想だけど
379デフォルトの名無しさん
2021/02/11(木) 12:43:54.91ID:qJXsIZl0
>>375
ファイナルフュージョン承認!
380デフォルトの名無しさん
2021/02/11(木) 13:01:17.98ID:ZLyjCLFI
実装難しそうだから相当先だろうな
特殊化をコンパイル時にやるのか実行時にやるのかすら決まってないみたいだし
381デフォルトの名無しさん
2021/02/11(木) 14:10:14.32ID:MYnJXR31
Javaのジェネリクス導入時みたいに、総称型コレクションの利用で警告を出すような真似はしないで欲しい
382デフォルトの名無しさん
2021/02/11(木) 14:18:10.77ID:MYnJXR31
なんで Java ではデフォルトで「raw型の使用を無視」にしとかないで、探して無視に指定するまでうるさく警告を出すことにしたんだろう
383デフォルトの名無しさん
2021/02/12(金) 03:53:22.35ID:Cyc/UqZY
結局仕様はほぼJavaと同じか
384デフォルトの名無しさん
2021/02/12(金) 13:19:24.35ID:vQ8mDll0
エラーキャッチリジェクトかよ・・
385デフォルトの名無しさん
2021/02/12(金) 19:55:13.35ID:IU5AN8go
issue の本文で
func xxx() xxx, error
とか
nill
とか、go 使ってないような奴なのは見え見えだし、
妥当じゃないか?
386デフォルトの名無しさん
2021/02/13(土) 01:19:56.35ID:uGwTnb+S
ジェネリック馬鹿を排除できるだけでもgoを採用する意味あるわ。
387デフォルトの名無しさん
2021/02/13(土) 02:05:58.45ID:b8+Lb4od
実務でgoやってみたいけど今は未経験の募集あまりないな
388デフォルトの名無しさん
2021/02/13(土) 02:18:54.12ID:x/Vsj8xA
ジェネリクス反対派って結局何がしたかったんだろう
訳がわからん
言語の設計者でもないのに
389デフォルトの名無しさん
2021/02/13(土) 03:56:17.09ID:qDntuLeS
>>386
お薬かな
390デフォルトの名無しさん
2021/02/13(土) 05:14:35.81ID:0tM9M8c+
Java ではジェネリクス過激派による強制で多いに迷惑したから
391デフォルトの名無しさん
2021/02/13(土) 08:17:20.01ID:x5WG3KQe
>>383
Javaと同じってどこが?
392デフォルトの名無しさん
2021/02/13(土) 09:26:28.23ID:0tM9M8c+
正直、意味があるのか俺には理解できない
他の言語は継承による拡張なので共変反変が意味を持つ
でも go は継承による関係じゃなくて、インターフェースを具備しているかどうか
元々がインターフェースさえ合致していれば可換なのだから型パラメータには意味がない
そう思ってしまう

どうしても型パラメータが必要な用例、それを目立つように挙げて貰いたい
393デフォルトの名無しさん
2021/02/13(土) 10:56:01.28ID:QtTWHsVQ
Goで便利なのはsort関数とかmap関数なんかではないの?
今まで型ごとに書くしかなかったんだし。
394デフォルトの名無しさん
2021/02/13(土) 12:32:44.33ID:0tM9M8c+
まずmapはインターフェースをキーとしても値としても使えるから問題にならない
ソートもsort.Interfaceを具備したコレクションでソートするから、Swapとかのための比較可能な値を返すメソッドをインターフェースで持てば良い

構造体はただの入れ物に過ぎないよね
395デフォルトの名無しさん
2021/02/13(土) 12:40:39.64ID:0tM9M8c+
インターフェースで構造体の多態性を確保してるから、それが既に型パラメータ以上の柔軟さを持ってる
なんでインターフェースよりも性質的に劣ってる型パラメータを導入しなきゃなんないの?
頭のいい人が、それでも導入が必要だと判断したのだから、そこには理由があるはず
でも頭が悪いから、俺ではissueで見つけられなかった
396デフォルトの名無しさん
2021/02/13(土) 12:54:38.86ID:QtTWHsVQ
>>394
インターフェイスを使ってしまうと毎回型チェックしないといかんし、コンパイル時に縛りもかけられんでしょ。
テストで網羅するといっても、ユーザに使ってもらうライブラリなんかではそうもいかん。
静的解析でもうまくいかんこともあるし、柔軟性を持ちたいのではなくて、コンパイル言語として担保したいんじゃないか?
俺は今まで型ごとに関数作ってたけど、インターフェイスでなんとかしてたって事?それも極端だな。
397デフォルトの名無しさん
2021/02/13(土) 13:03:01.32ID:0tM9M8c+
>>396
というかインターフェースを型パラメータみたいな物として使っていて問題なかったと言ってるんだよ
機構として使い回すために、その機構に使いたかったらインターフェースを実装する
ソートの機構が使いたかったらsort.Interfaceを実装するでしょ
398デフォルトの名無しさん
2021/02/13(土) 13:27:48.18ID:0tM9M8c+
>>396
そもそも何で型チェック?
メソッドの挙動やらが違うのに同じインターフェースを使ってるのか?
Javaとかの型パラメータでも、まさか中でキャストして使ってるのか?

偶然にインターフェースを実装してしまったケースなんて想定しても仕方ないと思う
それは設計ミスだから
区別用にダミーのメソッド生やしとけば?
399デフォルトの名無しさん
2021/02/13(土) 13:30:40.12ID:+kP5eWz9
goは組み込みで要素が型付けされた動的配列と連想配列を持ってるから、他のコレクションはあまり必要ないんだよね
それらでカバーできないようなケースってそもそも大抵は特殊な状況なんで、汎用的なコレクションではなくアプリの要請に合わせて独自に作るのが自然
400デフォルトの名無しさん
2021/02/13(土) 13:45:02.72ID:0tM9M8c+
んな意味不明なジェネリクスより
>>251 のバグを直して欲しいんだよな
401デフォルトの名無しさん
2021/02/13(土) 13:54:07.96ID:QtTWHsVQ
>>397
ジェネリクスはロジックを使い回すのためだけにあるわけではないと思うよ。
Sortableなんてinterfaceを実装した配列を引数に受ける関数の戻り値の型は何になる?
Sortableの配列が帰ってきても無意味でしょ。

>>398
中でキャストするとかは意味不明じゃないか。
ジェネリクスがない頃のObjectの配列を受けざるをえないメソッドはまた違っただろうけど。
ダミーのメソッドとか完全に意味不明。
402デフォルトの名無しさん
2021/02/13(土) 14:07:47.74ID:0tM9M8c+
>>401
Sortableの配列を返すので正しい
文意からソート結果だろ?

君が型チェックしなきゃならんとか意味不明な事を言い出すからエスパーしたんだよさせるなよ
インターフェースならメソッドを呼ぶだけだから型チェックなんて話は出てこない
型チェックするってことは実体に変換しなきゃならんという話だろ

そうでない場合に考えられるケースとして、偶然に同じインターフェースを実装してしまった構造体を、偶然に渡してしまうコーディングミスを考えているとエスパーしてあげた
そんな阿呆な設計をしてるなら、引数としてるインターフェースにダミーのメソッドを生やしとけば、別のインターフェースになるから誤って渡すミスは無くなる
エスパーさせるなよ
403デフォルトの名無しさん
2021/02/13(土) 14:21:47.27ID:QtTWHsVQ
>>402
ソート可能なインターフェイスを受けてソート可能なインターフェイスが帰ってきても何も得しない。

[T Sortable]な関数の返り値は[]Tで十分でしょ。
結果がもう一度ソート可能かなんか必要な情報でない。

intがSortableだとして、返り値が[]Sortableだと、結果は型チェックしないとだよね。
[]intが直接帰ってきた方が効率的だし、無駄なコードではないよね。
やってることも自明。

mapとかflattenなんかなんかはジェネリクス使えないと使い物にならんと思うが。

エスパーするならジェネリクスの使いみちをエスパーしなよ。
404デフォルトの名無しさん
2021/02/13(土) 14:23:26.25ID:x5WG3KQe
単一の引数だけなら>>395のようにインターフェースで代用できるけど
複数の引数や戻り値の型を合わせたいという場合は型引数が使いたいよね。
405デフォルトの名無しさん
2021/02/13(土) 14:34:17.23ID:qDntuLeS
>>398
キャストしないといけないの理解できてないあたり、型パラメータとインターフェースでの実装の違い理解してなさそう
406デフォルトの名無しさん
2021/02/13(土) 15:24:34.05ID:0tM9M8c+
>>404
複数の別のインターフェースを引数に持たせれば問題ないでしょ
それぞれが型パラメータとして機能するんだから

戻り値も同じ………いや、戻り値に関しては一概には言えないのか
でも実体ポインタを返すメソッドは>>251のバグに引っ掛かるんで使いたくない
→ 戻り値の実体ポインタはインターフェースを備えてるならば、本来は反変でアップキャストされてインターフェースを返しているとも判断されるべき
このバグで多態が機能しなくなるから使いたくない
具体的にはシグネチャが違うため、変種をコレクションに混在して格納できない

ジェネリクスを導入して個別に実体ポインタを返せるようにした時に同じ現象になるはず
このメソッドを持つジェネリクスな構造体は、それぞれ可換でないので多態が適用できない
コレクションに混在させられない

インターフェースを返す設計ならば、それらは実体は異なっても多態が機能してコレクションに混在格納できる
よって、インターフェースを返す方が設計として抽象度に優れている

以上の論旨から、ジェネリクスはインターフェースの下位互換だとしか見えない
407デフォルトの名無しさん
2021/02/13(土) 15:35:29.60ID:x5WG3KQe
>>406
違くて、2つの引数があるときにその型が同じであってほしい場合とかね。
408デフォルトの名無しさん
2021/02/13(土) 15:42:03.45ID:0tM9M8c+
>>407
その場合には同じインターフェースの二つの引数を持つことによって問題がある事例について具体的に指摘してくれ
型が同じことは保証されてるぞ
409デフォルトの名無しさん
2021/02/13(土) 15:44:29.17ID:QtTWHsVQ
>>406
インターフェイスはインターフェイスで使えば良くて、ジェネリクスで効率的にできたり型を自明にできる部分はジェネリクスを使えばよいでしょ。
今でもコードジェネレータなんかで作ってる部分もあるだろうし。

どちらかがあれば原理的にどちらかが不要なのと、
どちらかがあれば片方は作ってはいけないのは別。

Sortとか、mapの[T,U]のKeyのみ、Valueのみを([]T,[]U)と、配列として返す関数なんか書こうと思ったらジェネリクスが無いと型チェックの嵐でしょ。
確かにキャストではないけど、型チェックもノーコストではないよ。

ジェネリクスのある言語使った事無いんじゃないの?

>>403のケースなんかはどうするん?型チェックすんの?
410デフォルトの名無しさん
2021/02/13(土) 15:45:29.07ID:QtTWHsVQ
>>408
map[T]Uを受けて、[]Tと[]Uを返す関数。
411デフォルトの名無しさん
2021/02/13(土) 15:51:17.90ID:0tM9M8c+
とか顔真っ赤にして主張してきたけど、具体的にちょっと面倒な事例に自分で気づいてしまった

new() が厄介だな
new の代わりにインスタンスを生成する factory 一時クラスを外から渡してやれば解決するんだけど面倒ではある
412デフォルトの名無しさん
2021/02/13(土) 15:56:48.27ID:x5WG3KQe
>>408
結局は返り値の話に帰着するのかもしれないけど (T, T) -> T な関数が欲しいとかね。
413デフォルトの名無しさん
2021/02/13(土) 16:10:36.47ID:QtTWHsVQ
返り値に関係なかったら、Tとそれに対するfunc(x T)を受ける関数とかかなぁ。
414デフォルトの名無しさん
2021/02/13(土) 16:10:51.14ID:0tM9M8c+
>>410
納得した

メソッド引数のシグネチャが異なるものを一本化して書けるわけか
確かにインターフェースじゃmap[T]Uを引数とした共通メソッドは書けない
T,Uがインターフェースだとしても、それぞれのインターフェースの組ごとにメソッドが必要になるから
415デフォルトの名無しさん
2021/02/13(土) 16:12:52.49ID:QtTWHsVQ
>>414
伝わってよかった。逆もしかり。
[]Tと[]Uを渡してmap[T]Uを返してくれる関数も。
Pythonでいうとzip関数的な。
416デフォルトの名無しさん
2021/02/13(土) 17:03:51.51ID:0tM9M8c+
>>415
JavaだとProxyを使って何でも解決するという黒魔術的解決手段があるのが恐ろしい
デバッグ用だよねとか思ってると struts とかwebフレームワークのソース読んだ時に、インタセプターとかで普通に使われていて更にビビる
417デフォルトの名無しさん
2021/02/13(土) 17:45:13.81ID:F3GRWro3
>>416
Springの十八番だな。
ただ、ああいう方法だと結局、ランタイムで死ぬかどうかをテストで担保するしかないって方向性に行きがち。
あとパフォーマンスももちろん遅い。
今回のジェネリクスがどう実装されるかが一番気になるけど、俺的には素直に関数たくさん作って欲しい。
418デフォルトの名無しさん
2021/02/14(日) 01:42:02.77ID:o9olz+i9
これメソッドには型パラメータ無理なの?
419デフォルトの名無しさん
2021/02/15(月) 02:10:12.40ID:QPKY0Zj9
>>400
どう考えてもバグじゃないと思う。Goのinterfaceとstructの関係はembedしなければほぼ静的方チェックありの
ダックタイピングだから「そのメソッド実装がインタフェースAを実装している」と思い込んでるのは自分であって
実際にはJavaのようなimplementではないです。もっと言うなら、ルックアップが行われるのは、実行時であり
コンパイルは厳密な型チェックが行われます
420デフォルトの名無しさん
2021/02/15(月) 07:00:31.98ID:fLCzNLbm
>>419
んじゃ、言語拡張要望と言い直そう
メソッドの戻り値がインターフェースでの戻り値の型に反変できるなら、インターフェースを具備していると判定して欲しい、と
421デフォルトの名無しさん
2021/02/15(月) 07:12:07.78ID:E7fw/gtI
ポインタじゃなくてインターフェースを返すのが正しいのでは?
何故ポインタを返す
インターフェースのポインタにはなんの意味もない
422デフォルトの名無しさん
2021/02/15(月) 07:45:45.18ID:NOYsfhr4
>>421
いや、インターフェースのポインタじゃなくて、構造体ポインタ
構造体ポインタ*SubがインターフェースISubを具備しているのは代入させて確認

んでISubを返すメソッドを持つ別のインターフェースを具備させようとした時に、戻り値としてISubではなく、ISubに代入可能な*Subを返させると、シグネチャ不一致でエラー
ISub を期待しているのに *Sub を返していると

インターフェースを具備しているかの判定でも、反変を考慮してくれないだろうか、という要望
そうすればインターフェース対応でキャストして返すメソッドと構造体固有のメソッドの二本を作らなくて済むから

作れよ、と言われちゃうか
423デフォルトの名無しさん
2021/02/15(月) 08:02:45.25ID:NOYsfhr4
>>421
シグネチャが合わないコンパイルエラーの時だけ、戻り値の型が互換(反変可能)かで追加チェックさせればいいから、パフォーマンスが極端に悪くなることはないはず
という見立て
424デフォルトの名無しさん
2021/02/15(月) 14:32:51.97ID:QPKY0Zj9
>>421
インタフェースを返すのが理論的にも実装にも正しいけど、インターフェースのポインタは埋め込みを
するときにコンパイラが使う。あんまりこれをやるモジュールは(メモリサイズが大きくなるから?)
標準ライブラリ以外見ないけど。
>>423
「 ISub を期待」というのは分からなくも無いけど、実行時じゃなければ分からないチェックを
コンパイルの速度と、言語の厳格性を犠牲にして、(かなり)保守的な言語がやると思えないですね
425デフォルトの名無しさん
2021/02/17(水) 21:45:03.79ID:cMG1yy0u
Go 1.16 is released
https://blog.golang.org/go1.16
426デフォルトの名無しさん
2021/02/18(木) 00:00:24.35ID:Nj/E13Sa
今回の目玉は embed で、あとは modules がデフォルト利用になったくらいか
96% って、どこから来た数字なんだろ?
427デフォルトの名無しさん
2021/02/18(木) 01:11:43.46ID:cGA2Qyj5
ioutilオワコンになったのか
428デフォルトの名無しさん
2021/02/18(木) 01:58:45.29ID:DBnOoZ1k
え、これすごくない?
ファイル内容のバイナリを変数に設定できるのか
クソ便利そう
429デフォルトの名無しさん
2021/02/18(木) 02:18:54.53ID:cGA2Qyj5
凄くはないがまた変なものを入れたなあ
430デフォルトの名無しさん
2021/02/18(木) 08:15:16.68ID:a7MZxCIG
そんなに変なもの?
結構ニーズあったじゃん。
431デフォルトの名無しさん
2021/02/18(木) 10:42:52.64ID:CVa006wI
embed例を交えながら詳しく懇切丁寧に説明してくれ
432デフォルトの名無しさん
2021/02/18(木) 10:59:32.89ID:a7MZxCIG
>>431
WebUIを持ったアプリの画像なんかのアセットをバイナリ一つで配布したいとか。
433デフォルトの名無しさん
2021/02/18(木) 19:44:54.68ID:13d7fDKM
それはしゅごい
434デフォルトの名無しさん
2021/02/19(金) 01:02:34.28ID:h/t0+GoU
それって凄いことなの?逆に今までできなかったの?
435デフォルトの名無しさん
2021/02/19(金) 02:06:27.21ID:C4/TpWTT
外部ライブラリで出来てたから、そんなにインパクトはない。むしろNotifyContextの方が意味ありそう
こういう事は他言語だと非常にやりづらい
436デフォルトの名無しさん
2021/02/19(金) 02:54:55.96ID:h/t0+GoU
NotifyContext例を交えながら詳しく懇切丁寧に説明してくれ
437デフォルトの名無しさん
2021/02/19(金) 02:57:11.30ID:EqIzDHt7
自分で調べろや
438デフォルトの名無しさん
2021/02/20(土) 05:37:00.99ID:b7O3Qybq
android アプリを調べようと、go android 常駐アプリ で検索したんだけど、go の記事が探しづらい
以前からポケモンが引っ掛かっていた上に、次のandroid11はGoエディションなのか?
439デフォルトの名無しさん
2021/02/20(土) 10:48:48.97ID:b7O3Qybq
1.16 だと、Deprecation of io/ioutil は面倒に感じるなぁ
一杯使っちゃっていて
440デフォルトの名無しさん
2021/02/20(土) 12:08:15.81ID:AdT3uMXC
検索ワードはgolangって言うのはこのスレの常識
441デフォルトの名無しさん
2021/02/20(土) 12:48:22.08ID:Gn0QOwDd
そういやgolang.jpってもう活動していないのか
日本のgoコミュニティの総本山たるべきドメイン名を無駄にしやがって
442デフォルトの名無しさん
2021/02/20(土) 16:13:03.32ID:seCRjC7e
ほんと返すがえすも go は名前がクソい
443デフォルトの名無しさん
2021/02/20(土) 17:07:51.09ID:QogkRbMK
ほ〜ら〜 あしもとを見〜て golang
444デフォルトの名無しさん
2021/02/21(日) 00:08:47.19ID:4ZSApsu7
名前よりもマスコットがキモすぎるのが気になってしかたがない
445デフォルトの名無しさん
2021/02/21(日) 00:49:16.30ID:1AmDYpOZ
キモネズミ
446デフォルトの名無しさん
2021/02/21(日) 03:58:10.72ID:XsukC5HX
ヽ( ;゚;ж;゚;)ノ ゴーファッ
447デフォルトの名無しさん
2021/02/21(日) 07:48:25.22ID:y91K2jdN
俺みたいにゴーファ君を結構可愛いとか思う人間がいるから厄介
448デフォルトの名無しさん
2021/02/21(日) 20:35:02.33ID:H/D/EzLk
JAVAのマスコットよりはまし(´・ω・`)
449デフォルトの名無しさん
2021/02/21(日) 22:08:56.40ID:RiVq+6hw
c#はマスコットいないんだぞ
クラウディアとか藍澤光とかいたけどな
450デフォルトの名無しさん
2021/02/21(日) 22:43:47.36ID:y91K2jdN
マスコット…冴子先生がCortanaとして復職してくれたなら、Cortanaボタンを非表示にしないのに…
451デフォルトの名無しさん
2021/02/22(月) 00:06:54.06ID:X+4sJ2iC
マスコットはD言語がカワイイ。LISPが最キモ。
452デフォルトの名無しさん
2021/02/22(月) 00:53:22.82ID:vmWIyuyK
LISPにマスコットなんてあったのか・・とおもってググってみたら
たしかにこれはエグい
キモすぎ
453デフォルトの名無しさん
2021/02/22(月) 18:22:17.90ID:GfaSrtw3
なんか gui ライブラリで調べるといろいろ出てきてよくわからん
マルチプラットフォームな gui って何がええんや?
Qt は golang で使ってる人おるんかえ?
454デフォルトの名無しさん
2021/02/22(月) 18:24:31.58ID:Xis0SD1d
GoでGUIアプリを作っている人はほぼ存在しない
455デフォルトの名無しさん
2021/02/22(月) 18:48:30.06ID:GfaSrtw3
>>454
ありがとう、そうなんか
主にバックエンドで使われてる感じなんかな

Go language part 4 YouTube動画>2本 ->画像>6枚

ふむう
456デフォルトの名無しさん
2021/02/22(月) 20:26:35.06ID:MldvwhvK
ローカルHTTPD建てて、ブラウザからAPIで操作するアプリは提供してる
457デフォルトの名無しさん
2021/02/23(火) 15:36:36.73ID:zz5KyfHR
>>455
ウチはElectronでGUI作ってバックグラウンドにGo使うてる
458デフォルトの名無しさん
2021/02/23(火) 16:06:31.74ID:+9qO7MJU
>>457
面白そうだね
オレオレGUIツールだと.netが楽すぎるのでそっちで書いちゃうけどGOで書くのも楽しそうだ
459デフォルトの名無しさん
2021/02/23(火) 16:23:00.26ID:ADOMIACK
GUIは俺は普通にブラウザ起こしてるな。
IE使われると辛いけど。
460デフォルトの名無しさん
2021/02/23(火) 17:19:08.91ID:VHVs6NAa
簡単なguiツール作るならlorcaオススメ
461デフォルトの名無しさん
2021/02/23(火) 20:02:44.99ID:K/n0XAdC
for (大分類) {
 for (中分類) {
  for (小分類) {

   wg := sync.WaitGroup{}
   cpus := runtime.NumCPU()
   errCh := make(chan error, cpus)
   defer close(errCh)

   for (アイテム) {
    wg.Add(1)

    go func() {
     defer wg.Done()
     errCh <- 他の関数()
    }()
   }

   err := <-errCh
   if err != nil {
    return だめです
   }

   wg.Wait()
  }
 }
}

こんなコードでwaitしっぱなしになるんだけど
なぜなんでしょうか(´・ω・`)
途中の即時関数にwgのポインタ(&wg)渡すのもやってみたけど、
結果変わらなかった
462デフォルトの名無しさん
2021/02/23(火) 21:17:47.85ID:PToR0U76
>>461
・errCh <- 他の関数() はバッファが一杯の場合ブロックする
・err := <-errCh はブロックする
goのchannelは初心者が使うと極めてデッドロックを引き起こしやすいので、まずはchannel使わずに正しく動作するものを作れるようになってから手を出すことを強くお勧めする
463デフォルトの名無しさん
2021/02/23(火) 21:36:09.19ID:K/n0XAdC
>>462
ありがとうございます
全体としては物はもうできていて、上記の処理は大量にファイルを出力するため重く
速度改善としてgoroutineを入れようと試みてました。
まあファイルシステムのi/oがボトルネックだとそんなに変わらないかもしれませんが…
464デフォルトの名無しさん
2021/02/23(火) 22:03:06.71ID:K/n0XAdC
エラー判定をgoroutineと同じ階層で判定することで返ってくるようになりました
一応オチとしてめも
速度改善はならず
465デフォルトの名無しさん
2021/02/23(火) 22:38:49.04ID:VENYjQF8
>>461
ぱっと見しただけで検討しないで書くけど
errCh の受付数はcpuの数
errChの読み込みが一回しかしてないからアイテム数が受付数を越えたら書き込みがブロックされてwgがDoneされない
DoneされないからWaitは抜けてこない
のでデッドロックということでは?
466デフォルトの名無しさん
2021/02/23(火) 22:41:20.70ID:K/n0XAdC
>>465
ご指摘のとおりでした
なのでgoroutineと同じループの中でerrChを取るようにしたら動作しました

wg作る位置も動かないからだんだんスコープ狭めていったんですが
一番外のforの外で作って動きました
467デフォルトの名無しさん
2021/02/23(火) 23:35:24.39ID:yNATq+Pp
それみんな絶対最初ハマるよな
468デフォルトの名無しさん
2021/02/26(金) 08:25:09.52ID:Bk6XWue8
Goのグラフィックって、標準だとこんなに低レベル処理なパッケージしかないのか……
JavaScriptで言うならImageDataしかない感じ
誰かのライブラリ使わないと線を引くだけでも大変
469デフォルトの名無しさん
2021/02/26(金) 10:33:50.46ID:jNY0Xh1+
Golang でグラフィックやろうと思う時点で変
470デフォルトの名無しさん
2021/02/26(金) 12:53:20.65ID:Bk6XWue8
イメージを生成するサービスを考えてたん
471デフォルトの名無しさん
2021/02/26(金) 12:57:25.97ID:jNY0Xh1+
      ∧,,,∧
     (・ω・` ) スマンカッタ・・・
     / y/ ヽ
 ━(m)二フ⊂[_ノ
     (ノノノ l l l )
  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
472デフォルトの名無しさん
2021/02/27(土) 00:21:54.45ID:vRM0KdjR
標準ライブラリなんて小さい方がええやん。HTML5のCanvas APIみたいのならgithubに腐る程ある
github.com/fogleman/gg
473デフォルトの名無しさん
2021/03/01(月) 04:10:54.66ID:TpLFIcMN
Goに期待しすぎだろ
474デフォルトの名無しさん
2021/03/01(月) 05:09:43.67ID:slICkU79
まあ、イケイケGoGoジャーンプ!って言葉もあるくらいやし…
475デフォルトの名無しさん
2021/03/01(月) 18:31:47.86ID:yHt6Qgj2
姫ちゃん…
476デフォルトの名無しさん
2021/03/01(月) 20:51:58.46ID:Uq9hcXch
Go language part 4 YouTube動画>2本 ->画像>6枚
goで思い出すのはこれだった
477デフォルトの名無しさん
2021/03/03(水) 00:18:59.60ID:p9OW2PxW
golang.jpドメイン譲渡したのね
478デフォルトの名無しさん
2021/03/03(水) 22:42:43.62ID:jgL4cdff
本当だ。いまのところ微妙そう
479デフォルトの名無しさん
2021/03/04(木) 00:12:11.42ID:zOLUDfBP
bloggerってまじかよ
480デフォルトの名無しさん
2021/03/05(金) 23:37:39.02ID:NrMSs+Xp
16がでてしばらくたつけど、何か問題があった人いる?

無かったら入れようとか姑息
481デフォルトの名無しさん
2021/03/06(土) 00:21:56.60ID:fsuLBHjt
当初から分かってたがPlan9同様、実用言語ではなく
他の言語のリファレンスとしての研究用言語になったな
482デフォルトの名無しさん
2021/03/06(土) 00:38:15.94ID:KM3KYugu
実用してるが…?
483デフォルトの名無しさん
2021/03/06(土) 00:40:14.00ID:d8HwcXCo
もともとグーグルの社内言語だったと聞くが
本家では今も活用されているのかね
484デフォルトの名無しさん
2021/03/06(土) 00:45:32.22ID:KIij34oc
Plan9を実用してる物好きもいるわけだし
485デフォルトの名無しさん
2021/03/06(土) 01:20:00.90ID:W4toJ95e
モンストの通知サービスの一部でも、他の言語とのトライアルの結果で採用したとのインタビュー記事が、つい先日あったし(日経XTECH)
486デフォルトの名無しさん
2021/03/06(土) 01:21:35.92ID:W4toJ95e
学習が簡単というのがデカかったらしい
分かってるな
487デフォルトの名無しさん
2021/03/27(土) 12:51:18.06ID:odHdDNPL
CodeZine(コードジン): 2020年のGo言語利用状況が明らかに、9648名の開発者が回答.
https://codezine.jp/article/detail/13819

正直、手前味噌過ぎて萎える
無作為アンケートならともかくなぁ
488デフォルトの名無しさん
2021/04/24(土) 03:38:06.28ID:ifUTO7D9
echoでAPIのパラメータの初期値を設定する方法って
ぐぐると構造体作ってコンストラクタで設定しよう!とか出てくるんだけど
なんかすごく面倒な上記述場所が離れててわかりにくい気がしてならないんだけど

例えばこんなのは悪手?
まあ悪手なんだろうけど

func getParam(p string, defaultValue interface{}) interface{} {
 switch defaultValue .(type) {
  case string:
   if p == "" {
    return defaultValue
   } else {
    return p
   }
  case int:
   ret, err := strconv.Atoi(p)
   if err != nil {
    return defaultValue
   }
   return ret
 }
 return nil
}


pageNo := getParam(c.Get("pageNo"), 1).(int)

一般的な方法ってあるのかね
489デフォルトの名無しさん
2021/04/28(水) 00:42:58.14ID:1SQ+syPV
勢いないな
特に語ることがないんだろうけど寂しい
490デフォルトの名無しさん
2021/04/28(水) 00:50:07.66ID:yDqZolk/
2こないとずっとこうだろな
491デフォルトの名無しさん
2021/04/28(水) 20:28:06.34ID:4UCtxfw0
見上げて〜golang〜♪
492デフォルトの名無しさん
2021/04/29(木) 01:22:39.54ID:466xktgC
ひさしぶりに書く機会があったが
やっぱクソだなこの言語
493デフォルトの名無しさん
2021/04/29(木) 13:27:14.24ID:VDhRy7EO
>>492
けっこう同意
494デフォルトの名無しさん
2021/04/29(木) 17:19:19.73ID:Ir6i0rIh
肝心のグーグルに普及させる気がないように思う
メンテナンスが別組織に移ったにしてもさ
495デフォルトの名無しさん
2021/04/29(木) 20:46:39.37ID:CJL0HvU9
ファンクション実行環境が使い放題のところでは有用かもしれないけど、それ以外だとあまりいいことがない
496デフォルトの名無しさん
2021/04/29(木) 22:07:05.66ID:WSQEbpw8
ジェネリクス入ればまた話題になるさ
それ以外では大きな機能追加はなさそうだし
話すことはゼロ
497デフォルトの名無しさん
2021/05/03(月) 07:41:43.88ID:Yuy7LADv
>>496
これまた同意
498デフォルトの名無しさん
2021/05/03(月) 10:42:59.25ID:O7+GYvY4
Ubuntuに最新のfzfを入れるために成り行きでgoも入れてビルドに使ってるんだけど、使い勝手どう?
499デフォルトの名無しさん
2021/05/10(月) 23:35:35.91ID:FH4+0Y9S
全体的な満足度は高く、回答者の92%がGoを使用して満足しています
500デフォルトの名無しさん
2021/05/12(水) 12:17:45.17ID:/qsSpkSD
公式の正規表現パッケージだと機能が足りないんで高機能版を探してるんだけど
例えばgolang pcreで検索すると玉石混交っぽいのがたくさんヒットします。定番はどれですか?
501デフォルトの名無しさん
2021/05/12(水) 12:48:25.99ID:heOXda5C
ないよ
基本的に標準で妥協するのがgoの流儀
502デフォルトの名無しさん
2021/05/12(水) 13:26:25.47ID:4BNP4E9q
Golint is deprecated and frozen.
https://github.com/golang/lint
503デフォルトの名無しさん
2021/05/12(水) 14:21:32.78ID:V3rxtHou
golintなんて使うな!ってのはかなり前から言われてなかったか?
そうか、とうとうというかやっと非推奨になったか
504デフォルトの名無しさん
2021/05/12(水) 15:46:19.35ID:cNdHMJPH
Golintよりあの独特のキモさのあるマスコットを frozen してくれ
505デフォルトの名無しさん
2021/05/13(木) 06:49:06.23ID:i4261GGU
そういや、今は golangci-lint で gosample, unused, deadcode を disable して使ってるけど、皆は何を使ってる?
506デフォルトの名無しさん
2021/05/17(月) 09:13:26.08ID:kl1wKiv0
ごふぁー君、日本人が日本の感覚でリファインしたらどうなるだろうな
可愛くなるかな
507デフォルトの名無しさん
2021/05/17(月) 09:37:57.05ID:Lk3ol8M7
美少女にされてポリコレで炎上して終了
508デフォルトの名無しさん
2021/05/17(月) 10:27:08.28ID:tCPY+RXs
出目だけ直せばかなり可愛いと思うの
509デフォルトの名無しさん
2021/05/17(月) 16:09:31.77ID:ki4Fszz7
もうある
510デフォルトの名無しさん
2021/05/17(月) 21:21:05.60ID:gfx8XjK2
えー、めっちゃかわいいやん。
いろいろ並べたらかなり上位に食い込むはず
https://www.google.com/search?q=gopher+golang

ちなlisp
https://www.google.com/search?q=lisp+alien
511デフォルトの名無しさん
2021/05/18(火) 07:51:53.47ID:KgfYT/kM
lispキモッ!!!!!
512デフォルトの名無しさん
2021/05/18(火) 11:48:20.95ID:JTwnomFG
land of lisp知らん人って居るの?居るか、昔の本やもんね…
513デフォルトの名無しさん
2021/05/18(火) 11:55:07.53ID:eZ1jimh0
lisp興味あったから買ったけど、興味なかったら買わないだろうし知らない人多そう。
あの本のコミック感好き
514デフォルトの名無しさん
2021/05/18(火) 12:47:44.48ID:KgfYT/kM
lispみたいな妙ちくりんな言語好きなやつらって
かっこつけるのが好きなだけなやつのイメージ
515デフォルトの名無しさん
2021/05/18(火) 13:43:10.70ID:eZ1jimh0
()なだけにか、うまい
516デフォルトの名無しさん
2021/05/18(火) 15:18:58.11ID:rbHsLKwn
歴史的な意義は大きいよ
lispマシンみたいな非効率な物作るのも今では考えられんし
調べる分には面白い
517デフォルトの名無しさん
2021/05/18(火) 17:50:33.31ID:K7AiWxDd
じゃ、gopherはキャワイイ、lisp alienはカッコいいって結論でいいよね?
518デフォルトの名無しさん
2021/05/20(木) 20:04:23.04ID:eq1VjwUx
いいよ
519デフォルトの名無しさん
2021/05/31(月) 19:04:04.05ID:4YxEhylU
月末日の今日timeのAddDateのキチンとした仕様理解したわ…
520デフォルトの名無しさん
2021/06/01(火) 03:54:23.59ID:XPr1LW+9
A Tour of Goでわざと誤ったコード書いてRunするとエラーとか何も表示されないんだけどこれって俺環?
一応FirefoxとChromeで試した
521デフォルトの名無しさん
2021/06/01(火) 05:07:07.58ID:uviIosIU
エラー行と、Go build failed が出てます
play ground のサーバが落ちてたとか?
522デフォルトの名無しさん
2021/06/01(火) 07:39:06.98ID:AwIwdigt
大抵、拡張とかせい
523デフォルトの名無しさん
2021/06/05(土) 17:26:46.46ID:/GCBUkfd
GoにGenerics入るの喜ばれてるのを見るにD言語で良かったのではってなる・・・
524デフォルトの名無しさん
2021/06/08(火) 20:33:43.16ID:hv7oAT4j
GoLandっていうIDEすこ
これ使ったら他のIDEには移れねえわ
525デフォルトの名無しさん
2021/06/08(火) 20:47:33.83ID:Yg8CMFGO
基本的にVSCode信者だけどVSCodeのGo拡張は糞すぎるんだよなあ
まあどうせ他の言語も日常的に使うからGoのためだけに移行するのはありえないんだが、さすがに糞すぎる
526デフォルトの名無しさん
2021/06/08(火) 21:09:41.18ID:1LMznI/d
いうほどか?C++とかもあんなもんじゃん
527デフォルトの名無しさん
2021/06/08(火) 21:19:41.74ID:TOKjPAZ1
VScodeがGo/HTML/JavaScript/Markdownと幅広いから、それだけで間に合っちゃうんだよな…
528デフォルトの名無しさん
2021/06/08(火) 23:18:45.50ID:8Fr3CQSw
機能とかはともかく、ステータスバーをやたら占有するのは糞だな。
529デフォルトの名無しさん
2021/06/09(水) 01:01:33.46ID:y3OB765l
ステータスバーを占有、、、?
530デフォルトの名無しさん
2021/06/13(日) 22:15:56.68ID:lkM0NMIG
VagrantのRubyコードをGoでリライトする模様
531デフォルトの名無しさん
2021/06/13(日) 23:00:16.90ID:exUpBE38
ほう。Vagrantfileはどうするのかな。今だとYAMLとかになりそうな悪寒。
532デフォルトの名無しさん
2021/06/13(日) 23:12:30.98ID:Nkflk8c7
Vagrantとかまだ使ってる奴いるの?
Dockerでオワコンとか以前に、GoだとVMもコンテナもなしに生でも普通に動くようにポータブルに作るだろうし
533デフォルトの名無しさん
2021/06/13(日) 23:25:59.99ID:exUpBE38
普通に、WindowsでVirtualBox使うならその環境構築にほぼセットだわ。
Goのアプリしか使わないわけでもないしな。
534デフォルトの名無しさん
2021/06/13(日) 23:41:09.94ID:eXqVG9aT
WSLかDockerでよくね
535デフォルトの名無しさん
2021/06/13(日) 23:43:18.70ID:WJQpzq26
>>530
まじ?!
536デフォルトの名無しさん
2021/06/14(月) 03:57:38.10ID:WMzG+VdI
https://www.hashicorp.com/blog/toward-vagrant-3-0
これだね
rubyは徐々にコアから切り離してオプション化していく感じかな
537デフォルトの名無しさん
2021/06/14(月) 04:16:45.90ID:SZpJFTNw
あらー
まあユーザーからしたらRuby入れるの面倒だったしな
538デフォルトの名無しさん
2021/06/14(月) 07:44:36.39ID:6p9bp5Dj
>>533
WSLで用が足りるならVirtualBox自体使う必要がないんだろうがな。
ただ、単にLinuxのソフトウェアが動けばいいんじゃなくてやっぱり仮想環境が必要な場面はあるし。
以前Ubuntuの複数バージョンを使い分けたりしたことがあるが、こういう用途にはまだ必要。
539デフォルトの名無しさん
2021/06/14(月) 07:45:52.08ID:6p9bp5Dj
リンク間違えた。>>538>>534ね。
540デフォルトの名無しさん
2021/06/14(月) 11:59:12.37ID:DpCafs9R
goのcoroutineはgoroutineていうのに
goのcontextはgontextていわないのはなぜ?
541デフォルトの名無しさん
2021/06/14(月) 12:04:15.12ID:ei9nXL3B
goroutineはGo言語のルーチンじゃなくて予約語goで作られるroutineだからじゃね?
542デフォルトの名無しさん
2021/06/14(月) 12:23:24.79ID:6p9bp5Dj
そもそも goroutine は coroutine じゃなくて thread だから。
543デフォルトの名無しさん
2021/07/02(金) 14:46:02.08ID:LpLK6KDw
https://twitter.com/alexanderdanilo/status/1410521878855176194

Rob Pikeが引退ってマジか
https://twitter.com/5chan_nel (5ch newer account)
544デフォルトの名無しさん
2021/08/01(日) 03:30:57.24ID:8X1C7Oi5
Goもようわからん方向に進んでますな
インフラ用言語と割り切ればええんかな
545デフォルトの名無しさん
2021/08/12(木) 01:08:37.12ID:b4UG5w9l
goで問題解くサイトみたいなのありますか?
546デフォルトの名無しさん
2021/08/12(木) 11:50:15.21ID:s+UN3BdM
今は、WSL2, Docker, VSCode(Remote Container, WSL2 ならRemote WSL)で十分。
Mac, vagarant, virtual box さえ不要

Ruby on Rails では、Heroku, Cloud 9, CircleCI などのクラウド開発

ローカル開発なら、Dockerを使うのが簡単だが、
日本人が作った、バージョンマネージャーのanyenv で、rbenv, nodenv も使える。
asdf でも、多言語の好みのバージョンを入れられる

echo -e "$RBENV_ROOT\n$NODENV_ROOT"
/home/ユーザー名/.anyenv/envs/rbenv
/home/ユーザー名/.anyenv/envs/nodenv

任意のLinuxディストリビューションをWSL2で動かす Clear Linux OSを動かすまで、2021/4
https://impsbl.hatena@blog.jp/entry/ClearLinuxOnWSL2

注意。アク禁にならないように、URL 内に、@を入れました

Docker Hub からpull したイメージを、tar へexport して、
それをWSLで、D ドライブへimport する

docker export
wsl --import

WSLでカスタマイズしたものを、さらにexport しておく。
wsl --export
547デフォルトの名無しさん
2021/08/14(土) 18:30:15.43ID:1pPVCqqe
ジェネリクスは入った?
548デフォルトの名無しさん
2021/08/17(火) 12:12:44.83ID:uiypcFr0
Go 1.17 is released!
https://twitter.com/golang/status/1427378613289164810
https://twitter.com/5chan_nel (5ch newer account)
549デフォルトの名無しさん
2021/08/17(火) 17:56:17.55ID:OnI2KERu
>>541
goroutineって
オプションで複数のCPUコアに分散も出来るけど
実際はほぼ軽量スレッドじゃん?
コルーチンみたいなものじゃないの?

プログラムの書き方がスレッド使ったプログラムっぽかったら、
Goみたいに実装が極力OSスレッドに頼らないものになっててもスレッド(グリーンスレッド)?
550デフォルトの名無しさん
2021/08/17(火) 21:51:06.20ID:082KifEP
goroutineはstackful coroutine
551デフォルトの名無しさん
2021/08/21(土) 18:09:12.95ID:7GAoG1Iq
Rustのメモリ安全性はボローチェッカーによって担保されている

Nimバージョン:1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しでView types参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴
著者: アンドレアス・ルンプ
バージョン: 1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、Cのソースコードを吐き出せるので割り振られた仕事が早く終わっ
ても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
552デフォルトの名無しさん
2021/08/21(土) 18:16:54.48ID:O7+p4qIy
Rubyガイジに続いてNimガイジの登場?
553デフォルトの名無しさん
2021/08/22(日) 12:20:27.60ID:0Cz6ueFz
Rustのメモリ安全性はボローチェッカーによって担保されているが、
Nimと比較してRustはタイプ量が多い事により限りなく低い生産性と
C++のような高い難読性、超巨大なバイナリ生成性能を兼ね備えています

Nimはバージョン1.5.1でRustのボローチェッカーに似た「View types」が実装されれば、
GC無しのView typesで参照の有効性を検証することによってメモリ安全性を保証しつつ
限りなく抑え込まれたタイプ量で高速化したCのソースコードを吐き出せます

Nimソースコード ==nimコンパイラ==> Cソースコード ==Cコンパイラ==> バイナリ

なので、nimコンパイラが通った時点でメモリ安全性が担保されませんか?

Nimの実験的特徴 バージョン1.5.1
http://nim-lang.github.io/Nim/manual_experimental.html

第二プログラミング言語として Rust はオススメしません Nim をやるのです
https://wolfbash.hateblo.jp/entry/2017/07/30/193412


Nimは限りなく抑え込まれたタイプ量で高い生産性とPythonのような高い可読性を実現し
ているにもかかわらず、高速なCのソースコードを吐き出せるのでC言語でリモートワーク
されている方は割り振られた仕事が早く終わっても終わってないふりをして怠けることができる

「怠け者とはこうあるべきだ!」と言うとても大事な事を Nim は我々に教えてくれます
554デフォルトの名無しさん
2021/09/09(木) 23:03:13.52ID:uQCXRnBV
>>545
http://rosettacode.org/wiki/Category:Go
555デフォルトの名無しさん
2021/09/15(水) 01:01:00.82ID:e45L6iVT
9月TIOBEプログラミング言語ランキング
https://news.mynavi.jp/article/20210913-1971335/
556デフォルトの名無しさん
2021/09/18(土) 17:33:40.58ID:kYto5Bfg
Go言語を嫌う6個の理由
https://www.kbaba1001.com/entry/2021/09/17/073149
557デフォルトの名無しさん
2021/09/18(土) 18:19:07.86ID:ED687M4K
まー、概ね間違ってもいないかな?
でもmapなどがループより優れてるっーのは感想にしか過ぎなくないか?
558デフォルトの名無しさん
2021/09/18(土) 19:44:16.34ID:1qFQH5Bo
優れているかどうかはともかくmapとかは便利だよ
Genericsが導入されたらめっちゃ使われるようになるっしょ
559デフォルトの名無しさん
2021/09/18(土) 19:55:59.68ID:ED687M4K
短く分かりにくいコードが書けて便利
560デフォルトの名無しさん
2021/09/18(土) 20:04:43.61ID:VYLTl1id
総称によるイテレーションを伴うmap/reduceは他の言語みたいに単一スレッドの自己満足じゃなく
デフォルトで並列にして欲しいです。。。
561デフォルトの名無しさん
2021/09/18(土) 20:15:55.61ID:9LlZohSd
map/reduceが使われる殆どのケースでは、入力の振り分けや結果のマージ、コンテキストスイッチ等のコストのため、並列化するとかえって遅くなるんだよ
562デフォルトの名無しさん
2021/09/18(土) 20:27:06.45ID:VYLTl1id
うっせーうっせーうっせーわ、あなた思うよりmap/reduceに並列度引数付ければいいだけです!
デフォルトで言うてる文章も読めないアホはgolangのM:Nモデルの高速スイッチが分かってない
563デフォルトの名無しさん
2021/09/18(土) 20:33:23.01ID:9LlZohSd
だから「殆どのケースでは」って言ってるじゃん
デフォルトで並列なら確実に遅くなるよ
564デフォルトの名無しさん
2021/09/18(土) 20:39:09.73ID:G1H8j0E2
駄々っ子には何を言ってもムダ
565デフォルトの名無しさん
2021/09/18(土) 21:09:31.39ID:IxZBx6u4
気持ち悪い単発ID援護
566デフォルトの名無しさん
2021/09/18(土) 22:54:51.12ID:em3js4pK
その記事は肝心のポイントが一つ抜けておるな
goは何がクソといってまず名前がクソすぎる
40年50年前にできた言語じゃないんだからちゃんと後先考えて名前つけろや!
567デフォルトの名無しさん
2021/09/19(日) 12:53:46.33ID:HwX1dH8g
goの最大の問題は検索のしづらさだろねえ

Goのヘイト記事は外国でもある(そりゃそうだ)

Why Golang Is Bad for Smart Programmers
https://raevskymichail.medium.com/why-golang-bad-for-smart-programmers-4535fce4210c


I want off Mr. Golang's Wild Ride
https://fasterthanli.me/articles/i-want-off-mr-golangs-wild-ride


もっと強烈なのあったはずなんだけど見つかりませんでした
568デフォルトの名無しさん
2021/09/19(日) 13:03:36.46ID:W3Ibxi5N
でも悪評も評判のうちなんで
WebAPIとして最適な並列処理性能を持つとはいえ、なんでそんなに注目されるのか
極論言えばWebAPI作るくらいしか能はないよね
569デフォルトの名無しさん
2021/09/19(日) 14:20:10.51ID:2JoXdmjo
GoにGenericsが導入されるのは来年か、待ち遠しいなあ
570デフォルトの名無しさん
2021/09/19(日) 14:33:08.77ID:kGPMuBj8
ググラビリティなら同じ名前のゲームがあるRustより遥かにマシ
571デフォルトの名無しさん
2021/09/19(日) 14:42:11.42ID:eLx8+R0U
最近だと SIMD命令への対応がうれしい(実装コードはこれからだけど)

cmd/go: add GOAMD64 environment variable
https://github.com/golang/go/commit/b1bedc0774d8a3a7ff8778e933ee92e8638e9493

Microarchitecture levels
https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels
572デフォルトの名無しさん
2021/09/21(火) 14:14:06.62ID:QKlGGi7s
Fuzz testing
573デフォルトの名無しさん
2021/09/21(火) 14:57:53.57ID:ZVAhNDzz
>>566
c って名前をつけた奴に無理な注文すんなw
574デフォルトの名無しさん
2021/09/21(火) 15:24:48.06ID:YFZVt4Mm
たまには D とか V のことも思い出してあげてください
575デフォルトの名無しさん
2021/09/21(火) 15:45:09.78ID:VBMIAkoo
>>573
Szl (Sawzall) っていう命名もできるのになあ
576デフォルトの名無しさん
2021/09/21(火) 16:21:52.65ID:ZVAhNDzz
>>567
> Why Golang Is Bad for Smart Programmers
> https://raevskymichail.medium.com/why-golang-bad-for-smart-programmers-4535fce4210c

読んだ
Cしかやったことない奴は騙せても
いろんな言語やってきた奴からしたらショボすぎるわな
あとどうでもいいけどDを引き合いに出してGo批判するって斬新だなw
577デフォルトの名無しさん
2021/09/21(火) 16:40:46.07ID:VBMIAkoo
D言語ちょっと試したことあるけどなかなか心地良かったよ。
しかしなぜGoやRustが使われて、Dが使われないのか、というな視点でも評価してほしいな。

「俺が考えた最強の言語」を作る人はいっぱいいても、ちゃんとコミュニティを作って使われるようになる言語はなかなかないね。
578デフォルトの名無しさん
2021/09/21(火) 16:52:12.16ID:ZVAhNDzz
>>577
> 「俺が考えた最強の言語」を作る人はいっぱいいても、ちゃんとコミュニティを作って使われるようになる言語はなかなかないね。

Perl6もフィボナッチ数列から最初の十個を出力を
say (1, 1, *+* ...*)[^10];
と簡潔に書けたりして最強言語だけど使われてないね
579デフォルトの名無しさん
2021/09/21(火) 17:19:40.36ID:kwTaz7X0
write only language として最強でもなぁ・・・
580デフォルトの名無しさん
2021/09/21(火) 17:32:46.95ID:YFZVt4Mm
>>578
そういやこの前「Perl6 は〜」って話してたら「rakulang だ!」って怒られたわ
581デフォルトの名無しさん
2021/09/21(火) 18:08:02.89ID:chSqlukK
Goは、@普通にビルドできて、A普通にデプロイできて、B後々ゴミにならない
という当たり前の事が当たり前にできることに存在意義がある
簡単なことだけどそれができない言語が多いんだよね
582デフォルトの名無しさん
2021/09/22(水) 01:42:07.18ID:l6mKxMvi
ジェネリクスが入ればそこがまた飛躍の時
583デフォルトの名無しさん
2021/09/22(水) 08:18:04.28ID:FHlooIbh
2021年にもなってジェネリクスを待ち望んでる言語があるとか
痛々しすぎん?
584デフォルトの名無しさん
2021/09/22(水) 09:14:59.43ID:B3HpsGLJ
いらん
と開発元も思ってたけど、おまえらがどうしても欲しいと言い続けたからだろ
585デフォルトの名無しさん
2021/09/22(水) 09:30:44.14ID:FHlooIbh
言語をデザインした奴が最初の段階で要らんと言ってるなら
それを貫き通してほしいよね
馬鹿にいまさら迎合することなく

Javaにジェネリクスが入った時も同様の失望を覚えた
586デフォルトの名無しさん
2021/09/22(水) 09:47:34.93ID:Z6AQmIPR
俺はジェネリクスが欲しいと思ったことはないなあ
sliceとmapに型があるから実際ほとんど十分なんだよね
587デフォルトの名無しさん
2021/09/22(水) 09:50:30.16ID:SSzxu7sL
システムプログラミングではいらんかもしれんけど業務アプリではないとつらい
588デフォルトの名無しさん
2021/09/22(水) 10:12:49.72ID:B3HpsGLJ
言語デザイン的には業務アプリは考えてなかったけど、業務アプリでも使いたいという要望が広まってきて、その弊害というかなんというか
業務アプリにgoroutineはオーバースペックだし、JavaとかC#でいいと思うんだよな
589デフォルトの名無しさん
2021/09/22(水) 10:16:35.88ID:B3HpsGLJ
Goって、より良いCとして使うだけの利用者層は今はどれくらいのシェアなんだろ?
590デフォルトの名無しさん
2021/09/22(水) 10:54:15.71ID:csq4xmc8
Generics が入る時点で Go1 と Go2 に枝分かれするかと思ったけど
そうでもないみたいだな
591デフォルトの名無しさん
2021/09/22(水) 12:08:04.57ID:rujUi/9T
Genericsがないから、いまは代わりにコード生成でなんとかしてるんでしょ
コード生成ってメンテしづらいし面倒だよ
592デフォルトの名無しさん
2021/09/22(水) 12:08:24.30ID:xw08ZBoX
型クラスがないジェネリクスとか片手落ちなんだよな
それに標準の型クラスもないのにどうやって共通性を持たせるんだろうとか
いろいろ無理な気がする
使いにくいから誰も使わないということになりそう
593デフォルトの名無しさん
2021/09/22(水) 12:23:07.31ID:rujUi/9T
>>589
Linux関連プロジェクトみたいに、既存関連リソースがC言語ばかりだとC使うんだろうけど、
しがらみのない新しいツールではCなんて滅多にないような? ほとんどGoかRustなのでは・・・?

シェアは全くわからんけど、おれの趣味寄りにもなるけど有名なのだと
Docker、Kubernetes関連、moby、HashiCorpのプロダクト、etcd、CockroachDB、InfluxDB、BoltDB、fzf、Hugo、frp、traefik

もしかしてこういう話じゃない?
594デフォルトの名無しさん
2021/09/22(水) 12:45:37.46ID:rujUi/9T
>>592
例えばこういうふうにすれば、共通の演算子である+を使えたりするけど、これじゃダメ?
https://go2goplay.golang.org/p/hYqlmKON7VE
595デフォルトの名無しさん
2021/09/23(木) 00:48:02.08ID:wxnnur2v
はよGenerics使わせろ
596デフォルトの名無しさん
2021/09/23(木) 01:09:42.88ID:5iThOVVW
>>595
WIP ブランチなら既にデフォルトで -gcflags=-G=3 になってる
gopls も対応したので Emacs + Eglot でサクサク書いてる
597デフォルトの名無しさん
2021/09/23(木) 19:28:09.42ID:wxnnur2v
おお、いいね
598デフォルトの名無しさん
2021/09/24(金) 07:59:47.34ID:ljIO2QUf
Go language part 4 YouTube動画>2本 ->画像>6枚
599デフォルトの名無しさん
2021/09/27(月) 07:44:16.84ID:lxaeA1bT
TVCM見てて Go Pay が出てきて吹いたわ
なんなの提供元
ポケモンGoに勝てるの?
GO TO トラベルに勝てるの?
Google Pay に勝てるの?
それも調べたら MOV Pay から名称変更とか、そこまで逆境が欲しいの?
山中幸盛なの?
600デフォルトの名無しさん
2021/09/27(月) 09:06:27.80ID:lxaeA1bT
書かなくても分かると思ったけど一応、サービス内容に対しての話じゃないからね
ググラビリティの話

Go が後続のサービスにどれだけ苦しめられてるのか
任天堂やら日本国政府やらGoogleやらのパワープレイヤーなら知ったこっちゃないだろうけど、泡沫勢力じゃ約束されし絶望じゃん
601デフォルトの名無しさん
2021/09/27(月) 13:53:26.84ID:LxdgSnnl
ググラビリティって普通GolangかGo言語で検索すんじゃねーの?
Cとかでどうやってんの?
602デフォルトの名無しさん
2021/09/27(月) 13:56:04.08ID:stBORJeg
親会社名自体が猛烈に低ググラビリティという…
603デフォルトの名無しさん
2021/09/27(月) 14:52:06.48ID:Z8J42Gkb
>>599
どうした急に
お薬飲め
604デフォルトの名無しさん
2021/09/27(月) 15:05:56.76ID:lxaeA1bT
>>603
>>600
書かなくても……書いといて良かったわ
605デフォルトの名無しさん
2021/09/27(月) 15:19:55.68ID:tsIS/8pJ
検索ワードで回避できる問題なんかどうでもいい
一般人が検索するような物でも無いし
コマンドが短く入力しやすい方が重要
squirrelみたいな名前にしたら腱鞘炎になるぞ
606デフォルトの名無しさん
2021/09/27(月) 17:54:21.16ID:Ac+aBfL/
>>601
C言語
607デフォルトの名無しさん
2021/09/28(火) 08:06:03.36ID:zmriYPIE
極主夫道の二巻の福引きGo等の商品がどうみてもGopher君のパチモノ
608デフォルトの名無しさん
2021/09/29(水) 15:30:15.59ID:W9rNFdvq
見上げてGolang、夜の星を
609デフォルトの名無しさん
2021/10/18(月) 13:29:08.84ID:tOAzdfyW
Go簡単って言うからやってみたらローカルファイルimportするのに相対パス使えないとか
go mod するんだとかGOPATHはもう使わないとかゴチャゴチャゴチャゴチャ・・なんじゃこれ?全然シンプルじゃない
ツール周りがゴチャりすぎやろ、やっぱPythonが神だわ
610デフォルトの名無しさん
2021/10/18(月) 13:40:38.36ID:+iNX7XVA
そうですね。Python使った方が良いと思いますよ。さようなら
611デフォルトの名無しさん
2021/10/18(月) 19:24:50.47ID:vvHfCZ9q
まあ相対パス使えないのはやり過ぎな気もする
htmlですらbaseを指定できるのに、何を恐れているのか
パーサーを作る際に楽だからなのかな?
612デフォルトの名無しさん
2021/10/18(月) 21:26:33.48ID:w/yRHxqY
え? go.mod で replace しておけばいいんじゃない?
613デフォルトの名無しさん
2021/10/27(水) 21:55:02.42ID:HQ60ALa2
Sum Type、Union elementあと4か月か…2月/8月
614デフォルトの名無しさん
2021/10/27(水) 22:05:51.76ID:HL6HkAZF
Genericsは1.18に載らないの?
615デフォルトの名無しさん
2021/10/27(水) 22:49:21.67ID:Dm8DTcKu
既に WIP ブランチでは使える様になっているから 1.18 で
正式採用になると思う(gopls も対応済み)
616デフォルトの名無しさん
2021/10/31(日) 15:45:47.64ID:Qz/5KmYR
ついにGenerics載るんだね、楽しみやなー。

ところで、ユーザ定義演算子は計画されてない?
AddとかMulみたいなメソッドじゃなくて+とか*みたいな演算子使いたいこともあるんよね
617デフォルトの名無しさん
2021/10/31(日) 18:46:09.19ID:OY4TDGUi
>>616
>>594みたいな書き方しか無理みたい
トホホ
618デフォルトの名無しさん
2021/11/01(月) 23:46:42.69ID:jfjYB5Nx
GOおもろない
なんとかしてや
619デフォルトの名無しさん
2021/11/02(火) 14:39:41.99ID:vRCKOPQ3
>>618
どこがどうおもろないんや?
620デフォルトの名無しさん
2021/11/02(火) 21:14:20.28ID:c4MpaWiz
仕事だから仕方なく使ってるのはあるな
621デフォルトの名無しさん
2021/11/03(水) 08:59:07.96ID:owwwLqi1
なんも知らん新人でも、できるベテラン・新人でも、仕事に使うにはソースコードに均一性のある良い言語だわいな
622デフォルトの名無しさん
2021/11/03(水) 09:11:16.68ID:hIbM46+W
最近Goの現場入ったけど
dep?とかいうモジュール使っててGOPATHにも気を使わないと駄目で
結構混乱する
初期で大分失敗してると思うわGo
623デフォルトの名無しさん
2021/11/03(水) 10:49:56.25ID:I/oot80l
depは3年ぐらい前から正式な公式ツールじゃもう無いし、ツールの煩雑性や使い勝手は言語に関係ないよ
PATH変数に気を使うのはC,C++でも一緒、そもそも環境構築すら出来ない失敗をしてんのはあんたか
現場の手順書が無いか
624デフォルトの名無しさん
2021/11/03(水) 11:46:43.90ID:XfZZ+0lv
「改訂2版 みんなのGo言語」という本を読めば?

学生時代に、Ruby 製のVagrant を作って、
Terraform で有名なHashiCorp を作った、今世紀最大の起業家、
Ruby/Go の神、Mitchell Hashimoto のソースコードも解説している
625デフォルトの名無しさん
2021/11/03(水) 12:11:59.17ID:508Y0Igq
go.mod に書いとくだけで github やらから直接にライブラリを導入できる点で、環境面では目一杯助かってるわ
Mavenやらpipが組み込まれてる感じだけど、基本機能であることは大きい
Mavenとかpipは別途入れないとならんし、それぞれ本体と別の環境整備しないとならないから
626デフォルトの名無しさん
2021/11/03(水) 19:24:54.92ID:ywwxM/TS
>>622
今更?
627デフォルトの名無しさん
2021/11/04(木) 16:01:17.99ID:eo9m+3ij
趣味で使って面白い?
628デフォルトの名無しさん
2021/11/04(木) 16:13:12.12ID:5gkz3BSt
面白い
GCP無料枠でそこそこ実用性のあるサイト建てたりできるし
629デフォルトの名無しさん
2021/11/04(木) 16:27:08.12ID:eo9m+3ij
なるほど
googleの犬になるか
630デフォルトの名無しさん
2021/11/04(木) 19:21:19.80ID:5gkz3BSt
だってアマとか無料枠ないんだもん
一年目だけってのは、単に初回サービスって言うんだよ
631デフォルトの名無しさん
2021/11/05(金) 14:20:53.38ID:0z+NMKpK
Herokuとか
632デフォルトの名無しさん
2021/11/07(日) 15:35:29.83ID:mQ9A5wfK
社会人なら別にEC2使ってもマイナーサービスのサーバ台ぐらい余裕やで。
一ヶ月分の料金なんて、スタバ2回分くらいだろ。

そら安いほうがいいけど。
633デフォルトの名無しさん
2021/11/07(日) 22:23:20.41ID:aZyVG3bY
micro使えば安いけど明らかにメモリが足りないんだよな
おまけに調子に乗ってぶん回すと詰まるし
最低でもmedium程度は欲しいがそうなると結構高くなる
634デフォルトの名無しさん
2021/11/07(日) 22:38:38.82ID:VzSbYdr/
Oracle Cloudは?
コンソールが重くて独自性強いけど起動してしまえばいっしょ
635デフォルトの名無しさん
2021/11/07(日) 23:41:21.11ID:KgxySftM
サイト立ててもアクセスが日に数件なんでほとんどマシン回ってないやww
636デフォルトの名無しさん
2021/11/08(月) 16:12:42.92ID:KvpLYeV7
microといえば思い出す、大手のNでスワップしまくりなんも考えてないSEが手配したmicro
しかもWindowsの時の絶望感・・・
637デフォルトの名無しさん
2021/11/08(月) 16:32:31.04ID:Qfm8QX8G
んなもん動くか!

とググったら
https://qiita.com/zakky/items/68c4749889717c3cd849
おぅい!!
638デフォルトの名無しさん
2021/11/08(月) 16:42:16.76ID:NUVpgUuA
microでも小さいサービスならメモリ足りるやろ? goだったら100MBメモリ食うこともありえないくらいやろ
メモリリークでもしてるんじゃないの?
Windowsとか動かしたらそらきついだろうけど。
639デフォルトの名無しさん
2021/11/08(月) 17:40:06.67ID:Qfm8QX8G
動くか、と言ったのはWindowsの話
400MB確保できるみたいだから意外と使えるかも?
640デフォルトの名無しさん
2021/11/08(月) 18:00:09.69ID:NUVpgUuA
なんでそんなにWindowsを動かしたいんだ・・・。
641デフォルトの名無しさん
2021/11/09(火) 13:54:21.34ID:dGlVH92+
>>640
pインスタンスでwindowsを動かすのは普通に多いよ
642デフォルトの名無しさん
2021/11/09(火) 17:10:56.19ID:8qmTEk8+
いや、なんで?という疑問への答えじゃないよな
ぶっちゃけLinuxでSSH接続専用にすれば済むから
643デフォルトの名無しさん
2021/11/09(火) 19:48:05.88ID:+FOj3uk2
GUI系のアプリを動かすんだよ
CAD系のシミュレータとか
windowsにしか存在してないアプリが多い
644デフォルトの名無しさん
2021/11/09(火) 23:41:06.97ID:5nP8kmAz
github.com/fogleman/gg が遅くてちょっと困った。
Webassemblyで普通にcanvasの関数をcallした方が速いなんて。
ebitenはdraw系の関数少ないからなぁ。
645デフォルトの名無しさん
2021/11/11(木) 09:52:59.41ID:zPNWYi1t
Twelve Years of Go
Russ Cox, for the Go team
10 November 2021
646デフォルトの名無しさん
2021/11/17(水) 23:16:51.89ID:a+84vLf4
gotoの使用は許可されてる?
647デフォルトの名無しさん
2021/11/18(木) 06:41:13.91ID:eOo002y1
>>646
普通は使わないが何故か仕様にあるんだから許可されてるんだろ
648デフォルトの名無しさん
2021/11/18(木) 17:38:26.56ID:kJKbHvZv
深いループを抜けるときはgotoを使う
649デフォルトの名無しさん
2021/11/18(木) 21:15:03.90ID:iWaFftPG
ラベルgotoは、gotoではあっても古い言語で禁忌されているgotoではありません。

ダイクストラのgoto文論争はBASICはもちろんですが、1968年に“Go To Statement Considered Harmful”
(Go To 文は有害とみなされる)において行番号へ飛ぶような言語が多かったために起こった論争です。
C言語も古くからありましたが、こちらもあまり使われなくなりました。なによりもgoto以前に
setjmp, longjmpという、関数の間でのジャンプ出来るようなC標準ライブラリが存在したために
より強く禁忌されたといえるでしょう。のちにStructured ProgrammingからO-OProgrammingへ移り変わる
につれて行番号は何もなく、文の構造の厳格性や動的ディスパッチなどが整備されたため、必要性が薄れました。

現在あるラベルgotoとは、ループの中に飛び込むgotoなどではなく、二重のループ中のbreakなどで
脱出経路を明確化するなど、例えばコンピュータサイエンスの分野ではHaskellにおいてはモナドを利用して
例外や非決定性計算行うなど、引数付きgotoとも呼ばれる。
650デフォルトの名無しさん
2021/11/19(金) 09:01:28.58ID:Fh4InTPD
Inline指定出来ないので関数呼び出しのコスト低減くらいしか用途が思いつかない
そこまでシビアな実装滅多に無いから基本的に使わない
651デフォルトの名無しさん
2021/11/19(金) 12:21:28.19ID:WNpWqDaH
確かに関数化すりゃブロック脱出もシンプルにreturnさせりゃいい
となるとgotoは関数呼び出しによるオーバーヘッドの削減だけなのかな?
ナノ秒単位でも削減したいという余程のシビアな要件で使うって話になるけど、関数呼び出しごとにスタックのチェックが入るGoでそんな要件に意味ってあるの?とも思う
652デフォルトの名無しさん
2021/11/19(金) 12:34:26.60ID:kQNnUQCo
というよりもアホ意識高いgoto異端審問官が、文句つけてくるので使わない。
653デフォルトの名無しさん
2021/11/19(金) 15:43:47.01ID:oZVaazpx
おれにとっては、Golangでgoto使うのは、構文解析器みたいなのを書くときにたまにあるんだけど、共通の処理までジャンプしたいときとか、
for文とかをネストしたときに、いくつか上のブロックまでジャンプしたいときかなあ。これも構文解析したあとの評価器で使うこともある気がする

ようするに最適化とかじゃなくて、ちょっとした大域脱出みたいなノリで使ってる

Go本体のソースコードでもこんな感じgoto使ってるんじゃなかったっけ
654デフォルトの名無しさん
2021/11/20(土) 11:05:39.09ID:GriTsYN5
俺たちのGO!
655デフォルトの名無しさん
2021/11/21(日) 07:26:46.41ID:8Zd5Z9wI
IDEはどれがおすすめ?
656デフォルトの名無しさん
2021/11/21(日) 07:39:21.64ID:AMP8EKz2
自分はVSCode
657デフォルトの名無しさん
2021/11/21(日) 23:14:16.37ID:1+FhODzH
私はEmacs
658デフォルトの名無しさん
2021/11/22(月) 06:12:39.00ID:I9kdAR+e
VSCodeもemacsもIDEではないけどね
659デフォルトの名無しさん
2021/11/22(月) 07:05:20.26ID:rahxNjIR
バージョン管理からテストまで環境内で完結してるのに仲間外れなのか
660デフォルトの名無しさん
2021/11/22(月) 19:08:36.54ID:uiCHuC7N
emacsは"環境"だから、
emacs > IDE
だよな


ところでIDEの定義って何よ?
高機能エディタと垣根がなくなってきたからそれらを区別する意味があるのかどうか
661デフォルトの名無しさん
2021/11/22(月) 19:28:29.86ID:rahxNjIR
統合開発環境だから、コンパイルからデバッグ、バージョン管理にデプロイまで揃ってるemacsとかVScodeを入れないとなると、いよいようろんな定義になる
RADとかグラフィカルな開発環境とごっちゃになってるのでは?
662デフォルトの名無しさん
2021/11/22(月) 19:36:29.51ID:rahxNjIR
エディタ内でデバッガと密接に連携(ブレークポイント設置して値を参照とか)できれば統合してると言ってもいいと思うんだが
663デフォルトの名無しさん
2021/11/23(火) 10:50:24.50ID:YlZvZbei
mapをrangeステートメントで処理すると毎回順番変わるのな
将来mapの実装を変えた時に要素の順番が変わっても大丈夫なようにあえてランダムにしてるらしい
最初知らなくて嵌った

しかもランダムに返す仕様の方がパフォーマンスをよくしやすいらしい
ensure better balancingって
なるべく偏らないように要素を配置するみたいな意味か

https://stackoverflow.com/questions/55925822/why-are-iterations-over-maps-random/55925880#55925880
664デフォルトの名無しさん
2021/11/23(火) 11:47:46.83ID:RPYITf6H
> ランダムに返す仕様の方がパフォーマンスをよくしやすい
いや流石にそんなことはないぞ
処理系の実装変更だけでなくマシン毎に結果が違うことも許容することで、パフォーマンス最適化の余地が広がるという意味だ
665デフォルトの名無しさん
2021/11/25(木) 20:43:12.75ID:0woLMmPf
11月TIOBEプログラミング言語人気ランキング、PHPの下落続く
https://news.mynavi.jp/article/20211109-2181586/
666デフォルトの名無しさん
2021/11/26(金) 17:11:22.22ID:xw//vI58
Golangが一番書きやすい
667デフォルトの名無しさん
2021/11/26(金) 19:19:32.54ID:TC631CUh
go と defer とチャネルが便利すぎるね
チャネルのキャパシティは未だに悩む
668デフォルトの名無しさん
2021/11/26(金) 19:31:07.75ID:jCnjnABk
チャネルはクソだろ
Cでいうポインタ関連のミスによる死と同程度くらいにはデッドロックを起こしやすい極めて危険な仕組み
669デフォルトの名無しさん
2021/11/26(金) 19:33:40.57ID:klqHYhKv
勉強中でよくわかってないんだけど
メインルーチンが死んだらゴルーチンもチャンネルも死ぬんじゃないの?
670デフォルトの名無しさん
2021/11/26(金) 19:53:34.58ID:TC631CUh
デッドロックは一番の可能性としてキャパシティを疑う
671デフォルトの名無しさん
2021/11/26(金) 21:43:15.55ID:vur9wleR
どんな言語でもスレッドやルーチェンの1つが落ちて無事平穏な言語は少ない。Erlangぐらいかな落ちる前提なのは
672デフォルトの名無しさん
2021/11/26(金) 22:02:31.09ID:v7cZYF1p
もう新しいデータ来ないのに
私待つわ…いつまでも待つわ…と待ち続けるコードを書けば
当然ながら詰まる
673デフォルトの名無しさん
2021/11/26(金) 22:32:30.29ID:gRCMakca
アミン…大統領
674デフォルトの名無しさん
2021/11/26(金) 22:54:09.91ID:b/zo5EjW
未使用の変数がコンパイルエラーになるのは地味に良い
675デフォルトの名無しさん
2021/11/27(土) 15:33:06.29ID:DHp3ezKZ
俺もチャネルはどうかと思う
ある意味スレッドより危険
676デフォルトの名無しさん
2021/11/27(土) 15:56:47.57ID:wymfOW3B
設計間違えたらデッドロックするのはどんな通信でも一緒じゃね?
チャネルを殊更に危険視するの?
677デフォルトの名無しさん
2021/11/27(土) 16:07:17.64ID:z8jcIZfA
>>676
デッドロックしやすい仕様なのは事実だし、危険だからといってその使用を回避できる標準的な代替手段が存在しない
他の言語ではだいたいpromise/future、fork-join、actorがあるからよほど変なことしなきゃデッドロックなんか滅多に起きないよ
678デフォルトの名無しさん
2021/11/27(土) 16:10:29.89ID:EtwFQg7M
そうなんだ? イケてないの?
Googleさんはなんでそんな方式を採用してしまったのやら
679デフォルトの名無しさん
2021/11/27(土) 16:43:12.87ID:z8jcIZfA
>>678
デザインパターンみたいなものを極力廃して、小さな標準的なツールセットだけでモノ作れるようにするという思想は一貫している
しかしスレッド関連のデザインパターンというのは基本的に死なないためにあえて制約を設けているのであって、
Goの思想が逆に敷居を高くする方向に作用してしまったということだ
680デフォルトの名無しさん
2021/11/27(土) 16:49:44.44ID:kX7QbhiL
CSPモデルに沿った実装がしやすいとは聞く。
CSPモデルができていればそれがデッドロックを起こすかどうか静的に検証できるはず。
681デフォルトの名無しさん
2021/11/27(土) 16:50:07.92ID:Xzfp/9Y9
ほえー、そうなんだ
実際のところ、他の人がgoroutineとか使ったやつを -race 付きで実行すると警告出まくるやつばっかだったよ

Goの強みは並行処理だと思ってたのに、他の言語のことはよく知らんけどもそんな有様じゃ強みだなんて言えないなあ
682681
2021/11/27(土) 16:53:59.99ID:Xzfp/9Y9
なんかID変わっちゃってたけど、おれは >>678
>>679 に向けて返信した
683デフォルトの名無しさん
2021/11/27(土) 17:22:55.75ID:1Qfj4fkw
CSPモデル
http://www.usingcsp.com/cspbook.pdf
684681
2021/11/27(土) 18:04:43.03ID:Xzfp/9Y9
すまん、せっかくCSPを紹介してくれるなら、もっと初心者向けのやつない?
興味はある
685デフォルトの名無しさん
2021/11/27(土) 18:14:49.72ID:kX7QbhiL
これとか。
https://staff.aist.go.jp/y-isobe/topse/vic/slides/csp-isobe-2012-03.pdf
686デフォルトの名無しさん
2021/11/27(土) 18:28:08.91ID:NTle55ol
>>678
ここに玉にディスりにくるRust坊、ほんと性格悪いな
687デフォルトの名無しさん
2021/11/27(土) 19:03:33.53ID:NTle55ol
設計が間違えてチャネルで無限ブロックするならタイムアウトをつけるべきだし、Rustもチャネルで
無限ブロックするしほかの多くの言語も(スレッド)チャネルの受信でブロックする
チャネルとは違うがErlangメッセージパッシングだって似たようなもの
688デフォルトの名無しさん
2021/11/27(土) 19:14:15.48ID:z8jcIZfA
>>687
そういうことを言ってるんじゃないのよ
>>677にも書いたけど標準的な安全な代替手段が存在しないことが問題
689デフォルトの名無しさん
2021/11/27(土) 19:53:13.18ID:wymfOW3B
Rustなんてスレッド実装が固まってから五年も経ってないお子ちゃま
690デフォルトの名無しさん
2021/11/27(土) 19:53:53.46ID:DHp3ezKZ
スレッドとかだとバッドパーツが一通り手間揃ってて
こういうのはやめましょうってのがほぼデザインパターン化されてるから
コードレビューでつぶせたり
処理を追うとわかったりする
691デフォルトの名無しさん
2021/11/27(土) 19:54:52.94ID:LVgG7qhW
>>683,685
CSPモデルのasync/awaitに対する優位性って何?
見た目何もない気がするが。
(ちなJSではなくC#のスレッドプールに対するasync/await想定でよろしく)
692デフォルトの名無しさん
2021/11/27(土) 20:00:12.03ID:kX7QbhiL
もともと危険なthread/mutexには安全なwrapperがあるのにgoのchannelにはそれが無いから、ってことかな?
693デフォルトの名無しさん
2021/11/27(土) 20:12:14.69ID:K1RL10E4
>>688
平行性のある現代的なプログラミング言語ではデットロックは言語仕様の問題ではなく、食事する哲学者の問題と
同じく制限された個数のチャネルで送られたデータが受け取られていないのに、送信できるようにはなりません。

これがレース競合を起こさないための標準的で安全な手段であり、グローバル変数や変数共有をgoroutine介して
同期ミューテックスもない操作すれば当然警告が出るでしょう。

そもそもgoroutineでのチャネルブロックはデットロックではなく、待機ブロックです。その証拠にSIGINTなどの
シグナルでは待機ブロックでも抜けるはずです。本来のデットロックなら応答しないかゾンビになります
もちろんスレッド(あるいは軽量スレッド)間でチャネルを介してのみデータを共有できるプログラミング言語も
存在しますが、goは親スコープにある変数などを操作できるように利便性のトレードオフ設計であり、より現実的で
効率的だとも言えるでしょう
また制限された個数でないチャネルの場合は送信に受信側処理速度が追い付かない場合、キューイングされて
無限にメモリーが圧迫される危険性があります。

非同期系の言語で使用されるpromiseや、未来値のプレスホルダーを参照するfutureでデットロックが起きないのは
当たり前です。前者は非同期であり並列/並行ではありません、後者は終了時まで待って値を受け渡すだけです。
fork-joinは何が言いたいのかわかりません、actorプログラミングモデルや純関数言語ならその通りですが
共有したいデータが多くの言語でチャネルやパッシングを介してのみなので競合は起こらないでしょうが
いつまで待っても到着しない受信側は、永遠に待ち続けるのは変わりません。

「そういう事をいってるんじゃない」
ま、こういう問題を一切合切、無難に解決してくれる標準的な手段を手続き言語に求めるのは分からなくも
ないですが、最終的にデットロック(あるいは待機ブロックで無限待ち)したらどうするか記述するような
フォールトトレラント処理が欲しいわけでもないのでしょうが、個数が限られている場合のレース競合対策の
ルールなので言語的ではなく、哲学的にどうにもならないと思いますが
694デフォルトの名無しさん
2021/11/27(土) 20:52:19.87ID:DHp3ezKZ
>>693
何も分かってないなら書き込むなよ
695デフォルトの名無しさん
2021/11/27(土) 21:01:18.61ID:LVgG7qhW
>>693
それお前が今書いたん?
ググってもヒットしないが、そうとも思えないから原典があるのならそっちのURLくれ。

横だが「そういうことを言ってるんじゃないのよ」ってのは、単に、
生でスレッド処理を弄らせてデッドロックの危険を避ける色々な仕掛けを正しく準備しろ、というのなら、
フレームワーク等でその辺の仕掛けを全部用意してしまって、その上でジョブをキューイング出来るようにするだけの方が
処理性能も同じで手間がかからない分だけ合理的だろ、という話だよ。

Web系でSessionや認証周りは全部フレームワークに丸投げするべき、と言われているのと同じ。
スレッド周りでどうせ色々やらないといけないなら、最初からフレームワークに丸投げした方が合理的なんだよ。
だから、レイヤーが低い記述が出来るのなら、その手間に見合うだけの価値がないと意味無いんだけど、それがないでしょ、って話。
平行並列周りの研究をしてていじくり回したいだけの人=そのプログラムがその時動けばいいだけの人
にとっては言語が直接サポートしてるのは便利だけど、
製品としてガッツリ動かす為には結局色々全部必要なら、職業プログラマにとってはまるで意味無いよね、という話。
696デフォルトの名無しさん
2021/11/27(土) 21:15:45.01ID:w2+KtZN6
>>691
静的に検証ができるっとことだろうな
697デフォルトの名無しさん
2021/11/27(土) 21:26:58.69ID:LVgG7qhW
>>696
何の検証?デッドロック?
async/awaitはデッドロックはしないぞ。
(永遠にジョブが終わらずに待たされてるように見えるだけ。メインスレッドは動き続けるし、GUIも動く)
698デフォルトの名無しさん
2021/11/27(土) 21:42:40.45ID:bJFd+1Ko
一生懸命にRust坊が荒らしてるww
699デフォルトの名無しさん
2021/11/27(土) 22:37:45.64ID:Cem9Q3+A
いやこれはMSのC#おじさんだね、チャネルの話ならまだ良いがGolangの設計にありえないasync/awaitとフレームワークを交えながら意味不明なことを呟き続ける。
普通にデッドロックするしフレームワークってなんやねん(笑)Web系なんて共有すべきデータが無いんだからシコシコ糞コード書いてろよ?
おまえの競争相手はJavaとかPHPとかRailsだから、そっちに噛みついてこい、C#なのかRustなのかどうでも良いけど頭おかしいことは確か
700デフォルトの名無しさん
2021/11/27(土) 22:51:09.81ID:w2+KtZN6
>>697
そういう意味ではモデルの記述力か。
async/awaitは動作モデルを単純化することで安全性を保証できるようになったけど
食事する哲学者問題みたいなものを記述することができない。
701デフォルトの名無しさん
2021/11/27(土) 22:58:09.67ID:AWnsIzD4
async/awaitみたいな使い方ができないのはヤダヤダってことなんだろうな
702デフォルトの名無しさん
2021/11/27(土) 23:25:17.01ID:Oiaj8YVV
>>688
どの手段も場合毎に安全では無いし、それ故に画一的な標準的手段にはなり得ないから、それだけバリエーションがあるんよ。
Goはそのあたり多様性をネグって「こういう場合はこういう事に気をつけようねぇ!!」という脳筋的解決を図ってるの。
愚直だけどシンプルよ。
703デフォルトの名無しさん
2021/11/27(土) 23:26:48.32ID:Oiaj8YVV
Taskをスレッドプール使ってやりくりするより、はるかに早いんよな…goroutine。
704デフォルトの名無しさん
2021/11/27(土) 23:31:12.50ID:B7MvCGlK
若い人にC#じゃなくてGoにしましょう言われたんかな?可哀想だから代替えとしてこういうのもありますよ
https://hackernoon.com/asyncawait-in-golang-an-introductory-guide-ol1e34sg
https://github.com/Joker666/AsyncGoDemo
https://github.com/StudioSol/async
705デフォルトの名無しさん
2021/11/27(土) 23:40:22.05ID:jawpS72C
>>704
お、こういう情報の提供はありがたい。
706デフォルトの名無しさん
2021/11/28(日) 00:00:58.18ID:s59YsBRT
むしろ定年間際な俺みたいなCで育った奴の方にウケてないのか?
707681
2021/11/28(日) 00:22:11.00ID:Z9Xk/5kf
Go以外の並行処理のことはよくしらんけど、「Go言語による並行処理」を一通り読んでからは、並行処理でバグることへったよ
他の並行処理モデルだともっとうまいこといけるんか?
708デフォルトの名無しさん
2021/11/28(日) 07:47:32.52ID:s59YsBRT
別の言語じゃ主にメモリを共有して排他処理して使ってる
ガバガバだけどミスには寛容なのでわりかし安心ではある
Goでもガバガバにキャパシティ増やしとけばそんなにデッドロックしないと思うんだけど
デフォルトだと一個でもキューされてると次の送信がwaitになる優しくない仕様を問題視してるんじゃないかな?
709デフォルトの名無しさん
2021/11/28(日) 08:51:48.67ID:Abxhe3pm
>>700
> 食事する哲学者問題
これを記述出来たとして、何が嬉しいんだ?

並列は結局のところ、処理能力の増大を目指してる。
シングルスレッドに無限大の処理能力があれば、誰も並列なんて使わない。
現実的にはこれはないから、様々な方策を用いて何とかするわけだ。

そこで、ジョブを他CPUに投げれれば事足りますね、で単純化したのがasync/awaitで、実際確かにこれで済む。
マルチスレッドの諸問題と解決策等、プログラミング界で経験値がたまった結果の、現段階の最適解だ。
これを実装してなくてどうする?と思うが。

スレッド周りの問題をいじくり回したい研究者には向いてるのだろうけど、それだけだよね。
やりたければ他言語でも生スレッドは使えるから、いくらでも出来るけど。
逆にGoroutineではチャネル接続タイプしか記述出来ないから、そこを越えた研究には向かないよ。
とはいえ現段階ではチャネル接続の優位性が覆る事はなさそうだが。

多分な、
・チャネル接続にすればマルチスレッドの諸問題が解決するかも?
という見積もりが外れただけなのだと思うよ。だからGoはメジャーになり損ねた。

なおJSは逆に、
・シングルスレッドに無限大の処理能力があれば、誰も並列なんて使わない。
 →ならシングルスレッドの処理能力を無限大にすればよくね?引っかかってるところ全部I/Oだろ
でI/Oをすべて切り離して非同期にした結果、これが大当たりして、あらゆる所に蔓延ってる。
当時メジャーでなかったクロージャの利便性を知らしめたとか、GUIにはプロトタイプが向いてたとか、他にも色々あるけど、
根本の言語設計が素晴らしかったから結果的にでも大当たりしたのは事実だよ。
710デフォルトの名無しさん
2021/11/28(日) 09:40:53.84ID:CHeWGBnC
>>708
というより、本来チャネルよりも適した抽象化がある場合でもチャネル使わなきゃいけないことが問題じゃないかな
たとえばpromiseで一つの値を返せたらいいだけのケースでチャネル使っちゃうと、
そこに処理は単一の結果の生成をもって完了するというセマンティクスは全く残らないわけよ
で誤って値を2回取り出そうとしたらデッドロックだ
711デフォルトの名無しさん
2021/11/28(日) 09:52:08.42ID:zNq1hAJ3
ていうかgoでもロックとか
サードパーティのロックフリーキューのライブラリは使えんじゃね?
しらんけど
712デフォルトの名無しさん
2021/11/28(日) 10:03:56.17ID:Abxhe3pm
>>710
ちなみにPromiseも俺は不要だと思ってるんだけど、
Promiseが無いと書けない何かってあるか?
C#はPromise見えてたけど採用しなかったし、実際async/awaitで足りてる感じだし。
713デフォルトの名無しさん
2021/11/28(日) 10:08:04.10ID:CHeWGBnC
>>712
async/awaitで使用されるTaskはpromiseの一種だよ
714デフォルトの名無しさん
2021/11/28(日) 10:23:44.01ID:Abxhe3pm
>>713
それはJSerの言う「Promiseが有ったからこそのasyncだ」という言い訳だろ。
Promiseという界面を露出させなくても問題ないと踏んでasync/awaitだけにしたのがC#。
勿論それ以前にC#だと生スレッドも使えるから最悪何とでもなるという保険はあったにしても。

C#erも同種の言い訳、つまりthread→backgroundWorker→Task→asyncと進化したのであって、
これがなかったら無理だった、という事を言うけど、これもやっぱり無理筋で、
2000年時点で「技術的に」asyncが実装出来なかった理由は見あたらない。
結局、思いつけなかっただけだと思うんだよね。

実際、2000年当時のCPUでも今のasync/awaitのコードは動くだろうし、
今現在Task界面も露出する意味無いだろ。
2000年当時にC#がいきなりasync/await実装してデビューしてたら神だったと思うよ。
715デフォルトの名無しさん
2021/11/28(日) 10:37:05.48ID:CHeWGBnC
>>714
async/await自体もpromiseの実装だよ
https://ja.m.wikipedia.org/wiki/Future_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
なおasync/awaitで事足りるpromiseのユースケースにおいては、Goではチャネルなんか使わず普通にgoroutine内で同期処理すればいいので、今の話題とは無関係
716デフォルトの名無しさん
2021/11/28(日) 10:53:27.71ID:Abxhe3pm
>>715
それはPromise中心主義的な考えであって、
実際async/awaitの理解にはPromiseの理解は不要だろ。
「そこで一旦止まって、非同期Jobが終わり次第、次を実行」で済むのだから。

実装でPromise型にするのも一つの手だけど、forkでも実装出来るのだし、(むしろforkの方が簡単)
> async/await自体もpromiseの実装だよ
これは買いかぶりすぎで、async/awaitとPromiseは直接の関係も必然性もないよ。
717デフォルトの名無しさん
2021/11/28(日) 11:07:43.63ID:Abxhe3pm
>>715
そういえば脱線を嫌ってるのか?なら戻しておくと、

Goはgoroutineで並列平行をお気楽に書けるようにしたが、
並列は今のところasync/awaitで決まりなので、目論見は外れた。
平行は…async/awaitではなさそうだし、まあチャネルだろうし、goroutineかも?
718デフォルトの名無しさん
2021/11/28(日) 11:15:38.54ID:Abxhe3pm
>>715
716(脱線側)補足

× > async/await自体もpromiseの実装だよ
○ async/awaitの実装の一つがpromise

async/awaitはただの記法であって、その実装にpromise方式も使える。
つまりasync/awaitの方が上位概念だよ。同一レイヤーではない。
719デフォルトの名無しさん
2021/11/28(日) 11:16:48.98ID:7hiPfTRd
>>714
Taskなしのasync/awaitだけじゃ並列処理できないんじゃないの?
720デフォルトの名無しさん
2021/11/28(日) 11:38:24.51ID:Abxhe3pm
>>719
何で?
Jobを投げ込むのにTask型を使ってるだけで、要は関数のエントリポイントが有ればいいだけだし、実際JSはそうだろ。

> async function asyncCall() {
>
console.log('calling');
>
const result = await resolveAfter2Seconds();

> console.log(result);
>
// expected output: "resolved"

> }
>

asyncCall();
> https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function

async/awaitが保証してるのは、
・async関数は非同期で実行される --- (A)
・awaitでメインスレッドは一旦処理が返る。その後、async関数が終わり次第続きを実行する。
であって、(A)をスレッドプールから実行するようにしたのがC#で、並列されるし、
そうしてないだけ、つまり非同期を同期的に書けるようにしただけなのがJSだろ。
だから逆に、JSでも(A)をWorkerスレッドに振るようにしたら並列するようになるだけだよ。
721デフォルトの名無しさん
2021/11/28(日) 11:56:27.00ID:7hiPfTRd
awaitで待っている側はその間止まっているわけだから並行処理ではあっても並列処理じゃないでしょ。
まぁTask.WaitAllのように複数同時に投げられるようにするならそれでもいいだろうけど。
722デフォルトの名無しさん
2021/11/28(日) 12:21:57.96ID:s59YsBRT
async/await ってPromiseの糖衣構文にしか見えなくて大いに疑問が(知らないだけ?
糖衣構文で言語仕様を膨らませて、こんなに簡潔に書けるようになりました!とかもう子供かと
言語仕様が増えても出来ることが簡潔に書ける以外で変わらないんじゃ劣化してるだろ

簡潔にと言われるたびに信用を下げる
723デフォルトの名無しさん
2021/11/28(日) 12:23:22.96ID:Abxhe3pm
>>721
それは君のawaitの理解が間違ってる。
書いたとおり、awaitで「メインスレッドは一旦処理が返る」から、GUIも反応するんだよ。

メインスレッドはasync/awaitでは止まらない。
awaitでイベントループ(メッセージポンプ)に返されるだけ。
その後asyncが終了したら、awaitの続きから実行される。
この実装の一つとして、Promiseがある。でも動かすだけならforkで実装した方が多分簡単。

メインスレッドは止まってないのだから、asyncジョブはいくらでも「順次」投げられる。
(同時に投げる必要はない)
並列平行したければ好きなだけ投げ込めばいいだけ。
724デフォルトの名無しさん
2021/11/28(日) 12:45:46.64ID:s59YsBRT
>>721
俺の理解では
awaitは非同期関数でのawait以降のセンテンスをthenメソッドの処理としてasyncを実行する
thenのネストを平らにして、単に簡略に書けるだけの糖衣構文
725デフォルトの名無しさん
2021/11/28(日) 12:56:29.36ID:s59YsBRT
>>724
まー、理解が怪しいんで間違ってたら指摘してくれ
ともかくawaitじゃメインスレッドは停まらない、もしくはメインスレッドではawaitは呼べない(はずじゃなかったか?)、という程度の理解
726デフォルトの名無しさん
2021/11/28(日) 12:59:08.05ID:Abxhe3pm
>>722
簡単は正義だろ。
無駄に仕様が膨らんでいるのは、紆余曲折しすぎたからだ。

Promiseが便利だとされているのはPromise.all位で、つまりjoinだが、
今のasync/awaitはこれを直接的に解決する手段を提供してない。
だからここが何とかなれば、async/await以外は廃止方向だと思うぜ。今のままなら。

JSの場合はasync/awaitが見えてたのにPromise導入に踏み切った。
俺はあれは判断を間違えてると思うよ。
JSは仕様を廃止出来ないのだから、ムダ仕様を入れる度にオワコン化していくだけ。

逆に、バージョン管理してて仕様を廃止出来るC#は、実験場にも出来るし、今そうなってる感はあるけど、
本来ならもっと軽量級のGoやRubyで色々やるべきだったよね。
Goも登場時の2009にasync/await持ってればもっとメジャーになってたと思うよ。
goroutineも無いよりはましだけど、その程度でしかないから今こうなわけでさ。
727デフォルトの名無しさん
2021/11/28(日) 12:59:20.84ID:7hiPfTRd
>>723
イベントループの存在が前提なのかな。
async/awaitではawaitで待っているTaskが内部でまたawait待ちになった時に
その制御を取得する手段がないから、そのイベントループ自体はasync/awaitとは
異なる機構で実現されてるってことかね。
728デフォルトの名無しさん
2021/11/28(日) 13:14:08.57ID:xYHgZ8WY
>>724
>>725
idミスってるぞ
729デフォルトの名無しさん
2021/11/28(日) 13:18:18.69ID:Abxhe3pm
>>727
そうだね。少なくともC#もJSもそう。ランタイムがある前提。

要は、asyncジョブが終わった時にメインスレッドをたたき起こす仕組みが必要なだけ。
GUIの場合はメインスレッドはイベントループを回ってるから、そこにイベントとして与えるのが一番簡単だし、そうしてるはず。
コンソールアプリだとイベントループはないので、ランタイム側にメインスレッドをたたき起こす仕組みを付加しないといけない。
けど、goでもこれはやれば出来るだけの話だよね。
730デフォルトの名無しさん
2021/11/28(日) 13:26:20.41ID:3qnAFeGl
>>716
違うよ。
全然別の部分からresolveされるPromiseをawaitするっていう、コールバック関数をasync/awaitに変換する事ができたりする。
可換なんよ。
731デフォルトの名無しさん
2021/11/28(日) 13:28:24.24ID:Z9Xk/5kf
async/awaitが使われていると、コードのいろんな箇所がどんどんノンブロッキングになっていく傾向がある気がしていて、
多くの人にとってかなり使い心地が良いんだろうな、と思ってる

俺はチャネルとgoroutine好きだけど、よく考えるとみんなうまく使えてないんだよなあ・・・
732デフォルトの名無しさん
2021/11/28(日) 13:32:08.20ID:p4O5g5oI
> 俺はチャネルとgoroutine好きだけど、よく考えるとみんなうまく使えてないんだよなあ・・・

太田道灌
733デフォルトの名無しさん
2021/11/28(日) 13:35:20.14ID:Abxhe3pm
>>730
出来るのは分かるが、使い道がないんだよ。

俺もPromiseは要は予約を積んでるだけなので無限に動的に積んで色々出来るか?と思った事はあった。
async/awaitはその点ハードコードだからそのルーチンしか処理しないし、狭い範囲で確定的だ。
ただな、Promiseに動的にいろんな場所からPromiseを積み重ねないといけないような状況はないんだ。
単にasync/awaitでまっすぐ書くだけで十分なんだよ。
734デフォルトの名無しさん
2021/11/28(日) 13:37:04.91ID:xYHgZ8WY
ダメだ完全に発狂しとる
735デフォルトの名無しさん
2021/11/28(日) 13:39:44.17ID:Abxhe3pm
>>731
> 俺はチャネルとgoroutine好きだけど、よく考えるとみんなうまく使えてないんだよなあ・・・
ならお前が上手く使ってる例を布教すればいいだけ。
それが凄く有用で、現行のasync/awaitやPromiseでは実現出来ないものであれば、
Goスゲーって事になるだけ。

JSも2005にXHRが再発見されるまではオモチャ扱いだったし、ワンチャンはあるぞ。
736デフォルトの名無しさん
2021/11/28(日) 14:03:02.10ID:cigmxKA5
>>733
めちゃくちゃ使うよ。

既にメモ化されたデータがあればそれを使う、そこに無ければ動的にイベントハンドラー仕掛けておいて、一定時間内にそのイベントが発火したならそのイベントの引数を返すが、発火しなければrejectする、みたいな。

async/awaitしか使わない、CPUをきちんと解放しろ、と言う話なら、Goならランタイムが自動的にやるので気にせず同期型のように書いて良いぞ。
737デフォルトの名無しさん
2021/11/28(日) 14:08:56.82ID:Abxhe3pm
>>736
よく分からんからコードで頼む。
君のコードでなくてもいいし、誰かのGitHubでもいいので。

要はその、Promiseでは簡単に出来るが、async/awaitでは無理(または複雑になる)、っていうコードを。
738デフォルトの名無しさん
2021/11/28(日) 14:10:43.62ID:Z9Xk/5kf
>>735
おれの知識はほぼほぼ「Go言語による並行処理」だから、これを読め、で終わってしまう・・・
739デフォルトの名無しさん
2021/11/28(日) 14:37:47.26ID:VtXew58l
>>737
この説明でわからなければ、どーせメリットもわかんないだろうから「めんどくさいコード書くな」で終わるでしょw
実際に使ってる自分のリポジトリ晒すのもアホだし、Zennの記事はっとくわ。

https://zenn.dev/uzimaru0000/scraps/b4445cfed8f42f
740デフォルトの名無しさん
2021/11/28(日) 14:39:55.58ID:VtXew58l
こんなんも便利よね。
https://qiita.com/jkr_2255/items/628f0507456eb841497c
741デフォルトの名無しさん
2021/11/28(日) 14:44:16.89ID:cigmxKA5
async/await(だけ)では面倒で、Promiseと可換だからこそ便利だ、と言ってるんよ。
C#でも皆に臨まれてTask Likeな自作クラスが作れるようになったわけだが、いかんせん大袈裟な作りがいる。
742デフォルトの名無しさん
2021/11/28(日) 18:42:46.20ID:Abxhe3pm
>>739-741
うん、分からんね。ただ君の説
> Promiseと可換だからこそ便利だ
についてはC#はそうなってないからじきに結果は出るだろう。
とはいえヘルスバーグは知っててPromiseは不要だと判断したのだし、俺もそう思えるのだけど。
(ヘルスバーグについてはインタビューがあったはずだがググっても出てこない)


一応各URL内容に対し回答しておくと、
> await click().then(click).then(click)
については、
await click();
await click();
await click();
で、すさまじく馬鹿っぽい事以外の問題点はない。

> 遅れてのセット…Promise#thenはresolve前でもresolve後でも問題なく動く
についてはまあそうなんだけど、これはどちらかというとonload系イベントの問題で、
この方法でも根っこの部分、つまり最初のPromiseを設定する時点で既に onload 済みなら発行されない問題が解決出来ておらず、
結局ユーザー側が onload 済みかチェックする、または絶対に onload 未発行の時点で実行する必要がある。
だから onload 系のイベントが最初から全部 Promise だったら綺麗に解決してたのだろうけど、実際そうじゃないので言うほど利益がない。
Promiseが残るか自前でonload発行をチェックしたフラグが残るか程度だ。

> 複数の条件…Promise.allで取れる
これはその通りなのだけど、馬鹿っぽくてよければ同様に await 縦積み、
await sumefuncA();
await sumefuncB();
await sumefuncC();
で行ける。(C#はこれでいけるはず。JSはもしかしたら駄目かも)
743デフォルトの名無しさん
2021/11/28(日) 19:04:46.48ID:Abxhe3pm
742最後補足&訂正
JSの場合も縦積みは出来るが書き方が違うようだ。
(というかC#も間違えていたので書き直すと)

await someAsyncFuncA;
await someAsyncFuncB;
await someAsyncFuncC;

となる。以下は https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function より。(720で貼り損なったので)
async function concurrentStart() {
console.log('==CONCURRENT START with await==');
const slow = resolveAfter2Seconds() // ただちにタイマーを起動
const fast = resolveAfter1Second() // ただちにタイマーを起動

// 1. これは即時実行される
console.log(await slow) // 2. これは 1. の 2 秒後に実行される
console.log(await fast) // 3. fast はすでに解決しているので、これは 1. の 2 秒後 (2.の直後) に実行される
}
744デフォルトの名無しさん
2021/11/28(日) 20:06:47.00ID:s59YsBRT
推してる癖に間違えるくらい千差万別なのね
745デフォルトの名無しさん
2021/11/28(日) 20:25:18.89ID:Abxhe3pm
>>744
間違えたのは俺の問題であって、C#もJSもawaitの書き方は同じ。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/async_function
https://docs.microsoft.com/ja-jp/dotnet/csharp/programming-guide/concepts/async/task-asynchronous-programming-model
746デフォルトの名無しさん
2021/11/28(日) 20:31:19.41ID:AhuL0Pkx
>>710
一回だけ使うはずなのを二回以上使うと不具合があるのが問題とか言い出したら
副作用のある関数の呼び出しも問題ってことになるよな
「単一の結果の生成をもって完了するというセマンティクス」というのもないし
747デフォルトの名無しさん
2021/11/28(日) 20:36:54.41ID:Xc/smr1I
まあゴル同士で複雑なハンドシェイク的な値のやり取りはしない方が良いね
少なくとも俺はバッドパーツ認定してる
結果をkey-value storeに吐くとかそういう使い方しかしてない
748デフォルトの名無しさん
2021/11/28(日) 22:35:18.85ID:igoyS+tp
>>746
そうだね
副作用があって2回呼び出したら死ぬ関数より、冪等な関数の方が望ましいよね
だから単一の結果を生成するだけの処理にchannelを使うのはクソだよね
749デフォルトの名無しさん
2021/11/28(日) 23:26:53.57ID:m82RP4Nz
>>748
副作用のある関数もクソということになるだろうって話だがな
呼び出すべきじゃないところで誤って呼び出すと不具合があるから問題だと言い出すんだから
750デフォルトの名無しさん
2021/11/29(月) 00:36:52.64ID:M92LX90q
C#おじさんの大暴れ回
751デフォルトの名無しさん
2021/11/29(月) 02:15:08.24ID:JPr9HHY7
>>742
C#もそうなりましたが…。
https://qiita.com/inasync/items/6417933e258b53b5bbd3

こっちでは似たような事やってるね。
https://www.buildinsider.net/column/iwanaga-nobuyuki/009

あんまり知らんだけでは?
752デフォルトの名無しさん
2021/11/29(月) 09:11:23.82ID:kiCwAGEX
>>749
それはその通りで、一般論として、副作用のない関数より副作用のある関数のほうが相対的にはクソだろ?
本来副作用の必要がない場合でも常に副作用のある関数として実装しなければならないとしたら、本来例えば半分程度で済むはずが全てクソ関数になっちゃうじゃん
それがchannel
753デフォルトの名無しさん
2021/11/29(月) 11:31:15.42ID:Ulxk0pae
まあGoの設計思想的としてはそもそも非同期関数を作っちゃいけないんだろうな
常に非同期で使用することが明らかな場合でもchannelを引数に取るような関数をパッケージ外に公開するような設計はすべきじゃなくて、
普通に同期関数にしといて使う側で必要に応じてgoroutine使えということなんだろう
754デフォルトの名無しさん
2021/11/29(月) 12:15:00.68ID:ofvG7nI/
え?goroutineにチャネル渡さなけりゃクロージャで渡すしかないから共通関数にできんし
ちょっと何を言ってるのか分かりませんね
755デフォルトの名無しさん
2021/11/29(月) 12:15:45.71ID:ofvG7nI/
外部関数
756デフォルトの名無しさん
2021/11/29(月) 12:23:12.94ID:ofvG7nI/
ツアーでもチャネル渡すコーディングしてるよ
https://go-tour-jp.appspot.com/concurrency/2
757デフォルトの名無しさん
2021/11/29(月) 12:35:27.53ID:O0SZji1w
tourはあくまで機能の紹介だろ。
hello worldを実務で書くか?

channelの何が気に食わんの?デッドロックするところ?
別に後続の関数投げても良いんだぞ。
758デフォルトの名無しさん
2021/11/29(月) 12:39:01.25ID:g6qk7DwE
>>754
>>753 が言ってるのはライブラリの公開関数の話で、753のコメント通りでしょ
goroutine使えば同期関数を簡単に非同期にできるから、ライブラリの高階関数は同期にせよ、っていう思想っぽい

標準ライブラリにもチャネルを受け渡しするやつはあるのかもしれないけど、少なくとも俺はしらない
759デフォルトの名無しさん
2021/11/29(月) 12:46:47.06ID:ofvG7nI/
標準のライブラリは低レベル機能しか持たせてないじゃん
だからといって、非同期に使うことは好ましくないという設計思想だとかかなり無理があるだろ
ツアーは基本的な使い方のサンプルなんだから、基本的に非同期で動かす関数を書くにはチャネルを渡しましょう!と大々的に宣言してる証拠じゃないのか?
760デフォルトの名無しさん
2021/11/29(月) 13:18:56.71ID:rw4mU1bL
まだやってた
761デフォルトの名無しさん
2021/11/29(月) 13:51:14.56ID:DbScqZpC
好きだよね〜
762デフォルトの名無しさん
2021/11/29(月) 14:19:10.41ID:O40DgaQc
>>752
>本来副作用の必要がない場合でも常に副作用のある関数として実装しなければならないとしたら

そんなのがどこから出てきたんだか。
呼び出すべきじゃないところで誤って呼び出すと不具合があるからクソだと言い出すなら
入出力とか、副作用を持つ関数もクソということになるって話だがな
戻り値を変数に入れて置けば良いだけなのにそれを出来ずに
2回呼び出すと不具合が起こると文句を言ってるんだよな
763デフォルトの名無しさん
2021/11/29(月) 16:44:46.78ID:M92LX90q
チャネルが理解できないC#おじさんがID変えて自己弁護しながら暴れてるだけ
>>752
「副作用のない関数より副作用のある関数のほうが相対的にはクソ」
一般的には手続き型言語であればサイドエフェクトがある関数が普通で、純関数言語のようなほとんど副作用の
無い関数などはI/O処理などでビックロックなどで誤魔化してるに過ぎない。
>>753
そもそもGoは全部が非同期・並列だから逆。メインでさえgoroutineの1つで、デフォルトでGOMAXPROCS
「channelを引数に取るような関数をパッケージ外に公開するような設計はすべきじゃなく」これも逆です。
structには本来はchannelやcontextを含めるべきではなく、引数に取ることが推奨されている
>>759
「標準のライブラリは低レベル機能しか持たせてない」最近の言語は、標準のライブラリという重大なクソを
薄く小さくするのが流行り、なぜなら稚拙な標準のライブラリをリリースしてしまい、後からもっと効率的で
理論に裏付けされたライブラリが出てくる。そしてクソな標準が互換性のために直せない。薄くて小さい
ライブラリは速く、メンテナンスも容易で、依存性も少ない。
逆に、標準のライブラリに重厚長大を求めるのは何かが間違ってる。チャネルを渡すことを使う事を禁忌したい
気持ちが奥底にあるから「証拠」なんて言葉が出てくる。Tourなどのパイプライン処理とかを見ればチャネルを
受け渡すことの効率性と高い非依存が良くわかる。aync系の言語でやろうとしたらミューテックスでロックして
処理の終わりでwaitしてなど極めて並列度が低く、依存性が高く、ゴミのような自己満足が広がる
だから遅くて成果物はデカい
764デフォルトの名無しさん
2021/11/29(月) 19:32:28.88ID:TPDpg4yk
まぁまぁ、顔真っ赤にして投稿するのやめよ?落ち着こうな
765デフォルトの名無しさん
2021/11/29(月) 20:00:58.25ID:rw4mU1bL
昨日からなにが言いたいのかさっぱり
自分でも頭おかしくなってるんだろうか
766デフォルトの名無しさん
2021/12/20(月) 18:58:52.11ID:S0D0uK3y
Go 1.18 Beta 1 is available, with generics, 14 December 2021
767デフォルトの名無しさん
2022/01/07(金) 00:14:05.77ID:l4f7h5d/
ちょっとかじってみたニワカの感想なんだけど
Go言語ってBetter Cって感じだな。
768デフォルトの名無しさん
2022/01/07(金) 00:38:05.83ID:j/jugqL+
>>763
チャネルを渡すことに積極的な>>759に、真っ赤になってチャネル渡すコーディングを語ってて草
769デフォルトの名無しさん
2022/02/06(日) 12:21:06.60ID:SQRLIZAc
GoのジェネリックがGo 1.18 Beta 1でデビュー
https://www.infoq.com/jp/news/2022/01/go-generics-beta/

func SumIntsOrFloats[K comparable, V int64 | float64](m map[K]V) V
type Number interface { int64 | float64 }
770デフォルトの名無しさん
2022/02/07(月) 09:14:37.90ID:YCtDYJO4
お前らが煩いから…
771デフォルトの名無しさん
2022/02/19(土) 10:13:03.12ID:AG6SdX6W
最近goよりrustが気になってきた
コンパイラ型の早いモダンな言語ということで安易にgoやってたけど
rustにすべきだったか
772デフォルトの名無しさん
2022/02/19(土) 11:35:19.56ID:R5yjbcGL
rustは学習時間がかかる
773デフォルトの名無しさん
2022/02/19(土) 13:51:37.16ID:u5oa6W2x
利用範囲というか得意範囲が違うから興味はない
まして癖が強いんで覚えなきゃならんことが多すぎる
出始めのJavaより癖が強くないかあれは
今は皆が馴染んだけどJavaのIO周りとか、解らねぇ!という声が多かった記憶
だから少なくとも10年は待つのが正解
774デフォルトの名無しさん
2022/02/19(土) 15:23:37.32ID:AlOKsuc0
>>771
用途が違うんだから、両方やればよろし
775デフォルトの名無しさん
2022/02/19(土) 16:39:42.26ID:lVeS0ElI
Goは向いている適用範囲が狭い
他の言語も併用せざるをえない
776デフォルトの名無しさん
2022/02/19(土) 19:00:07.51ID:ZkbC0IWU
それでいいんだよ
777デフォルトの名無しさん
2022/02/19(土) 23:50:48.59ID:xGD28DxW
Go 1.18 Release Candidate 1 is released 2022/02/18 2:04:17 (昨日)
https://groups.google.com/g/golang-announce/c/QHL1fTc352o/m/5sE6moURBwAJ
778デフォルトの名無しさん
2022/02/20(日) 11:21:21.17ID:VbAVfRtD
> 早いモダンな言語
速くもないしモダンでもない
779デフォルトの名無しさん
2022/02/20(日) 12:17:41.07ID:1fyiha6j
1.18 finalは3月に持ち越しか
780デフォルトの名無しさん
2022/02/20(日) 12:35:50.50ID:coxlbRTF
単体のマシンで並列処理をひたすらに行うという涙ぐましい用途特化よね
無駄金がありゃ分散化してロードバランサ使ってしのぐと思う
781デフォルトの名無しさん
2022/02/20(日) 13:24:25.85ID:QnKhevyf
Goは並列処理が書きやすい簡単な静的型付け言語って感じよな
Goの文法はモダンとはとても言えないけど、わりと早いビルド、gitとの連携、fmt、とかもろもろのエコシステムを総じて言えばモダンと呼べそうではある

逆に、例えばD言語は文法が良いのにエコシステムがウンコだったから人気出なかったんだと思う
782デフォルトの名無しさん
2022/02/20(日) 15:45:27.00ID:coxlbRTF
分散しないでも程よく性能が出るって点から、ネットワーク関係の組み込み機器(ルータとか)に向いてるような気もする(気がするだけ)んだけど、特に席巻してるとも聞かないから使われてないのかな
783デフォルトの名無しさん
2022/02/20(日) 15:47:35.30ID:coxlbRTF
busybox的な作りならメモリも圧迫しないだろという考え
784デフォルトの名無しさん
2022/02/20(日) 18:28:36.22ID:VbAVfRtD
>>782
ルータの中身なんてlinuxでCだろ
組み込みはCPUパワーと消費電力に厳しいのでC以外に現実的に解がない
逆に言えば、C以外で組んだ時には価格と消費電力でその商品に訴求力が無くなる
Cでは実現不可能な程のファームウェアアップデートの頻度が必要な商品もないだろ
785デフォルトの名無しさん
2022/02/20(日) 18:35:18.72ID:Y1MJvTk4
Google的には組み込み向けはFlutter/Dart
786デフォルトの名無しさん
2022/02/20(日) 18:37:32.10ID:VbAVfRtD
>>781
goroutineが正解だと間違えた失敗言語だろ
このチャレンジ自体は良い事だが、正解はasyncだった

複雑になりすぎたC++を嫌い、またWeb系での最速を求めた連中はRustに行った
型を知らなかったWeb系の馬鹿共には丁度良かったが、そいつらはTSに行った
ast木がデフォで出るのは面白いが、あれはプログラマ的にはレベルが低すぎて使えない(自前で正規表現でやるよりはまし程度でしかない)
ならいっそのことあれこれやりまくる実験言語にしてもいいとは思うが、仕様の追加は他言語と比べても遅い

現在新規でGoをやる意味はないから、あとは廃れるだけだろ
787デフォルトの名無しさん
2022/02/20(日) 20:11:46.12ID:uXMwiVcI
web系のバックエンドである程度速度求める層には使われてくんじゃないかな。楽だもん。
個人的にはnull安全じゃない点でもういいやって感じだけど。
788デフォルトの名無しさん
2022/02/20(日) 21:46:42.94ID:VbAVfRtD
>>787
> ある程度速度求める層
これは基本的にない。
速度が問題になると分かっていて、チームがRustを使える場合、100%Rustを選択する。
Rustが使えない場合、今現在の第一選択肢はTSだろ。
そこそこ速いし、最悪はJSエンジニアを流用可能だし、全く新規に教育するにしてもフロントエンドでも使えるし。
Web系の現場でGoをわざわざ教育する意味はない。

(飽和した市場においては)商品は尖ってないといけないとよく言われるが、Goは今現在尖ってないんだよ。
速度が欲しくてガッツリ組みたければC#でもいいし、実際にASP.NETのシェアは7.9%でPHPに次ぐ第2位だ。(なおGoは0.0007%、Rustはそれ以下)
https://w3techs.com/technologies/overview/programming_language
TSよりはGoが速いのも事実ではあるが、
https://atmarkit.itmedia.co.jp/ait/articles/1909/13/news133.html
googleがrubyを切った時のようにチーム内で言語を統一するなら、今ならJSかTSになる。Goはあり得ない。
今現在もシェアが低い=使える奴が少ないのだから、このままだと数多のマイナー言語と同様にポシャって終わり。

バックエンドで速度を求める際、最速はRustだけど、これが嫌ならC#で、ここで終わってしまう。
C#の駄目な点は仕様が重量級で勉強するのが大変な事位で、速度も安全性も生産性もGo以上だから。
Goは、速度がある程度必要だが最速である必要はなく、RustやC#は絶対に勉強したくない層向けになるが、これは現実的に無い。
789デフォルトの名無しさん
2022/02/20(日) 22:04:59.75ID:uXMwiVcI
>>788
なるほどね。
790デフォルトの名無しさん
2022/02/20(日) 22:33:50.88ID:uSEnVnLU
>>788
JS/TSの人材がNode/Denoでサーバーサイドもいけるからね
そしてそれでは性能面リソース面で満足できないならRustが記述しやすくていい
791デフォルトの名無しさん
2022/02/20(日) 22:37:24.33ID:x/Ldx69r
Rustが使えない場合で、かつ速度が必要な場合にTS使う訳無いだろ。
C#はわかるが。
マルチコアに弱すぎるわ。
C#ではなくGo選ぶケースってのはGoならではのメリットがあるシーンが多い。
792デフォルトの名無しさん
2022/02/20(日) 23:21:45.49ID:VbAVfRtD
>>791
> Goならではのメリット
だからそれは何?って話だろ。

C#で駄目でGoってのは学習コストくらいだが、学習コストが問題ならWeb系ならTS/JSで決まりだよ。
Goはgoroutineかgo generateが大当たりすれば良かったが、そうでない以上、C#に勝てる仕様がない。
現在シェアでボロ負けしてて光る仕様もなければ、このまま沈没以外にない。

Rustを考えれば分かりやすいが、シェアでボロ負けしててもC#に速度で勝てるし、
安全性も一応最高を目指してるから、選ぶ理由はあるだろ。
GoはRustが出てきた時に身の振り方を考えなければならなかったんだよ。
793デフォルトの名無しさん
2022/02/20(日) 23:56:31.79ID:KcoG54wC
>>792
そのGoroutineだよ。観測範囲狭いのでは…?
C#のasync awaitとスレッドプールは詰まる。
794デフォルトの名無しさん
2022/02/21(月) 00:13:42.23ID:lBTJyZA6
>>793
asyncな関数を呼べばスケジューラに戻るわけだから
長時間ループで計算のみを続けることでもない限り詰まることはないでしょ
795デフォルトの名無しさん
2022/02/21(月) 00:16:41.00ID:GbKjQqyn
>>793
詰まるって何が?
これ?なら仕様を知らないだけだね
https://oita.oika.me/2016/02/18/task-and-threadpool/

まあいずれにしても、C#で問題があれば、速攻対策されるよ
796デフォルトの名無しさん
2022/02/21(月) 00:26:24.14ID:GbKjQqyn
あとこんなんも出てきた
https://www.rox-note.tech/?p=30

まあスレッドプールはそういう設計なのだから、デフォで問題ない使い方をしないのなら自前で設定してやらないと駄目だね。
でもスレッドプールはプールであって、goroutineみたいにスレッド占有(スタック保持)ではないので、
動いてないスレッドはプールに返されて結果的にCPUは最速で動くはずだけど。
797デフォルトの名無しさん
2022/02/21(月) 01:57:33.27ID:889Qm57n
長時間、膨大なタスクを動かしたいんだよ。
798デフォルトの名無しさん
2022/02/21(月) 01:57:59.42ID:889Qm57n
Go使う前はErlang使ってた案件。
799デフォルトの名無しさん
2022/02/21(月) 02:23:44.32ID:YbXysJZO
C#ってサーバというかバックエンドで使えるのか
知らなかった
800デフォルトの名無しさん
2022/02/21(月) 03:00:09.00ID:lBTJyZA6
>>797
膨大なタスクでも途中で何らか入出力すればスケジューラに戻るからタスクが切り替わる
入出力ゼロならばそれは延々と算術計算するだけなのだから別スレッド立ち上げればよい
801デフォルトの名無しさん
2022/02/21(月) 03:32:12.85ID:zbwL0D6l
goroutineが理解できないC#おじさんがのC#のasyncで騒いでるだけ
こいつは数多くの言語が採用してるchannelの原理も理解できない。
802デフォルトの名無しさん
2022/02/21(月) 08:43:31.09ID:889Qm57n
>>800
スレッドだと必要な数が多すぎて回らない。
シミュレーションの類やってる。

あとバッチで集計処理していくとかも作ってるけど、これも一億行百万ファイルとかが対象。
803デフォルトの名無しさん
2022/02/21(月) 08:44:21.18ID:889Qm57n
>>801
なるほど。説明しても理解できてないから無駄だし、
理解する気が無いのか。
804デフォルトの名無しさん
2022/02/21(月) 17:01:09.43ID:GbKjQqyn
>>802
まず、論理CPU数よりも多いスレッドを立ち上げても余計に遅くなる。
だから長時間膨大なタスクの結果を最速で得るためには、
論理CPU数と同じスレッド数で順に処理する事であり、
当たり前だがC#も含めてスレッドプールはこういう設計になる。

膨大なジョブを論理CPU数よりも多いgoroutineでカバーするのは、一般論としては組み方が悪い。
それで速くなる事はないから。
一般的にはその場合はスレッドではなくただのデータオブジェクトとし、論理CPU数と同じスレッド数で回す。

例えば有限要素法のシミュレーションを行う場合、当然データは100万個とかになるが、
CPUが10個なら10分割して、内部は完全に独立して回し、
他CPU担当と隣接してるノードは致し方ないので通信し、CPU10個で協調させながら回す。
これをgoroutine100万個として組むのがGoの思想なのかもしれないが、速くはならないね。
ただし、プログラムは簡単にはなる。

Erlangはだいぶ思想が違う。
あれはスケールアウト時のパフォーマンス低下を回避するために疎結合にしたもので、
実際スケールアウトしてもほぼ性能低下がないのでひたすら物理で殴れるらしいが、
それならErlangでいいよね、でしかない。

尖るってのは、「○○でも出来る」ではなくて、「○○じゃないと出来ない」の事。
Goにはこれがない。
なおC#、.NET4.0の64bit環境では32767個のスレッドが上限らしい。
https://stackoverflow.com/questions/145312/maximum-number-of-threads-in-a-net-app
一般的には、こんなにスレッドが必要な時点で組み方がおかしい、となる。(上記の通り)


> 一億行百万ファイル
普通は10CPUなら10分割して1,000万行10万ファイル*10ジョブにして投入、
レイテンシがバラつくようなら例えばさらに10分割で100万行1万ファイル*100ジョブにする。
これを1,000,000 goroutineで回すメリットは何?
805デフォルトの名無しさん
2022/02/21(月) 17:23:04.30ID:889Qm57n
>>804
その考え方が古いでしょ。goroutineは軽量スレッドで実質async await+スレッドプールだよ。

https://zenn.dev/hsaki/books/golang-concurrency/viewer/gointernal

>>804
チャンネルでfan in/fan outしてる。
806デフォルトの名無しさん
2022/02/21(月) 17:48:23.98ID:LC1rF3os
>>801
それは例として厳しいかな
C#については全く知らないが
例えばRustではchannelの送受信もasync環境ではasyncとなる
つまりgoroutineのようにchannel送受信だけを永遠にする長時間タスクがあってもタスクは切り替わる
だからそういう例でも大丈夫
おそらくC#でも同じ状況ではないかと推測
807デフォルトの名無しさん
2022/02/21(月) 18:21:27.64ID:YbXysJZO
goにおけるチャンネルって、概念的には別スレッドのI/Oにデータ渡して発火させる感じだよね
最大スレッド数は開いているチャンネル数以上になることはないし、
メインスレッドには関係ない

async/awaitで詰まるってのはawaitが文字通りメインスレッドで待つからって話ではなく?
808デフォルトの名無しさん
2022/02/21(月) 18:35:22.44ID:VpybQnqn
goroutineも実質スレッドプールなのは事実だね
async/awaitはawaitの区切りでしか中断できないのに対してgoroutineはGoのユーザーコードならどこでも中断できるので、どちらがより詰まりにくいかといえばGoかもしれない
とはいえGoもシステムコールの中断はできないから、現実には差は出ないだろうね
809デフォルトの名無しさん
2022/02/21(月) 18:56:08.62ID:shT+MRih
>>804
Erlangは「スケールアウト時のパフォーマンス低下を回避するために疎結合にしたもの」じゃないよ。プロセスが落ちることを前提にしたもので
パフォーマンスなんて考えてないというのは言い過ぎだが、フォールトトレラントでプロセスが落ちるから沢山のプロセスが起動できるようにした
ものであり、スケールアウトによる性能の保持はその結果に過ぎない。
「一億行・百万ファイル」このように初めから総数が分かっていれば分割できますが、総数が分かっていない場合には、「一行・10億ファイル」
かもしれない。この時に「絶え間なく処理結果が欲しい」ような場合だとスレッドを張り付けた処理は、分割された連続処理群が終わるまで
待たねばなりません。GoやErlangだとこのような処理の次に続く処理があった場合、パイプライン処理として処理します。
810デフォルトの名無しさん
2022/02/21(月) 19:20:21.68ID:GbKjQqyn
>>805
> その考え方が古いでしょ
これがGo界隈のキモさだよね。自分らが先進的だと勘違いしてる。
なら、何故その先進的な言語がここまで無視されてるのか考えるべきだよ。
シェアで見たら、誰も使ってない言語だよGoなんてさ。
なおRustはポリコレを持ち込んだ馬鹿がいて同様にウザがられているが。


C#のスレッドは論理CPU数を越える起動用には最適化されてないはず。
だからそういう使い方をするためにはスタックサイズをいじらないといけない。
出来たはずだがやり方は知らん。
ただしそれやっても速くはならないよ。(Goもこの点は同じ)

> goroutineは軽量スレッド
これも嘘で、今探しても出てこないが、ラズパイ環境でゴミだったからNodeに戻ったというブログが有ったはず。
512MBのRAMで4kB/goroutineでは十分な量のgoroutineを起動できず、(なお今は2KB/goroutineも選べるんだっけ?)
Nodeでシングルスレッドで処理した方が断然速かったというもの。
Go信者はgoroutineのコストがゼロだと仮定しているが、まったくそうじゃない。
メモリも食うし、空間が別なんだからキャッシュの張替えも発生する。
(Cが地味に速いのはキャッシュにひたすらヒットするから、というのもある)

> チャンネルでfan in/fan outしてる。
意味分からんが、ハードウェアのゲートみたいに各チャネルが複数の入力/出力を持っててネットワークが割と複雑だって事か?
ただこの場合はイベントドリブンで組むことになってて、一応それが一番速いはず。
ハードウェアのゲートを1対1でgoroutineにすることはプログラムとしては記述出来るが、
1億ゲートとかだから4kB/goroutineではオーバースペック過ぎて無駄だ。
ゲートシミュレーションなら精々64Byte/goroutineとかじゃないと駄目だ。だけどこれは無理だろ。
(4kBに縛られてるのはCPUのページサイズに因っているから)
811デフォルトの名無しさん
2022/02/21(月) 19:28:42.96ID:shT+MRih
>>804
それに「Goにはこれがない。 なおC#、.NET4.0の64bit環境では32767個のスレッドが上限らしい。」という中途半端な知識表現に
ついても一般的なOSではスレッドの上限は16bitの域を出ないで少ないのは当たり前で、それはスレッドがあまりにもOSにとっては
重すぎるから。(メモリやコンテキストスイッチなど払う代償が大きい)
Erlangはだいぶ思想が違うのはその通りだけど、GoはErlangほどではないが、小さいコストで多数の軽量スレッドを用意したもので
あり、これが何のために「Erlangで良いよね?」にならなかったのかといえば、背景にあるのは多数コアを搭載した近年のハードウェアを
生かし切れていない言語が溢れていたから
じゃあGoの役割はなんなのと言えば、Erlangはプロセスがネットワーク分散を簡単にできるが(その分遅め)、Goはコンパクトな
1つのマシンの中で上記のようなパイプライン処理をコンパクトに「なるべく早く」出来るよう考えられた。
812デフォルトの名無しさん
2022/02/21(月) 20:10:22.24ID:shT+MRih
>>810
あんたのほうがキモイけど、C#の先進性なんて何があるの?俺スゲーのシンタックスシュガーだけでしょ?C#がスタックサイズなんて
弄るのはJavaと同じで基本がClassであり、さらには意味不明な意識高いバカが再帰処理などでメモリーが足りなくなるからです。

シングルスレッド言語とマルチスレッドでメモリ量を比べて起動できないなんて意味ありますか?当然作り方次第でご自慢のC#も
同じになるはずですし、RustやCでも同じことが起こりえますが?逆に言えばGoであってもgoroutine数を少なめにして、スレッドで
アフィニティを設定して使用するCPUをPinningしてやればほぼシングルスレッドと同じ状態を維持できるはずです

「Go信者はgoroutineのコストがゼロだと仮定」これもダウトです、Goを始めたばかりの人だけです。こんなことを言っているのはw

膨大な配列を処理するときにCPUのコア数にきっちり分割して、間にコンテキストスイッチなどを挟まないほうが速いのは当たり前で
鬼の首を取ったように書かなくても多くの人はわかります。だが、Goの開発目的はそうではありません。同様に、Erlangのように
プロセスが落ちる前提で高い耐故障性を前提にするためでもありません。
また今はデフォルトは2kのスタックであり、「4kBに縛られてるのはCPUのページサイズに因っているから」とか、どこの知識なのか逆に
問いたいぐらいです。世の中いろいろなCPUアーキテクチャがありますが?現に多くのCPUは4kですが、s390は2kです

最速を求めるのであればGoもC#でもRustでもなく、ランタイムチェックのないCやアセンブラで書いてなさい。またCが速いのは
「キャッシュにひたすらヒットするから」ではありません。ランタイムチェックが無いからです、近年のマイクロベンチマークを1回でも
見たことありますか?近年のCPUのキャッシュサイズはMB級あるのを知っていますか?
813デフォルトの名無しさん
2022/02/21(月) 20:13:57.83ID:889Qm57n
>>810
お前読んでるか?
814デフォルトの名無しさん
2022/02/21(月) 20:27:03.44ID:/1Q8PAGZ
Goのランタイムのフットプリントはかなりでかいし、GCだけでなくそういうコストも許容できる贅沢な環境で、手抜きをして並列処理を書ける言語だよ

ようするに、RustやCで書くのはめんどいしメモリ食われてもいいけど楽してM:Nスケジューラ使いたい、みたいなときには適してる、っていえる言語ではないかと
非同期シングルスレッドしか使わない、っていうんならいろんな言語が選択肢に入りそう
815デフォルトの名無しさん
2022/02/21(月) 20:29:37.24ID:LC1rF3os
>>812
>「Go信者はgoroutineのコストがゼロだと仮定」これもダウトです

これ確かにGoroutineがコスト高いことを知らない人たちが意外に多い
例えばRustのタスクなんかはGoroutineに比べたら本当にコストゼロ
スタックレスであるし素朴な状態マシンとしてコルーチンとして機能するだけ
だからGoroutineよりリソース的にも軽いし起動も軽いし
巨大なランタイムを必要とするGoと違って非常にシンプル
816デフォルトの名無しさん
2022/02/21(月) 20:46:25.71ID:GbKjQqyn
>>809
いやErlangは電話交換機用に開発された言語で、メタル回線時代だから最初から物理で殴る前提だ。
(収容数が増えたらラックを増やすしかない)
プロセスどうのこうのはOSの話だ。ただしErlangが生まれた80年代はそこまで綺麗に分離してなくて、
ErlangのランタイムがOS扱いだったのだろうけど。
フォールトトレラント性も多分最初から考えられていたのだとは思う。

> 「一行・10億ファイル」
論理CPU数を数万倍越えるジョブがあると分かっているのなら、纏めればいいだけの話。
単に1ジョブ毎に放り込むのではなく、100ジョブ纏めて取ってきてから放り込めばいい。
原理的にはgoroutine*100と同じ速度が出る。
817デフォルトの名無しさん
2022/02/21(月) 20:54:53.07ID:GbKjQqyn
>>811
> 一般的なOSではスレッドの上限は16bitの域を出ないで少ないのは当たり前
そうじゃなくて、そういう風に作ってないだけ。
つまり、現行のOSでは、スレッドはそこまで使わない前提、そういう風には使わない前提だ。

> 小さいコストで多数の軽量スレッドを用意したものであり、
これをどう見るかだが、本来ならそれ用のOSを作らないといけないんだよ。
ただし実際はGoのランタイムでどうにかなる(=ハードウェアサポート無しでいい)から
そういう動きもないのだろうけど。

> Erlangはプロセスがネットワーク分散を簡単にできるが(その分遅め)、
> Goはコンパクトな1つのマシンの中で
これはその通り。Erlangは疎結合にしすぎてて、近年のハードウェア向きではない。
とはいえGoもまた行きすぎだよ。
論理CPU数を遙かに越える数のgoroutineを起動しても、速くはならない。
(ただ、コードは簡単に書けるだろうけど)
818デフォルトの名無しさん
2022/02/21(月) 21:16:05.40ID:GbKjQqyn
>>812
一応言っておくが、俺はC#書いてないぞ。

> C#の先進性なんて何があるの?
いや色々ありまくりだろ。asyncもlinqもそれ以外も色々有ったと思うけど。
今現在メジャー言語で一番先頭走ってるのはC#だろ。
それぞれの機能は他マイナー言語で既にあった物を取り込んだだけなのかもしれんけど。

> C#がスタックサイズなんて弄る
基本いじらないけどね。
デフォで2Mのはずで、少々アホな再帰をやったところで埋まらない。

> シングルスレッド言語とマルチスレッドでメモリ量を比べて起動できないなんて意味ありますか?
これは書き方が悪かったか?
要はラズパイみたいに貧弱なハードウェアだとGoは機能せず、Nodeの方が速いというだけの話。
goroutineで楽して速いってのは贅沢なハードウェアありきの話。
なおJSはCPUをひたすら突っ走らせる構造にすることをプログラマに強制するから、
その分CPUは無駄なく動く(スタックとかが小さくて済む)ので
同一ハードウェアだと他言語でシングルスレッドにするよりは原理的に速いけど。
(実際は動的言語の分遅いが、TSコンパイラとかが出てくれば面白くなるとは思う)

> s390は2kです
ほう、メインフレームのはそうなんだ。初めて知ったよ。
ただ知ってるつもりなら、現行で普通に使われてるCPU、例えばx86なりARM等で4kじゃない奴を挙げてみろよ。
ないと思うぜ。

> 「キャッシュにひたすらヒットするから」ではありません。ランタイムチェックが無いからです
違うぞ。ランタイムチェックがないのも要因の一つで、RustやJavaの連中の言い訳になってるが、
それだとCとC++でCの方が速い理由を説明出来ないだろ。
819デフォルトの名無しさん
2022/02/21(月) 21:18:38.69ID:NEAxhla5
で、Rust vs GoだとConcurrencyどっちがすごいんよ?
https://deepu.tech/concurrency-in-modern-languages-final/
Go language part 4 YouTube動画>2本 ->画像>6枚
これだとRustがさいつよらしいけど
820デフォルトの名無しさん
2022/02/21(月) 21:25:14.63ID:/1Q8PAGZ
そら最速を求めるならクソデカランタイムが仕込まれてるGoが勝てるわけがない
821デフォルトの名無しさん
2022/02/21(月) 21:25:40.43ID:GbKjQqyn
>>813
ああすまん、リンクは完全に失念してた。

で、読んだが、何だ?知ってたような内容しか書いてないが。
わざわざ指摘してくるのだから、fan in/fan out の説明があるのかと期待したが。
822デフォルトの名無しさん
2022/02/21(月) 21:51:34.63ID:889Qm57n
書きやすさ&ビルドのしやすさ、なんてのも実務的には大切。
ザクッと書いてクロスでコンパイルして大量のサーバに撒く、がめちゃくちゃ楽だよ。
823デフォルトの名無しさん
2022/02/21(月) 21:52:17.85ID:889Qm57n
>>821
実際、軽量スレッドな事は知らなかったじゃん。
知ってたような事が書いてたけど誤解してたの?間抜けだな。
824デフォルトの名無しさん
2022/02/21(月) 21:56:26.38ID:NpsKB2au
>>819
フレームワークを使うともっと速くなるみたいで、最初はRust負けててactix使ったら勝ったらしい
フレームワークのベンチならこっちにある
https://www.techempower.com/benchmarks/
フレームワークを使わないケースだと、同じような実装にする努力の跡は見えるが、結果が言語単品の性能を表しているのか標準ライブラリの質を表しているのか、はたまた測り方なのか、何を表しているのかは知らない
825デフォルトの名無しさん
2022/02/21(月) 22:05:32.26ID:GbKjQqyn
>>823
いや知っててあの内容だが?
それで納得出来ないのならそれでいいが、
goroutineは軽くはないし、ゼロコストでは全然無いよ。
826デフォルトの名無しさん
2022/02/21(月) 22:10:46.33ID:jpP0Lzmf
>>819
サンプルコード見たけど酷いな
言語そのものの速度を比較するためのものとは思えない
典型的スクリプトキディのおじさんだ
827デフォルトの名無しさん
2022/02/21(月) 22:19:17.65ID:GbKjQqyn
>>819
本文は全部読んだ。(コードまでは見てない)

まずグラフがどうかだが、これを信じるなら、
Rusr/Java/Goは妥当、異様なのはJS(multi-threaded)の速さだよ。

詳細は本文に書いてあるけど、色々苦労してる。
問題はGo(HTTP)がぶっちぎりに速かったので、これは何だ?って事で、
どうやらライブラリの最適化に因るらしく、
わざわざ他言語でも最適化ライブラリを持ってきて比較し直してる。
で、Rustの方がGoの倍速く、JavaはRustと同程度(微妙に速いが)とかなってる。

ただこれ見る限り、CPU時間とかバラバラだし、
最適化ライブラリを用いたらRust/Java/Goどれも6倍になってるので、
言語の差よりもライブラリの最適化の方が断然重要って事になる。
本人は言語の実力の差をベンチマークしたかったのだろうけど、
ライブラリの最適化で6倍も変わる状況で言語での差をあぶり出すのは難しい。

本人が結論に書いてある事はまあ同意。なお、
> The community consensus when it comes to concurrency performance is quite split.
> For example, both Rust and Go communities claim to be the best in concurrency performance.
828デフォルトの名無しさん
2022/02/21(月) 22:26:10.00ID:889Qm57n
Goは何も考えんでも、公式の実装がハズレ無いのでオーダーさえ考えて実装してれば間違いは無い。
まぁ、そもそもオーダーの計算を失敗しがちなmapとかflatMap無いからな。全部ループ。
そのおかげでめちゃくちゃキャッシュにきれいに載るというのもある。
思ってるより早いよ。
829デフォルトの名無しさん
2022/02/21(月) 23:09:18.19ID:NpsKB2au
まあ一応書いておくと、最適化云々言ってるけど、標準ライブラリのコンパイルオプションを変えたのでなく、標準ライブラリをactixで書き換えただけな
■標準ライブラリ版(遅い)
https://github.com/deepu105/concurrency-benchmarks/blob/nosleep/rustws/src/main.rs
https://github.com/deepu105/concurrency-benchmarks/blob/nosleep/rustws/src/lib.rs
■actix版(クソ速い)
https://github.com/deepu105/concurrency-benchmarks/blob/nosleep/rust_actixweb/src/main.rs
830デフォルトの名無しさん
2022/02/21(月) 23:34:23.82ID:58fVbJqw
>>819
.NET他環境の半分程度の性能しか出ないのかよ
C#おじさんのご高説はなんだったの?戯言?
831デフォルトの名無しさん
2022/02/22(火) 00:01:25.72ID:ZREIq5yi
>>830
Goも同程度に遅いけどな。
と言うかこれはUndertow(Java)がずば抜けて速いんだよ。これは本人も書いてるとおり。

本来は

Rust(ネイティブ、ランタイム無し)
Go(ネイティブ、ランタイムあり)
Java/C#(VM)

の順になって然りで、VMと同レベルになってしまってるGoは遅すぎ。
C#は一応ネイティブにする方法はあるらしい。
VMからネイティブにすれば本来は1.5〜2倍速程度は期待出来る。
https://docs.microsoft.com/ja-jp/windows/uwp/dotnet-native/
現在これが現実的に使えるものなのかは知らん。

ただまあ、同速しか出ないのなら、Goを選択する理由はないだろ。
まともな頭ならC#を選択する。
サーバーシェアだけでも10,000倍違うし、しかもC#の主戦場はunityであって
ASP.NETなんて連中からするとオマケかもしれない状況でこれだ。
ただしC#は重量級であって、日曜大工でやろうというものではないが。
832デフォルトの名無しさん
2022/02/22(火) 00:59:20.84ID:5DTzEoeU
>>831
C#のAOTはこのケースにはあんまりきかないない。
なおそこてはなくてこっち。
https://github.com/dotnet/runtimelab/blob/feature/NativeAOT/docs/using-nativeaot/README.md
刺さるときはめちゃくちゃ刺さる。制約にひっかからないかぎりよく使うよ。
ただこれでもダメならGo書いた方が楽。

Goらしいコードが書けてないのでは?と言う印象だな。

C#の主戦場はUnityは言い過ぎでは?
お前業務システムエアプ勢か?
833デフォルトの名無しさん
2022/02/22(火) 01:39:15.30ID:RKLGE56l
>>831
コネクション増える程.NETの性能悪化してgoとの差開いてるだろ
都合の悪い所は見えなくなるのか?
834デフォルトの名無しさん
2022/02/22(火) 02:23:56.90ID:UcWMEN5O
>>819
なんでこれdotnetはDebugビルドで実行してるの??
835デフォルトの名無しさん
2022/02/22(火) 10:13:55.17ID:Ixlcctuc
>>818
「ランタイムチェックがないのも要因の一つで、RustやJavaの連中の言い訳になってるが、 それだとCとC++でCの方が速い理由を説明出来ないだろ。 」

おまえ酷い言い訳ばっかだな? C#のLinqなんて正にシンタックスシュガーだろ。2MBもスタックとってる糞言語やってて口だけ饒舌でよく恥ずかしくないね?
「貧弱なハードウェアだとGoは機能せず」そんなことはありません、ラズパイのようなハードウェアを使ってGoogleはkubeクラスターと似た機能をN1クラスタで
使ってGoやRustで使用しています、ハードウェア使用効率の良くないNodeでなんか(ほとんど)使用していません。

Nodeが早いのはV8が速い(=Cで書かれている)からであり、「JSはCPUをひたすら突っ走らせる構造にすることをプログラマに強制」などと
いう嘘出鱈目で相手の反応を誤魔化すためではありません。JSが言語特性として速い訳ではありません。どう見ても言語に型が本来は無い
言語に速くなる要素があると考えられますか?TSが型を持った言語だとしてもしょせんはJSへのトランスレーターです。

さらにJSの次に使用されているwasmはページサイズは64Kでありx86なりARM等であっても2kに比べたら非常に大きなメモリー管理をされています。
あなたの言う4k/2kでもデカい64Bじゃないとと比べると実に1000倍です。「挙げてみろよ。 ないと思うぜ。」こういう態度があなたを周りの人から
敬遠される1つの要素です。自分で調べもせず、コードで計測したこともなく、伝聞で偉そうな態度は馬鹿にされる要素の1つでしょう

また「CとC++でCの方が速い理由を説明出来ない」これがキャッシュのおかげにして説明できないのはあなたがプログラムをほとんど書いたことが
無いからです。配列などの連続するデータをループ処理するときに、if文などのCMP命令が1つ挟まれば、プログラムは低速化します。ループ1回に
付きCPU命令1つで済む処理では、if判定するために2つ以上になるため、多くは2倍程度低速化します。
これは、GoやRustなどは、範囲外にアクセスしてないか常にRange Bounds checkingで行っています。unsafeコードでも外せません。決して
キャッシュおかげでも、あなたの足りない語彙のせいでもありません。
836デフォルトの名無しさん
2022/02/22(火) 11:00:46.11ID:Ixlcctuc
>>827
>>831
また多くのweb系のベンチマークの使用にされているRequest/Secは速さの指標の1つですが、本来は現実的にユーザーに利益のある
レテンシー速度のほうが近年は重要視されます。Javaや比較的昔からあるメジャー言語が速くみえるのは、歴史を積み重ねて最適化が
施されているからです。決して言語特性として速い訳でありませんし、Request/secを主眼とした速さの議論は、海外でも馬鹿にされます

RustがRequest/secで多く処理できるのはベンチマークなどの超高負荷環境においてgcが走らないからです。現実的にいえばそのような
環境で運用するのではなく、分散させてサーバーを複数立てるのが本来望ましい。上にあげられたような条件も見えない画像で判断する
のではなく、重要なのは99%タイルにおける高並列において応答のレテンシーが数秒以内に収まり、なおかつRequest/secが出せることで
あり、50%の応答速度が最悪、20秒になってしまうような使い物にならないものを比べるべくもありません

https://web-frameworks-benchmark.netlify.app/compare?f=fiber,aspnetcore,express,actix
837デフォルトの名無しさん
2022/02/22(火) 12:57:29.93ID:G6nBeheJ
一応訂正しておくよ。以前書いたフレームのベンチでも
https://www.techempower.com/benchmarks/#section=data-r20&;hw=ph&test=plaintext
このベンチが一番近いはずだが、nodejsは決して速くない。
js勢だとjustが速い。
838デフォルトの名無しさん
2022/02/22(火) 20:04:57.30ID:B2H8wIkZ
> Goらしいコードが書けてないのでは?と言う印象だな。

ある程度書いてないとらしさみたいなもんは分からんわな
どんな言語でも
よってここに天下一武道会を開催する
各言語のらしさの粋をあつめたコードで
Concurrencyの雌雄を決したい
839デフォルトの名無しさん
2022/02/22(火) 20:10:03.17ID:Y6BYhUSt
>>837
nodejsはフレームワークとは言えんような。
justはnodeインストールしてなくても動くのかい?
840デフォルトの名無しさん
2022/02/22(火) 20:45:10.67ID:WirMN8li
>>838
まずはぜひGoらしいコードを叩き台として出して
841デフォルトの名無しさん
2022/02/22(火) 20:59:43.80ID:G6nBeheJ
自分で手を動かせ
誰かに何かを「やってもらう」ところじゃねーんだよ
自分でできないやつは書き込むな
842デフォルトの名無しさん
2022/02/22(火) 21:28:03.19ID:ZREIq5yi
>>835
なるほど君が色々分かってないのは分かった。
が、まあ、これは後日だ。

>>836
その比較見てもGoが.NETに勝ってるようには見えないよ。
スループットは劣るが、レイテンシなら.NETの方が伸びないようにチューニングしてある。
そちらの主張するようにレイテンシの方が重要なら、.NETの方がいい。

GoとJSの比較のつもりなら、どうせならNANOexpressを使ってみては?
https://web-frameworks-benchmark.netlify.app/compare?f=fiber,aspnetcore,actix,nanoexpress
ほぼ全部のグラフでJSの方が上になってしまうが。
home見れば分かるけど、fiber(Goで最速)、.NET(C#で最速)、actix(Rustで最速)でexpress(JSでは27番目)は比較として酷いだろ。
知名度で選んだだけかもしれんけど。
nanoexpressが使えるレベルの仕上がりかどうかは知らんが。
843デフォルトの名無しさん
2022/02/22(火) 21:46:51.86ID:ZREIq5yi
>>832
> > 制約にひっかからないかぎり
> 動的ロード無し
> evalなし
> COM/WinRT相互サポート無し
> リフレクション無し
まあ普通に静的言語のノリで書いてたら大丈夫だとは思うが。


>>837
俺はサーバー系JSの総称としてNodeと言ってた。
フレームワークを正確に識別する気だったらすまん。

justだとNodeの10倍なら、819のベンチで他言語が6倍速になってるのと同様だから、それなりの値になるのだろう。
いずれにしても言語の特性なんてフレームワークの最適化の陰に隠れてほぼ見えないね。


>>839
just-jsは多分これ。
https://github.com/just-js/just
> A very small v8 javascript runtime for linux only
というわけでNodeの代わりだな。ただしドキュメントがないので実体は不明。
justというほぼ同じ名前の、ただしGitHub垢は別の物があるのだけど、これと組み合わせて使うのかな?
https://justjs.github.io/
844デフォルトの名無しさん
2022/02/22(火) 21:49:46.37ID:5DTzEoeU
別に.netをディスってる訳では無いんだが、代理戦争みたいな真似する理由がわからん。

GoがWebフレームワークのベンチマーク弱い理由はだいたいこの記事にまとまってる。
https://zenn.dev/nobonobo/articles/e651c66a15aaed657d6e
同じ事したら他のフレームワークと同じかもう少し早い。

ヘイトに関してはだいたいこれじゃん。
https://zenn.dev/nobonobo/articles/74808a8d5e6f1e
845デフォルトの名無しさん
2022/02/22(火) 21:50:53.96ID:5DTzEoeU
>>843
ホントにやってみて言ってるか?ひっかかるぞ。
846デフォルトの名無しさん
2022/02/22(火) 22:01:34.94ID:ZREIq5yi
>>845
リフレクションを常用してるのなら、それは基本的にお前の組み方が悪い。
847デフォルトの名無しさん
2022/02/22(火) 22:03:10.10ID:WirMN8li
>>844
「GoがWebフレームワークのベンチマーク弱い理由」が書かれていない記事に見えるがリンク合ってる?
848デフォルトの名無しさん
2022/02/22(火) 22:43:58.08ID:jMOKvXgm
>>834
これ。Debugビルドでやって何の意味があるの?そりゃあ最適化されてなかったら遅いわ…
849デフォルトの名無しさん
2022/02/22(火) 23:07:19.97ID:B2H8wIkZ
>>844
> https://zenn.dev/nobonobo/articles/74808a8d5e6f1e
> Rob Pike氏はあらゆる既存のプログラミング言語が互いに発案した特徴を取り込みあって、
> あらゆる言語が同じような言語に向かっていることに異を唱え、そうではない言語を作ろうとして
> (略)
> Goのアイデンティティのひとつに「厳選された必要十分な機能セット」というものがあり、
> 過去ここを壊すような多くの提案には「No!」が突き付けられてきました。

Goはなんか言語としてのウリが弱くて
逆に言語としての機能不足を非難されたりするけど
ここにC++を持ってくると急に腑に落ちるな
ブヨブヨに肥大したC++の現状の惨状を見ると
そらロブの言いたいことも分かるってもんよ
Goに対する一部の批判はそら的外れってもんよ
850デフォルトの名無しさん
2022/02/22(火) 23:13:49.19ID:S7d5HFwX
かなり後発のRustが先発言語たちから厳選された機能を洗練して上手く採り入れていって
純粋に言語としての比較ではGoを抜き去って行った感がある
851デフォルトの名無しさん
2022/02/22(火) 23:17:51.21ID:6QeruhOo
個人的に趣味でゲーム作ってて、
(仕事はPythonとかのスクリプト言語)
そのバックエンドに高速そうなGo使おうと思って勉強してるんだけど
そういうレベルの俺からするとRustはものすごく難しそうというか、厳しそうに思えてしまうんだよな
メモリリークって一番やりそうだもん
852デフォルトの名無しさん
2022/02/22(火) 23:25:51.36ID:WirMN8li
>>851
何か勘違いしてない?
RustはC言語と違って
使われなくなった瞬間に自動的にメモリ解放してくれる言語
853デフォルトの名無しさん
2022/02/23(水) 00:01:15.68ID:LYKR6qmH
>>846
リフレクション以外もひっかかる。
試してから言え。

>>847
APIの秒間リクエスト処理数比較などもそうです。HTTPヘッダパース遅延評価機能を持つものと持たないもののベンチマーク等ではヘッダへのアクセス不要な簡易負荷で比較しているような状況になりがちです。特にデータベースアクセスなどを伴わないような場合だとその性能差は大きな差として現れます。

実際、Goのサードパーティライブラリ「fasthttp」はHTTPヘッダパース遅延評価機能を持っており、この場合ベンチマーク結果の数値は最速実装にかなり近づきます。しかし、HTTPヘッダは実用の現場の場合、評価しないわけにはいかないので実用上の性能は標準のnet/httpと大差ないということが実際にあり得ます。
854デフォルトの名無しさん
2022/02/23(水) 00:49:45.29ID:eS2QASPG
>>852
ガベージコレクションが無いって事しか知らない
違うのか
ってかスレチかもすまん
855デフォルトの名無しさん
2022/02/23(水) 06:07:59.41ID:hfe0Ou5T
>>854
Rustは使われなくなったら即座に自動的にメモリを解放してくれるため
ガベージコレクションを必要とせず速い
856デフォルトの名無しさん
2022/02/23(水) 07:24:21.07ID:0walZlbe
>>842
nanoexpressなんて、HTTPもまともに実装してないウンコでドヤァってんじゃねーよハゲ(笑)しかも、star数3桁だぞw
https://www.techempower.comの不正だらけのベンチマークばっかり見てるから、(xxで最速)なんて恥ずかしい言葉が言える。
高機能なほかがサポートしてないフルスタックとHTTPの単純なGETだけ最速になるように調整(不正ではないが)したもの比べて、
中身を、全く見てないのに「なるほど君が色々分かってないのは分かった」なんてマウント取りたいだけだろお前?

普通に使用されてるもので選ぶのが当たり前、「nanoexpressが使えるレベルの仕上がりかどうかは知らんが」しらねーのかよハゲ!!
知らないのに語りすぎだろw

>>843
そのくせ次に出してくるのがjust-js/justかよwww、just.cc, main.ccがJSに見える病ですか?just-jsのmarkdownにも書かれてるが
「non-async by default - can do blocking calls and not use the event loop」
おまえがさんざ言語の優位性として言ってるasyncすらデフォルトですらねーわww

なんでおまえ最速が好きなの?
「言語の特性なんてフレームワークの最適化の陰に隠れてほぼ見えない」何度も言ってるけど、明らかに高い同時並列接続はシングル
スレッドな言語では限界があり、レテンシーが極端に落ちるのどんなベンチマーク見てもその傾向。明らかに言語の傾向は出ています、
Rustがreq/secでスループットが「最も高い」という結果も、明らかに言語特性として高負荷でgcではないのでSTWが動かないという
言語の特性がキチンと出ています。
Goが非常に高い同時の並列接続数での、レテンシー速さが一部では、Rustよりも上回る場合があることが、ベンチマークで出ています。

「フレームワークの最適化の陰に隠れてほぼ見えない」見えないのではなく、おまえは見ることが出来ないだけ。だからjust-jsなんて
恥ずかし気もなく言い出せる。オープンソースなんだからコードぐらい追えよ?
857デフォルトの名無しさん
2022/02/23(水) 09:06:25.43ID:7ZO0r/jE
>>851
順当なら間違いなくJS/TS。
どのみちフロントエンドも必要だからJSは習熟するしかない。
それでバックエンドも出来るのだから、Python鯖が嫌ならJS鯖になる。

ただしJSは最速ではない。
(アーキは良いのでコンパイラが出てくれば最速になる可能性もあるが、5〜10年は無いだろう)
だから順当には、JS鯖で負荷的に無理になったタイミングで移行を考えればいい。
そして個人レベルのゲーム鯖でこれが必要になる事はまずない。
もし仮に大当たりしてこうなっても、マネタイズがそれなりに出来ていれば、人を雇う事/外注も出来る。


もしコンピューターについて学びたいと思ってるのなら、順当にはCになる。
Rustを最初にやっても、色々意味が分からないはず。
一般的にはRustはC->C++->Rustと学ばないと良さを理解出来ないと言われていて、
Rustやるんだったら結局はCもやる事になるので、最初からCやっとけとなり、
「RustのおかげでRustよりもCを学ぶ連中の方が多くなってしまったではないか!!!!」とRust界隈で話題になってたのが2019だったと思う。
ただし最終的にRustを使うつもりならCの熟練者になる必要はない。ただ、知っておく必要はある。

この辺最近、こいつらはこの処理が何故重いのか全く理解出来てないんだな、と感じる事が多い。
これはコンピューターが複雑化した事もあるが、コンピューターの物理面を知らないで済ませようとしてるからだ。
(論理的なプログラミングに留めている。それを目指したのがJavaでもあるのだが)
だからベンチマークに頼らないといけなくなる。何故それが速いか遅いかを自分で判断出来る能力がないからだ。
だからこの辺、自分で判断出来る能力が欲しければCをやるべきだし、
とはいえ現実的にはフレームワークを使うわけで、フレームワークが最適化されてればそれで良し、駄目なら駄目、
と一生ベンチに頼るのもありだし、現実的にこれでも大した問題がないのも事実だろう。
この場合はCなんてやるだけ無駄、ってことになる。だからどういう能力が欲しいかを自分で考えるべきだね。

ちなみにRustもTSもNodeも無かった時代に同じ事を聞かれるとGoと答えただろう。
Go界隈の最大の問題はここで、最初に運良くブーストした?のに浸ってる。
今はもう違う事を認識出来てない。
858デフォルトの名無しさん
2022/02/23(水) 09:13:45.39ID:hfe0Ou5T
>>857
なぜ不便なCを勧めるのか理解できない
Cをやるくらいなら自動的にメモリを解放してくれるRustが楽で良い
スクリプト言語と似た感じで便利にプログラミングできる点も良い
859デフォルトの名無しさん
2022/02/23(水) 09:22:59.07ID:bUSsBe0W
Cもなんだけど、TSなんか特に。
マルチコア使うのがめちゃくちゃ下手な言語を、どうしてGoの対抗馬に持ってこれるの?
それら全ての言語を使ってないのでは?

nodeはnodeで便利だがGoと代替にはならんよ。
RustはRustで早いけどGoの代替には簡単にはならない。
860デフォルトの名無しさん
2022/02/23(水) 09:27:29.73ID:3VU0Qb68
objective-c: objectiveが売りなんで頭にもってきたネーミング
c++: cのフリしつつ拡張するつもりの邪悪なネーミング
go: いちにーさんしーごーでシンプルにしーの後に躍り出る命名
861デフォルトの名無しさん
2022/02/23(水) 09:46:33.29ID:7ZO0r/jE
>>858
モロクソ書いてるだろ。3行しか読めない馬鹿か?

オレオレゲーム鯖立てるつもりならJS/TS、個人ゲーで負荷的に無理になることはまず無いし、フロントエンドでどのみち使うし。
コンピューターについて学ぶつもりならC、Rustを先にやったところでRustを使えるようにしかならない。
現段階でGoを選ぶ理由がない。Goを学ぶ事が目的ならどうぞだが。
862デフォルトの名無しさん
2022/02/23(水) 10:36:48.23ID:EqZ7VJsi
フロントエンドなら最近はWASMが増えてきて記述言語で一番適していて多数派がRustといった状況
もちろんサーバーサイドもRustで行ける
Goは巨大ランタイムのせいでWASMと相性がよくない
863デフォルトの名無しさん
2022/02/23(水) 11:07:50.59ID:bUSsBe0W
>>862
そもそもGoは外部と相互運用する事を前提としてない言語だと思う。
少し互換性は失われるけど、isomorphicにしたいならTinyGoかなぁ。
864デフォルトの名無しさん
2022/02/23(水) 11:12:09.17ID:vCUIsgzX
node-jsもjust-jsもJavaScriptの実行環境。just-jsでも
(async()=>{await Promise.all([...Array(10)].map(async(_,i)=>{just.print(i);}));})();
が普通に実行できる。並列かどうかは知らない。
865デフォルトの名無しさん
2022/02/23(水) 12:45:46.30ID:gMbnXrXW
JSである以上、asyncなんて書いてもコールバックであり並列でもなければ、平行ですらありません。というかほんの数年前のJS使いなら
setTimeout()と書いて非同期タイマー呼び出しぐらい理解してるはずなんだが?今では、Nodeなら、nextTick()だろうけど
普通に実行できるとか、そりゃ言語仕様としてGoogleが携わってるV8使ってんだから出来るでしょうよw
just-jsおじさんw
866デフォルトの名無しさん
2022/02/23(水) 13:09:37.82ID:bUSsBe0W
JavaScriptのアーキテクチャが良いと言うのもよくわからんよな。
シングルスレッドだし、別プロセスは前から立てれたが、別スレッドを満足に立てられるようになったのは最近。

epoll使ったイベントループの事を褒めるのであれば、それこそGoのselectの方が賢いんだし。
867デフォルトの名無しさん
2022/02/23(水) 14:41:59.08ID:vCUIsgzX
一応書いておくけど何かをディスってるわけではないよ。訂正してるだけ。
V8はエンジン。言語仕様はES〜。
>>856がnon-async by default - can do blocking calls and not use the event loopを引き合いに出していたので、asyncが使えることを示した。
並列になることを期待している可能性もあったが、コードを追って確認したわけではないので、単に「知らない」と書いた。
868デフォルトの名無しさん
2022/02/23(水) 15:37:31.02ID:7ZO0r/jE
>>866
JSが何故ここまで蔓延ってるのか理解出来ない奴がGoを使っているのは分かった。
844の記事にもあるが、「脳死」プログラマ向き言語がGoなのだろう。
>>828
> Goは何も考えんでも
も同じ方向を示してる。

ただな、みんなよりマシな物を使いたがるんだから、広く使われている物にはそれなりの理由があるんだよ。
そういうのを考えたくない奴がGoを使ってて、その中で満足出来る人にとっては、小さく閉じた幸せな世界なのだろうけどさ。


>>867
> cat hello.js | just --
> non-async by default - can do blocking calls and not use the event loop
このjustってもしかして鯖ではなくコマンドラインから使う用?なら欲しいかも。
今はスクリプト業務でJSを使いたい場合、DevToolのコンソールで無理矢理やってるから。
(冷静に考えてみればNodeでも出来るはずだが、やろうとした事はなかったな…)
869デフォルトの名無しさん
2022/02/23(水) 15:51:46.27ID:vCUIsgzX
>>868
just-jsのjustコマンドはnodejsのnodeコマンドに相当
consoleオブジェクトがないなど癖が強いので、一般利用なら個人的にはnodeでいいと思う
870デフォルトの名無しさん
2022/02/23(水) 19:44:15.21ID:bUSsBe0W
>>868
はびこってるのか理解できないと言うのは誰かと間違ってないか?
俺はnodeはnodeでアリだがGoの分野とは相容れないと言ってるんだが。
考えないと早くならないcppやrustと対比させてるのであって、jsとは全く対比させてない。
871デフォルトの名無しさん
2022/02/23(水) 21:47:24.05ID:EqZ7VJsi
>>865
それはJavaScriptに対してあまりにも無知すぎる
async/await登場以前からJSは並行プログラミング言語
async/awaitはどの言語でも同じだがそれを同期して同期風に記述できる付加機能
ちなみにworkerによってJavaScriptは並列プログラミングも可能
872デフォルトの名無しさん
2022/02/24(木) 02:41:19.56ID:aoL+Ya6Q
>>871
上の「 (async()=>{await Promise.all()」がどこに並列があって、関係のないworkerに話が飛ぶんだw誤魔化しマウント野郎w
ウッホウッホホ、ドラミングw
おまえのご自慢のnanoexpressとかjust-jsのどこにworkerが使われてるんだ?
873デフォルトの名無しさん
2022/02/24(木) 02:56:09.99ID:aoL+Ya6Q
>>868
使ったことないのに言い出す奴www
「JSが何故ここまで蔓延ってるのか」C#おじさんの全方位敵対w
874デフォルトの名無しさん
2022/02/24(木) 03:05:18.77ID:QeQ2VGy/
nanoとかjustとか全く知らなくて
JSについては普通にブラウザ上とNode.jsしか使っていないが

>>865
> JSである以上、asyncなんて書いてもコールバックであり並列でもなければ、平行ですらありません。

これは明らかにウソ
JavaScriptは基本的に全て並行プログラミングであって並行に動作する
しかもJSの場合は暗黙的に自動並行開始という特徴がある
例えばGoならgo、Rustならspwanしないと並行開始されないが
JSは非同期関数(=名前にSyncと付いていないもの)を使った時点でスケジューラに登録され並行開始
これはコールバック使用でもPromise使用でも同じでもちろんasync/await使用でも同じ
Web関連の並行性について話をするなら上記の初歩的な知識は必須な基本事項
875デフォルトの名無しさん
2022/02/24(木) 03:12:11.21ID:gyy9N0gw
並行か?ioか無いとスレット取りっぱなしでラ?
876デフォルトの名無しさん
2022/02/24(木) 03:15:40.31ID:yGsnJUen
あっそ、じゃあGoスレじゃなくNodeスレで一人語ってくださいね?言語以前に人としてのマナーを学びましょう
877デフォルトの名無しさん
2022/02/24(木) 03:22:14.88ID:9O+r6lMK
>>874
Goの適用範囲のメインがウェブ周辺なのにも関わらずそういう基本的な知識すらないやつ時々いるよな
あと他の言語を知らずしてGoの良い点も悪い点も語れないしな
878デフォルトの名無しさん
2022/02/24(木) 03:28:06.36ID:z0JbsGq8
>>875
並行と並列の違いも理解できてないから、あんまり相手にしてもしょうがないよ。Goも知らないっぽい・・・
Goはgo呼び出ししなくてもメインルーチェンがgoroutineだし
879デフォルトの名無しさん
2022/02/24(木) 03:28:15.25ID:gyy9N0gw
Goのメイン、Webでは無いだろ。
自分の分野がWebだからハンマー釘になってるのでは?
880デフォルトの名無しさん
2022/02/24(木) 03:29:04.26ID:gyy9N0gw
>>878
そうよね…なんか凄く脱力感あるわ…。
この文脈でTSを推す理由が全くわからん。
881デフォルトの名無しさん
2022/02/24(木) 03:36:49.68ID:QeQ2VGy/
>>878
君が理解出来ていないのではないか
JavaScriptはWorker使わない限り全て並行であり並列ではない
もちろんWorkerを使えば並列も可
まさかと思うがGoではどうなのかも理解できていなかったりする?

>>880
TSなんて書き込みをしたこともないのでそれは別人だぜ
882デフォルトの名無しさん
2022/02/24(木) 03:41:58.08ID:dTNpqM+n
内容ゼロの真逆のことを言い出した…
Goのメインはパイプラインデータ処理のバッチ系のほうが大きいと思うね、確かにメニーコアをあまり無駄なく活用するからwebも使えるけど
883デフォルトの名無しさん
2022/02/24(木) 03:45:18.78ID:9O+r6lMK
自分と異なる意見を書いてるやつは敵であり、敵はそいつ一人
という思い込みパターンは5chではよくあるな
884デフォルトの名無しさん
2022/02/24(木) 03:48:08.63ID:6w5SyGQZ
ID:QeQ2VGy/
「JavaScriptは基本的に全て並行プログラミングであって並行に動作する」
「JavaScriptはWorker使わない限り全て並行であり並列ではない」

(笑)解離性同一性障害かなんなのか、当てるスレ。もうさjavascriptもgoもrustも関係ないなあ
885デフォルトの名無しさん
2022/02/24(木) 03:50:57.70ID:QeQ2VGy/
>>884
どちらも正しいが何を言いたい?
JavaScriptは基本的に全て並行であって並列ではない
Workerという後から追加された機能を使ったときのみ並列動作が可能
886デフォルトの名無しさん
2022/02/24(木) 03:54:14.80ID:9O+r6lMK
おそらくだけど>>884氏は並行と並列の違いをわかっていないために誤読
さらに暴走して解離性なんちゃら言い出しただけかと
887デフォルトの名無しさん
2022/02/24(木) 05:26:36.76ID:cGpWV2sd
はい、ここでトリックです。(goをこよなく愛する方々スレ汚しごめんなさい)

以下動かすとnode.jsでもjust.jsでもブラウザでも約100msになります。
(async()=>{
// justのときは↓のコメント外す
// const console = {log: (arg)=>just.print(arg)};
// const setTimeout = just.setTimeout;
const sleep = ms => new Promise((f)=> setTimeout(f, ms));
const start = Date.now();
const p1 = sleep(100); // タスク1
const p2 = sleep(100); // タスク2
await p1;
await p2;
console.log('end:' + String(Date.now() - start));
})();
もしタスク1とタスク2を逐次実行するとしたら、約200msでないといけません。
タスク1とタスク2を並行に実行したので、約100msなわけです。
888デフォルトの名無しさん
2022/02/24(木) 07:44:45.85ID:7j5xGGNI
>>887
jsは自前でsleepしてないから妥当すぎてなんとも
シングルスレッドな言語で自前でsleepしてたらイベントも受けとれんわ
時間が来るまで処理のスイッチがなされないだけ
889デフォルトの名無しさん
2022/02/24(木) 08:26:03.01ID:gyy9N0gw
>>881
そうだね。そのWorkerがクソ重いって言ったぞ。
worker跨ぐ並行並列の話では?C#のasync awaitは。

Goはworkerを立てずともなってる。
890デフォルトの名無しさん
2022/02/24(木) 08:27:43.23ID:gyy9N0gw
>>887
sleepではなく切れ目無くCPUをガンガンに使う処理入れようか。
891デフォルトの名無しさん
2022/02/24(木) 08:40:42.53ID:7t2RQWHZ
>>861
Rust界隈は>>858みたいなバカ多いから……いわゆるゴールデンハンマー。

Rustはもっと学習メソッドと設計思想の解説を強化すべきだと思うわ。一番厄介な所有権についても、実行速度とメモリ安全を両立させるためにどういう管理をしているのか説明すればわかりやすいのに。
892デフォルトの名無しさん
2022/02/24(木) 08:47:04.56ID:r4yoOnDZ
sleep自慢なわけです。C#とasyncから始まった今ここに集まってくる奴らは、道具を眺めて優れた何かを作ってない口だけ
自分で作ってもいない日本刀の刀身眺めてニヤニヤしてる気持ち悪いマニアと一緒
893デフォルトの名無しさん
2022/02/24(木) 08:59:42.43ID:9O+r6lMK
>>890
スケジューラの類いを作ってことあるプログラマーならば
sleepとは時間が来るまでそのタスクが寝るだけだあって
その間に他のタスクが動くことくらいわかりそうなものだが理解できないのか?

>>888
sleepなどのタイマー類はスケジューリングランタイムが提供すべきものであって自作するものではないぞ
894デフォルトの名無しさん
2022/02/24(木) 10:19:55.02ID:gyy9N0gw
>>893
そもそもsetTimeoutで完全にCPUを明け渡してて何が「並行」なんよ。
895デフォルトの名無しさん
2022/02/24(木) 10:36:22.27ID:QeQ2VGy/
その>>887が作った例でsetTimeoutでは不満で裏で具体的に動くもので示して欲しいなら
>> const sleep = ms => new Promise((f)=> setTimeout(f, ms));
>> const p1 = sleep(100);

この部分を代わりに公開テストURLの遅延オプション(秒単位)を使って
const sleep = (sec) => {
fetch(`https://httpbin.org/delay/${sec}`);
};
const p1 = sleep(5);
これで順次なら5秒+5秒=10秒かかるところが並行に動いて5秒ちょっとで動くことがわかる

>>891
Rustも難しくない
上記と同じ例ならその部分はこれで動く
let sleep = |sec| {
spawn(fetch(format!("https://httpbin.org/delay/{sec}")))
};
明示的にspawn()する必要がある点以外はJavaScriptと同じ
ちなみにformat!はsprintf相当のフォーマッティングで変数sec部分を展開
どちらも作成されたsleep関数はPromise/Futureを返していてそれに対してawaitできる
896デフォルトの名無しさん
2022/02/24(木) 12:43:57.22ID:PkL2tYJv
>>869
ありがとう。
手元のNode環境で公式ドキュメントのサンプルコードで試したら普通に動いたわ。(当たり前だが)
俺が勝手に鯖専用と勘違いしていただけで、最初からそう作ってあるんだな。


>>870
ん?870=828≠866と理解してるから、誰かと勘違いしているわけではないぞ。
ただまあ、それだと考えたくない奴がGoを使うという見解には事には同意という事か。

> 考えないと早くならないcppやrustと対比させてるのであって
禿(=ストロウストラップ、C++の始祖の巨人)曰く、「C++はプログラマを育てる言語だ」
その理由は簡単で、「考える」からだよ。
C++はあらゆる事が出来る言語であり、思いつく事は何でも試せる。
だからこそ最速の地位を保っているわけだが、
基本的に安全装置なんて付いてないため(まあC++はそれでも付けようと努力してる方だが)
失敗する時は派手に失敗する。
そしてこの、色々試して、成功したり、失敗する過程で、プログラマは成長していく。

Goが脳死で出来るのは脳死してる奴にはメリットだけど、考えないと(慣れはするが)成長はしないので、
成長したいプログラマはGoには居ないし、Goのプログラマは成長もしてない。
多分俺が感じるGo界隈の異様さはここなのだろう。ギークさが足りない。
まあ俺がGoやる事はほぼ無いからいいんだが。
897デフォルトの名無しさん
2022/02/24(木) 12:44:19.14ID:PkL2tYJv
Goはアーキが良くない。中途半端なんだよ。Erlangを考えるなら、
Goはループを廃止して全部goroutineにし、基本map/reduceでmap側をgoroutineにし、
依存性のありなしだけを記述、つまり依存部分はチャネルで接続、
独立部分はgoroutineでランタイム内のスケジューラで状況を見て自動的にループに変更、
とかだと面白かったかもしれん。これなら脳死でひたすらgoroutineに切り出しで済むから。
実際はこれをやったらgoroutineが重すぎて余計に遅くなるから
どの程度goroutineにするか「考えないと」いけないわけでさ。
(この顛末をモロに書いてたのが810で俺が探してたブログ(改めて探したけどやっぱり無いが))
ただ実態はGoランライムが(OSのスケジューラと同様に)
チャネル、スタック、エントリ関数ポインタを持つGoroutine型のオブジェクトを大量に用意して
イベントドリブンで動かしているだけだから、チャネルとスタックの『衣』の部分だけどうしても重くなる。
だから普通に他言語でイベントドリブンで書かれたら絶対にその分負けるわけで、この辺もアーキの良くない部分だよ。
「最速を目指す気はない!」ってのが答えなんだろうけどさ。
ただ、簡単に書ける割には速いってのならJS/TSになってしまうし。
898デフォルトの名無しさん
2022/02/24(木) 12:45:07.89ID:PkL2tYJv
「考えて」判断するなら、コンピューターについて学ばなければいけない。
考える気がないから、学ぶ必要もないし知る気もない。
論理的には正しいし、実際問題として動けばいいのならこれで問題ない。
けど、なんだかね。まあ俺が文句を言う筋もないが。

他言語:オレオレ流でも曲がりなりにもいいコードを書こうとはしてる(結果はさておき)
Go信者:Goで書けば全て落着、と信じてる

だから俺ら他言語の連中は基本的にキョロキョロしてる。
「○○では△△が出来るらしいぞ」「それっていいのか?」「いやあ…」と大体空回りしてるけど、
これは自由の代償として受け止めるしかない。
ここをGoの連中は「そんなの面倒だ。Goで書けば全て問題ないんだ」と信じ切れる奴が集まっているのだろう。
そういう連中もいて、そういう言語も必要なのも事実だろう。
ただ、プラットフォームと心中する気ならC#の方が100倍マシだけどな。
元々はLinuxで使えないという問題はあったが、一応解決された(とはいえ現実的にどうなのかは知らんが)

「No is temporary, Yes is forever.」(844のブログ)はその通りなのだが、結果的には少しタイミングが早かった。
2000年代前半はオブジェクト指向+マルチスレッド全盛だったから、Goはこれらの問題を解決するようには作ってある。
問題はその後非同期が主流になってしまった点で(まあこれも今後変わるかもだが)
goroutine is foreverであれば、非同期が主流の状況が続く限り埋没する未来しかない。
登場時の問題は解決出来てるが、仕様を追加する気がないのだから、それ以降の問題は何ら解決出来ない、
という当然の状態ではあるのだが。
この点C#は変節に変節を重ね、筋が良かったとは言いがたいが、その時の便利機能を取り込み続けた結果、
「今一番生産性が高い」の地位は何だかんだで保持してる。
899デフォルトの名無しさん
2022/02/24(木) 12:48:03.88ID:4cQqvqtW
ひたすら独り語り
900デフォルトの名無しさん
2022/02/24(木) 12:50:56.09ID:gyy9N0gw
自分にある引き出しでしか喋ってないのな。
Go書いたこと結局無さそう。

TS早くないってば。
901デフォルトの名無しさん
2022/02/24(木) 12:53:50.71ID:rd5PFIsb
結局最後は速さにこだわりはじめてRustにすればよかったって流れなんだよな
902デフォルトの名無しさん
2022/02/24(木) 13:24:03.51ID:QeQ2VGy/
>>901
たしかに速さ目当てでRustにも手を出したが
言語としての機能が豊富でGoよりもプログラミングが快適ということに気付いた
903デフォルトの名無しさん
2022/02/24(木) 23:55:59.28ID:PkL2tYJv
色々考えて大体整理が付いたので、ついでにつらつらと。

Goは多分文系プログラマには一定の需要がある。残念ながら多分滅びもしない。

例の「2番じゃいけないんですか?」で、
理系:「2番なのは結果であって、1番を目指さないと2番にも成れないよ」と反発したものだが、
文系:「2番目指せば2番に成れるだろ」と思っているからこその話であり、
競争を放棄した連中にとっては確かに良い塩梅ではある。

Cでいいけど、Cでは辛い、という人の為に、
Go = C + GC + String + 最低限のクラス
という事なら、確かにそこそこ使い勝手が良い。
ただし最先端のプログラミングに触れる事はないので、本人が選ぶのは自由だが、若い奴に勧めるのは悪だろう。
ただもう最先端なんて追いたくない、ロートルで良いんだ、Cでほぼ満足だ、という層には、
betterCとしては使い勝手が良い。C++はGCが無いので。

そして進化をしない事を選択した結果、最先端プログラミングをしたい奴は去り、
変わらない事が良い事だとする連中だけが残った。
だから今後とも変わらず、それが良しとされる。
合うかどうかは性格の問題だろうね。俺は無理だが。


>>894
「シングルスレッド」というキーワードに惑わされてJSを理解出来ないのなら、今のC#と同じだと考えていい。
今のC#のasyncでI/Oを切り出せばJSになるし、
JSのasyncでCPUバウンドのジョブをworkerに投げればC#になる。
JSは「メインスレッドがシングルスレッド」というだけで、I/Oはマルチスレッドで動いてる。
819のベンチではMultithreadのNodeはGoの1.5倍速出てるが、clusterというコマンドでCPU数だけインスタンスを立ててるだけ。
リクエストが干渉しないのならこれで問題ないのも事実。
スクリプト言語の癖に奇妙な程速いのは、元のアーキが良いからでもある。だからC#にモロパクされてる。
そしてC#が整備したasync文法をJSがモロパクしたわけだが。
904デフォルトの名無しさん
2022/02/25(金) 04:57:49.84ID:aDhOSI3t
その長い主張はまとめるとこういう主張?
言語機能が貧弱なGoは普通のプログラマーにとっては使いづらいだけの存在だけど
豊富な機能や複雑な機能を使いこなせない劣ったプログラマーにとっては需要がある
905デフォルトの名無しさん
2022/02/25(金) 05:03:43.53ID:3Y4Z8gJm
rust良いんだけど特定の種類のプログラム
例えば赤黒木とか二重リンクリストみたいなポインタを操作しまくるようなプログラムは明らかに向いてないんだよな
906デフォルトの名無しさん
2022/02/25(金) 08:15:32.32ID:TaGUkQP3
>>905
unsafe使いまくるから、野良ライブラリに任せないで標準ライブラリ用意して欲しいよな。
907デフォルトの名無しさん
2022/02/25(金) 08:30:45.32ID:u7rOKKj6
>>906
それは標準ライブラリの位置付けに誤解がある
Rustでは最小限のものしか標準ライブラリに入れない方針を明確にしている
だから各用途ごとの重要なライブラリは全て外部にある
例えばasync/awaitやFutureの枠組みは言語仕様と標準ライブラリにあるが
そのための非同期ランタイムは外部にある

あとunsafeの認識は大丈夫と思うが念のため
unsafeは内部に閉じ込めて安全な公開インタフェースを持つ型(type)やモジュールを作るために存在している
だから標準ライブラリも内部はunsafeだらけだが公開インタフェースを用いる限り安全が保証されるといった具合い
どのような安全なインタフェース体系にするかは用途ごとに異なるためそれぞれに適したライブラリを選ぶか自作すればよい
908デフォルトの名無しさん
2022/02/25(金) 08:39:36.17ID:ifNOEbaN
>>903
文系理系の切り方も謎だけど、
「適切なところに適切な道具を持ってくる」というのはエンジニアリングの基本。
誰彼構わずF1マシンに乗っても工数だけかかる。銀の弾丸は無い。

JSのasyncはworkerには投げられない。Promiseベースのworkerへの割り振りは単純にはならない(できない)。
async/awaitをなんとかしようとすると例外のためにスタックを持ち回る必要がある。
そしてclusterはマルチプロセス。

もしかしてnodeもエアプなの?
909デフォルトの名無しさん
2022/02/25(金) 08:47:26.78ID:apxGtOuK
>>907
その方針がRustのダメなところだという話だよ。goは一応"Build fast, reliable, and efficient software at scale"というコンセプトからはあんまり外れていない。
Rustはメモリ安全性が最大のコンセプトなのに、メモリ安全性から外れる部分をカバーしない方針はコンセプトと矛盾している。
910デフォルトの名無しさん
2022/02/25(金) 08:55:53.55ID:u7rOKKj6
>>909
何が問題なのかその文章からはわからないから明確に述べてほしい
RustはC++の方針の失敗を反面教師として上手く機能している
Goの良さはもちろん承知しているがRust視点から見ればGoは言語機能が貧弱なのに巨大なランタイムでGCもあり互いに真逆の立ち位置にいるわけだから
911デフォルトの名無しさん
2022/02/25(金) 10:29:26.05ID:JmFlgtI0
>>904
最新のプログラミングをしたい/学びたい層にはGoは駄目だが、
昨今の他言語は常に肥大化しているので、仕様の更新を潔く諦め、
(15年前のプログラミングパラダイムで良ければ、)
『ちょうどいいプログラミング言語』であるGoには一定の需要はあり続けるはず。

なら10年ごとに「ちょうどいいプログラミング言語シリーズ」として改訂していって欲しいところだが。


> 豊富な機能や複雑な機能を使いこなせない劣ったプログラマー
これはわざとだろうがちょっと悪意が酷すぎる。
というか最近の若い奴はどうやら「全機能を使う事=使いこなす=有能」と捉えてる感があるが、これは違う。
プログラミング言語はあくまでアプリケーションを作る道具なのだから、
自分が欲しい機能があればそれで十分で、それ以上は必要ないんだよ。
912デフォルトの名無しさん
2022/02/25(金) 10:30:28.78ID:JmFlgtI0
>>908
言語の思想として「2番で良いですよね」があるんだよGoには。(結果的かもしれんが)
俺としては、というか、多分アンチ勢は
「1番を目指した上で1番に成れないのは仕方ないが、1番を目ざしもしないのは駄目だ」という感覚なんだよ。
これが科学分野で競争してる連中の普通の感覚だから。
この感覚がない=科学分野で競争を強いられてない=文系、というわけ。

実際レンホー発言の時もそうだったが、学術会議の任命問題でも大概酷かったろ。
その前にコロナ禍で「今の日本でも科学的な物の見方を出来る奴はこんなに少ないのか」とは驚いたが。

この「1番を目指さない」が性格に合うかだよ。
「1番を目指したい」連中にとってはGoは武器としては貧弱すぎる。


> JSのasyncはworkerには投げられない
Workerに投げた時点でasyncだろ。接続はonmessageなんだから。
async文法を使えという話ではなく、プログラミングパラダイムとしての非同期(async)だよ。

> async/awaitをなんとかしようとすると例外のためにスタックを持ち回る必要がある。
これについては考えてない。というか、C#はそうしてるけど、あれ意味あるかね?
そもそも俺はtry-catch自体あまりいい仕組みとは思ってない。
大体においてJSではtry-catchが非同期の先になってしまうので不便だし、
リトライする気がなければ放置でも大した問題にならないし。
むしろC#がそこまでしてtry-catchを強引に持ってきた事に驚いた。
(リソース返却のためなら非同期先でcatchでよく、
リトライのためなら終了イベントでフラグ管理して丸々リトライでよいので。《どうせほぼリトライなんてしないように作るわけだし》)
まあ俺はtry-catchに関しては消極派で、Go方式でもまあいいよ程度なので、Promise以前の素のJSのtry-catchでも十分満足してる。
だからバリバリのtry-catch派とは話が噛み合わないかも。
913デフォルトの名無しさん
2022/02/25(金) 11:17:47.06ID:9DGl33if
>>912
こういうわかってそうで全くわかってないレスは疲れるわ
914デフォルトの名無しさん
2022/02/25(金) 11:47:16.86ID:ydtDuSNe
>>910
「Rustがメモリ安全をコンセプトとするなら、(メモリ安全から外れる)unsafeが必要になる事態を放置するべきではない」ということだよ。
最小ライブラリとかはあくまで開発方針で、コンセプトの根幹となるメモリ安全を犠牲にしてまで優先する話じゃないということ。優先順位付けが間違っている。
まぁ、スレ違いだからこれ以上続けないけど、そういうのを棚に上げてgoを攻撃するのはダサいと思うわ。
915デフォルトの名無しさん
2022/02/25(金) 11:57:21.98ID:ifNOEbaN
>>912
2番で良いも何も無くて、まず「全てにおいて1番というシンプルな解は無い」なんよ。
だから「Rustが1番、Goが2番、でも書きやすいからGoを使う」という発想がおかしい。
「この案件にはGoが1番良い」という発想でGoを選定するんよ。
科学分野での競争を強いられた結果、道具が先鋭化しただけでしょ。十分に1番を目指してるよ。

プログラミングのパラダイムとしてのasyncであれば、goは同期関数のように書いてもほぼ全ての行に対してasync/awaitだよ。それがgoroutineなんよ。mainもgoroutineだからね。
それをN:Mスレッドで回すの。

try-catchが全てにおいて良いかと言うとそうでもないから、goは多値で返したんよ。
そうではない言語であればtry-catchは必要だと思うよ。
そしてasync/await・Promise以前のtry-catchは使い物になりません。
916デフォルトの名無しさん
2022/02/25(金) 12:04:36.06ID:u7rOKKj6
>>914
それはunsafeを理解していない
unsafeを悪だと勝手に思い込んでいるようだがそれは違っていてunsafeは必要不可欠なもの
まず言語に関係なく「unsafeな操作無しではほとんどの構造を書けないもしくは効率的に書けない」という当たり前の事実がある
そこでRustは「型やモジュールの内部にunsafeを閉じ込めて安全なインタフェースだけを外に出す」という戦略で出来た言語

したがって標準ライブラリか外部ライブラリかに関係なく両方とも
・それらが提供する型やモジュールの内部はunsafeが存在する(もちろんゼロの場合もある)
・それらが提供する型やモジュールの外部インタフェースは安全である(ことが求められる)
全てがこの原則で作られている
一方で従来の言語C/C++ではunsafeな操作がプログラム全体に散在してしまい安全性を保証できなかった
917デフォルトの名無しさん
2022/02/25(金) 12:10:17.45ID:aDhOSI3t
>>912
RustはGoと異なり非同期タスクをスタックレスで実現している上に
RustはGoと同じくtry-catchを採用していないね
918デフォルトの名無しさん
2022/02/25(金) 12:34:23.12ID:ydtDuSNe
>>916
だからスレ違いと言ってるだろ。
しかも「メモリ安全から外れるunsafeが必要になる事態を放置している」の反論になってないし(標準ライブラリで赤黒木とか二重リンクリストを持っている方が結果的にメモリ安全にしやすいのは変わらない)。
これ以上やるならRustスレにコメしてくれ。
919デフォルトの名無しさん
2022/02/25(金) 13:28:20.21ID:aDhOSI3t
>>918
それは君の理解不足
unsafeな操作はプログラミングをする際に絶対避けることはできないけど
それをできる限り小さな狭い範囲に閉じ込め、かつ、その外に影響をもたらさないように設計しよう、というのが根幹
次に、二重リンクリストも二分木もRustの標準ライブラリにある
もし万が一その仕様が気に入らないなら他のクレートを探すか自作すればよい
どこに不満があるのかすら君は言うことさえ出来ずに君はイチャモンを付けているだけ
920デフォルトの名無しさん
2022/02/25(金) 13:54:38.00ID:kxjR7eze
>>919
go関係なさすぎ
921デフォルトの名無しさん
2022/02/25(金) 14:00:53.92ID:9DGl33if
>>919
完全に同意
922デフォルトの名無しさん
2022/02/25(金) 16:05:49.05ID:kxjR7eze
>>919
転送しました
http://2chb.net/r/tech/1644596656/91
923デフォルトの名無しさん
2022/02/25(金) 16:13:12.03ID:iu2arc+w
Rustスレでいつもホラ吹いてて隔離されてるやつだからさ
Go vs Rustみたいな隔離スレ立ててかまいたいやつだけが相手してやるといい
924デフォルトの名無しさん
2022/02/25(金) 16:57:45.37ID:u7rOKKj6
>>919
同意
その点を彼は全く理解できてないんだよ
そして彼は>>914でも「unsafeが必要になる事態を放置するべきではない」とか意味不明な主張をしてる
925デフォルトの名無しさん
2022/02/25(金) 17:20:54.95ID:kxjR7eze
>>923-924
Rustスレでやれ
926デフォルトの名無しさん
2022/02/25(金) 17:48:16.43ID:MtnpFyFt
せっかく対処法教えてやったのに
ちなみにそいついつも一人二役で自分のレスに安価付けるからw
927デフォルトの名無しさん
2022/02/25(金) 21:14:02.35ID:aDhOSI3t
>>925
俺が>>919で書いたことはRustも書くプログラマーにとっては基本的な常識なのでRustスレにおいては異論すら出ないため無意味だぜ
その基本的な常識を理解せずに間違ったRust批判をこのGoスレでする人がいたから説明したまで
928デフォルトの名無しさん
2022/02/25(金) 21:35:23.89ID:dqMip1aQ
このおじさん勢いあるスレならどこにでも湧くな
929デフォルトの名無しさん
2022/02/25(金) 21:47:06.20ID:3Y4Z8gJm
こんなおじさん昔はいなかったのにどこから湧いてきたんだろう
930デフォルトの名無しさん
2022/02/25(金) 21:57:26.52ID:cRacAjKI
退職してすること無くて暇なんじゃね?
931デフォルトの名無しさん
2022/02/25(金) 22:05:54.67ID:LgZQhCZj
観察者効果で生まれた
932デフォルトの名無しさん
2022/02/25(金) 22:10:44.84ID:31pfTetO
そのおじさん昔からいるぞ
昔はコテハンも使ってたが相手にされなくなったてやめたみたい
Ruby君と並ぶ有名人
933デフォルトの名無しさん
2022/02/25(金) 22:50:23.56ID:9DGl33if
>>925
RustスレはRustそのものの議論をするスレだから他言語との比較はやらないだろ
↓こっちのスレの方に行ってもらったほうがいいと思う。
次世代言語23 Go Nim Rust Swift Kotlin TypeScript
http://2chb.net/r/tech/1638086359/

もしくは↓このスレがあるんだったら
C vs C++ vs Rust Part.3

golang vs Rust Part.1
みたいなスレを作るとか
934デフォルトの名無しさん
2022/02/25(金) 22:52:44.27ID:S5tvR1Yl
Rust vs その他
みたいなスレにまとめてくれ
935デフォルトの名無しさん
2022/02/26(土) 01:11:35.81ID:kpnhrKVl
>>915
> だから「Rustが1番、Goが2番、でも書きやすいからGoを使う」という発想がおかしい。
この発想は俺は別におかしいとは思ってない。
例えばアメリカでは「Pythonで書け」と言われるらしいが、これは、
「Pythonは糞だが誰でも読める。前任者がいなくなっても後任者がすぐ見つかる」からであり、
自分個人で完結する物以外は言語特性や好みだけで選べるものでもない。
だからWeb系なら「とりあえずJS/TSで書け」となるのが妥当、という話はすでに788でした通り。
が、まあ、これはさておき、

> 「この案件にはGoが1番良い」という発想でGoを選定するんよ。
だからこれは何なんだよ?という話だろ。Web系ではない、というか、
TS/Node/Rustが出てきた時点でWeb系に最適な解ではなくなったというのは792,857で言ったとおり。


> プログラミングのパラダイムとしてのasyncであれば、
> goは同期関数のように書いてもほぼ全ての行に対してasync/awaitだよ。それがgoroutineなんよ。
これは言いすぎだが、goroutineでasyncの代替になるのは事実だ。
ただ、そういう書き方って基本的にしてないでしょ。
多くの人はマルチスレッドだと思って書いてるし、Goの公式ドキュメントもそうだったと思ったが。
(goroutineは非同期を実現するための物です!!!なんて謳ってたっけ?)

マルチスレッド:同期関数を実行するスレッドが沢山。
 単に高火力を必要とするならスレッドを複数起動して既にあるコードをぶち込めばOK。
非同期:非同期ジョブは『どの順で完了しても』問題なく動くように書く必要があり、
 また、非同期ジョブの実行順/完了順の指定も出来ない。
 (だから数珠繋ぎにするしかなく、コールバック地獄だPromiseだ、という話になる)

だから非同期の場合は根本的にマルチスレッドとはプログラミングを変える必要があって、
具体的にはイベントドリブンで書く事になる。だからJSにはmainがない。
ところがGUIもイベントドリブンで書くので、元々GUI担当のJSとは相性がいい。
(というか、だから当時は異端でしかない「非同期」を採用したのかもしれないが)
936デフォルトの名無しさん
2022/02/26(土) 01:11:53.09ID:kpnhrKVl
逆にmainがあるのは、
mainから入って、高火力が必要ならスレッド起動で同じコードを走行させる、という
マルチスレッドのパラダイムに適した構造だ。
だからmainがある言語、例えばCでGUIを書くと悲惨なコードになる。元々イベントドリブン向きに出来てないからだ。
Goも同じで、基本的にはfork/joinを完結にgoroutineで出来るようにしてるだけで、それはマルチスレッド向けだよ。

つっても非同期スタイルで書けば書けるのも事実だけどな。
819のベンチでGoはAsynchronousTCPとなってるが、これはそういう事なのかね?
なおNode(multithread)に1.5倍も負けてるのは、多分ランタイムの問題だよ。
JSは非同期専用のランタイムであり、それに対してマルチスレッド向けのランタイムに非同期コードを載せて非同期にしたくらいでは並べない。
というか、静的コンパイル言語がJITとはいえ動的言語に大差で負けてる事自体があり得ない事で、
これは「同じ土俵で戦えていない」事を意味する。一つはランタイムで、本来は、
・精々マシンスレッドと同程度〜数倍程度のgoroutine用
・マシンスレッドの100-1000倍以上程度のgoroutine用
・非同期コード用
とチューニングや内部構造を変えたランタイムを用意すべきだよ。
資産はコードであり、ランタイムは交換すればいいだけなので、やればいいだけだと思うのだけど。(もうやってるかもしれないが)

あとついでに言うと、ランタイムはやっぱりC/C++で書くべきだよ。境界チェックを遅くなる言い訳にするのなら特に。
Go/Rust共に、「これでCのコードはなくなりました!えっへん!」ってな事をやってたと思ったが、
ランタイムが遅いようでは勝負にならないからね。
「GoをメンテするためにはGoだけ知っていれば十分で、Cを知っている必要はない」ってのはコミュニティの宗教として重要なのは分かるけども、
実用性を考えたら、ランタイムなんて糞速い事が重要であって、何言語だっていいでしょ。
この辺、スクリプト言語はDSLだとわきまえてて、ランタイムを自言語で書こうとかいう無駄な事をやってない。
937デフォルトの名無しさん
2022/02/26(土) 01:13:02.46ID:kpnhrKVl
> そしてasync/await・Promise以前のtry-catchは使い物になりません。
これは言いすぎ。try-catchはろくでもないが、無いよりはましだし、同期でシングルデータならまあ問題ない。
だからGoもtry-catchでも良かったはずだが、採用してないところを見ると、
「多くの場合はtry-catchがgoroutineを跨いで使い物にならない」と思ったのだろう。
ゆうてもGo流の多値返しはCよりはまし程度で、それ以上でもないが。

ただ、try-catchがgoroutineを跨ぐ想定なら、
メインスレッドが仕事を起動し、各goroutineで子細の処理をこなす、マルチスレッドの構造を想定している。
非同期なら、メインスレッドはイベントループだけを担い、手が空いたgoroutineにその都度ジョブを発給する事になるけども、
この場合はジョブの起動はgoroutine内からで、try-catchは完全に機能する。
JSの場合はI/Oを非同期にする事を義務づけらてるからtry-catch内にI/Oが入った時点で意味を為さないし、大体このパターンだが、
Goの場合はI/Oも同期で書けるのだから、全く問題ない。
だからやっぱり元々の想定はマルチスレッドで、文法的には非同期も特に苦労せずに書ける、ってことだと思うのだけど。
(JS的な全面的非同期を想定していた場合は、try-catchを不採用にする理由がない。当時でも既にtry-catchが主流だった)

>>917
> RustはGoと同じくtry-catchを採用していないね
これ、今見たところPanic方式らしいが、もしかしてGo由来?

try-catchは好きな人は大好きのようだが、俺にはどうにもあれがいいとは思えない。
個人的には、リソース返却ならC#のusingが正解で、
リトライなら、大体元データが壊れてて無理で諦めるのでPanicで問題ない。(エラー通知だけ出来れば十分)
だからtry-catchは非同期では使えない過去の異物として消滅して欲しかったのだけど、
C#がasyncでも無理矢理try-catch出来るようにしたのでちょっと驚いてる。
そこまでしてtry-catchしたくもないし、する内容もないんですけど、ってね。
ある意味JSの「catchなんてしなくても何も問題ないです」というJavaから見れば卒倒しそうな仕様も、解の一つではあると見てる。
938デフォルトの名無しさん
2022/02/26(土) 06:42:38.06ID:BX4iLvdt
>>937
JavaScriptの非同期呼び出しでも普通は無視せずPromiseにcatch付けて捕獲するぜ
例: async_func_foo.catch(err => console.log(err))
あとRustの非同期呼び出しもResultが帰ってくるからエラーを捕獲できる
939デフォルトの名無しさん
2022/02/26(土) 07:29:58.26ID:xkMoRRzB
Goを叩く為にJavaScriptを使ってるだけで、JavaScriptの理解度かなり浅いなこのおじさん。
しかしこんなおじさんがずっと暴れてんのか、全然議論できないじゃん。対策としてはワッチョイ導入くらいしか無いだろうね。
940デフォルトの名無しさん
2022/02/26(土) 08:20:49.61ID:W5JOGvZg
長い文章ダラダラ書く人ってプログラマーの素質ないよ
文章を短く簡潔に書ける人ってプログラムも同様に書ける
941デフォルトの名無しさん
2022/02/26(土) 08:45:19.95ID:kpnhrKVl
>>938
> 例: async_func_foo.catch(err => console.log(err))
これは字が赤いか黒いかの違いしかないけどな。

まあ俺はtry-catch消極派だから、Go/Rust方式で問題なく、C#の仕様はオーバースペック過ぎるけど、
Goの場合はJSとは違ってtry-catchはそれなりに機能するはずだから、不満持ってる奴もそれなりにいるはずだけど。
(そういう連中は既に去ってる気もするが)
942デフォルトの名無しさん
2022/02/26(土) 09:09:48.94ID:yRlIqUsp
発想が違う、どの案件でも、その案件にとって1番だから使う、と言う言葉が伝わってないのか?
俺も十分、言外の言葉は理解できないタイプだが、流石に通じると思うんだが。

書きやすい、読みやすいからこれを選定した、と言うのは「1番」でしょ。

基本的にそういう書き方してると言うか、自然に書くとそうなる。これはドキュメントに書いてあっただろ。

非同期とマルチスレッドを分けて考えろよ…。

実際にはnodeもそうだけど、C#のTaskなんかに関してもめちゃくちゃ解像度甘いのでは?
943デフォルトの名無しさん
2022/02/26(土) 09:10:48.16ID:yRlIqUsp
goだと、非同期スタイルで書けるとかでなくて、ブロッキング関数、同期関数を書いたとしてもgoroutine間では適切にスイッチングされて、他の言語で言うawaitがかかってるんよ。常に低コストで。
それはN:M軽量スレッドだからなし得ることなので、他の言語ができてない以上何とも比べづらい。
944デフォルトの名無しさん
2022/02/26(土) 09:11:12.66ID:yRlIqUsp
オール想像で喋ってるよな、こいつ。
945デフォルトの名無しさん
2022/02/26(土) 09:42:59.75ID:Cq56y6gH
>>939
ワッチョイは浪人生の自演が捗るだけ
946デフォルトの名無しさん
2022/02/26(土) 09:45:22.81ID:Zjg02ogZ
ローニンでワッチョイ消してるやつ正規表現で弾けばええやん
947デフォルトの名無しさん
2022/02/26(土) 09:55:57.50ID:UdeBSueS
自演するのにワッチョイ消すバカはおらんやろ
948デフォルトの名無しさん
2022/02/26(土) 10:07:05.87ID:xkMoRRzB
荒らしの手間が増えるだけで十分価値がある
949デフォルトの名無しさん
2022/02/26(土) 10:19:30.57ID:kpnhrKVl
>>943
> ブロッキング関数、同期関数を書いたとしてもgoroutine間では適切にスイッチングされて、他の言語で言うawaitがかかってるんよ。
これは普通はマルチスレッドと言う。Thread/goroutineを複数(マルチ)起動して引っかかったらスイッチングさせるだけなのだから。
そして大概の言語はこれを自然に書けるようになってる。

> それはN:M軽量スレッドだからなし得ることなので、他の言語ができてない以上
これが嘘、というか誤解。他言語でもいくらでもスレッドを起動する事は出来る。(が余計に重くなるので普通はやらない)
goroutineもGo信者が言う程軽くもないのでいくらでも起動していいわけではない。(現実的には)

これを脳死でgoroutineはコストゼロ、だからgoroutineに切り出す事がプログラマの仕事である、と解釈できれば美しいのだが、
これを実際に試して「思ってたよりも全然パフォーマンスが出ねぇ、これならNodeの方が速ぇ…」となった顛末を書いてたのが何度も言ってるブログ。
これは言語と言うよりはランタイムの問題だけど。
950デフォルトの名無しさん
2022/02/26(土) 11:28:52.99ID:nWK21oqu
JSのPromiseは非同期の扱いとしてはかなり好き
951デフォルトの名無しさん
2022/02/26(土) 12:15:41.10ID:pDCyYMqI
>>949
N:Mのグリーンスレッドであって単なるマルチスレッドじゃない。
単に引っかかったら切り替えるんでなくてスティーリングまでやるのは他の言語の言語標準機能にはErlangぐらいにしかない。

どこが嘘なんよ。
コストゼロでは無いが、いわゆるスレッドよりは遥かに軽いぞ。
952デフォルトの名無しさん
2022/02/26(土) 12:16:18.51ID:pDCyYMqI
総じて知らんだけでは?
953デフォルトの名無しさん
2022/02/26(土) 12:35:54.23ID:Zen8kEK8
わからせようとするのが無駄だって何で気づかないかな
954デフォルトの名無しさん
2022/02/26(土) 12:41:19.24ID:D1V+AmSx
>>940
論理構成がしっかりしてて読みやすければ長文でもいいんだけどね
このおじさんはそこが壊滅的だから明らかに素質ないわな
955デフォルトの名無しさん
2022/02/26(土) 12:50:12.55ID:xkMoRRzB
抽象化できず同じ事何回も書く傾向にあるから、凄いコード書きそう
956デフォルトの名無しさん
2022/02/26(土) 12:58:01.48ID:862GBE0V
>>955
というか、
短い=良い
もしくは
simple=beautiful
というセンスが欠落している。
あんな汚い長文ぞっとするわw
まあ.{50}でNGにしてるけど
957デフォルトの名無しさん
2022/02/26(土) 13:27:19.11ID:fRC8OZTs
Goの(疑似スレッド+)goroutineのパフォーマンス計測っていいやつないの?
↓見つけたやつ
Goroutines Are Not Significantly Smaller Than Threads
https://matklad.github.io//2021/03/12/goroutines-are-not-significantly-smaller-than-threads.html
958デフォルトの名無しさん
2022/02/26(土) 13:41:54.09ID:CoGWNwI7
Goってぶっちゃけ言語機能とか割とどうでもよくて、
・ビルドやデプロイや運用がシンプル
・本家の開発体制が保守的で、長期的に安定したサポートが期待できる
という点がメリット
極力作りっぱなしで放置したい類のものに向いてると思うんだよね
Goしかできない奴やGo大好きで使ってる奴もまずいないだろうし、こんなもん執拗に叩いて何がしたいの
959デフォルトの名無しさん
2022/02/26(土) 13:51:01.17ID:bMt+E6tQ
CLIツールはともかく一番使われてるWeb APIは放置したいものとは対極だろう
960デフォルトの名無しさん
2022/02/26(土) 14:05:08.22ID:nWQ4XblH
APIはむしろどっちかというと放置したい系じゃね?
フロントと表裏一体みたいなのもあるけど、そういうのにGoはあまり採用されないでしょ
961デフォルトの名無しさん
2022/02/26(土) 14:21:48.69ID:yRlIqUsp
確かにそうだな。わかろうとしないし、伝わらない気がしてきた。
Rust最高とRustスレで言っててくれれば良いか。

>>958
これはあるよね。
1つ前のバージョンどころか、それなりに昔のGoのプログラムですら修正せずにコンパイルできる。
962デフォルトの名無しさん
2022/02/26(土) 16:17:55.72ID:kpnhrKVl
>>951
やってないのはやる必要がないから。
他言語も馬鹿ではないので、改善の努力はしてるし、いい点があったら平気でパクってる。

(Goはgreenthreadで全て解決!と謳っているわけではないけども、そうだとしたら)
そのアイデアは面白かったが、現実的ではなかった。
(ただしこれはランタイムの問題だから改善の余地はあるはず)

非同期はコードがうざくなるのは事実だが、async文法でほぼ払拭された。
だからみんなパクってる。


まあ完全にループだし、材料枯渇でここら辺で終わりかな。
そりゃ信者の念仏を何度聞いても翻意する事はないよ。俺は文系ではないし。
こちらの見解では説明出来ないデータが出て来たら、分析して、考えを修正するけど。



>>957
virtualの40MBを単純に合算したら、今は4倍軽くて、4k/goroutine時代は2.5倍軽かったという事か。
フットプリントだけの比較ではあるが。
だから極めて単純に言えば、他言語のスレッドでジョブを4つずつ束ねて処理する運用をすれば、
フットプリントでは並んで、速度は余分なスケジューラが入ってない分勝てる事になる。
963デフォルトの名無しさん
2022/02/26(土) 17:32:36.09ID:nY3OEggH
>>960
そりゃWebのフロントエンドに比べりゃなんだって放置したい系になるだろ
Webの場合はバックエンドでもWebフレームワークをサポートバージョンに維持する必要があるから
長くても3〜5年すればコードを変更することになる
964デフォルトの名無しさん
2022/02/26(土) 17:33:24.82ID:117KIGn2
>>958
言語機能は本当に20世紀に設計された言語なのかと
疑いたくなるね
ほぼGCがあるCを書いてる感覚に近い
C書けない人が書ける言語じゃないと思う
965デフォルトの名無しさん
2022/02/26(土) 18:00:31.99ID:yRlIqUsp
>>962
はい、じゃあ言質も取れたのでRustスレに戻って下さいね
966デフォルトの名無しさん
2022/02/26(土) 18:06:45.33ID:yRlIqUsp
>>963
そうか?コアAPIに関してはあんまり手を入れないけどな。
Webフレームワーク次第なAPIってどんなの?
967デフォルトの名無しさん
2022/02/26(土) 18:16:48.89ID:nWQ4XblH
>>966
SPAのすぐ裏でUIの要件に合わせて作るようなやつのことじゃね?
そういうのはそもそもGoを採用しないと>>960で書いた通りだ
968デフォルトの名無しさん
2022/02/26(土) 19:00:50.19ID:yRlIqUsp
>>967
なるほど。BFF的なやつ。
たしかにGoで書くまでもないし、ノンコーディングもあるよね。
969デフォルトの名無しさん
2022/02/26(土) 19:13:38.66ID:nWK21oqu
正直なんだかんだ言って、学習コストに対しての性能パフォーマンスが異様に高いというところがGoの魅力
言語仕様がコンパクトだからミスしにくい(気がする)のも良い
チャネルに容量があることを忘れるうっかりさん以外には

得意な機能は限られててGUIとかは苦手だけど、そんなもんC#やらに任せとけばいいや
970デフォルトの名無しさん
2022/02/26(土) 19:41:27.25ID:cxVkNmoR
Goの魅力はケン・トンプソンなんよ

https://en.wikipedia.org/wiki/Ken_Thompson#2000s
> When the three of us [Thompson, Rob Pike, and Robert Griesemer] got started, it was pure research.
> The three of us got together and decided that we hated C++. [laughter] ... [Returning to Go,]
> we started off with the idea that all three of us had to be talked into every feature in the language,
> so there was no extraneous garbage put into the language for any reason.

彼が"we hated C++"つって作っただからそらもうみんな嬉しいやろ
971デフォルトの名無しさん
2022/02/26(土) 19:44:13.98ID:fRC8OZTs
結局>>957よりいいパフォーマンス計測ってないのかー
個人的感想としては。。。
パフォーマンスについて特筆すべき利点はない
原理的にスレッドプールを使った他言語のコードと同程度の性能が出る
機能的な利点はグリーンスレッドを言語で持っており、自動でOSスレッドと使い分けられる点(記述量低&必要メモリ低)
逆に欠点はスケジュールをコントロールする方法がGOMAXPROCS以外ない点ってところかな
972デフォルトの名無しさん
2022/02/26(土) 20:07:50.21ID:nWK21oqu
>>971
優先度がないのはちょっぴり残念ではある
…ないよね?
973デフォルトの名無しさん
2022/02/26(土) 20:31:14.25ID:kpnhrKVl
>>969
> 学習コストに対しての性能パフォーマンスが異様に高い
Cの方が高いけどな。Goよりも小さい仕様で速い。
あとC#もGUIはゴミだぞ。それ以外がいいからunityを制覇してるが。
974デフォルトの名無しさん
2022/02/26(土) 21:20:48.95ID:4mZJSMD8
>>943
>> それはN:M軽量スレッドだからなし得ることなので、他の言語ができてない以上何とも比べづらい。

RustもM:Nモデルだよ
Goと同じく複数の非同期タスクを複数のOSスレッドに割り当て
しかもGoとは異なりスタックレスなのでGoよりも軽量タスクを実現しているよ

>>951
>> スティーリングまでやるのは他の言語の言語標準機能にはErlangぐらいにしかない。

RustもGoと同じM:Nモデルでワークスティーリングもしているよ
Rustでは以下のランタイムを選ぶことができるよ
・1:1モデル (=M:Mモデル、OSスレッドそのまま利用)
・M:1モデル (シングルOSスレッドで並行マルチタスク)
・M:Nモデル[スレッドプール方式]
・M:Nモデル[ワークスティーリング方式]
975デフォルトの名無しさん
2022/02/26(土) 21:35:40.76ID:yRlIqUsp
>>974
それは処理系標準?それとも準標準?
976デフォルトの名無しさん
2022/02/26(土) 21:58:06.53ID:kpnhrKVl
>>974
それ以下と定義が同じだと、一般的には「ワークスティーリング方式」を「スレッドプール」と呼称するよ。(だからC#のもこれのはずだけど)
https://tech-blog.optim.co.jp/entry/2019/11/08/163000
Rustで何故あえて方言にしているのかは知らん。
というかワークスティーリングじゃない方のメリットなんてない気がするんだが。
977デフォルトの名無しさん
2022/02/26(土) 21:58:10.74ID:nPeFYJEF
>RustもGoと同じM:Nモデルでワークスティーリングもしているよ

VMじゃないのにどうやって実現してるのかな
978デフォルトの名無しさん
2022/02/26(土) 21:59:12.46ID:4mZJSMD8
>>975
RustはGoと真逆で標準ライブラリとは最小限のものに限る位置付けなので
標準ライブラリには非同期ランタイムを作るための枠組みだけが存在していてランタイム自体は無しだよ
これは全ての分野について同じ方針でRustでは標準+準標準(デファクトスタンダード)を使ってプログラミングをするよ
979デフォルトの名無しさん
2022/02/26(土) 22:13:34.76ID:4mZJSMD8
>>976
そこは一般的は話としてまずOSスレッド毎にキューと持つかグローバルにキューを持って割り振るかの2大方式があるよ
それぞれに利点と欠点があってそこは省略するけど
GoもRustもそのハイブリッド方式となっていて普段はスレッド毎にキューを持って各OSスレッドが独立に効率よく処理だね
そしてGoもRustもグローバルにも管理して暇なOSスレッドが生じるとそこへ割り振る(OSスレッドから見るとスティール)するよ
詳細はここで書ききれないほどもう少し複雑だから省略してる点はそれぞれの解説サイトなどを見てね
980デフォルトの名無しさん
2022/02/26(土) 22:54:22.46ID:kpnhrKVl
>>979
Goと同じなら805のリンクの内容と同じだからああそうですか程度。
資料が古いがC#のは以下で確認した。同様にハイブリッドでスティーリングもあり。
(ただ.NET6.0とかだともう変わってそうだが)
https://ufcpp.net/study/csharp/misc_task.html
基本グローバルキューで、ただし優先順位はローカルキュー>スティーリング>グローバルキューになってる。
この構造はまあ納得。

> GoもRustもそのハイブリッド方式となっていて普段はスレッド毎にキューを持って各OSスレッドが独立に効率よく処理だね
> そしてGoもRustもグローバルにも管理して暇なOSスレッドが生じるとそこへ割り振る(OSスレッドから見るとスティール)するよ
無駄に複雑で余計に遅くなると思うけどね。.NETの方が単純ですっきりしてていい。
グローバルキューから取り出す時の競合を気にしてるのなら、
Goみたいに100,000goroutineとか目指す場合は分かるけど、Rustは基本そうじゃないだろうから、チューニングミスだと思うけど。
981デフォルトの名無しさん
2022/02/26(土) 23:02:07.46ID:Gc6jVciw
Goは別に最速を目指している言語じゃないからね
もし何かのベンチマークが最速になってしまったら逆に驚くよ
そのベンチ間違ってるだろ、って。
982デフォルトの名無しさん
2022/02/26(土) 23:40:35.78ID:BX4iLvdt
>>977
VMじゃないと起きる問題点は何?
いずれにせよC/C++/RustはVMでもOSでも記述できるのだからそこに不可能は無い

>>980
言語に関係なくシステムスレッド間のグローバルな操作はデータ競合回避など一定のコストがかかる
だから可能な限り個別にシステムスレッドが動くようにしつつアイドルが出ないよう最小限のグローバル操作
この部分はよほど上位で制約のある仕様としていないならば全ての言語で同じ
983デフォルトの名無しさん
2022/02/26(土) 23:48:39.58ID:yRlIqUsp
>>978
これがなぁ…。過渡期は混ぜるな危険で困らない?そこが不安。
Rustも良いとは思うんだけど、爪切るのにハサミ使ってる気分になる。
984デフォルトの名無しさん
2022/02/26(土) 23:59:29.99ID:kpnhrKVl
>>982
それはハードによる。
x86はハードウェアでキャッシュコヒーレンシを取ってくれるので実は共有RAMでもコストは安い。
.NETがローカルキューからの取り出しでFIFOとFILOで競合が減るから、というのはそういう事。
Goの場合はARMを見てるのか、MacがARMに乗り換える布石だったのか、
以前からやたら「共有RAMは遅いから使わない」としてきてるが、
ぶっちゃけx86の場合は
(書き込み頻度と量によるが、タスクの起動=関数ポインタ1つと引数のポインタ程度なら)
OSを利用したチャネル接続よりも共有RAMの方が実は速い。
ここら辺を理解してない奴がグダグダやってるからチューニングし切れてないのだと思うよ。
985デフォルトの名無しさん
2022/02/26(土) 23:59:34.35ID:4mZJSMD8
>>980
>> Goみたいに100,000goroutineとか目指す場合は分かるけど、Rustは基本そうじゃないだろうから、

Rustの非同期タスクはGoroutineよりも更に軽くて
Goとは異なりスタックレスなので付加メモリ消費も非同期ランタイムの管理データ分の1タスクあたり64bytesで済みますよ
そしてグローバルキュー競合コストの件は>>982のように同じですね
986デフォルトの名無しさん
2022/02/27(日) 00:02:30.74ID:2GGoVw4G
>>982
問題があると言っているわけじゃなくて、VMやOSじゃなければプリエンプションできないからどうやっているのかなと。
987デフォルトの名無しさん
2022/02/27(日) 00:03:38.38ID:uWHjNeVw
>>973
Cはお爺ちゃんだから…
Cからの乗り換えコストっていう視点でどうかひとつ

あ、でも実装系別の頭おかしくなるコンパイルオプションやらバウンダリやらのメモリモデル考えると、Goのほうが実質勝ってないか学習コスト?
988デフォルトの名無しさん
2022/02/27(日) 00:11:21.81ID:uWHjNeVw
>>973
ちなみに速さやらサイズでは当然にCとかの圧勝だろ普通に
関数呼び出しごとにオーバーヘッドのかかるGoが単純な速度で勝てる道理はない
989デフォルトの名無しさん
2022/02/27(日) 00:23:35.14ID:uWHjNeVw
>>973
C#というか.Netのwpfは好き
一般的な手法じゃないだろうけど、MVVMのVM部分を単体テストできて(ディスパッチャ細工してメインスレッドで走らせる)
990デフォルトの名無しさん
2022/02/27(日) 00:44:59.79ID:PVy06kKY
>>985
> Goとは異なりスタックレスなので
やたらこれを強調しているが、goでもgoroutineにローカルキュー(=関数ポインタの配列)を用意して、順に食わせれば、
各タスク毎にスタックを用意する必要なんて無くて、普通にエミュレーション出来るよ。
(ただしGo信者的にはこれは負けだからやらないとも思うが)

ただこの場合、各タスクが止まらない前提ならこれでいいが、
止めて切り替える分には一般的にはスタック領域が必要になる。
(自動変数を全部ヒープ上に確保すればスタック無しでもいいが、これは遅くなるので多分やってないと思う)
ユーザーが確保しなくていいだけで、実際はランタイムかコンパイラが確保してくれてるだけじゃないか?
991デフォルトの名無しさん
2022/02/27(日) 00:50:50.94ID:PVy06kKY
>>988
> 関数呼び出しごとにオーバーヘッドのかかるGo
かからないような気がするが、自信はない。かかる理由って何?
992デフォルトの名無しさん
2022/02/27(日) 02:41:36.05ID:uWHjNeVw
>>991
Goは関数呼び出しごとにスタックをチェックして、不足してたなら拡大するから
関数ごとの静的な自動変数サイズと比較してるだけだと思うけど、そういう処理のおかげで初期スタックサイズを抑えてる
https://postd.cc/performance-without-the-event-loop/
993デフォルトの名無しさん
2022/02/27(日) 02:47:33.19ID:uWHjNeVw
>>991
「十分な空間がない場合、ランタイムはヒープに対して大きなスタックセグメントを割り当て、現在のスタックの内容を新しいセグメントにコピーし、古いセグメントを解放し、それから関数呼び出しを再開します。」
994デフォルトの名無しさん
2022/02/27(日) 03:00:02.25ID:uWHjNeVw
>>991
毎回拡張する訳じゃないけどそのためのチェックは毎回走るんで、単にサブルーチンを呼ぶだけの他言語よりは余分な仕事をしている
おそらくチェックは必要な回数だけだとは思う(ループ内での呼び出しとかの最適化は考えてないとは思わないから)
995デフォルトの名無しさん
2022/02/27(日) 06:52:35.32ID:+yReYAPt
compiler explorer(https://godbolt.org/)で、goコンパイル結果を普通のamd64用のアセンブラ見ること出来ないの?(Plan9でなく)
996デフォルトの名無しさん
2022/02/27(日) 07:42:28.85ID:uWHjNeVw
次スレ建ててくる
997デフォルトの名無しさん
2022/02/27(日) 07:44:00.44ID:uWHjNeVw
Go language part 5
http://2chb.net/r/tech/1645915400/
998デフォルトの名無しさん
2022/02/27(日) 07:56:25.05ID:nXG/aSfD
>>990
Rustの非同期タスクは内部的には単純な状態マシンとなり何度も再入可能なコルーチンと同じ状況になります
その中の変数はRustのクロージャがその環境の変数をキャプチャするのと同じだからもちろんメモリを確保します
だからスタックレスで何度も呼べるクロージャみたいな状況でスタック自体はプロセス全体で1本のままとなります
もちろんその非同期タスクから他の非同期でない普通の関数を呼べば通常と同じくスタックが伸びて使われていきます
一方でその非同期タスクから他の非同期な関数を呼ぶとその非同期タスクから一旦離脱してスケジューラーへ戻ります
最初に書いたように「単純な状態マシンとなり何度も再入可能なコルーチン」となっているので再び再開できます
以上がスタックレスなのにRustの非同期タスクがメモリの許す限り多く動くことができる仕組みです
999デフォルトの名無しさん
2022/02/27(日) 08:07:16.26ID:c9v4owXb
ワッチョイ無しかー(´・ω・`)
1000デフォルトの名無しさん
2022/02/27(日) 08:16:41.16ID:+yReYAPt
goroutineとC++標準ライブラリのスレッドを比較するために>>957のmain.rsのC++版だけ作ってみた(ループは一桁減らした)
$ cat main.cc
#include <thread>
#include <chrono>
#include <vector>
using namespace std;
using namespace std::chrono;
int main() {
vector<unique_ptr<thread>> threads;
for (uint32_t i = 0; i < 1000; ++i) {
threads.emplace_back(
make_unique<thread>([=]{
uint64_t bad_hash = (i * 2654435761) % 200000;
this_thread::sleep_for(microseconds(bad_hash));
for (uint32_t _ = 0; _ < 1000; ++_) {
this_thread::sleep_for(10ms);
}
})
);
}
for (auto const& t: threads) {
t->join();
}
return 0;
}
$ g++ -O3 -pthread main.cc -o main && ./t ./main
real 11.04s
user 0.93s
sys 2.95s
rss 11328k
$
結果はmain.rsとほぼ同じで、やはりスレッド起動コストがデカく、rssもデカい
10011001
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 468日 4時間 2分 1秒
10021002
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況



lud20241225030344ca
このスレへの固定リンク: http://5chb.net/r/tech/1605467680/
ヒント:5chスレのurlに http://xxxx.5chb.net/xxxx のようにbを入れるだけでここでスレ保存、閲覧できます。

TOPへ TOPへ  

このエントリをはてなブックマークに追加現在登録者数177 ブックマークへ


全掲示板一覧 この掲示板へ 人気スレ | Youtube 動画 >50 >100 >200 >300 >500 >1000枚 新着画像

 ↓「Go language part 4 YouTube動画>2本 ->画像>6枚 」を見た人も見ています:
Go language part 5
.NET MAUI HighSchool
Oxygen Not Included Part20
Ivy to Fraudulent Game Part2
ビギナーズ-Absolute Beginners-
MacでもLinuxでも使えるVisual Studio Code
[Armour Modeling]〜なんと未受賞だった篇〜
【ブラウザ】Tough Love Arena part1
SOUND VOLTEX EXCEED GEAR TRACK384
シン・ゴジラ GODZILLA RESURGENCE 29
月姫 -A piece of blue glass moon 9
Welcome to the new 'chugoku' board!
【Oβテスト中】Dauntless 【Part3】
【UCGO】UC-GUNDAM ONLINE 第11話 【PS】
Sound Lab mole 大嶋は集団ストーカー 6
Fall Guys: Ultimate Knockout Part24
thee michelle gun elephant vol.1105
thee michelle gun elephant vol.1055
Regular Expression(正規表現) Part15
MS、Googleに続いてLinuxもファーウェイにOS提供終了
thee michelle gun elephant vol.1003
Inter-universal geometry とABC 予想50
thee michelle gun elephant vol.1048
スーパー玉出で俺のAMEXPlatinum使えるか。
SUPER GT GT300クラスを語るスレ 110Lapdown
【HMD】Oculus Go 7【VR/Standalone】
【HMD】Oculus Go 6【VR/Standalone】
Luminous Orange/ルミナスオレンジ Part3
SUPER GT GT300クラスを語るスレ 126 Lapdown
MacでもLinuxでも使えるVisual Studio Code Part2
【LoL】League of Legends 質問スレ Part67
【LoL】League of Legends 1600LP【ipあり】
Jaeger-LeCoultre ジャガールクルト 16th
2019年FreeBSD+IIS+Shopifyで使われる言語3位はLua
ROLEX エクスプローラU [16570のみ] part2
次世代言語Part7[Go Rust Swift Kotlin TypeScript]
VRプログラム雑談【Unity/UnrealEngine】【HTC Vive/Oculus Rift/その他VR】
OpenGL/Vulkanスレ Part23 (48)
Regular Expression(正規表現) Part17 (255)
C++/TemplateMetaProgramming
Vue vs React vs Angular その2
Google NaCl プログラミング 2mol
Vue vs React vs Angular Part.5
Vue vs React vs Angular Part.4
Vue vs React vs Angular Part.4
Vue vs React vs Angular Part.3
【ActionScript3】Webツールを作ろう【GPL】
【Lua】組み込み系言語総合 その6【Squirrel】
MS新フレームワークBlazor、Lighthouseで23点を叩き出すw
Vue vs React vs Angular vs Svelte Part.9
【最速】google guice DI Framework【シンプル】
iOS、Android、Linuxサーバーの三点セット開発
【ワッチョイ有】Vue vs React vs Angular Part.5.5
WPF(.NET4.x, .NET Core) GUIプログラミング Part25
WPF(.NET4.x, .NET Core) GUIプログラミング Part23
【GNU】Emacs Lisp 【Elisp】 (293)
【GNU】Emacs Lisp 【Elisp】 (13)
【分散型バージョン管理】 Mercurial 2【hg】 (373)
【O3D】HTML5用 3D API WebGL 【Canvas:3D】 (819)
WPF(.NET, WinUI) GUIプログラミング Part33 (439)
Vue vs React vs Angular vs Svelte Part.11 (376)
Google Colaboratory
Google Maps API 質問箱
go言語、python言語自信ニキ来てくれ
「COCOA」やっぱり自動テストがなかった
【DI】Java Spring Frameworkを語るスレ 4.0
13:39:37 up 4 days, 14:43, 2 users, load average: 82.21, 78.23, 67.45

in 0.061684131622314 sec @0.061684131622314@0b7 on 011803