Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
公式ドキュメント
http://golang.org/doc/
日本語訳
http://golang.jp
※前スレ
Go language part 2
https://mevius.5ch.net/test/read.cgi/tech/1510395926/
探検
Go language part 3
■ このスレッドは過去ログ倉庫に格納されています
2019/10/17(木) 21:38:04.78ID:wMsZ+t6y
686デフォルトの名無しさん
2020/08/13(木) 19:06:58.68ID:xsanodvm687デフォルトの名無しさん
2020/08/13(木) 19:50:58.84ID:uooXk5Tm 今なら Deepl がオススメ
688デフォルトの名無しさん
2020/08/25(火) 10:24:08.87ID:D0K2qmbJ すんでで気がついて事なきを得たけど
参考にしたサンプルからコピーしたコードだったんで
context.Background() を、そのまま使ってた
マルチスレッドではWithCancelなどで別々に作ってやらなきゃなんないよな
参考にしたサンプルからコピーしたコードだったんで
context.Background() を、そのまま使ってた
マルチスレッドではWithCancelなどで別々に作ってやらなきゃなんないよな
689デフォルトの名無しさん
2020/08/25(火) 14:37:27.29ID:QsZwrXdx 英語読めないって人って高卒?
受験で勉強すると思うのだが
受験で勉強すると思うのだが
690デフォルトの名無しさん
2020/08/25(火) 23:26:52.17ID:Y7jc20E9 >>689
Golang Cafe — The Best Place To Find Your Next Golang Job
https://golang.cafe/about
https://twitter.com/golangcafe
https://www.youtube.com/channel/UCq4YrlwwXwF74Z3g-VDae2w/videos
「!gocafe remote」をDuckDuckGoで検索
https://twitter.com/5chan_nel (5ch newer account)
Golang Cafe — The Best Place To Find Your Next Golang Job
https://golang.cafe/about
https://twitter.com/golangcafe
https://www.youtube.com/channel/UCq4YrlwwXwF74Z3g-VDae2w/videos
「!gocafe remote」をDuckDuckGoで検索
https://twitter.com/5chan_nel (5ch newer account)
691デフォルトの名無しさん
2020/08/31(月) 11:00:12.17ID:4ktuLIOK ホストがMacなんだけど、dockerでgolang/Fyneを試してみたいんだけど無理かな?
なんかXエラーみたいな感じなの
なんかXエラーみたいな感じなの
692デフォルトの名無しさん
2020/08/31(月) 13:01:38.43ID:rMwNX/5+ iOSはBSDベースなんだから余程アップルが魔改造してなきゃBSDと同様な程度にはサポートされてるだろ?
BSDでリリースされてるかどうか知らないんだが
BSDでリリースされてるかどうか知らないんだが
693デフォルトの名無しさん
2020/09/04(金) 13:17:23.06ID:y4RkOJ/U まずgolangに関係のない話
chrome だけかもしれないけど XMLHttpRequest だと単純リクエストなのに CORS に引っ掛かってしまう
で、ここから本題
echo 使ってるんだけど、ハンドラ別に allow なオリジンを切り替えたいんだけど、やり方が分からなかった
orz
chrome だけかもしれないけど XMLHttpRequest だと単純リクエストなのに CORS に引っ掛かってしまう
で、ここから本題
echo 使ってるんだけど、ハンドラ別に allow なオリジンを切り替えたいんだけど、やり方が分からなかった
orz
694デフォルトの名無しさん
2020/09/06(日) 14:36:03.50ID:l3n8psbq a := make([]int, 0)
makeの第一引数って何を渡してるの?
普通のプリミティブじゃないよね
makeの第一引数って何を渡してるの?
普通のプリミティブじゃないよね
695デフォルトの名無しさん
2020/09/06(日) 15:27:49.33ID:FQOSALvE 長さだよ。2番目は容量な
696デフォルトの名無しさん
2020/09/06(日) 15:50:34.25ID:iNxLllkp []intが第一引数で、0が第二引数じゃろ?
697デフォルトの名無しさん
2020/09/06(日) 19:34:19.64ID:uoPkQvi9 言語仕様にスライス、マップ、チャネルの型って書いてあるじゃん
698デフォルトの名無しさん
2020/09/06(日) 19:37:12.75ID:gKeBUEkF その辺は最近のモダンな言語からしたらすげー泥臭い仕様だよな
699デフォルトの名無しさん
2020/09/06(日) 20:33:01.20ID:gGwX7R3F なんか全体的にそんなところがあるよな。べつに機能的に問題があるというわけじゃないんだが。
700デフォルトの名無しさん
2020/09/06(日) 21:12:04.30ID:l3n8psbq "[]int"だとstringだけど、ダブルクォーテーションなしだと何を渡してるんだろうと思って
701デフォルトの名無しさん
2020/09/06(日) 21:17:56.45ID:uoPkQvi9 確かにもやっとしないでもないね
t := []string
とかで型の変数を作れる訳でもないのにポッと出てくる型指定
t := []string
とかで型の変数を作れる訳でもないのにポッと出てくる型指定
702デフォルトの名無しさん
2020/09/06(日) 21:28:38.24ID:6MGWJWDR 引数に見えて引数ではない構文の一部
703デフォルトの名無しさん
2020/09/06(日) 21:49:44.73ID:uoPkQvi9 makeは組み込み関数にカウントされてるから、むしろ型を変数として生成できないという縛りなんだな
滅多にmake関数使わないな
チャネルの容量を設定する時くらい
固定長配列なんて作らないし
滅多にmake関数使わないな
チャネルの容量を設定する時くらい
固定長配列なんて作らないし
704デフォルトの名無しさん
2020/09/06(日) 21:53:27.07ID:uoPkQvi9 構文見てて思った
new関数なんてあったのか
使ったことある?
new関数なんてあったのか
使ったことある?
705デフォルトの名無しさん
2020/09/07(月) 00:08:24.76ID:tKSaDgWF makeが関数でrangeが式なの違和感あるんだよな
逆であるべきなのではと思ってしまう
逆であるべきなのではと思ってしまう
706デフォルトの名無しさん
2020/09/07(月) 00:52:09.45ID:ocp9ke30 その辺は一貫性より実用性を重視した結果だろう
707デフォルトの名無しさん
2020/09/10(木) 17:49:37.70ID:iYKQgeEI go: finding dmitri.shuralyov.com/gpu/mtl latest
go: downloading dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
go: extracting dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
build dmitri.shuralyov.com/gpu/mtl: cannot load dmitri.shuralyov.com/gpu/mtl: no Go source files
● 根本原因
dmitri.shuralyov.com が落ちてるんで GCP のビルドが通らない
● 状況
go.sum 見てみるとfirebaseが要求してるパッケージ
したがって firebase を使って GCP でサービスを提供しているすべてに影響するはず
こまるわー
go: downloading dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
go: extracting dmitri.shuralyov.com/gpu/mtl v0.0.0-20191203043605-d42048ed14fd
build dmitri.shuralyov.com/gpu/mtl: cannot load dmitri.shuralyov.com/gpu/mtl: no Go source files
● 根本原因
dmitri.shuralyov.com が落ちてるんで GCP のビルドが通らない
● 状況
go.sum 見てみるとfirebaseが要求してるパッケージ
したがって firebase を使って GCP でサービスを提供しているすべてに影響するはず
こまるわー
708デフォルトの名無しさん
2020/09/10(木) 17:52:24.85ID:iYKQgeEI 既存のパッケージがGOPATHにはあるはずなんだけど、どうしたらいい?
709デフォルトの名無しさん
2020/09/10(木) 18:01:50.68ID:iYKQgeEI firebaseにはissue上げたけど
710デフォルトの名無しさん
2020/09/10(木) 18:56:30.40ID:iYKQgeEI なんとなくGCPのビルドシステムの問題にも思えてきた
だってGOPATH(~/gopath/pkg)には一式存在してるもん
なんでダウンロード(というか最新版チェックしに行ってる?)できないからってビルドを失敗にすんのよ
だってGOPATH(~/gopath/pkg)には一式存在してるもん
なんでダウンロード(というか最新版チェックしに行ってる?)できないからってビルドを失敗にすんのよ
711デフォルトの名無しさん
2020/09/10(木) 19:25:21.92ID:iYKQgeEI いや困ったね…
インポートを辿ったら
https://github.com/googleapis/google-cloud-go
が原因っぽい
個人ホストに依存しちゃうライブラリって、ビジネス的に極めて不味くないか?
インポートを辿ったら
https://github.com/googleapis/google-cloud-go
が原因っぽい
個人ホストに依存しちゃうライブラリって、ビジネス的に極めて不味くないか?
712デフォルトの名無しさん
2020/09/10(木) 19:46:17.35ID:QWaq+avL 個人ホスト?
713デフォルトの名無しさん
2020/09/10(木) 20:19:53.75ID:iYKQgeEI714デフォルトの名無しさん
2020/09/11(金) 00:38:28.29ID:u7dYfbNO よかった復活した
そしてやはり個人持ちのホストの模様
ホストでしっくりこないならサーバー
Google Domainsでドメイン管理してるからGoogleCloud上にあるのかも
そしてやはり個人持ちのホストの模様
ホストでしっくりこないならサーバー
Google Domainsでドメイン管理してるからGoogleCloud上にあるのかも
715デフォルトの名無しさん
2020/09/11(金) 20:06:33.99ID:fDVUo6av しかし個人のホストからimportするリスクやばいな
Goチームの人だから許されてるのか?
Goチームの人だから許されてるのか?
716デフォルトの名無しさん
2020/09/11(金) 20:12:33.09ID:ICNKkV5S GitHubかGoogleSourceRepositoryにホストすればいいのにな
717デフォルトの名無しさん
2020/09/11(金) 20:20:51.53ID:ICNKkV5S う、Google Source Repositoryって、もしかして
source.developers.google.com/p/プロジェクト/r/リポジトリ/...
ってパッケージ名になるのか?長
source.developers.google.com/p/プロジェクト/r/リポジトリ/...
ってパッケージ名になるのか?長
718デフォルトの名無しさん
2020/09/29(火) 08:17:01.67ID:1HGJd50O 引数を値渡しするか、ポインタ渡しするか
それが問題だ
sliceは値渡しでも良いよね
要素を追加しようとすると結局新しいsliceが必要
ポインタのポインタとかやりたくないし
stringは普通は変化させる時は新しい物を作るから、値渡しで充分
空を表現するには空文字列で良いし
構造体はどうすべきか
全部ポインタ渡し?
それが問題だ
sliceは値渡しでも良いよね
要素を追加しようとすると結局新しいsliceが必要
ポインタのポインタとかやりたくないし
stringは普通は変化させる時は新しい物を作るから、値渡しで充分
空を表現するには空文字列で良いし
構造体はどうすべきか
全部ポインタ渡し?
719デフォルトの名無しさん
2020/09/29(火) 08:42:58.32ID:ztORdlGy >>718
基本的にポインタで渡すべきと思ってる
値を使うには細心の注意が必要になるから
速度的に有利とかいう話はあるけど
スライスなんかは内部にポインタ入ってるし、文字列だってポインタだから、メンバとしてそれらを持ってる構造体を値渡しするのもナンセンスじゃね?
それらのメンバにアクセスしたとたんにページフォルト起こる可能性があるから、速度面での優位は怪しくなるという意味でナンセンスだろうという
値渡しはスタックに積むだろう(それ以外に方法があるのか知らない)から、スタックを圧迫するはずという理屈も加味
基本的にポインタで渡すべきと思ってる
値を使うには細心の注意が必要になるから
速度的に有利とかいう話はあるけど
スライスなんかは内部にポインタ入ってるし、文字列だってポインタだから、メンバとしてそれらを持ってる構造体を値渡しするのもナンセンスじゃね?
それらのメンバにアクセスしたとたんにページフォルト起こる可能性があるから、速度面での優位は怪しくなるという意味でナンセンスだろうという
値渡しはスタックに積むだろう(それ以外に方法があるのか知らない)から、スタックを圧迫するはずという理屈も加味
720デフォルトの名無しさん
2020/09/29(火) 09:38:24.05ID:rZRnYPTQ >>719
いや、サイズが大きいのは基本的に可変長であるスライス、string、mapなのだから、それらだけは内部的にポインタを持って実質的に常にポインタ渡しとなるようにしておけば、常に値渡しでもパフォーマンス的にほぼ問題にならんだろうというのがGoの設計意図だよ
個人的には、同一の実体として振る舞うようなOOのインスタンスに近い性質の構造体はポインタ渡し、単なる値の寄せ集めは値渡しとして使い分ける
いや、サイズが大きいのは基本的に可変長であるスライス、string、mapなのだから、それらだけは内部的にポインタを持って実質的に常にポインタ渡しとなるようにしておけば、常に値渡しでもパフォーマンス的にほぼ問題にならんだろうというのがGoの設計意図だよ
個人的には、同一の実体として振る舞うようなOOのインスタンスに近い性質の構造体はポインタ渡し、単なる値の寄せ集めは値渡しとして使い分ける
721デフォルトの名無しさん
2020/09/29(火) 15:53:59.37ID:ztORdlGy >>720
ググってみたら、goではスタック足りなくなると拡張すんのか……すげーな
ググってみたら、goではスタック足りなくなると拡張すんのか……すげーな
722デフォルトの名無しさん
2020/09/29(火) 16:39:20.25ID:aaxcyAZi 論理アドレス空間ははじめから確保してるんじゃないの?
だったら他の言語と変わらない気が
だったら他の言語と変わらない気が
723デフォルトの名無しさん
2020/09/29(火) 17:34:34.66ID:ztORdlGy 例えばjavaではStackOverflowErrorになるし、cだと検出すらされない(今は知らない
goでは関数呼び出し時にオーバーフローをチェックして拡張するらしく、初期値は4KBだとか
ほんまかいな?
goでは関数呼び出し時にオーバーフローをチェックして拡張するらしく、初期値は4KBだとか
ほんまかいな?
724デフォルトの名無しさん
2020/09/29(火) 17:41:44.13ID:ztORdlGy 考えてみれば何万とgoroutine作ってもびくともしないようにするには、それくらいやらなきゃダメだろうから納得すべきか
725デフォルトの名無しさん
2020/09/29(火) 20:23:20.93ID:ztORdlGy726デフォルトの名無しさん
2020/09/29(火) 23:23:58.36ID:UIxEJt2R727デフォルトの名無しさん
2020/09/30(水) 05:11:09.54ID:/dbaz1tV Elixir は、10万の小プロセスが、並列で動く
結局、Rust, Elixir は、普及のキャズムを越えられなかったから、
Go の1強になってしまったけど
結局、Rust, Elixir は、普及のキャズムを越えられなかったから、
Go の1強になってしまったけど
728デフォルトの名無しさん
2020/09/30(水) 05:27:53.12ID:s3VbgSNe かえすがえすも、名前がイケてないのが悔やまれる
もっとマシなネーミングをできなかったのか
もっとマシなネーミングをできなかったのか
729デフォルトの名無しさん
2020/09/30(水) 12:14:35.40ID:/4YRR7IY では、Gopher言語でよろしいか
730デフォルトの名無しさん
2020/09/30(水) 12:40:46.26ID:NNWpaWfq ごふぁっ、ゲホッがはっ、ゴホゴホッ
731デフォルトの名無しさん
2020/09/30(水) 18:10:46.15ID:ktFuXCYv 正直goって流行っている感じじゃないんだよなぁ
めんどくさいし
めんどくさいし
732デフォルトの名無しさん
2020/09/30(水) 19:21:27.15ID:baSuoz7K むしろGoよりめんどくさくない言語の方が少ないだろ
733デフォルトの名無しさん
2020/09/30(水) 20:05:41.54ID:HXdd4xfV ゴリゴリ書かなきゃいけないという点で面倒くさいけどゴリゴリ書いてしまえるという点で面倒くさくない
734デフォルトの名無しさん
2020/09/30(水) 20:17:57.84ID:pc2vUBN1 Pythonとかの思い付くまま適当に書いたらシンタックスシュガーでなんとなく動く、それを簡単だと言ってるんだと思う
735デフォルトの名無しさん
2020/09/30(水) 20:32:41.83ID:pc2vUBN1 PHPとかの方面の人から見ると、面倒で使えないと思うんだろう
node.jsやらと比べて数倍の性能を叩き出すWebAPIをちょちょいと書けてしまうから手放せない
Webアプリなんて、WebAPIとJavaScriptとHTMLがあればすむ話だからPHPとかやる奴こそ面倒なことやってんなーと思う
node.jsやらと比べて数倍の性能を叩き出すWebAPIをちょちょいと書けてしまうから手放せない
Webアプリなんて、WebAPIとJavaScriptとHTMLがあればすむ話だからPHPとかやる奴こそ面倒なことやってんなーと思う
736デフォルトの名無しさん
2020/09/30(水) 21:03:01.73ID:zBrjSaD6 >>735
ひと昔前はそれが普通だったからねえ
railsもphpもサーバーがHTMLを組み立てるという思想ありきで生まれたから仕方ない
今その役目は消えたからほぼ全てのフレームワークがオーバースペックになってしまった
ひと昔前はそれが普通だったからねえ
railsもphpもサーバーがHTMLを組み立てるという思想ありきで生まれたから仕方ない
今その役目は消えたからほぼ全てのフレームワークがオーバースペックになってしまった
737デフォルトの名無しさん
2020/10/07(水) 08:43:42.09ID:9tAnRZjq Pythonでマップのインデックスで {(a,b): c} とやってるのを見て、ちょっと羨ましく感じた
Goだとタプルは型じゃないもんな
Goだとタプルは型じゃないもんな
738デフォルトの名無しさん
2020/10/09(金) 10:30:34.93ID:fFeZzUQc エディタは何使ってる?
739デフォルトの名無しさん
2020/10/09(金) 10:40:12.61ID:cZJOIaI8 VSCode
VSCodeのGoの拡張機能は結構クソだが、Goばかり書くわけじゃないのでGoに最適なエディタはどれかとか興味ない
VSCodeのGoの拡張機能は結構クソだが、Goばかり書くわけじゃないのでGoに最適なエディタはどれかとか興味ない
740デフォルトの名無しさん
2020/10/09(金) 10:45:34.46ID:fFeZzUQc >>739 ありがとう。使ってみる。
741デフォルトの名無しさん
2020/10/09(金) 11:57:27.87ID:CFMMOtfU742デフォルトの名無しさん
2020/10/09(金) 12:01:58.43ID:CFMMOtfU743デフォルトの名無しさん
2020/10/09(金) 12:20:13.85ID:fFeZzUQc VSCODE良いね。
Goプログラマーの仲間入りしました。
Goプログラマーの仲間入りしました。
744デフォルトの名無しさん
2020/10/13(火) 13:52:15.74ID:oLYkpKK8745デフォルトの名無しさん
2020/10/13(火) 16:42:37.40ID:UHobSDno Goは補完が大事だから他の環境はマジで貧弱すぎる
vim拡張とかこれでコード書いてる人いるのか?と感じた
vim拡張とかこれでコード書いてる人いるのか?と感じた
746デフォルトの名無しさん
2020/10/13(火) 23:14:35.57ID:vh7uCC06 俺は補完は好きじゃなくて逆に鬱陶しく感じてしまう。
タイピングのリズムというか、今xxxという操作/入力しようとしたのに余計なことすんな と思うことしばしば。
タイピングのリズムというか、今xxxという操作/入力しようとしたのに余計なことすんな と思うことしばしば。
747デフォルトの名無しさん
2020/10/14(水) 07:23:06.90ID:kUBYMwHY わかりみ
748デフォルトの名無しさん
2020/10/14(水) 10:18:40.21ID:GsUUoEHv 「(」打つと勝手に「)」も入るやつとか
おせっかいに「()」の真ん中にカーソル移動するやつとか
自分でタイプすると hoge()) みたいになってうざい
おせっかいに「()」の真ん中にカーソル移動するやつとか
自分でタイプすると hoge()) みたいになってうざい
749デフォルトの名無しさん
2020/10/14(水) 10:40:49.08ID:W+IeOFJe 設定変えろよ無能
750デフォルトの名無しさん
2020/10/14(水) 22:53:52.84ID:Eee7omWn 変えてるに決まってるだろ
751デフォルトの名無しさん
2020/10/14(水) 22:57:57.74ID:RfMuLTxu go.modに勝手にgo1.13みたいなものが入ります
やめてほしいですが誰に言えばいいですか?
やめてほしいですが誰に言えばいいですか?
752デフォルトの名無しさん
2020/10/15(木) 00:02:00.61ID:jde/MWAn >>751
ロブパイク
ロブパイク
753デフォルトの名無しさん
2020/10/15(木) 13:01:09.76ID:AQ4Pln/N 自分で指定すると思ったけど
もしかすると、参照するパッケージに引きずられる可能性があるのか?
パッケージがリンクするランタイムの中で最新になっちゃうとしたらどうしようもないかな
もしかすると、参照するパッケージに引きずられる可能性があるのか?
パッケージがリンクするランタイムの中で最新になっちゃうとしたらどうしようもないかな
754デフォルトの名無しさん
2020/10/15(木) 17:14:56.53ID:AQ4Pln/N ツールアップデートしたら#41870にバッチリ引っ掛かってしまった
755デフォルトの名無しさん
2020/10/28(水) 09:08:16.05ID:pr+rUhRZ 俺はコンパイラが無様すぎると思うんだけど、どう思う?
https://play.golang.org/p/XRFmBiqhqJp
インタフェースAを返すメソッドを持つインタフェースB。
そのメソッド実装がインタフェースAを実装しているポインタを返しても、
./prog.go:34:4: cannot use &Base literal (type *Base) as type IBase in assignment:
*Base does not implement IBase (wrong type for Sub method)
have Sub() *Sub
want Sub() ISub
と、インタフェースAを返しているとは認められない。
https://play.golang.org/p/XRFmBiqhqJp
インタフェースAを返すメソッドを持つインタフェースB。
そのメソッド実装がインタフェースAを実装しているポインタを返しても、
./prog.go:34:4: cannot use &Base literal (type *Base) as type IBase in assignment:
*Base does not implement IBase (wrong type for Sub method)
have Sub() *Sub
want Sub() ISub
と、インタフェースAを返しているとは認められない。
756デフォルトの名無しさん
2020/10/28(水) 10:08:54.99ID:yBdqeWro 天才のお前が新しい言語でも作ってくれよ
757デフォルトの名無しさん
2020/10/28(水) 11:33:48.41ID:Mf8tEr2f C / C++ のプリプロセッサのマクロって
#define A(X, ...) X A(__VA_ARGS__)
みたいな再帰的な処理出来ないけど
この問題昔から指摘されてるのに
40年経っても1000年経っても解決されないよね
解決しようと思えば出来るのに C++ の拡張とかばっかりやってる
#define A(X, ...) X A(__VA_ARGS__)
みたいな再帰的な処理出来ないけど
この問題昔から指摘されてるのに
40年経っても1000年経っても解決されないよね
解決しようと思えば出来るのに C++ の拡張とかばっかりやってる
758デフォルトの名無しさん
2020/10/28(水) 11:46:44.44ID:HlOHZvAz >>757 そしてあなたも解決しようと思わないのでしょう?
759デフォルトの名無しさん
2020/10/28(水) 11:52:07.24ID:9TmkPH0P760デフォルトの名無しさん
2020/10/28(水) 12:47:58.74ID:Mf8tEr2f >>758
解決しようとした人は *by や python や D を造ってしまいましたね
既存の C/C++ そのものに手を入れるのは中の人以外には無駄な努力に感じます
再帰マクロ専用の ぷりぷりプロセッサを書くのは手かも知れません
あと #include __FILE__ でループしてる人はいるようです
https://qiita.com/alucky0707/items/3599cdcf973382df978b
解決しようとした人は *by や python や D を造ってしまいましたね
既存の C/C++ そのものに手を入れるのは中の人以外には無駄な努力に感じます
再帰マクロ専用の ぷりぷりプロセッサを書くのは手かも知れません
あと #include __FILE__ でループしてる人はいるようです
https://qiita.com/alucky0707/items/3599cdcf973382df978b
761デフォルトの名無しさん
2020/10/28(水) 12:50:42.86ID:sJQyfcEU スレ違いも甚だしい
762デフォルトの名無しさん
2020/10/29(木) 21:05:36.10ID:K8k/YFeK >>760
スレ違いだが通りすがりに言っておくと、
マクロにそこまでの機能を求めるのなら、
自前でスクリプト言語(AWK/Perl/Python/Ruby)等でソースの事前処理をmakefileに書いた方がいい。
それだと無限に機能拡張出来る。
だからC++というかmakefileシステムでそれをやる意味はない。
よってまともな奴は誰もマクロの拡張なんかしようとは思わない。
「言語」にそれを持たせる意味がないから。
(言語による垂直統合ではなく、makefileによる水平分業で全く問題ないし、融通も利く)
ただしGoはそれを標準機能で付けてる。
これがどう役に立っているのかは知らん。
(Go generate、AST木が参照出来るので上記のマクロ拡張とは次元が違うが)
スレ違いだが通りすがりに言っておくと、
マクロにそこまでの機能を求めるのなら、
自前でスクリプト言語(AWK/Perl/Python/Ruby)等でソースの事前処理をmakefileに書いた方がいい。
それだと無限に機能拡張出来る。
だからC++というかmakefileシステムでそれをやる意味はない。
よってまともな奴は誰もマクロの拡張なんかしようとは思わない。
「言語」にそれを持たせる意味がないから。
(言語による垂直統合ではなく、makefileによる水平分業で全く問題ないし、融通も利く)
ただしGoはそれを標準機能で付けてる。
これがどう役に立っているのかは知らん。
(Go generate、AST木が参照出来るので上記のマクロ拡張とは次元が違うが)
763デフォルトの名無しさん
2020/10/30(金) 00:29:21.26ID:Nsw5dj/j makefieて
764デフォルトの名無しさん
2020/10/30(金) 09:21:51.84ID:rRvEIPSO 知らないだけかも知れないけど、generate が build と分けられてるのが使いづらく感じる
go.mod に generate のパラメーター書いておくと build で実行するとかじゃダメなのかな
go.mod に generate のパラメーター書いておくと build で実行するとかじゃダメなのかな
765デフォルトの名無しさん
2020/10/30(金) 10:57:17.98ID:7MkyV1Cp Qt良いよね
766デフォルトの名無しさん
2020/10/30(金) 11:07:56.86ID:SoGDmizs そもそもプリプロセッサーが何をやっているか考えたら再帰なんかできない事ぐらい分かるやろ
もう相当前のものだしなぁ
逆にC#とかだとCで出来たような事が出来ないから不便だと思った事があるわ
もう相当前のものだしなぁ
逆にC#とかだとCで出来たような事が出来ないから不便だと思った事があるわ
767デフォルトの名無しさん
2020/10/30(金) 22:12:31.86ID:k5fqQBZK いまどきポインタとかwww
768デフォルトの名無しさん
2020/10/31(土) 11:21:06.88ID:9I3xwucX 今時も何もgolangではポインタはバリ現役
というか、golang使ったことないんだな哀れ
というか、golang使ったことないんだな哀れ
769デフォルトの名無しさん
2020/10/31(土) 15:42:09.93ID:rQ5gc14Z ポインタが散々叩かれて色んな言語で無くしたけど
最近のモダンな言語では復活してきてるのは面白い
最近のモダンな言語では復活してきてるのは面白い
770デフォルトの名無しさん
2020/10/31(土) 16:08:49.76ID:73vG42Ru ぽ、ポインタじゃねえし!リファレンスだし!
771デフォルトの名無しさん
2020/10/31(土) 16:39:03.74ID:o6XGTKTG つーか名前をへんてこにして誤魔化すとかじゃなく
リアルにポインタの概念(何かのオブジェクトを指す変数)を消し去ろうとしたら
あらゆるものをコピーでもっといてしかもそれらを常に同期して同じ値になるように
常に維持する仕組みにするしかないがそんな非効率きわまりない言語が実用に値するはずがない
リアルにポインタの概念(何かのオブジェクトを指す変数)を消し去ろうとしたら
あらゆるものをコピーでもっといてしかもそれらを常に同期して同じ値になるように
常に維持する仕組みにするしかないがそんな非効率きわまりない言語が実用に値するはずがない
772デフォルトの名無しさん
2020/10/31(土) 16:55:27.17ID:fxcwqRC2 lisp とかってコピーしてないの?
773デフォルトの名無しさん
2020/10/31(土) 17:00:05.47ID:rQ5gc14Z ポインタがない言語ではオブジェクトは参照コピー
プリミティブはコピーというのが最近のスクリプト言語の常識
ただ細かい違いは言語ごとに違ってハマりどころになってる
プリミティブはコピーというのが最近のスクリプト言語の常識
ただ細かい違いは言語ごとに違ってハマりどころになってる
774デフォルトの名無しさん
2020/10/31(土) 17:32:11.09ID:Zi1/vk95775デフォルトの名無しさん
2020/10/31(土) 17:59:24.46ID:pRffs5ZU776デフォルトの名無しさん
2020/10/31(土) 20:21:41.59ID:yaU57lgN >>775
Haskellはモナドの裏に隠してる
正確にはランタイムと言った方が近いかもしれないが
ていうかHaskellのイミュータブルな配列でもUArray(UnboxedのU)が提供されてるしポインタ・参照・Boxedからは逃れられんよ
Haskellはモナドの裏に隠してる
正確にはランタイムと言った方が近いかもしれないが
ていうかHaskellのイミュータブルな配列でもUArray(UnboxedのU)が提供されてるしポインタ・参照・Boxedからは逃れられんよ
777デフォルトの名無しさん
2020/10/31(土) 21:01:42.97ID:NOhP3tKc >>771
>>773
× 最近のスクリプト言語
○ ポインタを使えないほぼ全部の言語
だよ。C#もJavaも同じだ。
ただ実際のところ、これで大して問題にも遭遇しない。
そもそもCですら . なんてゴリゴリ速度チューニング時以外は使わず、 -> と []ばかりだ。
そしてC++で参照(&)が導入され、今君が認識しているいわゆる「オブジェクト参照」は全部これになった。
だから俺はあんまりポインタは必要なくて、 -> を . として結果的に -> しか使えないようにした、
最近のほぼ全ての(というかC/C++以外全部、多分Goも含めて)言語の方が正しいと思ってるけど。
Goも制限付きポインタで、C++の&相当でしかなかった気がしたけど、違ったっけ?
なお、ポインタという「概念」を消し去るのは無理だよ。
これを何故か理解出来ない馬鹿が多いのか、Python使いは無駄に吠えてくるけど、
プログラミングを本気でやるつもりなら、その根幹の実装を理解することは避けて通れない。
>>775
erlangは全部インミュータブルで、ループ(for文)すらなく、全部再帰らしいよ。
>>773
× 最近のスクリプト言語
○ ポインタを使えないほぼ全部の言語
だよ。C#もJavaも同じだ。
ただ実際のところ、これで大して問題にも遭遇しない。
そもそもCですら . なんてゴリゴリ速度チューニング時以外は使わず、 -> と []ばかりだ。
そしてC++で参照(&)が導入され、今君が認識しているいわゆる「オブジェクト参照」は全部これになった。
だから俺はあんまりポインタは必要なくて、 -> を . として結果的に -> しか使えないようにした、
最近のほぼ全ての(というかC/C++以外全部、多分Goも含めて)言語の方が正しいと思ってるけど。
Goも制限付きポインタで、C++の&相当でしかなかった気がしたけど、違ったっけ?
なお、ポインタという「概念」を消し去るのは無理だよ。
これを何故か理解出来ない馬鹿が多いのか、Python使いは無駄に吠えてくるけど、
プログラミングを本気でやるつもりなら、その根幹の実装を理解することは避けて通れない。
>>775
erlangは全部インミュータブルで、ループ(for文)すらなく、全部再帰らしいよ。
778デフォルトの名無しさん
2020/10/31(土) 22:40:56.17ID:KVw9iANV c#はunsafeでめちゃくちゃできるけどね
やろうと思わんが
やろうと思わんが
779デフォルトの名無しさん
2020/10/31(土) 23:29:32.75ID:NOhP3tKc >>778
うん知ってる。
ついでに言うとstructが値渡しで、Cで言う . による高速化もつまみ食い出来るようになっている。
ただしこちらも主な使い方ではなく、実際に効果が出る小オブジェクト(確か16バイト以下)で限定使用することが推奨されてる。
その辺はC#は実用言語だから地味に整備してある。
unsafeもその一環でしかない。
だが結局のところ、その辺の小異に目をつぶればC/C++/C#/Java/Python/JavaScript等の現在の主力言語はどれもほぼ同じで、
C/C++だと直接ポインタを扱える、位の違いしかない。
それはつまらないとして、敢えて独自路線を行ったのがGoだが、ポインタ周りは大して独自でもなかった気がした。
Goじゃないと出来ない/他言語でやると凄く苦労する、てのはないよね?
(というかポインタ自体Cの時点で完成してて、その後は精々間違いを自動検出する方向にしか進化出来てない)
多分Goの売りはgoroutineとgenerateなのだと思う。
ただ俺にはgoroutineがそんなに便利とは思えなかったし、そもそもあれコルーチンではなく単なるスレッドだから名前間違えてるだろ、だ。
generateについてはCマクロをゴリゴリしたい奴には非常に有用なのだろうけど、そもそもそんな奴は多数派ではないし、俺もそうじゃない。
ただしAST木が標準で出せるというのはかなりインパクトはある。
とはいえ、AST木では低レベル過ぎて困るので、本当はもっと上のレベルが欲しいのが大半なんじゃないかと思う。
ちなみに最近の言語でも評価が固まってないのは例外周りで、これは各言語によってまるっきり違う。
Goはドベタにerrを値で返す、仕様としてはCモドキだが、現実的には一つの選択肢だとは思う。
格好良くはないが。
うん知ってる。
ついでに言うとstructが値渡しで、Cで言う . による高速化もつまみ食い出来るようになっている。
ただしこちらも主な使い方ではなく、実際に効果が出る小オブジェクト(確か16バイト以下)で限定使用することが推奨されてる。
その辺はC#は実用言語だから地味に整備してある。
unsafeもその一環でしかない。
だが結局のところ、その辺の小異に目をつぶればC/C++/C#/Java/Python/JavaScript等の現在の主力言語はどれもほぼ同じで、
C/C++だと直接ポインタを扱える、位の違いしかない。
それはつまらないとして、敢えて独自路線を行ったのがGoだが、ポインタ周りは大して独自でもなかった気がした。
Goじゃないと出来ない/他言語でやると凄く苦労する、てのはないよね?
(というかポインタ自体Cの時点で完成してて、その後は精々間違いを自動検出する方向にしか進化出来てない)
多分Goの売りはgoroutineとgenerateなのだと思う。
ただ俺にはgoroutineがそんなに便利とは思えなかったし、そもそもあれコルーチンではなく単なるスレッドだから名前間違えてるだろ、だ。
generateについてはCマクロをゴリゴリしたい奴には非常に有用なのだろうけど、そもそもそんな奴は多数派ではないし、俺もそうじゃない。
ただしAST木が標準で出せるというのはかなりインパクトはある。
とはいえ、AST木では低レベル過ぎて困るので、本当はもっと上のレベルが欲しいのが大半なんじゃないかと思う。
ちなみに最近の言語でも評価が固まってないのは例外周りで、これは各言語によってまるっきり違う。
Goはドベタにerrを値で返す、仕様としてはCモドキだが、現実的には一つの選択肢だとは思う。
格好良くはないが。
780デフォルトの名無しさん
2020/11/01(日) 07:15:14.81ID:BkYHp1gf >>779
いや、goroutineはスレッドとは隔絶してるんよ
そしてこの間まで理解してなかったけど
goのスタックフレームつまり自動変数も他の言語とは隔絶
それはgo独自の優位性で、goroutineは初期スタックサイズは今では2kBしかない
そのため、数百万のgoroutineを作成できる
これは巨大なコンテキストを必要とするスレッドでは太刀打ちできない性能なん
いや、goroutineはスレッドとは隔絶してるんよ
そしてこの間まで理解してなかったけど
goのスタックフレームつまり自動変数も他の言語とは隔絶
それはgo独自の優位性で、goroutineは初期スタックサイズは今では2kBしかない
そのため、数百万のgoroutineを作成できる
これは巨大なコンテキストを必要とするスレッドでは太刀打ちできない性能なん
781デフォルトの名無しさん
2020/11/01(日) 08:14:15.41ID:0aiHjqpe >>780
> goのスタックフレームつまり自動変数も他の言語とは隔絶
どこが?サイズだけならCは調整出来たと思ったけど
> そのため、数百万のgoroutineを作成できる
それは既に結論は出てる。
以下ブログ、俺が読んだ時とはだいぶ趣が異なるが、(当時は確か初期サイズ4KBだったはず)
https://github.com/maxpert/raspchat/releases/tag/v1.0.0-alpha
要は2KBでも十分大きすぎて、Nodeの方が断然まし、ってことになってる。
これは当たり前で、Linuxのkernel領域でのスタックサイズが128Bだったか256Bかに制限されているらしいから、
その気になればLinuxは256B/threadでスレッドを起動出来る。
そしてNodeはシングルスレッドだからスタック領域が余すところなく全部消費される。
これはGoではどうやっても出来ないことだ。
というよりJSのシングルスレッドアーキテクチャは最初からこのc10k問題解決を主眼にしてる。
だからその領域ではそれ用に作られたJSに勝てるはずもなく、実際そうだった、というだけ。
goroutineのサイズをケチってどうこう、って作戦は究極にはJSのシングルスレッドアーキテクチャに行き着く。
だからその方向ではNodeには勝てないのは仕様だよ。
そうじゃなくて、言語サポートがあるからスレッドがお気楽に使え、それがgoroutineです!って方が順当で、
実際そのブログの作者も喜んで使ってみたが、思ってたと違う、、、というのがそのブログだよ。
> そのため、数百万のgoroutineを作成できる
数百万のthreadなんて実際あり得ないし、管理も出来ない。
そこをgoroutineならお気楽に生成/消滅出来るので、これまで「面倒/管理が難しい」等でthread起動しなかったところを、
「これは別スレッドでも動く」というだけの理由でお気楽にすべてgoroutineで切り離して行けば一見超並列出来そうに見える。
ただ、実際それをやったらそこで遭遇している問題、つまりgoroutineは思っているほど軽くない、に遭遇してしまう。
現実的にはthreadなんて論理CPU数の2倍程度あればCPU処理だけなら埋まってしまうからそれ以上起動しても意味がない。
I/Oで引っかかった時のスタックサイズをケチりたいのなら、
JSのように非同期でシングルスレッドにする方が原理的に上だし、実際そうだった、というのがそのブログだ。
> goのスタックフレームつまり自動変数も他の言語とは隔絶
どこが?サイズだけならCは調整出来たと思ったけど
> そのため、数百万のgoroutineを作成できる
それは既に結論は出てる。
以下ブログ、俺が読んだ時とはだいぶ趣が異なるが、(当時は確か初期サイズ4KBだったはず)
https://github.com/maxpert/raspchat/releases/tag/v1.0.0-alpha
要は2KBでも十分大きすぎて、Nodeの方が断然まし、ってことになってる。
これは当たり前で、Linuxのkernel領域でのスタックサイズが128Bだったか256Bかに制限されているらしいから、
その気になればLinuxは256B/threadでスレッドを起動出来る。
そしてNodeはシングルスレッドだからスタック領域が余すところなく全部消費される。
これはGoではどうやっても出来ないことだ。
というよりJSのシングルスレッドアーキテクチャは最初からこのc10k問題解決を主眼にしてる。
だからその領域ではそれ用に作られたJSに勝てるはずもなく、実際そうだった、というだけ。
goroutineのサイズをケチってどうこう、って作戦は究極にはJSのシングルスレッドアーキテクチャに行き着く。
だからその方向ではNodeには勝てないのは仕様だよ。
そうじゃなくて、言語サポートがあるからスレッドがお気楽に使え、それがgoroutineです!って方が順当で、
実際そのブログの作者も喜んで使ってみたが、思ってたと違う、、、というのがそのブログだよ。
> そのため、数百万のgoroutineを作成できる
数百万のthreadなんて実際あり得ないし、管理も出来ない。
そこをgoroutineならお気楽に生成/消滅出来るので、これまで「面倒/管理が難しい」等でthread起動しなかったところを、
「これは別スレッドでも動く」というだけの理由でお気楽にすべてgoroutineで切り離して行けば一見超並列出来そうに見える。
ただ、実際それをやったらそこで遭遇している問題、つまりgoroutineは思っているほど軽くない、に遭遇してしまう。
現実的にはthreadなんて論理CPU数の2倍程度あればCPU処理だけなら埋まってしまうからそれ以上起動しても意味がない。
I/Oで引っかかった時のスタックサイズをケチりたいのなら、
JSのように非同期でシングルスレッドにする方が原理的に上だし、実際そうだった、というのがそのブログだ。
782デフォルトの名無しさん
2020/11/01(日) 09:44:48.65ID:Gkt9gY6r 軽さ速さは環境によって変わる
少コア環境ではM:Nスレッドモデルのgoroutineは有効に機能しない場合がある
少なくともGo開発側はM:Nスレッドモデルに合わせるにはasync/awaitモデルよりスレッド/チャネルモデルの方がいいと判断した
位の話でしょ
goroutineのモチベーションは非同期処理についてG社が持つようなメニーコアかつ分散な環境でスケールするかって話をしないと伝わらないよ
少コア環境ではM:Nスレッドモデルのgoroutineは有効に機能しない場合がある
少なくともGo開発側はM:Nスレッドモデルに合わせるにはasync/awaitモデルよりスレッド/チャネルモデルの方がいいと判断した
位の話でしょ
goroutineのモチベーションは非同期処理についてG社が持つようなメニーコアかつ分散な環境でスケールするかって話をしないと伝わらないよ
783デフォルトの名無しさん
2020/11/01(日) 09:56:36.00ID:MfA1nG9+ あんまGo知らない、まで読んだ。
784デフォルトの名無しさん
2020/11/01(日) 10:42:25.33ID:0aiHjqpe >>782
逆に言えばそれ以外の環境では他言語に劣るわけだろ。
元々は多分、命名からして、コルーチンをgoroutineで、ということなのだと思う。
コルーチンは通常は本体側と交代で間欠的に動作する前提で書かれているから、スレッドで切り離すことはしない。
ただ、もしそれが本体と並行に動作可能なら、スレッドとして切り離せば、
本体側が動いている間に次のyieldまで動作させられ、コルーチン部分の処理時間を見た目ゼロに出来る。
実際、大半のコルーチンはこれが可能なはずで、これまでは単に面倒/スレッド生成消滅のコストの為にそこまでやらなかっただけ。
だから、スレッドよりもっとお手軽で軽いgoroutineを用意すれば、という訳だ。
OSでの並行はprocessだが、multi processは重すぎるのでアプリ内processとしてthreadが出来た。
それと同様に、thread内の並行として、goroutineという、もう一段軽い物を用意した。
だからここまでのストーリーは辻褄が合っているとして、それがどこに適用出来るかだよ。
CPUが精々数個しかないそこら辺のPCだと、threadだけで埋めきれるので、普通にそれが最適解になる。
threadだけでは埋めきれないほどのCPUがあり、積極的に並行goroutineとして切り出してくれないといけない、
という、いわゆるメニーコアならGoの方が有利になる可能性があるけど、実際この場合はキャッシュコヒーレンシの問題が発生してくる。
勿論チャネルだし、後はオブジェクトの中身も含めてインミュータブル、
つまりErlangの世界まで行けたらこの辺の問題も無くなるけど、Goはそういう感じじゃないでしょ。
そもそもメニーコアの筆頭のXeonPiも死に体だし。(これはGoのせいではないけど)
逆に言えばそれ以外の環境では他言語に劣るわけだろ。
元々は多分、命名からして、コルーチンをgoroutineで、ということなのだと思う。
コルーチンは通常は本体側と交代で間欠的に動作する前提で書かれているから、スレッドで切り離すことはしない。
ただ、もしそれが本体と並行に動作可能なら、スレッドとして切り離せば、
本体側が動いている間に次のyieldまで動作させられ、コルーチン部分の処理時間を見た目ゼロに出来る。
実際、大半のコルーチンはこれが可能なはずで、これまでは単に面倒/スレッド生成消滅のコストの為にそこまでやらなかっただけ。
だから、スレッドよりもっとお手軽で軽いgoroutineを用意すれば、という訳だ。
OSでの並行はprocessだが、multi processは重すぎるのでアプリ内processとしてthreadが出来た。
それと同様に、thread内の並行として、goroutineという、もう一段軽い物を用意した。
だからここまでのストーリーは辻褄が合っているとして、それがどこに適用出来るかだよ。
CPUが精々数個しかないそこら辺のPCだと、threadだけで埋めきれるので、普通にそれが最適解になる。
threadだけでは埋めきれないほどのCPUがあり、積極的に並行goroutineとして切り出してくれないといけない、
という、いわゆるメニーコアならGoの方が有利になる可能性があるけど、実際この場合はキャッシュコヒーレンシの問題が発生してくる。
勿論チャネルだし、後はオブジェクトの中身も含めてインミュータブル、
つまりErlangの世界まで行けたらこの辺の問題も無くなるけど、Goはそういう感じじゃないでしょ。
そもそもメニーコアの筆頭のXeonPiも死に体だし。(これはGoのせいではないけど)
785デフォルトの名無しさん
2020/11/01(日) 10:42:50.15ID:0aiHjqpe だから、>>782の観点だけなら、
Goは素晴らしい実験用言語だったけど、現実的ではなかったね、で終わると思うよ。
実際、Goって使用者は増えてるのか?
Rustは前年度「Rust新規に始めた人数よりCを新規に始めた人数の方が多くなっちまったよオイオイ」とか話題になっていたが。
JSはプログラマに、I/Oを明示的に切り離して高速化することを求め、(実際あの非同期は壮絶にウザイが)現実的にはものすごく機能してる。
Goはプログラマに、並行可能な部分を積極的に切り離すことにより超並行によって高速化を目指している、と捕らえることは出来るが、
実際これは全く上手く行ってないし、今後とも上手く行く気配もないでしょ。
一時期、CUDAよりもXeonPiだ、という時期もあったはずだけど、なんか話題はCUDAに戻ってるしさ。
Goは素晴らしい実験用言語だったけど、現実的ではなかったね、で終わると思うよ。
実際、Goって使用者は増えてるのか?
Rustは前年度「Rust新規に始めた人数よりCを新規に始めた人数の方が多くなっちまったよオイオイ」とか話題になっていたが。
JSはプログラマに、I/Oを明示的に切り離して高速化することを求め、(実際あの非同期は壮絶にウザイが)現実的にはものすごく機能してる。
Goはプログラマに、並行可能な部分を積極的に切り離すことにより超並行によって高速化を目指している、と捕らえることは出来るが、
実際これは全く上手く行ってないし、今後とも上手く行く気配もないでしょ。
一時期、CUDAよりもXeonPiだ、という時期もあったはずだけど、なんか話題はCUDAに戻ってるしさ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- 【悲報】日本人錯乱「集団的自衛権行使に賛成。けど自衛隊を戦わせるのは反対」 [237216734]
- 【悲報】高市効果で「1ドル=160円」が相場へwwwwwwwwwwwwwwwwwwwwwwwwwwwww 止まらぬ高市円安💥💥 [871926377]
- 小川彩佳アナ「高市総理はここまで影響が出ることを想像して発言したんでしょうか」高市ソルジャー「!!!!(シュババババ)」 [931948549]
- 今来た遊戯王やってる奴スレ
- FGOで好きなサーヴァントがアビゲイル、北斎、楊貴妃なんだが
- 自閉症が「んなっしょい」と連呼するお🏡
