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

Go language part 5 YouTube動画>1本 ->画像>7枚


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

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

1デフォルトの名無しさん
2022/02/27(日) 07:43:20.04ID:uWHjNeVw
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。

公式
https://golang.org

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

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

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


※前スレ
Go language part 4
http://2chb.net/r/tech/1605467680/
2デフォルトの名無しさん
2022/02/27(日) 07:45:13.76ID:uWHjNeVw
公式
https://golang.org

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

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

ブラウザ上で試し書き
https://play.golang.org
3デフォルトの名無しさん
2022/02/27(日) 07:46:00.05ID:uWHjNeVw
あ、これ2のテンプレじゃないのか
4デフォルトの名無しさん
2022/02/27(日) 08:59:11.36ID:PVy06kKY
>>992(前スレ)
読んだ。で、やっぱり奇妙なんだけど、多分オーバーヘッドはないと思うよ。

一般的にはガードページなんて必要なくて、コピーオンライトと同じで、
ページ境界を跨いだ場合はハードウェアで検出出来るから、まず普通はそれを使う。
この場合は自前でのチェックは必要ない(ソフトウェアには必要ない)ので、オーバーヘッドはない。
だからGoの当初の初期スタックサイズが4kだったのは非常に納得出来た。ここまではいい。

これを小さくするならハードウェアのサポート無しになるから当然自前でチェックするしかないが、この場合、
・2kも大きすぎ。自分でやるならRustのように64Bytesからとか、4kに拘らず凄く小さいスタックサイズから可能だし、普通はそうする。
・そもそも必要スタックサイズを予見出来ない。というか出来るならコンパイル時に確定的に割り当てれば済んでる。
であって、Rustの実装は非常に納得出来るのだけど、Goのは若干意味不明なんだよ。
(ただまあ何かしら理由はあると思うけど)

2kとかいう、4kに拘ったサイズになってるんだから、多分何かしらハードウェアのサポートを受けてて、
自前ではスタックサイズのチェックはしてないと思うよ。(つまりオーバーヘッドがない)
可能性があるのは、2kをはみ出る時には4k境界を跨ぐようにして(つまりまずは上側を割り当てる)
はみ出た時に2kずらしていくとかだけど。
ただこの方式の場合、初期アロケーションだけは4kでされてしまうので、957のベンチでは40MB越えないとおかしくて、矛盾してる。
だから正直よく分からないが、
多分オーバーヘッドのない方式で実装してて、だから2kとかいう中途半端な巨大サイズになってるのではないかと思う。
5デフォルトの名無しさん
2022/02/27(日) 09:14:34.62ID:PVy06kKY
>>998(前スレ)
分かりやすい説明ありがとう。発想は面白いね。
確かにその方式だと死蔵メモリは最小限に留められ、Goの問題は解決されてるはずだね。

>>986(前スレ)
998の通りだと、外部からのプリエンプションではなく、
コルーチンが処理を(自発的に)返してくるから、その単位での切換だろう。
まあこれでも現実的には問題ない気はする。
6デフォルトの名無しさん
2022/02/27(日) 09:39:32.40ID:+yReYAPt
ちなみに前スレ1000と同じく、1桁少ない1000スレッドで同じPCでgoを測ると
$ go version
go version go1.13.8 linux/amd64
$ go build main.go && ./t ./main
real 12.02s
user 0.91s
sys 0.22s
rss 3808k
$
やはり4Mを超えない(rssでいいの?とは思うけど)
7デフォルトの名無しさん
2022/02/27(日) 10:24:28.50ID:c+lx/lLr
推奨NGWord
正規表現で「.{50}」を設定
長文を排除できます
8デフォルトの名無しさん
2022/02/27(日) 14:25:03.95ID:PVy06kKY
>>992(前スレ)
訂正。他も色々漁って、やっぱりオーバーヘッドはあると思えてきた。
ただし多分0~4cycle/関数呼び出し程度だね。

主に読んだのは以下とか。
https://github.com/tinygo-org/tinygo/issues/2000
https://dave.cheney.net/2014/06/07/five-things-that-make-go-fast
https://dave.cheney.net/2013/06/02/why-is-a-goroutines-stack-infinite

・当初は8kだったが、もっとでかくしろという要求が多かった
・1kに出来てる実装もあるが、こける事もあるから2kがデフォになってる
・同じ図が説明に使われてて、どうやら最初からこの方針らしい

本人達が「チェックしてる」って言うんだからやっぱりそうなんだろう。
一番ありそうな実装は、呼ばれた関数側で最初にチェックする方法で、
つまりローカル変数をスタックに確保するためにスタックポインタからサイズを引く時にチェックする。
これだと、 mov, (sub,) xor, and, jne の追加4命令で(subはチェック無しでも必要)
主にINTパイプで最悪で4cycle、大体の場合はこのあとのLSパイプ(スタック上へのレジスタ待避)に隠れて見えなくなるのではないかと。
だから関数呼び出し毎に0~4cycのペナルティになる。
ただし、速くなる事はないし、隠れると言っても演算リソースは消費するので、
ハイパースレッディングの場合に相手側のCPUの速度が落ちるのは否めないが。

2k以下にもやれば出来るのだろうけど、やる気がないだけだね。
だから2kで問題なら、コンパイラをいじれば何とかなるのだろうけど、
そこまでやるくらいならRustの方が断然いいね。(後発だから当たり前だけど)
9デフォルトの名無しさん
2022/02/27(日) 15:40:03.99ID:F0hGMDSU
関数呼び出しのオーバーヘッドだけど、高階関数らしい高階関数も無いしそういうややこしいことはジェネレーター使う文化だと思ってるな。Genericsが本流になってきたらどうする気だろうもも思ってる。
なお、比較する関数程度の関数はインライン化される。
https://github.com/golang/go/wiki/CompilerOptimizations
10デフォルトの名無しさん
2022/02/27(日) 16:13:39.08ID:PVy06kKY
>>9
> 高階関数らしい高階関数も無いし
いや高階関数は普通に出来る。
https://go-tour-jp.appspot.com/moretypes/25
標準やフレームワークにそれを活用する文化がない、という主張なら俺はその辺は知らん。
11デフォルトの名無しさん
2022/02/27(日) 16:48:28.74ID:F0hGMDSU
>>10
できるけど、Goではやらんのよ。
凄く纏まってる。
https://zenn.dev/nobonobo/articles/e0af4e8afc6c38b42ae1
12デフォルトの名無しさん
2022/02/27(日) 17:20:40.92ID:+yReYAPt
>>6
自己レスです。
Goは1.4からamd64だとスタック2k
https://github.com/golang/go/issues/7514
今回試した1.13.8だと当該コードがCからgoに変わったりして跡形もなかったが、_StackMin = 2048はそのままだった
https://github.com/golang/go/blob/go1.13.8/src/runtime/stack.go
つまり2Mであれば残り1.8Mということで矛盾はない
13デフォルトの名無しさん
2022/02/27(日) 17:32:40.97ID:Xl3wWN+O
>>12
1000個立ち上げなんて1桁減らして測定してるからメモリ使用量がわかりにくいような
素直に1万個と10万個で調べて差を見れば1個あたりがはっきりするような
14デフォルトの名無しさん
2022/02/27(日) 17:44:54.95ID:+yReYAPt
>>13
時間かかるのが嫌で減らしただけです。。。

ちなみに後ろにウェイト入れて、cat /proc/[pid]/statusした結果
VmHWM: 3296 kB
VmRSS: 3296 kB
VmSwap: 0 kB
なので、rssだけでいいと思います。
15デフォルトの名無しさん
2022/02/27(日) 20:47:56.30ID:PVy06kKY
>>11
> 結局のところ素直にforループを書くのがGoには適していて、
> 汎用の型に適用可能な高階関数を実装しようとするのはミスマッチ
これってforEachを実装しようとするのが間違いって事?
或いはmapに高階関数を食わせるのを嫌ってるのか?
いずれにしても、やりたきゃやれよ、だと思うが。

オレオレコーディングルール集だが、全般的に現状肯定的なので、
目指すコーディングではなく、今のGoコンパイラ/ランタイム向けのTips集になってる。
これがどれくらい賛同されるのか不明だけど、革新/改革派からは気に入らない内容だろうよ。
Python出身のようだから、この辺C系の「何でもやっていいけど、結果責任は取れ」文化とは根本的に違うのだろう。
一種類のコードになる事を良しとしてる。

> goroutiineのスケジューラはもちろん依頼処理コストが大きい場合をフォーカスしてチューニングされています。
> ひとつのgoroutineがCPUを占有しすぎないように分散してくれる仕組みがありますが、
> 小さすぎる処理コストをまとめるのは実装者の責任で行わなくてはなりません。
> 小さすぎる処理を頻繁に繰り返すだけであればシングルスレッドの方が速い結果が出るのは当たり前なのです。
これとか、1,000,000goroutine全否定だよね。俺は
Go信者:1,000,000goroutineでも軽いし速い←嘘つくな
GoUser:遅いけど1,000,000goroutineで書きたいんだよ←うむ、遅いと認めるならよろしい。しかし速くなる努力はしたまえ

> Goはデバッガビリティのために末尾再帰最適化をあえて実装していません。
いや怠慢でしかないだろ。再帰がデバッグしづらいとか聞いた事無いわ。

ちな、
> 自作ライブラリの利用方法をメソッドチェインで作ろうとする
考えた事無かったけど、try-catchのメリットってメソッドチェインできることか。
なるほどだからろくにメソッドチェイン出来ないPHPだと何ら意義を感じ取れなかったわけだ、納得。
16デフォルトの名無しさん
2022/02/27(日) 21:18:41.64ID:Xl3wWN+O
>>15
Goと同じくtry-catchの無いRustはメソッドチェーンが基本の言語だぜ
関数の返り値が基本的にenumとなってエラーも正常値もメソッドチェーンで処理できるようになってる
17デフォルトの名無しさん
2022/02/27(日) 21:41:54.35ID:PVy06kKY
>>14
もしかして俺が前スレ962で単純に40MB足してたのが気になってたのなら申し訳ない。
あれは足しすぎだった。RSSの意味は以下。
https://stackoverflow.com/questions/7880784/what-is-rss-and-vsz-in-linux-memory-management
十分なメモリがある状況で普通に実行させた直後(スワップされてない状況)なら、RSSで問題ない。(はず)

以下は前スレ992内にある図だが
https://commons.wikimedia.org/wiki/File:Table_of_x86_Registers_svg.svg
これ全部を待避するのに1kB程度かかるらしく(真面目に数えれば正確な数値は出せるが、やる気無し)
この分をOS側が待避するので、単純に言えばスレッド数*1kB程OS側のメモリを食ってる。
これがgoroutineだと必要ない(Goランタイム管轄で待避で、RSSに計上されてる)ので文句付けられてる。

だから公平に見るなら、goroutineはRSSそのままで良く、OSのthreadを使うならスレッド数*1KB程度追加かと。
(40MBはスレッド数*4kBにしてるので、多すぎ。
アクセスのない、単なる待避領域なので、ページ単位である必要はない。)


そして関数呼び出しのオーバーヘッドについてはそこにモロに書いてあるな。(GitHub上ソースの17行目~60行目)
0~4Cycleのオーバーヘッドになる。
方式としては、スタックの底に96Bytes(=40+56)の領域があらかじめ確保してあって、
これらはメモリが足りない時に呼ばれるdeferproc()とmorestack()に必要なスタックサイズなのだが、
逆に言えば96Bytes以下のスタックしか使わない関数ならスタックポインタがそこを越えてなければ問題ないわけで、
以下チェックを通してる。(guardがスタック満タン-96Bytesのアドレスを示してる)
> CMPQ guard, SP
> JHI 3(PC)
> MOVQ m->morearg, $(argsize << 32)
> CALL morestack(SB)
まあスタック増加がなければINT/BR/NOP/NOPなので、オーバーヘッドは通常1か2Cycleじゃないかと思うけども。
18デフォルトの名無しさん
2022/02/27(日) 22:00:44.12ID:PVy06kKY
>>12
ちなみにコードが素晴らしくメンテされてれば、

_StackMin = 1024

にするだけで、スタックサイズが1kBになるような気もします。
19デフォルトの名無しさん
2022/02/27(日) 22:21:07.92ID:F0hGMDSU
>>15
そもそも革新、改革がしたいならGoじゃない言語でやれば良いんよ。ひたすらに後方互換を維持してんだし。

1種類のコードになることを良しとしてるのは当初からよ。そうでなければ、gofmtが一切のオプションを持たないはずがない。

多数のgoroutine全否定ではなかろうに。
遅いように書いたgoroutineは遅いとしか言ってない。

ちなみに末尾再起はgdbなんかでデバッグしてるとデバッガビリティ低いと思うよ。俺もそう思う。
普通はデバッグビルドだと末尾再起無効では?cppなんかでも。
20デフォルトの名無しさん
2022/02/27(日) 23:03:35.02ID:PVy06kKY
>>19
いやあれは「べからず集」なのだから否定だと思うぞ。
まあいいが。

> 普通はデバッグビルドだと末尾再起無効では?cppなんかでも。
そもそもデバッグビルドなら『全ての』最適化は無効だ。そしてその状態で全てのデバッグを行う。
それでリリースビルドでは一発で動く、というかデバッグしないのが基本だ。
(同じ出力を生成する事だけを確認する)
「デバッグビルドでは動くのですが、リリースビルドでは動きません。これってコンパイラのバグですよね?」は初心者あるあるだが、死ねでいい。

リリースビルドでデバッグすると、ブレークポイントも当たらなかったりで、ろくな事はない。
深い再帰とかが例えば演算系なら、毎回再帰前にprintfで全部の値をログに出し、
リリースビルドで動かした出力とdiffを取り、完全一致になってなければバグとして、あくまでデバッグビルドでデバッグする。
そのファイルが数GBになって、普通のdiffでは無理になったら、完全一致専用のdiffを手作りする。
実は浮動小数点だと完全一致はしないが、それなら誤差範囲を指定したスクリプトを書いて比較だ。
というのが俺流で、つまり別の戦術で回避済みだから、
リリースビルドでどんな最適化がされてても、コンパイラがバグってない限り関係ないね。
そしてコンパイラなんてバグってない。俺は誰でも書いてるようなコードしか書かないし。

それ、リリースビルドでデバッグしてる事が問題なのでは?
(まあ気持ちは分かるけども。俺も最初はそうしてて、駄目だったので上記になってる)
21デフォルトの名無しさん
2022/02/28(月) 00:19:43.12ID:BEDnUIJv
>>16
以下9章だけは読んだ。
https://doc.rust-jp.rs/book-ja/ch09-00-error-handling.html

俺はこれで全く問題ないけども、try-catch派は多分文句を言うような気はする。
あと、これは型をResultで統一すればどの言語でも出来るので、言語と言うよりはフレームワークの設計なのだろう。
(フレームワークを跨いでも統一してる方がいいから、言語としてこれだ!というのは意味はあるが)

ただ、エラー処理って方式が統一されてる事が重要だから、今更ではある。
そんな事よりGoはRustのasyncをパクるべきだろう。
コルーチンみたいな名前で実はスレッドではないか!という批判が無くなる。
実は当初goroutineと名付けた時に欲しかったのは、これだったんじゃね?とも思う。
yieldさえあればあっさり出来るのだろうけど。(無くても無理矢理やれば出来るが)
つか、無い理由は何なんですかねこれ?
22デフォルトの名無しさん
2022/02/28(月) 00:24:03.28ID:3SjSMxvC
template feature実装したgolangのstable公開3月だっけか
作者がc++嫌いだからのgoなのに偉大なるc++への一歩を踏み出そうとしてるのは皮肉な事だが
ライブラリ等もかなり便利になるのではないかとかなり楽しみ(´・ω・`)
23デフォルトの名無しさん
2022/02/28(月) 00:35:47.82ID:EeqSDih1
>>17 >18
むしろ前スレ957のベンチ(元記事)では、

"In particular, 10k threads with default stack sizes need about 40mb of page tables to map virtual memory."

と訂正しているのだから、前スレ962の計算で40MB足してるのはおかしくない。
ただ、>>4で再び「957のベンチでは40MB越えないとおかしくて、矛盾してる」と言ってるのが、普通に考えるとRSS対象なので、スレッド数を10kから1kにした俺版でも前スレ1000のC++版との対比する意味もあり、改めてgo版の結果を同じ条件で出した(>>6)だけ。
結論は同様にRSSは4MBを超えないので、仮想メモリ側にあるという元記事の主張で正しいようにも見える。
しかし、go処理系が不明な元記事と違い、自分でやっていれば実際バージョンは分かるわけで、そこが分かればスタックサイズはソースを見れば一目瞭然ということで経緯と一緒に調べたのが、>>12で結論としては2Kだったということ。
すると元記事の推測と自分の計測結果には矛盾があり、2KBが仮想メモリにあるかどうかを明確にする必要が出たため、>>14で/procに頼った。
結論は仮想メモリ(swap)使ってないよって話だったので、少なくとも俺の環境では元記事とは違いRSSでいいという結論が出て、>12の結論とも整合が取れた。

別にdistro標準(ubuntu 20.04)のgo処理系を使っているので、ソースを引っ張ってくれば簡単に1KBに変更は出来るか確認出来ると思うけど、面倒なのでそこまではしない。
24デフォルトの名無しさん
2022/02/28(月) 01:17:28.02ID:qPXeLVFX
反論はそこだけ?
25デフォルトの名無しさん
2022/02/28(月) 01:18:12.57ID:qPXeLVFX
>>21
これだけ指摘されて、まだスレッドだと思ってるのは少ないのでは?
26デフォルトの名無しさん
2022/02/28(月) 01:33:25.66ID:EeqSDih1
一般には
coroutine + thread -> goroutine, async/await
という認識の人が多数だと思う
27デフォルトの名無しさん
2022/02/28(月) 14:52:59.85ID:xNWA4laA
このasyncおじさんは何も分かってないと思う・・・
nodeでasync/awaitが通るのは、シングルスレッドですべてのメモリーが一緒のためで、Goのようにgoroutineで実際に
割り当てられているCPUやスレッドが分からないようにあえてしている言語で、asyncなんて導入するわけない。
async/awaitがある言語でそれがThreadを混ぜ込める言語もあるが、それだってI/Oをブロックしている処理の終わりに
ただ同じスレッドを再割り当てするだけ。スレッド境界を越えてメモリーコピーあるいは同期なんてしてたら破綻する
async/awaitのもとになるような、多くのスクリプト言語でyield、つまりジェネレータの重要なユースケースは、I/Oブロックの
待ちで違う処理を行うことだが、それはI/Oバウンドな待ちでしか処理が切り替わらないことを意味する。
28デフォルトの名無しさん
2022/02/28(月) 15:07:48.45ID:xNWA4laA
async/await,そしてyieldが唯一優れているのは、Goでいうchannelのclose処理が要らないことだけ。

他は全部劣っているし、CPUバウンドでは切り替わらないし、async/awaitなんていうキーワードがプログラミングがしやすいか
といえば全然そんなことは無く、async/awaitで書かれたコードと、完全同期の一直線で進むプログラミングでは、互換性に
乏しいライブラリばかりができる。async前提で作られたコードは同期プログラミングでは使えなかったり、同期プログラミングで
作られたライブラリは処理がI/O待ちになっても、asyncが入っていないため非同期では効率が劣る。
決定的には、並列性が大きく劣っている事は言うまでもない。
もちろんこれは速度などという効率の指標ではなく、理論上はCPUコア数=スレッド数で、他はすべて非同期にしたほうが
速いのは、何も考えずとも当たり前。(無駄なコンテキストスイッチや同期処理が発生しないから)

「当初欲しかったのはこれじゃね?」なんていう超ド素人の勝手な想像と思い込み、調べもしない無知でこんなところで
ダベっていてもまったく意味ない。
Go言語の作者の一人であるRob Pike氏が「OSスレッドではなく、ユーザー空間スレッド」「メモリ使用量がOSスレッドに
対して、500倍ほど有利」「OSコンテキストスイッチよりも有利」といい、Cの作者として有名な、Kenneth Thompsonが
「C++が嫌いだということで意気投合」「いかなる理由があっても言語にゴミを入れません」と語っているように
I/O非同期なんていう半端な偽物は、眼中にない中で、まさしくasync/awaitは1つの利点だけの無用な長物であり
プログラミングを複雑にするだけで、つい最近まで総称型さえも、強烈に拒んでいた保守的で長く使えるよう言語仕様を
守り続ける言語に入るわけない。
そんなにやりたかったらお前がforkしてやれ、じゃなきゃGithubでIssueでも投下してこい。それすら出来ないなら
お前は不当に他言語を卑下してる卑怯者だぜ。どうせボコボコにされる
29デフォルトの名無しさん
2022/02/28(月) 15:52:51.20ID:BKvqTAvD
>>27
流石にその理解はヤバいぞ
asyncおじさんをバカにしてる場合じゃない
30デフォルトの名無しさん
2022/02/28(月) 19:32:24.79ID:7SSxP2tw
>>27
その主張は間違い
例えば現実にある反例として
RustでもGoと同じくワークスティーリングをするM:Nモデルで非同期タスクが動きasync/awaitが導入されている

>>28
あまりにも偏った思い込みと勘違いが激しすぎる
31デフォルトの名無しさん
2022/02/28(月) 19:53:28.26ID:qPXeLVFX
Rustでもできる、は聞き飽きたんだが、Rust話がしたいのか?
Rustの話はRustスレで聞きたいんだが、とうしてRustスレではN:Mグリーンスレッドの優位性の話してないの?

実際Rustでtokioをランタイムとして使ってみたけど、思ったより書き味が良くないしな。
Goのサクッと書いてサクッと、しかも依存の無い、クロスビルドと比べたら相当面倒。
しかもcopreemptiveじゃん。
色々な意味でGoの相手ではない。
32デフォルトの名無しさん
2022/02/28(月) 20:02:32.92ID:pJo2hpV4
>>31
どちらもメリット・デメリットあるからそれは言いすぎでしょ
しかも肝心な速度でGoが負けているのだから用途ごとに使い分ければよい話
33デフォルトの名無しさん
2022/02/28(月) 20:20:38.66ID:qPXeLVFX
>>32
その通り、メリデメある、使い分ければ良い→その時点で「相手ではない」と言ってる。
ずっと言ってるけど、1番2番論争は無意味なんよ。
速度ばかりが大切な訳でも無いんだし。
34デフォルトの名無しさん
2022/02/28(月) 21:17:53.06ID:qPXeLVFX
これ貼っとくわ。
https://thenewstack.io/enough-with-the-zero-sum-game-of-rust-vs-go/
35デフォルトの名無しさん
2022/02/28(月) 21:21:31.32ID:BEDnUIJv
>>23
いや、元記事もそこはちょっと間違ってる。
とはいえ本質は「RSSで全部計上されてるか?」なので大筋は問題ないが。

RSSは「ユーザープロセス空間で、メモリ上に配置されてる物」なので、元記事の通り、スワップされてれば計上されないが、
そもそもこの計測方法では普通はスワップされない。
ただ、考慮してるのは"Thread bookkeeping"であって、
kernel(OS)がこれに使うメモリがRSSに計上されてないから問題だ、というのはあってる。
だから俺はそれを足してる。

Goでは、実はこの部分も売りにしてて、以下は8の2つ目だが
> https://dave.cheney.net/2014/06/07/five-things-that-make-go-fast
> The switch between goroutines only happens at well defined points, when an explicit call is made to the Go runtime scheduler.
> The compiler knows the registers which are in use and saves them automatically.
むやみにプリエンプトせず、スイッチングポイントを考えて、必要ないレジスタは待避してない。
考えられるのは
・そもそもセグメントレジスタなんて普通は使わないから待避する必要がない。(レガシー)
・関数の途中でプリエンプトせず、関数呼び出し単位でスイッチなら、
呼び出し規約上の破壊レジスタ(a,b,c,d)は待避する必要がない。
・そのgoroutineの処理にSSE命令が存在しなければ、SSE系レジスタを待避する必要がない。FPU(x87)も同様。
とかになる。
(なおこれを突き詰めたらRustの「コルーチンのyieldでスイッチすれば、スタックも要らん」になる)
そして現実的に多くの場合SSE系命令は不要で、必要待避領域は多分半分以下にはなるので、(面倒だから数えてないが)
Goは半分以下にする努力してるのにRSSだと計上され、OS任せだと丸々必要なのにRSSには計上されないので、
当然の如く突っ込まれる事になる。
(その他細かいフラグ類は沢山あるだろうけど、多くはbit単位であり容量としてはゴミなので無視)

だから最小フットプリントなら1/3程度で、
あまり余計なことしなければスイッチングコストも1/3程度としていいのではないかと。
逆に言えば、threadよりも3倍程度のgoroutineで済むのなら、速くてコードも綺麗だが、
それ以上なら遅くなるという事。
36デフォルトの名無しさん
2022/02/28(月) 21:59:11.85ID:BEDnUIJv
>>27,28
どこから突っ込めば状態なので、最初の部分だけ。

> nodeでasync/awaitが通るのは、シングルスレッドですべてのメモリーが一緒のためで、
これは多分プロセスとスレッドの区別が出来てない。
プロセスは別空間だがスレッドは同一空間で、逆に言えばその程度の違いしかないが。
> e.g. Linux doesn’t distinguish between threads and processes and both are called tasks.
> https://codeburst.io/why-goroutines-are-not-lightweight-threads-7c460c1f155f#396b

> Goのようにgoroutineで実際に割り当てられているCPUやスレッドが分からないようにあえてしている言語で
一般的に非同期の場合はどのCPUにどの順番で処理されても動くように組む必要があり、
実際にC#でもそう。
JSもそう。(ただしJSのプログラミングモデルからは見えない)
この発言は上記の勘違い、(とは言っても普通の勘違いとは逆で)
Goはgoroutineがそれぞれ「別空間」で動いていると勘違いしてるからだと思うのだが、それはない。
重ならないようにコンパイラが割り当ててくれてるだけで、同一空間だ。
37デフォルトの名無しさん
2022/02/28(月) 22:40:05.81ID:EeqSDih1
>>35
元記事はGoのバージョンが確認できず、goroutine当たりのスタックサイズは不明なため、断定してないだけで、時期を考えると2KBだから恐らくRSSだろうとは思っている(明確に言えるのは自分で計測した方だけ)。
カーネルで管理されているメモリは4KB/2KBとかじゃないと思うし、数字としてはどこにも表れないので、それは差があるとだけしておけばいい。
元記事の筆者が加算しているのはgoroutineスタック分以外は全てRSSに入る前提の元、未計測の仮想メモリには最大40MB入ることがあるはずという計算。

> Goでは、実はこの部分も売りにしてて、以下は8の2つ目だが...コルーチンのyieldでスイッチ...
Goの「スイッチングポイント」は現状誰も明示しておらず、保存しているものも、どこなのかも、推測の範疇を出ておらず、議論は無意味。
38デフォルトの名無しさん
2022/02/28(月) 23:44:04.73ID:7SSxP2tw
>>33
Rustはどう見てもGoの相手でしょう
2019年に非同期本対応のRustが誕生するまでは明らかにGoの独壇場だった
今はRustがGoと同様にN:M非同期タスクを実現してGoのようにチャネルを使って全く同じ動作が可能となった上でasync/awaitも対応
そしてRustのほうが速いのだから比較対象として話が出るのは仕方ない
39デフォルトの名無しさん
2022/03/01(火) 00:33:28.48ID:OK3fXqHC
>>37
> goroutineスタック分以外は全てRSSに入る前提の元
いやgoroutineスタック分はユーザー空間だからスワップアウトされてない限りRSSには計上される。
そしてスワップアウトは「必要ない限りやらない」のが基本だから普通にベンチマークしてれば問題ない。
(同時にメモリイーターなプロセスを走らせておかないと速攻スワップアウトなんてされない)

> カーネルで管理されているメモリは4KB/2KBとかじゃないと思うし
『プロセス』を管理するために必要なカーネル側のメモリは4kBとかではない。
PTE(PageTableEntry=MMUの中身データ)だけでもメモリ128MBなら4k/pageだと128kB(=32kentry*4Bytes)必要になる。
(ただしラージページ《2M/page》なら256Bytesで済むが)
だから『プロセス』は軽くない。

一方、『スレッド』についてはこの部分は必要なく、追加のスレッドによって増えるカーネル側メモリは、
スレッド管理分のフラグ類の数Bytesと、待避領域の1kBだけで済むはず。
4k/threadの見積もりは多すぎ。(多分)

> Goの「スイッチングポイント」は現状誰も明示しておらず、保存しているものも、どこなのかも、推測の範疇を出ておらず、議論は無意味。
それはそうだが、多分合ってると思うよ。ただ、
> どこなのかも、
これについては間違いなくユーザー空間のはずだよ。カーネル側に保存する意味がないし、余計に遅くなる。
誤解無いようにくどいが言っておくと、
OSの管轄でマシンスレッドからプリエンプトする場合、各マシンスレッドの状態待避はカーネルがカーネル空間側に行う。
Goランタイムの管轄でgoroutineを切り替える場合、各goroutineの状態待避はGoランタイムがユーザー空間側に行う。
(まさかGoランタイムってカーネルモードで動いてたりする?それなら話は違ってくるが)
40デフォルトの名無しさん
2022/03/01(火) 00:41:23.65ID:LFBfp70W
>>38
明らかにユースケースが違うし、コンビニに行くのにF1乗るみたいな話だぞそれ。
スクーター以上のそれなりに早い二輪車が欲しいんだよ。
41デフォルトの名無しさん
2022/03/01(火) 00:47:33.18ID:LFBfp70W
>>39
違うのでは?
ユーザスレッドでもカーネルスレッドでも動いてる。
普段はgoroutineはユーザ空間で動いてるが、その上でカーネルスレッド毎に偏りがあったらスティールするでしょ。
42デフォルトの名無しさん
2022/03/01(火) 00:59:49.19ID:OK3fXqHC
>>41
君は27?

> 普段はgoroutineはユーザ空間で動いてるが、その上でカーネルスレッド毎に偏りがあったらスティールするでしょ。
これは明らかに分かってない奴の言い分だが。
43デフォルトの名無しさん
2022/03/01(火) 01:09:17.06ID:MT73K7Vw
>>39
> > goroutineスタック分以外は全てRSSに入る前提の元
> いやgoroutineスタック分はユーザー空間だからスワップアウトされてない限りRSSには計上される。
だから元記事の筆者がそう考えているという話で、これは俺の環境とは違うからRSSなのか仮想メモリなのか断定できないと言ってるだけ。
よく読んで欲しい。

> > どこなのかも、
> これについては間違いなくユーザー空間のはずだよ。カーネル側に保存する意味がないし、余計に遅くなる。
アドレス空間の話ではなく、スイッチングポイントは典型的にはyield直前とかのはずなんだけど、そこ実際にどこだか誰も調べてないよね?と言ってる。
多分とか入るのに他所様のお庭と比較するのはおこがましい。
44デフォルトの名無しさん
2022/03/01(火) 01:58:03.77ID:OK3fXqHC
>>43
> だから元記事の筆者がそう考えているという話で
それはそうだが、俺らはそのデータを見てる立場なので、それが正しいかをチェックする事になるだろ。
これも誤解無いように言っておくと、
元記事の作者は、(彼的には)正しいと思ってるからそう書いている。俺から見てもRSSで問題なく、正しくデータは取れてると思う。
(ただし考察の一部に微妙に間違いが含まれているので、その部分を指摘してるが、大局に影響はない)
ちなみに君のデータも、正しく取れてて、問題ないように見える。
RSSでいいのか心配のようなので、こちらからも「RSSで問題ない」との意見を付けた。

> アドレス空間の話ではなく
上記RSSの話に引っ張られてしまって勘違いした。すまん。


これ以上進めるには精度が足りないというのは了解した。
俺的にはこの程度の精度でも前進して構わないというノリなのだが、
もっと厳密に正確に確認していきたい人だとストレスが溜まるとは思う。
掘り下げたい人がいれば、12みたいにソースの該当箇所を提示してくれれば、確認の手伝いくらいはする。
45デフォルトの名無しさん
2022/03/01(火) 02:03:09.66ID:LFBfp70W
>>42
24とか。
どう違うん?
46デフォルトの名無しさん
2022/03/01(火) 06:28:53.29ID:MT73K7Vw
>>44
了解。すまんがこれ以上は俺はやらない。main.goのスレッド数に対するRSSのグラフ(svg)だけ貼っとく。
https://jsfiddle.net/9b0kujsL/
そのうち消えると思うけど、ここには貼れないサイズだったので仕方ない。
47デフォルトの名無しさん
2022/03/01(火) 08:12:28.20ID:aFcqKDVR
>>38
Rustのビルド速度は凄まじく遅いだろ。競合にならん。

Rust信者はgoスレに書き込む前に"Build fast, reliable, and efficient software at scale"を100万回唱えろ。
48デフォルトの名無しさん
2022/03/01(火) 09:03:50.60ID:cUOzOJ3p
昔は遅かった
今は特に問題ない
49デフォルトの名無しさん
2022/03/01(火) 10:19:27.41ID:NXJnvaYt
今も結構遅いけどな…ま、気にする必要はないが
50デフォルトの名無しさん
2022/03/01(火) 11:47:54.41ID:IZ7MnaYC
気になるだろ…
51デフォルトの名無しさん
2022/03/01(火) 11:58:08.47ID:MT73K7Vw
>>46
うっかりスレッドって書いちゃったけどgoroutineの間違いです(グラフも)
52デフォルトの名無しさん
2022/03/02(水) 00:08:09.90ID:A3d3IcmJ
>>46
了解。では感想だけ。
今時はグラフはsvgで作るのかーとちょっと驚いた。ググったら結構あるみたいだけどさ。まあそれはさておき、

> f(x) = 2.6396 x + 1186.8
完全にリニアで、2kBはスタックとして、残り0.6はちと多い。G構造体は以下(前スレ805内のリンク内)
https://github.com/golang/go/blob/master/src/runtime/runtime2.go#L403-L498
にあるが、51個もメンバがある巨大構造体で、こんなに必要なのか?とは思う。
まあ「税金」として0.6kBかかるのなら、無理にスタックを1kBにケチる意味はないから、デフォ2kBは妥当な判断に見える。
これについてはlinuxと比較しないと妥当性は検討出来ないが、

妥当性を検討するためにはLinuxを見る必要がある。これは同様に(前スレ805内の記事11章)以下にある。
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/sched.h#n657
見た目goよりでかいし、ifdefが多すぎて数える気にすらならない。

とはいえlinuxのはプロセスと共用だし、そもそも大量に起動する用途向けではないので多少大きくても問題ない。
おそらくあれこれ機能を足していくうちに肥大化したのだろうとは思う。
ただこれに対抗するならgoのはでかすぎ。
10倍起動するつもりなら、サイズは1/10に抑えないと並べない。(今は多分数分の一程度)
JSはここら辺はただのFIFOで、1ジョブ当たりポインタ数個分で実装出来る程度の機能しかない。だから速い。
Goのも既に肥大化しすぎてる。
ちょっと考えてみ?600Bytes=ポインタ*75個分で、一体何の制御をしたらそんなに必要なのかと。
51個のメンバがある=起動/停止時にその51個のメンバをチェック/更新するコードを通す事になる
=起動/停止時に「税金」的に数百サイクルは必要、となる。
53デフォルトの名無しさん
2022/03/02(水) 00:08:36.44ID:A3d3IcmJ
ここら辺はやっぱりチューニングが狂ってる。
『軽量』OSじゃないといけないんだけど、
オレオレOS作りたい奴がランタイム作ってて機能が肥大化してるのではないかと。
スケジューラが売りのようだが、ベアメタルではなくOS上で動かすのだから、無くてもOS側がそれなりにはやってくれる。
それをスケジューラ作りたいだけの奴が作っただけのように見える。
アプリを速くしたいのではなく、スケジューラを作り込みたいだけだから、チューニングが狂う。
この辺、JSはエンジン内の仕組みなんて誰も評価しないでしょ。
速いか遅いかだけ。だからチューニングが狂わない。
54デフォルトの名無しさん
2022/03/02(水) 01:42:28.65ID:WG8WfuCM
OSがそれなりにさばかないよ。グリーンスレッドの価値を全否定だな。

JSのエンジン、定期的に話題になるだろ。
V8もTurbofan+Ignitionに変わってすぐはソース読んでたぞ。
55デフォルトの名無しさん
2022/03/02(水) 03:09:53.11ID:re9dUtRi
https://jsfiddle.net/z1bvwt3L/1/
1:1スレッドでのC++/Rustの結果も併記した(Rustのバージョンは1.58.1)
標準機能で記述する縛りでロジックだけ同じにすると現状ではこうだということ
M:NをC++/Rustで自前準備すれば別の比較ができるかもね
56デフォルトの名無しさん
2022/03/02(水) 03:13:52.18ID:re9dUtRi
あ、C++はgcc9.3、C++14で記述。
57デフォルトの名無しさん
2022/03/02(水) 03:34:51.80ID:S8+3WyDZ
>>55
全く意味のない比較になっている
Goではm:nグリーンスレッド利用
C++とRusyでは1:1つまりOSスレッド利用
ちゃんと3者ともにm:nグリーンスレッド利用で比較しなさい
58デフォルトの名無しさん
2022/03/02(水) 04:07:09.47ID:re9dUtRi
>>57
「標準機能で記述する縛りでロジックだけ同じ」という条件だとそれは無理な相談
むしろm:nでないとならない条件では成立しない

> ちゃんと3者ともにm:nグリーンスレッド利用で比較しなさい
上記条件にはならないが、どうしてもやりたければお前がやれ
C++は20を使えば標準機能だけで実装できるはず
Rustが標準機能だけで実装可能かは知らない
59デフォルトの名無しさん
2022/03/02(水) 06:39:48.32ID:re9dUtRi
Rustの標準ライブラリはunsafeのオンパレードだなw
60デフォルトの名無しさん
2022/03/02(水) 06:40:13.75ID:re9dUtRi
誤爆
61デフォルトの名無しさん
2022/03/02(水) 07:09:40.23ID:fOFAuz8H
ライブラリもOS機能を使うならunsafeも致し方ないのではないだろうか、と誤爆にレス
62デフォルトの名無しさん
2022/03/02(水) 08:03:15.38ID:re9dUtRi
興味があるならどこの誤爆かだけ書いておく
http://2chb.net/r/tech/1638086359/447
63デフォルトの名無しさん
2022/03/02(水) 09:14:57.44ID:WG8WfuCM
>>58
わざわざGoスレでくだ巻いてる方がやれよ。
できなけりゃGoを使うよ。
64デフォルトの名無しさん
2022/03/02(水) 12:54:03.99ID:re9dUtRi
>>63
俺はGoのパフォーマンス測定をGoスレで尋ねてその後も調査してるだけだけ(すでに終了は宣言した)
ただまだ妥当性がどうのと言ってる人がいるから、とりあえず恐らく同じくデフォルトが通常2KなOSスレッドスタックを使ったRustとC++の結果を貼っただけ
結果は1:1でthreadが動いてるRust/C++の完敗だが、ロジック同程度で標準機能だけという条件なら仕方ないねって話をしただけだぞ
まだ文句があるなら自分でやれと言って何が悪い
お前がGoを使おうと何を使おうと俺はどうでもいい
65デフォルトの名無しさん
2022/03/02(水) 14:10:00.74ID:S8+3WyDZ
>>64
m:nとなるgoroutineを用いたGoと
1:1となるOSスレッドだけを用いたC++&Rustを比較することは無意味
比較したいならばC++&Rust側でもm:nでやりなさい
66デフォルトの名無しさん
2022/03/02(水) 15:24:10.33ID:mFEJLP5N
>>64
勝ち負けを認めさせたいから言ったのでは無く、それ以上はRustスレでやれと言ってる。
67デフォルトの名無しさん
2022/03/02(水) 16:34:57.55ID:re9dUtRi
>>66
俺に言うなよ
>>65に言え
68デフォルトの名無しさん
2022/03/02(水) 16:54:30.69ID:S8+3WyDZ
C++スレでもRustスレでもここでも同じで無意味
m:nとなるgoroutineを用いたGoと
1:1となるOSスレッドだけを用いたC++&Rustを比較することはナンセンス
69デフォルトの名無しさん
2022/03/02(水) 17:04:08.05ID:re9dUtRi
thread単品で制御できないgoじゃこういう計測ができないのも理解できないとは・・・
何しにgoスレに来てるのやら
70デフォルトの名無しさん
2022/03/02(水) 17:33:02.75ID:S8+3WyDZ
C++とRustでもOSスレッドではなくm:nグリーンスレッドを使えばよいだけだろ
71デフォルトの名無しさん
2022/03/02(水) 23:43:26.42ID:A3d3IcmJ
>>64
妥当性がどうのこうのは「GoランタイムのG実装」であって、君のデータについてではない。
君のデータは妥当だし正確だと思うよ。


>>54
> OSがそれなりにさばかないよ。
GOMAXPROCSがCore数と同じ事に拘ってるからだよ。だから完全な(=高価な)スケジューリングが必要になる。
Core数よりも多いMにして、優先順位を低く設定しておけば、CPUが空いてればそのMで実行される。(これはOSがやってくれる)
これなら今のランタイムがやってるようなスケジューリング管理なんて丸々必要なくなる。
C#がこれで、空きCPUがあれば新規スレッドをプールに追加して、実行させるだけでしょ。
(ただしGoの場合は同期チャネルなので一々止まりまくり、この場合は確かにそのままOSに任せても駄目で、
Rustみたいに同期受信待ちをコルーチン化して送信時に受信側goroutineのコードを直接実行する実装の方が向いてるが、
《だからthreadなのにコルーチンと名付けたのか?》
ここら辺はジョブの重さと同期チャネル量の兼ね合いで、第一選択肢として力業(スケジューラ)で解決、という判断は妥当ではあるが)

> グリーンスレッドの価値を全否定だな。
「コンテキストスイッチのオーバーヘッドを減らす」Goより、
「コンテキストスイッチ自体を無くす」非同期の方が原理的に速い。
ただし非同期はソースがうざかったが、async文法でまあ何とかなった。
よって肯定する部分がない。当然他言語も全く追従しない。(今後出てくるかもだが)
逆に非同期はJS/C#/Rustと来てるだろ。良いと見られている証拠。

> V8もTurbofan+Ignitionに変わってすぐはソース読んでたぞ。
それは君が興味があるからだろ。
大半のJSerはC++は読めないし、読む気もない。ブラウザが速ければそれで良しだよ。


わざわざ自前でスレッド管理するのなら、OSと被ってないところをやらないと。
スケジューリングはOSがやってくれるのだから任せておけばいいし、自前でやっても余計に遅くなるだけ。
残ってるとすればスレッド間通信で、これは確かにOSのは遅い、というより動くようにしか出来てない。(そして非同期)
だからそこそこ速い同期チャネルが絶対不可欠なアプリがあれば、と思って考えてみたが、やっぱり俺は思いつかないね。
72デフォルトの名無しさん
2022/03/03(木) 00:21:30.68ID:r4JzAqw4
やり方がわからんのだろ。
73デフォルトの名無しさん
2022/03/03(木) 00:23:05.45ID:r4JzAqw4
チャンネルが同期なのはバッファが無いとき
お前は本当に人な話を聞かないし何も読まないな。
74デフォルトの名無しさん
2022/03/03(木) 00:56:08.72ID:hTxF5AaQ
>>71
> 妥当性がどうのこうのは「GoランタイムのG実装」であって、君のデータについてではない。
うん、それは分かってたんだけど、定量的なデータがないとその妥当性分からんでしょ
M:Nのgoroutineだからと言って調子に乗って1:1の10倍積むと、俺の環境だとrssは超えてしまうってことがデータから分かる
データは簡単に取れる状況だったから、取っただけ
75デフォルトの名無しさん
2022/03/03(木) 11:28:44.36ID:6vq1sG3T
Windowsでアップデート後にVScodeでテストを走らせると1.14.13でコンパイルされてるためツールバージョン1.17.7とマッチしませんと言われる
setting.jsonでgo.gopathを環境変数のGOPATHに合わせてビルドしてもダメ
かといってアップデートされたディレクトリを指定してもダメ

環境変数のGOPATHのgo.exeがアップデートでは更新されていないためなのか
でもツール類はアップデートされてたりしてもう訳がわからない
どう処置したらいいの?

ちなみに、システム環境変数のPathには$GOPATH\binのパスが入れてある
76デフォルトの名無しさん
2022/03/03(木) 11:44:33.79ID:6vq1sG3T
いや…落ち着いてエラーログを見たら、例えばruntime/internal/sysが、とか言ってる
参照モジュール?

で、go.sum を消して再ビルドしたけど同じ結果
77デフォルトの名無しさん
2022/03/03(木) 13:27:09.03ID:6vq1sG3T
とりあえず全部をアップデート先に統合する方向で納めた
バージョン混在状態だとどうしたらベストなのだろう?
環境的には最新に統合してgo.modでのバージョン記述に頼ればいい?
78デフォルトの名無しさん
2022/03/03(木) 18:20:17.50ID:qZcuxxc0
>>74
つまりリソース的にGoroutineはOSのスレッドの数倍しか立ち上げられないということ?
79デフォルトの名無しさん
2022/03/03(木) 18:47:19.32ID:3iRkjbfP
https://zenn.dev/mattn/articles/c453f42393778a
numpy より速い?Go の行列演算ライブラリ nune

やっぱGOは速いね
80デフォルトの名無しさん
2022/03/03(木) 20:31:53.54ID:DvSNmo59
>>74
それはご丁寧にどうも。ついでなら、
> C++は20を使えば標準機能だけで実装できるはず (>>58)
これについてもキーワードかURLだけでも教えてくれれば助かる。見に行く。
greenthreadが採用されたって事か?
(C++の場合は『全部入り』を目指してるからいつかは入るとは思うが)


>>73
あの文法は同期が主目的で非同期も問題なく書けるだけ。

OSのスレッド間通信は非同期しかなく、
同期したければ自前でループかサスペンド/ウェイクアップするしかない。
だからそんなに同期を取る事はなく、仕方なくやる程度。
そしてそれで何とかなってる=従来分野は非同期で問題なく書けてる。

同期の場合、シェークハンド等の単純な方法なら同期プリミティブ無しで書ける。
多分もっと複雑な事も出来るのだろう。だけど俺にはそれに適した分野が分からない。
(従来分野は問題ないので、従来既に困ってたか新分野かだが、思いつかない)

ランタイムの仕様が無駄に大きいと、実行速度がそのまま低下する。
JSが無駄に速いのは、仕様が小さい(最小限に絞ってる)のもある。
チャネルの実装は以下(前スレ805内リンク8章)にあるが、
https://zenn.dev/hsaki/books/golang-concurrency/viewer/chaninternal
こんなまどろっこしい実装になってる理由は、同期(も出来る構造)だからだ。
非同期専用ならもっと単純な実装で済むし、速い。

だから優位性を発揮するためには、「同期チャネル」がないと辛いアプリがあれば分かりやすいが、
俺には今のところ思いつかないって話。
(非同期チャネルだと「空になったら止まる」という間抜けな同期しか出来ないが、実際それで十分という話)
81デフォルトの名無しさん
2022/03/03(木) 20:56:08.85ID:hTxF5AaQ
>>80
coroutine
82デフォルトの名無しさん
2022/03/03(木) 21:23:47.28ID:DvSNmo59
>>81
あ、そういう事ですか、なるほど。

まあ見てみましたが、相変わらずというか、何というか。
https://cpprefjp.github.io/lang/cpp20/coroutines.html
83デフォルトの名無しさん
2022/03/03(木) 21:54:21.27ID:oaR2p1R0
Docker CLIのダウンロードみたいな
複数のプログレスバーを出せるライブラリほしい
何がおすすめ?
84デフォルトの名無しさん
2022/03/03(木) 22:06:45.01ID:6vq1sG3T
GUIなぞ基本的には管轄外です
お引き取りを
85デフォルトの名無しさん
2022/03/03(木) 22:22:12.59ID:y+UC/h2K
CLIでのプログレスバーの話だろ?
86デフォルトの名無しさん
2022/03/03(木) 22:27:14.50ID:6vq1sG3T
あーすまん
87デフォルトの名無しさん
2022/03/03(木) 23:09:26.23ID:1IkAc1iQ
いいってことよ
88デフォルトの名無しさん
2022/03/03(木) 23:29:47.34ID:Rf6M0oqn
>>64
そこは標準機能だけ対象といってもその定義が難しい
そのRustは標準(std)ライブラリーは最小限のものしかなくて
例えば乱数も暗号関係(TLS含む)も正規表現もJSONもHTTPも非同期ランタイムも何もかもstdに含まれていない
全てデファクトスタンダードで賄う方針だからそれらを標準機能として採用して比較してよい?
89デフォルトの名無しさん
2022/03/03(木) 23:35:59.34ID:vRr517/c
rustはもう少し標準ライブラリにも機能増やして欲しい。
90デフォルトの名無しさん
2022/03/04(金) 00:05:33.31ID:4zB49VIz
>>88
俺が依頼してる話でもないから俺に聞かれても・・・ではある。そもそもここgoスレだし何のためにそれをしたいのかすら分からない。

単純に話を聞く限り
・goは言語機能で賄っているのに標準ライブラリ以外を使うとか流石に比較にならないと思う
・C++の標準ライブラリにもjsonやhttpや暗号はない
・同じロジックにこだわらず、追加のロジックで不足機能を補うなら、可搬性(プラットフォームごとに実行コードが変わらない)が必要
のではないかと思う
91デフォルトの名無しさん
2022/03/04(金) 07:00:31.23ID:Ah997PWW
非同期処理ですら紛糾して仕上がったのが2019/11な赤ん坊に無茶言うなって
Rustのコンセプトは分かるけど、学習難易度とライブラリの貧困さを何とかしないと浮かばれずにいつの間にか沈むぞ
92デフォルトの名無しさん
2022/03/04(金) 11:17:26.10ID:2Vo/u60a
そんなにライブラリ貧困なの?
おれもまだ勉強中なんだけど何のライブラリで困るのか具体的に教えてくれ
勉強がてら試しに作ってみるかも
93デフォルトの名無しさん
2022/03/04(金) 13:21:46.53ID:JMvj/uct
>>91
学習難易度はキノコードが動画作れば解決w
94デフォルトの名無しさん
2022/03/04(金) 15:27:21.82ID:e8gLPWot
>>91
Rustも難易度は高くなくて広く色んなプログラミング言語をやってきた者には容易
例えばC言語などのenumを関数型言語の代数的データ型で拡張したのがRustのenum
そういうのを理解しているとメソッドによる代数的演算やパターンマッチングなどRustの基本機能も習得がすぐ
あるいは例えばGoでも構造体ベースのイテレータパターンを書いたことあればRustのイテレータも楽勝といった具合
GoやCのfor ; ; 文はRustには存在せずイテレータに集約されており更にメソッド連鎖させて操作の分離と抽象化でわかりやすく書くことが多い
95デフォルトの名無しさん
2022/03/04(金) 15:37:03.27ID:e8gLPWot
>>92
むしろRustは民主主義方式なのでライブラリは多種多様に豊富
異なる考え方で作られたものが両立している分野もあるし後から優れたものが出てきてシェア拡大も起きたりしている
代わりに標準ライブラリ(std)は必要最小限のものしかなく
その一部であるコア標準ライブラリ(core)はヒープがなくても動作する更なる最小セットを提供
96デフォルトの名無しさん
2022/03/04(金) 15:39:19.04ID:4zB49VIz
間違ってる上にスレ違いすぎるな

言語比較がしたいなら↓へ
次世代言語23 Go Nim Rust Swift Kotlin TypeScript
http://2chb.net/r/tech/1638086359/
97デフォルトの名無しさん
2022/03/04(金) 15:48:00.84ID:e8gLPWot
>>96
間違ったことは書いていない
質問や話題があったからそれに対して答えたまで
98デフォルトの名無しさん
2022/03/04(金) 15:52:46.98ID:4zB49VIz
>>97
>>96
99デフォルトの名無しさん
2022/03/04(金) 16:07:29.53ID:wUg1CCTJ
>>95
民主主義方式はc++みたいに標準委員会方式の場合だろ。
実装複数でデファクトスタンダードを競わせるってのは戦国時代方式だよ。
100デフォルトの名無しさん
2022/03/04(金) 16:41:14.71ID:2tyOtSaX
>>99
あの標準委員会方式は強いて言えば一党独裁制だが紛糾ちぐはぐに近い
そしてC++の標準拡張が失敗してきた歴史を見ても反面教師としたのは理解できる
101デフォルトの名無しさん
2022/03/04(金) 17:03:59.90ID:k6Ka/u1X
>>100
>>96
102デフォルトの名無しさん
2022/03/04(金) 17:23:53.33ID:wUg1CCTJ
確かに、いい加減Goの話に戻そう。
103デフォルトの名無しさん
2022/03/04(金) 18:00:31.30ID:JMvj/uct
>>102
荒らしに荒さないでって言ってるようなもんだぞ
話が通じる相手ならとっくにやめてるだろ
相手にせずにNGなどで無視したほうがいい
104デフォルトの名無しさん
2022/03/04(金) 18:09:02.15ID:4zB49VIz
>>103
>>96
105デフォルトの名無しさん
2022/03/04(金) 18:20:16.68ID:rY1xxy8+
そうだね
じゃあ 1.18 の話でもしよう

せっかく Generics が入るみたいのに、slice での Map、Reduce、Filter みたいなユーティリティが提供されないっぽいよね?
今はとりあえず準標準といえるものがこれ https://pkg.go.dev/golang.org/x/exp/slices
だと思うんだけど、そのうち増えるのかな?

例えばこんな感じの実装↓でいいと思うんだけど、本家でなんか議論されてるん? Go追いかけてるひとおせーて!
https://gotipplay.golang.org/p/Y2cpCCPjKqr
106デフォルトの名無しさん
2022/03/04(金) 18:21:39.81ID:rY1xxy8+
他のインタフェースが検討されてるとしたら、メソッドチェーンできるようにしたい、とかかな?
107デフォルトの名無しさん
2022/03/04(金) 19:18:02.80ID:rpzx0HJl
Rustに移行すべきでは?
108デフォルトの名無しさん
2022/03/04(金) 19:23:47.26ID:L8b5lnOt
>>107
>>96
109デフォルトの名無しさん
2022/03/04(金) 19:26:20.71ID:gF7ObJcT
GoスレでRustRust言う奴から得るもんは何もない
失せろ
110デフォルトの名無しさん
2022/03/04(金) 19:27:58.27ID:2tyOtSaX
>>106
メソッドチェーンの途中で>>105の実装のように毎回スライスを生成するのは無駄で遅いから
各メソッドをイテレータとして実装して中間生成物を作らないようにすべきかな
111デフォルトの名無しさん
2022/03/04(金) 19:30:36.16ID:tHN8vl7V
たしかに効率的にするならイテレータにしないとね
それで簡単に仕様が決まらんのかな
112デフォルトの名無しさん
2022/03/04(金) 19:41:10.06ID:aLx0Ek8o
今一番rustの話で盛り上がるのがこのスレだからな
113デフォルトの名無しさん
2022/03/04(金) 20:33:03.39ID:3r4UVkMf
Rust スレはどうなっているんだw
114デフォルトの名無しさん
2022/03/04(金) 20:34:31.83ID:JMvj/uct
NGword: Rust
なんでこれしないのか?
115デフォルトの名無しさん
2022/03/04(金) 20:36:30.45ID:JMvj/uct
>>113
Tauriで盛り上がってる
electronをRustで実装しなおしたら性能上がりすぎRust覇権とかwww
馬鹿だね~
116デフォルトの名無しさん
2022/03/04(金) 20:41:31.76ID:e8gLPWot
>>110
それ7年前のRust 1.0公開時からサポートしてる機能だが
Rustはプル型にすることで無駄な動きをゼロにしつつメソッドチェーンの形になってもヒープを使わずスタック上のみで動く特徴がある
しかしGoでは受け入れられる方針なのだろうか?
一方でプッシュ型であるチャネルを使った実装だとプッシュ型にすることでのムダよりもgoroutineを使うオーバーヘッドが大きい
117デフォルトの名無しさん
2022/03/06(日) 19:22:52.31ID:oq6skpEb
>>40
そのとおり。
決定的なのは、goをRustで実装してしまえばいいw
それがすべてだろw逆にRustをgoで実装することは何万年立っても不可能なんだからw
なぜならgcのある言語でgcのない言語を実装できないから
118デフォルトの名無しさん
2022/03/06(日) 19:40:37.34ID:UDoFVzdd
Istioがまさにそうだよ
> RustをGoで実装
119デフォルトの名無しさん
2022/03/06(日) 21:05:29.02ID:Rcp3w968
フリーランスだけど未経験OKのところに応募してみた。
採用されたらよろしくな。
120デフォルトの名無しさん
2022/03/06(日) 21:06:19.97ID:D8Ku8/qP
>>117
なんでだよw
言語処理系にGCがあるかないかと、それから作られるバイナリにGCがあるかないかなんか関係ないだろwwww
インタプリタじゃあるまいし。
121デフォルトの名無しさん
2022/03/06(日) 23:38:19.72ID:0i0EE3CI
>>117
コンパイラの処理って何か知ってる?
122デフォルトの名無しさん
2022/03/07(月) 00:39:41.57ID:kssBp/wX
>>117
あのーGoもRustも最終的に吐き出すのは機械語のコードだよ?
その場合GCはランタイムに含まれるんですがそれは実装する言語関係ないですよ?
123デフォルトの名無しさん
2022/03/07(月) 00:44:33.34ID:otYxLRpr
>>122
goでメモリ管理まで書くの?そしたら所有権とかの概念があるRustに軍配があがるだろ
124デフォルトの名無しさん
2022/03/07(月) 08:43:53.50ID:s5yg+NZx
>>123
Rustの所有権とかのメモリ管理はコンパイル時に行われる静的な処理が中心となるので
どんな言語でも書けると思う
125デフォルトの名無しさん
2022/03/07(月) 08:55:53.15ID:q3eUi8ps
RustあげてるやつがRustの良さを何も理解できてないのがホント阿呆らしい
126デフォルトの名無しさん
2022/03/07(月) 09:07:37.44ID:MlZ6kc9H
>>123
既にGoでGoのGC書いてるじゃん。
127デフォルトの名無しさん
2022/03/07(月) 10:35:08.70ID:otYxLRpr
>>124
単に書けるのと言語でサポートされてるのとはちがうんだよなあ
特に多くのは人が関わるプロジェクトでは
128デフォルトの名無しさん
2022/03/07(月) 11:00:36.82ID:s5yg+NZx
>>127
Rustのメモリ管理の実現方式を理解出来てないと思う
コンパイル時に行われることと、コンパイルされた機械語が行うことの区別は出来てる?
Rustの所有権の処理はコンパイル時に行われるので、そのコンパイラがRustで書かれていようとGoで書かれていようと関係無い
129デフォルトの名無しさん
2022/03/07(月) 12:03:12.32ID:2hk0Nxfy
>>127
「サポート」じゃなくて「強制」。

ほんと、Rust信者はRustのメリット・デメリットを知らんな。
130デフォルトの名無しさん
2022/03/07(月) 14:11:55.83ID:SxK5Ewlv
>>123
どの言語に対するコンパイラもインタプリタも別のほとんどの言語で書ける
例えばプリミティブ以外は全てオブジェクト型になってしまうJavaScriptでもGoやRustのコンパイラを記述可能
もちろん記述可能性とは別の話として言語機能の強力さや高速性と省メモリ等の点から現存言語ではRustが最も有利であるだけにすぎない
131デフォルトの名無しさん
2022/03/07(月) 15:56:13.82ID:kssBp/wX
>>123
いやだからコンパイル後に動くのはランタイムのコードなの
Goとか関係ないの
ランタイムって意味わかる?
機械語に含まれる標準ライブラリやメモリ管理のコードのことだよ
132デフォルトの名無しさん
2022/03/07(月) 16:06:10.52ID:won3nIuN
>>117 >>123
フルボッコでワロたʬ
133デフォルトの名無しさん
2022/03/07(月) 17:12:28.11ID:otYxLRpr
>>132
痛いところをつかれた証拠だな
よほど都合が悪いらしいwwww
134デフォルトの名無しさん
2022/03/07(月) 17:14:22.08ID:otYxLRpr
>>129
そうそれ
だが強制するとしないでは天と地の差がある
つまりセキュアが保証されるかされないかということに影響する
135デフォルトの名無しさん
2022/03/07(月) 17:54:54.88ID:I/Rzn0lH
コンパイラの仕事が何なのか知らない人がRustを推すのは流石に恥ずかしいからやめてくれ
Rust使ってる身としてはすごく迷惑
136デフォルトの名無しさん
2022/03/07(月) 17:55:43.77ID:s5yg+NZx
>>134
Rustの言語仕様の所有権による実行コードの安全性の保障は、コンパイラをRustで書いてもGoで書いても、同じように得られる
逆にRustでコンパイラ書いたとしても、それによってコンパイルされたコードがRustの所有権による安全性を得られるわけじゃない
137デフォルトの名無しさん
2022/03/07(月) 18:08:24.58ID:kssBp/wX
やはりおじさんはVM系言語しか使ったことがないようだな
会話が成立しない訳だ
138デフォルトの名無しさん
2022/03/07(月) 18:28:02.87ID:LwrKIEpB
GoスレでマヌケなRust推しが暴れているという地獄
139デフォルトの名無しさん
2022/03/07(月) 19:04:12.73ID:SxK5Ewlv
Rustの方が言語機能の強力さや高速性と省メモリ等の点から最も有利なだけにすぎないからね
ほとんどの言語でGoのコンパイラもRustのコンパイラも作ることが可能
この両者の区別ができないとね
140デフォルトの名無しさん
2022/03/07(月) 21:22:24.00ID:kssBp/wX
いわゆるVM系の言語(Java、C#、JavaScript、Python、Rubyなど)はランタイム自体がインタプリタに含まれてるので意識しないんだろうな

なんか普通に恥ずかしいよね
コンパイルが何をしているのかも知らなかったなんて
最近のVM系言語でもJITしてるし理解してるものかと思ってた
JITはインタプリタのランタイムのスタックとマシンコードのスタックを引き継ぐ処理とか内部でやってる
そういうのもわからないんだ

rustだなんだという前に大学に編入してCSを勉強した方が良いのではないか
141デフォルトの名無しさん
2022/03/08(火) 00:26:03.19ID:4ZhMXz51
なんでここまでボロが出る前にスッとROMに徹せられないんだろうね?
142デフォルトの名無しさん
2022/03/08(火) 02:39:31.07ID:59Y5NzBD
>>140
そんなの知らなくていいよ
143デフォルトの名無しさん
2022/03/08(火) 07:57:09.39ID:5mhqUY+j
Rustのことは忘れて

スライスってよく考えたら中にサイズとキャパシティ持ってるだろうからlen(スライス)はそれを見てるだけなのか?
144デフォルトの名無しさん
2022/03/08(火) 08:13:34.51ID:TkXU//aU
>>143
おそらくそうだったと思うよ。
145デフォルトの名無しさん
2022/03/08(火) 08:17:46.56ID:TkXU//aU
これが良いかな。
https://stackoverflow.com/questions/28204831/how-do-gos-len-and-make-functions-work
146デフォルトの名無しさん
2022/03/08(火) 11:48:16.95ID:5mhqUY+j
struct の中にスライスと長さを持たせてたよ…orz
147デフォルトの名無しさん
2022/03/09(水) 17:10:13.11ID:ZVLrsraT
RustのVecだって同じじゃん...orz
148デフォルトの名無しさん
2022/03/09(水) 18:57:40.54ID:o8UVaHTv
RustのスライスとGoのスライスは概念が異なる
Rustのスライスはポインタと長さの2点のみを持ち常に「参照」である
つまり「参照」ということは「本体」がある
本体は配列(=そのままだとスタック上で長さ固定)やVec(=ヒープ上で長さ可変)など
Rustのスライスはそれら本体の一部(もしくは全体)を指す「参照」という従属物
このように概念を整理して分離したことがGCのないRustの効率の良さに繋がっている
149デフォルトの名無しさん
2022/03/09(水) 19:25:13.15ID:HVZ+1br4
まーた(ry
150デフォルトの名無しさん
2022/03/09(水) 19:26:23.08ID:BXzHKdLE
>>148
Go のスライスの内部実装も知らない男の人って・・・
151デフォルトの名無しさん
2022/03/09(水) 19:37:39.05ID:o8UVaHTv
Goのスライスはうっかりデータ競合を起こしても自己責任
別変数に代入して各々に対して値を書き換えたりappendしたり可能だがもちろん互いに競合する
そして苦肉の策の結果としてappendでキャパシティを超えた時に両者がそこから分岐
一方でRustは言語仕様でデータ競合を起さないことを保証している
152デフォルトの名無しさん
2022/03/09(水) 19:52:31.32ID:2cDF56sN
>>151
>>96
153デフォルトの名無しさん
2022/03/09(水) 23:07:53.69ID:JjWHIxM6
>>151
Goの欠点だな
154デフォルトの名無しさん
2022/03/09(水) 23:15:13.75ID:kryzQ0zI
Goのスライスは実質的には可変長配列として使うからね
155デフォルトの名無しさん
2022/03/09(水) 23:56:47.85ID:jIAUAwVH
嘘つきはRustの始まり。std::syncだって同期とが標準モジュールに入ってるし、atomic型だって同じ。並列操作ではgoは他の
言語に抜き出ている。goが競合を起こすのはgoroutine同士でデータを共有するような、”古い老人のような作り方”をしている
からでchannelを通さない、sync.Mutexを使ったこともないasync/awaitだけでRustライブラリの中がArc<Mutex<T>>に
なってる事も知らないド素人がイキがってるだけ。
スレ違いなので荒らすのは止めましょう
156デフォルトの名無しさん
2022/03/10(木) 00:16:27.61ID:EmAP5Zv6
refrect.DeepEqual() って便利
だけど、単体テストでNG出たんで今日は寝ますね
(…どこが食い違ってるのか教えてはくれない)
157デフォルトの名無しさん
2022/03/10(木) 08:01:20.84ID:p2fYNkNX
Javaやpythonからgoに来た人って絶対Rustにも行くよね?w
158デフォルトの名無しさん
2022/03/10(木) 08:05:56.68ID:EmAP5Zv6
皆さんストリンガーって保険のためにとか実装してる?
159デフォルトの名無しさん
2022/03/10(木) 08:06:54.36ID:EmAP5Zv6
別に行かない
160デフォルトの名無しさん
2022/03/10(木) 11:26:24.44ID:yulIAHTW
別にRustを使ってもデータ競合は防げるけど競合状態は防げないし、データ競合を防ぐ目的のために面倒なメモリ管理をやる気にはならないな
161デフォルトの名無しさん
2022/03/10(木) 14:34:23.63ID:oQD86hL5
JAVAから来ました
162デフォルトの名無しさん
2022/03/10(木) 23:25:33.20ID:mPwUhQcz
>>151
Goのスライスは言語設計ミスだけど
言語仕様を複雑にしたくないために起きている不幸の一つ
データ競合についてはGoは言語としてサポートせずプログラマーの腕に任せる方針
163デフォルトの名無しさん
2022/03/11(金) 04:48:59.22ID:/mQhQdeo
>>162
中途半端な仕様だな
それって意味ないだろ
164デフォルトの名無しさん
2022/03/11(金) 10:28:51.56ID:MsCX3gC/
今からGoですを勉強するのって意味ない?
rustとかいうやつのほうがいいの?
165デフォルトの名無しさん
2022/03/11(金) 11:06:27.12ID:kr68tprG
Goの採用はスタートアップなんかでも結構多いので意味無くはない
Rustは実際にはまだほとんど無い
とはいえGoをあえて勉強する必要があるかは微妙だな
こんなの経験なくてもチームに入ってからなんとなく空気読んで十分使えるし、
それができる程度に他言語の経験がないのであればGoはあまり意味のない言語だ
166デフォルトの名無しさん
2022/03/11(金) 11:39:54.49ID:H8qFXNfY
>>164
「勉強」の意味による。

仕事につながる技術を身に着けたいなら、普及率が高くて求人も多いJavaやcのほうがいい。
学問としてプログラム言語を勉強したいなら、より原理的なlisp(scheme),haskell,cのほうがいい。
趣味でプログラムするのに勉強したいなら、手軽で教本も多いpythonあたりかね。

goやRustは中途半端なので、最初の選択肢にはならない。
167デフォルトの名無しさん
2022/03/11(金) 11:59:46.52ID:0bHD9k1s
Goの戦場はニッチだからねぇ

汎用を求めるならJavaやC#
ハイエンドならC++
いっちょ大穴狙うならRust (次の次くらいに来るかも)
168デフォルトの名無しさん
2022/03/11(金) 12:02:29.15ID:0bHD9k1s
Java, C# は使えて当然、C++が分かるなら誉めてもらえる
169デフォルトの名無しさん
2022/03/11(金) 12:17:23.16ID:YhXLzsgi
>>164
勉強はいつだって意味があるよ
2〜3日入門書を読めば大体分かるだろ
入門書の値段分ぐらいは価値があるよ
170デフォルトの名無しさん
2022/03/11(金) 12:19:29.55ID:YhXLzsgi
goは言語自体はあまり面白くないからね
仕事で使う予定がないならもっと尖った言語の方が面白いだろう
171デフォルトの名無しさん
2022/03/11(金) 12:42:59.72ID:MsCX3gC/
みなさんありがとうございます。
Javaとphpを仕事で使っていますが、Goの何でも自力で書く的なものに惹かれて将来的には仕事で使いたいと思いました。
172デフォルトの名無しさん
2022/03/11(金) 13:38:23.24ID:XWreYn/x
>>164
goかrustの2択だったらrustかな?
goは中途半端になってしまった。
173デフォルトの名無しさん
2022/03/11(金) 13:49:54.80ID:uv7nfwNg
>>166の言う通りケースバイケースすぎてなんとも
もうちょっと素性や目的を明かしてくれないとね
あらゆるケースを想定して書くのはめんどう
174デフォルトの名無しさん
2022/03/11(金) 14:38:59.33ID:2kEBQcz7
Goは文法だけなら超簡単だけど
channelを使った並行プログラミングのパターンをしっかり身につけてないと使い物にはならない
175デフォルトの名無しさん
2022/03/11(金) 14:45:54.90ID:laeBnhbM
Dust信者暴れないでください
176デフォルトの名無しさん
2022/03/11(金) 14:48:37.14ID:H8qFXNfY
>>171
そういう志向ならgo もいいけどcのほうが勉強になると思う。
なんだかんだ言ってもサンプルとか解説はcのほうが多いし。
177デフォルトの名無しさん
2022/03/11(金) 19:15:19.80ID:qrl8XqzC
>>171
> Javaとphpを仕事で使っています (中略) 将来的には仕事で使いたい
どう考えてもJS一択。現在Javaメインで鯖周りだけPHPなら、明日から使える。

> 何でも自力で書く的なものに惹かれて
分野ごとに言語が違って一々勉強が必要なのはナンセンスじゃね?とは思うだろうが、
実際はJavaでも何でも出来るが、
例えばJavaでGUIやるよりは勉強の手間含んでも他言語の方がマシなのでみんなそうしてる。


Javaを既に普通に使いこなしているのなら、Goを『学ぶ』意味はない。方言程度で使えるはず。
引っかかるとしたらポインタだが、ポインタを学ぶならCの方がいい。
俺はパラダイム違いという意味でもJSだと思うけどね。関数ポインタ/クロージャを常用する言語をやった方がいい。
https://xn--97-273ae6a4irb6e2hsoiozc2g4b8082p.com/%E3%82%A8%E3%83%83%E3%82%BB%E3%82%A4/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E%E3%81%AF%E8%A4%87%E6%95%B0%E7%BF%92%E5%BE%97%E3%81%99%E3%81%B9%E3%81%8D/
178デフォルトの名無しさん
2022/03/11(金) 20:08:22.23ID:o63L8Mvt
>>176>>177も勧めてるけどC言語は基礎教養として必須
C言語のあとRustへ進めば進みやすい上に今どきの各種プログラミングパラダイムを押さえられていいかな
179デフォルトの名無しさん
2022/03/11(金) 20:56:16.13ID:QqXcHrRr
Cへの理解があればまあ何とかなるっしょ
180デフォルトの名無しさん
2022/03/11(金) 21:03:32.08ID:parWzd9L
>>178
JavaやっているやつにRust勧めるなよ。c++でRAIIとunique ptr勉強してからじゃないと無理。

GC前提のgo のほうが近道だわ。
181デフォルトの名無しさん
2022/03/11(金) 21:17:23.70ID:o63L8Mvt
>>180
C++は以前の「筋が悪いが代替がないから使う」から今は「避けることができる」言語
今となっては学ぶべきでない言語として大方のコンセンサスがあります
C→Rustと進むのが非常にわかりやすくてベスト
182デフォルトの名無しさん
2022/03/11(金) 21:27:24.13ID:uv7nfwNg
ウェブ業界にいるんなら、Rustの案件は将来も少ないだろうし、
>>171が仕事で使う目的で学ぶっていう意味でいうならGoのほうがええやろ
教養としてならRustのほうが学ぶこと多くて面白いけど
183デフォルトの名無しさん
2022/03/11(金) 21:36:55.19ID:o63L8Mvt
>>182
それならばウェブ業界で今急速に進んでいるのがWebAssembly
そしてWebAssemblyの記述言語は圧倒的1位がRust
184デフォルトの名無しさん
2022/03/11(金) 21:58:49.55ID:qrl8XqzC
>>180
ただGoだと何も「新しくは」できなくね?

ガチ鯖はJavaで、ライト鯖はPHPで既に書けるなら、Goが他に活躍してる分野って何?
今時のデスクトップアプリはGUI無しとかあり得ないから、CLIアプリとか?ならJavaで全く問題ない。
Javaが動かせない貧弱環境(=非x86、非linux、つまり大体組み込み)ならC一択だし。


>>181
> C++は (中略) 今となっては学ぶべきでない言語として大方のコンセンサスがあります
これはない。お前の周りがトチ狂ってるだけ。Rust界隈はそうなのかもしれんが。

俺はRustは最終的に死ぬと思ってる。
C++とはコミュニティの規模が多分4桁違うし、FireFoxを殺したのはRustだし。
(まあ俺はGoも最終的に死ぬと思ってるんだが)

初心者は「全機能を使いこなす事が必要」だと思ってるみたいだが、これは明確な間違いで、
C++なんて全部入りなんだから全機能なんて使ってる奴は居ない。
(例えばインラインアセンブラも普通に出来るが、常用されても困るわけだし)
C++は元々「必要な機能を選んで使う」思想で、
初心者は「何が必要で何が不要か」判断出来ないから適切に使うのはかなり無理。
で、そういう奴は大体C++の悪口を言う事になるわけだが、ほぼ「肥大化してる」だけだろ。
それはお前が適切に取捨選択出来ないだけだ馬鹿タレ、でしかない。
185デフォルトの名無しさん
2022/03/11(金) 22:23:28.57ID:wdcjWAJU
>C++は元々「必要な機能を選んで使う」思想で、
>初心者は「何が必要で何が不要か」判断出来ないから適切に使うのはかなり無理。

一人で使う分には自分が理解したところから使えばいいんだがチーム開発だと悩ましいよな。
書いた本人以外理解が難しいコードなんてのも簡単に量産されるし。
186デフォルトの名無しさん
2022/03/11(金) 22:27:06.80ID:/JvA5shV
>>184
そこは冷静になって純粋に言語機能をC++とRustで比べてみればいいんじゃないか
言語としてはC++が勝っている点がほぼなくC++の様々な欠点をRustが改善解消
だからこそ大手IT各社が揃って共同でRust foundationを起ち上げるなど垣根を超えて惚れ込んでいる
187デフォルトの名無しさん
2022/03/11(金) 22:57:33.99ID:qrl8XqzC
>>185
だから「コーディングルール」で切るんだよ。

つか、多分、C++とそれ例外では「コーディングルール」自体の意味が違う。
C++のは機能も使い方も制限する。Goとかだと見た目だけだろ。
(Goの場合は見た目もディレクトリ構成も画一だからもしかして何もない?
googleもC++/JS/PythonはあるがGoのはなさそう)

C++に問題があるとすれば、「難しいコードを書くことに何らブレーキがない」事で、
これをコーディングルールで補ってる。
C++以外の言語は「使うべきでない機能はそもそも入れない」で、これは正しいが、
後出しじゃんけんじゃないと無理。


>>186
言うてRustってC++で廃止されたauto_ptrを焼き直しただけだろ。
ヒープの生存期間をスタックと連動させるのはいいが、それはCでも書けるしCだと基本だった手法。(ただし手動)
だからRustで生成されるコードはC++でも書けてしまう。
そしてRustは境界チェックがある分だけ遅い。よって最終的に勝てる理由がない。
この点FireFoxの連中は大馬鹿もいいところで、スピード競争してるのに速度優位性がない言語を選んだ時点で自殺だった。

RustはCの代替になろうとしていて、勿論ネイティブバイナリを吐くわけだが、
これを潔く諦め、Cのコードを吐く(TS/JSの関係と同じ)だったら、覇権とれたかもとは思うけど。
この方法だと組み込み全分野に無理なく浸透していけるし。
(ただしこれだとC++の代替にしかならないから気に入らないのだろうけど)

RustでOS書こうとしてる馬鹿もいるだろ。誰も使わないよ。
Linuxより速くて小さい物を提供出来る技術的理由がないし、
仮にそれが出来てもCでも書けてしまうからLinuxももっと小さくなり、永久に追いつけない。
Rustには生き残る理由がない。
188デフォルトの名無しさん
2022/03/11(金) 23:09:09.74ID:egx2H9Pr
このおっさん勢いあるスレならどこでも湧くな。そして偏った知識で見境なく喧嘩ふっかける。かまってちゃんが過ぎる。
189デフォルトの名無しさん
2022/03/11(金) 23:13:16.62ID:/JvA5shV
>>187
そこまで無知だとは思わなかった
叩きたいならばまずは知識を身に着けないと恥ずかしいよ
190デフォルトの名無しさん
2022/03/11(金) 23:43:25.63ID:qrl8XqzC
>>189
エコーチェンバーが欲しいのなら他言語スレに出てくるべきではないよ。


Rustが提供してる機能は結局のところ、プログラマの補助でしかない。
Rustで書かないと実現出来ないコードなんて存在しない。

元祖馬鹿向けCはJavaで、大ヒットして覇権を取った。
ただし関数ポインタが無かったのでGUIには全くフィットせず、そこは全滅してる。
とはいえ覇権言語であり、現在でも1/3はJavaだろ。

2代目馬鹿向けCがGoで、これもそこそこヒットしてる。(とはいえC/C++の規模からするとゴミだが)
RustなんてGo以下のゴミだし、そもそも人数は馬鹿>>>選ばれし勇者なんだから、
ずっとGoよりもゴミのままだと思うけど。
んで、元祖選ばれし勇者にはC/C++で十分だし。

俺はRustはC++のコーディングルールの一部になると見てるし、そうなる事を望んでる。
191デフォルトの名無しさん
2022/03/11(金) 23:50:45.41ID:/JvA5shV
>>190
C/C++の欠点はメモリ安全性等の欠如により発生する欠陥の多さであるとグーグルとマイクロソフトが意見を同調している
そこへ現れたRustはコンパイルが通ればメモリ安全性やデータ競合ゼロを保証するため彼らにも歓迎され用いられている
192デフォルトの名無しさん
2022/03/12(土) 00:13:31.67ID:JgaGU6xu
>>191
C/C++の欠点は「馬鹿が『ひとりでも』混ざるとどうにもならない」事だよ。

ただ、静的解析で何とかなるものなら、「全部入り」のC++にもいずれは導入される。
現在C++は3周遅れ(9年遅れ)程度だから、
9年のうちに優勢になれば勝ちだが、これは多分無いでしょ。
193デフォルトの名無しさん
2022/03/12(土) 00:39:34.87ID:MeH0OP6r
>>192
ところがC++には不可能
Rustには簡潔な借用ルールとライフタイムがあるために成立している
さらにRustにはunsafe操作の分離という導入もありこれが安全性の保証に大きく寄与している
194デフォルトの名無しさん
2022/03/12(土) 01:12:13.25ID:jQJpzSFj
Go の G の字もないなw
195デフォルトの名無しさん
2022/03/12(土) 01:23:48.74ID:SUJjbHcC
次スレまで待とうかと思ってたけど流石にワッチョイスレ作った方がいいか?
完全にスレが崩壊してる
196デフォルトの名無しさん
2022/03/12(土) 01:28:54.16ID:JgaGU6xu
>>193
> ところがC++には不可能
『今の』C++にはね。
ただ、C++の場合は少しでもその方がコード効率がよくなる、とされると採用される。(ので良い物はいつか採用される)
それが「全部入り」

> 安全性の保証
要するに補助輪でしかない。Rustのは全部これ。

> 簡潔な借用ルールとライフタイム
これは俺は筋が悪いと思ってるけど。
プログラマに生存期間をマニュアルで管理させてるだけ。(これはCと同じ)
そしてRustの場合はこれの整合性を静的に解析出来る。(これはC++にはない。が、コンパイラ側で対処出来る話。そのうち導入される)
だいたいそもそも「貸し借り」なんてやってる事自体、
一般的プログラミングにおいての生存期間と合致してないからであって、根本的に筋が悪い。

そもそもプログラマは管理したいとは思ってないから、GCの方が筋がいい。
GCだと駄目な件については、例えば以下なら、(このブログは有名なので色々言われてるようだが)
https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f?gi=bd6f6b9c5be3
そもそも大量の生存オブジェクトが存在する場合はGCには不向きなので、
Goについてなら例えば「GC非対象の変数宣言」構文が用意出来れば済んだ話。
(この思想がGCとフィットしないから一般的に導入される事はないが、
VC++ならnew/gcnewでGCなし/ありを切り替えられるし、俺はこれで十分だと思うよ)


まあ心配しなくても、所有権の貸し借りが素晴らしいってことになれば、C++にも確実に導入される。
そのときRustは死ぬよ。その猶予が9年間。
197デフォルトの名無しさん
2022/03/12(土) 03:16:10.27ID:JxEFMwOe
>>196
合成の誤謬ってやつだね
C++は全てを含むから最強
あとはC++から必要な機能のみを抜き出せないユーザーの責任

完全チューリングマシンでもやっとけ
198デフォルトの名無しさん
2022/03/12(土) 04:40:23.33ID:ykq+YJH5
VScodeで自前のパッケージを使おうとしたら、importの追加のクイックフィックスが出ないんだけど
これって昔からだっけ?
199デフォルトの名無しさん
2022/03/12(土) 04:49:23.73ID:ykq+YJH5
あ、違うわ
プロジェクトのルートに置いてると /cmd/internal 以下のパッケージは参照できないみたい
なんだこれ?こんなルールあったっけ?1.17.7
200デフォルトの名無しさん
2022/03/12(土) 04:52:53.03ID:ykq+YJH5
外部パッケージの参照の仕様はまあ仕方ないんだけど
なんで内部パッケージで相対参照できなくなったんだろう
どっかにブログとか理由の解説ない?
201デフォルトの名無しさん
2022/03/12(土) 05:00:12.51ID:ykq+YJH5
ディレクトリ名とpackageでの宣言、二重に記述しないとまともに動かないパッケージ名ルール
物凄く不満

それでいてcmdとかのディレクトリだろうがmainはmainパッケージだし
一貫性よりも何か重要な理由があるのか?
202デフォルトの名無しさん
2022/03/12(土) 06:14:51.35ID:f9B4ek7q
ITの9年は長いでよ、ロートルには短いかもしれんが。
そして30年という長い年月を持ってしてもC++はLinuxカーネルに入れなかったのにRustは入った。この違いよ
203デフォルトの名無しさん
2022/03/12(土) 08:30:46.88ID:JgaGU6xu
>>202
> ITの9年は長いでよ、ロートルには短いかもしれんが。
長いという程長くもない。お前もオッサンになれば分かる。まあこれはさておき、
実際、現在のプログラミング言語のアイデアは既に80年代に出尽くしており、
今はそれを実装していってるだけ、とは言われてるだろ。言う程進化はしてない。
Rustだって何一つ「新しいアイデア」はないだろ。

> Rustは入った
ググってみたが、まだforkして勝手に起こしただけじゃね?
> https://japan.zdnet.com/article/35174333/
> https://thenewstack.io/rust-in-the-linux-kernel-good-enough/#:~:text=When%20we%20first%20looked%20at%20the%20idea%20of,the%20standard%20C%20normally%20used%20in%20Linux%20development.
多分知らないのだろうけど、オブジェクト指向最盛期(2005頃)には、
・Linuxのコードを『安全な』オブジェクト指向で書き直そう!
というプロジェクトはあった。今はググッても出てこない程跡形もないが。
これと同じだよ。
安全に書き直したコードは、書き直してないコード(既に世界中で使われてる)よりバグが多いから意味がない。
この反省を踏まえてRustは「書き直すわけではない」というスタンスのようだが。

LinusはC++の依存性を持ち込む文化を毛嫌いしている。だからC++は入らなかったが、Rustも同じ。
Rustのコードを入れれば、Rustが読み書き出来ないと参加出来なくなり、つまり開発人数がコミュニティ規模に比例して小さくなってしまう。
今現在のRustのコミュニティ規模なんて、C/C++からすると多分4桁くらい小さいだろ。それは開発人数を1/10000に削るのと同じ。
(C++ではコードそのものの依存性が問題だが、Rustの場合は他言語への依存が問題)
馬鹿じゃなければやらないし、Linusは馬鹿ではないと思うけど。


まあRustの連中はすさまじいエコーチェンバーの中で生活してる事は分かった。
204デフォルトの名無しさん
2022/03/12(土) 08:34:30.70ID:SV7jSkht
Rustスレで相手してもらえないからってこっち来るの止めてもらっていいですか
205デフォルトの名無しさん
2022/03/12(土) 09:40:04.46ID:aEfI8PjB
何を勘違いしているのか知らんが、俺のこのスレの直前の書き込みは>>104
206デフォルトの名無しさん
2022/03/12(土) 12:00:36.41ID:MMCseHWC
cppの話はcppスレでやれよ。
しかしgcnewってC++/CLIの話じゃないの?
207デフォルトの名無しさん
2022/03/12(土) 12:22:07.70ID:EqbJSpHR
gcnewってなんだこれ、.Net専用とはいえなかなか邪悪な代物だな……
208デフォルトの名無しさん
2022/03/12(土) 12:34:33.53ID:ARhhT+a7
>>196
それは知識が足りていない
借用ルールの借用とは当然ポインタを含む概念でありC++でも借用は普通に行われている
そして借用をよく見ると読み取りのみの借用と書き換えもありの借用の2種類がある点はどの言語でも同じ
読み取りの借用がある状況で書き換えの借用を許せばデータ競合が起きることはわかるだろ?
もちろん書き換え借用がある状況で読み取り借用を許してもデータ競合が起きうる
一方で読み取り借用だけならば複数の読み取り借用を許してもデータ競合は起きない
つまり『multiple reader XOR single writer』となりこれが借用ルールだ
もちろん全てのプログラミング言語においてこの借用ルールに違反するとデータ競合が起きうる
Rustはこの借用ルールに違反がないかどうかをコンパイル時に判定できる言語仕様となっている
だからRustはメモリ安全性だけでなくデータ競合安全性も保証することができるわけだ
209デフォルトの名無しさん
2022/03/12(土) 12:59:10.90ID:6Ov0/1Y8
荒らしまくるRusterと不愉快仲間たち
210デフォルトの名無しさん
2022/03/12(土) 13:13:55.79ID:4DPn029u
最近他のどのプログラミング言語スレいってもRustの書き込みあるな
飛ぶ鳥を落とす勢いとはこのことか
そういえばJavaが出現した頃、C++erがよくJava厨に噛み付いてたっけ
211デフォルトの名無しさん
2022/03/12(土) 13:17:12.31ID:IpH8+wiy
>181 >186 >187 >190 >191 >193 >196 >197 >202 >203 >208 >210
>>96
荒らしに反応するやつも荒らしだからな。誘導だけしろよ。

>195
早いところワッチョイ立てようぜ。
NGが捗る。
212デフォルトの名無しさん
2022/03/12(土) 13:29:40.57ID:JgaGU6xu
>>96 読んでみたが、なるほどここと同じような話が展開されてる。
ただ、C11に移行しようとしてるじゃないか。 >>202
> http://2chb.net/r/tech/1638086359/542
> トーバルズ氏、Linuxカーネルを「C89」から「C11」コードに移行する準備
> https://japan.zdnet.com/article/35184296/
このペースならあと10年はRustなんて入らないね。


>>208
> それは知識が足りていない
これはその通り。俺はRustやる気はないし、借用だ何だかんだの顛末を見て、様子見する事にした。

C++で既に慣らした奴ですら戸惑うのは、
自然な(直感的な)ライフタイムと言語の管理機能がマッチしてないからだよ。

そもそも俺はCでもメモリリークに困った事はない。
ただこれは「困らない範囲でやってる」(=ごくごく安全運転に徹してる)からであり、俺が賢いわけではないが。
この辺の「安全運転を強いられる」のが嫌でC++的にやりたいのも分かるし、Rustも良い実験だとは思うが、
余計な事を考えて、しかもそれでコンパイルが通らない事に悩まされるのは、そもそも設計が悪いからだよ。
つか、そんな事で悩むくらいならGCの方がいいから、実際ほぼ全部の言語はGC持ってるわけだし。

GCの問題点は色々あるけど、discordについては、Goに「GC非対象」を明示する構文があればGoのままで行けてたはず。
何も考えたくないんだよ、っていうGCの思想に反するけど。
Goはポインタのキャストって出来たっけ?出来るのなら、自前で大きめに確保して(数百MB)、
そこから小分けするmalloc/freeを用意してやれば済む。(現行の機能だけで出来る)
システムプログラミング言語だ!OSだって書けるんだ!って言ってるんだから、まあ何とかなるんだろうけどさ。


>>207
魔合体されてるVC++が見た目異様なだけで、
gcnewは単にgc対象ヒープから取るだけ。使い方はGC言語のnewと同じ。
(&*が既に使われてるから%^になってて初見で拒絶されるのは仕様)
213デフォルトの名無しさん
2022/03/12(土) 13:30:00.30ID:JgaGU6xu
>>211
96読んだ。俺は移動に同意でいいが、移動する権利は相手に与える。
つまり、レスが投下されたスレに俺もレスを投下するから、
俺にレス付けるなら、やりたい方のスレでレスしてくれ。
214デフォルトの名無しさん
2022/03/12(土) 13:48:18.60ID:ARhhT+a7
>>212
全てのプログラミング言語の中で
コンパイラメッセージが最も親切でわかりやすく修整点も具体的に指摘してくれるのがRustコンパイラ
この状況でどうしてもコンパイルが通らないのだとしたら知能がよっぽど低いのではないだろうか?
標準的な知能があれば問題とならないような点でつまずいたのかね
215デフォルトの名無しさん
2022/03/12(土) 18:45:21.44ID:IpH8+wiy
>212 >213 >214
>>96
とっとと行け。スレ違い続けんな。
216デフォルトの名無しさん
2022/03/13(日) 17:26:43.65ID:fVzSesSr
ワッチョイ無いとほんと不便ね
217デフォルトの名無しさん
2022/03/15(火) 11:20:02.60ID:9ud1N6mP
Goってどうやって勉強すればいいの?
218デフォルトの名無しさん
2022/03/15(火) 11:47:39.11ID:UpdRUhUR
>>217
Goに限らんけど俺の場合は実際に動くコードの載ってる本で写経しつつ読み進めるのが一番短時間で覚えるみたい。
俺って頭じゃなく体で覚えるタイプなのかも。
結局、文法的なものは他の言語触った経験あれば新しい言語も難しくないんだけど、キーワードの要不用やライブラリやそれの使い方とか、その辺記憶するのが一番面倒。
219デフォルトの名無しさん
2022/03/15(火) 11:58:47.19ID:9ud1N6mP
>>218
やっぱ自分の能力次第だよな。
俺はなんかサイト一個作ったほうが覚えられそうだから作ってみるわ。
何作ろう
220デフォルトの名無しさん
2022/03/15(火) 12:36:58.99ID:sRZMI6dS
標準的なソースコードを集めたコードサンプル集とかあればいいんだけどな。
221デフォルトの名無しさん
2022/03/15(火) 13:34:26.14ID:DIDzUA9i
ハイエンドというほどじゃないが、みんなのGo第二版はよく参考にしてる
flag使ったときとか

でも言いたいのは多分、ファイル読み込みとかごく基本のコード断片だろなー
222デフォルトの名無しさん
2022/03/15(火) 14:08:20.21ID:/twmJcjK
https://qiita.com/takehanKosuke/items/9034e3d993df337eb669
こういうのの巨大なバージョン、誰かgitに公開してたりしないかね
223デフォルトの名無しさん
2022/03/15(火) 15:44:18.88ID:DIDzUA9i
テーブルドリブンテストはなんか標準かでGenerateされるようになったね
224デフォルトの名無しさん
2022/03/15(火) 15:45:27.48ID:DIDzUA9i
テスト対象の呼び出しまで完璧にサポートされてて便利すぎる
225デフォルトの名無しさん
2022/03/16(水) 12:58:38.59ID:7fdw8GJ5
Go 1.18 is released!
https://go.dev/blog/go1.18
226デフォルトの名無しさん
2022/03/17(木) 00:28:51.50ID:+BzvG1OL
ジェネリクス使ったmapやsliceのユーティリティが乱立するのかな
227デフォルトの名無しさん
2022/03/17(木) 00:57:28.83ID:R5Hf13zE
やっっっとジェネリクス医薬品きたのかよ
どれどれどんな塩梅よ
228デフォルトの名無しさん
2022/03/17(木) 01:41:25.22ID:bsoficKO
>>225
よっしゃ!
そしたら1.17入れる準備するか。
229デフォルトの名無しさん
2022/03/17(木) 01:44:14.40ID:+BzvG1OL
やっとこういうのできるようになったか
https://github.com/samber/lo
230デフォルトの名無しさん
2022/03/17(木) 03:24:50.03ID:OxdqHDsn
>>229
使いにくいインタフェースで筋が悪いな
あと多段適用するにしても途中で毎回配列生成は無駄すぎる
231デフォルトの名無しさん
2022/03/17(木) 22:55:16.78ID:fLlxA/2d
GoCVのWindows版一生動作しなくて泣いてる
動作してる人がいたらmingwとgocvのバージョンの組み合わせとか教えてほしい
232デフォルトの名無しさん
2022/03/19(土) 14:59:48.35ID:lmd9ivJq
>>231
解決した
gocv 0.28.0
mingwgcc 8.1.0
go 1.8
で動いた
233デフォルトの名無しさん
2022/03/27(日) 19:47:35.42ID:4kGrQ90w
今更案件に採用したいとの連絡が来やがった。
もう他に決まっちゃったよ…
234デフォルトの名無しさん
2022/03/27(日) 20:03:34.05ID:AzR4xInv
go案件一回だけ行けたことあるけど
バージョンが古くてきつかった記憶あるなぁ
下手にでかいシステムだとそういうのあるんだよな
235デフォルトの名無しさん
2022/03/28(月) 00:04:31.98ID:9wMV4I/Y
もう go modules 無しで開発できる自信がない…
236デフォルトの名無しさん
2022/04/01(金) 09:14:02.94ID:Z5kUzNXs
構造体のブランクフィールド
struct {
_ int
}
って、どこかのソースで使ってるのって見たことある?
237デフォルトの名無しさん
2022/04/01(金) 10:24:23.29ID:Z5kUzNXs
1.18 で ~T って、T を実装している型という認識で正しいのかな?
238デフォルトの名無しさん
2022/04/01(金) 15:58:41.67ID:Z5kUzNXs
1.18 の言語仕様読んでるけど
ジェネリックスいらんわホントに
HTMLコメントでは書き足りてないとか、ホントにホントに…
239デフォルトの名無しさん
2022/04/01(金) 16:36:14.26ID:CvDUeZYP
>>238
どう言う意味でいらない?
240デフォルトの名無しさん
2022/04/01(金) 17:16:02.47ID:Z5kUzNXs
>>239
ジェネリックス入れる上では仕方のない事なんだけど、
型関係の言語仕様が山になって追加されてた

spec の単純行数にして
1.17 - 2823 行
1.18 - 3265 行 (+442行)
241デフォルトの名無しさん
2022/04/01(金) 17:22:16.71ID:Nf7Dhk5p
これからガンガンでかくなるはずなので、これに耐えられないなら早く逃げてくださいね
お疲れさまでした
242デフォルトの名無しさん
2022/04/01(金) 17:23:53.64ID:Z5kUzNXs
>>239
ライブラリ開発者くらいじゃないのか?
欲しがってるのは正直、一部の開発者だよな
そのために仕様を10%単位でブクブク肥らすのは許容できるトレードなのか?
243デフォルトの名無しさん
2022/04/01(金) 17:39:03.75ID:LyJwVbZX
>>242
通常のユーザーがジェネリック使うの強制なんだっけ?
ライブラリアン専用なら気にする必要無い気がするけど。
244デフォルトの名無しさん
2022/04/01(金) 18:48:56.14ID:Z5kUzNXs
>>243
初学者が仕様書を読むとき、ハードルがかなり上がってしまう
何故かというと、至るところで型統一やらジェネリクスの用語の汚染が進んでいるから

もう、初心者には1.17の仕様書で勉強させるべきに思える
245デフォルトの名無しさん
2022/04/01(金) 18:51:47.52ID:LyJwVbZX
>>244
初学者は仕様書読ませるのがそもそも間違い。
入門書読ませなさい。
246デフォルトの名無しさん
2022/04/01(金) 18:55:28.61ID:LyJwVbZX
>>245
s/初学者は/初学者に/
typoすまんね。
247デフォルトの名無しさん
2022/04/01(金) 19:00:06.78ID:Z5kUzNXs
あと珍妙に思えるような気もしなくもない文章が
The result of constraint type inference
is final substitution map M
from type parameters P
to type arguments A
where no type parameter P appears in any of A.

引数Aから型パラメータPがなくなるまで置換するマップMを制約型推論の最終結果とする、でいいのかなあ
248デフォルトの名無しさん
2022/04/01(金) 19:06:19.64ID:Z5kUzNXs
>>245
あー、自分基準で初学者としてCのベテランレベルを想定していたわ
gccでインターネットサーバを書いてた層
半日でだいたい理解して三日でアプリを組み始めた
249デフォルトの名無しさん
2022/04/01(金) 20:49:31.03ID:5iHnQC+v
プログラム作る側からすると便利なライブラリが増えるからいいと思うわ
250デフォルトの名無しさん
2022/04/01(金) 21:03:43.90ID:Nf7Dhk5p
map/reduce/filterみたいな操作をたくさんするとき、マジで面倒だったしジェネリクスあればいろんな場面で助かる
251デフォルトの名無しさん
2022/04/01(金) 21:14:52.99ID:jxgGur0i
>>247
意訳すると型パラメータの方程式を解いた結果の制約集合が推論結果です、ということか
もったいぶった文章だな
Rob pikeのチェックは入ってるのか?
252デフォルトの名無しさん
2022/04/01(金) 23:17:37.92ID:Z5kUzNXs
>>251
1.18の言語仕様の一部
その文は、Constraint type interface の中頃
253デフォルトの名無しさん
2022/04/01(金) 23:32:09.14ID:Z5kUzNXs
とにかく読みづらい仕様書になっちまった!
と言いたい
254デフォルトの名無しさん
2022/04/01(金) 23:56:13.72ID:auc7zK9Q
そうですね
もうGoを使うのはやめたほうがいいですよ^^
255デフォルトの名無しさん
2022/04/02(土) 00:13:08.30ID:YOvjIKEd
初心者は仕様書なんか見ない
256デフォルトの名無しさん
2022/04/02(土) 01:04:35.98ID:m+vvtGqp
システムプログラミングしかしてないので
あんまりいらないけど
Web系とかはあったろうが便利なんじゃないだろうか

コレクションの中身が何の型かって基本的なことがわからないのはキツいよ
257デフォルトの名無しさん
2022/04/02(土) 02:22:24.01ID:xHH5TZmF
Goでコレクションなんか使うか?
プロダクション運用してるけどsliceとmapしか使ったことないわ
258デフォルトの名無しさん
2022/04/02(土) 05:33:45.87ID:tnnDyMVL
>>248
ベテランでも仕様書は読まないだろ。
普通はクイックツアー -> やりたいことのサンプルコードだと思うわ。
259デフォルトの名無しさん
2022/04/02(土) 06:10:04.85ID:BAqmRjl3
>>258
普通は仕様書からチェックすると思うが
CでもC++でもJavaでもGoでも

あれ?C#の言語仕様書って見た覚えがない…
260デフォルトの名無しさん
2022/04/02(土) 06:14:33.15ID:BAqmRjl3
>>259
ああ
C#はマイクロソフトのヘルプで見てったから文法書形式のは覚えがないのか
JavaScriptもMDNばかりで仕様書をよんだことないや
261デフォルトの名無しさん
2022/04/02(土) 06:20:24.88ID:tnnDyMVL
>>259
ANSIとかISOとか持っているやつがそんなに居るかね。
262デフォルトの名無しさん
2022/04/02(土) 06:27:00.86ID:BAqmRjl3
>>261
CとかC++やってりゃ赤とか緑とかARMとか持ってないか?
もっともインターネット以前だけど
263デフォルトの名無しさん
2022/04/02(土) 12:45:39.96ID:BAqmRjl3
たまには仕様書も読みなおすと新鮮
いつの間にか妙ちきりんなルールが追加されてたりするし

_ &= flag というように、算術代入の左辺に空白識別子は置けません、とか誰得?
NOOPだとばかり思ってたけど変わったのか(わざわざ確認する気もない
264デフォルトの名無しさん
2022/04/02(土) 13:41:36.50ID:m+vvtGqp
おじさん消えて
265デフォルトの名無しさん
2022/04/02(土) 14:52:46.43ID:YPKLSNfQ
日本の製造業何十社から、トップが集まった、MISRA-C 研究会でも言ってた

日本には、C の仕様書に詳しい香具師はいない!
だから、仕様書で議論する事ができないので、

組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド、MISRA‐C研究会、2006
という本が書かれた

これが実際のコーディングルールのバイブル

抽象的な仕様書で、議論をしない事。
必ず、具体例・コードで議論する事

これが大原則

仕様書で議論するのは、現実的じゃない。
江添のC++ 本を見ても明らか

仕様書を表現した無数のコード例が書いてあるけど、細部は省略しますばっかり。
細部まで突き詰めていくと、切りがない

江添レベルの人間が、日本に2人もいないので、仕様書で議論することは無理
266デフォルトの名無しさん
2022/04/02(土) 15:00:01.25ID:YPKLSNfQ
generics は、Rust にもあるから
267デフォルトの名無しさん
2022/04/02(土) 16:04:50.21ID:4HZvLFXe
またジジイが暴れてんのか
268デフォルトの名無しさん
2022/04/02(土) 16:31:43.87ID:BAqmRjl3
じゃ、どういう話題なら気に入るのかね若い人
269デフォルトの名無しさん
2022/04/02(土) 16:33:42.78ID:vRBLByq+
>>266
そこは有る無いという話ではない
そこはRustの方が使いやすい
特にトレイト境界がありがたい
270デフォルトの名無しさん
2022/04/02(土) 17:47:27.46ID:K3ABhaa3
最近マシにになったと思ったが我慢できないのかな?
Go Nimスレに閉じこもっててくれ
そこは好きに使っていいから
個別スレでは大人しくしといて
271デフォルトの名無しさん
2022/04/02(土) 18:14:01.71ID:+a+ANJVh
>266 >269 >270
>96
餌与えんな。
272デフォルトの名無しさん
2022/04/02(土) 18:30:53.19ID:FvAcb10F
MISRA出してくるのも相当おかしいけどな。
273デフォルトの名無しさん
2022/04/03(日) 08:15:05.26ID:YAESyHF/
>>270
274デフォルトの名無しさん
2022/04/04(月) 01:10:11.27ID:2YLoUSsE
1.18の言語仕様はどこで公開されてるの?
275デフォルトの名無しさん
2022/04/04(月) 08:08:03.11ID:dKoFZlg8
>>274
https://go.dev/ref/spec
1.18 はもう安定版だから現在の言語仕様がそれ
276デフォルトの名無しさん
2022/04/04(月) 08:11:46.50ID:GOjfDlOJ
>>274
https://go.dev/ref/spec
じゃないの?
277デフォルトの名無しさん
2022/04/04(月) 08:24:54.17ID:dKoFZlg8
定数、変数、型やらの基本的な言語仕様で型パラメータやらコア型とかのジェネリクス関連の概念も持ち込んで記述する必要がある
けれどもライブラリ、それも今までinterface{}を引数に持ってたような関数を書いてたライブラリにしか関係ない概念を何故か皆が学ばないとならなくなった
単純に仕様書の行数から、学習コストは10%悪化したと見なせる

ジェネリクスは項として別枠に記述して、そこで定数やらでのジェネリクスの影響について書いてもらいたかった
278デフォルトの名無しさん
2022/04/04(月) 08:27:50.29ID:dKoFZlg8
>>277
いや、無茶振りだとは分かってるただの愚痴

愚痴ばかりだから老がいとか言われてるんだよな
279デフォルトの名無しさん
2022/04/04(月) 09:23:36.60ID:2YLoUSsE
>>275
なるほど、ココ読んでみるよ。
280デフォルトの名無しさん
2022/04/04(月) 09:37:43.77ID:iJ6pcz9H
Goの長所はシンプルさ
その長所を劣化させてまで今さら導入すべきものではない
どうしても必要なものならば最初から仕様に含めるべきだった
281デフォルトの名無しさん
2022/04/04(月) 16:06:42.84ID:yu8UGqfF
ロブパイクが実質リタイアしたから通ったんじゃないかな
282デフォルトの名無しさん
2022/04/04(月) 21:28:48.99ID:dKoFZlg8
一応、大昔からジェネリクスは入れるとロードマップで予告はされてた
283デフォルトの名無しさん
2022/04/06(水) 03:19:36.92ID:kWgOKN13
ジェネリクスなんていらん、ていってるやつのほとんどがロートルジジイばっかりでわらう
284デフォルトの名無しさん
2022/04/06(水) 03:39:50.83ID:PLeFIjOG
いや、ジェネリクス導入が遅すぎたこととそれが中途半端であることを問題視する人々が多数派
そのために全体のシンプルさを失い更なる中途半端な状況を招いている
285デフォルトの名無しさん
2022/04/06(水) 03:46:30.81ID:wPZ6Wy+h
コンパイラの実装を大幅に変えなくていいから
この仕様に落ち着いた感はあるよな
286デフォルトの名無しさん
2022/04/06(水) 08:16:27.53ID:+qYubc5F
大体がJava5でジェネリクスが導入されてから、自分で書いた奴ってどれくらいいるの?
居るなら自分のプロジェクトリポジトリ晒してみ?


とか書いてから
ArrayListに散々お世話になっていながら、その言いぐさはないよなーと反省
287デフォルトの名無しさん
2022/04/09(土) 15:23:53.03ID:dkIcbWyn
golang.org/x/text/encoding/japanese でshiftjisをデコードすると
不正バイトはU+FFFDに変換されるんだけど
エラーを返してほしいときはどうすればいいの
288デフォルトの名無しさん
2022/04/09(土) 15:41:49.71ID:s1DYUnBK
ちんちんシュッ!シュッ!シュッ!
289デフォルトの名無しさん
2022/04/09(土) 17:58:03.72ID:P2GNRI+e
コードを見ても変換失敗時にエラーを返すロジックないし
ルーン '\ufffd' の変換結果をdstから探したら?
[..., 239, 191, 189, ...] という並びがあればエラーだと思うけど
https://go.dev/play/p/8ALF1MMIQPz
290デフォルトの名無しさん
2022/04/09(土) 18:00:08.15ID:P2GNRI+e
https://go.dev/play/p/8ALFIMMIQPz か?
291デフォルトの名無しさん
2022/04/09(土) 18:01:35.73ID:P2GNRI+e
https://go.dev/play/p/8ALFlMMIQPz
292デフォルトの名無しさん
2022/04/09(土) 18:06:47.65ID:P2GNRI+e
だめだplaygroundのURLがどこで間違ってるのかわからん
293デフォルトの名無しさん
2022/04/09(土) 18:09:17.78ID:9GFACAI5
playground側の問題かもしれんね
別のサービスでコード共有したら?
294デフォルトの名無しさん
2022/04/09(土) 18:18:21.65ID:dkIcbWyn
https://github.com/golang/go/issues/18898
もともとエラーを返すようにしてたのをFFFDに置換するようにしたのね

> ルーン '\ufffd' の変換結果をdstから探したら?
それしかないかー
295デフォルトの名無しさん
2022/04/09(土) 18:38:01.40ID:P2GNRI+e
>>293
5chはタブレットで見てて、コードを書くのはPC
手打ちで書き写してるせい
lとかIとか使う邪悪なシステムが悪い

fffdをバイトにデコードしてるだけだから上の配列値があればいいかな
296デフォルトの名無しさん
2022/04/09(土) 20:29:16.25ID:ALVqghU/
>>285
ジェネリクスなんて糞みたいなもののためだけにビルド速度落としたらgo使う意味がそもそもない。
297デフォルトの名無しさん
2022/04/11(月) 18:36:29.35ID:E/+8nzoc
golangの機能追加によるビルド速度低下なんて他の言語のコンパイルの遅さに比べれば毛の生えたようなものでしょ・・・
ビルド速度とは関係ないが、1.18から関数の呼び出しがスタック参照ではなくレジスタ引数で呼べるようになったので
実行速度が5%-15%改善してる。
298デフォルトの名無しさん
2022/04/12(火) 08:34:50.45ID:rpFygdst
否定的意見じゃないんだけど
レジスタ渡しって%単位で効くもんなのかな?
実処理の5-15%がスタック渡しに費やされていたって話だよね
299デフォルトの名無しさん
2022/04/12(火) 15:46:20.46ID:3xd8M5tv
速度的にはキャッシュに乗る乗らないとか色々ありそうだから
定量的に測るのは難しそうだが
そもそもマシンコードの関数呼び出しがレジスタ経由でしょ
なので普通になっただけかと
300デフォルトの名無しさん
2022/04/13(水) 23:15:55.56ID:6kED4GhE
そんなわけない、レジスタに乗らないデータは普通にスタックポインタレジスタでスタックに格納される。golangが
スタックだったのは実装が簡単になるからという理由が最も大きかった
301デフォルトの名無しさん
2022/04/14(木) 02:13:38.39ID:YSgRDOi4
関数の引数をレジスタ渡ししても
その関数内で別の関数を呼ぶときにスタックへ退避しなければならない
だからC言語でも引数はスタックに積んで渡す
302デフォルトの名無しさん
2022/04/14(木) 02:38:48.48ID:dvnOt0Zc
たしか処理系がどのABIを採用しているのかによるんだと思うし、そんな十把一絡げにC言語やらの話を一般化されて話されてもツッコミどころが多い
__fastcall宣言とか使うとまたさらに挙動かわるし
303デフォルトの名無しさん
2022/04/14(木) 17:51:07.32ID:mUuUh3T2
少なくともLinuxのCでは第6引数まではレジスタで渡すよ
6個以上の引数なんてクソコード以外では存在しないから
実質レジスタ経由だよ
windowsは知らん
304デフォルトの名無しさん
2022/04/14(木) 20:18:22.21ID:biX3AFA3
x86はレジスタが少ないからスタックだった
305デフォルトの名無しさん
2022/04/15(金) 18:58:00.93ID:Or3DM27q
cみたいに他からも呼ばれるような言語の場合はスタック積みじゃないかね。
ABIの互換性の便利さと比較して、キャッシュ考慮したらそこまで性能出るとは思えんし。
306デフォルトの名無しさん
2022/04/16(土) 23:24:07.47ID:3G5k9Hnh
開発者が実装が簡単だったからと言ってるのでレジスタ数とか、GCCの第六天の魔王とか関係ないよ
307デフォルトの名無しさん
2022/04/16(土) 23:24:23.08ID:3G5k9Hnh
開発者が実装が簡単だったからと言ってるのでレジスタ数とか、GCCの第六天の魔王とか関係ないよ
308デフォルトの名無しさん
2022/04/30(土) 04:35:01.90ID:JVPX2fHb
ほしゆ(・ω・)
309デフォルトの名無しさん
2022/05/04(水) 00:52:17.30ID:J0ifRt83
良スレ緊急浮上age
310デフォルトの名無しさん
2022/05/05(木) 13:14:14.01ID:NIrZVW5R
もう30代くらいの若いお父さんだと菖蒲湯知らないんだな
子供より先に「ネギが入ってる!」ってリアクションするもんだから笑い堪えるのに必死だったわ
311デフォルトの名無しさん
2022/05/06(金) 10:59:50.63ID:Vl/2oQCy
漏れら極悪非道のageブラザーズ!
今日もネタもないのにageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧   ∧_∧    age
 (・∀・∩)(∩・∀・)    age
 (つ  丿 (   ⊂) age
  ( ヽノ   ヽ/  )   age
  し(_)   (_)J
312デフォルトの名無しさん
2022/05/07(土) 18:02:14.22ID:gG9SW2bz
What’s Next: GoLand 2022.2 Roadmap
https://blog.jetbrains.com/go/2022/04/28/goland-2022-2-roadmap/
313デフォルトの名無しさん
2022/05/07(土) 18:37:06.23ID:kTkslme4
GoLandとか使ってる人いるの?
Goを使う開発って腰を据えてGoだけがっつり書くという状況が少ないからクソ非効率だと思うんだが
314デフォルトの名無しさん
2022/05/07(土) 21:15:14.23ID:GY9FH+9n
つまりGo以外も書けるGoLandは効率的ということ
315デフォルトの名無しさん
2022/05/08(日) 11:42:43.42ID:fLgVumqc
ちんちんシュッ!シュッ!シュッ!
316デフォルトの名無しさん
2022/05/09(月) 10:46:12.95ID:f1SUg2PP
ちょっとVSCodeに不満を感じてなくて他に目移りしてないんだよな
317デフォルトの名無しさん
2022/05/09(月) 14:34:17.30ID:mdmZLJk+
318デフォルトの名無しさん
2022/05/10(火) 08:55:51.13ID:MTgcEKBT
ヽ(*゚д゚)ノカイバー
319デフォルトの名無しさん
2022/05/10(火) 17:22:50.19ID:RB5OHzJN
最近まともなレスが無いけどGoってやっぱ廃れたんだね
Ruby使いで良かった(^_-)
320デフォルトの名無しさん
2022/05/10(火) 18:51:52.61ID:lt5Lk+zW
廃れた言語同士仲良くしよう
321デフォルトの名無しさん
2022/05/11(水) 12:20:04.50ID:PHtWPQ6d
yoshikiはもうx japanのアルバムは出せないみたいな事言っちゃったしな
322デフォルトの名無しさん
2022/05/11(水) 17:22:36.20ID:RR+m2Q5s
20年後もメンテナンスし続けられる業務用言語
323デフォルトの名無しさん
2022/05/11(水) 19:40:14.48ID:MNr0qB9P
>>321
全く売れないだろうしな
今更アルバムとか時代遅れ
324デフォルトの名無しさん
2022/05/13(金) 07:55:24.36ID:Wz0AIi2I
ちんちんシュッ!シュッ!シュッ!
325デフォルトの名無しさん
2022/05/13(金) 07:57:59.19ID:ChGB8Ii1
もうGoは終わりだな
俺はこれからPHP使いになる。じゃあな
326デフォルトの名無しさん
2022/05/14(土) 10:01:06.26ID:Up3XZ1NA
俺はGo使いからC使いになるよ
結局全てのことはCで出来るんだし、森羅万象の神になるためにもCを極めるよ
327デフォルトの名無しさん
2022/05/14(土) 10:49:33.99ID:UjtsEluP
俺は魔法使いから妖精になるよ
328デフォルトの名無しさん
2022/05/14(土) 12:19:38.49ID:Nj4b7tCX
                            _ ー――--_    ._
                          <;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\r ´;;;;;;; ̄Y
                       / ̄/\ヽ;;;;/;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Y;;;;;;;;;;;;;;;;|
                     Y   / \.\ \;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Y;;;;;;;;;;;ノ
                     t――/ ;○;\   \/|;;;;;;;;;;;;;;;;;;;;;;|―イ
                    /   { "' '    \\ .|;;;;;;;;;;;;;;;;;;;;;;|
                   /    {   .   ;○;\\ヽ;;;;;;;;;;;;;;;;イ
                   Y     Y       , , , ,   ヽ;;;;;;;;;;;;;ハ
                   /      \  ェ‐-ュ       レ-‐-イ  ヽ
                  //      Y  .`´      __   Y  Y
                 /      ̄|  レ―― ̄ ̄入_   _ノ   |
               /        <    ̄|        ̄ ̄ |   .ノ
              /                          |  メ
             /        <                  .|イ
             /                           |
           /       <                 __|
        _ /                       _― ̄
   _-ー ̄  \   -―ナ               √
   V        \/  /               /
  /V          く              /
./   V          \           /
     V           \         /
329デフォルトの名無しさん
2022/05/14(土) 14:13:32.43ID:97r1y8hR
                        /⌒ヽ
                        {:: :{
                      _\{‐…‐-.. .,_
                        、丶`:: :: :: :: :: :: :: :: :`: 、
                  /:: :: :: /:: :: :: :: :: :: :: :: :: ::\
                     /:: :: :: :: √ :{:: :: :: :: :: :: ::V/:: ::ヽ
                 /:: :: :: :: ::.{:: : {:: :: ::{:: :: :: :: :V/:: ::‘,
              _.厶 --―  ¬:゚, :: :: V/:: }:: : }、\:: }
                 Ξ, , , , /////, ,  }!:{ ―- V/ }:: : }::\\
                Ξ/////////// }!::〉 ,xぃ、V:}:: : } :: :ハ;_:〉
               Ξ//ⅣムV/Ⅳ// }!´ ′ん心,}:: :,゙、 ::{
              Ξ /{  ̄  ̄ Ⅵ/ }!   乂ソノ::./ ノ:: {
             Ξ/「 0   < }/ }!   :.:./::_/ィ:: ::!
               -‐㍉       }/.}! _、-''⌒`ヽ、{ :: ‘,:\
            /    ’, \ /  }'/       \ :‘,ー-
                ′    -‘,      __{            ‘, ::`:: ┐
            ,′  ./   }___〈 ‘,            ‘,` ー┘
            ,′  {   ./     ハ ‘,       ノ   ‘,  〔_
             { {  {  / / 〔 ̄(‘, 丶  _∠ __    ′ 〔_
             { 丶  ー 1 ./  / / }'T !ー^'ー'"{       ', 〔_
             /    ` ‐ }/  / / / |} . {   {        ‘,⌒i
330デフォルトの名無しさん
2022/05/14(土) 17:49:19.77ID:CDz+vuVC
GopherくんがキモすぎたからGo言語廃れちゃった……
331デフォルトの名無しさん
2022/05/14(土) 18:21:37.53ID:RPnYOvNJ
キモナイ
332デフォルトの名無しさん
2022/05/14(土) 20:29:18.94ID:htcmp6+i
ごふぁーは見ててイライラするよね
333デフォルトの名無しさん
2022/05/14(土) 21:32:37.80ID:CDz+vuVC
GopherくんのAAください
334デフォルトの名無しさん
2022/05/15(日) 05:14:48.52ID:0uh5p1OH
ʕ◔ϖ◔ʔ
335デフォルトの名無しさん
2022/05/15(日) 15:32:41.40ID:tfU5J4ah
>>334
www
336デフォルトの名無しさん
2022/05/15(日) 18:08:41.50ID:t8huU0D2
>>334
これだわw
337デフォルトの名無しさん
2022/05/15(日) 18:19:52.67ID:hvviJfuV
>>334
完璧やんけ
338デフォルトの名無しさん
2022/05/15(日) 22:07:53.72ID:/wKxlXf8
>>334
天才かよ
339デフォルトの名無しさん
2022/05/15(日) 22:33:07.76ID:XVIQic88
見たことあるなと思って検索してみたら2012/06か
340デフォルトの名無しさん
2022/05/15(日) 23:04:07.66ID:13rYFiCc
(o゚Д゚)=◯)`3゜)∵

これと組み合わせられないかと思ったけど難しいな
341デフォルトの名無しさん
2022/05/16(月) 01:46:22.06ID:d0iqnG7G
ていうかさ
仮にゴーがこのまま静かにフェイドアウトして廃れてしまったらきっと
「やはりマスコットがキモすぎたのが敗因か」とか言われるに決まってるが、逆に
何かの手違いでうっかりプログラミング言語の王者となった場合にもやっぱり
「マスコットがキモすぎたのにもかかわらず、これだけの人気を獲得したGoとは!?」とか言われちゃうんだろう
どっちにしてもキモいとしか思われないゴーファー君かわいそう
342デフォルトの名無しさん
2022/05/16(月) 05:55:28.93ID:x9xW3Kri
10年ぐらい前なら美少女化とかしてイラスト描いてる人いそう
343デフォルトの名無しさん
2022/05/16(月) 12:50:00.39ID:4NIJMXSL
(´・ω・`)はこBOON最強伝説
344デフォルトの名無しさん
2022/05/16(月) 20:21:36.29ID:VWkobluj
ʕ◔ϖ◔ʔ
これ商標登録していいですか?
345デフォルトの名無しさん
2022/05/16(月) 22:39:51.10ID:+h1PRcU6
D言語のマスコット凄くかわいかった
何で流行らないんだろう
346デフォルトの名無しさん
2022/05/16(月) 22:54:07.95ID:0w7ItVYY
マスコットはネタになるくらいだしまあどうでもええけどな
LinuxのTuxやJavaのDukeはそこそこかわいいけど、Hadoopはヤバキモいゾウにも関わらずかなり使われてるし

とはいえやっぱLispエイリアンくらいにキモかったりする許せないな・・・
347デフォルトの名無しさん
2022/05/17(火) 04:15:40.09ID:m02nVi8y
地溝油

製造方法

マンホールの蓋を開け、下水道内の黒く濁り、赤みを帯びたのり状の物体を掻き出し、一昼夜かけて濾過した後、
不純物を凝固させる薬品と共に煮詰めて精製、沈殿、分離など複数の工程を経て、再生食用油に仕上げる。
悪臭を放っていた物質は、この工程によりほとんど無臭になり、腐敗したドロのような廃棄油は澄みきった食用油となる。
見た目や臭いだけでは地溝油と本物の食用油を見分けることは困難であるとされる。
ただし、糞尿を加工して生産しているのではなく、レストランからの下水などに流れ込む油分を地溝油の生産に使用している。
348デフォルトの名無しさん
2022/05/24(火) 12:35:29.96ID:Kl1KnEA9
保守age
349デフォルトの名無しさん
2022/05/25(水) 21:23:55.21ID:7RZ1XdGR
ほしゆ(´・ω・)
350デフォルトの名無しさん
2022/05/25(水) 21:33:26.26ID:9VfmR61D
Rustスレ→毎日論争が起こるぐらい盛り上がってる
Goスレ→言語とは関係ない雑談、保守レスのみ

俺悲しいよ。Goが覇権取るんじゃなかったのか?
351デフォルトの名無しさん
2022/05/25(水) 23:50:38.22ID:o5yOJbyP
読んでみたら論争ではなく罵り合いだった
352デフォルトの名無しさん
2022/05/26(木) 07:51:36.31ID:DSAsGiq3
ここは平和なスレッドですね
353デフォルトの名無しさん
2022/05/26(木) 08:32:25.22ID:eMWKjdxZ
もう煽りにはスルーで対応してるからな
354デフォルトの名無しさん
2022/05/27(金) 12:51:06.65ID:HtJjrKPX
良スレage
355デフォルトの名無しさん
2022/05/28(土) 08:41:36.46ID:X7r5mWHS
ほs
356デフォルトの名無しさん
2022/05/28(土) 09:13:50.20ID:J4aLLI1r
もう誰もGoの話してない(´・ω・`)
357デフォルトの名無しさん
2022/05/28(土) 09:56:04.69ID:TjhvK20u
う、うん…(´・ω・`)
358デフォルトの名無しさん
2022/05/29(日) 00:03:28.97ID:gGGconts
じゃあとりあえずゴーファー君の話からしてみようか
359デフォルトの名無しさん
2022/05/29(日) 00:10:52.22ID:KjtlvxgT
ʕ◔ϖ◔ʔ<見ーあーげてGolang~♪
360デフォルトの名無しさん
2022/05/29(日) 10:24:41.43ID:RueAH8As
>>294
utf8.ValidStringというのは使えないの?
tutorial勉強中に出てきたけど
361デフォルトの名無しさん
2022/05/29(日) 11:13:23.02ID:awmGnFTR
ぬるぽ
362デフォルトの名無しさん
2022/05/29(日) 12:35:29.89ID:vQDLB6Zc
おヒマなら来てよネ!
363デフォルトの名無しさん
2022/05/29(日) 22:07:08.64ID:A97dCucU
言語仕様をそれなりに語れる言語って実質rustしかないからな
C/C++の全盛期を思い起こされる
364デフォルトの名無しさん
2022/05/30(月) 16:23:22.11ID:4zxh/3Pl
テスト
365デフォルトの名無しさん
2022/05/31(火) 00:46:57.29ID:9sDYyILN
おやすみなさい(´・ω・`)
366デフォルトの名無しさん
2022/06/01(水) 00:20:40.11ID:BGkpRkuF
6月age
367デフォルトの名無しさん
2022/06/01(水) 12:28:52.22ID:t4/V77Jz
go!
368デフォルトの名無しさん
2022/06/02(木) 19:12:38.94ID:5CwDqghz
いつの間にか世間じゃ1.18の時代なんだなぁ
Lambda の Go 実装を試しながら
369デフォルトの名無しさん
2022/06/03(金) 16:01:17.30ID:/+UrJdaf
370デフォルトの名無しさん
2022/06/04(土) 18:18:41.66ID:zGOsyJWT
hosyu
371デフォルトの名無しさん
2022/06/05(日) 09:59:18.23ID:fCJN3MO9
このスレって何を語るんですか?
プログラミングに関係無いスレですよね?
372デフォルトの名無しさん
2022/06/05(日) 14:47:02.95ID:TG15kEdi
go
373デフォルトの名無しさん
2022/06/05(日) 16:57:00.43ID:2BXg1+dB
Hiromi
374デフォルトの名無しさん
2022/06/05(日) 20:39:41.94ID:upZoiudQ
ここまで空気になるとは思わなかった
375デフォルトの名無しさん
2022/06/05(日) 20:45:22.32ID:C0pCYYy2
やはりマスコットがキモすぎたのが敗因だな
376デフォルトの名無しさん
2022/06/05(日) 21:48:52.30ID:JM/j7ObI
今は色んな現場に数年前にGoで作られたLambdaがたくさんありそう
1.11とか1.13ぐらいの
377デフォルトの名無しさん
2022/06/05(日) 23:18:43.83ID:ZScjncWB
Goは互換性高いからいきなりランタイムのバージョン上げてもまず問題ないでしょ
378デフォルトの名無しさん
2022/06/06(月) 07:09:48.46ID:kGAOGhGe
AWS の Lambda Node.js runtime の EOLに疲れたのでGoにしていってる話、とかあるね
インタープリタじゃないので実行時に最新のランタイムで動くことを強制されないからだって
他の言語は半年とかのスパンでランタイムがバージョンアップされその度に確認やらしないとならない、という主旨
379デフォルトの名無しさん
2022/06/06(月) 17:50:20.14ID:SyuHO3EY
AWS側でランタイムの検証負荷が高いって話?
Goだとそのあたりの責任は各利用者に丸投げできるわな。
380デフォルトの名無しさん
2022/06/06(月) 18:50:51.79ID:kGAOGhGe
いや、Go だけ特殊でLinux用にコンパイルした実行イメージをzipしてデプロイするのと、Lambda実行環境との依存がnet/rpcという枯れた技術しかない
そのためバージョンアップの影響を受けそうにないという理由
つまりランタイムがないんよ
381デフォルトの名無しさん
2022/06/06(月) 19:32:52.22ID:qw/y7lM2
Lambdaはコンテナイメージがサポートされたから他の言語も塩漬けできるようになったけどね
382デフォルトの名無しさん
2022/06/11(土) 23:08:51.11ID:AbK+zg/T
保全
383デフォルトの名無しさん
2022/06/12(日) 15:58:23.25ID:kUS96AVF
Genericsが出て暫く経ったので聞いてみます。ʕ◔ϖ◔ʔ
イテレーション可能な汎用的なコレクションをmap/reduce/filterなど高階関数で操作できるGitHubスターが多いライブラリは何ですか?
384デフォルトの名無しさん
2022/06/12(日) 19:28:08.83ID:X7K1W3yv
そんなものは無い
ループを回せ
385デフォルトの名無しさん
2022/06/14(火) 17:37:05.86ID:Ypv3OCUB
>>383
A Lodash-style Go library based on Go 1.18+ Generics (map, filter, contains, find...)
https://github.com/samber/lo
386デフォルトの名無しさん
2022/06/14(火) 18:20:09.37ID:VOaVS0+Q
>>385
これはセンスないわ
エラーを扱えないしメソッドチェーンもできない
387デフォルトの名無しさん
2022/06/14(火) 23:51:33.83ID:JLIeltNP
AWS Certified Developer - Associate の教科書に書いてあるけど、

AWS Lambda で、deploy package のサイズの上限が、
ZIP は250MB だけど、Docker コンテナイメージは10GB

AWSベースイメージである、Amazon Linux 2 以外にも、
Alpine, Ubuntu などで、カスタムランタイムも作れる

Ruby が簡単
388デフォルトの名無しさん
2022/06/15(水) 01:49:19.21ID:SBK/Y+J6
>>386
https://github.com/elliotchance/pie
これはチェーンが出来る。
多くの言語でコレクション操作中のエラー状態を返すという動作はあまり見ない、Rustなんかでもそう。GitHubスター数多いから挙げたが、チェーンもGoの模範的な1行の長さなどがあるし、Goはメソッドチェーンそのものをあまり勧めていない。(慣例的にエラーを2番目の戻りにするから)
エラーを扱えて、チェーンができる言語ってなーに?
389デフォルトの名無しさん
2022/06/15(水) 02:58:16.10ID:tT/4QRGb
>>388
RustはResult型やOption型によってチェーンでエラーが扱われている
390デフォルトの名無しさん
2022/06/15(水) 05:30:30.87ID:l/JMV/GH
goはそもそもエラーを扱う気概にかける言語だからどうしょうもない
毎回いちいちエラーコード返すのが作法とか何時の時代だよって感じだ
391デフォルトの名無しさん
2022/06/15(水) 08:21:25.23ID:vYUVRfEQ
>>390
「例外」がないからGo言語はイケてないとか言ってるヤツが本当にイケてない件
という記事があるから、それに対して反論してからどうぞ
392デフォルトの名無しさん
2022/06/15(水) 08:25:08.71ID:G4MQ5N+4
>>388
即時評価だね0点
百歩譲ってfilterやmapはエラー扱えなくてもいいとしても、foreachでエラーを考慮しないのはダメでしょ
393デフォルトの名無しさん
2022/06/15(水) 08:41:01.67ID:icfWO5Ii
Rustも例外が無くエラーを返す点でGoと全く同じだが
OptionやResultといった代数的データ型で返すため抽象度の高い取り扱い及び記述がむしろシンプルさと利便性を両立させている
例外を無くした同じ方針なのにまるで原始時代への戻りと未来への発展の差を感じさせる異なる結果となった
394デフォルトの名無しさん
2022/06/15(水) 10:21:02.38ID:UTH2ZdYL
例外はgotoと同じだぞ
現代のネットワークやデータベースといった外部依存が沢山あってエラーがありふれる世界にはそぐわないからGoの値で返す方針は正しいよ
395デフォルトの名無しさん
2022/06/15(水) 10:33:53.80ID:pb2ts3YG
Goにあと20年のキャリア賭けてみても大丈夫かね。
未経験可の案件あるから飛び込んでみようと思うんだが…
40ちょいだからあと20年は戦えると嬉しいんだが。
396デフォルトの名無しさん
2022/06/15(水) 11:06:51.75ID:eDRIEaUs
>>394
Web系のエラー処理はオールオアナッシングが基本であまり細かい個別のケアが必要ないから、むしろ例外向きなんだよ
397デフォルトの名無しさん
2022/06/15(水) 12:52:09.46ID:manFTcsW
>>392
遅延評価とは反復を使い込んで消費する関数を呼ぶまで効果がない事です。どこをどう見たら即時評価だっていってますか?
明らかにチェーン生成で遅延評価です。
func Of[T any](ss []T) OfSlice[T] {
  return OfSlice[T]{ss}
}

それと上記ライブラリにはforeachなんてファンクションはありません。Rustのforeachが副作用を伴う操作が出来てしまうが過去の互換性を
維持するための現在の仕様のことを見聞きして言っていますか?通常多くの言語や高階関数操作が出来るライブラリでmapとforeachの違いは
値を返すかどうかの違いでありエラーを返せるかどうかではありません。またRustがtry_for_eachが存在するのもあくまでも利便性のための
例外であり、普通は特に高階関数操作中のエラーが起こることこそが例外でダメなコード設計です。

もしコード中でコレクションに含まれるデータにより例外エラーを伴うようなコードを乱造しているのであれば”大きく”反省してください。
それとも全く分かってないのに言葉遊びしている?印象を受けます。「foreachでエラーを考慮しないのでダメ」の理由を示してください
398デフォルトの名無しさん
2022/06/15(水) 13:27:56.57ID:LjsAAUyE
>>397
rustのitertools::foreachはそもそも遅延評価じゃないし、過去の互換のために残されているのはその通り。ドキュメントに明記されている
遅延評価じゃなく積極的な評価だから例外が考慮できるといえるがrustの真価は高階関数操作が共通的であれば最適化されること。goが同様の操作を最適化するかどうかは知らん
399デフォルトの名無しさん
2022/06/15(水) 14:22:43.40ID:U1nmudTR
GoはそもそもGCがあってランタイムが重たい高水準言語で、ローカル変数でも必要ならヒープに確保するし、
GCどころかヒープすらなくても動くRustとは最適化の文脈が違いすぎて・・・
400デフォルトの名無しさん
2022/06/15(水) 14:31:21.29ID:LjsAAUyE
アホか、レジスタ数が限られてる現代未来において必要ならローカル変数なんかヒープやスタックに確保するのは当たり前だ。
そもそもマルチタスクOSで動く今のプログラムは普通に変数はヒープの間を行ったり来たり
ランタイムが重いんじゃなく、ランタイム大きい。最適化の度合いも近代的な言語で大手企業が支援あれば大差ない。
そんな事やってるからRustが嫌われるんだぞ、馬鹿野郎
401デフォルトの名無しさん
2022/06/15(水) 14:37:28.29ID:xX6WUJu5
Rustは低レベルなシステムプログラミングに使えることが目的な特殊な言語なので
402デフォルトの名無しさん
2022/06/15(水) 15:16:09.46ID:eDRIEaUs
>>397
ストリーム系APIでいう遅延評価というのは一般にいくつかのレベルがある
例 : items.a().b()
1. 最終的に結果を列挙しようとする段階でaとbの操作を実行する。実行順序は、aの操作をitemsの全ての要素に対して実行した後にbの操作を全ての要素に対して実行する。
2. 可能な限り列挙を繰り返さない。可能であれば、1要素毎にaとbの操作を実行し、次の要素に進む。一時バッファを使用しない。
3. 実際に要素が必要になるまでitemsの各要素を生成しない。つまり無限に続くシーケンスの実装が可能。

例えばシーケンスの順序を逆転させるような操作は一度全てを列挙しないといけなかったりするから、普通はこれらのハイブリッドな実装となる。
>>388で実現されてるのはこのレベル1までだね。
403デフォルトの名無しさん
2022/06/15(水) 15:20:29.18ID:eDRIEaUs
>>397
見落としてるだけだと思うけど、
>>388にはEachがあるよ。エラーを扱えない欠陥品だけど。
404デフォルトの名無しさん
2022/06/15(水) 18:44:38.49ID:vYUVRfEQ
半分禁じ手に近いけど、deferでrecoverするという手も無くはない
あれは日和ったと見るべきか
405デフォルトの名無しさん
2022/06/15(水) 19:45:11.38ID:LjsAAUyE
>>402
遅延評価と「無限に続くシーケンスの実装」はまた別問題だ。ほとんどのプログラムはfilterやmapも有限長だけで十分機能する。
Pythonのコルーチェンyield中断と同じく、それを基にしたRubyの.lazyや、さらに進んだC#のLINQなどは無限長の操作を可能にするが
Rustの無限長イテレーターはRangeやstd::iter::repeatにおいて無限長を扱えるだけであり、yieldはまだ実験的。
というか迷惑だからRustスレか言語比較してるスレでやって攻撃的な人格疲労しろよ
406402
2022/06/15(水) 19:52:07.91ID:eDRIEaUs
>>405
俺はRust信者じゃないぞ?
十分機能するかどうかは個人の感想の問題だが、いちいちリストのコピーが発生するから非機能面では十分に問題になりうる
407デフォルトの名無しさん
2022/06/15(水) 20:33:08.01ID:LjsAAUyE
>>406
そうか?チョットでも知ってればGoはyieldなんてキーワードはサポートしてないので安易な無限長をサポートするわけない。
最初の何も見ずforeach言ってるRustバカと一緒で、コレクションに含まれる高階関数操作で例外を考慮する状況がなぜ正しいのか説明できていない。
それだったらまだ蛇足的に挙げた無限長が扱えない事のほうが欠点だ、ほとんどの状況は高階関数系で例外なんてforeachでもEachでも考慮しない
上のライブラリはチェーン連鎖でコピーが発生するのはその通りだが、例えばfilterにmapをつなげて最後にcollectするような操作は上記の遅延評価や
無限リスト、そして例外とは何の関係もない。言語的な宗教戦争をやってるバカようにしか見えない、とてつもなく迷惑この上ない行為だ
408デフォルトの名無しさん
2022/06/15(水) 21:34:23.56ID:KoNFWfWJ
>>407
無限リストを扱うための前提として要素毎のストリーミング処理ができることは必須だから全然関係なくないぞ
なんか勘違いしてるようだが、俺はGoを貶しているのではなくただ>>388のライブラリがヘボいと言っているだけだ
別にyieldがなくたって今のGoで無限リストは実現できるよ
409デフォルトの名無しさん
2022/06/15(水) 22:33:42.84ID:vYUVRfEQ
Goならyieldみたいな妙なことしなくてもgoroutine内でループしてチャネルで送りつければいいだけだもんな
410デフォルトの名無しさん
2022/06/15(水) 22:39:20.20ID:vYUVRfEQ
妙でない==基本的な機能の中で説明できる
yieldなんてgoto並みに不自然じゃん
411デフォルトの名無しさん
2022/06/15(水) 22:48:49.45ID:8rndrL7k
>>395
Go一本に掛けるの厳しくないか。
412デフォルトの名無しさん
2022/06/15(水) 23:39:49.40ID:icfWO5Ii
>>405
それは君の理解が間違っている

> Rustの無限長イテレーターはRangeやstd::iter::repeatにおいて無限長を扱えるだけであり、

その部分が完全にウソ
Rustのイテレータは誰もが自由に任意の無限長イテレータを作成可能
そしてその無限長イテレータに対して任意の別のイテレータを好きなだけチェーンさせて動作可能

これはRustのイテレータが中間生成物(リストや配列やベクタ)を作成しないため可能となっている
Goで整備するときもここが重要なポイントとなってくる
413デフォルトの名無しさん
2022/06/16(木) 00:21:02.73ID:wccj32jk
無限リストって実際に無限長の何かを使うことは滅多になくて、あくまで遅延リストとして適切に実装されているかどうかの判定基準なんだよね
無限長リストを扱える構造になっていることは、メモリに乗らない巨大なファイルを一行ずつ読むような、文字通りストリーミング処理が必要な状況で非常に有用なんだよ
414デフォルトの名無しさん
2022/06/16(木) 01:51:06.21ID:lg2Mpz7e
結局2種類のうちどちらを選ぶか、だけの問題
(A) 遅延処理
 ・メソッドチェーン時の中間生成配列などを無くせる
 ・無限長も扱える
 ・無駄がなく有利
(B) 即時処理
 ・メソッドチェーン時の中間生成配列などが必ず必要となる
 ・無限長を扱えない
 ・(A)よりも不利

RubyのlazyやRustのイテレータはもちろん(A)タイプ
Goでも欲しいのは(A)
(B)タイプのものは検討する必要がない
415デフォルトの名無しさん
2022/06/16(木) 02:11:04.77ID:TlphqPPg
Go 2のProposalを見ると

https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
> We do not expect approaches like the C++ STL iterator types to become widely used. In Go that sort of idea is more naturally expressed using an interface type. In C++ terms, using an interface type for an iterator can be seen as carrying an abstraction penalty, in that run-time efficiency will be less than C++ approaches that in effect inline all code; we believe that Go programmers will continue to find that sort of penalty to be acceptable.

って書いてあるけどまあGoはそういう言語で、そこまで最適化にこだわる言語じゃない
最適化にこだわるひとはRustとかC++とか使うべき
416デフォルトの名無しさん
2022/06/16(木) 08:44:05.77ID:wccj32jk
>>415
これは遅延リストを否定しているのではない
C++のようなゼロオーバーヘッドは目指さないよ、もしイテレータを抽象化するなら実行時のオーバーヘッドを受け入れて普通にInterface使う想定だよと言っていて、
将来的に>>414の(A)のスタイルのイテレータを導入する可能性は下記の通り肯定している
> As we get more container types, we may develop a standard Iterator interface. That may in turn lead to pressure to modify the language to add some mechanism for using an Iterator with the range clause. That is very speculative, though.
417デフォルトの名無しさん
2022/06/16(木) 10:46:03.49ID:8bJC6Uow
>>411
JavaとPHpだけじゃ不安なんだ
418デフォルトの名無しさん
2022/06/16(木) 11:54:55.58ID:4wdIdA1r
>>417
PHPてw
419デフォルトの名無しさん
2022/06/16(木) 17:42:32.41ID:T9ZCQ85W
>>416
つまり将来Go3になる頃には>>414の(A)がGoでも出来るようになる可能性が残されていると
420デフォルトの名無しさん
2022/06/16(木) 19:30:57.98ID:33b0nQQ5
>>417
なんだ、プログラミングは経験者か。
ならGo未経験案件でも収入大幅に減らないならスキル増やすつもりで行っていいかと思うけど。

>>418
案件多いのはPHPなんだぜ涙
421デフォルトの名無しさん
2022/06/16(木) 21:18:25.47ID:fyAXkPds
>>419
単なるデザインパターンだから今のGoでもできる
イテレータのinterfaceが標準化されてないだけ
422デフォルトの名無しさん
2022/06/17(金) 03:52:06.95ID:pTlTSB96
>>421
本当に出来るならばなぜGoではやらないの?
速いし便利だしコードも分かりやすくなることが多いため色んな言語で使われているのに
423デフォルトの名無しさん
2022/06/17(金) 11:18:37.95ID:/u2pEQ+2
>>422
標準無視のコードで俺スゲーしたい系の人はRustに行っちゃうからだろうね
424デフォルトの名無しさん
2022/06/17(金) 11:32:30.80ID:G5rhOs4/
イテレータを使うようにしたら、こんなふうになるのかな?
https://github.com/Soft/iter
いちいち関数呼び出しすることになるから普段使いにしようとするとパフォーマンス悪くなりそう
425デフォルトの名無しさん
2022/06/17(金) 11:45:45.87ID:G5rhOs4/
もっと最適化されるようになったら良いけどね
426デフォルトの名無しさん
2022/06/17(金) 12:50:08.27ID:tKb8DSRU
RustのイテレータがCのfor文と同じ速度が出るのも最適化された設計と実装によるものだもんね
あとはGo開発陣のやる気次第
427デフォルトの名無しさん
2022/06/17(金) 12:53:28.19ID:/u2pEQ+2
>>424
これはダメだね
パフォーマンス以前に、イテレータを閉じる方法がないからファイルをストリーミング処理するようなユースケースに対応できない
ちゃんと言語機能の背景を考慮せずにRustを猿真似しちゃった失敗作だね
428デフォルトの名無しさん
2022/06/17(金) 13:28:49.58ID:G5rhOs4/
何をどう見ても許されてないしロシアが核持ってなかったら、
集団的自衛権をもとに連合軍が作られてプーチン政権が倒されるか、ロシアも同盟を集めて世界大戦に発展してるよ
429デフォルトの名無しさん
2022/06/17(金) 13:29:03.78ID:G5rhOs4/
なんかスレ間違えたわ
430デフォルトの名無しさん
2022/06/17(金) 15:44:02.84ID:NvTbuTZi
いやだいじょうぶだ、つづけろ
431デフォルトの名無しさん
2022/06/17(金) 19:22:44.65ID:JVB9uh57
>>409
その通り。Goで中間コンテナを作らないようなGeneric版高階関数ライブラリを作ろうと思うと、yieldのような中断じゃなく確かにチャネルの受け渡しになる。
それでfilter->map->collectのようなRust的な中間コンテナを作らないようなコードを書くことになると、中間の加工データの受け渡しはチャネルになるので、Rustで
そのままでは安易に並列化できずにrayonライブラリなどを使うより、遥かに簡単にスケールできる並列化まで踏み込む可能性がある。
これをGoogleはパイプライン処理と呼んでいるが、421の言うように1.18はイテレータの標準化とコレクションの操作の一般化を変更に含めなかっただけ
やる気というか現代のソフトウェア開発は、世に出たら0から255まで揃ってる訳ではなく、小まめな段階リリースだから
432デフォルトの名無しさん
2022/06/18(土) 15:13:54.54ID:ixLj3AWV
おじさんがくるとこうなるのね
本当にこの世から消えて欲しい
433デフォルトの名無しさん
2022/06/22(水) 23:33:10.33ID:DzsA87OB
この世から消えて欲しいチュウニおじさん
434デフォルトの名無しさん
2022/06/26(日) 19:36:20.90ID:n40xbeTi
モックって何使ってる?
gomock, testfy, mockery
オススメは?
435デフォルトの名無しさん
2022/06/26(日) 19:37:58.18ID:vl5UtIOz
いらない
インターフェース埋め込みで十分
436デフォルトの名無しさん
2022/06/26(日) 21:04:51.85ID:PhXCrOZE
>>435に一票
Goでモックフレームワークが欲しくなるようなら設計と開発スタイルがおかしい
437デフォルトの名無しさん
2022/06/26(日) 21:48:32.78ID:n40xbeTi
カバレッジ100%目指さないの?
共通ライブラリのエラーのパスとか
438デフォルトの名無しさん
2022/06/26(日) 23:06:38.35ID:yMoKMg46
別におすすめじゃないけどgomock使ってる
gomockはinterface{}だらけで静的型チェックが効かないからたまにイラッとする
439デフォルトの名無しさん
2022/06/26(日) 23:08:45.74ID:yMoKMg46
間違えた
gomockじゃなくてtestifyだ
440デフォルトの名無しさん
2022/06/27(月) 08:35:06.00ID:YooYWD1s
がーん、週明けで確認したらGCPでホストしているサービス二個ともが、のきなみサーバーエラー500で動いてない
Memorystore の障害なのか?これは
441デフォルトの名無しさん
2022/06/27(月) 08:37:17.96ID:YooYWD1s
Firestoreのクエリ結果をキャッシュしてるから確かに使ってる
442デフォルトの名無しさん
2022/06/27(月) 08:40:10.32ID:YooYWD1s
あ、よく考えたらGoスレではスレ違いな話題だったスマン
ホストしてるのはGoだけど
443デフォルトの名無しさん
2022/07/02(土) 23:20:51.48ID:IZ1AfdFM
質問
xxxx_test.go は go test だけで、go build からは無視されるとかって本当?
だとすると package xxxx_test とかパッケージを分けるのって意味がない?
444デフォルトの名無しさん
2022/07/02(土) 23:36:14.32ID:IZ1AfdFM
あー、テストで xxxx をインポートしてる別パッケージをインポートしたいときに、xxxx からじゃ循環参照としてコンパイルできないから意味はあるのか
445デフォルトの名無しさん
2022/07/02(土) 23:50:10.91ID:WXVFk7BC
ごくまれに package xxxx_test を作ったほうが簡単に解決できることもあるね
446デフォルトの名無しさん
2022/07/03(日) 08:48:25.27ID:7pvv3VrN
*bufio.Scanner とか *os.File といった、interface じゃなく struct な戻り値を返す標準関数で、scanner.Scan() とかの戻り値による分岐をカバレッジしたい

標準関数は関数ポインタによるフックに変更して、モックで差し替えられるようにしたんだけど、関数ポインタのシグネチャが struct を返す形なんで、上記の scanner.Scan() とかを差し替えられない

そこで bufio.NewScanner() を直接に使うのではなく、scanner を interface で返すラッパー関数を作って、そのラッパー関数ポインタをモックで置き換えさせることを考えたりしてるんだけど
…やり過ぎ?(そもそもこの説明で分かるかな?)
447デフォルトの名無しさん
2022/07/03(日) 08:55:03.83ID:7pvv3VrN
そもそも例外なケースのカバレッジのために、そんなクソ複雑なメカニズムを入れるのは、保守性を下げてしまうから本末転倒だろうか?
448デフォルトの名無しさん
2022/07/03(日) 11:51:42.83ID:l1HGgLKC
Go的には、差し替えが必要なんだったらScannerを直接使わずに最小限のアドホックなinterfaceを定義し、
それを関数の引数に受け取るかstructのメンバに持たせるのが筋
449デフォルトの名無しさん
2022/07/03(日) 13:48:43.92ID:7pvv3VrN
>>448
うん、そんな感じ
https://pastebin.pl/view/d979ea5b
該当部分を抜粋
しかし無駄に複雑なコードかなぁと
そこまでする意義はあるのかないのか
450デフォルトの名無しさん
2022/07/03(日) 13:59:46.67ID:7pvv3VrN
>>449
これだけ複雑なのに、os.Open() と s.Err() がエラーを返すパスを通せるだけというのは、
コードの保守性悪化に見合うメリットたりえるのか
そう感じてしまって悩んでる
これが Java ならクラスローダーでプロキシインスタンスに差し替えるという手段で対象コードには手を触れなくて済むから…
451デフォルトの名無しさん
2022/07/03(日) 15:10:23.33ID:Z8jWnyOJ
>>450
そのへんはGo云々というより設計センスの問題だな
textLinesがhookを持つのではなく、LoadFromの引数にfilenameの代わりにiScannerを渡して、その実装を提供するのは呼び出す側の責任にした方が良いと思う
filenameを受け取る便利関数を提供したいなら、それとは別にLoadFromFileNameみたいな関数作ってFileやScannerをインスタンス化してLoadFromに投げればいい
そうすればインスタンス化の部分とそれを使う部分とでテストケースを分離できるでしょ
452デフォルトの名無しさん
2022/07/03(日) 23:23:15.49ID:kM3791I8
そうだな、設計の話だなあ
コードがそこそこの規模になるんだったらとりあえずDI的なことをやったほうがいいよ
453デフォルトの名無しさん
2022/07/10(日) 17:20:12.05ID:EjhmXdOb
普通に自前でScanner作れよ
大して難しい話じゃないだろ
454デフォルトの名無しさん
2022/07/11(月) 19:28:21.15ID:QgABBT19
構造体のコンストラクタのコードを見ると必ず構造体のポインタを返していますが、ポインタにするメリットと値を返したときのデメリットを教えて頂きたいです
455デフォルトの名無しさん
2022/07/11(月) 20:06:52.63ID:BS7kt+k9
>>454
受け渡しの際に毎回コピーするのではなく同一のインスタンスを引き回すことを想定している場合、
それを利用者に主張するために値ではなくポインタを返すことが多い
ポインタで受け取ったものをわざわざデリファレンスしてコピーなんて普通あまりしないからね
構造体をオブジェクト指向言語におけるミュータブルなクラスのように使っていると、コピーされると意図せぬ挙動になりやすい
456デフォルトの名無しさん
2022/07/12(火) 09:01:35.03ID:r0oulnz0
>>453
>>449 見れば分かるがファイル名を受け取ってos.Openして得たFileからScannerを作ってるわけで、これをどうやって差し替えるかという話
457デフォルトの名無しさん
2022/07/12(火) 09:02:55.76ID:r0oulnz0
>>453
だから、ScannerではなくNewScanner関数をどう差し替えるかという話
458デフォルトの名無しさん
2022/07/12(火) 09:14:17.91ID:bpFuPlMn
>>455
よく分かりました
ありがとうございます
459デフォルトの名無しさん
2022/07/15(金) 23:35:22.96ID:1DD1sO9i
コンパイルするファイル内に設定値も全部入れたいんだけど、
その場合は設定値だけのファイルを読み込むことって可能ですか?
関数にしてmapで返す感じしかないですか?
460デフォルトの名無しさん
2022/07/16(土) 13:38:45.14ID:Gzq+vhF3
jsonファイルをgo-assetsとかgo:embedで組み込んで、それをjson.Unmarshal()で構造化データとして使えばいいと思うよ
461デフォルトの名無しさん
2022/07/16(土) 14:06:11.73ID:F7RlRzGb
個人的には設定はビルド時に埋め込むならソース内にjson風にハードコードする派
設定ファイル嫌い
462デフォルトの名無しさん
2022/07/17(日) 05:50:18.02ID:p7xubc+G
てめーの好き嫌いなんか知ったことじゃない
463デフォルトの名無しさん
2022/07/17(日) 08:32:38.03ID:Em8OpVY9
組み込みjsonをデフォルトとして、カスタム設定ファイルは外部のjsonにする
デフォルトから取り込んでカスタムで上書き
これでjsonからの取り込み部分を一本化できるのでバグを防止できる
ハードコードしてると取り込み部分が共有できない (json文字列を返す関数でもいいんだけど
464デフォルトの名無しさん
2022/07/17(日) 09:17:16.84ID:mx7kwKTp
>>463
組み込み設定は構造体をハードコードし、カスタム設定ファイルはそれをjson等で上書きすればいいだけ
どうせ上書きされるのは極一部の項目だけなんだから、大部分はコンパイル時のチェックによりバグを防止できる
465デフォルトの名無しさん
2022/07/17(日) 19:27:05.51ID:Em8OpVY9
>>464
と、思っちゃうよな
構造体定義して、初期化で初期値書き込んで、それとは別にカスタム設定取り込みコードを書く
対して、構造体定義して、設定取り込みコードを書く
すると設定取り込みには普通にバリデートも書くから初期化での値バグが起きない
466デフォルトの名無しさん
2022/07/17(日) 19:36:44.11ID:Em8OpVY9
>>464
まあ、好きずきの話に近いことは近い
ハードコードした設定値をバリデーターにかけてチェックさせる作りなら解決できなくもない
でも取り込みの各段階でバリデーションしていったほうがミスりにくいと俺は思うから
467デフォルトの名無しさん
2022/07/17(日) 19:43:13.12ID:EABPDou+
そんなにバグが怖いならそもそもそんな柔軟な設定ファイル要る?というところを見直すべきでは
汎用的なOSSでも作ってるんでない限り、設定なんぞ環境変数で十分
あとは全部ハードコードすればバリデーションなんか要らん
468デフォルトの名無しさん
2022/07/18(月) 09:02:04.30ID:unHGOtJd
バグが怖いというより、適切なアナウンスかな
設定のどこが、どう不味いのか
469デフォルトの名無しさん
2022/07/18(月) 16:09:24.37ID:k+MW10XJ
Viperを使え
470デフォルトの名無しさん
2022/07/21(木) 22:26:13.75ID:CXPkj94/
フレームワークのginでWebアプリ作りたいなと思ってるんですけど、ginの勉強にいい教材ありますか?
Pythonでツール作ったことあるくらいで、Goの基礎は一通りやったくらいのスキルです。

日本語ドキュメント見てもいまいちピンときてません
https://gin-gonic.com/ja/
471デフォルトの名無しさん
2022/07/21(木) 22:30:02.68ID:2u+uMLjG
gin自体が良くないからいい教材なんか無い
Goはnet/httpパッケージを使うんだよ
472デフォルトの名無しさん
2022/07/21(木) 23:21:18.30ID:CXPkj94/
そうだったのか。。
473デフォルトの名無しさん
2022/07/22(金) 02:56:37.89ID:J1VsK1aI
いやGinでいいだろ
今どきnet/httpだけでWebアプリ作ってるとこなんてねーよ
Gin+Vueとかで作ってみな
5chにいる玄人()のおっさんに惑わされんな
474デフォルトの名無しさん
2022/07/22(金) 03:45:47.87ID:GTjCaUbk
俺はchiがおすすめ
475デフォルトの名無しさん
2022/07/22(金) 12:01:47.88ID:wu+YttEu
最近いじってないけど
Echoは少数派なの?
476デフォルトの名無しさん
2022/07/22(金) 13:57:48.11ID:sWmP1lOI
>>473
さんきゅー!
477デフォルトの名無しさん
2022/07/22(金) 14:20:09.64ID:whw2xWQR
gin、chi、echoどれも薄っぺらいんだから対して変わらない
どれでもええわ
478デフォルトの名無しさん
2022/07/23(土) 09:09:18.33ID:e1dxODSm
echo はcontext の扱いが良くない
479デフォルトの名無しさん
2022/07/29(金) 12:06:04.77ID:Nm1LHugv
Fiberこそ至高
480デフォルトの名無しさん
2022/07/29(金) 12:08:16.31ID:CmFCr4CU
月額報酬が最も高い開発言語ランキング 3位は「Python」、2位は「Go」、1位は? フリーエンジニア向け仕事仲介サービス調べ
481デフォルトの名無しさん
2022/07/30(土) 02:29:49.54ID:Wzbfhtrr
URLを貼らないあたり仕事できなさそう
482デフォルトの名無しさん
2022/07/30(土) 05:26:38.23ID:fJ4AJJUc
Goは単価高いけどGoだけ出来ればいいってわけじゃないからなぁ

ECSとかTerraformみたいなクラウド技術も使えて当然だよね?って雰囲気が全体的にある
483デフォルトの名無しさん
2022/07/30(土) 17:20:05.92ID:wZaxY20D
Goのmapをfor分で回すと順序が不定というのはなんでそうなったの?
484デフォルトの名無しさん
2022/07/30(土) 17:42:37.40ID:54mLdGPJ
>>483
将来的な最適化の余地を確保するため。
大抵の言語では、標準のハッシュ表はその内容が変更されない限りは順序が変わらないような実装がなされていることが多い。
しかし、プログラマにそれを期待したコードを書かれてしまうと、内容が変わらなくても順序が変わりうるような実装に将来的に変更したときに既存のコードが破壊される可能性がある。
Goはそれを避けるために順番を意図的にシャッフルしている。
例えば、将来的にはGCがmapのメモリレイアウトを自動的に最適化するかもしれない。仮にそうなればプログラマが内容を変更したつもりがなくても順番が変わるだろう。
485デフォルトの名無しさん
2022/07/30(土) 18:14:58.42ID:wZaxY20D
>>484
なるほど
意図的にやってるのか・・・
486デフォルトの名無しさん
2022/07/30(土) 23:59:57.16ID:H9aJG6PT
Rubyとかは逆に不定じゃなくしたよね。いつだったかのタイミングで。

あれは変な判断だと思ったなぁ。
487デフォルトの名無しさん
2022/07/31(日) 00:35:32.67ID:FStFDS54
Rubyの連想配列(Hash)にはshiftっていう変テコなメソッドがあるせいかなあ
488デフォルトの名無しさん
2022/07/31(日) 00:47:08.11ID:tsdyYOt0
RubyやPythonの用途なら挿入順でイテレートできるようにするためにかかるコストよりも
利便性が優先されるからじゃないかな
489デフォルトの名無しさん
2022/07/31(日) 02:02:03.13ID:fu2FWHQK
ですな。
490デフォルトの名無しさん
2022/08/03(水) 10:05:50.52ID:pR7q6wnw
Go 1.19 is released!
https://go.dev/blog/go1.19

もう出た
今verは早かったな
491デフォルトの名無しさん
2022/08/03(水) 12:30:49.23ID:HH6IlM8W
Pythonはordered dictがいつの間にか標準dictになってたな
便利だからいいけど
492デフォルトの名無しさん
2022/08/09(火) 14:19:29.00ID:/hRQdNQg
最近の言語仕様書はDeepLすら受け付けない英文なのはどうにかしてくれんかな
ほかにもインターフェース関係の解説でいつの間にか話に出てきてないFileインターフェースが混じってきたり
絶対にレビューしてないよな

なお1.17を読んでる(1.18 からはジェネリクスで更に混迷が進んでる)
493デフォルトの名無しさん
2022/08/18(木) 10:59:30.64ID:uJ4JpjWj
ふと

channel はチャンネルと読んでる?チャネルと読んでる?
494デフォルトの名無しさん
2022/08/18(木) 12:00:31.81ID:I3eJj73g
チャネル
495デフォルトの名無しさん
2022/08/18(木) 12:23:20.11ID:cEC5FUVy
正確な発音はチャノォ
496デフォルトの名無しさん
2022/08/18(木) 13:07:53.85ID:nV24tQaO
んゅにぇぅな?
497デフォルトの名無しさん
2022/08/18(木) 14:36:09.80ID:wr3YJ4Iv
茶野ぉ?
498デフォルトの名無しさん
2022/08/18(木) 16:47:44.68ID:sstdM9KK
チャノルなぞ使わん!
男は黙って共有&mutex
499デフォルトの名無しさん
2022/08/20(土) 04:18:43.73ID:O8Vd08Ya
>>473
ginのルーティングが糞なのは直ってるの?
500デフォルトの名無しさん
2022/08/20(土) 08:17:30.29ID:9Gwmc6Wf
実際goをつかいはじめのころはチャンネルの仕様とか使いかたとか調べるのが面倒で
勝手しったるmutexばっかりつかっていた
501デフォルトの名無しさん
2022/08/20(土) 08:27:18.78ID:jhGGjByr
よーわからんし、echoで問題ないから使ってる
502デフォルトの名無しさん
2022/08/20(土) 11:47:33.07ID:O8Vd08Ya
俺もecho
503デフォルトの名無しさん
2022/08/20(土) 23:47:54.29ID:McSzx8ex
gin → beego → echo → chi イマココ
504デフォルトの名無しさん
2022/08/30(火) 15:48:26.25ID:F+/knOGo
言語仕様書の1.17を底本として翻訳してるんだけど、文書的に酷い(~;~の使いすぎが特に…)し、構成的にもクソだなぁ
underlying type に関係した性質なんて文書全体を読まんと把握できないわ

メソッド式の話では、ポインタによるレシーバーのメソッドは値による呼び出しは出来ないとか書いてあるけど、レシーバー宣言が値だろうがポインタだろうが、現行じゃ問題なく呼べるようになってる(更には値でセレクタ呼んでもポインタで呼んでも動く
つまりどこかで仕様が拡張されてるのに、仕様書は更新されてないっぽい疑惑
505デフォルトの名無しさん
2022/08/30(火) 15:50:42.61ID:F+/knOGo
仕様書なんて熟読しなくても、フィーリングで書いて動いちゃうから、今まで気にしたこともなかったし
気にしなくても動くんだからいいじゃない?とも思いはする
506デフォルトの名無しさん
2022/08/30(火) 22:31:49.83ID:1po1mIkW
そんないいかげんな感覚で思い付きどんどん拡張したその結果が今のC++のていたらくだ!!
反省しなさい!
507デフォルトの名無しさん
2022/08/31(水) 00:35:38.08ID:Pib5lp7c
C++があんなことになったのはむしろ、C++プログラマたるもの仕様書くらい熟読しているだろうと開発陣が高を括ってきた結果だろう
508デフォルトの名無しさん
2022/08/31(水) 10:19:04.29ID:3xNaBMUA
あんなブ厚いARMを読むなんて苦行が過ぎる
悟りに至りかねない危険な行為だ
509デフォルトの名無しさん
2022/08/31(水) 12:04:18.42ID:3xNaBMUA
あるえー?
仕様書で終了ステートメントに続くステートメントに関する記述が無いんで、Playgroundでmainの最初にreturnを書いたらコンパイルエラーにならんかったし実行時エラーも起きない
到達不能ステートメントはチェックされないんだな
510デフォルトの名無しさん
2022/08/31(水) 12:08:28.43ID:rT6IO02J
そもそも規格化されてる言語じゃないし、コミュニティが用意した言語仕様書にそこまで大きな意味はないんじゃないの?
仮に処理系と内容が違っててもどっちのバグなのか第三者にはわからないこともあるだろう
511デフォルトの名無しさん
2022/08/31(水) 14:11:42.15ID:LHsSKudI
いかにも仕事が雑なグーグルらしい雑な仕様の言語
512デフォルトの名無しさん
2022/08/31(水) 15:08:28.04ID:ZrN/2uvg
そうか?Googleの割にはまともだったから普及したんだと思うぞ
いつものGoogleはWeb系のノリで言語作るからこんなもんじゃない、そして大コケする
513デフォルトの名無しさん
2022/08/31(水) 16:28:21.64ID:wsiOIOpJ
Rustほど初心者が書きにくくはないし
PythonやRubyよりは確実に速い
ちょうど良いところを付いたと思うよ
514デフォルトの名無しさん
2022/08/31(水) 17:49:58.71ID:QWrElnZY
だがバグらないために気を付けないといけないことが多い
515デフォルトの名無しさん
2022/08/31(水) 18:35:42.76ID:rT6IO02J
なんかしらんけどGoがしんどいなら使わなくてもいいんだよ
516デフォルトの名無しさん
2022/08/31(水) 20:53:39.37ID:3xNaBMUA
バグらないために気を付けなきゃならんことなんて、他の言語に比べるとそんなに多くないだろ
517デフォルトの名無しさん
2022/08/31(水) 21:04:49.54ID:v1Af5w53
100 Go Mistakesを読むといいよ
518デフォルトの名無しさん
2022/09/01(木) 09:53:36.13ID:dbQKPphW
言語設計でしくじってるよなぁと思うのは、構造体の生成回りの構文というか思想
Cに引っ張られ過ぎてて生成の基本が実体を作ることになってる
構造体はデフォルトでアドレスとして出現し、Javaとかのように参照と命名しとけばよかった

そうすればスライスとかマップのイテレーションがクソみたいな落とし穴にならないし、マップをインデックス式でアクセスしてセレクタとしてフィールドにアクセスも出来るようにできた

実体を使いたい場合は*でデリファレンスして使う
実体ちゃんの変数も*Tという型とする
実体配列は[]*Tという配列を記述するようにする

*に関しては、レシーバーとか宣言で(r *T)とかデリファレンス演算子をポインタを示す記号に使うような一貫性のなさも解消する
プリミティブな変数が実体で、そのアドレスを&で取得するということからの一貫性に拘ってるんだろなぁ

実体配列なんて、Dockerの管理用配列以外で見たことないよ…少なくともレアな宣言だと思う
519デフォルトの名無しさん
2022/09/01(木) 11:44:46.07ID:8wwpfCzj
欠点を挙げる流れだ
やっぱ入れ子の構造体の初期化でしょいかんよあれは
520デフォルトの名無しさん
2022/09/01(木) 12:50:03.20ID:cWwvmbGP
この辺の問題が起きないようにしっかり対策取ってる?
https://www.uber.com/blog/data-race-patterns-in-go/
https://blog.acolyer.org/2019/05/17/understanding-real-world-concurrency-bugs-in-go/
521デフォルトの名無しさん
2022/09/01(木) 12:54:11.77ID:dbQKPphW
複合リテラルとして書けばいいんだし、落とし穴的な問題はなくない?
俺は悪くないかなと思ってるんだけど
522デフォルトの名無しさん
2022/09/01(木) 13:00:51.78ID:dbQKPphW
>>520
「これらの多くは、チャネルでの送信または受信の欠落、またはチャネルの閉鎖が原因です」
いや、mallocしといてfreeしてませんでしたレベルの話をされてもどうしろと?
普通に対策考えないでプログラミングなんてできないだろ
523デフォルトの名無しさん
2022/09/01(木) 14:02:59.57ID:dbQKPphW
>>518
ポインタを示す型なら&を使ってT &pにしてデリファレンスは*p
とか実際に書いてみたら物凄い違和感に襲われてしまった

…C言語の呪いって凄いわ
524デフォルトの名無しさん
2022/09/01(木) 14:17:02.40ID:3zc//kWQ
>>522
それってプログラマー任せのノーガード戦法ってことでしょ?
リストアップされてるような各種バグに対してシステマティックに検知・防止する仕組みを実装できてる?
525デフォルトの名無しさん
2022/09/01(木) 17:08:27.97ID:V2mDAtzH
データ競合はあまり遭遇したことないな
無駄に並列化したがるバカがチームにいると地獄を見るだろうというのはわかる
channel絡みのミスで固まるのはよくある
526デフォルトの名無しさん
2022/09/01(木) 18:05:50.03ID:Wlby5VAy
>>522
けっこう終了時の後処理とか難しくない?
適当なツールとかだと雑に済ましちゃうし、割ときちんとやろうとすると書けない人多い印象。
527デフォルトの名無しさん
2022/09/01(木) 18:16:08.12ID:0As8hqIp
きつい現場のGoは他の言語より殊更きつそうだというのはわかるわ
528デフォルトの名無しさん
2022/09/02(金) 02:30:51.60ID:bNDG9t//
channelは複雑なデータのやり取りに使うには難しすぎると感じるね
どこで詰まるかわかったもんじゃないし
公式がまともなフレームワーク用意するわけでもないし
529デフォルトの名無しさん
2022/09/02(金) 03:08:08.96ID:xpSIPhaW
epollを使うよりかはマシだし
530デフォルトの名無しさん
2022/09/02(金) 08:58:55.58ID:0WCZpZUS
いや、Goに限らない問題でGoのダメなところとか言われてもなぁ
531デフォルトの名無しさん
2022/09/02(金) 09:55:02.48ID:zLWkNNSX
いや、けっこうGoに限った問題
channelのユースケースの大部分は現実にはpromise/futureで十分で、遥かにミスを引き起こしにくい
532デフォルトの名無しさん
2022/09/02(金) 09:58:48.22ID:0WCZpZUS
例えばCとかでファイルを排他オープンしたままクローズし忘れて書き込みのままになってて、別の箇所で読み込もうとしたけど開けなかったとして
これはC言語の不備だとか言うのか?と
533デフォルトの名無しさん
2022/09/02(金) 10:04:00.39ID:0WCZpZUS
>>531
chan のユースケースといったら、パイプとしてストリーム的にデータを流すのが主だと思うんだが、promise, future でどうやって代替するの?
534デフォルトの名無しさん
2022/09/02(金) 10:06:18.95ID:0WCZpZUS
>>531
select文のあたりでも書かれてたと思うけど、同期を取る目的じゃなくてパイプからの機能だよチャネル
535デフォルトの名無しさん
2022/09/02(金) 10:10:39.85ID:0WCZpZUS
>>531
同期取るなら、sync.WaitGroup 使えばよくない?
536デフォルトの名無しさん
2022/09/02(金) 12:33:43.05ID:Xv0heE2X
>>532
そういうことにならないようにGoのdeferやC#のusingやPythonのwithみたいな仕組みを言語機能として提供してるよね?

それらが不要だとでも?
537デフォルトの名無しさん
2022/09/02(金) 12:45:23.85ID:bNDG9t//
いや普通に同期を取る使い方もできるだろw
完了通知を待つ使い方
俺もその使い方しかしてない
async/awaitなんで構文として追加しても良いと思うのだけどね
channelは非同期機構を実装するパーツとしては優秀だから
フレームワークが欲しい
538デフォルトの名無しさん
2022/09/02(金) 13:40:10.47ID:D0FuWgPr
そもそも本当にパイプとしてストリーム的にデータを流す必要のあるケースなんて稀
Goがchannel推しだから利用者もそれに引き摺られてストリームっぽい設計になりがちなだけで、結果として単一の値(又は配列)を返せれば殆どのケースでは十分
本当にストリームが必要ならJavaScriptのasync generatorのような設計も可能で、producerとconsumerが協調するからchannelより遥かに安全だ
539デフォルトの名無しさん
2022/09/02(金) 13:56:23.23ID:iQ46VdDW
そもそもストリームモデルが必要なユースケースってほぼ
分散環境だと思うんだよな
540デフォルトの名無しさん
2022/09/03(土) 12:27:35.16ID:62gf404N
分散環境なら外部のメッセージバスに投げるだけだよね
せっかく小さいgoroutineを気軽にポコポコ起こせるデザインなのに、
結果を受け取る方法が、データ競合を起こさないように最大限注意して共有変数を使うか、パラダイムのミスマッチなchannelを使うかなのは片手落ちに感じる
単純にgoroutineの返り値をwaitできるようにしない理由ってあるんだろうか?既に議論されてたら知りたい
541デフォルトの名無しさん
2022/09/03(土) 13:39:36.59ID:Aru3Abt3
>パラダイムのミスマッチなchannel

kwsk
542デフォルトの名無しさん
2022/09/03(土) 20:41:16.91ID:eoULSfLD
>>541
そりゃ>>533の通りで、channelはストリームでありfutureではない、ってことだ。
futureで済むケースにchannelを使うと、複数の値を返す可能性はないのか?1つも結果を返さなかったら?
そんな余計な心配が常に付き纏うことになる。futureなら全く無縁な心配がな。そしてその心配が現実になればプログラムは容易にデッドロックする。
543デフォルトの名無しさん
2022/09/03(土) 20:49:18.55ID:CkDP1XSv
>>536
だからdeferあるんだし、ちゃんとリソース管理しろよ、という
Goのせいにするのはお門違いだろ、な?
544デフォルトの名無しさん
2022/09/03(土) 20:53:14.26ID:CkDP1XSv
>>542
promise, future 程度のことをやりたきゃ、>>535で書いたけどsync.WaitGroup使ったらどうだ?
545デフォルトの名無しさん
2022/09/03(土) 21:09:58.32ID:2QtFsvwZ
パラダイムのミスマッチという理由がわからん。
goroutineは一つの関数を呼ぶためのもんじゃないぞ。
goroutine立てて一連の処理を同期的に書くためのもなんよ。普通に考えれば結果を受け取る必要が無いはずだよ。
どうしても集めるならfan inするように一つのchanで受ける。

Futureは要らないんよ。awaitとかしなくてもそこでCPU占有したり、ioなりなんなりが起これば自動的に別goroutineに制御が渡る。
546デフォルトの名無しさん
2022/09/03(土) 21:10:11.97ID:Aru3Abt3
>>542
ストリームだとミスマッチでfutureだとミスマッチじゃないということか?
何と何がミスマッチなのかというところがよくわからんが。
547デフォルトの名無しさん
2022/09/03(土) 21:14:31.20ID:eoULSfLD
>>544
その場合は「共有変数を注意深く使う必要がある」よね
548デフォルトの名無しさん
2022/09/03(土) 21:22:59.76ID:eoULSfLD
>>545
だからそう言ってるでしょ
goroutineとchannelをfutureのように使おうとすればミスマッチのために煩雑でバグの生じやすいコーディングを強いられることになる
もちろんGoにはGoのやり方があるのは分かるが、一方でその結果が>>520の状況なのが事実だよね
549デフォルトの名無しさん
2022/09/03(土) 21:29:09.46ID:2QtFsvwZ
>>548
goroutineで処理すべき単位とか、ワークスティーリングの話してなかったかなと。
550デフォルトの名無しさん
2022/09/04(日) 00:29:35.08ID:ULs4IOBU
まさかこのスレにホーアのCSP本読んでないやついないよな?な?
551デフォルトの名無しさん
2022/09/04(日) 00:54:37.91ID:6UpdVUMR
いや、読んでませんが?
552デフォルトの名無しさん
2022/09/04(日) 17:28:10.39ID:GIlWqA7r
>>550
読もうとしたけどガチの論理学的数学で挫折
しかしよく調べたらGoが参考にしたのはその本ではなく
最初にホーアが出したもっと簡単な論文の方だった
つまりその本は読む意味はない(Goの並行モデルの理解という意味で)
553デフォルトの名無しさん
2022/09/04(日) 18:08:07.32ID:VepAvQjQ
>>547
それは認めざるを得ない
Mutexと会わせ技で使ってるから
554デフォルトの名無しさん
2022/09/04(日) 19:08:07.89ID:VepAvQjQ
>>547
だけど、120行(+テスト75行)の隠蔽ライブラリを書いて使ってる
共通変数の管理なんてその程度の共通化でカバーできるタスクじゃん
555デフォルトの名無しさん
2022/09/04(日) 23:01:27.23ID:ULs4IOBU
すまない誰かリングにかけろで例えてくれないか?
556デフォルトの名無しさん
2022/09/05(月) 01:58:21.42ID:7mfke0+F
Goがpromise(future)/async/awaitをサポートしてくれれば今より容易に安全に書けるケースが増えるのは事実だが、
この件も他の件と同様にGoはサポートしてくれないだろうという悲観的な現実と向き合って、
今ある手段で頑張って代替手段を安全に実現しよう。
557デフォルトの名無しさん
2022/09/05(月) 04:13:05.73ID:098gBdTn
結局ゴルーチンの実装が中途半端だったんだろうね
分散環境でのストリームモデルならNodeみたいなノンブロッキングIOで外部のソケットを叩けるようにして
シングルスレッドにするのが良かったし
そうでないならFuture/Promiseみたいに安全にデータを受け取れる仕組みが欲しかった
この2つがちょうどうまくできないデザインになっちゃった
558デフォルトの名無しさん
2022/09/05(月) 04:31:49.54ID:098gBdTn
またGoの言語仕様にも問題があった
ジェネリクスだ
ジェネリクスがない状態でfuture/promiseを安全に実装できない
なぜかアンチジェネリクス勢がGoには多く
コミュニティでの議論も進展しなかった
つまり全てがゴテゴテに回ってしまった
それならGoogleが並行処理のフレームワークを作ってくれるのかと期待していたが
その気配は全くなく使いにくいcontextのみを放り投げた状態でさあ作れと言った状態
そりゃ普通のユーザーは付いてこれない
559デフォルトの名無しさん
2022/09/05(月) 06:36:04.94ID:oqoL/iqD
マルチコアを効率よく使うってのがそもそもコンセプトで作られたんだがNodeみたいにしろって意味わからん
560デフォルトの名無しさん
2022/09/05(月) 07:31:00.89ID:yL+fAGmc
Goのようにマルチコアを効率よくスケジューリングできて
Goのgoroutineのように多数のタスクを身軽に簡単に起動できて
Goのようにそれらタスク間でchannel通信をすることができて
それらに加えてFuture / async / awaitもサポートしているプログラミング言語がありますよ

偶然ですがその言語は
Goと同じくclassや継承がなく
Goと同じく例外try-throw-catchもなし
561デフォルトの名無しさん
2022/09/05(月) 09:08:23.21ID:wt43bW0T
>>558
まずpromiseがどう有利なのか自分の口からどうぞ
そこにメリットを見いだせないから無視されるんだよ
562デフォルトの名無しさん
2022/09/05(月) 10:05:06.21ID:rnwYkZ6l
Goのモデルと比較してのpromiseの優位点としてはこんなとこかな
・一般に、並行性が多少犠牲になる代わりに並行処理の複雑性を局所化する方向へとデザインが誘導される傾向がある。結果としてバグが入り込みにくい。
・ワークフローを集約して記述しやすいため可読性保守性に優れる。
・(channelではなく共有メモリを使う場合と比較して)処理結果を他のスレッドで利用する際にデータ競合が生じない。
・channelと比較して、結果として単一の値を生成するというセマンティクスが型として明確に表現される。デッドロックや閉じ忘れの心配もない。
563デフォルトの名無しさん
2022/09/05(月) 10:15:26.20ID:098gBdTn
うーん今の時代にpromiseの利点を理解できない人がいるとは驚きですが仕方ない出血大サービスだ

まず最初にマルチコアを活かすという点についてだが
基本的にゴールチンのような仕組みでは全く活かせないという点を強調しておく
まともにマルチコアのCPUの性能を引き出せるのはSIMD命令を使った計算のみ
SIMDが何なのかわからない人は調べてください
SIMD演算を直接言語でサポートしていないので計算の高速化は論外
ただのマルチスレッドと変わらない
マルチスレッドはOSレベルで実装されており
コンテキストスイッチの負荷も高くCPUキャッシュも消えるし
マルチコアを活かすような作りになってないのはご存知の通り
564デフォルトの名無しさん
2022/09/05(月) 10:28:17.92ID:FE5GsYYc
>>562
嘘ついちゃだめ
promiseでもデッドロック起きる
565デフォルトの名無しさん
2022/09/05(月) 10:29:00.06ID:FE5GsYYc
データ競合も起きる
566デフォルトの名無しさん
2022/09/05(月) 10:37:15.25ID:098gBdTn
次にpromiseの利点について

並行処理の考え方としては大きく以下がある

1.処理をシーケンシャル実行して1つずつ結果を受け取る
Aが終わったらBを実行して
Bが終わったらCを実行する

2.複数の処理を同時に実行して結果をまとめて受け取る
A、B、C...の処理を同時に実行してその結果をreduceして受け取る

3.ストリーミングモデル
いわゆるproducer/consumerに代表されるようなモデル

1と2についてはpromiseで全て安全に楽に実装できる
ゴルーチンとchannelを使った実装なんか考えたくもない
100%デッドロックが起きる

3についてはゴルーチンとchannelが本来想定してるモデルなのだが
これを適切に実装するのが難しい
CでBlockingQueueの実装したことがある人は分かると思うが極めてデッドロックが起きやすい
複数のproduer/consumerを生成したい場合など考えたくもない
さらにこのモデルの場合は基本的に大規模な分散環境で実行することがほとんどである
シングルノードでproducer/consumerなどサンプルコードでしか有り得ない
こういう用途では複数ノードのソケットにリクエストを投げて結果を待つということになるので結局2に帰着される
567デフォルトの名無しさん
2022/09/05(月) 10:37:39.78ID:098gBdTn
つまりpromiseがあれば全ては安全に解決される
ちなみにpromiseはスレッド実装する必要はないことに注意
rustはスレッドで実装されているがNodeはノンブロッキングIOを使っている
他にもグリーンスレッドを使うなどいろいろある
言語側が安全性を担保できるように実装できるのだ
そしてpromiseを型安全に実装するためにはジェネリクスは必須である

以上が私の考える
「ゴルーチンは実装が中途半端で実際のユースケースを考えた場合に非常に残念なことになっている」理由である
反論があればどうぞ
568デフォルトの名無しさん
2022/09/05(月) 10:37:59.16ID:rnwYkZ6l
そりゃpromiseでも共有メモリ触ったり外部のリソースをロックしようとしたりすればデッドロックするでしょう
promiseモデルとは関係ない話
569デフォルトの名無しさん
2022/09/05(月) 10:56:03.27ID:88BZgezt
>>560
その言語はRustだな

>>565
Rustならデータ競合が絶対に起こらない
データ競合を起こすコードはコンパイラがエラーにできる言語仕様

>>567
ちょっと違う
RustのFuture(=Promise相当)はOSスレッドとは全く別で関係なく
Goroutineとほぼ同様の気軽に大量に作れる非同期タスクとして扱える
もちろん安全に解決できる

今回の話で言えば大雑把に分けるとRustは3種類ともサポート
① Futureおよびそのasync/await
➁ Goと同様のchanel
③ メモリ競合を絶対に起こさない安全な共有メモリ
570デフォルトの名無しさん
2022/09/05(月) 11:03:44.74ID:098gBdTn
>>569
なるほど流石Rust
571デフォルトの名無しさん
2022/09/05(月) 11:12:30.51ID:098gBdTn
ぐちぐち言ってきたが
Goにはゴルーチンとchannelとcontextという良いプリミティブがあるのだから
適切にpromiseを実装して使えるようにして欲しいということ
であれば並行処理がメインのアプリにおいては第一選択にもなり得ると思う
ジェネリクスも入ったのだしやれるはずなんだよ
Googleがもうやる気ないのかもしれないけど
572デフォルトの名無しさん
2022/09/05(月) 12:10:29.88ID:E0SFrHzH
>>568
channelと比較してデッドロック起きないとか痛い事言っといてそれはないわw
573デフォルトの名無しさん
2022/09/05(月) 17:07:29.06ID:oqoL/iqD
Nodeしかさわったことないから詳しくは知らんけどasyncawaitモデルだと
async関数を使うには呼び出し元にどんどんasyncが汚染されて使いづらいイメージがあるな

その点Goは同期的なコードの一部を並行処理にするってのが非常にやりやすいと思う
タイムアウト処理もselectで簡単に実装できるし、シンプルなfork joinだったらsync.waitgroupで楽に実装できるし
何も困ったことがないな

そんなに優位性があるとは全然思わない
574デフォルトの名無しさん
2022/09/05(月) 21:20:50.97ID:MMezNWAp
>>573
Goは見かけ同期と誤認するけど
同じOSスレッド上でもメインや複数のGoルーチンがスケジューリングされて交互に非同期で動いているよ

例えばGoで
 func1()
 func2()
 func3()
と見かけ同期に書いているのは
async/await対応言語で
 await asyncfunc1()
 await asyncfunc2()
 await asyncfunc3()
と書いた時と同じ状態
つまり見かけ同期のGoの実態は非同期

「Goは最初から全てがasync汚染されているためasync汚染に気付かずに済む」が正解
575デフォルトの名無しさん
2022/09/05(月) 22:10:30.31ID:oqoL/iqD
>>574
goキーワードなかったら同期的に動くだろ
ライブラリの中でgoキーワードが使われてるから暗黙的に使われるが正しいね。

非同期にしたい部分でgoをつけるのであってつけてないのに全部非同期だってのはおかしな話だな
576デフォルトの名無しさん
2022/09/05(月) 22:24:10.45ID:M8mFZMdW
>>575
それは見かけ上だけ
goを付けなくても読み書きなど含めて時間がかかるものは
見かけ上だけ同期ブロックしているが
実際には非同期で動いており裏で別のgoroutineにスケジューリングされている
そしてその読み込みや書き込みが可能となると
見かけ上だけ同期ブロックしていたところへスケジューリングが戻る仕組みであってGoは常に非同期に動いている
577デフォルトの名無しさん
2022/09/05(月) 22:30:51.53ID:oqoL/iqD
ユーザーに見せてるのは全てブロッキングなコードなわけじゃん
それをgoキーワード使って複数立てた時に非同期で動くって話で、単体の場合はあくまでも同期的に動くよね

mainルーチンでhttp.getってやったら同期的に動いてるよね?
これを別のgoroutineを立てて複数立ち上げればブロックする後は勝手に非同期で動くってだけの話

async汚染はユーザー目線で言ってるね
Goのモデルは既存のコードや構造に手を加えずに一部だけを非同期にするのが容易、これが一つのメリットではあると思う
578デフォルトの名無しさん
2022/09/05(月) 22:40:11.19ID:oqoL/iqD
Node/Denoの作者も同じこと言ってるし、async/awaitモデルの方が優れている一言も言ってないな
むしろGoのモデルをほめてるわ
https://mappingthejourney.com/single-post/2017/08/31/episode-8-interview-with-ryan-dahl-creator-of-nodejs/

必死にasync/awaitの方が優れてるとか言ってるみたいだけど、逆にGoのモデルの方が使いやすいって人もいるわけだよ
自分の意見が全てだと思わない方がいいんじゃないかな
感覚的な話で優れてるって言われてもね
579デフォルトの名無しさん
2022/09/05(月) 22:48:10.04ID:bm2FICIw
>>577
> ユーザーに見せてるのは全てブロッキングなコードなわけじゃん

それは見かけだけだな
例えば>>574
| await asyncfunc1()
| await asyncfunc2()
| await asyncfunc3()
これも(同じく見かけだけ)全てブロッキングな同期で実行されるコード
そしてGoと同様に実際には裏で非同期に動く

> 単体の場合はあくまでも同期的に動くよね

それは見かけだけ
つまりasync/await対応言語がawait文で見かけだけ同期的に動いているように見せかけるのと完全に同じ
580デフォルトの名無しさん
2022/09/05(月) 23:00:13.19ID:oqoL/iqD
うんだからユーザーに見せるコードが同期的なことろがわかりやすくて良いって言ってるんだけど?最初その話してたよね?同期的なコードって言ってるよ?
裏でepollやら使ってて非同期だから云々の話はしてないんで
ちなみになんでいちいちID変えるの?
581デフォルトの名無しさん
2022/09/05(月) 23:32:28.26ID:9iTWKe04
>>576
>見かけ上だけ同期ブロックしているが
>実際には非同期で動いており裏で

んなこと言ったらIO操作のあるあらゆる言語が低レベルでは非同期で動いてるじゃんよ。
582デフォルトの名無しさん
2022/09/05(月) 23:43:38.07ID:iWQD5HeB
C10K問題から非同期が流行ったのに、メモリーを使いまわしてたら意味ないのでは?

一つのスレッドに一つのスタック、典型的に一つのスタックは1MB準備される。
10Kのスレッドがあれば、10GBのメモリーが必要。
256MBのSUNでは無理。

でも、非同期でも1MBの配列を用意してデータが届くたびに書き足していくなら同じことでは?
583デフォルトの名無しさん
2022/09/05(月) 23:47:49.38ID:iWQD5HeB
ウェブ・サーバーが静的なファイルを送り出していた2000年ごろなら非同期が大それた力だっただろうけど。

全てが動的な現代において、非同期はめんどくさいだけなのでは?
584デフォルトの名無しさん
2022/09/05(月) 23:53:52.32ID:YaRYiHc+
昔より回線が安価になって接続数が多くなったんだから非同期が必要でしょ
585デフォルトの名無しさん
2022/09/05(月) 23:56:02.82ID:iWQD5HeB
どういうことですよ?
586デフォルトの名無しさん
2022/09/06(火) 00:05:01.14ID:btul1bBo
静的なファイルを送るだけなら。

カーネルの送信バッファが空くのを待つ

送信バッファと同容量だけ非同期にファイルの読み込みを開始する

ファイルデータが読み込まれると、送信を開始する

最初に戻る

この手順で、典型的なTCP通信なら20KB以下のメモリーで足りる。
でも、動的なコンテンツ生成では、そうはいかないのでは?
587デフォルトの名無しさん
2022/09/06(火) 00:56:32.90ID:jgCBXC4T
ヒント:httpは同期通信
588デフォルトの名無しさん
2022/09/06(火) 01:32:17.99ID:h7zKo1Kf
>>563 のここがよく分からない

> まともにマルチコアのCPUの性能を引き出せるのはSIMD命令を使った計算のみ

SIMD命令付きのシングルコアCPUもあったじゃん。
古いけど MMX Pentium とか Pentium III とか。
この時代はSIMD命令は何を引き出してたの?
589デフォルトの名無しさん
2022/09/06(火) 02:05:21.99ID:haU306kC
>>566
1なんか一つのgoroutineに上から並べるだけで良いじゃん。
590デフォルトの名無しさん
2022/09/06(火) 02:06:28.41ID:haU306kC
えっ?もしかしてこの人
>>574
でもまだ理解してないの?
591デフォルトの名無しさん
2022/09/06(火) 03:40:36.05ID:4pNI/aXz
>>587
httpを同期で実装するなんて昔のダメなシステムと完全ブロックしても困らない末端クライアントだけたぞ
httpクライアントとして動作する時もサーバーで使うなら同期ブロックしてしまうとスレッド資源を無駄に専有
だからhttpを使うなら何らかの非同期にするのが当たり前
592デフォルトの名無しさん
2022/09/06(火) 06:52:34.65ID:JHpT8XfS
>>574
多くの言語でasync/awaitキーワードだらけになって反吐が出る気分だわ、これを良いと考えた人たちを殴りたい...
goにpromise/futureなんて絶対不要、こんなの必要だと思ってる人相当アホやぞ

>「Goは最初から全てがasync汚染されているためasync汚染に気付かずに済む」が正解
なるほど意味わからん
asyncキーワードなんて無いのにスケジューリングで同期実行されるから汚染?ww新理論w
593デフォルトの名無しさん
2022/09/06(火) 08:04:56.91ID:g0koBBSB
>>566
1なんてそのまま関数並べるだけだし
2はN件goroutine立ち上げてたらN回チャネル待ち受ければいいだけだよね
タイムアウトもselectで容易に実装できる

100%デッドロックするとか言ってるけどそれはGo超初学者が使った時の話かな?
仮にデッドロックしても検知機構働いてちゃんと落ちるし何が言いたいのか
594デフォルトの名無しさん
2022/09/06(火) 10:57:52.38ID:ItiT2cL1
>>588
その時代のことはよく知らないので
気になって調べてみたがwikipediaによると
2クロックで実行するという実装になっていた模様
なのでその時代に関しては128ビット幅のレジスタを使えるというアドバンテージしかなかったとのこと
595デフォルトの名無しさん
2022/09/06(火) 11:23:36.25ID:7Nc33VtP
>>591
通信プロトコルとhttpサーバー/クライアントの実装が区別できないおバカさん乙w
そんなんでよくGoなんて使えるな
596デフォルトの名無しさん
2022/09/06(火) 14:37:15.63ID:ax+JnAgH
今回は実装の話だからサーバー上なら今どきは非同期で実装で合ってると思うよ
597デフォルトの名無しさん
2022/09/06(火) 16:35:51.33ID:E35zydsp
>>596
文脈読めないおバカさんその2乙w
598デフォルトの名無しさん
2022/09/06(火) 16:56:04.53ID:rOGll//o
>>593
その通りだな、安易に実装できるものを標準で欲しがる理論がわからんわ
多くの言語のfutureなんてデータの結果受信同期待ちが起こるだけだし、goのcontext.WithTimeoutは
他の言語では全く実装できていないfutureのプラス機能のようなもので、goはより進んでいると言える
一方promise的なもの、つまり複数のgoroutineを束ねて制御したい人は、欲しい人もいるかもしれないが
goで書いたpipeline処理は手動で書くからこそきめ細かい制御が出来るので、無作為にこれとこれを並列、
これとこれを非同期だけど同期的に実行にしたいとか、効率を考えたらこの流れを組み替えられることには
ほとんど意味もないね。
例えばJSでPromise.allとかすべてを非同期並列に実行して成功の可否で分岐したいなんて、同じ状態が
goroutineとチャネル待ち受けで出来てしまうわけで、それを仰々しいライブラリにする意味が分からん
599デフォルトの名無しさん
2022/09/06(火) 17:02:41.68ID:rOGll//o
上では良いことだけ書いたけどif err != nullはもうそろそろダルいので何とか手を打ってほしいわ
副作用のある関数ではgoの第二の戻り値がerrなのは、もはや言語仕様なので別言語でいう
Option/Result/Eitherみたいなものは必要ないにしても、?.のようなNull条件演算、合体演算
のようなErr条件演算が欲しい
600デフォルトの名無しさん
2022/09/06(火) 18:25:37.98ID:rAtefbER
きめ細かい制御してるか?
goのモデルは良くも悪くも作った水路に水を流すだけで、実際にその中のどこでどのようにブロッキングが発生するかは気にしないのが正しい使い方
どっちかというとpromise系のほうが制御は明示的だよ
601デフォルトの名無しさん
2022/09/06(火) 20:30:57.65ID:haU306kC
きめ細かいGoのpipelineって、もしかしてGoあんまり書けないのでは…?
ランタイムの大勝利な事の方が多いぞ。
602デフォルトの名無しさん
2022/09/07(水) 08:09:00.20ID:KZnrapZJ
きめ細かいでしょう?
チャネルが1個なら並列性が1つでブロッキング出来るし、並列性を持たせたいなら複数のチャネル幅を
用意すればいいだけ1段目のパイプライン処理が終わったすぐ後に、次段のパイプライン処理を普通に書く
ことができるし、sync.WaitGroupを使えばパイプライン中の中間データへ同期制御もできる
それ以外にGoで書かれた多くの優れたパイプライン処理は、キャンセルを考慮している。
ブロッキングが発生するかは気にしないなんて事はなく、チャネルのselectでブロッキングが入ることは普通に
当たり前だから気にしないだけ
https://go.dev/blog/pipelines

世にある多くのpromiseはキャンセルやタイムアウトは考慮していない場合が多い、All or Nothingでしかない
大雑把な実行制御でしかない。多くは流れるようなデータの受け渡しもできない。
実行順を決めるだけで、特定の処理に多重度を持たせるとかそんなことは出来ない
これは多くがpromiseというものが非同期処理をベースにした疑似的な実行順制御の仕組みだけであるから
603デフォルトの名無しさん
2022/09/07(水) 13:37:16.25ID:ossJLtb4
>>599
nullじゃなくてnilな
604デフォルトの名無しさん
2022/09/07(水) 16:59:11.50ID:GTdTGsfv
>>598
そもそも、複数のgoroutineを束ねて使いたいという要請でsync.WaitGroupは作られてるから、自前で作る意義すら無いんだよな
グループを待つ、のだから
605デフォルトの名無しさん
2022/09/08(木) 16:15:42.84ID:+22QbHY9
>>593
だからその程度のことしかしないのにわざわざゴルーチンだのchannelだのselectだのを書かなきゃいけないことがだるいと言う話だよ?
書けるか書けないかで言ったらそりゃ書けるでしょw
あと普通に刺さる可能性が高いと言うことを言ってる
606デフォルトの名無しさん
2022/09/08(木) 22:55:49.37ID:AWp4/fcz
ホントにGo書けないんじゃないの…?
607デフォルトの名無しさん
2022/09/09(金) 08:28:18.12ID:5SEsta+Y
意味わかんね

>>566 では promise の利点をこう書いてた

> 1と2についてはpromiseで全て安全に楽に実装できる
> ゴルーチンとchannelを使った実装なんか考えたくもない
> 100%デッドロックが起きる

それに対して >>593>>598 が goroutine とチャネルで簡単に実装できるって言ったら >>605

> わざわざゴルーチンだのchannelだのselectだのを書かなきゃいけないことがだるいと言う話だよ?

「だるい」なんて話、一切してなかっただろ。
608デフォルトの名無しさん
2022/09/09(金) 11:21:59.96ID:8m5pePL+
>>607
マジでアスペか?
promiseの方が明らかに楽でバグが生まれない
これはこれまでの議論の流れで一貫してる主張

なんでリクエストのデータ受け取るのにgoルーチンだのchannelだのselectだの書かなきゃならんのだよ

そしてpromiseを実装するのは我々ではなくGoコンパイラの開発者たちだよ
609デフォルトの名無しさん
2022/09/09(金) 12:35:07.97ID:OI70qo+4
promiseって普通awaitするのが普通だよね?
goもチャネルも使わない状態でhttp.Get呼ぶのと全く同じだよ

goroutineの中で実行すれば勝手に非同期になるしfork joinしたいならチャネルがwaitgroup使うだけの簡単なお仕事
610デフォルトの名無しさん
2022/09/09(金) 12:39:54.70ID:ppztOn1H
>>608 >>607
まずは「goroutine&channelだと100%デッドロックが発生してpromiseだと発生しない状況」について戦えよ。

だるいとかより興味あるわ。
611デフォルトの名無しさん
2022/09/09(金) 13:19:10.61ID:WCKL/dzA
>>608
「promiseの方が明らかに楽でバグが生まれない」
そんな統計は1つもないければ、あなたの貧相な頭の中だけですよね?それを証明しなさいと暗黙的に問われているのがわかりませんか?

「なんでリクエストのデータ受け取るのにgoルーチンだのchannelだのselectだの書かなきゃならんのだよ」
じゃあなんで、promiseなんていう出来の悪い非同期処理のために作り出された愚物を、真にマルチプロセスに対応するgoで
エミュレーションしなきゃならないんですか?あなたのためだけですよね、ほとんど誰も欲しがっていませんけど?
このような需要がない機能を、標準ライブラリに求めるものではありませんし、あなたの隠れた真の心は
「学ぶことをしたくない」だけでしょう、ご自分でも気づいてないと思いますが
C#やScalaあるいはJSしか出来ないなら素直にチームに報告しましょう、あなたのやる気を引き出すためだけに我儘を際限なく
広げても誰も理解してくれませんし、当然、味方にもなってくれないでしょう。だってやる気が無いんですから。
言語の基本的な考えが違うのに、他の言語に似たような雰囲気を求めるのは間違っていますし、なおかつ結局同じコードを
書いてしまうなら乗り換えるような利点をすべて消し去るでしょう

「そしてpromiseを実装するのは我々ではなくGoコンパイラの開発者たちだよ 」
実装しないと思いますね、あなたのゆがんだ考えでは超保守的なgoチームを説得するのは無理でしょう。1つも有益な
調査結果なり、推測なりが述べられていません。あなたが「ルーチンだのchannelだのselectだの書かなくちゃならない」と
我儘を言ってるようにしか見えません。仮に万が一億が一、必要だとしてもGithubに個人実装のライブラリとしてあるでしょう
612デフォルトの名無しさん
2022/09/09(金) 13:32:44.23ID:eDV4BhqD
まあasync/awaitのほうが初心者に対するハードルは低そうな気はする
初心者が雑にchannel使ってるとたいていバグってるわ
613デフォルトの名無しさん
2022/09/09(金) 13:34:32.33ID:KNCe5V0g
async/await手軽で簡単だけど複雑なことやろうとすると難しい
Goroutineとchannelはasync/awaitと比べると確かにとっつきにくいが複雑のことも組み合わせで上手く実現できる応用力がある
614デフォルトの名無しさん
2022/09/09(金) 14:08:59.93ID:+r9uXbjm
>>611
そういうストローマン論法は俺には通用しないって
615デフォルトの名無しさん
2022/09/09(金) 14:53:32.39ID:5SEsta+Y
promise の利点まとめ

- goroutineとchannelを使うと100%デッドロックが起きるが promise だと安全に実装できるものがあるらしい。具体例は不明。
- >>605 にとってだるくない。
616デフォルトの名無しさん
2022/09/09(金) 15:05:25.55ID:+6O98yvA
非同期で順列な処理やる場合はasyncのがわかりやすい
並列にタスクいっぱい撒いてなんかやるみたいなのはchannelって印象
617デフォルトの名無しさん
2022/09/09(金) 15:59:29.38ID:WCKL/dzA
promiseに似てるけど、全く違うものはerrgroup.Groupと呼ばれます。これもpromiseなんぞと比べれば
コンテキストなどと組み合わせキャンセルやタイムアウト処理が容易にできますし、実行順の制御や包括した
エラー処理以外にパイプラインまで簡単に拡張できます。

例1:ページをフェッチして全ての処理が終わるまで待つグループ制御(1つでもエラーならエラー処理)
https://pkg.go.dev/golang.org/x/sync/errgroup#example-Group-JustErrors

例2:単純な並列タスクを同期するためのグループ制御
https://pkg.go.dev/golang.org/x/sync/errgroup#example-Group-Parallel

例3:多段ステージを設けたパイプライン処理をグループ制御
https://pkg.go.dev/golang.org/x/sync/errgroup#example-Group-Pipeline

例1、例2はJSでいうPromise.all() のような動きをしますがpromiseなんていう融通の利かない非同期のため
だけの劣った機能より格段にシンプルな仕組みです。
上の例でいえば、並列タスクなどではchannelを使用せず、複数起動された軽量ルーチェンから元ルーチェンへ
results配列の結果を戻していますが、これは並列タスクが一段で終わるからです。
次の(例3の)pipeline処理にあるように、並列と並列が連鎖する多段処理においてはchannelのような
仕組みを使うのがとても合理的です。もちろん、処理の終わりの同期のために、selectによる結果受信待ちは
入りますがこれはデットロックではありません

もともとJSのPromiseがなぜあるかといえば、同じプロセス空間で疑似的な非同期処理による実行制御を行うため
だけの仕組みです。このため、特定の変数(結果を格納する配列や変数)に同時にアクセスされるという考えは
ありませんし、そのような(ロックや待ち)制御は必要ありません。現実に同時に動いていないのですから

隣国のアジア人コミュニティに「ストローマン論法」という言葉を連呼するキチガイ集団がいましたが、本当のバカだった
618デフォルトの名無しさん
2022/09/09(金) 18:31:46.48ID:RxEWaepL
結局何がChannelに無くて、何がPromiseでしか解決できない問題なの?
Promiseを解決せずに持ち回ること?
619デフォルトの名無しさん
2022/09/09(金) 23:05:27.12ID:zn1Qb1Bt
>>617
例1がすでに全然シンプルじゃないw
しかもレスポンスを返さない例で意味ないww
それ以外にも落とし穴満載

現実にこんなコード書いてるやつばっかりならバグりまくってヤバそう
620デフォルトの名無しさん
2022/09/10(土) 05:44:14.74ID:z/endEmr
やはり頭がバカ以前のGより脳が小さい、上の人はサンプルをシンプルだとは上でも言ってないが
errgroup.Groupがシンプルだと言っているのに、頭ヤバそう
まあサンプルは十分シンプルだが、レスポンスが要らない事など世の中にいっぱいある

現実にこんな奴がいることは、goより複雑な言語特性や膨大な標準ライブラリを持つ言語を
チーム開発で使えるか、大変考慮すべきことだろうな
621デフォルトの名無しさん
2022/09/10(土) 06:14:16.74ID:JxBHu2/s
#Gopherくんの国葬に賛成します
622デフォルトの名無しさん
2022/09/10(土) 06:49:15.74ID:0VnbKdes
ストローマン
623デフォルトの名無しさん
2022/09/10(土) 09:36:19.36ID:hVWagXFo
まずは基本的に、シングルスレッドの場合とマルチスレッドだが共有データを使用しない場合は原理的に
データ競合や排他制御のバグは発生しない。
>>611が「promiseの方が明らかに楽でバグが生まれない」と言っているのはそのどちらかに帰着するケース。
マルチスレッドでかつ共有データを扱うケースではpromiseを使おうが競合バグは発生し得る。
624デフォルトの名無しさん
2022/09/10(土) 10:19:58.24ID:wD6Hc2YL
シンプルシンプルw
625デフォルトの名無しさん
2022/09/10(土) 10:24:38.51ID:LoWL2Dfj
壺買えばシンプルに見えるよ
626デフォルトの名無しさん
2022/09/10(土) 10:34:19.91ID:JxBHu2/s
ストローマン連呼する人が最近5chで増えたと思ったけどこの動画が原因なのねん

627デフォルトの名無しさん
2022/09/10(土) 14:08:04.25ID:t/MG+nKm
そもそもGoは何もしなくてもマルチスレッドなんよ。
IO待ちとかしたら勝手に他の事しよるよ。awaitなんかしなくても。
だからFutureやPromiseで結果が来る事を持って回るんじゃなくて、
そもそも処理するロジック自体を複数起こしちゃうんだよ。。

これだけの事をいつまで言ってんのよ。。
>>617
の例1がどうして一気に複数リクエストを送りたいかと言うと、その三つを同じ一つの処理で使いたいからであって、
三つの同じ処理を起こすんであればWaitする必要も無いのでは?
それこそchanで受け取れば良いんだし。。
628デフォルトの名無しさん
2022/09/10(土) 17:44:57.86ID:xFpfY3aA
JSのPromiseしか知らないんだな
そりゃ話が噛み合うわけがない
629デフォルトの名無しさん
2022/09/10(土) 20:27:53.18ID:hVWagXFo
JS以外のpromiseだとどう違うって?
630デフォルトの名無しさん
2022/09/10(土) 21:23:42.19ID:iWyUjfem
内容ゼロのワイ賢者や煽りに煽りで返すスタイルwww
631デフォルトの名無しさん
2022/09/11(日) 01:29:37.61ID:VONtFQ6w
藁人形♫
632デフォルトの名無しさん
2022/09/13(火) 07:00:51.39ID:Rg9hdag/
韓国人の口癖、ストローマン論法という逃亡手段
633デフォルトの名無しさん
2022/09/13(火) 18:17:36.41ID:Ma8GSz9P
ストローマンって本題から離れた部分を、わざと誤解して上げつらう詭弁の手法だから、自己紹介してるんだよ
634デフォルトの名無しさん
2022/09/14(水) 11:14:58.88ID:xpCSG28g
うぬぬぬぬ、issueに送るべきだろうか?

1、「ポインタの」レシーバーでストリンガーを記述すると、fmt.Println()とかに渡してもString()メソッドは呼んでくれない…

2、そして(str{v: 1}).String()とか記述するとコンパイルエラーになる…

変数に一旦格納してからのs.String()は、仕様から(&s).String()と解釈してくれて通る
635デフォルトの名無しさん
2022/09/14(水) 11:17:52.77ID:xpCSG28g
>>634
あ、1は実体を渡すと
636デフォルトの名無しさん
2022/09/14(水) 11:22:55.99ID:xpCSG28g
>>634
コードサンプル

https://go.dev/play/p/cnLcXtFFQ4j
637デフォルトの名無しさん
2022/09/14(水) 11:33:39.56ID:xpCSG28g
>>634
この辺(レシーバー)の仕様って、訳してみると何かガバッてるように思えてならないんだよなぁ
638デフォルトの名無しさん
2022/09/14(水) 11:40:44.99ID:xpCSG28g
>>634
実体のレシーバーはレシーバー内のフィールドを更新しても反映されないから、レシーバーはポインターとして書くのが定石だけど
ストリンガーだけ実体のレシーバーとして書けば回避できる
回避できるなら放置でもいーじゃん?とか言われると反論しづらい
639デフォルトの名無しさん
2022/09/14(水) 15:53:22.22ID:xpCSG28g
>>638
ポインタのレシーバーを記述していると、インタフェース型変数には実体は代入できずポインタでなければならない
という制限もイミフ
代入可能性の仕様は単に、xがインタフェースTを実装していること
実体でもメソッドセットx.String()とx.Str()は呼び出せるのだから実装されている、とは「ならない」事から上記の制限がイミフと言ってる

本当に仕様が厳密じゃなくてガバガバ
大真面目に仕様書を読み込んでる俺の純情を返せ
640デフォルトの名無しさん
2022/09/14(水) 16:03:17.92ID:xpCSG28g
>>639
セレクタ式で実体からポインタレシーバーを呼び出すと&xと解釈されるという仕様が、インタフェースの代入可能性には波及していない、という点でコンパイラのバグと難癖つけられるんじゃないか?
とissueに書いてもいいんじゃないか?という多分にメンドクサイ系おじさんの怒り

仕様書にどう書かれていようが、インタフェースに実体を入れようとするな!で済む話ではあるかも

最終的には「仕様書は信用するな」に帰着
641デフォルトの名無しさん
2022/09/14(水) 17:25:20.47ID:e1B1zDJm
インターフェース型変数という訳のわからないものを導入したのがそもそもの間違いなんだよな
642デフォルトの名無しさん
2022/09/14(水) 20:14:22.35ID:KrdCg/Z1
で、なんでそんなもんを導入したかというとそもそもジェネリックスがなかったから
「ジェネリクスがなくてもプログラムは書ける(キリッ」みたいなイキりにこだわって結局かえって醜いことになるっていうまるでド素人みたいな失敗
643デフォルトの名無しさん
2022/09/14(水) 20:52:01.05ID:OtPAbKwR
一人で喋ってる怖い
644デフォルトの名無しさん
2022/09/15(木) 09:41:05.37ID:zCeWb7Zl
理解できないから人格攻撃に出るあたり、お里(国)が知れるというもの
645デフォルトの名無しさん
2022/09/15(木) 10:04:39.44ID:I85rKOcV
いきなり国がどうとか言い出す人って日常会話出来るのか気になる
646デフォルトの名無しさん
2022/09/15(木) 22:29:29.36ID:zCeWb7Zl
インタフェース変数は普通に色々な言語にあるだろ?
そこにケチをつけるのは筋が悪すぎるのではないか?
647デフォルトの名無しさん
2022/09/16(金) 15:06:43.28ID:rsr6X2sj
ないわw
空インターフェースとか訳がわからんわ
648デフォルトの名無しさん
2022/09/16(金) 16:29:46.84ID:AcRFw2zF
>>636
1. &elem2{}で渡してるのに、func (e elem2) String() stringなんて呼び出すわけないじゃん?どういう事?
2. func (s *str) String() string で普通は定義するので、同じように呼べないからコンパイルエラー
もっと言えば、s := str{}にしても (*str).String(&s)とコンパイル時に解釈されるだけで呼んでるのはポインタメソッド

下のインタフェース型変数云いいは、全く理解ができていないで我儘いってるだけで読んでる人に伝わってないし
マジ何が言いたいのかサッパリ...
goの仕様ほど厳格なものはないと思うけど(比べるのはC/C++や2015年代以前の言語ね、2016年以降の言語と
比べても、いまだに詳細なメモリレイアウトさえ公表できない某錆より厳格だ)本当に大真面目に読んでる?
golangを始める必要性に駆られて、こんな簡単な入門初めのプログラムでケチ付けたいだけじゃ?
issue書いても良いけど、保守的なgolangメンテナーに絶対相手にされないよ
649デフォルトの名無しさん
2022/09/16(金) 16:48:33.54ID:2lkKV8fn
>>648
ちゃんとコードを読みなよ
elemはポインタレシーバーで実装、elem2は実体レシーバーで実装
そしてポインタレシーバーでストリンガーを書くと、fmtパッケージとかでは認識されないケースがあるってサンプルコードよこれ

つまりあなたの主張する func (e *elem)String() string という「普通の定義」では動かないケースを示している
実行してみ?俺も「普通の定義」だと思っていたからこそのレスなんだから
650デフォルトの名無しさん
2022/09/16(金) 16:58:05.87ID:2lkKV8fn
func (e *elem) String() string
と書くとストリンガーとして認識してくれないと説明して
サンプルコードまで載せて確認を求めてるのに
実行すらしてもらえないとは
651デフォルトの名無しさん
2022/09/16(金) 17:11:32.64ID:fXetx5ML
仕様書にポインタ変数.は勝手に*(ポインタ変数).

に変換されるとか書いてあるけどインターフェースでも行われるってのはどこに書いてあるの?
652デフォルトの名無しさん
2022/09/17(土) 02:32:12.33ID:z62v58Fz
>>651
ない
むしろ、インタフェースを実装しているという定義が、全てのメソッドセットを満足している、という程度しか書かれていない

あれ?仕様書だと逆に値は (&x).xxxx に変換されるとしか書かれてなくなかったか?後で確認してみる
653デフォルトの名無しさん
2022/09/17(土) 02:40:37.19ID:z62v58Fz
ポインタと値レシーバーは特に注意しなくても相互にセレクタとして呼べるんで気にしていなかったんだけど、ポインタでストリンガーを書いたらfmtパッケージの関数では認識してくれなかった
んで、これは不味いと総当たりで確認してみた

しかし、単に自分の勘違いかなと確認コードを公開してみて、レビューを求めている←イマココ
654デフォルトの名無しさん
2022/09/17(土) 02:47:40.39ID:z62v58Fz
まだfmtパッケージの中は見ていないけど、ポインタレシーバーで書くと型スイッチかリフレクションではインタフェースを満たしていないと見なされたりするんじゃないか?とか不安になってきた

上でも書いたけどfunc (e *elem)String()は自分も「普通の」書き方だと思ってたんで
655デフォルトの名無しさん
2022/09/18(日) 09:35:57.42ID:Ymh3f8Pk
な、仕様なんてこいつ読んでないだろ?5chぐらいでしか自分の連投でしか意見言えない
issueとかこいつは言ってみただけでそれすら出来ない
656デフォルトの名無しさん
2022/09/18(日) 09:58:37.38ID:pgs2ObNe
>>655
そいつ次世代言語スレで機能精神崩壊してたんだぜ

自分のRustの実力(知ったか)で仕事にありつくのが難しいと観念して これからはGoに粘着するよ

ここが新しい 隔離スレ よろしく頼む
657デフォルトの名無しさん
2022/09/18(日) 10:43:21.71ID:d4i41YBr
理解できない

・ポインタでストリンガーを書いてしまうと動かないケースがある
・実例をプレイグラウンドで上げたから間違っていたなら指摘してくれ

に対しての回答になってない
これこそ関係のない些事を上げ連ねて議論を避けるストローマン話法の典型じゃね?
658デフォルトの名無しさん
2022/09/18(日) 11:17:33.27ID:6lT6OUda
Promise最強ストローマンおじさんw
仕様書なんて読んでないんだろ?そもそも英語読めないから読んでないどころか読めないんでしょ?w
659デフォルトの名無しさん
2022/09/18(日) 22:39:49.75ID:ds+slurx
なんか勘違いしてるけど相互運用ではないよ

レシーバが値のメソッドはポインタと値に対して呼び出すことができるが
ポインタのメソッドはポインタに対してのみ呼び出すことができる

これは仕様書に書いてある
660デフォルトの名無しさん
2022/09/18(日) 22:48:21.16ID:YN5s6Pjv
>>659
これで全部解決しててワロタ
二度と喚き散らすなよ
661デフォルトの名無しさん
2022/09/19(月) 08:13:25.10ID:uG07qrUI
>>659
んにゃ
「メソッド呼び出しと同様に、アドレス指定可能な値を用いたポインタレシーバーによる非インタフェースメソッドへの参照は、自動的にその値のアドレスを取りますのでt.Mpは(&t).Mpと等価になります」Method values より
とあるよ
662デフォルトの名無しさん
2022/09/19(月) 08:20:33.46ID:uG07qrUI
>>659
As with method calls, a reference to a non-interface method with a pointer receiver using an addressable value will automatically take the address of the value; t.Mp is equivalent to (&t).Mp.
のトコね
誤訳してるなら指摘してくれな
663デフォルトの名無しさん
2022/09/19(月) 08:24:13.55ID:uG07qrUI
まあ、こんな感じにぜーんぶ読み通さないと系統だった仕様の把握ができそうにない、という点で、かなり品質は良くないんよ
これ、どっちが優先されるの???という話が多すぎて、実際に試行するとアレ?となる
664デフォルトの名無しさん
2022/09/19(月) 08:35:15.69ID:uG07qrUI
仕様書の全訳に挑んでオカシイとサンプルコード書いて確認してみてレスしてるのに
仕様書を読んでない奴がそのサンプルコードをRunすらせずに、お前が勘違いしている、とか
へそで茶わかしていいでしょうか?
665デフォルトの名無しさん
2022/09/19(月) 08:42:10.25ID:Uuvgp4zf
>>662
いや、それ暗黙的にポインタに変換してるからポインタに対して呼び出してるよね?
理解できてる?
666デフォルトの名無しさん
2022/09/19(月) 08:45:47.87ID:wNLDibxP
>>664
なんだ英語読むのに苦労してる人か

そういう人が日本語訳に取り組むと迷惑

オカシイところがあると言うなら原文の方にPR出せ
667デフォルトの名無しさん
2022/09/19(月) 08:51:12.18ID:Uuvgp4zf
はいサンプルね
interfaceはポインタレシーバーだとポインタ変数しか代入できないのに対して
メソッド呼び出しは全部成功しているよね?

https://go.dev/play/p/X71811pJ1sQ

メソッド呼び出しとインタフェースの仕様を混同しているから話にならない
英語読めない文盲ってことが証明されたな
668デフォルトの名無しさん
2022/09/19(月) 13:12:10.62ID:TLnbUxjm
>>667
わかってないふりしてるけどもう理解できたんだろ?
インターフェースのマッチ時のメソッド呼び出しについては>>659
明示的に呼び出す場合は>>662で変換される
(自分で呼び出すのだから当然インターフェース云々とは無関係)
669デフォルトの名無しさん
2022/09/19(月) 14:35:47.93ID:DYtWz9pX
言語的にケチ付けたいだけでしょ?
http://hissi.org/read.php/tech/20220914/eHBDU0cyOGc.html
http://hissi.org/read.php/tech/20220917/ejYydjU4Rno.html

こんなに一生懸命書く奴がほかに書き込んでない訳ないわ、またいつものRustかC#かアホみたいな他を攻撃する信者のオッサン
670デフォルトの名無しさん
2022/09/19(月) 14:40:24.76ID:TLnbUxjm
でもGoの知識増えたしいいんじゃない?
育成は成功だ
671デフォルトの名無しさん
2022/10/14(金) 13:17:00.05ID:5TqK6JoH
https://twitter.com/anicolaspp/status/1579960864639455232

Googleにやる気がなさすぎる
https://twitter.com/5chan_nel (5ch newer account)
672デフォルトの名無しさん
2022/10/14(金) 13:31:24.87ID:ei3T0+vp
Rustでもないのか
673デフォルトの名無しさん
2022/10/14(金) 19:27:35.90ID:BY1P2csp
Googleのたかが1プロジェクトが C++で始まるからと言ってGoの終わりを感じ始めるなんてどういう審美眼で生きてんだよ。
674デフォルトの名無しさん
2022/10/14(金) 19:30:06.02ID:5TqK6JoH
>>673
そうなんだろうけど、言いっぷりがなんかちょっと引っかからんか
お前やる気ないんか?ってメンションしたいくらいだわしないけど(´・ω・`)
675デフォルトの名無しさん
2022/10/14(金) 20:40:12.25ID:B3yPY6eO
審美眼w
676デフォルトの名無しさん
2022/10/14(金) 21:08:37.72ID:lXZRrdjw
>>674
普通にリプで使われまくってるって言ってるが
677デフォルトの名無しさん
2022/10/15(土) 20:39:15.62ID:oepRuRjK
Googleってコーディングに関しては無茶苦茶保守的というか統制的だからな
開発者の好みより合理的判断を優先した結果だろう
そういう文化だからこそGoみたいな極右言語が生まれたとも言えるのだが
678デフォルトの名無しさん
2022/10/15(土) 21:16:18.42ID:i2DHISwU
数多の捨てられたプロジェクトに比べればGo言語は成功した部類だろうよ。
679デフォルトの名無しさん
2022/10/16(日) 20:12:43.19ID:rzkq3MMZ
オッス!オラGo!
680デフォルトの名無しさん
2022/10/16(日) 23:36:46.06ID:sPVu6wa4
オラGolang
いっちょやってみっか
681デフォルトの名無しさん
2022/10/19(水) 22:35:19.30ID:wI0tEVCM
なんでC++なんて使ってるんだよ
新プロジェクトで使う言語じゃねーだろ
682デフォルトの名無しさん
2022/10/20(木) 01:44:44.00ID:5E4liKFh
Googleは独自のビルドシステムなど過剰に最適化された開発環境を持ってるから、簡単に言語変えられないんだよ
683デフォルトの名無しさん
2022/10/20(木) 02:39:12.77ID:ce/AQgdF
いや、たんに仕事が雑なだけだとおもう
とりあえず新プロジェクトやるぞー!
で?言語は?
C++で。
あれ?ウチの会社なんか新しいのはGOでやるとかいってなかったけ?
そうだっけ?べつにいーじゃん、Goはマスコットきもいし、C++のほうが楽だから俺んとこはこれでヨロシク!
こんな感じだろう
684デフォルトの名無しさん
2022/10/20(木) 04:11:13.86ID:XisYbstq
RustじゃなくてC++なのが逆張りっぽくてキモい
685デフォルトの名無しさん
2022/10/26(水) 14:45:01.27ID:bQQxHwPn
Goは低落傾向だよな
686デフォルトの名無しさん
2022/10/27(木) 12:55:24.22ID:8IxaEUdi
Goの後は何がくるの?
687デフォルトの名無しさん
2022/10/27(木) 13:56:20.40ID:dR6kLI3k
Rock(´・ω・`)
688デフォルトの名無しさん
2022/10/27(木) 14:48:53.91ID:JD5Xibbr
Goの前はなんだったん?
689デフォルトの名無しさん
2022/10/27(木) 14:57:45.98ID:NvTdXXa8
PHPかRubyじゃね
690デフォルトの名無しさん
2022/10/27(木) 15:21:32.99ID:dR6kLI3k
C(しー)だろ(´・ω・`)
691デフォルトの名無しさん
2022/10/27(木) 15:51:18.10ID:JD5Xibbr
dR6kLI3k
超好き
692デフォルトの名無しさん
2022/10/31(月) 23:02:39.22ID:sD6lQxmd
Dが2001年、F#が2005年、Goが2009年(年はwikipediaに書いてあった登場時期)
うまく並びそうだなと思たんだけどEがない

Goの次はHack(2014年)で間違いないよね。
693デフォルトの名無しさん
2022/11/07(月) 21:16:50.51ID:CyGVtWq4
最小とか最大を求める関数は自分で作れって話なの?
あと、整数の絶対値とか
694デフォルトの名無しさん
2022/11/07(月) 21:23:29.28ID:Jjz79PGF
>>693
https://aiprogrammer.hashlab.jp/

Go language part 5 YouTube動画>1本 ->画像>7枚
このサービスは適切にライブラリ使ってくれるはずだから、
多分無いんだろうな
695デフォルトの名無しさん
2022/11/07(月) 21:46:44.70ID:FtLbuDZg
二分探索できたりする場合もあるからそういうライブラリはあえて作ってないんだと思われる
ライブラリ側で最適な実装で作れる場合はちゃんと用意されてることが多い
(http2とかDB周りとか)
696693
2022/11/09(水) 22:20:34.16ID:lnZKpzqz
お二人ともありがとうございます。
697デフォルトの名無しさん
2022/12/08(木) 18:39:09.15ID:uxR4Nxrs
windows環境でGoをアップデートするにはどうしたらいいでしょうか?
新しいバーションで上書きインストールしちゃえばいいんでしょうか?
698デフォルトの名無しさん
2022/12/08(木) 18:52:51.60ID:CQKYsqd2
Chocolateyでやってるのを見てみると、上書きっぽいけど
699デフォルトの名無しさん
2022/12/10(土) 13:20:48.86ID:tbDvYRlN
wingetUIであらゆるものを一括アップデート
700デフォルトの名無しさん
2022/12/10(土) 17:41:52.62ID:pF+bGi+J
GoなんかどうせWinネイティブで使う意味ないんだから、WSLでHomebrewでも使って入れたらいいんじゃない
701デフォルトの名無しさん
2022/12/10(土) 18:33:44.18ID:EIv2riio
暇だったから>>693を流行りのChatGPTに書いてもらった

Go language part 5 YouTube動画>1本 ->画像>7枚
702デフォルトの名無しさん
2022/12/10(土) 18:54:44.75ID:wODlVXAD
>>701
テストコードも書いてもらってみて
703デフォルトの名無しさん
2022/12/10(土) 19:02:48.17ID:EIv2riio
>>702
Go language part 5 YouTube動画>1本 ->画像>7枚
Go language part 5 YouTube動画>1本 ->画像>7枚
Go language part 5 YouTube動画>1本 ->画像>7枚

おもろいから無料βの今遊んどくことをおすすめするぞ
アセンブラ(65816)も書いてくれた
704デフォルトの名無しさん
2022/12/10(土) 19:27:57.88ID:EIv2riio
ちなみにChatGPTはセッション的に一連の会話を一時的に覚えててくれるらしいから、
二回目には同じ関数のコメントが省略されてる
関数の名前を明示すれば、「○○のテストコード書いて」でやってくれたかも
まあスレチだな
705デフォルトの名無しさん
2022/12/10(土) 22:11:37.20ID:44qA0nvq
>>703
テストケース考えるときの助けによさそうだな
たいしたもんだ
706デフォルトの名無しさん
2022/12/11(日) 20:52:12.36ID:5Jzg/4z6
Go言語はこの先生きのこれるのか?聞いてみたら面白いかもな。
707デフォルトの名無しさん
2022/12/11(日) 22:00:53.37ID:OomiNZje
あとゴーファーくんがキモいかどうか聞いてくれ
708デフォルトの名無しさん
2022/12/11(日) 23:59:02.05ID:E83NyA42
Go language part 5 YouTube動画>1本 ->画像>7枚
709デフォルトの名無しさん
2022/12/12(月) 00:36:12.57ID:lSFKnCD8
やはりChatGPTだめだな!
"かわいらしい外観が特徴で愛される存在となってる"
こんな回答では人類の知性にまだまだおよばない!
ただしい知性ある回答はこうだ!
"きもかわいい外観で一部のマニアックなgo開発者に愛されています"
710デフォルトの名無しさん
2022/12/12(月) 05:06:40.93ID:3lAXikmn
地元のマイナーなサッカーチームについて聞いたら「日本でも見逃すことのできないチームの一つ」とか適当に答えたぞコイツ
IT系以外は知ったかする
711デフォルトの名無しさん
2022/12/12(月) 10:35:46.50ID:+aBs88Ma
>>710
ITでも知ったかするよ
N88BASIC書いてもらったら大嘘な奴が出てきた
ちゃんと下げ親指ボタン押して運営にレポートするとよろし
712デフォルトの名無しさん
2022/12/12(月) 14:23:40.21ID:Sd/ABjr2
真面目な話、わからんことを素直に「それについてはわかりません」と言ってくれないのはかなりタチがわるいな
新入社員だったら要注意人物だよ
713デフォルトの名無しさん
2022/12/12(月) 15:22:25.27ID:+aBs88Ma
>>712
わかりません と答える場合もある
AI君がわかった気になってるだけ
更にタチが悪いけどもw

スレに沿って書くなら、エンジニアの仕事はまだまだ安泰だが、使いようによっちゃ楽はできる
って感じね
714デフォルトの名無しさん
2022/12/27(火) 22:42:29.20ID:zgwkOx1T
rainu/go-command-chain: A go library for easy configure and run command chains. Such like pipelining in unix shells.
https://github.com/rainu/go-command-chain
715デフォルトの名無しさん
2022/12/28(水) 10:01:43.96ID:/bZ5g76e
CLIの引数の読み取りするライブラリーは何がおすすめ?

kingpinは最近更新されてないからkong試してみたが
なんか使いづらい
ここに挙がってる他のやつ試そうかと思う
https://www.reddit.com/r/golang/comments/9uybnt/choosing_a_library_for_cli_application/

Neither, personally I like https://github.com/jessevdk/go-flags. I like the declarative approach a lot more than the imperative one used for many other options, and it's extremely feature-rich.
716デフォルトの名無しさん
2022/12/28(水) 10:02:39.35ID:/bZ5g76e
https://github.com/jessevdk/go-flags
717デフォルトの名無しさん
2022/12/28(水) 10:04:18.11ID:Vd7DA+tc
https://github.com/spf13/cobra
これ
718デフォルトの名無しさん
2022/12/28(水) 10:25:06.75ID:/bZ5g76e
>>717
Cobraはこんな感じのこと書かれてるけど
どんなコードを指してるのか分からん

kingpinは直感的に使える気がするけどメンテナンスされてない
問題なければこのまま使えば良いか?

Both cobra and urfave/cli both enforce a globals-heavy, inversion-of-control architectural pattern that's difficult to maintain.
IMO, Kingpin is the only widely-used CLI library that takes an appropriate architectural approach.
719デフォルトの名無しさん
2022/12/28(水) 18:14:44.71ID:Vd7DA+tc
>>718
読んできて判断すればいいじゃん。そんなに読めないものじゃないし使い方も難しくない。アーキテクチャはたしかに理想的ではないと俺も思ってるけど、利用面からの意見としては、、
実戦で使用されていて信頼できる
機能面でも多言語の相当品と同じことがまあまあの書きやすさで書ける。ただしやや歴史的機能があったりして隅々まで洗練されてるとは言い難い印象
コマンドラインの補完などほかの言語では少々保守が面倒な機能があって便利

っと思ってる。でもとにかく評判より自分で確かめたらいいよ
720デフォルトの名無しさん
2023/01/03(火) 22:07:17.76ID:nBTO23xG
cobraはサブコマンドを無限に生やすような大規模向け、Kubernetes/dockerで使用されてる。
そこまで拡張する予定がない場合はgo-flagsかもっとシンプルな mitchellh/cliかな?ちょっとオプションがあるだけなら標準?のflagsだろうけど、普通に*nixのfindぐらいオプションがあるならやっぱりgo-flagsがおすすめだわ
大した関連性がないのに1つのバイナリのサブコマンドになってるより、別プログラムのほうが設計もメンテも楽だしcobraが**とても**メンテしやすいという話だけど、それは変らない。
本当にそこまで多数のオプションで動きが変わるようなプログラムを作るのか?という自問自答が必要だと思う、いやcobraは良いと思うけどね
721デフォルトの名無しさん
2023/02/02(木) 11:00:03.89ID:aD0kITwS
https://go.dev/blog/go1.20
722デフォルトの名無しさん
2023/02/02(木) 22:07:10.87ID:u1Hba8Dd
正式版リリースされたんだろうね。
723デフォルトの名無しさん
2023/02/05(日) 14:04:47.63ID:hlR7Lbz4
ジェネリックスって、有名どころのOSSのライブラリで活用されたりしてるの?
それとも手遅れ?
ORMあたりでこねぇかな
724デフォルトの名無しさん
2023/03/03(金) 19:04:29.44ID:E2W0QKCP
Go言語でマイクロサービスの実装を解説してる書籍はありますかねえ?
725デフォルトの名無しさん
2023/03/13(月) 22:26:20.80ID:i1e+c7zN
>>475
今まさに使ってるよ
726デフォルトの名無しさん
2023/04/05(水) 05:10:28.93ID:DRPu7HQc
>>724
以下は、Golangを使用してマイクロサービスを開発するための書籍です。

"Goで学ぶマイクロサービス設計入門" - 田中 充史 著
  この本は、Golangを使用してマイクロサービスを設計する方法を解説しています。サンプルコードを使用して、マイクロサービスの作成、展開、スケーリングなどを実践的に学ぶことができます。

"GoによるWebアプリケーション開発" - 佐藤 幸一 著
  この本は、Golangを使用してWebアプリケーションを開発する方法を解説しています。マイクロサービスの設計と開発に必要な概念と技術を学ぶことができます。

"Goマイクロサービスパターン" - マテウス・カルステンス 著
  この本は、Golangを使用してマイクロサービスを実装するためのパターンを紹介しています。パターンに従って実装することで、マイクロサービスの堅牢性、柔軟性、スケーラビリティを高めることができます。

以上の書籍は、Golangを使用してマイクロサービスを開発する際に役立つ情報が含まれています。どの書籍も、実践的なアプローチを採用しており、Golangの基礎から応用まで幅広くカバーしています。
727デフォルトの名無しさん
2023/04/24(月) 17:12:53.41ID:cAv437kT
Go言語入りユニクロTシャツ、Akamaiが提供 コードを動かしてみた人も=ITmedia
728デフォルトの名無しさん
2023/06/09(金) 20:38:28.47ID:cm/uNDIo
1.20.5リリース
729デフォルトの名無しさん
2023/06/25(日) 22:02:04.84ID:i+k3hE2N
ビルトインmin,maxやっときたか
730デフォルトの名無しさん
2023/07/26(水) 21:01:05.26ID:gfwPzIhn
今期の公式調査が来たからみんな答えよう

以前の発表通りエラー制御に本腰入れ始めるのかまたもや意識調査が含まれてた
AIについての質問もあったし標準で組み込まれる未来もあるのかしら
731デフォルトの名無しさん
2023/07/26(水) 23:19:31.81ID:y7c46OWN
Goはこの中途半端な立ち位置のまま
この限られた用途以外で一般的に使われる言語にはならないと思われる
732デフォルトの名無しさん
2023/07/27(木) 08:50:36.21ID:avMPxvPz
昔Rubyがブイブイいわせていた時、私はPythonを選びました
本物には本物が分かります、そして私は静的言語としてGoを選択します
そうです、これが本物の回答なのです
いえ、これは私が優れているということではありません
Goが優れているということなのです
733デフォルトの名無しさん
2023/07/27(木) 13:33:27.28ID:PeWu9EZy
goもこのまま衰退してしまうのだろうか。
今からならrust覚えた方がいいかな。
734デフォルトの名無しさん
2023/07/27(木) 22:38:03.18ID:3hHUpwom
そういえばジェネリクスはもう実装されたんだよな。もうinterface{}地獄じゃないのかな。
735デフォルトの名無しさん
2023/07/29(土) 17:37:17.23ID:meVoqp2J
まだ地獄やろ、
そんなはやくライブラリに取りこまれないんじゃないか
ORMとかどうなったのかな
736デフォルトの名無しさん
2023/07/31(月) 00:39:34.75ID:vFPs2eWw
agoutiのかわりのライブラリでないかなー
737デフォルトの名無しさん
2023/08/18(金) 16:42:15.53ID:hpPc67cT
かなり早い段階で翻訳が出たな
原著公式レポがあるから動かす手間を惜しまなければ何がダメなのか分かるけどね
https://github.com/teivah/100-go-mistakes/blob/master/09-concurrency-practice/68-string-formatting/main.go

“開発の失敗学”から生産性とコード品質を高める。『Go言語 100Tips ありがちなミスを把握し、実装を最適化する』
Goプログラミングの間違いを網羅的に解説した一冊
https://forest.watch.impress.co.jp/docs/bookwatch/news/1524131.html

https://www.アmazon.com/100-Mistakes-How-Avoid-Them/dp/1617299596
翻訳者ご本人 柴田芳樹 5.0 out of 5 stars The equivalent of "Effective Java"
>However, please note that there are many minor errors in the book, so if you can read Japanese, I recommend the Japanese version that I have translated.

なおreadme翻訳募集中
README: Japanese translation 🇯🇵
https://github.com/teivah/100-go-mistakes/issues/30
738デフォルトの名無しさん
2023/09/03(日) 01:50:02.49ID:Cy9pNCnO
最近goはじめたけど、例外処理になれないわ

今まで安易にスローしてきたつけが出てる感じ
739デフォルトの名無しさん
2023/09/17(日) 01:24:19.14ID:gmX20b6T
身内に不幸があったので
740デフォルトの名無しさん
2023/09/28(木) 18:02:19.03ID:58VlP50A
みんなgoに帰ってくる
741デフォルトの名無しさん
2023/09/28(木) 18:30:24.70ID:gS/5M63X
女性がイクときは3パターンある
1.come(欧米)
2.go(日本)
3.end(日本ではあまり知られていない)
742デフォルトの名無しさん
2023/11/27(月) 22:53:28.32ID:9f7xeaaD
mattnさんのGo本半額だったのに買い忘れた…
昨日でセール終わってた
743デフォルトの名無しさん
2023/12/31(日) 23:28:43.30ID:dxC8BLNX
もっと盛り上げてもらっていっすか?
744デフォルトの名無しさん
2024/01/10(水) 20:53:52.31ID:lwrDTIi6
goいいよな
わかりやすい

でもpythonのあほみたいな量のライブラリ使った後は自分で作んなきゃいけないんかとなる
745デフォルトの名無しさん
2024/01/10(水) 21:15:00.66ID:3AggmXC7
マイクロサービス向けの言語だから
APIサーバーとか小さな特化したものを
サクッと作るのに適してる

それ以上のことやると死ぬだけ
まさしく適材適所
746デフォルトの名無しさん
2024/01/11(木) 20:28:02.09ID:dlUe/OEx
コピペ地獄
747デフォルトの名無しさん
2024/01/15(月) 10:36:24.87ID:dnGwE3TA
勉強がてらGoでwebサービスやってるけどLaravelで良いじゃんって気がしてしょうがないw
PHP Laravel再評価の時代来そう
748デフォルトの名無しさん
2024/01/15(月) 11:07:21.77ID:WLI3YoB9
> PHP Laravel再評価の時代来そう

こない。
749デフォルトの名無しさん
2024/01/16(火) 00:18:43.14ID:OEv0o386
プロの労働市場は、Ruby, AWS Solution Architect だけ。
Java は多重請負構造のIT 土方

米国年収でも、Rubyは、Go/Rust/Elixir の3大言語を超えた!

Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7

多くの言語 : 6.5~7

PHP : 5
Dart : 4.4

PHP, Dart は、コンピューターサイエンスを勉強していない高卒用言語

フレームワークは、
Ruby on Rails : 9 万ドル
Django : 6
Laravel : 3.8

YouTube で有名な雑食系エンジニア・KENTA が言ってる。
初心者のキャリアパスは、Rails → Go のみ

Ruby/Goの神・HashiCorp のMitchell Hashimoto がそう。
Ruby製のVagrant → Go製のTerraform。
今は、Goプログラマーしか求めていない

PHP, Scala はKENTAがオワコン認定したので、絶対にやってはいけない言語です!
750デフォルトの名無しさん
2024/01/17(水) 20:06:14.83ID:IsM8Z7mt
なるほど尊師様がおっしゃるのなら間違いないw
751デフォルトの名無しさん
2024/01/19(金) 05:11:59.56ID:P4Evroye
地雷原を歩かせるスパルタ…!
752デフォルトの名無しさん
2024/01/28(日) 11:18:59.19ID:pEbeI3Z0
Goしか勝たん
753デフォルトの名無しさん
2024/02/07(水) 17:22:45.49ID:eJRtBQFR
Googleがプログラミング言語「Rust」に100万米ドルを助成
「C++」との併存・置き換えを図る
https://forest.watch.impress.co.jp/docs/news/1566662.html
754デフォルトの名無しさん
2024/02/07(水) 17:32:10.04ID:6WfYYP7P
スレ違い
755デフォルトの名無しさん
2024/02/13(火) 21:58:15.14ID:ty/4roqG
.22 のmuxのパラメタさぁ
756デフォルトの名無しさん
2024/02/14(水) 13:09:52.21ID:gybktDWa
mux使ってないけど、なんかあったん?
757749
2024/02/14(水) 20:05:40.85ID:73JEoiws
米国年収でも、Rubyは、Go/Rust/Elixir の3大言語を超えた!

2022 -> 2023

Ruby : 9.3 -> 9.9 万ドル
Elixir : 9.3 -> 9.6
Go : 8.9 -> 9.3
Rust : 8.7 -> 8.7

多くの言語 : 6.5~7 -> 7.3~7.8

PHP : 5 -> 5.9
Dart : 4.4 -> 5.6
758デフォルトの名無しさん
2024/04/03(水) 16:01:02.02ID:eNgZCM35
>>753
GoogleはGoにしたいのか、Rustにしたいのか
759デフォルトの名無しさん
2024/04/03(水) 16:23:26.97ID:V8E7QtS4
したいって現状用途が全然違うのに
760デフォルトの名無しさん
2024/04/03(水) 16:40:24.82ID:eNgZCM35
>>759
確かに現状用途が異なる。GoがWeb、Rustがシステム記述
しかし、本来はGoもRustと同じところを狙っていたのではないかと
761デフォルトの名無しさん
2024/04/03(水) 16:51:21.63ID:V8E7QtS4
goとrustじゃあ全然言語機能違いすぎるよ
goは言語自体くそシンプルでだからバックエンドのマイクロサービスみたいな
小さなサービス自体を実装するのに使われてる(用途)
goでそれ以上のことをやると死にかけると思う

GoとRustはC#とJavaみたいなにたもんじゃないと思う
762デフォルトの名無しさん
2024/04/03(水) 17:00:55.33ID:V8E7QtS4
逆にRustでバックエンドのWebサービス実装する
フレームワークあるけどコンパイル時間長すぎて
Webとか時間の流れ速い分野ではこれはこれで地獄だし

GoとRustは色々比較して別物だからな
用途も現状すみわけられてると思う
763デフォルトの名無しさん
2024/04/03(水) 17:16:01.43ID:V8E7QtS4
本来についてはどうなんだろうね
Goはシステム記述を最初から狙ってたの?
システム記述がどこを指すのかにもよるけど
764デフォルトの名無しさん
2024/04/03(水) 17:37:49.09ID:iMBIpEa8
でも実際GoogleはGoで書かれたものもRustに移行してる
生産性は同程度だけど不具合の数が圧倒的に少なくなったらしくかなり前向きっぽい
765デフォルトの名無しさん
2024/04/03(水) 19:14:38.98ID:IrOohhoZ
RustはC/C++の代替言語なわけで結局メモリ管理のための記述が必要な低級言語なんだよ~
ガベージコレクションの無い低級言語なんか触りたくないぽよぉ~、Goしか勝たん!
766デフォルトの名無しさん
2024/04/03(水) 19:19:11.96ID:SPeUFyxp
シンプルな言語機能でコードの保守性を高めることがGo言語の目的で、それはRustと真逆のような
767デフォルトの名無しさん
2024/04/03(水) 19:21:07.80ID:i4V1+m9a
Rustが人気な理由は
完全にメモリ自動解放しかも必ず安全
を実現しつつC言語と同等の速さで動く点
768デフォルトの名無しさん
2024/04/04(木) 22:12:02.80ID:vlvoJs2w
つかメモリ管理が~とか中級者まででしょ
普通の頭があれば25歳までに卒業してるわ
769デフォルトの名無しさん
2024/04/04(木) 23:05:06.38ID:G0cwdLmq
javaがウケたのもcがウケたのも
シンプルだったからなんやろねえ
実際のプログラミングってのはどうしたってクソみたいな
状態の山、依存の山みたいなもんに取り組んでいくわけで
余計な複雑さを持ち込まないでほしいってのは現場のリアルな声だと思う

もちろんgoも、それをわかってて、それを押さえてる
770デフォルトの名無しさん
2024/04/04(木) 23:26:31.09ID:Chhm4gg1
>>769
Cが受けたのは他が糞だったから。勿論Cの完成度は超高いにしても。
あとその当時はCPUが非力すぎて軽くないと話にならなかった。
Javaが受けたのはCで鬼門だったポインタを廃止してGCも導入し、馬鹿でもバグが出にくくなったから。
その後スクリプト言語が受けてるのは富豪プログラミングの方が断然楽だから。
ただ効率を考えたらポインタを直接扱える方が断然有利なので、Goは簡単な範囲でポインタを使える言語の位置づけだと思う。
771デフォルトの名無しさん
2024/04/04(木) 23:40:17.98ID:vlvoJs2w
ただしJavaは敷居を下げすぎて業界にバカが多数流入した
ポインタを取り扱える/扱えない がハードルとして機能していた
Go関係ない話ですまん
772デフォルトの名無しさん
2024/04/05(金) 00:59:31.65ID:wkA5bdgA
>>762
初老のおっさんのyoutubeで見たけど
actix-web使ったプロジェクトのビルドに10分位掛かってた。
もうちょっと頭使って環境作ればいいのに

ちなワシの環境なら10秒程度
773デフォルトの名無しさん
2024/04/27(土) 20:42:50.26ID:PtA3qgXN
こんばんは

Goってネームバリューあるけどそんなに盛り上がってる感じじゃないよね
javaの後継になるかと思ってたけどそうでもないし
774デフォルトの名無しさん
2024/04/27(土) 21:13:07.86ID:K8Ze6DJO
言語仕様が簡素な点が特徴だけど
Javaのような大規模開発には向いてないかな
ガベージコレクションがあるからC/C++の分野も不向き
守備範囲が意外に狭い
775デフォルトの名無しさん
2024/04/27(土) 23:58:02.43ID:9h9dlcQc
Goはもう衰退傾向に入った
776デフォルトの名無しさん
2024/04/28(日) 10:43:50.01ID:ebtFAx8m
>>774
Javaが大規模開発に向いてるのは「文化」であって、「言語機能」ではないだろ
Goで技術的に出来ない事はない。ただしやる意味もないが
Goが糞なのは「全部書け」という言語ポリシーだが、これはJavaも同じだし

>>773
Javaの代わりにGo使うメリットってポインタが使える事くらいか?
ならJavaの連中はポインタが使えない(使わなくて済む)からJavaに行ったのだから、
> javaの後継になるか
これ自体が間違いだな

ただまあ、GC付きCの需要は以前からあったし、この分野ではそこそこ生き残り続けるのでは?
777デフォルトの名無しさん
2024/04/28(日) 10:57:35.16ID:vYBqVrR0
javaの代わりにGo使うメリットってネイティブコード吐き出すことだと思うけど
処理速度が早くなればそれだけマシンのリソースが少なくて済む
778デフォルトの名無しさん
2024/04/28(日) 11:46:19.27ID:ebtFAx8m
>>777
ああその点は完全に失念してた。
ただなんつーか、今時鯖代より人件費の方が高いので、Web鯖なんて物理で殴る方が安いというソリューションになってしまってる。
Javaも同様の状況だと思う。
Webに比べて製品寿命は長いので、状況異なるかもしれんが。

処理速度が絶対的に必要なのは物理で殴って逃げられないケースで、
これは例えばディスコードやFPS等のゲーム、つまりユーザー間でのデータのやりとりが大量にある状況で収容数を増やしたい場合で、
現在はRust/C++ということになっている。この分野でJavaを選択する奴は居ない。

Javaが使われてるのは大概インフラ、つまり銀行の送金システムや自治体の戸籍管理等だが、
負荷がかかって物理で殴って逃げられないのはDBであってJava記述部分ではないので、
最大でも精々2倍程度にしか速くならない現状で、Goに書き直す事はない。
それよりも書き直す際のバグを嫌うはず。

つまり、Rustが存在せず、鯖代が今の10倍くらい高ければ、JavaをGoに書き直す需要は発生してたはずだが、そうではなかった、ということ。
779デフォルトの名無しさん
2024/04/28(日) 13:33:28.92ID:PewOJWl2
3行で
780デフォルトの名無しさん
2024/04/28(日) 13:57:24.88ID:MN1XFv8I
> Javaの連中はポインタが使えない(使わなくて済む)からJavaに行ったのだから、

アマチュアさんからはそう見えるんだね
職業マにとって言語なんて案件次第なんよ
781デフォルトの名無しさん
2024/04/28(日) 14:28:40.83ID:ebtFAx8m
>>779
速度面も機能面も、GoはJavaの後継ではない

>>780
ゆとり乙

顧客次第というのなら、現時点でのJava案件は今後ともJava案件だろうよ
顧客は公務員かお堅いところで、「もし何かあったら誰が責任を取る?」しか考えない連中だから
C++しかなかった時代ならともなく、現時点でJavaを「安全」とする技術的意味はないが、
顧客はそれを理解出来ず、また、責任逃れの為に誰も先陣を切らない
ただオラクルが妙な動きを見せ始めてるから、その辺どうなるかだが、それでも公務員連中は金払って終わりだろうよ
所詮は税金であって、自分の金ではないから
そういえば三菱銀行は10-15年前にC++で書きました、Haskell使いました、とかやってたが、続報は聞かないね
782デフォルトの名無しさん
2024/04/28(日) 14:52:46.56ID:MN1XFv8I
素人ならではの発想ほほえましい
783デフォルトの名無しさん
2024/04/28(日) 15:24:23.74ID:P9GmgsNY
しょうもないマウント合戦
784デフォルトの名無しさん
2024/04/28(日) 15:26:16.67ID:ebtFAx8m
>>782
ゆとり引きニート乙


>>773
一応捕捉しておくと、773がGoを「速いJava」と『個人的に』考えたのは間違いではない。
ただし『言語として』なら完全に間違いだ。

Javaはビルジョイが「Cでのバグの大半はポインタがらみで、ポインタ使用ケースの9割がStringだった。
だからStringを言語がサポートすればポインタをなくせると考えたんだ」とリーナスに語ったとおり、
ポインタを無くしてバグを減らす為の言語として作られてる。
そして実際、大受けして天下を取った。(なお「大半」と「9割」は逆だったかも)

ただ、速度チューンにはポインタでの効率化が必須で、この意味でGoは「速いJava」として『個人レベルでは』使える。
ただしJavaにはそもそもポインタがないのだから、
この発想、つまり「ポインタを使えば速くなる」とはJava使いは考えないし、実際、出来ない。
(個人レベルなら出来るのは混ざってるだろうが、Java流の開発方針だとチーム全員が出来ないと意味がなく、機能しない。
そしてポインタにまつわる問題をデタラメに吹聴してる震源はJava使いであって、具体的に言えば「メモリリークガー」だが、
C使いがメモリリークに悩まされる事はない。それはCの使い方を知らない馬鹿がデタラメやってて勝手にバグってるだけ。
この意味で ID:vlvoJs2w は正しい事を言ってる。なお俺は ID:Chhm4gg1)
785デフォルトの名無しさん
2024/04/28(日) 15:55:49.27ID:SU2rs0/X
そのようにC/C++を自分は使いこなせると思い込んでいる多くの人たちによってセキュリティホールが生み出し続けられている
結局C/C++を使用禁止にするしか解決策はない
アメリカでは政府レベルで決断して声明を出したので日本も後を追うだろう

「ソフトウェアはメモリ安全でなければならない」との声明を発表、米ホワイトハウス:「C」「C++」よりも「Rust」などの言語を推奨
https://atmarkit.itmedia.co.jp/ait/articles/2403/18/news045.html
786デフォルトの名無しさん
2024/04/28(日) 18:01:20.89ID:cGfg508i
AIによるコンパイラによってC/C++は復活する、コンパイル時にメモリ安全がAIによって保障されるのだ
さらにAIコンパイラがはくエラー&提案によって誰もがC/C++マスターとなる
つまりRustの人間にメモリ安全を強制する構文ルールは瞬く間に錆ついてしまうのさw

もちろんAIの恩恵はガベージコレクションにも及びGo、Pythonなどの実行速度も劇的に上がる
つまりRustはすぐに錆びついてしまうのさw AIという母なる海によってね
787デフォルトの名無しさん
2024/04/28(日) 18:22:25.79ID:OBzO61ZB
めちゃくちゃ頭の悪い妄想だな
788デフォルトの名無しさん
2024/04/28(日) 18:41:43.21ID:ebtFAx8m
>>785
そう思う人がC/C++を使わなければ済むだけ。

> そのようにC/C++を自分は使いこなせると思い込んでいる多くの人たちによって
なお、これはただのコンプレックスで、
ポインタの概念を理解すら出来ない馬鹿はお引き取り下さいではあるが、
ポインタを理解できたがリークするのは、やり方を知らないだけ。
(そしてここはGoスレであり原則後者だから、前者は死ねでいい)

ただ問題は、Javaの連中が「メモリリークガー」とデタラメに吹聴してるのに騙され、
文法にて縛ってしまうRustに逃げてしまってる事。まあ初心者は文法しか見えないから致し方ないが、
実は定番の手法があり、踏襲すれば絶対にリークしないだけ。
賢いからリークしないわけではなく、知ってるか知らないか、守るか守らないか、でしかない。
そしてRustは実際はC->C++->Rustと来ないと意味もメリットも理解出来ず、
「RustのおかげでCを入門する奴が増え、現在RustよりCの入門者の方が多いじゃねえか!」とか2019頃に言われてた気が。
RustはCを駆逐したいようだが、間抜けな話だ。

そして、Javaが「安全」とされていたのは、
・ポインタにまつわる問題が無い
・配列の境界チェックあり (←これGoはどうだったっけ?忘れた)
・GCありなのでリークしない
・サンドボックス
だと思ったから、技術的に見れば確かにGoはJava+ポインタ=高速版Javaとしての側面はあるのだろうよ。
ただ、マーケティング的に(781)、また技術者リソース的に(784)、当面は無いが。

この意味では俺はRustの方が詰んでると思うよ。AIで出来るとは思って無いが、(>>786)
・動的な境界チェックをやってる限り、Cの速度に勝てない
・静的な境界チェックが出来るようになれば、C++にも導入されるだけ
で、出口が無い。
そして意味もなくマウントを取って来た780が言う様に、現在のJavaプログラマはポインタを扱えるのなら、
Java->Goへの大移動は起きるのかもしれんよ。この意味ではRustよりGoの方がワンチャンある。
(けどまあ、普段やってないことがいきなり出来るわけも無く、ゆとり引きニートの言い分なんてお察し、だが)
789デフォルトの名無しさん
2024/04/28(日) 20:18:11.49ID:MN1XFv8I
童貞が女の口説き方教えてくれてるような長文
790デフォルトの名無しさん
2024/04/28(日) 21:47:54.49ID:J0uaAvkZ
例え方がキモすぎる
791デフォルトの名無しさん
2024/04/28(日) 23:14:08.57ID:/3v3RYNX
そんな心配しなくてもAIが進化すればGOもC/C++もRustもなくなって別の高級言語が生まれるよ、もう会話してればプログラムができちゃうような感じになる
792デフォルトの名無しさん
2024/04/28(日) 23:51:58.46ID:CS4j+YiY
>>788
配列の境界チェックは任意に与えられたインデックス値に対してはC言語であろうとなかろうと境界チェック必須
一方で配列の内部であると確認されているなら不要(にすることができる)

例えば配列の内部であると確認されているならその配列内部へのポインタとして持ってしまえば
読み書きアクセスのたびに境界チェックは不要となる

よく使われる配列の全体もしくは一部分の範囲を順にシーケンシャルアクセスする場合もポインタにすれば境界チェックを不要にできる
なぜならその範囲の終端条件に達するまでは内部であると確認されてるため個別の境界チェックは不要

RustがC/C++と同じ速さで動くのもこの原理のため
793デフォルトの名無しさん
2024/04/29(月) 00:43:52.99ID:Cj8RVhlf
>>792
言ってる事は知ってるが、そうではなく、

> 任意に与えられたインデックス値に対して
の時に実際どうしてるか聞いてる。

C言語の場合は、境界チェックして無い。
Rustの場合はするらしい。だからこの部分でどうしてもCより遅くなる。
Javaは勿論やってる。だから馬鹿が書いて添字範囲をオーバーしたら、例外が返されたはず。
Goはどうだったっけ?という事。

で、Javaが792の手法でゴリゴリに高速化し、C比3倍遅かったのが1.8倍程度まで盛り返したのも知ってる。
そしてC#の方はJavaが6,7で留まってた際にも言語自体が進化してたので、高速化がまだJava程には至ってない。

あと、ついでに言うと、(別人かもしれんが)
> セキュリティホールが生み出し続けられている
> 結局C/C++を使用禁止にするしか解決策はない
これも間違いで、C/C++の場合は788に書いたとおり、
・(プログラマの技量により)バグを生みやすい
・ベアメタルなので問題があった場合に直撃する
だが、アプリとしてはバグが無い(上記上側がクリアされてる)、という前提なら、RustはC/C++と比べて安全ではなく、同程度でしかない。
セキュリティホールは設計上のバグだから、言語関係なく発生する。
(だからLinuxをRustで書きなおそうという馬鹿は居ないし、居てもポシャる。
そういえば10-15年程前はLinuxをC++で書き直そう、という連中が居たはずだが、消息聞かないところを見ると、完全にポシャったようだし)
ただ、Javaの場合はセキュリティホールを突いてもVMだから、さらにVMのセキュリティホールを突く必要があり、この意味では安全。
Goの場合はランタイムだから、VM程ではないにしても、ベアメタルよりはまし。ランタイムの実装によっては、VMと同等の堅牢さも確保できる。

ただ、言っちゃ悪いが、Rustの連中がやたら布教に熱心なのは、所詮はその程度の言語なんだと思うよ。
JavaScriptなんて悪口しか聞かないが、蔓延る一方だろ。プログラマに支持されてる言語はこうなるという例だよ。
Rustは精々ポリコレがんばってください。俺はRustは死ぬと予想してるし、そう望んでます。
794デフォルトの名無しさん
2024/04/29(月) 01:08:13.38ID:ZxN+lFnq
>>793
配列の境界チェックをしなければどんな言語でも範囲外アクセスで続行となり致命的な穴となります
だからC/C++以外はどんな言語でも境界チェックが行われています
C/C++でも自分で境界チェックを行わなければ致命的な穴となります
したがってそこで速度差は生じません
795デフォルトの名無しさん
2024/04/29(月) 05:43:48.04ID:OeTjgfob
なんかスレが進んどる。半分は読んでない。
けど大規模開発になると些細なパフォーマンスは関係なくなることには同意した。
それを差し引いても自分はGoが好き。
796デフォルトの名無しさん
2024/04/29(月) 08:46:16.16ID:Cj8RVhlf
>>794
Cで境界チェックしてる奴なんて、世界中でも誰もいない。
境界オーバーは純粋にバグであり、プログラマの責任でデバッグしておけ、というのがCの文化。
そしてずっとそうやって来てる。

だから動的に境界チェックをしてる限り、RustはCよりも原理的に遅く、実際そう。
この意味ではRustは補助輪付きCであり、補助輪の分だけ遅い。
Rust=馬鹿向けC、といえば分かりやすいか。
そして、C/C++でなんら問題なかった連中からすると、
Rust?記述がウザくなるがリークがなくなって境界チェックしてくれる?
いやリークなんて元々しないし、デバッグもちゃんとやってるから間に合ってるよ、であり、
何もメリットが無いからRustなんて使わない。
797デフォルトの名無しさん
2024/04/29(月) 08:47:08.70ID:Cj8RVhlf
とはいえ数は力である。
Cの場合は「リークや境界オーバーするような馬鹿がコード書くな」であり、
コードを募る場合は中~上級者だけに対象を絞る大前提だが、
798デフォルトの名無しさん
2024/04/29(月) 08:47:32.78ID:Cj8RVhlf
Rustの場合は「文法に従ってさえすればリークは防げます、境界オーバーは動的チェックしてます」らしいので、
大多数の馬鹿からもコードを募れる。これが今の時代には向いているのも確か。

ただ、馬鹿向けCなら、Goの方が上だと思うよ。境界チェックしてたかは忘れたけど。
799デフォルトの名無しさん
2024/04/29(月) 09:45:04.56ID:yABvkw5a
>>798
Goももちろん正しく配列境界チェックをしていてindex out of rangeのランタイムエラーが出るよ
Cだけが基本的なこともできない古い失格言語で範囲外をアクセスしてしまう
800デフォルトの名無しさん
2024/04/29(月) 11:03:19.56ID:Cj8RVhlf
>>799
なら馬鹿向けCはやはりGoで決まりだな。

そして、「僕は馬鹿だから補助輪ください」か、
「俺はちゃんとデバッグするから補助輪なんてイラネエ、100%の速さをくれ」か選べる。
それでいいのでは。
(というかこの辺グダってるのはRustだけで、Go使う連中は最初から100%の速度なんて求めてない。
Rustが原理的にCより遅いのは回避しようも無い事実なのに、嘘ぶいてるからおかしなことになる。
そしてこの手のことを「選択肢を絞り、政治的に解決する」のがパヨクの常套手段で、典型的には>>785
パヨってるRustは当然嫌われてるだけ)


ただまあ、もう一度整理すると、Goは
・ポインタにまつわる問題はそれなりに対策されてる
・配列の境界チェックあり
・GCあり
・ランタイム
だから、経緯とか界隈の文化とか技術者の状況を無視して、単に純粋に言語の技術的側面だけを見ると、Goは
> javaの後継 (>>773)
は言えてるのかもしれんね。
そういえばJavaは「元祖馬鹿向けC」、Goは「2代目馬鹿向けC」と言われてたし、自然な発想なのかも。
ただ「安全」に関しては、一度保険をかけたら二度と戻れないものだから、Javaの連中がGoを「安全」と見なす事はなかなか無いとも思うが。
(ランタイムエラーを吐いてくれる環境で動いているソフトは、
ランタイムエラーで誤魔化せてるから動いているのか、
そもそもバグが無いからランタイムエラーは絶対にないのか、区別付かない。
だから、ランタイムエラーがある環境でどれだけ動かした実績があっても、『保険』をはずしてベアメタルに持って行くことは出来ない)
801デフォルトの名無しさん
2024/04/29(月) 11:07:50.34ID:2zp3j2iQ
Cと違ってGoは賢い

str := "01234"
a := []byte(str)

fmt.Println(a[3]) // → 51 (3のascii code)
fmt.Println(a[3:5]) // → [51 52] (3と4のascii code)
fmt.Println(a[3:7]) // → [51 52 0 0] (範囲外の値は0になる)
fmt.Println(a[3:9]) // → panic: runtime error: slice bounds out of range [:9] with capacity 8
802デフォルトの名無しさん
2024/04/29(月) 11:37:52.73ID:Cj8RVhlf
>>801
> fmt.Println(a[3:7]) // → [51 52 0 0] (範囲外の値は0になる)
これはランタイムエラーのほうがいいのでは?
803デフォルトの名無しさん
2024/04/29(月) 12:54:08.59ID:DB9NwYGr
キータにでも行ってくれ
804デフォルトの名無しさん
2024/04/30(火) 23:59:10.31ID:QUZ1c+LP
>>802
なぜ?
805デフォルトの名無しさん
2024/05/01(水) 08:22:11.43ID:0mD/sHeG
>>804
動作の一貫性が無いから。
或いは

fmt.Println(a[3:9]) を [51 52 0 0 0 0 ] (範囲外の値は0になる)

でもいいが、べき論ならランタイムエラーに揃えるべき。
境界オーバーはプログラマ起因の単なるバグであり、修正することを期待されるので。

ランタイムエラーは本来
・メモリ不足
・DB開こうと思ったが応答が無い、或いは何らかの理由でDBに書き込みが出来ない
・ユーザー文字列をevalしようとしたが、エラーになる
等の、『プログラマのミスではない』問題に遭遇する可能性がある局面でtry-catchするものであって、
プログラマ起因のバグがあってもそれなりに動かす為の仕組みではない。

けどまあ、実際はお前のように後者だと勘違いしてる奴が多いのも事実。
だからJavaは基本的に低品質、というかCでは許されない品質のコードが大量に混入することになる。
これをもって「安全」とするのは本来は間違ってる。
(低品質のコードでもそれなりに動かせる環境自体は研究する価値があるのも事実だが、これは本来は明確に別件としてやるべき。
なおGoの場合はpanicから復旧する手段はなかったような気がするので、この点は多少ましかも)
806デフォルトの名無しさん
2024/05/07(火) 01:44:11.10ID:YTph46y4
んで、けっきょく今時点だとGoとRustはどっちがええねん
どうせ「用途による」とか玉虫色の回答しか言えないやろ
807デフォルトの名無しさん
2024/05/07(火) 04:24:12.21ID:Usgj6GuW
>>806
人による
君にはGoがお似合い
808デフォルトの名無しさん
2024/05/07(火) 06:37:23.80ID:uUsSNCvM
長文を連投してる人、Goのことを知らなすぎて草

>>793
> Javaは例外が返されたはず。
> Goはどうだったっけ?という事。

>>805
> Goの場合はpanicから復旧する手段はなかったような気がする
809デフォルトの名無しさん
2024/06/18(火) 21:17:45.07ID:thkKQsLJ
tinygo 0.32.0きたね
810デフォルトの名無しさん
2024/06/19(水) 23:06:48.88ID:lxA6IPUt
TinyGo 知らなくて、流行の組み込み用サブセットみたいなヤツかと思ってググってみたらそのとおりなんだけど
WebAssembly でも出力できるんだな
意外と良いかもしれない
811デフォルトの名無しさん
2024/07/28(日) 18:50:53.82ID:VSMJ57p1
UTF-8をShift-JISにエラー無く文字コード変換したいんだけどググって出るサンプルは変換できない。
実例ないですか?
812デフォルトの名無しさん
2024/08/07(水) 05:15:10.47ID:b8ckcWsL
TinyGo よいよね
813デフォルトの名無しさん
2024/10/06(日) 12:22:59.83ID:GjPRl5Ej
WindowsでExec.Command()でPipe経由の
処理ってできるの? コマンド実行エラーになる
814デフォルトの名無しさん
2024/12/18(水) 11:16:14.03ID:Fcikaz4J
最も使うプログラミング言語、Python連覇 COBOL上昇
https://www.nikkei.com/article/DGXZQOUC045XF0U4A201C2000000/
815デフォルトの名無しさん
2024/12/25(水) 08:07:30.27ID:GJM9sM3F
日時のシリアル値から
実際の日時に変換するには
どうしたらよいですか?
816デフォルトの名無しさん
2024/12/25(水) 23:28:06.92ID:GEl1btnw
シリアル値って何?UNIX時刻?UNIX()あるよ
817デフォルトの名無しさん
2024/12/29(日) 14:52:44.20ID:zCgGYAuT
シリコンバレーの1流のエンジニアがGoの入門書を書いた! みたいな本を見かけたから買ってみたわ。
買ったからには読むけど、20/100点ぐらいの本だろうな。
818デフォルトの名無しさん
2024/12/29(日) 18:55:25.73ID:oYZ6o+kR
発売前からアマゾン1位jのやつだろ?
819デフォルトの名無しさん
2024/12/30(月) 00:21:57.66ID:k4D/bjHI
立ち読みしたけど至って普通だった
Goの本はレベル高いものが多いからそれに比べると普通に入門書レベル
820デフォルトの名無しさん
2025/01/04(土) 13:31:21.68ID:WESXQo65
【IT】初心者が最初に学ぶプログラミング言語 3位「Python」、2位「C言語」、1位は?
http://2chb.net/r/bizplus/1735924157/
821デフォルトの名無しさん
2025/01/04(土) 14:11:45.29ID:9AJmtK0P
Rust
822!id:ignore
2025/01/18(土) 15:45:57.85ID:psWyJuAY
ジジイは死んだんか?w
823デフォルトの名無しさん
2025/01/18(土) 17:34:58.21ID:GKVJYNVC
Javaはメソッド呼び出し時の引数が
プリミティブの場合、コピー渡し
オブジェクトの場合、参照渡し
合理的
824デフォルトの名無しさん
2025/01/18(土) 17:35:50.07ID:GKVJYNVC
GoにはもしかしてちゃんとしたHTMLパーサーがあるのでは
825デフォルトの名無しさん
2025/01/18(土) 22:02:52.51ID:ny4wzC1o
>>823
それは合理的ではないな
小さいオブジェクトでその値を書き換える目的でないならばコピー渡しが圧倒的に有利
826デフォルトの名無しさん
2025/01/18(土) 23:07:47.87ID:hsUpJ/OC
そもそも前提が間違ってる
Javaには値渡ししかない
これ何十年も前から何度も何度も初心者に言って聞かせるやつ
「プリミティブ型の値渡し」「参照型変数の値渡し」これしかない

void foo(std::string s) { // c++ 値渡し
s = "foo"; // 呼び出し元に影響なし
}
void bar(std::string &s) { // c++ 参照渡し
s = "bar"; // 呼び出し元に代入される
}
void foo(String s) { // Java 値渡し
s = "foo"; // 呼び出し元に影響なし
}

このことってそんなに難しい?
なんで初心者はいつもここ間違うの?
827デフォルトの名無しさん
2025/01/19(日) 07:54:07.72ID:ThZcQehm
Javaは参照型について
参照値自体の値渡ししか出来ないの?
参照値が指してる先の値の値渡しが出来ないってこと?
効率悪いね
828デフォルトの名無しさん
2025/01/19(日) 09:11:16.49ID:aE0XKMyP
んなことはない
参照値自体の値渡し : 参照値をコピー→必要に応じて渡した先でデリファレンス
参照値が指してる先の実体の値渡し : デリファレンス→実体の値をコピー
ここで、一般に参照値のコピーは単なる64ビットの数値のコピーであるのに対して、実体の値は複合データであるため単なる参照値よりコピーのコストが大きい
従って、殆どのケースでは後者の方が非効率である
829デフォルトの名無しさん
2025/01/19(日) 09:57:03.41ID:ThZcQehm
>>828
間違っている
関数への参照(アドレス)渡しはその先で実際の値があるメモリを読み込んでようやく値を得るから遅くなる
呼び出し元関数でも実値を何らか処理していることが多いので既にレジスタ上にあることが多い
したがって参照アドレス渡しではなく値をレジスタ渡しで関数を呼び出すのが速い
830デフォルトの名無しさん
2025/01/19(日) 16:14:51.30ID:sBZWn6/U
もし一般的にその説が成り立つなら大きな構造体のコピーを避けることを目的とした参照渡しをする必要はないことになるが、そう主張したいのか?
831デフォルトの名無しさん
2025/01/19(日) 16:41:50.96ID:ThZcQehm
>>830
常に参照を渡すばかりではなく適材適所で使い分けられることが重要という話だぞ
自分の関数でも処理をしているデータなら既にメモリから読み込んでレジスタ上にあるから遅くなるアドレス渡しの必要がないという話
もちろん関数にレジスタ渡しできるサイズは限りがありABIで定められている
例えば86系64bitでLinux等なら64bit✕6個まてはレジスタ渡しできる
832デフォルトの名無しさん
2025/01/19(日) 21:01:24.78ID:NFqklhON
オブジェクトはコピーに時間と空間が必要なので参照渡し
合理的すぎる
833デフォルトの名無しさん
2025/01/19(日) 21:24:12.64ID:ThZcQehm
>>832
例えば小さいオブジェクトは参照アドレス渡しよりも値コピー渡しが速い
例えば一番小さく整数一つだけをオブジェクトに包んで専用メソッドを付けて単なる整数型とは別の型を作ることはよく行われる
834デフォルトの名無しさん
2025/01/19(日) 22:26:45.76ID:NRA+hS8C
Goの場合は、
どうせコピーのコストが大きな問題になるようなオブジェクトはコレクションと文字列だけ
だからそいつらさえ常に参照(の値)渡しになるようにしときゃ構造体は基本的には値渡しで実用上問題ないだろう
という極めて雑というか実用主義的な判断のなされた仕様になっている
実際には参照渡しの方が効率的なケースも多いが、少々の効率を理由にポインタ渡しを選ぶことは好まれないのがGo流
835デフォルトの名無しさん
2025/01/21(火) 16:27:44.96ID:ZMbV0RT+
Javaは目からウロコが落ちる出来事だった
836デフォルトの名無しさん
2025/01/21(火) 16:29:19.66ID:ZMbV0RT+
ちょっと聞いてよ私はハゲ
20世紀からのC/C++使い
837デフォルトの名無しさん
2025/01/21(火) 20:51:56.00ID:5TvrHQ5p
お呼びじゃない
カエレ!
838デフォルトの名無しさん
2025/01/22(水) 16:05:32.40ID:31zP0ljX
だいたいGoって名前がダサすぎる
なんだよゴーってよ、ゴー!!ゴー!!ゴープログラミング!!ってかwwww昭和かよwwwwwwwwww
839デフォルトの名無しさん
2025/02/11(火) 23:43:29.84ID:Y9rsnGHI
アセンブラを知らないから
どういうコードに落ちるか
想像つかないんだろな
840デフォルトの名無しさん
2025/02/11(火) 23:45:13.36ID:Y9rsnGHI
昔はレジスタに値をセットして割り込みかけるのがシステム呼び出しだったから
どんな言語使ってようがアセンブラは必須だった
841デフォルトの名無しさん
2025/02/12(水) 10:56:43.50ID:WpGOIYcm
ブブー
間違いです
842デフォルトの名無しさん
2025/03/02(日) 23:09:02.68ID:XbVt9o5l
Javaで参照渡したいとき配列で渡してたわ
843デフォルトの名無しさん
2025/05/15(木) 21:27:28.17ID:3mZF5L/S
【海外記事紹介】Go言語から離れる開発者が増えている?その理由とは
https://techfeed.io/entries/68250b69c4e1671f6888ca33

Go は 2007 年に Rob Pike、Ken Thompson、Robert Griesemer が開発し、クラウド・インフラ向け言語(“C of the Cloud”)として脚光を浴びた。しかし 2022 年頃から、早期採用者の間で「プロトタイピング専用言語」「入門用言語」として位置づけ直す声が増え始めた。背景にはエコシステムの限界や AI ワークフローとの相性の悪さがある。

Go から離脱する開発者が挙げる代表的な不満点は次のとおりだ。

エラー処理が冗長で、同じ if err != nil パターンが散在する。
goroutine は強力だが、競合状態や静かな失敗を招きやすく、テストが難しい。
“No frameworks” 文化により、共通機能を一から実装する負担が大きい。
Go エンジニアの母数が少なく、採用・オンボーディングコストが高い。
生成 AI が慣用的な Go コードを出力しづらく、Python などに比べ生産性が劣る。

一方で、パフォーマンスとシンプルさを兼ね備えた Zig、豊富なツールチェーンを持つ Kotlin、安全性と速度で評価される Rust などの新たな言語は、Go言語への不満を解消する選択肢として、開発者たちの関心を集めているという。
844デフォルトの名無しさん
2025/05/16(金) 10:08:38.99ID:0+k5rvu6
pythonよりAIの相性が悪い??動的言語なのにいいわけねーだろ笑

zigとRustとか流石にバカすぎるw 低レイヤ用の言語でIT土方は関わらない言語なのにw
そして書いてある欠点がないC#は無視されてて草
845デフォルトの名無しさん
2025/05/16(金) 12:17:23.65ID:lEpbiicE
C#はLinuxと相性悪そうだからね。候補に挙げられない
846デフォルトの名無しさん
2025/05/16(金) 12:30:40.01ID:0+k5rvu6
>>845
今はもう完全にクロスプラットフォームだけど?無知乙

IDEもRiderが使えるしVSCodeでもいい
847デフォルトの名無しさん
2025/05/16(金) 12:32:36.26ID:lEpbiicE
>>846
そんな事ある?
MS関係者はもっとLinux事例のアピールしなきゃ
848デフォルトの名無しさん
2025/05/16(金) 12:34:31.04ID:lEpbiicE
IDEはjetbrains製のか。VSがLinux来ないと
849デフォルトの名無しさん
2025/05/16(金) 12:55:52.74ID:0+k5rvu6
無知乙
2014から.NET Coreが出て完全にクロスプラットフォームだわ

Github ActionsとかC#で描かれてるし、stackoverflowもそう

開発PCはWindowsでサーバはLinuxを使えばいいだけ
Linux環境欲しいならWSL2を使えばいい
Macみたいなバカみたいな高いPC買う必要ないし会社でもメリットが多い

>>848
Goも同じだけど何言ってんだ?IDEはGolandしかないよね、LSPでVSCodeやneovimが使えるのはC#もGoも共通なんだが?
850デフォルトの名無しさん
2025/05/16(金) 13:17:59.65ID:ZrzvRQZn
IDEがないとビルドできないマンが量産されてるのか
Javaの二の舞
851デフォルトの名無しさん
2025/05/16(金) 22:37:19.26ID:QkGxg+AB
Goはルーン文字と同じ運命をたどりそうだな
紙が普及した時代に原始的な彫刻文字は流行らない
時代に合わせて形を変えないと
852デフォルトの名無しさん
2025/05/17(土) 11:22:02.13ID:3jmwF1/p
GC付きCとしては残るんじゃね?
言語の衰退期に入ったのは事実だろうが、それならJavaやPHPも同じ
個人的には死んで欲しいのはRust、理由は信者がウザイから

○○付きC、が乱立気味なのは、Cがやる気無さすぎなのと、C++が暴走してるから
ゆうて今後コア数はてんこ盛りになるようだし、goroutineが速ければワンチャンあるが…
https://qiita.com/kawasin73/items/3d2aa21f0b4bf05de1c6
853デフォルトの名無しさん
2025/05/17(土) 12:23:41.13ID:psW4ob0W
>>844
Rustが低レイヤ用の言語ではなくて低レイヤもC同様扱える言語だね
Rustを使ってる人たちのアンケート調査で最大利用分野はWebだと判明しているよ

>>852
C/C++を置き換えられるのはRustだけで既に進んでいるからかなり長生きするだろうね
854デフォルトの名無しさん
2025/05/17(土) 12:39:18.59ID:3jmwF1/p
>>853
> 既に進んでいる
と思ってるのは信者だけ。まだ実際は「入った」事がニュースになる程度
まあ昨日話題になってたがマスゴミ的に「モームリが大盛況!!!」と同レベル
そして必ず信者が沸くのが本当にウザイ
855デフォルトの名無しさん
2025/05/17(土) 12:49:46.67ID:psW4ob0W
>>854
その書き込みさえもRust製のPingoraを通過して5chに書き込まれているよ
世界のネットインフラのRust化の恩恵だね
856デフォルトの名無しさん
2025/05/17(土) 13:06:04.46ID:3jmwF1/p
はいはいすごいね
だけどそんな事を言ったら、C無しで出来る事って何もないのでは?
JavaやC#も同レベルだし
マジでRust信者は死んで欲しいし、殺す為に新言語を開発したいと思うよ
857デフォルトの名無しさん
2025/05/17(土) 13:12:54.63ID:nvkQ7OLi
Rustスレでやってください…
858デフォルトの名無しさん
2025/05/17(土) 13:33:19.14ID:oMoLZOju
C言語の役目を完全に置き換えることができるRustの出現はデカいよな
Goはシンプルな芸術的な反面で色々と中途半端な機能と立ち位置になってしまった気がする

>>856
Rustを置き換えることができる新言語の開発すばらしい!
C→Rustで43年間かかったらしいけど
今はまだ芽も発見されてないから早くて20年後かなあ
859デフォルトの名無しさん
2025/05/17(土) 13:41:42.69ID:mtkee3TG
>>856
また信者が生まれるよ。君の信者だよかったね
860デフォルトの名無しさん
2025/05/17(土) 13:46:37.14ID:3jmwF1/p
>>857
全くその通りだ
勝手にエコーチェンバーでホルホルしてればいいのに、出張ってくるからウザイ
まあ一応、俺の勝手な感想を>>843について述べておくと、

> エラー処理が冗長で、同じ if err != nil パターンが散在する。
Try-catchもろくでもない
現在のプログラミング言語はまだエラー処理に最適な記述方法を発見出来てないだけ

> goroutine は強力だが、競合状態や静かな失敗を招きやすく、テストが難しい。
静かな失敗がデッドロック等を意味するなら、そりゃそうだが、
ハードウェアの近未来(数年後)がEコアマシマシ方向なので、コンセプトとしては合ってた
ただ、そもそもメニーコアはおそらく現在のフルスペックなCPUの多数盛り(16-64コア)ではなく、
小型限定機能CPUの『超』多数盛り(1024+コア)が正解だと思うので、
ハードウェアもGo言語自体も中途半端な状況で、中期的(10年後)にも厳しい

> “No frameworks” 文化により、共通機能を一から実装する負担が大きい。
Framework on framework が乱立してる他言語に対してのアンチテーゼとしては意味があったし、
実際、dllはCで世界が構築されてるとき、つまりLinux等では有効だが、それ以外では依存性の問題が面倒なのは事実
しかし現実的には、frameworkをいくら嫌ったところで、同様のコードはどうせ記述する事になるのも事実
同じような事を何度もやる=大企業内の職業プログラマにとってはframework学習の方がマシと見えるのもそうだろう
乱立してたframeworkも、各言語毎にほぼ統一気味だし

> Go エンジニアの母数が少なく、採用・オンボーディングコストが高い。
状況知らんのでなんとも

> 生成 AI が慣用的な Go コードを出力しづらく、Python などに比べ生産性が劣る。
Pythonは人数が多いだけ
そもそも自動生成コードで出力しづらいとかは言語に依らず、やってる人数だけの話
861デフォルトの名無しさん
2025/05/17(土) 14:11:35.74ID:3jmwF1/p
>>859
実際、その方向で殺す事になると思うよ(俺の言語ではなくね)
今の『日本の』Rust信者って、Cを勉強しない言い訳としてRustをやってて、非Rust使いを排除して、俺ツエーホルホルしてるだけでしょ
『アメリカの』Rust使いは、「(Cを殺そうと思ってRustを出したのに)RustのおかげでCを勉強する奴が(以前よりも、またRustよりも)増えてしまったじゃねえかよ!!!」とか言ってて、
なるほど連中は正しく学習しているのだな、とは感じるが
なんつーかここら辺、アメリカがソフトウェアで圧倒的に強いのは、センスの違いを感じるよ
(まあアメリカのRust信者もウザイのは同じらしいが)

多分数年後、「Rustを超えた!!!」という言語が現れ、俺ツエーしたいだけの馬鹿Rust信者はそっちに移る
その辺でRust死んでくれねーかなと思ってる
(そしてこの意味では、俺ツエーしたいだけの馬鹿がたむろする言語は必ず存在してて、それがC++→Rustになってるのが今、というだけでもある)


>>858
> 今はまだ芽も発見されてないから早くて20年後かなあ
そう思ってるのはお前だけ
単純に、Cの駄目な点をチマチマ直せばいいだけの話

だから俺の場合は「新言語」ではなく「ハイパーCプリプロセッサ」になる
例えばif err != nil パターンが嫌で、try-catchで書きたければ、try-catchをif errパターンに変換する物があればいい、というだけ
Cがウザイのは記述レベルが低すぎるからであって、JSレベルでリテラル記述出来ればだいぶ変わる
というかCの問題は言語仕様ではなく、主に書きにくい点だけだから
(Rust信者はメモリ管理が出来ないのだろうが、Cを『正しく』使っててメモリリークする馬鹿は居ない)
862デフォルトの名無しさん
2025/05/17(土) 14:24:44.58ID:GrCbm+C0
>>861
なぜCが捨てられRustへ置き換えられていってるか世界の流れの理由を把握した方がええよ
毎月どこかで言語の欠陥によるセキュリティホールが見つかる昨今
必ずミスを引き起こす人類に対して言語仕様で自動的に安全を保証する点が求められてる
その点Goは自己責任な面でちょっと向かい風なんだよね
863デフォルトの名無しさん
2025/05/17(土) 14:38:07.99ID:mtkee3TG
CとGoは同じ人が策定に関わってる時点で限界あるんだろうね。似てしまう
864デフォルトの名無しさん
2025/05/17(土) 14:40:21.44ID:3jmwF1/p
>>862
> 言語仕様で自動的に安全を保証する点
俺はそれを言語仕様で「手動」ではなく、コンパイラやプリプロセッサで「自動」化する方向
まあ俺はC派なので馬鹿は死ねではあるが、Rustが馬鹿対策出来てる点は評価してるよ

というかね、お前のコードは「駄目」だからreject、となるとだいたい軋轢が発生するわけで、
その最低限のラインを「コンパイルが通る」として、プルリクされたコードは原則全てacceptならRustは昨今のGitHub的開発では強い
でもこんな運用出来てる奴居ないでしょ
結局人間が判断してるのならどの言語でも大して変わらん

> 言語の欠陥によるセキュリティホール
って何ぞ?
もしかして境界チェックの話?ならJavaだとセキュリティホールは存在しない事になるけど、そういうレベルの馬鹿か?
865デフォルトの名無しさん
2025/05/17(土) 14:44:35.88ID:mtkee3TG
コードが駄目って言語化が足りない。やり直し、レビュアーは60過ぎの頑固爺だな
866デフォルトの名無しさん
2025/05/17(土) 14:45:52.25ID:3jmwF1/p
>>863
というか元からbetterCだろ
Cにそんなに不満がない人が作ったらそうなる
(というか多分、不満があったのはCではなくC++に対してなんだろ)

まあでも、C++ではないbetterCとしては、これもありかな、という仕様だとは思うよ
867デフォルトの名無しさん
2025/05/17(土) 14:47:41.15ID:GrCbm+C0
境界チェックだけでなくnil (やnullやundefinedなど)チェックのミスなど色々あるね
ヌルポが起こるJavaなどは論外だね
868デフォルトの名無しさん
2025/05/17(土) 14:57:24.25ID:3jmwF1/p
>>865
ゆとりか?
「駄目」ってのはこの文脈で一言で表現してるだけで、
実際の所は当事者間で何回も往復してて、もっともらしい理由は添えてると思うぞ

ただ、Cの場合に、駄目なコード(例:メモリリークを誘発するコード)を受け入れる事が出来ないのは事実なんだよ
そして、これを相手に説明しても、相手が理解する事はない
だってそもそも理解してないからそういうコードなんだし、逆に理解してたらそういう『駄目な』コードなんて書かないから
だからrejectはどうやってもけんか腰になるし、
この展開~結末を知ってたら最初からrejectとして何も言わない奴もでてきてもおかしくないし、実際に居るとも思うけど
(だからGitHub等では独裁/フォークであって、民主主義的多数決ではない)

こういうのを一々相手のせいにするのは、ゆとりやZの特徴ではあるが、
これも含めて昨今の情勢ではあるから、Rust的に文法にしてしまうのは一つの対策ではある
(ただしこれが機能するのは受け入れ基準=文法とするときであって、実際にこういう運用をしてる奴は居ないと思うので意味無いが)
869デフォルトの名無しさん
2025/05/17(土) 15:00:26.74ID:3jmwF1/p
>>867
俺はそういうのはリンターで対策出来ると思ってる
だからその場合はJava+強力なリンターで落とせばいいだけの話

わざわざ新言語にして書き換え、他言語使用者を排除し、
結果的に少数精鋭!!!と勝手に妄想して俺ツエーやりたいだけの馬鹿は死ね、だね
870デフォルトの名無しさん
2025/05/17(土) 15:09:10.86ID:QMwux1Yh
>>861
>> Cを『正しく』使っててメモリリークする馬鹿は居ない

メモリーリークによる穴の報告が常にあってなくならない理由をわかってないのか
複雑化するとどんなプログラマーもうっかりミスすることが判明している
静的分析でも一部しかミスを見つけられないことも判明している
そのため穴発生のレポートが絶えない

>>869
>> リンターで対策出来ると思ってる

静的分析では一部しかミスを見つけられないことが判明している
871デフォルトの名無しさん
2025/05/17(土) 15:17:32.48ID:mtkee3TG
>>868
説明しても揉めるようなメンバーしかいないのか。あんた可哀想だな
872デフォルトの名無しさん
2025/05/17(土) 17:43:17.73ID:3jmwF1/p
>>870
> 静的分析でも一部しかミスを見つけられないことも判明している
> 静的分析では一部しかミスを見つけられないことが判明している
そういう問題じゃねえ

Rustは静的解析で完璧!!!なんだろ
なら、静的解析で出来るのは事実だろ
この矛盾にすら気づけないから馬鹿信者なんだよ

Javaで問題になるのはnullを代入してるからであって、
これはnull許容型と禁止型を明示的に分離してないからであって、やりゃいいだけの話だろ
要は、Rustと同じ手法で安全にする事は他言語でもやれば出来る
どこまで文法化し、どこからはプログラマに任せるかを各言語が決めてるだけ

Javaが中途半端だ!というのはごもっともだが、
それはセキュリティ要求とプログラマの想定知能レベルがJavaの頃と現在で変わったから
当然後発のRustの方が今に合ってるし、
Java7で10年弱全く変化しなかったから「死んだ」と開発元に言われてたし、実際そんな感じではある
とはいえ、RustよりJavaの方が殺しても死なないのも事実
Java8以降は半年毎に上げる事にしたようだし、既に後発言語になってるので、
必要なら上記の通り他言語を参考に新文法を導入していけばいいだけ
(この意味ではJavaもRustを殺せると思うけど)

信者は「Rustが!!!」と思ってるが、
正しくは「手法が」であって、当たり前だが他言語でも同じ手法で同じ事は出来る
だからRustは「現代的新文法詰め合わせ実験言語」であって、まあ頑張れといったところ
(ただ、言語としての筋が悪いので、どうせ駄目だと俺は見てるが)
873デフォルトの名無しさん
2025/05/17(土) 17:43:43.79ID:3jmwF1/p
> 複雑化するとどんなプログラマーもうっかりミスすることが判明している
これが間違ってるというか、考え方が根本的に違うと最近は感じてる
「無重力でも書けるボールペン」指向のbetterCがC++で、
「一方ロシアは鉛筆を使った」指向のbetterCがGoなんだよ
そしてRustは前者、ところがCに似合うコードは多分後者なんだな

そしてうっかり、とかいう話でもない
つか、お前も「トイレで『うっかり』ケツを拭き忘れた」事なんて、何十年も無いだろ
習慣化+目に入る位置に紙がある、の合わせ技だが、でも見た目紙が無くても探すだろ
メモリリークしないのは、こういうレベルの話なんだよ
(だからRustが必要な奴=ケツを拭く習慣がない奴には全く通じないのも事実だし、
実際お前が理解出来るとも期待してないが)
874デフォルトの名無しさん
2025/05/17(土) 21:51:30.90ID:4wFqfo1S
Goも別にC/C++ほどにはプログラマを信用してないと思うけどな
GCはあるし、変数は必ず初期化されるし、ポインタへの算術演算も禁止してるし
そもそもCの置き換えを目指すような低レイヤーを扱う言語じゃないので
875デフォルトの名無しさん
2025/05/17(土) 22:21:05.70ID:1fcnbCGj
一応Java対抗よね。Oracleで混迷してるし、あってよかったと思うわ
876デフォルトの名無しさん
2025/05/17(土) 22:53:10.81ID:3jmwF1/p
>>874
CはCPUが遅かった時代だから余分な事を一切しないだけで、信用と言うよりは放任
なのでプログラマ間で信用出来ないコードをrejectする事が必要になる


> そもそもCの置き換えを目指すような低レイヤーを扱う言語じゃないので (>>874)
> 一応Java対抗よね。Oracleで混迷してるし、あってよかったと思うわ (>>875)
いや当初はシステムレベルも記述可能と謳ってたはず
実際、出来るとは思うし
(とはいえCの方がいいのでほぼ誰もしてないが、Dockerはシステムレベルとも言える気が)

Java対抗なんて初耳だが、最近は看板掛け替えたのか?
Javaとダダ被りなのはC#のはずだが
Java+ナマポ = Go になるのか?バイナリではあるが、最近なら問題にならないだろうし
ただJava案件をGoで書き換える、なんてのは聞いた事無いが
877デフォルトの名無しさん
2025/05/18(日) 00:19:36.18ID:/UZONODy
GoogleがC++とJava使ってるっぽいからそれの代替用途でしょ
Cの代替ではない、あくまでも高級言語
878デフォルトの名無しさん
2025/05/18(日) 00:24:42.72ID:GL3oFIgT
>>876
低レイヤーという意味でのBetter Cになるのは多分Zig (まだver.1未満だけど)
Goが使われるのはCLIやWebのバックエンドなので、CよりかはJavaやC#のレベルだと思う
GCがある以上、例えばLinuxカーネルのようなシステムプログラミングの領域を置き換えるのは正直無理

> Java+ナマポ = Go になるのか?
Goらしさとして必要なのはポインタでなくGoroutineだと思う
並行処理を比較的簡単に書けるのがバックエンドの要件に合ってるから流行った感じなので

> ただJava案件をGoで書き換える、なんてのは聞いた事無いが
現在Javaでやってる案件はそのままJavaを使うんじゃない?
置き換えはそもそもリスクが大きいので (規模が大きいと特に)
仮に置き換えるとしても、同じJVMで動くKotlinという選択肢もあるし
879デフォルトの名無しさん
2025/05/18(日) 00:43:52.11ID:rl3pNxwD
>>876
Goの開発当初Javaはなかったので、Google社内でもGC付きの言語を開発しはじめた。などという開発秘話を読んだことあるよ
880デフォルトの名無しさん
2025/05/18(日) 00:46:18.40ID:rl3pNxwD
たまたまGC付きでCより高級で安全だからJavaと守備範囲が被るというだけで、置き換え用で開発していたわけじゃない。
881デフォルトの名無しさん
2025/05/18(日) 02:04:06.55ID:/UZONODy
ネイティブスレッドを扱えずにグリーンスレッドモデルの時点でCの代替を想定してなさそうだけども
882デフォルトの名無しさん
2025/05/18(日) 11:14:11.80ID:CW87ZefP
>>877
GoでC++とJavaをリストラする、というのは技術的には面白いと思うが、
Android(Java)とchrome(C++)を抱えているgoogleには現実的に無理だな

>>879
それが本当なら、Java(1995)に対してGo(2009)は出てくるのが遅すぎる
> 後のインタビューで、3人の言語設計者すべてが、新しい言語を設計する主なモチベーションとしてC++が好きでないこと(英語版)を共有していたことを述べている (wiki)
なら、Javaと同時期に出せれば、C++嫌いな奴(=その時期にJavaを選んだ連中の大半)には受けただろうに
883デフォルトの名無しさん
2025/05/18(日) 11:15:06.82ID:CW87ZefP
>>878
Zigは全く知らないのでチラ見してみたが、かなりC/C++を意識してるな
流行ってRustが滅んでくれれば俺は万々歳だが

> CよりかはJavaやC#のレベルだと思う
そりゃCよりはな
ただ、フレームワーク前提ではなかった『当初の』Javaは、確かにGoとレベルは被るのかもな
フレームワークが肥大していったJava、フレームワーク前提だったC#と並べれば C << Go <= Java <= C#

Goヨイショ気味の記事を見つけた
元JavaエンジニアがGoに感じた「表現力の低さ」と「開発生産性」の話
https://inside.dmm.com/articles/ex-java-engineer-thoughts-about-go/
> Optionalにはmapやfilter、orElseなどといった、Optionalのままで値を操作できるメソッド群が用意されており、 これらを駆使することで、
> nullチェックをせずともnull-safeに処理を書くことができるようになっています。
出発点はおそらく「既存コードを変更無しでnull-safeにする」だったんだろうが、
多分このコンセプトが暴走気味で、余分な知識が必要で生産性を下げている、という例。これがC++/Java/Rustの方向
一方Cは、「null-safeが欲しいのなら毎回nullチェックしろ」であって、これはGoも同じ
言語としての基本的方向が違うから、RustはC++は殺せても、Cは殺せない
GoならCは殺せる可能性があるが、殺す気はないらしい
というより、多分Goは、そんなにCが嫌いではなく、C++が嫌いな人のための言語
(だからGo使いに対してはもっと低レイヤが欲しければC使えで平和に終わる
Rust使いにとってはCの思想は許容できないので喚き散らすことになる)
884デフォルトの名無しさん
2025/05/18(日) 11:15:45.42ID:CW87ZefP
Java案件は今後共Javaなのは俺も思う
C#のMSベンダロックを嫌ってるらしいが、Oracleロックはいいのか?とも思うが、
発注元が公務員、及び公務員じみた、「僕は悪くないもん!」が確保できればいい連中だけなので、今後共変わらない

だとすると、Goは基本的に置き換えなし、『新規』Web/バックエンド案件しかないが、これも一周気味だし、てなところか
と考えてたら、Rustがウザいのは『既存』案件の置き換えを迫ってくるから『押し売り/ゴリ押し感アリアリ』なところかとも
「間に合ってます」で終わるのに、
トイレでケツをしょっちゅう拭き忘れるガイジ/自分が何故数十年もケツを拭き忘れたことがないのかに思い至らないガイジ、しか居ないので話が通じない
この点、
> プロトタイピング専用言語 (843)
は悪く言われてる感があるが、良く言えば「プロトタイピング=サラッと書いてサクッと動かすときに生産性が高い」のは利点でもある
(というよりRustはプロトタイピング時に生産性が皆無だから「新規」案件が出来ず、
結果的に「既存置き換え」の清書用言語としてガイジが勧めてくるが、「間に合ってる」連中にとっては糞ウザい)
885デフォルトの名無しさん
2025/05/18(日) 11:16:39.56ID:CW87ZefP
> 並行処理
wikiも見たがGo界隈では『平』行ではなく『並』行なのか?
まあ俺は一般の平行(coherency:違う処理を同時に行う)と並列(parallelism:同じ処理を同時に行う)を使うことにするが

> Goroutine
JSは、「同期/マルチスレッド」な他言語に対して、「非同期/シングルスレッド」という異端めいた選択が大当たりしたから蔓延ることになった
逆にGoがいまいち蔓延れないのは、Goの売りであるGoroutineがハズレたからだ

各プログラミング言語は、プログラマに何を「明示的に書くか」を要求する
JSは「I/Oを分離」することを要求し、報酬として「シングルスレッド化によりマルチスレッド時の諸問題が消滅する」ことを提示した
「お前のプログラムはすべてI/Oが律速しており、実はCPUなんて一つで足りる」とするJSに対して、
「そんなことはない!!!CPUが一つでは絶対に足りない!!!」と考えた他言語だが、結果はasyncの圧勝で終わった

Goroutineは、プログラマに「データフローの依存関係を明示的に書く」ことを要求する
つまり、平行/並列出来るものはすべてGoroutineとして分離し、大量のスレッドプールでこれを処理すれば、
処理性能は自動的に最大に貼り付き、スケールアウトも自在、というわけだ
このコンセプトはありだろう
886デフォルトの名無しさん
2025/05/18(日) 11:17:23.81ID:CW87ZefP
ただし現在は、これを処理するハードウェアがない。また、今後とも多分ない
超並列は現状CUDAの圧勝だし、こちらはそもそもハードウェアが起点なので、最初から専用ハードありきで言語も設計されてる
CUDAが出来ない超平行は、本来Goroutineが活躍する分野だが、
言語として本来要求すべきは「最小粒度でGoroutineに分離」で、
それを各処理系にマッチした粒度に『コンパイラが自動で』変更/割当すべきなのに、852内URL読む限りこれが出来てない
プログラマに粒度を調整させてるようでは、「資産」としてのソースコードは劣化する(全ハードウェアで同じソースコードを使えない)のだが、
GoはC側の「それが必要ならそう書け」であって、
C++/Java/Rust側の「コンパイラが自動的に行い、ソースコードからは隠蔽する」ではないのでこれが出来ない
(つまり、根本の思想として矛盾してる)

そして、仮に最小粒度でGoroutine書けたとしても、これを実行する最適なハードウェアは
「I/OはシンプルなFIFOとローカルキャッシュのみ(=グローバルメモリアクセスは出来ない、キャッシュのコヒーレンシは必要ない)、
最小命令セットのCPU」を「出来るだけ沢山」なのだが、
こんなハードウェアを作る予定があるところはない
(Intelはメニーコアをずっとやりたがってるが、フルスペックのx86なんてGoroutineでの超平行には必要ない)

冷静に考えれば、最小粒度の超平行=ハードウェアであって、
Goroutineで攻め込むべきはVerilog/VHDLの分野なのだが、これをやろうともしてない
(というか、現状、ハードウェアエンジニアとソフトウェアエンジニアは明確に分離されており、やる必要自体がない
IntelがAlteraを買収し、今後はCPUにFPGAが載るのか?と思われたが、結局Xeonの一部に載っただけで頓挫した
まあその製品はネットワーク系ではすごく使えたらしいが)

だから、今後共Goroutineで頭抜けることはない、というより今の所「兆し」がどこにもない
結果、GoはGoroutineが本来提供すべきだった報酬、
「Goroutineに分離すれば自動的に性能は最大になり、スケールアウトも容易」が提示できてないから(圧倒的には)支持されない
一方、async(というコンセプト)でブチ抜いたJSは蔓延った、というだけ
(勿論GoroutineがGoの特徴ではあるが、他言語者がそれを使う理由がない)
887デフォルトの名無しさん
2025/05/18(日) 12:49:49.95ID:/UZONODy
Javascriptでフロントエンドプログラム初心者が簡単に使えるから流行っただけ
async/awaitの発祥はC# (F#)だけどGoと同じくマルチスレッド非同期だわ、async awaitがシングルスレッドと勘違いしているようだが元々JSがその仕様だったのをそれにあわせて実装しただけ

JSはC#のasync/awaitをパクった劣化版に過ぎない、標準ライブラリはコールバックでawait使えなかったりキャンセル処理もサポートしてないゴミ
888デフォルトの名無しさん
2025/05/18(日) 13:06:33.55ID:/UZONODy
シングルスレッドで十分w
じゃあなんでRedisに対してDragonflyやGarnetが出てきてるんだ?
889デフォルトの名無しさん
2025/05/18(日) 13:12:33.86ID:GL3oFIgT
歴史的に見れば
・PythonやJavaScriptはもともと1スレッドで動く言語だった
・C#においてMスレッドN並列を扱いやすくする仕組みとして async/await ができた
・それが Python や JavaScript にも輸入された 

だからな
JSが勝ったのは、それがブラウザで動く事実上ただ一つの言語だからであって、別にシングルスレッドでの並行処理が良いなんてことはない

処理系がよしなにスレッドを切り替える (async/awaitのように切り替えポイントを明示しない) という点でGoに近いのは Erlang や Elixir あたりかな
理想的にはasyncの方が効率的になり得ると思うけど、これは呼び出し側も含めて async にする必要があるという感染的な性質を持つ
(https://journal.stuffwithstuff.com/2015/02/01/what-color-is-your-function/ みたいに、これは「色付きの関数」みたいに言われる)

Goは「普通の関数をそのまま並行に動かせる」感じなので、その手軽さが好まれてると思う
CPUバウンドな計算には向かないけど、IO中心のタスクなら十分に良い性能にはなるので
890デフォルトの名無しさん
2025/05/18(日) 13:19:05.01ID:eaOArS/2
>>887
プログラミング初心者かよ
コールバックがあればPromise作って返せるからasync/awaitを使える
そういう基本的なことを知らずに批判しているのか?
仕組みを理解せずに表層的にasync/awaitを見てるからそうなる
891デフォルトの名無しさん
2025/05/18(日) 13:38:16.33ID:/UZONODy
>>890
だからいちいちコールバック形式の関数をプロミス化するのが面倒だって言ってるんだろ
キャンセル処理すら最近になるまで対応してなかったゴミ、今もまともに扱えない
.NETだったら全部xxxAsyncとxxxの2つが用意されててAsyncには必ずキャンセル用のCancellationTokenを渡せる
Goはcontextを全て渡せる
JSはabortcontrollerはほぼ対応してない、あまりにも終わってるゴミクズ

Node.jsやらDenoとかいうのは最悪の発明だわ、JSをブラウザ以外の環境で流行らした愚行、そんなゴミ言語とか使いたくないんでね
なんでブラウザ以外でjsだのtsだのゴミ言語ランタイム使わないといけねーのw
作者は死んだ方がいいわ
892デフォルトの名無しさん
2025/05/18(日) 13:44:45.47ID:/UZONODy
>>890
お前が言ってることはC#でTaskCompletionSourceやTaskFactory.FromAsyncで旧来の非同期処理をTask化してasync awaitで使えるから標準ライブラリは前の型式のままでいいって言ってるようなもん
.NETはちゃんと全ての非同期処理をTask化してるからそのままasync awaitが使えてスムーズ

Node.jsは一度コールバック形式を全てpromiseした後何を血迷ったかまだコールバック形式に戻してその後async/awaitを実装したっていう経緯があるめちゃくちゃランタイムなの知らないんだろうなお前は

結果的に標準ライブラリをそのままスムーズにasync awaitで使えないゴミ環境が出来上がったw
893デフォルトの名無しさん
2025/05/18(日) 14:00:53.82ID:eaOArS/2
>>891
Promise作るのにどこに面倒があるんだ?
プログラミングしたことがないエアプかよ
自作できないならお子様向けのpromisifyもあるだろ
894デフォルトの名無しさん
2025/05/18(日) 14:05:05.90ID:eaOArS/2
>>892
呆れた
表層的知識でPromiseの理解と実装をできないからそんな勘違いを犯すんだな
JavaScriptならasync/awaitはPromiseのシンタックスシュガーだ
Promiseを作って返したらそのままasync対応したことになるのが一番の基礎だぞ
895デフォルトの名無しさん
2025/05/18(日) 14:27:42.23ID:/UZONODy
>>893
async awaitで使うためにPromiseラップするのもpromify使うのもめんどくさーよ
その例でTaskCompletuonSourceとTaskFactory.FromAsyncを挙げた
ちゃんと読め文盲

仮に面倒じゃないならなぜfsにpromise版があったりhttpリクエストするだけのくせにnode-fetchやらgotやらaxiosやら使ってるんだ?

標準ライブラリでそのままasync awaitが使えないから使ってんだろ、これが完全にお前が間違ってることを証明してるだろ

>>894
だからC#のasync awaitを完全に理解してるから劣化版のJSだって理解してるよ、なんでその程度のこと理解してないと思った?

C#が発祥なんだからどのようにコンパイラがステートマシンに変換しTaskを利用し実装してるか深く理解してるよ
お前はJSがどう内部で変換して利用してるか理解してないんだろ?
promiseに変換する程度の浅い知識じゃなくて深く理解してないだろ
896デフォルトの名無しさん
2025/05/18(日) 14:39:10.49ID:/UZONODy
お前みたいに jsだのゴミ言語だけ触って async/await を分かった気になってる知ったかクソ野郎がマウント取るから マジで終わってる
node.js だとのdeno だのゴミは地球上に生まれるべきじゃなかった お前みたいなマウントクソ野郎が現れるからだ。何がGoより シングルスレッドモデルのJS async/await が優れてるだw
async/await が C# 発祥ってことも知らない。シングルスレッド前提だの荒唐無稽なデマを広げやがる
Node.jsがもともとイベントループでシングルスレッドモデルを採用してたから、それに合わせてasync/awaitをC#から逆輸入しシングルスレッドで実装したのが事実だわ無知野郎
ただ非同期処理に必須な統一されたキャンセル処理を実装しなかったから意味不明なことになってるけどなw 普通パクる時ってのはパクリ元よりいいものに改善するのが普通だけどNode.js はただの劣化版だからなw
897デフォルトの名無しさん
2025/05/18(日) 14:46:40.43ID:eaOArS/2
>>895
まだ理解できていないんだな?
JSのasync関数はその返値のPromiseを返す関数そのままのシンタックスシュガーだ
他の言語ではasync関数がその返値のPromise(やFuture)を返す関数そのままではなくコルーチンなどステートマシンを伴うこともあるがJSはそのままで完成という本質的な違いがある
898デフォルトの名無しさん
2025/05/18(日) 14:50:23.49ID:/UZONODy
例えばNode.jsの代表的なゴミ例として挙げられるのがスリープ処理な
C# だったら await Task.Delay(1000) で待てる、キャンセルしたかったらTask.Delay(1000, token)だ。実にシンプル
Go だったら グリーンスレッドだから time.Sleep(time.Second * 1) で よい

JS(笑) だと await new Promise(resolve => setTimeout(resolve, 1000)); だw
キャンセル処理を入れると ChatGPT実装でこうだw
await Promise.race([
new Promise(r => setTimeout(r, 1000)),
new Promise((_, rej) =>
ctrl.signal.aborted
? rej(new Error('canceled'))
: ctrl.signal.addEventListener('abort', () => rej(new Error('canceled')), { once: true })
)
]);


何が Promiseでラップするのは簡単だよw、じゃあなんでこれをsleep関数にしてる奴が大量にいるんだ?
この程度標準ライブラリで最初から用意しとけゴミ言語ランタイム
(最近にようやくpromise版が追加したようだが、今更無意味だ。遅すぎゴミ)
899デフォルトの名無しさん
2025/05/18(日) 14:56:03.43ID:eaOArS/2
>>896
おまえは別のやつの書き込みと勘違いしているな
書き込みを見返してみろ
俺はシングルスレッドにすぎないJavaScriptのasync/awaitが優れているとは一度も言ってないぞ
強いて言えば非同期タスクをスタックレスで実現しているRustのasync/awaitだろうな
Goroutineと同じN:Mモデルをスタックレスと両立させている
900デフォルトの名無しさん
2025/05/18(日) 14:57:26.44ID:GL3oFIgT
ここはasyncスレ?
901デフォルトの名無しさん
2025/05/18(日) 15:03:12.65ID:/UZONODy
>>897
JSでもasync await は generator を使ったステートマシンに変換されるよ
無知乙。ただPromiseに変換するだけじゃないからw
じゃあなんての呼び出しメソッドを async にしないといけないんだ?そんな簡単な変換じゃないからw

>>899
お前と同一人物だなんて仮定してないぞ、さっきからお前勝手に妄想しすぎ、ただJS信者という点ではお前と共通
お前みたいなのがいるからNode.jsは生まれるべきじゃなかった
902デフォルトの名無しさん
2025/05/18(日) 15:12:48.04ID:eaOArS/2
>>901
アホかよ
Promiseを返すだけの普通の関数がそのままasync関数の代わりに使えるんだぞ
その返したものをawait promise;とそのままawaitできる
シンタックスシュガーだからな
903デフォルトの名無しさん
2025/05/18(日) 15:31:42.85ID:/UZONODy
>>902
その awaitってやった関数は必ずasyncにする必要がありコンパイラはこれをgeneratorベースのステートマシンに変換するからw
C# だって Task をそのまま返す関数を そのまま await できるだろ?一体何が違うんだ?

ほんとお前みたいな無知って困るわ

そもそも俺が話していたのはJSで標準ライブラリをいちいち promise でラップするのは面倒だって話だよね?
それは sleepの例だったり fs/promises の存在だったり、httpクライアントで誰も標準ライブラリを使わない点の3つで完全論破したはずだけど

ちなみに俺はC#でgithub star 2000ぐらいのOSS作ってるけどお前はそれぐらいの実績はあるんか?プログラミングしたことないエアプだの煽ってきてるけど
904デフォルトの名無しさん
2025/05/18(日) 15:39:51.60ID:/UZONODy
何が違うの?そもそもお前が何を言いたいのかわからん

JS
```
async function main() {
console.log(await HelloAsync())
}

function HelloAsync() {
return Promise.resolve("hello");
}

main()
```

C#
```
public class HelloWorld
{
public static async Task Main(string[] args)
{
Console.WriteLine (await HelloAsync());
}

public static Task<string> HelloAsync()
{
return Task.FromResult("Hello");
}
}
```
905デフォルトの名無しさん
2025/05/18(日) 15:47:15.22ID:eaOArS/2
>>903
C#やRustなどの言語はステートマシンにする必要があるがJavaScriptはそのまま行けるところが最大の特徴
asyncもPromiseもないコールバックだけの時代からなぜコールバック待ちの間に無関係な他の関数が実行できるのかを理解できなかったのか?
その枠組があるから多数の非同期イベントが飛び交うブラウザ内でも並行処理ができる
知らないなら基礎だから勉強しろ
906デフォルトの名無しさん
2025/05/18(日) 15:55:47.79ID:/UZONODy
>>905

だから このJSの例だと main() 関数で await使うためにコンパイラが main関数を generatorベースの ステートマシンに変換してるからw
そのまま行けるってのが意味わからんのだけど説明できないだろお前w
別にこれはC#だろうだRustだろうが何も変わらないからw

C# も この例だとMain関数がステートマシンに変換されていて、HelloAsyncはTaskを返すだけで何もしてない
一体JSと何が違うんだ???説明できないだろasync/awaitをそもそも理解できていないみたいだから

> asyncもPromiseもないコールバックだけの時代からなぜコールバック待ちの間に無関係な他の関数が実行できるのかを理解できなかったのか?

何言ってるのかわからん、コールバックだのTaskだのPromiseだのそれはコードの書き方の違いであって最終的にepoll や IOCPで非同期で処理されていることは何も変わらない
無知はお前だ、お前が勉強しろ
OSSスターで2000ぐらい獲得してから勉強しろだのマウントとってこいゴミ
907デフォルトの名無しさん
2025/05/18(日) 16:10:19.90ID:eaOArS/2
>>906
なんだ少しは理解してるじゃないか
言語の中でepollなどでイベントループを抱え込んでいてそれがPromiseもasyncも無い大昔からJavaScriptは同じ
つまりasync/awaitなんか関係なく初めからイベントループを内蔵している
これはWebブラウザという無数に非同期タスクが飛び交う必要性からその仕様となった
そのためC#などより早く非同期タスクが実現されてきた
そのためC#などようなステートマシン変換なんか必要とせずに単なるシンタックスシュガーだけでasync/awaitも導入できている
908デフォルトの名無しさん
2025/05/18(日) 16:32:11.94ID:5+cNmsjt
WPFスレにもわいてるgithubでスターxxxx個君じゃん
909デフォルトの名無しさん
2025/05/18(日) 16:33:35.47ID:/UZONODy
JSはC# みたいにILから逆コンパイルできないから内部でどうなってるかは簡単にわからないけどJSだってステートマシン相当のものに変換してるからw
async/await をコンパイラレベルで Promise, Task に変換し実装されていること自体はC#もJSも何も変わらない
お前そもそもステートマシンの理解何もしてないだろ

これを見ろ無知野郎 これがC#のステートマシンの実装だ、単なるシンタックスシュガーにすぎないことがわかる
https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA+B6DACA8gOwBsBLfGbAYQGJsBRAE2IBdpsAzVt2GAWACgs2AOpRmMADR1GTbAEN89bACUArvmwBPCCqiUakeuQACABj14ipchQgBbAA7FCMKP35GATAEZ3Zo14BWAG53AGZsT2wACRhCQgghaEJ6fgBvMIivJAiADgjsgFlZUgAKfxMAbQBdOSgAcwBnAEo09y8ATmwyzpi4iABBBo18MBKmppC+AF83PiNw/2yjJAAecoA+aNj4weHRlr50uYB2fIA6ADEoOyUYBpVCJhKAIl7454n+GensIA=

> そのためC#などより早く非同期タスクが実現されてきた

また嘘ついてるよこいつ
そもそもJSの Promiseも 他言語からパクってるにすぎない
C# の Task は2010年実装 (.NET Framework 4.0) だ、JavaScriptはES2015 だから 2015 年だ
Node.js は コールバック地獄 に2015まで悩まされてたけど C# はそんな問題とっくに解決してたんだわ
だからpromiseもasync/awaitと同様C#のパクリといってもいいな

Promise/Task以外の非同期実装なら C# だって前からあるわ
ブラウザ側の言語だけ触ってるのが技術マウントとってくるのは滑稽だからやめたほうがいいよ

> つまりasync/awaitなんか関係なく初めからイベントループを内蔵している

C# はシングルスレッドのイベントループなどのゴミじゃなくてTaskはスレッドプールで実行されるからそのままマルチコア使えるんだわw
メインスレッドに戻す機能(SynchronizationContext, TaskScheduler) もあるからJSシングルスレッドにしたかったらそれもできてロックフリーにできるんだわ
(マルチスレッド使った方が良いので普通やらないが)
910デフォルトの名無しさん
2025/05/18(日) 16:42:27.02ID:eaOArS/2
>>909
おまえまだ別人と勘違いしてるのか
俺はシングルスレッドにすぎないJavaScriptの非同期が優れているとは一度も言ってないぞ
CPUコアスレッドを透過的に使いこなせるN:Mモデルが一番優れていると伝えただろ
911デフォルトの名無しさん
2025/05/18(日) 16:46:23.38ID:/UZONODy
>>910
まともに会話できないアスペ死ねよ
お前と同一視してないって言ってんだろ
JSを持ち上げる馬鹿としては同一だから言ってるだけ

話題そらしてないでこれの意味について論理的に説明してみろよ
> そのためC#などようなステートマシン変換なんか必要とせずに単なるシンタックスシュガーだけでasync/awaitも導入できている
上でC#コンパイラがどう async await を Taskベースのステートマシンに変換したかを教えたが
JSも別に何も変わらないから。結局お前が何が言いたいのかを説明しろ無知のくせにマウントとってくる無能
912デフォルトの名無しさん
2025/05/18(日) 16:54:47.55ID:eaOArS/2
>>911
何度も説明しているのに理解できないのは呆れる
async/awaitなんか導入する前からJavaScriptはPromiseで非同期に動いている
シンタックスシュガーにすぎないasync/await記法の導入によってステートマシンの導入なんか必要ない
913デフォルトの名無しさん
2025/05/18(日) 17:36:48.91ID:/UZONODy
>>912
C# は Taskベースのスレッドプール実装が先にあり、その後async/awaitが導入され、コンパイラがTaskベースのステートマシンに変換する
JS は callback, Promiseベースのイベントループ実装が先にあり、その後async/awaitが導入され、(JIT)コンパイラがPromiseベースのステートマシンに変換する

この2つの一体何が違うのか説明しろ

ChatGPTの回答

質問: JavaScript の async/await は内部でPromiseを使ったステートマシンに変換されますか?

回答

```
はい。JavaScript の async/await は構文糖衣であり、内部的には Promise を使ったステートマシンに変換されます。

AsyncFunction は常に Promise を返す
ECMAScript2017 の仕様では、async function を呼び出すと新しい Promise が即座に返されます。本体は zero 個以上の await 式で分割され、各 await ごとに実行を一時停止・再開する必要があるため、概念的にはステートマシンとして動作します

モダン JavaScript エンジンでの最適化
V8(Chrome)、SpiderMonkey(Firefox)、JavaScriptCore(Safari)などのエンジンでも同様のステートマシン原理を内部に持ちつつ、ネイティブの AsyncFunction オブジェクトとして最適化して実装しています
en.wikipedia.org

```


そしてお前は最初の話題であった標準ライブラリでasync/awaitがそのまま使えない問題について何も反論できてない
以下の3つについて反論しろ
- なぜ promiseラップのsleep関数を実装するユーザが多いのか
- なぜ標準ライブラリのhttpクライアントではなく axios等を使うのか
- なぜ fs/promises は導入されたのか
914デフォルトの名無しさん
2025/05/18(日) 17:40:07.52ID:/UZONODy
理解してないなどと煽ってきたのはお前が先

Claude

```
質問: JavaScript の async/await は内部でPromiseを使ったステートマシンに変換されますか?

はい、JavaScript の async/await は内部でPromiseを使ったステートマシンに変換されます。
async/await は構文的な糖衣(シンタックスシュガー)であり、基本的にはPromiseベースのコードを書きやすくするための機能です。JavaScriptエンジンがコードを実行する際、async関数は内部的に以下のような変換が行われます:

async関数は常にPromiseを返すように変換されます
await式は、Promiseの解決を待つためのステートマシンの一部となります
関数内の各await式の前後でコードが分割され、Promiseのチェーンとして再構築されます

```
915デフォルトの名無しさん
2025/05/18(日) 17:50:18.44ID:/UZONODy
>> 893デフォルトの名無しさんsage2025/05/18(日) 14:00:53.82ID:eaOArS/2(2/10) 返信 (1)
>> Promise作るのにどこに面倒があるんだ?
>> プログラミングしたことがないエアプかよ
>> 自作できないならお子様向けのpromisifyもあるだろ

標準ライブラリをasync/awaitで扱うためにpromise作るのが面倒じゃないなら
なんで setTimeoutをPromiseでラップしたsleep関数を多くの人が作っているの?
なんで 標準ライブラリのhttpクライアントじゃなくて axios 等を使うの?
なんで fs/promises など一部はpromiseベースのAPIが導入されてるの?

そして何でNode.jsは他の言語では当たり前に可能な非同期のキャンセル処理をまともにサポートしてないの?

ステートマシンとか async/awaitの内部実装はどうでもいいからこれについて反論してみろ、無知のくせにマウントとってくる無能屑
916デフォルトの名無しさん
2025/05/18(日) 23:04:23.34ID:vhS9Z2b5
たまたま開いたスレでC#の話題がと思ったら…
Goの話しろよ
917デフォルトの名無しさん
2025/05/18(日) 23:23:54.26ID:vhS9Z2b5
Promiseが不便ならawait/async用に専用Taskの仕様を作ってクリティカルな部分だけ徐々に移行していけばいいじゃないと
傍観者は思うのであった
918デフォルトの名無しさん
2025/05/18(日) 23:50:58.93ID:eaOArS/2
>>915
帰ってきたがまだ理解できてないのか
Promiseは何か秘密な仕組みや秘密なシステムや秘密なランタイムがあるわけではなく単なるデータだ
Promiseを介することでステートマシンなんか使うことなくasync関数を通常関数に自動変換できる
例えばこんなasync関数がある時

async function delay(n) {
 await new Promise((resolve, reject) => setTimeout(resolve, n * 1000));
 return n;
}

async function foo() {
 console.log("hello");
 let a = await delay(1);
 let b = await delay(2);
 let c = a + b;
 console.log(`${a} + ${b} = ${c}`);
 return c;
}
919デフォルトの名無しさん
2025/05/18(日) 23:54:17.15ID:eaOArS/2
>>918のasync関数fooは以下のように機械的に通常関数fooへと自動変換できる
ステートマシンを使う必要はない

function foo() {
 return new Promise((resolve, reject) => {
  console.log("hello");
  delay(1).then((_x1) => {
   let a = _x1;
   delay(2).then((_x2) => {
    let b = _x2;
    let c = a + b;
    console.log(`${a} + ${b} = ${c}`);
    resolve(c);
   });
  });
 });
}
920デフォルトの名無しさん
2025/05/19(月) 00:01:41.90ID:M5liwQEO
Goの話しろよ…

横から少し突っ込むと、 >>915 が言ってるのは>>912にある「シンタックスシュガー」について、その糖衣構文が実際には何を行っているのかが分かっているか?ということ
C#でもRustでも、ユーザー側のコードにはステートマシンは出てこないけど、async関数はステートマシンに変換されてる (だから await の前にある変数をそのまま参照できる)
これはJSでも同じ

>>918 についていえば言語の仕様の違いなので仕方ない
JSではsleepみたいにブロックする関数 (CPUを使うような仕事ではないのに待たされる関数) はどうしようも無い
C#だとそれを逃がす方法 (Task.Run) もあるけど、これはスレッドプールと関係するから、シングルスレッドのJSだと使えない

いずれにせよGoと関係なさすぎ
921デフォルトの名無しさん
2025/05/19(月) 00:18:33.88ID:m1yBrNr9
>>920
C#やRustは、await時に一時的にスケジューラに戻すために、ステートマシンのコルーチンに変換しますね。
しかし、JavaScriptはそのコルーチン化が不要なため、ステートマシンへの変換が不要ではないでしょうか?
実際にステートマシンを使わずに変換している>>919を使ってみたら、元のasync関数と全く同様に動作しました。
922デフォルトの名無しさん
2025/05/19(月) 00:20:32.66ID:/1mCvxff
長くて全部は読んでないがブロッキング処理を含んでるものを単純にPromisifyしたところでなんちゃって非同期になるだけだからちゃんとしたasync対応版が必要って話じゃねーの?

本当にPromiseでくくるだけでasync対応できると思ってるの?
923デフォルトの名無しさん
2025/05/19(月) 00:30:47.00ID:M5liwQEO
結果としては同じだよ
C#だって Task.ContinueWith (x => ...) と繋げて書くのと、async/awaitで書くのとで、タスクの実行結果として得られるものは変わらない

C#の場合は中間言語 (IL) へのコンパイルを挟むから、ステートマシンへの変換というのが可視化されやすい
JSだとこれは「JSのエンジン (V8) の中でどのように動作するか」という話で、これは普通は気にしない
だからJS界隈ではステートマシンという表現は使わず、「コードを直列化できる」といった機能面からの説明が多いのだと思う

予防線を張るけど、自分はJS詳しくないから間違いだったらすまない
924デフォルトの名無しさん
2025/05/19(月) 00:31:26.37ID:m1yBrNr9
>>922
JavaScriptの場合はそうですよ
Promiseでくくれば本物の非同期で簡単に並行処理できます
C#のTask.Runも不要です
async関数の登場以前からasyncと同じ動作で動いていますよ
async関数は>>919のような感じのsyntax sugarなんです
925デフォルトの名無しさん
2025/05/19(月) 00:50:33.56ID:dbv2av4u
>>913
ChatGPTの回答が説明してるが例で書いてるPromise化されたコードも概念的にはステートマシンだよ
awaitの地点を基準に変換してるってのはどの言語も同じ
実際Node.jsはJSコードにトランスパイルしてるんじゃなくて内部表現で変換してるはずだが

ステートマシンだの内部実装はどうでもいい話で、それで他人に分かってないだの知識マウント取りに行ってるのがよくわからん
926デフォルトの名無しさん
2025/05/19(月) 00:57:23.60ID:+bXsb1rs
>>920
それはたぶん君が誤解してるよ
>>918のコードが3(=1+2)秒かかるのはC#でいうところのTask.Runしてないからだと思い込んでしまったのかな
JSはもっと賢くて自動的にTask.Runされる点が言語の最大の特徴だよ
だからそのコード例のように直接awaitせずに
let a_promise = delay(1);
let b_promise = delay(2);
let a = await a_promise;
let b = await b_promise;
このように分けるだけで並行動作してしまう
実行速度は3(=1+2)秒から2(=max(1,2))秒となるよ
これが他の言語とは異なる点で長所
Webブラウザの中で色んなイベントが自然に並行動作できるためだよ
927デフォルトの名無しさん
2025/05/19(月) 01:34:27.35ID:T/ZTGVq5
>>924
async/awaitがPromiseのsyntax sugarという話と
同期関数をPromiseでくくれば本当の非同期にできるかどうかは別の話
919の例は内部でsetTimeoutというノンブロッキングな処理しかしてないから問題ないだけ
928デフォルトの名無しさん
2025/05/19(月) 01:38:06.32ID:T/ZTGVq5
>>926
Task.Runについても他の言語についても勘違いしてるぞ
めちゃくちゃ基本的なんことなのでChatGPT等でもう少し勉強してからまだおいで
929デフォルトの名無しさん
2025/05/19(月) 01:41:44.47ID:CwlN/9w+
チャンネルの概念が普及しなくて悲しい
930デフォルトの名無しさん
2025/05/19(月) 02:23:58.81ID:WZn5jbbp
>>927
もしかしてJavaScriptを使ったことない人かな?
JavaScriptは昔からすべてノンブロッキングで一部の機能に「ブロッキングモードも」付いているだけだよ
シングルスレッドなのにブロッキングしたらブラウザが止まっちゃうでしょ
それからPromiseを使うと非同期になるのではなくてPromiseが導入される前の時代の最初から非同期なの
ブラウザではすべての機能が非同期に並行して動かないと困るでしょ
931デフォルトの名無しさん
2025/05/19(月) 03:23:55.32ID:CwlN/9w+
プロミス以前はコールバックやで~
932デフォルトの名無しさん
2025/05/19(月) 03:52:20.75ID:WZn5jbbp
>>931
そうだよ
その初期のJSの時点で非同期に並行に動いてる
そしてコールバックがあれば必ずPromiseを作ることができるという基本原理をわかってるかな?
933デフォルトの名無しさん
2025/05/19(月) 04:13:08.42ID:SYizIHd9
setTimeoutみたいな勝手に非同期になるのがある言語は気持ち悪い
明確に分けようという流れがあった
node.jsはシングルスレッドとマルチスレッドが分かれているのが良い
シングルならグローバル変数で渡せる
マルチにしたいならWorker Threadsを使う
Goroutineはマルチスレッド前提だから普通はグローバル変数で渡さない
934デフォルトの名無しさん
2025/05/19(月) 04:18:06.87ID:CwlN/9w+
どうでもいい。誰に言ってるんだね
935デフォルトの名無しさん
2025/05/19(月) 04:20:05.27ID:CwlN/9w+
settimeoutでプロミス使ってとchatGPTに頼もう
936デフォルトの名無しさん
2025/05/19(月) 04:32:36.09ID:dxTyNwiY
>>933
勝手に非同期ではなく
setTimeoutだけではなく
昔からJavaScriptではブロックして待たせるのではなく非同期前提
そうでなければブラウザがマウスクリックにすら反応できなくなってしまう

例えばXMLHttpRequestでサーバからデータを少しずつ受け取りつつ
並行して画面を書き換えつつ
並行してUI入力があれば反応しつつ
すべてを非同期にシングルスレッドで行なうことさえも20年前に広まった
いわゆるAjaxだね
何もかもが非同期に並行に動く仕様だからこそ実現できた
937デフォルトの名無しさん
2025/05/19(月) 09:24:27.09ID:8khPYfEx
間違い訂正 >>885
✕ 平行(coherency
○ 平行(concurrency
まあ知ってりゃ分かる範囲だが
938デフォルトの名無しさん
2025/05/19(月) 09:25:09.06ID:8khPYfEx
asyncについてはお前らのほうが詳しいようだから任せるが、俺が言おうとしてたのは、
「キラーアプリ/キラーコンテンツ」と同様に、プログラミング言語にも「キラーコンセプト/キラー文法」があり、
これがJSは「I/Oの分離」で、Goは「Goroutine」という事

まあざっくり関係ある所だけ詰めておくと、
>>887
> Javascriptでフロントエンドプログラム初心者が簡単に使えるから流行っただけ (887)
なるほどお前がJS大嫌いなのは分かったが、Rustの馬鹿信者共と同様、お前も何故JSが蔓延ったのかを考えるべきだ
Rustとは違い、JSはガチで蔓延ってるからな

> async/awaitの発祥はC# (F#)だけど (887)
『文法』についてはその通り。ただし非同期シングルスレッドの『コンセプト』を全面的に打ち出したメインストリーム言語はJSが初だ
と言うより、2000年頃はJSはオモチャ扱いされてたが、
パフォーマンスや記述の容易さにおいて優れた言語であることを実証し、実力でメインストリームへと駆け上がってきた
この原動力になったのが「非同期」で、実際、現時点のメインストリーム言語はだいたい非同期をサポート『するハメに』なっている
(=JSが非同期でなかったら、他言語がここまで早くasyncをサポートすることも、またC#がasyncを思いつくこともなかったと俺は見ている)
同様に、多言語で普遍的なコンセプトはオブジェクト指向やクロージャ位だろ
逆に言えば、asyncはこれらに並ぶ発明、とも言える

> JSが勝ったのは、それがブラウザで動く事実上ただ一つの言語だから (889)
一応Javaも使えた(らしい)が…(誰も使わないので2016頃にブラウザから落とされた)
まだDOMのAPIに痕跡も残ってたはず
そしてお前にとっては実はこれはラッキーな話で、JSがブラウザ内に留められていた、と認識したほうが正しい
もしJSが当初からコンソール等でも使えたら、多分Pythonが駆逐されてた
(俺にとってはこうなってくれてたほうが良かったが)
939デフォルトの名無しさん
2025/05/19(月) 09:25:50.19ID:8khPYfEx
> 別にシングルスレッドでの並行処理が良いなんてことはない
これはお前の認識が間違ってる
非同期で平行処理をさばいたほうが「同期/マルチスレッド」よりも性能が出るので各言語はasyncをサポート『するハメに』なった
これはお前も(JS大嫌いなので認めたくないようだが)、以下のように認識できてる
> 理想的にはasyncの方が効率的になり得ると思うけど (889)

C#もそうだが、Thread->(何かあったと思ったが忘れた)->BackgroundWorker->Taskまでは、
それまで通常の同期型マルチスレッドでしか無い
というのはまあ、言い方が悪いのは認める
なんせマルチスレッドは元来非同期であって、つまりmutex等の同期機構が必要な「ガチの非同期」であり、
JSの「なんちゃって非同期」で「非同期」を極めたつもりになってる馬鹿JSer共は俺も全員殺したい位だ
ただ一般的に、また特に初心者に対しては「文法」が目立つので、「非同期」「非同期」言われ、「非同期」がすごいのかと勘違いしがちだが、
JSのコンセプトは「I/Oの分離」で、その手段が「非同期」だっただけ(そして強制=I/Oに同期APIがほぼ無い)
ここをお前は勘違いしてて、すごいのは「非同期」自体ではなく、「I/Oの分離」だ
(ただしJSではI/O===非同期の為、見た目わかりやすい「非同期」が用語として使われることが多い)

何が違うかというと、切り出しの粒度が違う
Goroutine含めたマルチスレッドは、I/Oをスレッド内で何度でも処理出来る
つまりかなり大きな単位で切り出してる。これは後述するがスイッチングコストの問題もあるから
これに対し、JSが求めたI/O分離は、各I/O毎に一つとする最小粒度でasyncに切り出し、
ただこれだけで十分だ、これ以外は切り出す必要もない、というわけ
(だから切り出し粒度の面でもそれまでのマルチスレッドからすると異端)
940デフォルトの名無しさん
2025/05/19(月) 09:26:28.98ID:8khPYfEx
もう一度整理すると、
他言語「全然処理能力が足りない!もっとCPUを寄越せ!!くらえマルチスレッド昇竜拳!!!」
JS「いや書き方変えてI/Oを分離すれば、実はCPUなんて一つで足りてる」で、
GreeJS「ボクはマルチスレッドの倒し方、知ってますよ?」てなところだ
実際JSの性能が良かったから、他言語はJSを参考にI/Oを非同期化するための文法を導入『せざるを得なく』なった
というのを885で書いたつもり(まあどうしても「非同期」が目立つが)

駄目押しで言っておくと、
「非同期」で書いた方がパフォーマンスが出てしまったから、C#含め各言語は「非同期」文法を導入『せざるを得なく』なった
そしてこれを世に知らしめたのがJSで、結果、JSはプログラミング言語全体をリードする形になり、蔓延る事になってる
逆に言えば、2000年頃にC#がasyncを導入してたら、今頃C#はJSを超えるシェアだっただろうし、
同様に、GoがJSと同時期(1995)に発表され、Goroutineで『I/Oを』分離する、というコンセプトだったら、GoもJS程度には普及してたはず
つまりJSはその当時、誰も思っていなかった「金脈」を掘り当てた結果、報酬として蔓延る事になった、とも言える
941デフォルトの名無しさん
2025/05/19(月) 09:27:03.65ID:8khPYfEx
でまあ、889のリンク先読んだが、その筆者やお前がasync大嫌いなのは分かった
そしてその中でも言及されてるが、実際の所、I/OはOS内でasyncになってるから、
同期APIしか使ってないマルチスレッドでも自動的にasyncになるのは事実だ
ただ、OSレベルではなく、プログラミング言語レベルでasyncにしてしまえば、
パフォーマンスでぶち抜ける事をJSが発見してしまった

実際何が違うの?といわれれば、スタック含めたコンテキストスイッチングが最小に押さえられ、
スタックも浅く小さく抑えられるのでキャッシュヒット率が上がる、程度のはずだが、
結局の所はこれが無視出来ないからパフォーマンスが出てしまってる
つまり、
他言語「OSでasyncになってるからヨシッ!」
JS「いやコンテキストスイッチングをゼロにしてキャッシュヒット率上げれば全然行けるで!!!お前らまるで見えてねえな」
でJSが正しかったから、JSモドキなコンセプトをasync文法として採用『せざるを得ない』状況になってるわけ

ただしこれが良いか悪いかは確かに微妙である
その筆者は「色が付いて(=同期関数か非同期関数か分からないので)使いにくい」というわけだが、
これはその筆者がJSを知らないだけで、JSはI/Oが非同期になってるだけなので、関数名見れば分かる(ように作る)
ただ、I/Oが全部非同期で強制なら、理屈的には、(プログラマによる明示的な記述無しで)全自動で非同期に出来るはず
これに近い事をコンパイラにやらせているのがC#だし、generator(コルーチン)な実装にすりゃ出来るだろというのもその通り
明示的にプログラマにI/O分離させた結果、同期よりは見にくいソースコードとなるのは事実
自動化出来てればもっと上ではある
(そして他言語はOSで十分に自動async化出来てると勘違いしてたのをJSが指摘した形になる)
942デフォルトの名無しさん
2025/05/19(月) 09:27:53.50ID:8khPYfEx
だからGoが普及する為には、JS同様に何かしら「金脈」を掘り当てる必要がある
それが出来てないから今がある

Goの場合の想定「金脈」はGoroutine、
Java流に言えば、"Write once, perform anywhere"(一度書けばどこでも最大性能)だが、
実際の所はGoroutineのスイッチングコスト(とチャネルの通信コスト?)が高すぎて、最小粒度ではパフォーマンスがまるで出ない
逆にこれが出来てるのはGPU/CUDAであり、同じゲームプログラム(シェーダープログラム)で、
それぞれのハードウェアでの最大性能が出る
だからベンチでGPU毎のfpsがずらりと綺麗に並ぶ事になる

敗因は何か?と考えると、
・JS以外の他言語と同様、スイッチングコストを甘く見すぎ
・スイッチングコストを下げる努力をしてない、というよりプログラマ側の努力で下げられない
 (当然だが同一/最小粒度のままで。粒度を上げてスイッチングコストを下げるのは本末転倒)
かと。逆にJSは
・プログラマに強制的にI/O非同期化の努力をさせ、スイッチングコストゼロを目指す
というコンセプトが当たったから今がある
943デフォルトの名無しさん
2025/05/19(月) 09:28:31.40ID:8khPYfEx
> Goは「普通の関数をそのまま並行に動かせる」感じなので、その手軽さが好まれてると思う (989)
> CPUバウンドな計算には向かないけど、IO中心のタスクなら十分に良い性能にはなるので
さらに駄目押ししておくと、I/OバウンドならPythonやPHPでも問題ない
だから問題なのはCPUバウンドの場合だが、
JSは「お前らがCPUバウンドと勘違いしてるのは、実はスイッチングコストバウンドだ。本当のCPUバウンドはまだ先にある!!!」として
『手動で』I/Oを非同期分離する事をプログラマに要求し、
(実際ウザイのも確かだが)やってみると確かにパフォーマンスが出るので、
他言語も同様の仕組みを導入『せざるを得なく』なった
もしGoroutineが本当に素晴らしければ、他言語も同様の仕組み、
つまりマルチスレッドをもっとお手軽に記述出来る文法を導入せざるを得なくなる
ただ、そうではなかったので、そうなってない
つまり、他言語から見て、Goroutineは真似る価値もない

そしておそらく
> 「普通の関数をそのまま並行に動かせる」
これが駄目なんだよ
GPUはスイッチングコストがゼロになるようにハードウェアが作られているが、それでもプログラムにはだいぶ制限がある
メチャメチャざっくり言うと、通常はとりあえず1024スレッドを目指すので、レジスタは64本に制限される
なおスタックは元々無い。だからx86CPU(レジスタ8本)だとイメージとしては
・スレッド当たりのスタックは224Bytes(=56*4)
となる。勿論、スタックを消費するタイプの再帰は出来ないし、コード上の変数の数も制限される(≒最大63変数、1本はPCなので)
対してGoroutineには何の制限も無いだろ
そりゃスタックも大きくなるしスイッチングコストも結果的に上がる
(=キャッシュヒット率が下がる。まあGPUにはCPU的文脈のキャッシュもないが)
944デフォルトの名無しさん
2025/05/19(月) 09:29:12.15ID:8khPYfEx
だから今すぐ出来る対策は、Goroutineのスタックサイズ制限でのスイッチングコスト低減だろうよ
コンパイラで各Goroutine毎の最大スタックサイズを静的に解析し、そのサイズに固定する
静的にスタックサイズを確定出来ないGoroutineのコードは、落とす(=エラーとしてプログラマに書き直させる)、とかだね
(GPUは既にこうなってる《はず》)

とりあえずGPUでは"Write once, perform anywhere"出来てるのだから、
・依存性がない最小単位でGoroutineに分離/分割し
・スイッチングコストをゼロに出来れば
行けるはず。ただ、Goはこのどちらもやろうとしてないよね

これも駄目押ししとくと、
Go「グリーンスレッドだから軽い」
GPU/CUDA「Goroutineなんて贅肉多すぎのデブスレッド。本当のマルチスレッドを見せてやんよ」
てなところかと
945デフォルトの名無しさん
2025/05/19(月) 10:09:21.10ID:JmTSINZF
>>926
このC#コードを実行してみろ、無能屑
3秒じゃなくて2秒で終わるんだが
Go でも go つけたらそうなる、Rustでも触ってないがそうだろう
平然とデマ広げてマウント取るの滑稽だからやめたほうがいいよ
Stopwatch sw = new();
sw.Start();

var a = Task.Delay(1000);
var b = Task.Delay(2000);

await a;
await b;

sw.Stop();

// Elapsed: 00:00:02.0083451
Console.WriteLine($"Elapsed: {sw.Elapsed}");
946デフォルトの名無しさん
2025/05/19(月) 10:23:40.26ID:JmTSINZF
非同期APIを流行らしたのは JSじゃなくて nginx だから
Node.jsが出たのは2009で、Go も2009、nginxは2004だ

あたかもJSやNode.jsが非同期を発明したかのように語るのやめろ、流行らしたのは事実だが

あとGoよりシングルスレッドの方のNode.jsの方がパフォーマンス出るとか言ってるのはお前だけだから、ソースを出せ

GPU/CUDAで行われる並列処理は Webで行われる並行並列とか全く異なるし、無能が長文書くの誰も読まないからやめたほうがいいと思うよ
947デフォルトの名無しさん
2025/05/19(月) 11:22:21.24ID:XkyvQnVv
非同期が流行ったのはWin32のIOCPからじゃないかな
Windowsのマナーでは、1990年代から非同期が当たり前だったよ
948デフォルトの名無しさん
2025/05/19(月) 11:29:25.21ID:SYizIHd9
Goroutineみたいなマルチスレッドをブラウザ上でJavascriptで使うにはWeb Workerを使う
チャネルに相当するのはpostMessage
949デフォルトの名無しさん
2025/05/19(月) 12:25:32.76ID:CwlN/9w+
Linuxのカーネル内では最初から非同期だよ。流行りもなにも非同期しかない
950デフォルトの名無しさん
2025/05/19(月) 14:06:50.34ID:ePBLToOQ
>>945
それは
あんたの認識不足だな
C#ではそのようにTaskを起動してようやく2秒を実現
Goでもgoでgoroutineを起動しでようやく2秒を実現
JavaScriptでは関数を呼び出すだけで2秒を実現できている
この差が非同期が前提であるJavaScriptの実力だ
951デフォルトの名無しさん
2025/05/19(月) 14:11:01.04ID:XkyvQnVv
非同期と並列実行は無関係だけどな
952デフォルトの名無しさん
2025/05/19(月) 14:13:24.79ID:vceEd9JD
職場で浮いてるかブリリアントジャークとして大活躍しとるんか
953デフォルトの名無しさん
2025/05/19(月) 14:19:01.58ID:ePBLToOQ
>>946
JavaScriptは1995年からあり非同期で動いている
象徴的なXMLHttpRequestはIEで1999年からMozillaで翌年
念のため説明すると外部のサーバーからHTTPでデータを非同期に送受信できる
シングルスレッドでユーザーインターフェースの処理などをしながらサーバー群と通信しデータを処理し表示することを非同期に行える
954デフォルトの名無しさん
2025/05/19(月) 14:21:16.24ID:ePBLToOQ
>>951
並列ではなく並行な
この2つを区別できないのはヤバいぞ
JavaScriptはシングルスレッドで非同期に並行処理が基本機能として備わっている
955デフォルトの名無しさん
2025/05/19(月) 14:33:46.83ID:vceEd9JD
ここは30代が50代園児に非同期を語るスレです
956デフォルトの名無しさん
2025/05/19(月) 15:00:01.58ID:3L8OUWa4
>>950
お前底無しの馬鹿だろw
957デフォルトの名無しさん
2025/05/19(月) 15:19:35.67ID:ePBLToOQ
>>956
技術的に反論できないの?
非同期並行が本質的に備わっているJavaScriptと他の言語との違いを理解しよう
958デフォルトの名無しさん
2025/05/19(月) 15:43:40.54ID:SYizIHd9
node.jsはグローバル変数がリクエスト間で共有される
書き方として楽なのはもちろん同期コストもかからない
959デフォルトの名無しさん
2025/05/19(月) 15:57:08.17ID:JmTSINZF
>>953
webサーバとして流行ったのは 2009年の Node.js だボケ、かなり最近の話じゃねーか
非同期APIってのはクライアント側のブラウザを指してねーわボケ

>>950
C#のTaskとJSのPromiseは同じ表現だボケ

> JavaScriptでは関数を呼び出すだけで2秒を実現できている
C# はTask.Delay 関数呼び出すだけだが、JSとかいうゴミは new Promise(resolve => setTimeout(resolve, ms) とかいうゴミコード書いてるじゃねーか
どこが関数呼び出すだけなんだ?

C# は ネイティブスレッドモデルだから Task.Delay と Thread.Sleep の使い分けができるが
JSはできないけど、これはデメリットでもあるぞ
C#の方がネイティブスレッドを扱える分、汎用的に様々なアプリを作れるのに向いているということだ
JSは前提としてIOが絡むものじゃないと向いていないゴミなわけだ
よってデスクトップやらモバイルで使う言語じゃねーんだわ、頼むからブラウザ以外で使おうとするのやめろゴミども
960デフォルトの名無しさん
2025/05/19(月) 16:08:08.14ID:uNJYr9YV
>>958
それはJavaScriptの性質
node.jsはブラウザの外に出したことでようやく普通の言語と同様にローカルファイルアクセスやサーバー化ができるようになったことが本質
元々JavaScriptには非同期並行が前提の性質があるため
node.jsとなったことでその効率と利便性の良さをサーバーサイドでも発揮した
ただしシングルスレッドの限界があり別スレッドはWorkerという分離でダサい
マルチコアをN:Mモデルで透過的に活かせるGoやRustに利がある
961デフォルトの名無しさん
2025/05/19(月) 16:35:28.76ID:NvwVFQDL
Goスレが糞言語の話題で埋まるのは偲び無い
962デフォルトの名無しさん
2025/05/19(月) 20:33:15.49ID:60+8EMpP
>>773を書いたのは自分だけど
別の言語の話題で盛り上がるスレになってしまったようだ
963デフォルトの名無しさん
2025/05/19(月) 20:41:50.05ID:cWzC7L5F
nodeなんてExceptionキャッチ出来てなくてクソアプリ量産だよ
Goがいいいよ
964デフォルトの名無しさん
2025/05/19(月) 22:09:44.38ID:ohfptUI9
>>961
まったくだ
965デフォルトの名無しさん
2025/05/19(月) 23:46:27.40ID:8khPYfEx
>>946
> あとGoよりシングルスレッドの方のNode.jsの方がパフォーマンス出るとか言ってるのはお前だけだから、ソースを出せ
お前は現実を直視しろ
(ちなみに俺が言ってるのは個々のフレームワークやバイナリの話ではなく、モデルの話だ)
しつこいようだが纏めると、

従来型のマルチスレッド:
 スレッド間:シグナル、ロック、通信
 スレット内:同期APIを使う。I/OはOSレベルで自動的に非同期
 起動単位:JOB単位(=JOB毎に1スレッド)
 アクティブスレッド数:CPUと同数以上
 狙い:多数のスレッドで性能を上げる

Go型のマルチスレッド:(=従来型の発展型)
 スレッド間:通信
 スレット内:同期APIを使う。I/OはOSレベルで自動的に非同期(なおGoroutineで非同期にも書けるからasync文法は必要ない)
 起動単位:JOB単位、またはもっと小さく、データフロー単位(=1つのJOBを多数のGoroutineに分割)
 アクティブスレッド数:CPUの数倍以上
 狙い:かなり多数のスレッドでさらに性能を上げる

JS型のマルチスレッド:(=アンチマルチスレッド)
 (スレッド間:通信)
 スレッド内:非同期APIを使い、プログラマが手動でI/Oを非同期化
 起動単位:全部(またはできるだけ多数)のJOBを一つのスレッドで処理する
 アクティブスレッド数:出来れば1、または最小
 狙い:マルチスレッドにおけるオーバーヘッドを無くすため、「出来るだけ少ないスレッド」に集約する
966デフォルトの名無しさん
2025/05/19(月) 23:46:56.13ID:8khPYfEx
で、従来型よりJS型の方がパフォーマンスが出ることが分かってしまったから、あらゆる言語がasyncを慌てて導入することになってる
だからasyncを導入した言語は、自ら敗北を認めてる
ただまあ、確かにGoはこの意味では負けを認めていないな

とはいえ、「出来るだけ少ないスレッド」という、マルチスレッドを根本から否定するJS型が勝ってしまった意味は大きい
そしてGo型は従来型をさらに発展させたものなのだから、お前らに危機感がないのはだいぶ狂ってる
この意味でなら、Goは負けを認めず、負け筋に乗り続けてるだけ
(だから今後共負け続ける)

Go型でJS型に勝つためには、スレッドスイッチのコストを最小化することが必要だが、Goはこれをやろうともしてない
だから、Goに勝ち筋は今の所無い
967デフォルトの名無しさん
2025/05/19(月) 23:58:00.24ID:+dWR/SKT
Goroutineが重いプリエンプティブを選んだのはなぜだろうね
マルチユーザのマルチタスクなら強制的にプリエンプションせざるを得ないけど自分たちでコードを書くのだから協調スケジューリングで十分なはず
結果多くのコンテキスト切り替えスイッチングも重くスタックレスにも出来ず
968デフォルトの名無しさん
2025/05/20(火) 00:21:14.96ID:sg7u1BbS
シングルスレッドのRedisに限界があるから Dragonfly や Garnet が出てきているのに何言ってんんだこいつ

Goがそもそもグリーンスレッドモデルってことを全く理解してなさそうw
Goが「スレット内:同期APIを使う」ってなに?w Time.Sleepするとスレッドがブロックされるのか?同期APIじゃないからw

JSだろうがGoだろうが非同期モデルを採用しているのだから最終的にepoll, kqueue, IOPCを使って処理されてるだけで、goroutineだのasync/awaitだのは単なるユーザコードの書き方の違いにすぎない

Goのgoroutineのスイッチングコストなんて全く大したことがない、goroutineの切り替えはユーザモードで行われる & スタックポインタとg構造体のポインタを書き換えるだけで数命令で完了する非常に軽量な処理
その差よりマルチコア使えるかの要素の違いの方がパフォーマンス上よっぽど重要かつ支配的
JSが流行ったのは単なるブラウザで動く初心者言語なだけだし
非同期モデルを流行らせたのは Node.jsじゃなく apache -> nginxの10K問題解消の系譜だ

統合失調症に近いなお前、すべて「わかった」気になってるけどれはお前の脳内の中だけの話
C#にしかりGoにしかりGoogleやMicrosoft が全世界から優秀なエンジニアを集めて言語&ランタイムを設計、開発させてるから
お前みたいな糖質が問題提起する内容などそもそも問題がないように設計されてるのよ
969デフォルトの名無しさん
2025/05/20(火) 01:00:38.79ID:8PwvoTt0
ユーザ多いJavaもGoと同じくグリーンスレッドモデルだけどw
Kotlinもコルーチンでグリーンスレッドモデルだね

どの言語もJSのやり方とは別のアプローチでC10K問題を解消してるだけですよねw Goのgoroutineだけ否定する理由を全く論理的に説明できてないですねw

goroutineのスイッチングコストが高いと勘違いしているようだけど数個のレジスタを書き換えるだけで非常に高速に行われるはずだけどw

君のスイッチングコストが高いという主張を裏付ける記事やベンチマークを貼った方がいいんじゃない?
970デフォルトの名無しさん
2025/05/20(火) 01:31:58.27ID:ZTQVFMJe
50代園児達は厳しいのだ
971デフォルトの名無しさん
2025/05/20(火) 02:25:32.98ID:q97OvMDE
大量の非同期タスクで最も性能が出るのはRustで決着がついている
CDNシェア世界トップのCloudflareも従来のnginxを捨ててRust製に変更して性能を大幅に高めている
先日githubにRustソースコードも公開された
以下はそのまえの記事


Cloudflare、NGINXに代えて自社開発のRust製HTTPプロキシ「Pingora」をグローバルCDNに採用。性能向上しつつCPUとメモリ消費を3分の1に
https://www.publickey1.jp/blog/22/cloudflarenginxrusthttppingoracdncpu31.html

CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、
同社自身がRust製のHTTPプロキシである「Pingora」を開発し利用していることを明らかにしました。

Pingoraはすでに同社のCDNに採用され、毎日1兆回以上のリクエストを処理し、性能向上や数多くの新機能の提供を実現しつつ、従来と比較してCPUとメモリリソースの消費はいずれも3分の1程度に収まっているとのこと。
972デフォルトの名無しさん
2025/05/20(火) 02:44:02.44ID:Wybyn9P/
Perlに依存してるwww
973デフォルトの名無しさん
2025/05/20(火) 08:09:09.31ID:bVe5xETf
>>971
それいつもの再設計で良くなったパターンじゃなくて?
974デフォルトの名無しさん
2025/05/20(火) 08:14:17.18ID:ZTQVFMJe
機能は絞ってるんだろうな
975デフォルトの名無しさん
2025/05/20(火) 08:22:55.01ID:Gk4G5H2z
>>971
最速と言われてきたNGINXの3倍速かよ
976デフォルトの名無しさん
2025/05/20(火) 10:42:26.74ID:SbcnGbeK
原文読んだけど
https://blog.cloudflare.com/how-we-built-pingora-the-proxy-that-connects-cloudflare-to-the-internet/
- コネクションプール戦略の改善により遅延を削減できた
- NginxのLuaモジュールをRustに置き換えたことでCPUとメモリの使用量を削減できた

Rustだからというよりアーキテクチャの改善と汎用性や柔軟性を犠牲にした最適化でパフォーマンスを改善したってことだ
全体として原文はRust最強みたいな変な誤解をされないように注意深く書かれているから、ちゃんとその辺りを理解してあげないと失礼
977デフォルトの名無しさん
2025/05/20(火) 11:16:09.13ID:Y8vT9Doa
遅いGoやC#などで作っても勝てないし
C/C++で非同期プログラミングは未だに様々な問題を抱えていて不利なので
速さも環境も整っているRust一択になっている状況
978デフォルトの名無しさん
2025/05/20(火) 17:31:30.72ID:qgCJRvxW
クラウドフレアはFPGAを使うべきでは?
LuaスクリプトよりRustのほうが速いという主張も良くわかりませんでした
それは当たり前では?
979デフォルトの名無しさん
2025/05/20(火) 22:34:48.64ID:vbQ41r/k
>>967
単純に、「重い」と認識できてない馬鹿と、分かってても変更しない意識高い系馬鹿の合わせ技でしょ

1995時点で「お前らのマルチスレッドはスイッチングが重すぎてまるで機能していない」と看破できたのはJSだけ
大半の言語はこれを認め、JSと同様に「手動」で軽量化も可能なよう、async文法を導入した
ただし実際、手間が増えてるのと、将来的にOSレベルでのスイッチングが軽くなった場合に、asyncで書かれたコードはゴミになる
だから「抽象度が高い状態で書きたいのだ!!!」「OSで『自動』的にやらせたほうがコード資産の価値は高いのだ!!!」という言い訳はできる
(問題は軽くなる予定が全く無いことだが)

この意味では、「asyncが必要なのではなく、OSがポンコツすぎるのだ!!!」と責任転嫁することも出来るはずだが、
誰もやらないところを見ると、OSは限界までは軽いんだろうな

そして逆に、アプリ側でasync必須でスケジューラも持ってれば、OS側で持ってるのは無駄なので削除して軽量化することは出来る
chromiumOSが奇妙に軽いのはこの辺かもな(=JS専用OS)
980デフォルトの名無しさん
2025/05/20(火) 22:35:11.14ID:vbQ41r/k
> プリエンプティブ
> 協調スケジューリング
改めて考えてみたが、「同期APIを使える」くらいしか利点を思いつかない
協調スケジューリングの場合は「非同期API強制」となるからね
JSは2013年頃でも「SLEEPは?」とか言われてたし、889のような馬鹿げたブログ(2015)を書くやつも居るしで、
非同期アレルギーはそうならなかったやつの想定以上に激しいのかもしれん
(俺に言わせれば、SLEEPは別の書き方があるからそれでいい、Promiseはゴミ、コールバック地獄になるのは腕前の問題、
この辺JSは全関数がクロージャなのだから適当に関数ぶった切って書き、コールグラフを整理すれば回避出来る、となるが)
そして出自がJSというのも当たりは悪い
フニャフニャ文法、階層が関数、専用構文とprivateのないオブジェクト指向、
ダックタイピング、動的に変化するthis、他型のメソッドも使える、で、
正統派オブジェクト指向のC++/Java/C#勢からすれば十分異端すぎるのに、更に、非同期、イベントドリブン、だからね
JSモデルが想定以上に速かったから、他言語開発者はJSを研究せざるを得ず、
何じゃあこれはーーー!!!となるのは分かる(=JSアレルギーの発症
俺の場合は、え?こんなので大丈夫なのか?→あれ?意外と問題ねえな→実は他言語が無駄に冗長過ぎただけでは…、となったが)
まあブレンダン・アイクは本当に上手く攻略したな、とは思うよ

とはいえ、『同速なら』同期APIのコードの方がマシなのは事実だから、
同期API派はさっさと同速になる方向の努力をすべきだと思うがな
981デフォルトの名無しさん
2025/05/20(火) 22:36:05.33ID:vbQ41r/k
>>976
> skipping TCP and TLS handshakes required on a new connection.
いやこれってありなんか?とは思ったが、GETならどうせ同じ(はず)だからいいのか?
となると、リバースプロキシって、誰かの操作を横から盗み見してる感じになるのか?

> 原文はRust最強みたいな変な誤解をされないように注意深く書かれている
信者が発狂するからといってオブラートに包みすぎ。原文は以下
> This is not because we run code faster.
まあCと比べればRustも遅いから、これはどうにもならんが
982デフォルトの名無しさん
2025/05/20(火) 22:43:28.20ID:5IEvPsHE
Rustスレでやろうぜ
983デフォルトの名無しさん
2025/05/20(火) 22:44:31.07ID:5IEvPsHE
GoクンのHPはもうカツカツよ🥺
984デフォルトの名無しさん
2025/05/20(火) 23:12:32.78ID:C5OyrGcX
次スレ
Go language part 6
http://2chb.net/r/tech/1747750228/
985デフォルトの名無しさん
2025/05/20(火) 23:47:56.43ID:MuN0b/Nd
>>981
一般的なリバースプロキシじゃなくて、あくまでCDNだからね
基本的に全部パブリックリソースのGETだし、どのみちオリジンサーバーから見ればCDNからのリクエストだから一緒
986デフォルトの名無しさん
2025/05/21(水) 10:46:48.11ID:va6/rMba
MITM
987デフォルトの名無しさん
2025/05/28(水) 04:53:46.40ID:TwWA6F4N
つるつるわれめ
988デフォルトの名無しさん
2025/05/30(金) 13:31:36.30ID:XWQpoVmB
梅八日
989デフォルトの名無しさん
2025/06/02(月) 21:47:55.19ID:wcsvfY5O
適当なんだけどこれであってる?
肯定/訂正してくれたら嬉しい

1. ローカル変数(sliceはそのヘッド)はescape analysisでスタックやレジスタ割り当て
2. ヒープの頻繁確保解放は総量上限が分かるならプール
3. ロジック的に寿命が長いやつはそもそもGC影響は軽微
990デフォルトの名無しさん
2025/06/02(月) 21:51:04.00ID:wcsvfY5O
配列/スライスの添え字アクセスは境界チェックされる
991デフォルトの名無しさん
2025/06/02(月) 21:52:50.52ID:wcsvfY5O
dangling pointerは発生しない
992デフォルトの名無しさん
2025/06/05(木) 21:11:14.75ID:ZsUexMhd
Go言語がエラー処理構文の導入を「一旦諦める」と宣言 — 7年にわたる検討の末コンセンサス得られず
https://techfeed.io/entries/6840c4096749026b87829bb9
993デフォルトの名無しさん
2025/06/05(木) 21:36:51.37ID:YBXwJM9k
今のままでいいぞ。例外処理はワイには100年早い
994デフォルトの名無しさん
2025/06/05(木) 23:37:51.96ID:Hk1mFN4z
>>992
(他言語含めて)前から思ってるんだけど、コードは縦に書くもの(=改行するもの)だと洗脳されてるよな
読みたくないコードはアナログに右に書けばだいたい解決する
今更「一行は80文字まで」等の化石コーディングルールを脳死で守ってるなら尚更

func printSum(a, b string) error {
x, err := strconv.Atoi(a); if err != nil {return err}
y, err := strconv.Atoi(b); if err != nil {return err}
fmt.Println("result:", x+y)
return nil
}

これでスッキリだろ
生理的に許せんならフォーマッタ使えで終わるし(逆も然りだが)
995デフォルトの名無しさん
2025/06/06(金) 00:36:59.99ID:pqJl8iQF
printしてpanicしてエラースッキリ
996デフォルトの名無しさん
2025/06/06(金) 00:55:09.52ID:56KGrjta
>>994
フォーマット以前にサンプルとはいえそんなクソコードを書くやつのほうが生理的に許せんわ
997デフォルトの名無しさん
2025/06/06(金) 00:56:27.07ID:MkNISVMm
go lint
998デフォルトの名無しさん
2025/06/06(金) 01:10:46.44ID:7Uf7u6qh
>>996
それは俺も思ったが、ここで言う意味もあるまい
(もし俺がサンプルを作ったと勘違いしてるのなら、リンク先確認しろ)
999デフォルトの名無しさん
2025/06/06(金) 10:14:03.88ID:EuijCvJq
IDEに見た目の折りたたみさせればよくね
1000デフォルトの名無しさん
2025/06/08(日) 09:10:52.84ID:nTaYMW6S
質問いいですか?
10011001
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1197日 1時間 27分 33秒
10021002
Over 1000Thread
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/

▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login




lud20250715233051ca

ID:0As8hqIpのレス一覧:


527デフォルトの名無しさん
2022/09/01(木) 18:16:08.12ID:0As8hqIp
きつい現場のGoは他の言語より殊更きつそうだというのはわかるわ
528デフォルトの名無しさん
2022/09/02(金) 02:30:51.60ID:bNDG9t//
channelは複雑なデータのやり取りに使うには難しすぎると感じるね
どこで詰まるかわかったもんじゃないし
公式がまともなフレームワーク用意するわけでもないし
529デフォルトの名無しさん
2022/09/02(金) 03:08:08.96ID:xpSIPhaW
epollを使うよりかはマシだし
530デフォルトの名無しさん
2022/09/02(金) 08:58:55.58ID:0WCZpZUS
いや、Goに限らない問題でGoのダメなところとか言われてもなぁ
531デフォルトの名無しさん
2022/09/02(金) 09:55:02.48ID:zLWkNNSX
いや、けっこうGoに限った問題
channelのユースケースの大部分は現実にはpromise/futureで十分で、遥かにミスを引き起こしにくい
532デフォルトの名無しさん
2022/09/02(金) 09:58:48.22ID:0WCZpZUS
例えばCとかでファイルを排他オープンしたままクローズし忘れて書き込みのままになってて、別の箇所で読み込もうとしたけど開けなかったとして
これはC言語の不備だとか言うのか?と
533デフォルトの名無しさん
2022/09/02(金) 10:04:00.39ID:0WCZpZUS
>>531
chan のユースケースといったら、パイプとしてストリーム的にデータを流すのが主だと思うんだが、promise, future でどうやって代替するの?
534デフォルトの名無しさん
2022/09/02(金) 10:06:18.95ID:0WCZpZUS
>>531
select文のあたりでも書かれてたと思うけど、同期を取る目的じゃなくてパイプからの機能だよチャネル
535デフォルトの名無しさん
2022/09/02(金) 10:10:39.85ID:0WCZpZUS
>>531
同期取るなら、sync.WaitGroup 使えばよくない?
536デフォルトの名無しさん
2022/09/02(金) 12:33:43.05ID:Xv0heE2X
>>532
そういうことにならないようにGoのdeferやC#のusingやPythonのwithみたいな仕組みを言語機能として提供してるよね?

それらが不要だとでも?
537デフォルトの名無しさん
2022/09/02(金) 12:45:23.85ID:bNDG9t//
いや普通に同期を取る使い方もできるだろw
完了通知を待つ使い方
俺もその使い方しかしてない
async/awaitなんで構文として追加しても良いと思うのだけどね
channelは非同期機構を実装するパーツとしては優秀だから
フレームワークが欲しい
538デフォルトの名無しさん
2022/09/02(金) 13:40:10.47ID:D0FuWgPr
そもそも本当にパイプとしてストリーム的にデータを流す必要のあるケースなんて稀
Goがchannel推しだから利用者もそれに引き摺られてストリームっぽい設計になりがちなだけで、結果として単一の値(又は配列)を返せれば殆どのケースでは十分
本当にストリームが必要ならJavaScriptのasync generatorのような設計も可能で、producerとconsumerが協調するからchannelより遥かに安全だ
539デフォルトの名無しさん
2022/09/02(金) 13:56:23.23ID:iQ46VdDW
そもそもストリームモデルが必要なユースケースってほぼ
分散環境だと思うんだよな
540デフォルトの名無しさん
2022/09/03(土) 12:27:35.16ID:62gf404N
分散環境なら外部のメッセージバスに投げるだけだよね
せっかく小さいgoroutineを気軽にポコポコ起こせるデザインなのに、
結果を受け取る方法が、データ競合を起こさないように最大限注意して共有変数を使うか、パラダイムのミスマッチなchannelを使うかなのは片手落ちに感じる
単純にgoroutineの返り値をwaitできるようにしない理由ってあるんだろうか?既に議論されてたら知りたい
541デフォルトの名無しさん
2022/09/03(土) 13:39:36.59ID:Aru3Abt3
>パラダイムのミスマッチなchannel

kwsk
542デフォルトの名無しさん
2022/09/03(土) 20:41:16.91ID:eoULSfLD
>>541
そりゃ>>533の通りで、channelはストリームでありfutureではない、ってことだ。
futureで済むケースにchannelを使うと、複数の値を返す可能性はないのか?1つも結果を返さなかったら?
そんな余計な心配が常に付き纏うことになる。futureなら全く無縁な心配がな。そしてその心配が現実になればプログラムは容易にデッドロックする。
543デフォルトの名無しさん
2022/09/03(土) 20:49:18.55ID:CkDP1XSv
>>536
だからdeferあるんだし、ちゃんとリソース管理しろよ、という
Goのせいにするのはお門違いだろ、な?
544デフォルトの名無しさん
2022/09/03(土) 20:53:14.26ID:CkDP1XSv
>>542
promise, future 程度のことをやりたきゃ、>>535で書いたけどsync.WaitGroup使ったらどうだ?
545デフォルトの名無しさん
2022/09/03(土) 21:09:58.32ID:2QtFsvwZ
パラダイムのミスマッチという理由がわからん。
goroutineは一つの関数を呼ぶためのもんじゃないぞ。
goroutine立てて一連の処理を同期的に書くためのもなんよ。普通に考えれば結果を受け取る必要が無いはずだよ。
どうしても集めるならfan inするように一つのchanで受ける。

Futureは要らないんよ。awaitとかしなくてもそこでCPU占有したり、ioなりなんなりが起これば自動的に別goroutineに制御が渡る。
546デフォルトの名無しさん
2022/09/03(土) 21:10:11.97ID:Aru3Abt3
>>542
ストリームだとミスマッチでfutureだとミスマッチじゃないということか?
何と何がミスマッチなのかというところがよくわからんが。
547デフォルトの名無しさん
2022/09/03(土) 21:14:31.20ID:eoULSfLD
>>544
その場合は「共有変数を注意深く使う必要がある」よね
548デフォルトの名無しさん
2022/09/03(土) 21:22:59.76ID:eoULSfLD
>>545
だからそう言ってるでしょ
goroutineとchannelをfutureのように使おうとすればミスマッチのために煩雑でバグの生じやすいコーディングを強いられることになる
もちろんGoにはGoのやり方があるのは分かるが、一方でその結果が>>520の状況なのが事実だよね
549デフォルトの名無しさん
2022/09/03(土) 21:29:09.46ID:2QtFsvwZ
>>548
goroutineで処理すべき単位とか、ワークスティーリングの話してなかったかなと。
550デフォルトの名無しさん
2022/09/04(日) 00:29:35.08ID:ULs4IOBU
まさかこのスレにホーアのCSP本読んでないやついないよな?な?
551デフォルトの名無しさん
2022/09/04(日) 00:54:37.91ID:6UpdVUMR
いや、読んでませんが?
552デフォルトの名無しさん
2022/09/04(日) 17:28:10.39ID:GIlWqA7r
>>550
読もうとしたけどガチの論理学的数学で挫折
しかしよく調べたらGoが参考にしたのはその本ではなく
最初にホーアが出したもっと簡単な論文の方だった
つまりその本は読む意味はない(Goの並行モデルの理解という意味で)
553デフォルトの名無しさん
2022/09/04(日) 18:08:07.32ID:VepAvQjQ
>>547
それは認めざるを得ない
Mutexと会わせ技で使ってるから
554デフォルトの名無しさん
2022/09/04(日) 19:08:07.89ID:VepAvQjQ
>>547
だけど、120行(+テスト75行)の隠蔽ライブラリを書いて使ってる
共通変数の管理なんてその程度の共通化でカバーできるタスクじゃん
555デフォルトの名無しさん
2022/09/04(日) 23:01:27.23ID:ULs4IOBU
すまない誰かリングにかけろで例えてくれないか?
556デフォルトの名無しさん
2022/09/05(月) 01:58:21.42ID:7mfke0+F
Goがpromise(future)/async/awaitをサポートしてくれれば今より容易に安全に書けるケースが増えるのは事実だが、
この件も他の件と同様にGoはサポートしてくれないだろうという悲観的な現実と向き合って、
今ある手段で頑張って代替手段を安全に実現しよう。
557デフォルトの名無しさん
2022/09/05(月) 04:13:05.73ID:098gBdTn
結局ゴルーチンの実装が中途半端だったんだろうね
分散環境でのストリームモデルならNodeみたいなノンブロッキングIOで外部のソケットを叩けるようにして
シングルスレッドにするのが良かったし
そうでないならFuture/Promiseみたいに安全にデータを受け取れる仕組みが欲しかった
この2つがちょうどうまくできないデザインになっちゃった
558デフォルトの名無しさん
2022/09/05(月) 04:31:49.54ID:098gBdTn
またGoの言語仕様にも問題があった
ジェネリクスだ
ジェネリクスがない状態でfuture/promiseを安全に実装できない
なぜかアンチジェネリクス勢がGoには多く
コミュニティでの議論も進展しなかった
つまり全てがゴテゴテに回ってしまった
それならGoogleが並行処理のフレームワークを作ってくれるのかと期待していたが
その気配は全くなく使いにくいcontextのみを放り投げた状態でさあ作れと言った状態
そりゃ普通のユーザーは付いてこれない
559デフォルトの名無しさん
2022/09/05(月) 06:36:04.94ID:oqoL/iqD
マルチコアを効率よく使うってのがそもそもコンセプトで作られたんだがNodeみたいにしろって意味わからん
560デフォルトの名無しさん
2022/09/05(月) 07:31:00.89ID:yL+fAGmc
Goのようにマルチコアを効率よくスケジューリングできて
Goのgoroutineのように多数のタスクを身軽に簡単に起動できて
Goのようにそれらタスク間でchannel通信をすることができて
それらに加えてFuture / async / awaitもサポートしているプログラミング言語がありますよ

偶然ですがその言語は
Goと同じくclassや継承がなく
Goと同じく例外try-throw-catchもなし
561デフォルトの名無しさん
2022/09/05(月) 09:08:23.21ID:wt43bW0T
>>558
まずpromiseがどう有利なのか自分の口からどうぞ
そこにメリットを見いだせないから無視されるんだよ
562デフォルトの名無しさん
2022/09/05(月) 10:05:06.21ID:rnwYkZ6l
Goのモデルと比較してのpromiseの優位点としてはこんなとこかな
・一般に、並行性が多少犠牲になる代わりに並行処理の複雑性を局所化する方向へとデザインが誘導される傾向がある。結果としてバグが入り込みにくい。
・ワークフローを集約して記述しやすいため可読性保守性に優れる。
・(channelではなく共有メモリを使う場合と比較して)処理結果を他のスレッドで利用する際にデータ競合が生じない。
・channelと比較して、結果として単一の値を生成するというセマンティクスが型として明確に表現される。デッドロックや閉じ忘れの心配もない。
563デフォルトの名無しさん
2022/09/05(月) 10:15:26.20ID:098gBdTn
うーん今の時代にpromiseの利点を理解できない人がいるとは驚きですが仕方ない出血大サービスだ

まず最初にマルチコアを活かすという点についてだが
基本的にゴールチンのような仕組みでは全く活かせないという点を強調しておく
まともにマルチコアのCPUの性能を引き出せるのはSIMD命令を使った計算のみ
SIMDが何なのかわからない人は調べてください
SIMD演算を直接言語でサポートしていないので計算の高速化は論外
ただのマルチスレッドと変わらない
マルチスレッドはOSレベルで実装されており
コンテキストスイッチの負荷も高くCPUキャッシュも消えるし
マルチコアを活かすような作りになってないのはご存知の通り
564デフォルトの名無しさん
2022/09/05(月) 10:28:17.92ID:FE5GsYYc
>>562
嘘ついちゃだめ
promiseでもデッドロック起きる
565デフォルトの名無しさん
2022/09/05(月) 10:29:00.06ID:FE5GsYYc
データ競合も起きる
566デフォルトの名無しさん
2022/09/05(月) 10:37:15.25ID:098gBdTn
次にpromiseの利点について

並行処理の考え方としては大きく以下がある

1.処理をシーケンシャル実行して1つずつ結果を受け取る
Aが終わったらBを実行して
Bが終わったらCを実行する

2.複数の処理を同時に実行して結果をまとめて受け取る
A、B、C...の処理を同時に実行してその結果をreduceして受け取る

3.ストリーミングモデル
いわゆるproducer/consumerに代表されるようなモデル

1と2についてはpromiseで全て安全に楽に実装できる
ゴルーチンとchannelを使った実装なんか考えたくもない
100%デッドロックが起きる

3についてはゴルーチンとchannelが本来想定してるモデルなのだが
これを適切に実装するのが難しい
CでBlockingQueueの実装したことがある人は分かると思うが極めてデッドロックが起きやすい
複数のproduer/consumerを生成したい場合など考えたくもない
さらにこのモデルの場合は基本的に大規模な分散環境で実行することがほとんどである
シングルノードでproducer/consumerなどサンプルコードでしか有り得ない
こういう用途では複数ノードのソケットにリクエストを投げて結果を待つということになるので結局2に帰着される
567デフォルトの名無しさん
2022/09/05(月) 10:37:39.78ID:098gBdTn
つまりpromiseがあれば全ては安全に解決される
ちなみにpromiseはスレッド実装する必要はないことに注意
rustはスレッドで実装されているがNodeはノンブロッキングIOを使っている
他にもグリーンスレッドを使うなどいろいろある
言語側が安全性を担保できるように実装できるのだ
そしてpromiseを型安全に実装するためにはジェネリクスは必須である

以上が私の考える
「ゴルーチンは実装が中途半端で実際のユースケースを考えた場合に非常に残念なことになっている」理由である
反論があればどうぞ
568デフォルトの名無しさん
2022/09/05(月) 10:37:59.16ID:rnwYkZ6l
そりゃpromiseでも共有メモリ触ったり外部のリソースをロックしようとしたりすればデッドロックするでしょう
promiseモデルとは関係ない話
569デフォルトの名無しさん
2022/09/05(月) 10:56:03.27ID:88BZgezt
>>560
その言語はRustだな

>>565
Rustならデータ競合が絶対に起こらない
データ競合を起こすコードはコンパイラがエラーにできる言語仕様

>>567
ちょっと違う
RustのFuture(=Promise相当)はOSスレッドとは全く別で関係なく
Goroutineとほぼ同様の気軽に大量に作れる非同期タスクとして扱える
もちろん安全に解決できる

今回の話で言えば大雑把に分けるとRustは3種類ともサポート
① Futureおよびそのasync/await
➁ Goと同様のchanel
③ メモリ競合を絶対に起こさない安全な共有メモリ
570デフォルトの名無しさん
2022/09/05(月) 11:03:44.74ID:098gBdTn
>>569
なるほど流石Rust
571デフォルトの名無しさん
2022/09/05(月) 11:12:30.51ID:098gBdTn
ぐちぐち言ってきたが
Goにはゴルーチンとchannelとcontextという良いプリミティブがあるのだから
適切にpromiseを実装して使えるようにして欲しいということ
であれば並行処理がメインのアプリにおいては第一選択にもなり得ると思う
ジェネリクスも入ったのだしやれるはずなんだよ
Googleがもうやる気ないのかもしれないけど
572デフォルトの名無しさん
2022/09/05(月) 12:10:29.88ID:E0SFrHzH
>>568
channelと比較してデッドロック起きないとか痛い事言っといてそれはないわw
573デフォルトの名無しさん
2022/09/05(月) 17:07:29.06ID:oqoL/iqD
Nodeしかさわったことないから詳しくは知らんけどasyncawaitモデルだと
async関数を使うには呼び出し元にどんどんasyncが汚染されて使いづらいイメージがあるな

その点Goは同期的なコードの一部を並行処理にするってのが非常にやりやすいと思う
タイムアウト処理もselectで簡単に実装できるし、シンプルなfork joinだったらsync.waitgroupで楽に実装できるし
何も困ったことがないな

そんなに優位性があるとは全然思わない
574デフォルトの名無しさん
2022/09/05(月) 21:20:50.97ID:MMezNWAp
>>573
Goは見かけ同期と誤認するけど
同じOSスレッド上でもメインや複数のGoルーチンがスケジューリングされて交互に非同期で動いているよ

例えばGoで
 func1()
 func2()
 func3()
と見かけ同期に書いているのは
async/await対応言語で
 await asyncfunc1()
 await asyncfunc2()
 await asyncfunc3()
と書いた時と同じ状態
つまり見かけ同期のGoの実態は非同期

「Goは最初から全てがasync汚染されているためasync汚染に気付かずに済む」が正解
575デフォルトの名無しさん
2022/09/05(月) 22:10:30.31ID:oqoL/iqD
>>574
goキーワードなかったら同期的に動くだろ
ライブラリの中でgoキーワードが使われてるから暗黙的に使われるが正しいね。

非同期にしたい部分でgoをつけるのであってつけてないのに全部非同期だってのはおかしな話だな
576デフォルトの名無しさん
2022/09/05(月) 22:24:10.45ID:M8mFZMdW
>>575
それは見かけ上だけ
goを付けなくても読み書きなど含めて時間がかかるものは
見かけ上だけ同期ブロックしているが
実際には非同期で動いており裏で別のgoroutineにスケジューリングされている
そしてその読み込みや書き込みが可能となると
見かけ上だけ同期ブロックしていたところへスケジューリングが戻る仕組みであってGoは常に非同期に動いている
577デフォルトの名無しさん
2022/09/05(月) 22:30:51.53ID:oqoL/iqD
ユーザーに見せてるのは全てブロッキングなコードなわけじゃん
それをgoキーワード使って複数立てた時に非同期で動くって話で、単体の場合はあくまでも同期的に動くよね

mainルーチンでhttp.getってやったら同期的に動いてるよね?
これを別のgoroutineを立てて複数立ち上げればブロックする後は勝手に非同期で動くってだけの話

async汚染はユーザー目線で言ってるね
Goのモデルは既存のコードや構造に手を加えずに一部だけを非同期にするのが容易、これが一つのメリットではあると思う
578デフォルトの名無しさん
2022/09/05(月) 22:40:11.19ID:oqoL/iqD
Node/Denoの作者も同じこと言ってるし、async/awaitモデルの方が優れている一言も言ってないな
むしろGoのモデルをほめてるわ
https://mappingthejourney.com/single-post/2017/08/31/episode-8-interview-with-ryan-dahl-creator-of-nodejs/

必死にasync/awaitの方が優れてるとか言ってるみたいだけど、逆にGoのモデルの方が使いやすいって人もいるわけだよ
自分の意見が全てだと思わない方がいいんじゃないかな
感覚的な話で優れてるって言われてもね
579デフォルトの名無しさん
2022/09/05(月) 22:48:10.04ID:bm2FICIw
>>577
> ユーザーに見せてるのは全てブロッキングなコードなわけじゃん

それは見かけだけだな
例えば>>574
| await asyncfunc1()
| await asyncfunc2()
| await asyncfunc3()
これも(同じく見かけだけ)全てブロッキングな同期で実行されるコード
そしてGoと同様に実際には裏で非同期に動く

> 単体の場合はあくまでも同期的に動くよね

それは見かけだけ
つまりasync/await対応言語がawait文で見かけだけ同期的に動いているように見せかけるのと完全に同じ
580デフォルトの名無しさん
2022/09/05(月) 23:00:13.19ID:oqoL/iqD
うんだからユーザーに見せるコードが同期的なことろがわかりやすくて良いって言ってるんだけど?最初その話してたよね?同期的なコードって言ってるよ?
裏でepollやら使ってて非同期だから云々の話はしてないんで
ちなみになんでいちいちID変えるの?
581デフォルトの名無しさん
2022/09/05(月) 23:32:28.26ID:9iTWKe04
>>576
>見かけ上だけ同期ブロックしているが
>実際には非同期で動いており裏で

んなこと言ったらIO操作のあるあらゆる言語が低レベルでは非同期で動いてるじゃんよ。
582デフォルトの名無しさん
2022/09/05(月) 23:43:38.07ID:iWQD5HeB
C10K問題から非同期が流行ったのに、メモリーを使いまわしてたら意味ないのでは?

一つのスレッドに一つのスタック、典型的に一つのスタックは1MB準備される。
10Kのスレッドがあれば、10GBのメモリーが必要。
256MBのSUNでは無理。

でも、非同期でも1MBの配列を用意してデータが届くたびに書き足していくなら同じことでは?
583デフォルトの名無しさん
2022/09/05(月) 23:47:49.38ID:iWQD5HeB
ウェブ・サーバーが静的なファイルを送り出していた2000年ごろなら非同期が大それた力だっただろうけど。

全てが動的な現代において、非同期はめんどくさいだけなのでは?
584デフォルトの名無しさん
2022/09/05(月) 23:53:52.32ID:YaRYiHc+
昔より回線が安価になって接続数が多くなったんだから非同期が必要でしょ
585デフォルトの名無しさん
2022/09/05(月) 23:56:02.82ID:iWQD5HeB
どういうことですよ?
586デフォルトの名無しさん
2022/09/06(火) 00:05:01.14ID:btul1bBo
静的なファイルを送るだけなら。

カーネルの送信バッファが空くのを待つ

送信バッファと同容量だけ非同期にファイルの読み込みを開始する

ファイルデータが読み込まれると、送信を開始する

最初に戻る

この手順で、典型的なTCP通信なら20KB以下のメモリーで足りる。
でも、動的なコンテンツ生成では、そうはいかないのでは?
587デフォルトの名無しさん
2022/09/06(火) 00:56:32.90ID:jgCBXC4T
ヒント:httpは同期通信
588デフォルトの名無しさん
2022/09/06(火) 01:32:17.99ID:h7zKo1Kf
>>563 のここがよく分からない

> まともにマルチコアのCPUの性能を引き出せるのはSIMD命令を使った計算のみ

SIMD命令付きのシングルコアCPUもあったじゃん。
古いけど MMX Pentium とか Pentium III とか。
この時代はSIMD命令は何を引き出してたの?
589デフォルトの名無しさん
2022/09/06(火) 02:05:21.99ID:haU306kC
>>566
1なんか一つのgoroutineに上から並べるだけで良いじゃん。
590デフォルトの名無しさん
2022/09/06(火) 02:06:28.41ID:haU306kC
えっ?もしかしてこの人
>>574
でもまだ理解してないの?
591デフォルトの名無しさん
2022/09/06(火) 03:40:36.05ID:4pNI/aXz
>>587
httpを同期で実装するなんて昔のダメなシステムと完全ブロックしても困らない末端クライアントだけたぞ
httpクライアントとして動作する時もサーバーで使うなら同期ブロックしてしまうとスレッド資源を無駄に専有
だからhttpを使うなら何らかの非同期にするのが当たり前
592デフォルトの名無しさん
2022/09/06(火) 06:52:34.65ID:JHpT8XfS
>>574
多くの言語でasync/awaitキーワードだらけになって反吐が出る気分だわ、これを良いと考えた人たちを殴りたい...
goにpromise/futureなんて絶対不要、こんなの必要だと思ってる人相当アホやぞ

>「Goは最初から全てがasync汚染されているためasync汚染に気付かずに済む」が正解
なるほど意味わからん
asyncキーワードなんて無いのにスケジューリングで同期実行されるから汚染?ww新理論w
593デフォルトの名無しさん
2022/09/06(火) 08:04:56.91ID:g0koBBSB
>>566
1なんてそのまま関数並べるだけだし
2はN件goroutine立ち上げてたらN回チャネル待ち受ければいいだけだよね
タイムアウトもselectで容易に実装できる

100%デッドロックするとか言ってるけどそれはGo超初学者が使った時の話かな?
仮にデッドロックしても検知機構働いてちゃんと落ちるし何が言いたいのか
594デフォルトの名無しさん
2022/09/06(火) 10:57:52.38ID:ItiT2cL1
>>588
その時代のことはよく知らないので
気になって調べてみたがwikipediaによると
2クロックで実行するという実装になっていた模様
なのでその時代に関しては128ビット幅のレジスタを使えるというアドバンテージしかなかったとのこと
595デフォルトの名無しさん
2022/09/06(火) 11:23:36.25ID:7Nc33VtP
>>591
通信プロトコルとhttpサーバー/クライアントの実装が区別できないおバカさん乙w
そんなんでよくGoなんて使えるな
596デフォルトの名無しさん
2022/09/06(火) 14:37:15.63ID:ax+JnAgH
今回は実装の話だからサーバー上なら今どきは非同期で実装で合ってると思うよ
597デフォルトの名無しさん
2022/09/06(火) 16:35:51.33ID:E35zydsp
>>596
文脈読めないおバカさんその2乙w
598デフォルトの名無しさん
2022/09/06(火) 16:56:04.53ID:rOGll//o
>>593
その通りだな、安易に実装できるものを標準で欲しがる理論がわからんわ
多くの言語のfutureなんてデータの結果受信同期待ちが起こるだけだし、goのcontext.WithTimeoutは
他の言語では全く実装できていないfutureのプラス機能のようなもので、goはより進んでいると言える
一方promise的なもの、つまり複数のgoroutineを束ねて制御したい人は、欲しい人もいるかもしれないが
goで書いたpipeline処理は手動で書くからこそきめ細かい制御が出来るので、無作為にこれとこれを並列、
これとこれを非同期だけど同期的に実行にしたいとか、効率を考えたらこの流れを組み替えられることには
ほとんど意味もないね。
例えばJSでPromise.allとかすべてを非同期並列に実行して成功の可否で分岐したいなんて、同じ状態が
goroutineとチャネル待ち受けで出来てしまうわけで、それを仰々しいライブラリにする意味が分からん
599デフォルトの名無しさん
2022/09/06(火) 17:02:41.68ID:rOGll//o
上では良いことだけ書いたけどif err != nullはもうそろそろダルいので何とか手を打ってほしいわ
副作用のある関数ではgoの第二の戻り値がerrなのは、もはや言語仕様なので別言語でいう
Option/Result/Eitherみたいなものは必要ないにしても、?.のようなNull条件演算、合体演算
のようなErr条件演算が欲しい
600デフォルトの名無しさん
2022/09/06(火) 18:25:37.98ID:rAtefbER
きめ細かい制御してるか?
goのモデルは良くも悪くも作った水路に水を流すだけで、実際にその中のどこでどのようにブロッキングが発生するかは気にしないのが正しい使い方
どっちかというとpromise系のほうが制御は明示的だよ
601デフォルトの名無しさん
2022/09/06(火) 20:30:57.65ID:haU306kC
きめ細かいGoのpipelineって、もしかしてGoあんまり書けないのでは…?
ランタイムの大勝利な事の方が多いぞ。
602デフォルトの名無しさん
2022/09/07(水) 08:09:00.20ID:KZnrapZJ
きめ細かいでしょう?
チャネルが1個なら並列性が1つでブロッキング出来るし、並列性を持たせたいなら複数のチャネル幅を
用意すればいいだけ1段目のパイプライン処理が終わったすぐ後に、次段のパイプライン処理を普通に書く
ことができるし、sync.WaitGroupを使えばパイプライン中の中間データへ同期制御もできる
それ以外にGoで書かれた多くの優れたパイプライン処理は、キャンセルを考慮している。
ブロッキングが発生するかは気にしないなんて事はなく、チャネルのselectでブロッキングが入ることは普通に
当たり前だから気にしないだけ
https://go.dev/blog/pipelines

世にある多くのpromiseはキャンセルやタイムアウトは考慮していない場合が多い、All or Nothingでしかない
大雑把な実行制御でしかない。多くは流れるようなデータの受け渡しもできない。
実行順を決めるだけで、特定の処理に多重度を持たせるとかそんなことは出来ない
これは多くがpromiseというものが非同期処理をベースにした疑似的な実行順制御の仕組みだけであるから
603デフォルトの名無しさん
2022/09/07(水) 13:37:16.25ID:ossJLtb4
>>599
nullじゃなくてnilな
604デフォルトの名無しさん
2022/09/07(水) 16:59:11.50ID:GTdTGsfv
>>598
そもそも、複数のgoroutineを束ねて使いたいという要請でsync.WaitGroupは作られてるから、自前で作る意義すら無いんだよな
グループを待つ、のだから
605デフォルトの名無しさん
2022/09/08(木) 16:15:42.84ID:+22QbHY9
>>593
だからその程度のことしかしないのにわざわざゴルーチンだのchannelだのselectだのを書かなきゃいけないことがだるいと言う話だよ?
書けるか書けないかで言ったらそりゃ書けるでしょw
あと普通に刺さる可能性が高いと言うことを言ってる
606デフォルトの名無しさん
2022/09/08(木) 22:55:49.37ID:AWp4/fcz
ホントにGo書けないんじゃないの…?
607デフォルトの名無しさん
2022/09/09(金) 08:28:18.12ID:5SEsta+Y
意味わかんね

>>566 では promise の利点をこう書いてた

> 1と2についてはpromiseで全て安全に楽に実装できる
> ゴルーチンとchannelを使った実装なんか考えたくもない
> 100%デッドロックが起きる

それに対して >>593>>598 が goroutine とチャネルで簡単に実装できるって言ったら >>605

> わざわざゴルーチンだのchannelだのselectだのを書かなきゃいけないことがだるいと言う話だよ?

「だるい」なんて話、一切してなかっただろ。
608デフォルトの名無しさん
2022/09/09(金) 11:21:59.96ID:8m5pePL+
>>607
マジでアスペか?
promiseの方が明らかに楽でバグが生まれない
これはこれまでの議論の流れで一貫してる主張

なんでリクエストのデータ受け取るのにgoルーチンだのchannelだのselectだの書かなきゃならんのだよ

そしてpromiseを実装するのは我々ではなくGoコンパイラの開発者たちだよ
609デフォルトの名無しさん
2022/09/09(金) 12:35:07.97ID:OI70qo+4
promiseって普通awaitするのが普通だよね?
goもチャネルも使わない状態でhttp.Get呼ぶのと全く同じだよ

goroutineの中で実行すれば勝手に非同期になるしfork joinしたいならチャネルがwaitgroup使うだけの簡単なお仕事
610デフォルトの名無しさん
2022/09/09(金) 12:39:54.70ID:ppztOn1H
>>608 >>607
まずは「goroutine&channelだと100%デッドロックが発生してpromiseだと発生しない状況」について戦えよ。

だるいとかより興味あるわ。
611デフォルトの名無しさん
2022/09/09(金) 13:19:10.61ID:WCKL/dzA
>>608
「promiseの方が明らかに楽でバグが生まれない」
そんな統計は1つもないければ、あなたの貧相な頭の中だけですよね?それを証明しなさいと暗黙的に問われているのがわかりませんか?

「なんでリクエストのデータ受け取るのにgoルーチンだのchannelだのselectだの書かなきゃならんのだよ」
じゃあなんで、promiseなんていう出来の悪い非同期処理のために作り出された愚物を、真にマルチプロセスに対応するgoで
エミュレーションしなきゃならないんですか?あなたのためだけですよね、ほとんど誰も欲しがっていませんけど?
このような需要がない機能を、標準ライブラリに求めるものではありませんし、あなたの隠れた真の心は
「学ぶことをしたくない」だけでしょう、ご自分でも気づいてないと思いますが
C#やScalaあるいはJSしか出来ないなら素直にチームに報告しましょう、あなたのやる気を引き出すためだけに我儘を際限なく
広げても誰も理解してくれませんし、当然、味方にもなってくれないでしょう。だってやる気が無いんですから。
言語の基本的な考えが違うのに、他の言語に似たような雰囲気を求めるのは間違っていますし、なおかつ結局同じコードを
書いてしまうなら乗り換えるような利点をすべて消し去るでしょう

「そしてpromiseを実装するのは我々ではなくGoコンパイラの開発者たちだよ 」
実装しないと思いますね、あなたのゆがんだ考えでは超保守的なgoチームを説得するのは無理でしょう。1つも有益な
調査結果なり、推測なりが述べられていません。あなたが「ルーチンだのchannelだのselectだの書かなくちゃならない」と
我儘を言ってるようにしか見えません。仮に万が一億が一、必要だとしてもGithubに個人実装のライブラリとしてあるでしょう
612デフォルトの名無しさん
2022/09/09(金) 13:32:44.23ID:eDV4BhqD
まあasync/awaitのほうが初心者に対するハードルは低そうな気はする
初心者が雑にchannel使ってるとたいていバグってるわ
613デフォルトの名無しさん
2022/09/09(金) 13:34:32.33ID:KNCe5V0g
async/await手軽で簡単だけど複雑なことやろうとすると難しい
Goroutineとchannelはasync/awaitと比べると確かにとっつきにくいが複雑のことも組み合わせで上手く実現できる応用力がある
614デフォルトの名無しさん
2022/09/09(金) 14:08:59.93ID:+r9uXbjm
>>611
そういうストローマン論法は俺には通用しないって
615デフォルトの名無しさん
2022/09/09(金) 14:53:32.39ID:5SEsta+Y
promise の利点まとめ

- goroutineとchannelを使うと100%デッドロックが起きるが promise だと安全に実装できるものがあるらしい。具体例は不明。
- >>605 にとってだるくない。
616デフォルトの名無しさん
2022/09/09(金) 15:05:25.55ID:+6O98yvA
非同期で順列な処理やる場合はasyncのがわかりやすい
並列にタスクいっぱい撒いてなんかやるみたいなのはchannelって印象
617デフォルトの名無しさん
2022/09/09(金) 15:59:29.38ID:WCKL/dzA
promiseに似てるけど、全く違うものはerrgroup.Groupと呼ばれます。これもpromiseなんぞと比べれば
コンテキストなどと組み合わせキャンセルやタイムアウト処理が容易にできますし、実行順の制御や包括した
エラー処理以外にパイプラインまで簡単に拡張できます。

例1:ページをフェッチして全ての処理が終わるまで待つグループ制御(1つでもエラーならエラー処理)
https://pkg.go.dev/golang.org/x/sync/errgroup#example-Group-JustErrors

例2:単純な並列タスクを同期するためのグループ制御
https://pkg.go.dev/golang.org/x/sync/errgroup#example-Group-Parallel

例3:多段ステージを設けたパイプライン処理をグループ制御
https://pkg.go.dev/golang.org/x/sync/errgroup#example-Group-Pipeline

例1、例2はJSでいうPromise.all() のような動きをしますがpromiseなんていう融通の利かない非同期のため
だけの劣った機能より格段にシンプルな仕組みです。
上の例でいえば、並列タスクなどではchannelを使用せず、複数起動された軽量ルーチェンから元ルーチェンへ
results配列の結果を戻していますが、これは並列タスクが一段で終わるからです。
次の(例3の)pipeline処理にあるように、並列と並列が連鎖する多段処理においてはchannelのような
仕組みを使うのがとても合理的です。もちろん、処理の終わりの同期のために、selectによる結果受信待ちは
入りますがこれはデットロックではありません

もともとJSのPromiseがなぜあるかといえば、同じプロセス空間で疑似的な非同期処理による実行制御を行うため
だけの仕組みです。このため、特定の変数(結果を格納する配列や変数)に同時にアクセスされるという考えは
ありませんし、そのような(ロックや待ち)制御は必要ありません。現実に同時に動いていないのですから

隣国のアジア人コミュニティに「ストローマン論法」という言葉を連呼するキチガイ集団がいましたが、本当のバカだった
618デフォルトの名無しさん
2022/09/09(金) 18:31:46.48ID:RxEWaepL
結局何がChannelに無くて、何がPromiseでしか解決できない問題なの?
Promiseを解決せずに持ち回ること?
619デフォルトの名無しさん
2022/09/09(金) 23:05:27.12ID:zn1Qb1Bt
>>617
例1がすでに全然シンプルじゃないw
しかもレスポンスを返さない例で意味ないww
それ以外にも落とし穴満載

現実にこんなコード書いてるやつばっかりならバグりまくってヤバそう
620デフォルトの名無しさん
2022/09/10(土) 05:44:14.74ID:z/endEmr
やはり頭がバカ以前のGより脳が小さい、上の人はサンプルをシンプルだとは上でも言ってないが
errgroup.Groupがシンプルだと言っているのに、頭ヤバそう
まあサンプルは十分シンプルだが、レスポンスが要らない事など世の中にいっぱいある

現実にこんな奴がいることは、goより複雑な言語特性や膨大な標準ライブラリを持つ言語を
チーム開発で使えるか、大変考慮すべきことだろうな
621デフォルトの名無しさん
2022/09/10(土) 06:14:16.74ID:JxBHu2/s
#Gopherくんの国葬に賛成します
622デフォルトの名無しさん
2022/09/10(土) 06:49:15.74ID:0VnbKdes
ストローマン
623デフォルトの名無しさん
2022/09/10(土) 09:36:19.36ID:hVWagXFo
まずは基本的に、シングルスレッドの場合とマルチスレッドだが共有データを使用しない場合は原理的に
データ競合や排他制御のバグは発生しない。
>>611が「promiseの方が明らかに楽でバグが生まれない」と言っているのはそのどちらかに帰着するケース。
マルチスレッドでかつ共有データを扱うケースではpromiseを使おうが競合バグは発生し得る。
624デフォルトの名無しさん
2022/09/10(土) 10:19:58.24ID:wD6Hc2YL
シンプルシンプルw
625デフォルトの名無しさん
2022/09/10(土) 10:24:38.51ID:LoWL2Dfj
壺買えばシンプルに見えるよ
626デフォルトの名無しさん
2022/09/10(土) 10:34:19.91ID:JxBHu2/s
ストローマン連呼する人が最近5chで増えたと思ったけどこの動画が原因なのねん

627デフォルトの名無しさん
2022/09/10(土) 14:08:04.25ID:t/MG+nKm
そもそもGoは何もしなくてもマルチスレッドなんよ。
IO待ちとかしたら勝手に他の事しよるよ。awaitなんかしなくても。
だからFutureやPromiseで結果が来る事を持って回るんじゃなくて、
そもそも処理するロジック自体を複数起こしちゃうんだよ。。

これだけの事をいつまで言ってんのよ。。
>>617
の例1がどうして一気に複数リクエストを送りたいかと言うと、その三つを同じ一つの処理で使いたいからであって、
三つの同じ処理を起こすんであればWaitする必要も無いのでは?
それこそchanで受け取れば良いんだし。。
628デフォルトの名無しさん
2022/09/10(土) 17:44:57.86ID:xFpfY3aA
JSのPromiseしか知らないんだな
そりゃ話が噛み合うわけがない
629デフォルトの名無しさん
2022/09/10(土) 20:27:53.18ID:hVWagXFo
JS以外のpromiseだとどう違うって?
630デフォルトの名無しさん
2022/09/10(土) 21:23:42.19ID:iWyUjfem
内容ゼロのワイ賢者や煽りに煽りで返すスタイルwww
631デフォルトの名無しさん
2022/09/11(日) 01:29:37.61ID:VONtFQ6w
藁人形♫
632デフォルトの名無しさん
2022/09/13(火) 07:00:51.39ID:Rg9hdag/
韓国人の口癖、ストローマン論法という逃亡手段
633デフォルトの名無しさん
2022/09/13(火) 18:17:36.41ID:Ma8GSz9P
ストローマンって本題から離れた部分を、わざと誤解して上げつらう詭弁の手法だから、自己紹介してるんだよ
634デフォルトの名無しさん
2022/09/14(水) 11:14:58.88ID:xpCSG28g
うぬぬぬぬ、issueに送るべきだろうか?

1、「ポインタの」レシーバーでストリンガーを記述すると、fmt.Println()とかに渡してもString()メソッドは呼んでくれない…

2、そして(str{v: 1}).String()とか記述するとコンパイルエラーになる…

変数に一旦格納してからのs.String()は、仕様から(&s).String()と解釈してくれて通る
635デフォルトの名無しさん
2022/09/14(水) 11:17:52.77ID:xpCSG28g
>>634
あ、1は実体を渡すと
636デフォルトの名無しさん
2022/09/14(水) 11:22:55.99ID:xpCSG28g
>>634
コードサンプル

https://go.dev/play/p/cnLcXtFFQ4j
637デフォルトの名無しさん
2022/09/14(水) 11:33:39.56ID:xpCSG28g
>>634
この辺(レシーバー)の仕様って、訳してみると何かガバッてるように思えてならないんだよなぁ
638デフォルトの名無しさん
2022/09/14(水) 11:40:44.99ID:xpCSG28g
>>634
実体のレシーバーはレシーバー内のフィールドを更新しても反映されないから、レシーバーはポインターとして書くのが定石だけど
ストリンガーだけ実体のレシーバーとして書けば回避できる
回避できるなら放置でもいーじゃん?とか言われると反論しづらい
639デフォルトの名無しさん
2022/09/14(水) 15:53:22.22ID:xpCSG28g
>>638
ポインタのレシーバーを記述していると、インタフェース型変数には実体は代入できずポインタでなければならない
という制限もイミフ
代入可能性の仕様は単に、xがインタフェースTを実装していること
実体でもメソッドセットx.String()とx.Str()は呼び出せるのだから実装されている、とは「ならない」事から上記の制限がイミフと言ってる

本当に仕様が厳密じゃなくてガバガバ
大真面目に仕様書を読み込んでる俺の純情を返せ
640デフォルトの名無しさん
2022/09/14(水) 16:03:17.92ID:xpCSG28g
>>639
セレクタ式で実体からポインタレシーバーを呼び出すと&xと解釈されるという仕様が、インタフェースの代入可能性には波及していない、という点でコンパイラのバグと難癖つけられるんじゃないか?
とissueに書いてもいいんじゃないか?という多分にメンドクサイ系おじさんの怒り

仕様書にどう書かれていようが、インタフェースに実体を入れようとするな!で済む話ではあるかも

最終的には「仕様書は信用するな」に帰着
641デフォルトの名無しさん
2022/09/14(水) 17:25:20.47ID:e1B1zDJm
インターフェース型変数という訳のわからないものを導入したのがそもそもの間違いなんだよな
642デフォルトの名無しさん
2022/09/14(水) 20:14:22.35ID:KrdCg/Z1
で、なんでそんなもんを導入したかというとそもそもジェネリックスがなかったから
「ジェネリクスがなくてもプログラムは書ける(キリッ」みたいなイキりにこだわって結局かえって醜いことになるっていうまるでド素人みたいな失敗
643デフォルトの名無しさん
2022/09/14(水) 20:52:01.05ID:OtPAbKwR
一人で喋ってる怖い
644デフォルトの名無しさん
2022/09/15(木) 09:41:05.37ID:zCeWb7Zl
理解できないから人格攻撃に出るあたり、お里(国)が知れるというもの
645デフォルトの名無しさん
2022/09/15(木) 10:04:39.44ID:I85rKOcV
いきなり国がどうとか言い出す人って日常会話出来るのか気になる
646デフォルトの名無しさん
2022/09/15(木) 22:29:29.36ID:zCeWb7Zl
インタフェース変数は普通に色々な言語にあるだろ?
そこにケチをつけるのは筋が悪すぎるのではないか?
647デフォルトの名無しさん
2022/09/16(金) 15:06:43.28ID:rsr6X2sj
ないわw
空インターフェースとか訳がわからんわ
648デフォルトの名無しさん
2022/09/16(金) 16:29:46.84ID:AcRFw2zF
>>636
1. &elem2{}で渡してるのに、func (e elem2) String() stringなんて呼び出すわけないじゃん?どういう事?
2. func (s *str) String() string で普通は定義するので、同じように呼べないからコンパイルエラー
もっと言えば、s := str{}にしても (*str).String(&s)とコンパイル時に解釈されるだけで呼んでるのはポインタメソッド

下のインタフェース型変数云いいは、全く理解ができていないで我儘いってるだけで読んでる人に伝わってないし
マジ何が言いたいのかサッパリ...
goの仕様ほど厳格なものはないと思うけど(比べるのはC/C++や2015年代以前の言語ね、2016年以降の言語と
比べても、いまだに詳細なメモリレイアウトさえ公表できない某錆より厳格だ)本当に大真面目に読んでる?
golangを始める必要性に駆られて、こんな簡単な入門初めのプログラムでケチ付けたいだけじゃ?
issue書いても良いけど、保守的なgolangメンテナーに絶対相手にされないよ
649デフォルトの名無しさん
2022/09/16(金) 16:48:33.54ID:2lkKV8fn
>>648
ちゃんとコードを読みなよ
elemはポインタレシーバーで実装、elem2は実体レシーバーで実装
そしてポインタレシーバーでストリンガーを書くと、fmtパッケージとかでは認識されないケースがあるってサンプルコードよこれ

つまりあなたの主張する func (e *elem)String() string という「普通の定義」では動かないケースを示している
実行してみ?俺も「普通の定義」だと思っていたからこそのレスなんだから
650デフォルトの名無しさん
2022/09/16(金) 16:58:05.87ID:2lkKV8fn
func (e *elem) String() string
と書くとストリンガーとして認識してくれないと説明して
サンプルコードまで載せて確認を求めてるのに
実行すらしてもらえないとは
651デフォルトの名無しさん
2022/09/16(金) 17:11:32.64ID:fXetx5ML
仕様書にポインタ変数.は勝手に*(ポインタ変数).

に変換されるとか書いてあるけどインターフェースでも行われるってのはどこに書いてあるの?
652デフォルトの名無しさん
2022/09/17(土) 02:32:12.33ID:z62v58Fz
>>651
ない
むしろ、インタフェースを実装しているという定義が、全てのメソッドセットを満足している、という程度しか書かれていない

あれ?仕様書だと逆に値は (&x).xxxx に変換されるとしか書かれてなくなかったか?後で確認してみる
653デフォルトの名無しさん
2022/09/17(土) 02:40:37.19ID:z62v58Fz
ポインタと値レシーバーは特に注意しなくても相互にセレクタとして呼べるんで気にしていなかったんだけど、ポインタでストリンガーを書いたらfmtパッケージの関数では認識してくれなかった
んで、これは不味いと総当たりで確認してみた

しかし、単に自分の勘違いかなと確認コードを公開してみて、レビューを求めている←イマココ
654デフォルトの名無しさん
2022/09/17(土) 02:47:40.39ID:z62v58Fz
まだfmtパッケージの中は見ていないけど、ポインタレシーバーで書くと型スイッチかリフレクションではインタフェースを満たしていないと見なされたりするんじゃないか?とか不安になってきた

上でも書いたけどfunc (e *elem)String()は自分も「普通の」書き方だと思ってたんで
655デフォルトの名無しさん
2022/09/18(日) 09:35:57.42ID:Ymh3f8Pk
な、仕様なんてこいつ読んでないだろ?5chぐらいでしか自分の連投でしか意見言えない
issueとかこいつは言ってみただけでそれすら出来ない
656デフォルトの名無しさん
2022/09/18(日) 09:58:37.38ID:pgs2ObNe
>>655
そいつ次世代言語スレで機能精神崩壊してたんだぜ

自分のRustの実力(知ったか)で仕事にありつくのが難しいと観念して これからはGoに粘着するよ

ここが新しい 隔離スレ よろしく頼む
657デフォルトの名無しさん
2022/09/18(日) 10:43:21.71ID:d4i41YBr
理解できない

・ポインタでストリンガーを書いてしまうと動かないケースがある
・実例をプレイグラウンドで上げたから間違っていたなら指摘してくれ

に対しての回答になってない
これこそ関係のない些事を上げ連ねて議論を避けるストローマン話法の典型じゃね?
658デフォルトの名無しさん
2022/09/18(日) 11:17:33.27ID:6lT6OUda
Promise最強ストローマンおじさんw
仕様書なんて読んでないんだろ?そもそも英語読めないから読んでないどころか読めないんでしょ?w
659デフォルトの名無しさん
2022/09/18(日) 22:39:49.75ID:ds+slurx
なんか勘違いしてるけど相互運用ではないよ

レシーバが値のメソッドはポインタと値に対して呼び出すことができるが
ポインタのメソッドはポインタに対してのみ呼び出すことができる

これは仕様書に書いてある
660デフォルトの名無しさん
2022/09/18(日) 22:48:21.16ID:YN5s6Pjv
>>659
これで全部解決しててワロタ
二度と喚き散らすなよ
661デフォルトの名無しさん
2022/09/19(月) 08:13:25.10ID:uG07qrUI
>>659
んにゃ
「メソッド呼び出しと同様に、アドレス指定可能な値を用いたポインタレシーバーによる非インタフェースメソッドへの参照は、自動的にその値のアドレスを取りますのでt.Mpは(&t).Mpと等価になります」Method values より
とあるよ
662デフォルトの名無しさん
2022/09/19(月) 08:20:33.46ID:uG07qrUI
>>659
As with method calls, a reference to a non-interface method with a pointer receiver using an addressable value will automatically take the address of the value; t.Mp is equivalent to (&t).Mp.
のトコね
誤訳してるなら指摘してくれな
663デフォルトの名無しさん
2022/09/19(月) 08:24:13.55ID:uG07qrUI
まあ、こんな感じにぜーんぶ読み通さないと系統だった仕様の把握ができそうにない、という点で、かなり品質は良くないんよ
これ、どっちが優先されるの???という話が多すぎて、実際に試行するとアレ?となる
664デフォルトの名無しさん
2022/09/19(月) 08:35:15.69ID:uG07qrUI
仕様書の全訳に挑んでオカシイとサンプルコード書いて確認してみてレスしてるのに
仕様書を読んでない奴がそのサンプルコードをRunすらせずに、お前が勘違いしている、とか
へそで茶わかしていいでしょうか?
665デフォルトの名無しさん
2022/09/19(月) 08:42:10.25ID:Uuvgp4zf
>>662
いや、それ暗黙的にポインタに変換してるからポインタに対して呼び出してるよね?
理解できてる?
666デフォルトの名無しさん
2022/09/19(月) 08:45:47.87ID:wNLDibxP
>>664
なんだ英語読むのに苦労してる人か

そういう人が日本語訳に取り組むと迷惑

オカシイところがあると言うなら原文の方にPR出せ
667デフォルトの名無しさん
2022/09/19(月) 08:51:12.18ID:Uuvgp4zf
はいサンプルね
interfaceはポインタレシーバーだとポインタ変数しか代入できないのに対して
メソッド呼び出しは全部成功しているよね?

https://go.dev/play/p/X71811pJ1sQ

メソッド呼び出しとインタフェースの仕様を混同しているから話にならない
英語読めない文盲ってことが証明されたな
668デフォルトの名無しさん
2022/09/19(月) 13:12:10.62ID:TLnbUxjm
>>667
わかってないふりしてるけどもう理解できたんだろ?
インターフェースのマッチ時のメソッド呼び出しについては>>659
明示的に呼び出す場合は>>662で変換される
(自分で呼び出すのだから当然インターフェース云々とは無関係)
669デフォルトの名無しさん
2022/09/19(月) 14:35:47.93ID:DYtWz9pX
言語的にケチ付けたいだけでしょ?
http://hissi.org/read.php/tech/20220914/eHBDU0cyOGc.html
http://hissi.org/read.php/tech/20220917/ejYydjU4Rno.html

こんなに一生懸命書く奴がほかに書き込んでない訳ないわ、またいつものRustかC#かアホみたいな他を攻撃する信者のオッサン
670デフォルトの名無しさん
2022/09/19(月) 14:40:24.76ID:TLnbUxjm
でもGoの知識増えたしいいんじゃない?
育成は成功だ
671デフォルトの名無しさん
2022/10/14(金) 13:17:00.05ID:5TqK6JoH
https://twitter.com/anicolaspp/status/1579960864639455232

Googleにやる気がなさすぎる
https://twitter.com/5chan_nel (5ch newer account)
672デフォルトの名無しさん
2022/10/14(金) 13:31:24.87ID:ei3T0+vp
Rustでもないのか
673デフォルトの名無しさん
2022/10/14(金) 19:27:35.90ID:BY1P2csp
Googleのたかが1プロジェクトが C++で始まるからと言ってGoの終わりを感じ始めるなんてどういう審美眼で生きてんだよ。
674デフォルトの名無しさん
2022/10/14(金) 19:30:06.02ID:5TqK6JoH
>>673
そうなんだろうけど、言いっぷりがなんかちょっと引っかからんか
お前やる気ないんか?ってメンションしたいくらいだわしないけど(´・ω・`)
675デフォルトの名無しさん
2022/10/14(金) 20:40:12.25ID:B3yPY6eO
審美眼w
676デフォルトの名無しさん
2022/10/14(金) 21:08:37.72ID:lXZRrdjw
>>674
普通にリプで使われまくってるって言ってるが
677デフォルトの名無しさん
2022/10/15(土) 20:39:15.62ID:oepRuRjK
Googleってコーディングに関しては無茶苦茶保守的というか統制的だからな
開発者の好みより合理的判断を優先した結果だろう
そういう文化だからこそGoみたいな極右言語が生まれたとも言えるのだが
678デフォルトの名無しさん
2022/10/15(土) 21:16:18.42ID:i2DHISwU
数多の捨てられたプロジェクトに比べればGo言語は成功した部類だろうよ。
679デフォルトの名無しさん
2022/10/16(日) 20:12:43.19ID:rzkq3MMZ
オッス!オラGo!
680デフォルトの名無しさん
2022/10/16(日) 23:36:46.06ID:sPVu6wa4
オラGolang
いっちょやってみっか
681デフォルトの名無しさん
2022/10/19(水) 22:35:19.30ID:wI0tEVCM
なんでC++なんて使ってるんだよ
新プロジェクトで使う言語じゃねーだろ
682デフォルトの名無しさん
2022/10/20(木) 01:44:44.00ID:5E4liKFh
Googleは独自のビルドシステムなど過剰に最適化された開発環境を持ってるから、簡単に言語変えられないんだよ
683デフォルトの名無しさん
2022/10/20(木) 02:39:12.77ID:ce/AQgdF
いや、たんに仕事が雑なだけだとおもう
とりあえず新プロジェクトやるぞー!
で?言語は?
C++で。
あれ?ウチの会社なんか新しいのはGOでやるとかいってなかったけ?
そうだっけ?べつにいーじゃん、Goはマスコットきもいし、C++のほうが楽だから俺んとこはこれでヨロシク!
こんな感じだろう
684デフォルトの名無しさん
2022/10/20(木) 04:11:13.86ID:XisYbstq
RustじゃなくてC++なのが逆張りっぽくてキモい
685デフォルトの名無しさん
2022/10/26(水) 14:45:01.27ID:bQQxHwPn
Goは低落傾向だよな
686デフォルトの名無しさん
2022/10/27(木) 12:55:24.22ID:8IxaEUdi
Goの後は何がくるの?
687デフォルトの名無しさん
2022/10/27(木) 13:56:20.40ID:dR6kLI3k
Rock(´・ω・`)
688デフォルトの名無しさん
2022/10/27(木) 14:48:53.91ID:JD5Xibbr
Goの前はなんだったん?
689デフォルトの名無しさん
2022/10/27(木) 14:57:45.98ID:NvTdXXa8
PHPかRubyじゃね
690デフォルトの名無しさん
2022/10/27(木) 15:21:32.99ID:dR6kLI3k
C(しー)だろ(´・ω・`)
691デフォルトの名無しさん
2022/10/27(木) 15:51:18.10ID:JD5Xibbr
dR6kLI3k
超好き
692デフォルトの名無しさん
2022/10/31(月) 23:02:39.22ID:sD6lQxmd
Dが2001年、F#が2005年、Goが2009年(年はwikipediaに書いてあった登場時期)
うまく並びそうだなと思たんだけどEがない

Goの次はHack(2014年)で間違いないよね。
693デフォルトの名無しさん
2022/11/07(月) 21:16:50.51ID:CyGVtWq4
最小とか最大を求める関数は自分で作れって話なの?
あと、整数の絶対値とか
694デフォルトの名無しさん
2022/11/07(月) 21:23:29.28ID:Jjz79PGF
>>693
https://aiprogrammer.hashlab.jp/

Go language part 5 YouTube動画>1本 ->画像>7枚
このサービスは適切にライブラリ使ってくれるはずだから、
多分無いんだろうな
695デフォルトの名無しさん
2022/11/07(月) 21:46:44.70ID:FtLbuDZg
二分探索できたりする場合もあるからそういうライブラリはあえて作ってないんだと思われる
ライブラリ側で最適な実装で作れる場合はちゃんと用意されてることが多い
(http2とかDB周りとか)
696693
2022/11/09(水) 22:20:34.16ID:lnZKpzqz
お二人ともありがとうございます。
697デフォルトの名無しさん
2022/12/08(木) 18:39:09.15ID:uxR4Nxrs
windows環境でGoをアップデートするにはどうしたらいいでしょうか?
新しいバーションで上書きインストールしちゃえばいいんでしょうか?
698デフォルトの名無しさん
2022/12/08(木) 18:52:51.60ID:CQKYsqd2
Chocolateyでやってるのを見てみると、上書きっぽいけど
699デフォルトの名無しさん
2022/12/10(土) 13:20:48.86ID:tbDvYRlN
wingetUIであらゆるものを一括アップデート
700デフォルトの名無しさん
2022/12/10(土) 17:41:52.62ID:pF+bGi+J
GoなんかどうせWinネイティブで使う意味ないんだから、WSLでHomebrewでも使って入れたらいいんじゃない
701デフォルトの名無しさん
2022/12/10(土) 18:33:44.18ID:EIv2riio
暇だったから>>693を流行りのChatGPTに書いてもらった

Go language part 5 YouTube動画>1本 ->画像>7枚
702デフォルトの名無しさん
2022/12/10(土) 18:54:44.75ID:wODlVXAD
>>701
テストコードも書いてもらってみて
703デフォルトの名無しさん
2022/12/10(土) 19:02:48.17ID:EIv2riio
>>702
Go language part 5 YouTube動画>1本 ->画像>7枚
Go language part 5 YouTube動画>1本 ->画像>7枚
Go language part 5 YouTube動画>1本 ->画像>7枚

おもろいから無料βの今遊んどくことをおすすめするぞ
アセンブラ(65816)も書いてくれた
704デフォルトの名無しさん
2022/12/10(土) 19:27:57.88ID:EIv2riio
ちなみにChatGPTはセッション的に一連の会話を一時的に覚えててくれるらしいから、
二回目には同じ関数のコメントが省略されてる
関数の名前を明示すれば、「○○のテストコード書いて」でやってくれたかも
まあスレチだな
705デフォルトの名無しさん
2022/12/10(土) 22:11:37.20ID:44qA0nvq
>>703
テストケース考えるときの助けによさそうだな
たいしたもんだ
706デフォルトの名無しさん
2022/12/11(日) 20:52:12.36ID:5Jzg/4z6
Go言語はこの先生きのこれるのか?聞いてみたら面白いかもな。
707デフォルトの名無しさん
2022/12/11(日) 22:00:53.37ID:OomiNZje
あとゴーファーくんがキモいかどうか聞いてくれ
708デフォルトの名無しさん
2022/12/11(日) 23:59:02.05ID:E83NyA42
Go language part 5 YouTube動画>1本 ->画像>7枚
709デフォルトの名無しさん
2022/12/12(月) 00:36:12.57ID:lSFKnCD8
やはりChatGPTだめだな!
"かわいらしい外観が特徴で愛される存在となってる"
こんな回答では人類の知性にまだまだおよばない!
ただしい知性ある回答はこうだ!
"きもかわいい外観で一部のマニアックなgo開発者に愛されています"
710デフォルトの名無しさん
2022/12/12(月) 05:06:40.93ID:3lAXikmn
地元のマイナーなサッカーチームについて聞いたら「日本でも見逃すことのできないチームの一つ」とか適当に答えたぞコイツ
IT系以外は知ったかする
711デフォルトの名無しさん
2022/12/12(月) 10:35:46.50ID:+aBs88Ma
>>710
ITでも知ったかするよ
N88BASIC書いてもらったら大嘘な奴が出てきた
ちゃんと下げ親指ボタン押して運営にレポートするとよろし
712デフォルトの名無しさん
2022/12/12(月) 14:23:40.21ID:Sd/ABjr2
真面目な話、わからんことを素直に「それについてはわかりません」と言ってくれないのはかなりタチがわるいな
新入社員だったら要注意人物だよ
713デフォルトの名無しさん
2022/12/12(月) 15:22:25.27ID:+aBs88Ma
>>712
わかりません と答える場合もある
AI君がわかった気になってるだけ
更にタチが悪いけどもw

スレに沿って書くなら、エンジニアの仕事はまだまだ安泰だが、使いようによっちゃ楽はできる
って感じね
714デフォルトの名無しさん
2022/12/27(火) 22:42:29.20ID:zgwkOx1T
rainu/go-command-chain: A go library for easy configure and run command chains. Such like pipelining in unix shells.
https://github.com/rainu/go-command-chain
715デフォルトの名無しさん
2022/12/28(水) 10:01:43.96ID:/bZ5g76e
CLIの引数の読み取りするライブラリーは何がおすすめ?

kingpinは最近更新されてないからkong試してみたが
なんか使いづらい
ここに挙がってる他のやつ試そうかと思う
https://www.reddit.com/r/golang/comments/9uybnt/choosing_a_library_for_cli_application/

Neither, personally I like https://github.com/jessevdk/go-flags. I like the declarative approach a lot more than the imperative one used for many other options, and it's extremely feature-rich.
716デフォルトの名無しさん
2022/12/28(水) 10:02:39.35ID:/bZ5g76e
https://github.com/jessevdk/go-flags
717デフォルトの名無しさん
2022/12/28(水) 10:04:18.11ID:Vd7DA+tc
https://github.com/spf13/cobra
これ
718デフォルトの名無しさん
2022/12/28(水) 10:25:06.75ID:/bZ5g76e
>>717
Cobraはこんな感じのこと書かれてるけど
どんなコードを指してるのか分からん

kingpinは直感的に使える気がするけどメンテナンスされてない
問題なければこのまま使えば良いか?

Both cobra and urfave/cli both enforce a globals-heavy, inversion-of-control architectural pattern that's difficult to maintain.
IMO, Kingpin is the only widely-used CLI library that takes an appropriate architectural approach.
719デフォルトの名無しさん
2022/12/28(水) 18:14:44.71ID:Vd7DA+tc
>>718
読んできて判断すればいいじゃん。そんなに読めないものじゃないし使い方も難しくない。アーキテクチャはたしかに理想的ではないと俺も思ってるけど、利用面からの意見としては、、
実戦で使用されていて信頼できる
機能面でも多言語の相当品と同じことがまあまあの書きやすさで書ける。ただしやや歴史的機能があったりして隅々まで洗練されてるとは言い難い印象
コマンドラインの補完などほかの言語では少々保守が面倒な機能があって便利

っと思ってる。でもとにかく評判より自分で確かめたらいいよ
720デフォルトの名無しさん
2023/01/03(火) 22:07:17.76ID:nBTO23xG
cobraはサブコマンドを無限に生やすような大規模向け、Kubernetes/dockerで使用されてる。
そこまで拡張する予定がない場合はgo-flagsかもっとシンプルな mitchellh/cliかな?ちょっとオプションがあるだけなら標準?のflagsだろうけど、普通に*nixのfindぐらいオプションがあるならやっぱりgo-flagsがおすすめだわ
大した関連性がないのに1つのバイナリのサブコマンドになってるより、別プログラムのほうが設計もメンテも楽だしcobraが**とても**メンテしやすいという話だけど、それは変らない。
本当にそこまで多数のオプションで動きが変わるようなプログラムを作るのか?という自問自答が必要だと思う、いやcobraは良いと思うけどね
721デフォルトの名無しさん
2023/02/02(木) 11:00:03.89ID:aD0kITwS
https://go.dev/blog/go1.20
722デフォルトの名無しさん
2023/02/02(木) 22:07:10.87ID:u1Hba8Dd
正式版リリースされたんだろうね。
723デフォルトの名無しさん
2023/02/05(日) 14:04:47.63ID:hlR7Lbz4
ジェネリックスって、有名どころのOSSのライブラリで活用されたりしてるの?
それとも手遅れ?
ORMあたりでこねぇかな
724デフォルトの名無しさん
2023/03/03(金) 19:04:29.44ID:E2W0QKCP
Go言語でマイクロサービスの実装を解説してる書籍はありますかねえ?
725デフォルトの名無しさん
2023/03/13(月) 22:26:20.80ID:i1e+c7zN
>>475
今まさに使ってるよ
726デフォルトの名無しさん
2023/04/05(水) 05:10:28.93ID:DRPu7HQc
>>724
以下は、Golangを使用してマイクロサービスを開発するための書籍です。

"Goで学ぶマイクロサービス設計入門" - 田中 充史 著
  この本は、Golangを使用してマイクロサービスを設計する方法を解説しています。サンプルコードを使用して、マイクロサービスの作成、展開、スケーリングなどを実践的に学ぶことができます。

"GoによるWebアプリケーション開発" - 佐藤 幸一 著
  この本は、Golangを使用してWebアプリケーションを開発する方法を解説しています。マイクロサービスの設計と開発に必要な概念と技術を学ぶことができます。

"Goマイクロサービスパターン" - マテウス・カルステンス 著
  この本は、Golangを使用してマイクロサービスを実装するためのパターンを紹介しています。パターンに従って実装することで、マイクロサービスの堅牢性、柔軟性、スケーラビリティを高めることができます。

以上の書籍は、Golangを使用してマイクロサービスを開発する際に役立つ情報が含まれています。どの書籍も、実践的なアプローチを採用しており、Golangの基礎から応用まで幅広くカバーしています。

レス:1-200 201-400 401-600 601-800 801-1000 ALL

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

TOPへ TOPへ  

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


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

 ↓「Go language part 5 YouTube動画>1本 ->画像>7枚 」を見た人も見ています:
Go language part 1
Go language part 6
Go language part 2
Io Language
【普通のやつらの】 Arc Language 0 【上を行け】
Phalanger ~まさかのPHP派生言語~
【A.LANGE】A.ランゲ&ゾーネ part13
C++/TemplateMetaProgramming
Vue vs React vs Angular その2
Vue vs React vs Angular Part.4
Vue vs React vs Angular Part.5
バーチャルVISUALAUDIOプレヤー総合
Message Passing Interface (MPI) 統合スレ
Vue vs React vs Angular vs Svelte Part.8
Vue vs React vs Angular vs jQuery Part.3
Vue vs React vs Angular vs Svelte Part.10
【ワッチョイ有】Vue vs React vs Angular Part.5.5
Vue vs React vs Angular vs Svelte Part.11 (452)
【Erlang】プログラム言語 Elixir 【BEAM】 [転載禁止]©2ch.net (343)
Google Colaboratory
Cafe&Bar DINGO、神戸アニスト、詐岸建介 7
Google Cloud Platformでシステム開発
LAD @ AZ ★14
Borlandにはやられた...
OpenGL 2.0 専用スレ
gcc(MinGW)の良いところ
2024 SUPER FORMULA Lap6
Visual Studio 2019
flaskで掲示板を作りたいんだが
【MLB】LAD vs LAA 【大谷5番DH】
Visual Studio 2013 SP8
【PS/XB】Elden Ring エルデンリング part362
Visual Studio .NET 2002
Visual Studio 2015 Part4
Visual Studio 2012 Part8
Visual Studio 2019 Part4
processingで質問いいですか?
Visual Studio 2022 Part2
Visual Studio 2017 Part6
Visual Studio 2019 Part2
Visual Studio 2017 Part3
Visual Studio 2017 Part6
【hoge】メタ構文変数【foo】
Visual Studio 2019 Part3
Visual Studio 2017 Part4
【Lapillus】韓国女子B級アイドル雑談スレ136【FAINIT】
CMake - Cross Platform Make
【本命】Blazor スレ1【真打】
Mozilla Firefoxの浅知恵を報告するスレ
【計測】LabVIEW相談室【制御】
【Switch】Splatoon2/スプラトゥーン2 サーモンランスレ wave483
Visual Studio Code Extension
[Ampere]NVIDIA GeForce RTX30XX総合 Part373
プログラミング言語 Scala 11冊目
Borland C++ Compiler オ ワ タ
MacでもLinuxでも使えるVisual Studio Code
Visual Studio Code / VSCode Part9
グラフィック特化言語 Processingを語るスレ
Cygwin + MinGW + GCC 相談室 Part 3
Visual Studio Code / VSCode Part8
【Kotlin】Compose Multiplatform 1
Visual Studio Code / VSCode Part13
Visual Studio Code / VSCode Part12
Visual Studio Code / VSCode Part4
16:38:57 up 106 days, 17:37, 0 users, load average: 64.98, 62.73, 58.41

in 0.054275035858154 sec @0.054275035858154@0b7 on 080205