[過去ログ] Go language part 4 (962レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1: デフォルトの名無しさん [sage] 2020/11/16(月) 04:14:40 ID:fB5+0hxC(1/3) AAS
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
公式
外部リンク:golang.org
公式ドキュメント
外部リンク:golang.org
公式外パッケージドキュメント
外部リンク:godoc.org
ブラウザ上で試し書き
外部リンク:play.golang.org
※前スレ
Go language part 3
2chスレ:tech
938(1): デフォルトの名無しさん [sage] 2022/02/26(土) 06:42:38 ID:BX4iLvdt(1) AAS
>>937937(1): デフォルトの名無しさん [sage] 2022/02/26(土) 01:13:02 ID:kpnhrKVl(3/6) AAS
> そしてasync/await・Promise以前のtry-catchは使い物になりません。
これは言いすぎ。try-catchはろくでもないが、無いよりはましだし、同期でシングルデータならまあ問題ない。
だからGoもtry-catchでも良かったはずだが、採用してないところを見ると、
「多くの場合はtry-catchがgoroutineを跨いで使い物にならない」と思ったのだろう。
ゆうてもGo流の多値返しはCよりはまし程度で、それ以上でもないが。
ただ、try-catchがgoroutineを跨ぐ想定なら、
メインスレッドが仕事を起動し、各goroutineで子細の処理をこなす、マルチスレッドの構造を想定している。
非同期なら、メインスレッドはイベントループだけを担い、手が空いたgoroutineにその都度ジョブを発給する事になるけども、
この場合はジョブの起動はgoroutine内からで、try-catchは完全に機能する。
JSの場合はI/Oを非同期にする事を義務づけらてるからtry-catch内にI/Oが入った時点で意味を為さないし、大体このパターンだが、
Goの場合はI/Oも同期で書けるのだから、全く問題ない。
だからやっぱり元々の想定はマルチスレッドで、文法的には非同期も特に苦労せずに書ける、ってことだと思うのだけど。
(JS的な全面的非同期を想定していた場合は、try-catchを不採用にする理由がない。当時でも既にtry-catchが主流だった)
>>917
> RustはGoと同じくtry-catchを採用していないね
これ、今見たところPanic方式らしいが、もしかしてGo由来?
try-catchは好きな人は大好きのようだが、俺にはどうにもあれがいいとは思えない。
個人的には、リソース返却ならC#のusingが正解で、
リトライなら、大体元データが壊れてて無理で諦めるのでPanicで問題ない。(エラー通知だけ出来れば十分)
だからtry-catchは非同期では使えない過去の異物として消滅して欲しかったのだけど、
C#がasyncでも無理矢理try-catch出来るようにしたのでちょっと驚いてる。
そこまでしてtry-catchしたくもないし、する内容もないんですけど、ってね。
ある意味JSの「catchなんてしなくても何も問題ないです」というJavaから見れば卒倒しそうな仕様も、解の一つではあると見てる。
JavaScriptの非同期呼び出しでも普通は無視せずPromiseにcatch付けて捕獲するぜ
例: async_func_foo.catch(err => console.log(err))
あとRustの非同期呼び出しもResultが帰ってくるからエラーを捕獲できる
939(1): デフォルトの名無しさん [sage] 2022/02/26(土) 07:29:58 ID:xkMoRRzB(1/3) AAS
Goを叩く為にJavaScriptを使ってるだけで、JavaScriptの理解度かなり浅いなこのおじさん。
しかしこんなおじさんがずっと暴れてんのか、全然議論できないじゃん。対策としてはワッチョイ導入くらいしか無いだろうね。
940(1): デフォルトの名無しさん [sage] 2022/02/26(土) 08:20:49 ID:W5JOGvZg(1) AAS
長い文章ダラダラ書く人ってプログラマーの素質ないよ
文章を短く簡潔に書ける人ってプログラムも同様に書ける
941: デフォルトの名無しさん [sage] 2022/02/26(土) 08:45:19 ID:kpnhrKVl(4/6) AAS
>>938
> 例: async_func_foo.catch(err => console.log(err))
これは字が赤いか黒いかの違いしかないけどな。
まあ俺はtry-catch消極派だから、Go/Rust方式で問題なく、C#の仕様はオーバースペック過ぎるけど、
Goの場合はJSとは違ってtry-catchはそれなりに機能するはずだから、不満持ってる奴もそれなりにいるはずだけど。
(そういう連中は既に去ってる気もするが)
942: デフォルトの名無しさん [sage] 2022/02/26(土) 09:09:48 ID:yRlIqUsp(1/4) AAS
発想が違う、どの案件でも、その案件にとって1番だから使う、と言う言葉が伝わってないのか?
俺も十分、言外の言葉は理解できないタイプだが、流石に通じると思うんだが。
書きやすい、読みやすいからこれを選定した、と言うのは「1番」でしょ。
基本的にそういう書き方してると言うか、自然に書くとそうなる。これはドキュメントに書いてあっただろ。
非同期とマルチスレッドを分けて考えろよ…。
実際にはnodeもそうだけど、C#のTaskなんかに関してもめちゃくちゃ解像度甘いのでは?
943(1): デフォルトの名無しさん [sage] 2022/02/26(土) 09:10:48 ID:yRlIqUsp(2/4) AAS
goだと、非同期スタイルで書けるとかでなくて、ブロッキング関数、同期関数を書いたとしてもgoroutine間では適切にスイッチングされて、他の言語で言うawaitがかかってるんよ。常に低コストで。
それはN:M軽量スレッドだからなし得ることなので、他の言語ができてない以上何とも比べづらい。
944: デフォルトの名無しさん [sage] 2022/02/26(土) 09:11:12 ID:yRlIqUsp(3/4) AAS
オール想像で喋ってるよな、こいつ。
945: デフォルトの名無しさん [sage] 2022/02/26(土) 09:42:59 ID:Cq56y6gH(1) AAS
>>939
ワッチョイは浪人生の自演が捗るだけ
946: デフォルトの名無しさん [sage] 2022/02/26(土) 09:45:22 ID:Zjg02ogZ(1) AAS
ローニンでワッチョイ消してるやつ正規表現で弾けばええやん
947: デフォルトの名無しさん [sage] 2022/02/26(土) 09:55:57 ID:UdeBSueS(1) AAS
自演するのにワッチョイ消すバカはおらんやろ
948: デフォルトの名無しさん [sage] 2022/02/26(土) 10:07:05 ID:xkMoRRzB(2/3) AAS
荒らしの手間が増えるだけで十分価値がある
949(1): デフォルトの名無しさん [sage] 2022/02/26(土) 10:19:30 ID:kpnhrKVl(5/6) AAS
>>943
> ブロッキング関数、同期関数を書いたとしてもgoroutine間では適切にスイッチングされて、他の言語で言うawaitがかかってるんよ。
これは普通はマルチスレッドと言う。Thread/goroutineを複数(マルチ)起動して引っかかったらスイッチングさせるだけなのだから。
そして大概の言語はこれを自然に書けるようになってる。
> それはN:M軽量スレッドだからなし得ることなので、他の言語ができてない以上
これが嘘、というか誤解。他言語でもいくらでもスレッドを起動する事は出来る。(が余計に重くなるので普通はやらない)
goroutineもGo信者が言う程軽くもないのでいくらでも起動していいわけではない。(現実的には)
これを脳死でgoroutineはコストゼロ、だからgoroutineに切り出す事がプログラマの仕事である、と解釈できれば美しいのだが、
これを実際に試して「思ってたよりも全然パフォーマンスが出ねぇ、これならNodeの方が速ぇ…」となった顛末を書いてたのが何度も言ってるブログ。
これは言語と言うよりはランタイムの問題だけど。
950: デフォルトの名無しさん [sage] 2022/02/26(土) 11:28:52 ID:nWK21oqu(1) AAS
JSのPromiseは非同期の扱いとしてはかなり好き
951(1): デフォルトの名無しさん [sage] 2022/02/26(土) 12:15:41 ID:pDCyYMqI(1/2) AAS
>>949
N:Mのグリーンスレッドであって単なるマルチスレッドじゃない。
単に引っかかったら切り替えるんでなくてスティーリングまでやるのは他の言語の言語標準機能にはErlangぐらいにしかない。
どこが嘘なんよ。
コストゼロでは無いが、いわゆるスレッドよりは遥かに軽いぞ。
952: デフォルトの名無しさん [sage] 2022/02/26(土) 12:16:18 ID:pDCyYMqI(2/2) AAS
総じて知らんだけでは?
953: デフォルトの名無しさん [sage] 2022/02/26(土) 12:35:54 ID:Zen8kEK8(1) AAS
わからせようとするのが無駄だって何で気づかないかな
954: デフォルトの名無しさん [sage] 2022/02/26(土) 12:41:19 ID:D1V+AmSx(1) AAS
>>940
論理構成がしっかりしてて読みやすければ長文でもいいんだけどね
このおじさんはそこが壊滅的だから明らかに素質ないわな
955(1): デフォルトの名無しさん [sage] 2022/02/26(土) 12:50:12 ID:xkMoRRzB(3/3) AAS
抽象化できず同じ事何回も書く傾向にあるから、凄いコード書きそう
956: デフォルトの名無しさん [sage] 2022/02/26(土) 12:58:01 ID:862GBE0V(1) AAS
>>955
というか、
短い=良い
もしくは
simple=beautiful
というセンスが欠落している。
あんな汚い長文ぞっとするわw
まあ.{50}でNGにしてるけど
957(1): デフォルトの名無しさん [sage] 2022/02/26(土) 13:27:19 ID:fRC8OZTs(1) AAS
Goの(疑似スレッド+)goroutineのパフォーマンス計測っていいやつないの?
↓見つけたやつ
Goroutines Are Not Significantly Smaller Than Threads
外部リンク[html]:matklad.github.io
958(1): デフォルトの名無しさん [sage] 2022/02/26(土) 13:41:54 ID:CoGWNwI7(1) AAS
Goってぶっちゃけ言語機能とか割とどうでもよくて、
・ビルドやデプロイや運用がシンプル
・本家の開発体制が保守的で、長期的に安定したサポートが期待できる
という点がメリット
極力作りっぱなしで放置したい類のものに向いてると思うんだよね
Goしかできない奴やGo大好きで使ってる奴もまずいないだろうし、こんなもん執拗に叩いて何がしたいの
959: デフォルトの名無しさん [sage] 2022/02/26(土) 13:51:01 ID:bMt+E6tQ(1) AAS
CLIツールはともかく一番使われてるWeb APIは放置したいものとは対極だろう
960: デフォルトの名無しさん [sage] 2022/02/26(土) 14:05:08 ID:nWQ4XblH(1) AAS
APIはむしろどっちかというと放置したい系じゃね?
フロントと表裏一体みたいなのもあるけど、そういうのにGoはあまり採用されないでしょ
961: デフォルトの名無しさん [sage] 2022/02/26(土) 14:21:48 ID:yRlIqUsp(4/4) AAS
確かにそうだな。わかろうとしないし、伝わらない気がしてきた。
Rust最高とRustスレで言っててくれれば良いか。
>>958
これはあるよね。
1つ前のバージョンどころか、それなりに昔のGoのプログラムですら修正せずにコンパイルできる。
962: デフォルトの名無しさん [sage] 2022/02/26(土) 16:17:55 ID:kpnhrKVl(6/6) AAS
>>951
やってないのはやる必要がないから。
他言語も馬鹿ではないので、改善の努力はしてるし、いい点があったら平気でパクってる。
(Goはgreenthreadで全て解決!と謳っているわけではないけども、そうだとしたら)
そのアイデアは面白かったが、現実的ではなかった。
(ただしこれはランタイムの問題だから改善の余地はあるはず)
非同期はコードがうざくなるのは事実だが、async文法でほぼ払拭された。
だからみんなパクってる。
まあ完全にループだし、材料枯渇でここら辺で終わりかな。
そりゃ信者の念仏を何度聞いても翻意する事はないよ。俺は文系ではないし。
こちらの見解では説明出来ないデータが出て来たら、分析して、考えを修正するけど。
>>957
virtualの40MBを単純に合算したら、今は4倍軽くて、4k/goroutine時代は2.5倍軽かったという事か。
フットプリントだけの比較ではあるが。
だから極めて単純に言えば、他言語のスレッドでジョブを4つずつ束ねて処理する運用をすれば、
フットプリントでは並んで、速度は余分なスケジューラが入ってない分勝てる事になる。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.191s*