C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」
っていう雑談スレ。
前スレ
https://itest.5ch.net/mevius/test/read.cgi/tech/1688129795
関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.n...cgi/prog/1619943288/
結局C++とRustってどっちが良いの? 6traits
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2023/07/29(土) 15:05:46.55ID:2Hm/yplK599デフォルトの名無しさん
2023/08/16(水) 23:46:16.73ID:cEmRinaz600デフォルトの名無しさん
2023/08/16(水) 23:53:08.75ID:NsfviM1N601デフォルトの名無しさん
2023/08/17(木) 00:10:55.41ID:+P8PJonD602デフォルトの名無しさん
2023/08/17(木) 01:03:05.11ID:5Gn6RQWL こいつ前もやってたなコレw
「数学的に」の次は「科学的に」かww
「数学的に」の次は「科学的に」かww
603デフォルトの名無しさん
2023/08/17(木) 01:08:52.68ID:a0UknZUa 先生、management scienceは科学に入りますか?
604デフォルトの名無しさん
2023/08/17(木) 01:27:54.71ID:HpAmrdyt605デフォルトの名無しさん
2023/08/17(木) 01:56:59.01ID:ulA9klML 争え……もっと争え……
606デフォルトの名無しさん
2023/08/17(木) 01:59:28.59ID:HpAmrdyt 「OpenAIが破産」でググってみろ。
607デフォルトの名無しさん
2023/08/17(木) 02:35:59.33ID:IS1r35hV OpenAIが存続するかに関わらず
LLMが社会に取り込まれるのは確定だよ
君らの周りも今年は対応に追われてないか?
LLMが社会に取り込まれるのは確定だよ
君らの周りも今年は対応に追われてないか?
608デフォルトの名無しさん
2023/08/17(木) 09:57:29.35ID:jCTlUTJB 言語の質をデータの量で凌駕する作戦がなぜ失敗するのか?
量で凌駕するって言ったのにお金を節約しようとしてるからでしょ
量で凌駕するって言ったのにお金を節約しようとしてるからでしょ
609デフォルトの名無しさん
2023/08/17(木) 13:28:13.01ID:nmPHx5rP アスペの共通点
御世辞を真に受ける
御世辞を真に受ける
610デフォルトの名無しさん
2023/08/17(木) 13:45:23.19ID:8pt5gLkh 逆にマウンティングを真に受けて、上下関係は社会に必要だと思い込むのも困る
611デフォルトの名無しさん
2023/08/17(木) 22:13:42.98ID:kQybzgk4 >>557
そのあたりはC++23でも標準化をあきらめた
低レベルな部品のみ標準化して提供という方針のままのようだ
C++20コルーチン向けライブラリcppcoroは実用的に十分埋めきれていない
C++20コルーチンにも対応したboost.asioもスケジューリング問題にぶち当たる
いずれにしても記述性と簡素さがよろしくない
IT大手各社がC++をあきらめてRustへ走ったのも仕方ないかと
そのあたりはC++23でも標準化をあきらめた
低レベルな部品のみ標準化して提供という方針のままのようだ
C++20コルーチン向けライブラリcppcoroは実用的に十分埋めきれていない
C++20コルーチンにも対応したboost.asioもスケジューリング問題にぶち当たる
いずれにしても記述性と簡素さがよろしくない
IT大手各社がC++をあきらめてRustへ走ったのも仕方ないかと
612デフォルトの名無しさん
2023/08/17(木) 23:32:30.60ID:IS1r35hV マルチスプロセスやマルチスレッドじゃだめなん?
613デフォルトの名無しさん
2023/08/18(金) 00:14:51.05ID:cJVMdbtG >>612
CPUの性能を活かせない
CPUと比べてネット通信はとても遅く待ち時間となるため空き時間をいかに活用できるかが勝負
つまり次々と切り替えて処理していくことになるが
スレッドは各リソースコストも切り替えコストもかかりプロセスはさらにそれらのコストが非常に大きい
そのためCPUの性能を活かすどころか切り替えコストで無駄にしてリソースコストで限界に達していた
そのため例えばJavaScriptはWebブラウザ内でもNode.jsなどでも同様にシングルスレッドの中で多数の通信やGUIなどを並行して非同期に捌けるようにした
Goでも多数の軽量のGoルーチンがシングルスレッドまたはマルチスレッド上で並行して動いて非同期に多数処理できるようにした
Rustの非同期タスク及びC++20のコルーチンも同じ位置付けで両者はほぼ同じ仕組みのライバル同士
CPUの性能を活かせない
CPUと比べてネット通信はとても遅く待ち時間となるため空き時間をいかに活用できるかが勝負
つまり次々と切り替えて処理していくことになるが
スレッドは各リソースコストも切り替えコストもかかりプロセスはさらにそれらのコストが非常に大きい
そのためCPUの性能を活かすどころか切り替えコストで無駄にしてリソースコストで限界に達していた
そのため例えばJavaScriptはWebブラウザ内でもNode.jsなどでも同様にシングルスレッドの中で多数の通信やGUIなどを並行して非同期に捌けるようにした
Goでも多数の軽量のGoルーチンがシングルスレッドまたはマルチスレッド上で並行して動いて非同期に多数処理できるようにした
Rustの非同期タスク及びC++20のコルーチンも同じ位置付けで両者はほぼ同じ仕組みのライバル同士
614デフォルトの名無しさん
2023/08/18(金) 00:24:29.53ID:tXbZhR4S >>613
>スレッドは各リソースコストも切り替えコストもかかりプロセスはさらにそれらのコストが非常に大きい
何のコスト?
「切り替えコスト」って書いてるのはユーザーモードから
カーネルモードへの切り替えコスト?
>スレッドは各リソースコストも切り替えコストもかかりプロセスはさらにそれらのコストが非常に大きい
何のコスト?
「切り替えコスト」って書いてるのはユーザーモードから
カーネルモードへの切り替えコスト?
615デフォルトの名無しさん
2023/08/18(金) 00:41:08.12ID:7ABRPFiH プロセス全体をexitしたら各スレッドのデストラクタはどうなるんだろう
Cの標準ライブラリを捨てる
C++のデストラクタを排除する
ネイティブスレッド禁止
の三択かな
Cの標準ライブラリを捨てる
C++のデストラクタを排除する
ネイティブスレッド禁止
の三択かな
616デフォルトの名無しさん
2023/08/18(金) 06:19:11.79ID:7A1ztnCR >>614
スレッドは文脈からネイティブスレッド(OSスレッド)のことだとすると、
スレッド切り替えは少なくとも全レジスタの退避と復帰が必要となり、
プロセス切り替えはさらにメモリ空間の切り替えが加わる。
そして各スレッドは個別のスタック領域を持つためリソース的に大量のスレッド作成は限界個数が早い。
一方でC++20コルーチンやRustのタスクはスタックレスコルーチンなので、
個別スタック領域を必要とせず全レジスタの退避復帰切り替えも必要としないため、
大量に生成することができて極めて軽量に動作することになる。
スレッドは文脈からネイティブスレッド(OSスレッド)のことだとすると、
スレッド切り替えは少なくとも全レジスタの退避と復帰が必要となり、
プロセス切り替えはさらにメモリ空間の切り替えが加わる。
そして各スレッドは個別のスタック領域を持つためリソース的に大量のスレッド作成は限界個数が早い。
一方でC++20コルーチンやRustのタスクはスタックレスコルーチンなので、
個別スタック領域を必要とせず全レジスタの退避復帰切り替えも必要としないため、
大量に生成することができて極めて軽量に動作することになる。
617デフォルトの名無しさん
2023/08/18(金) 09:26:08.12ID:ISPaueS8 並行並列処理に関してはGoにRustは何一つ勝ててないでしょ
Goは標準で並行並列処理をサポート
selectとチャネルとコンテキストがあり、従来のasync/awaitと比べると凝ったことをするのが非常に簡単
キャンセル処理やrate limitingや並列数制御が標準機構で自由自在
標準でサポートしているからどのサードパーティライブラリでも共通の仕組みが利用できる
こういったものが何のライブラリも必要とせず手軽にできるのが最大の強み
Goはコンパイル速度とマルチコアでスケールする並行並列処理のために作られたから
これらの観点でメモリ安全が目的で作られたRustが勝てないのは当然
Goは標準で並行並列処理をサポート
selectとチャネルとコンテキストがあり、従来のasync/awaitと比べると凝ったことをするのが非常に簡単
キャンセル処理やrate limitingや並列数制御が標準機構で自由自在
標準でサポートしているからどのサードパーティライブラリでも共通の仕組みが利用できる
こういったものが何のライブラリも必要とせず手軽にできるのが最大の強み
Goはコンパイル速度とマルチコアでスケールする並行並列処理のために作られたから
これらの観点でメモリ安全が目的で作られたRustが勝てないのは当然
618デフォルトの名無しさん
2023/08/18(金) 09:40:42.56ID:Xs4y23Ew 並列並行と非同期を対比する阿呆
619デフォルトの名無しさん
2023/08/18(金) 09:47:52.53ID:Rd3M1fjh 干支一周前でこれだからな
http://ponner.blog104.fc2.com/blog-entry-211.html
http://ponner.blog104.fc2.com/blog-entry-211.html
620デフォルトの名無しさん
2023/08/18(金) 09:53:40.51ID:ISPaueS8 >>618
goroutineやnode.jsのpromiseといったもので並行と非同期の違いって何?
別に変わらんし、区別する意味はないぞ
非同期ってのは汎用性が高い言葉で完了を待たないって意味なら何にでも使えるわけで
例えばLinuxでファイルを書き込むときはページキャッシュだけに書き込みディスクIOは非同期に行われる
これを並行処理とは言わないはず
goroutineやnode.jsのpromiseといったもので並行と非同期の違いって何?
別に変わらんし、区別する意味はないぞ
非同期ってのは汎用性が高い言葉で完了を待たないって意味なら何にでも使えるわけで
例えばLinuxでファイルを書き込むときはページキャッシュだけに書き込みディスクIOは非同期に行われる
これを並行処理とは言わないはず
621デフォルトの名無しさん
2023/08/18(金) 09:54:03.98ID:Rd3M1fjh >>571
中身が replace all する関数で名前が delete all とか違う意味だったらどう解釈するのか教えて
中身が replace all する関数で名前が delete all とか違う意味だったらどう解釈するのか教えて
622デフォルトの名無しさん
2023/08/18(金) 09:59:00.46ID:Rd3M1fjh623デフォルトの名無しさん
2023/08/18(金) 10:15:07.27ID:Rd3M1fjh >>617
Goでアドバンテージ持ってる会社が他社を陥れる為にRustいいぞって噂を流したのかもな
Goでアドバンテージ持ってる会社が他社を陥れる為にRustいいぞって噂を流したのかもな
624デフォルトの名無しさん
2023/08/18(金) 11:27:41.44ID:7ABRPFiH お客様を陥れるのが本質
本質を隠す為に同業者を陥れるという噂を流している
本質を隠す為に同業者を陥れるという噂を流している
625デフォルトの名無しさん
2023/08/18(金) 12:31:50.68ID:cs4O4oY8626デフォルトの名無しさん
2023/08/18(金) 13:05:03.86ID:Es7nSkHo >>617
GoでできるそれらのことはRustでもできるよ
むしろチャネルの種類などRustの方が機能も豊富だよ
Goはモダンな言語の中で唯一null安全でないしデータ競合も起きまくるし安全性を無視しすぎかな
それはともかくGoは言語機能が貧弱すぎて辛すぎる
ジェネリクスがようやく入ったけどまともに使えないなど不満が多いよね
結局Goはガベージコレクション言語にすぎないから様々な限界があるよ
C/C++/Rustのように他の言語たちのライブラリ作成もできないしね
GoでできるそれらのことはRustでもできるよ
むしろチャネルの種類などRustの方が機能も豊富だよ
Goはモダンな言語の中で唯一null安全でないしデータ競合も起きまくるし安全性を無視しすぎかな
それはともかくGoは言語機能が貧弱すぎて辛すぎる
ジェネリクスがようやく入ったけどまともに使えないなど不満が多いよね
結局Goはガベージコレクション言語にすぎないから様々な限界があるよ
C/C++/Rustのように他の言語たちのライブラリ作成もできないしね
627デフォルトの名無しさん
2023/08/18(金) 13:14:44.19ID:Es7nSkHo >C++20コルーチンやRustのタスクはスタックレスコルーチンなので、
>個別スタック領域を必要とせず
Goルーチンは個別のスタック領域を必要としてしまうね
>個別スタック領域を必要とせず
Goルーチンは個別のスタック領域を必要としてしまうね
628デフォルトの名無しさん
2023/08/18(金) 13:25:35.72ID:ygIBI33X chatGPTは何で作ってるんだろ?
629デフォルトの名無しさん
2023/08/18(金) 13:58:06.66ID:ISPaueS8 >>626
“気軽”にできるといってるわけだが本当に気軽にできるの?
標準ライブラリでサポートしているの?
データ競合に関してはチャネルを使えばある程度は回避できるしrace detectorもあるのでさほど問題にはならない
race conditionに関してはRustでもGoでも検出はできないから結局プログラマの技量になるわけだけど
Rustにしたからといってあらゆる並行並列処理のバグが回避できるものじゃないぞ
そもそも難しいものなんだから
“気軽”にできるといってるわけだが本当に気軽にできるの?
標準ライブラリでサポートしているの?
データ競合に関してはチャネルを使えばある程度は回避できるしrace detectorもあるのでさほど問題にはならない
race conditionに関してはRustでもGoでも検出はできないから結局プログラマの技量になるわけだけど
Rustにしたからといってあらゆる並行並列処理のバグが回避できるものじゃないぞ
そもそも難しいものなんだから
630デフォルトの名無しさん
2023/08/18(金) 14:08:17.74ID:oVN8QNav Goはこんな基本操作でも恐ろしい挙動で驚いた
14 デフォルトの名無しさん 2023/07/28(金) 03:06
その話ならばGoという最悪の言語があって直感と常識を裏切る挙動をしてくる
しかも理解できたと思ったら二転三転と次々と裏切りの挙動をしてくる
// まず [1 2 3] をaに作ってbに代入するところからスタート
a := []int{1, 2, 3}
b := a
// 実験1: 途中要素の書き換え
a[1] = 222
fmt.Println("a =", a) // → [1 222 3]
fmt.Println("b =", b) // → [1 222 3]
// aもbも書き換わってしまった!同じものを指しているのだろうか?
// 実験2: 末尾要素の削除
a = a[:len(a)-1]
fmt.Println("a =", a) // → [1 222]
fmt.Println("b =", b) // → [1 222 3]
// aだけ削除された!aとbは別なのだろうか?
// 実験3: 要素の追加 (その1)
a = append(a, 777)
fmt.Println("a =", a) // → [1 222 777]
fmt.Println("b =", b) // → [1 222 777]
// aとbは再び同じになってしまった!なぜだ??
// 実験4: 要素の追加 (その2)
a = append(a, 999)
fmt.Println("a =", a) // → [1 222 777 999]
fmt.Println("b =", b) // → [1 222 777]
// aだけ追加された!また裏切られた!!
14 デフォルトの名無しさん 2023/07/28(金) 03:06
その話ならばGoという最悪の言語があって直感と常識を裏切る挙動をしてくる
しかも理解できたと思ったら二転三転と次々と裏切りの挙動をしてくる
// まず [1 2 3] をaに作ってbに代入するところからスタート
a := []int{1, 2, 3}
b := a
// 実験1: 途中要素の書き換え
a[1] = 222
fmt.Println("a =", a) // → [1 222 3]
fmt.Println("b =", b) // → [1 222 3]
// aもbも書き換わってしまった!同じものを指しているのだろうか?
// 実験2: 末尾要素の削除
a = a[:len(a)-1]
fmt.Println("a =", a) // → [1 222]
fmt.Println("b =", b) // → [1 222 3]
// aだけ削除された!aとbは別なのだろうか?
// 実験3: 要素の追加 (その1)
a = append(a, 777)
fmt.Println("a =", a) // → [1 222 777]
fmt.Println("b =", b) // → [1 222 777]
// aとbは再び同じになってしまった!なぜだ??
// 実験4: 要素の追加 (その2)
a = append(a, 999)
fmt.Println("a =", a) // → [1 222 777 999]
fmt.Println("b =", b) // → [1 222 777]
// aだけ追加された!また裏切られた!!
631デフォルトの名無しさん
2023/08/18(金) 14:24:07.82ID:tXbZhR4S632デフォルトの名無しさん
2023/08/18(金) 14:31:02.70ID:KUMKpnb5633デフォルトの名無しさん
2023/08/18(金) 15:25:39.40ID:JLPPn6Yw634デフォルトの名無しさん
2023/08/18(金) 16:16:34.73ID:7ABRPFiH 常識的に考えれば気持ちいい方が合理的だよ
常識を疑えば、自分が損をしてでも何かを成し遂げるみたいな
合理性のない人間が増えてくる
常識を疑えば、自分が損をしてでも何かを成し遂げるみたいな
合理性のない人間が増えてくる
635デフォルトの名無しさん
2023/08/18(金) 16:27:02.47ID:v1tgQeKG >>630
この話広げるのもなんなんだけどこの挙動はどう説明されるの?
この話広げるのもなんなんだけどこの挙動はどう説明されるの?
636デフォルトの名無しさん
2023/08/18(金) 16:30:59.19ID:ISPaueS8 >>632
race conditionの意味でググってこいよ
機械で検出できない高レベルの競合のことで、並行並列処理するときは常にこれと向き合う必要がある
Rustで検出できるのはdata raceでこれはGoでもランタイムだが検出できるわ
race conditionの意味でググってこいよ
機械で検出できない高レベルの競合のことで、並行並列処理するときは常にこれと向き合う必要がある
Rustで検出できるのはdata raceでこれはGoでもランタイムだが検出できるわ
637デフォルトの名無しさん
2023/08/18(金) 16:37:05.86ID:tXbZhR4S そこでChatGPTですよ!
638デフォルトの名無しさん
2023/08/18(金) 16:55:50.42ID:cMwm5CSc ChatGPTは、捨て垢で使えるようになってから来いよ。。
こう煩いとRust布教されるほうがマシw
こう煩いとRust布教されるほうがマシw
639デフォルトの名無しさん
2023/08/18(金) 17:08:33.27ID:tXbZhR4S デッドロック検出できるのって画期的なことだと思うよ
640デフォルトの名無しさん
2023/08/18(金) 17:38:45.64ID:KUMKpnb5 >>636
data race関係ないrace conditionを言語で検知してほしいケースなんてあるの?
data race関係ないrace conditionを言語で検知してほしいケースなんてあるの?
641デフォルトの名無しさん
2023/08/18(金) 17:39:23.48ID:S+r2DpMo 過ぎたるはなんとかってやつか
しつこ過ぎるとダメって事やな
しつこ過ぎるとダメって事やな
642デフォルトの名無しさん
2023/08/18(金) 17:47:16.72ID:ISPaueS8643デフォルトの名無しさん
2023/08/18(金) 17:47:46.99ID:JBAxLOor644デフォルトの名無しさん
2023/08/18(金) 18:03:31.02ID:ER8wa9uU 実際にGoで作ってるところは有名どころでも並行処理関連のバグ量産してるからRustとはリスクレベルが全く違うわな
645デフォルトの名無しさん
2023/08/18(金) 18:43:48.21ID:31/+TCtY646デフォルトの名無しさん
2023/08/18(金) 18:47:47.02ID:7ABRPFiH ハイリスクハイリターンのように、リスクとリターンの差に意味がある
リスクとリスクの比較や、リターンとリターンの比較は合理的ではないと思う
リスクとリスクの比較や、リターンとリターンの比較は合理的ではないと思う
647デフォルトの名無しさん
2023/08/18(金) 19:17:38.70ID:ISPaueS8 >>645
だけど気軽にできないよね
標準の機構で並行並列処理できないよね
async await使うだけでアホみたいに大量の依存をダウンロードしてきてコンパイル爆遅だよね
GoはCとかの手続き型言語を知っていたら、すぐマスターできるけど
Rustで並行並列処理までマスターするのに一体どれだけ時間がかかるんだろうねw
だけど気軽にできないよね
標準の機構で並行並列処理できないよね
async await使うだけでアホみたいに大量の依存をダウンロードしてきてコンパイル爆遅だよね
GoはCとかの手続き型言語を知っていたら、すぐマスターできるけど
Rustで並行並列処理までマスターするのに一体どれだけ時間がかかるんだろうねw
648デフォルトの名無しさん
2023/08/18(金) 19:22:26.53ID:Kl/zN5NU649デフォルトの名無しさん
2023/08/18(金) 19:40:10.54ID:e3KbknBC650デフォルトの名無しさん
2023/08/18(金) 19:44:32.36ID:JiE5FPq0651デフォルトの名無しさん
2023/08/18(金) 19:50:41.88ID:yS5HHAxP >>630
そんな妙な動きをするプログラミング言語はGoだけだな
そんな妙な動きをするプログラミング言語はGoだけだな
652デフォルトの名無しさん
2023/08/18(金) 20:23:05.08ID:/GsC+n7c C++erに無視されてきてつまらなくなってきたので今度はGoをタゲるおじさん
653デフォルトの名無しさん
2023/08/18(金) 20:29:00.75ID:VmqYer8d >>630
使いやすいかどうかは謎だけどスライスだから当然の挙動かなと
実験1 スライスは配列そのものじゃなく参照と長さなのでそういうもの
実験2 aは新しく作った別のスライスを代入してるので当然
実験3 スライスaの末尾に対してappendしてるので当然
実験4 3と同じ スライスaとbの長さが違っているので当然
結論
スライスすら使えない奴は馬鹿
使いやすいかどうかは謎だけどスライスだから当然の挙動かなと
実験1 スライスは配列そのものじゃなく参照と長さなのでそういうもの
実験2 aは新しく作った別のスライスを代入してるので当然
実験3 スライスaの末尾に対してappendしてるので当然
実験4 3と同じ スライスaとbの長さが違っているので当然
結論
スライスすら使えない奴は馬鹿
654デフォルトの名無しさん
2023/08/18(金) 20:36:58.94ID:ISPaueS8 てかこれを理解できないのであればRustは習得できないんじゃないかね
Rustできるならわかるだろ
Rustできるならわかるだろ
655デフォルトの名無しさん
2023/08/18(金) 20:38:53.30ID:pJm/stU2656デフォルトの名無しさん
2023/08/18(金) 20:40:40.07ID:VmqYer8d 余談
初期の開発中のC言語にはポインタは int* じゃなくてint[]だった
初期の開発中のC言語にはポインタは int* じゃなくてint[]だった
657デフォルトの名無しさん
2023/08/18(金) 20:51:02.38ID:NqAD2XrU >>630
Goの何がおかしいのかわかった
C++やRustや他の普通の言語ならば
bがaのコピーならばその実験1~4すべてでaとbは異なる
bがaを参照しているならばその実験1~4すべてでaとbは同じになる
その二つのケースどちらかになる
Goは実験を進めるごとにaとbが異なったり再び同じになったり再び異なったりおかしい
Goの何がおかしいのかわかった
C++やRustや他の普通の言語ならば
bがaのコピーならばその実験1~4すべてでaとbは異なる
bがaを参照しているならばその実験1~4すべてでaとbは同じになる
その二つのケースどちらかになる
Goは実験を進めるごとにaとbが異なったり再び同じになったり再び異なったりおかしい
658デフォルトの名無しさん
2023/08/18(金) 20:54:15.45ID:VmqYer8d わざと言ってるよねwそれw
659デフォルトの名無しさん
2023/08/18(金) 21:01:52.15ID:fjgGWx1p なぜGoだけがそんな変な仕様にしちゃったの?
新旧の言語を見回してもそんな変な仕様の言語は存在しないよ
新旧の言語を見回してもそんな変な仕様の言語は存在しないよ
660デフォルトの名無しさん
2023/08/18(金) 21:20:15.18ID:VmqYer8d スライス自体は他も似たり寄ったりだよ
pythonは3で多分新しい配列を作る
多分appendの時に新しい配列をコピーしてそっちに代入するはず
元の実態を明確にコピーすると言わずにコピーするかどうかと言う設計理念の違いだろう
pythonは初心者向けだからそうしたgoはしなかった
pythonは3で多分新しい配列を作る
多分appendの時に新しい配列をコピーしてそっちに代入するはず
元の実態を明確にコピーすると言わずにコピーするかどうかと言う設計理念の違いだろう
pythonは初心者向けだからそうしたgoはしなかった
661デフォルトの名無しさん
2023/08/18(金) 21:24:30.15ID:VmqYer8d 配列の箱が並んだ絵でも書いてスライスは別のところに書いてポインタの矢印と長さでも書いてみれば理解しやすい
662デフォルトの名無しさん
2023/08/18(金) 21:36:19.25ID:ISPaueS8 >>659
GoはC言語に近い言語だから
Cでmallocとかreallocとかを使って配列を扱ってたらよく理解できるはず
無駄なコピーを避けつつ、細かいメモリ操作も行えるようにして最適化の余地を残しているのがGoの特徴なので
GoはC言語に近い言語だから
Cでmallocとかreallocとかを使って配列を扱ってたらよく理解できるはず
無駄なコピーを避けつつ、細かいメモリ操作も行えるようにして最適化の余地を残しているのがGoの特徴なので
663デフォルトの名無しさん
2023/08/18(金) 21:36:31.10ID:pJm/stU2 >>659
スライスはrangeみたいなもので、スライスそのものはそんなに変なものではない。
問題はそこではなくて、
・スライスに「可変長なだけの配列」に見えるような表記を割り当てた
・真に「可変長なだけの配列」(vectorみたいなの)が存在しない
なので、スライスと配列を混同して使わざるを得ない言語設計が問題。
素直にCOWスライスを用意すればまだ良かったんだけどね。
スライスはrangeみたいなもので、スライスそのものはそんなに変なものではない。
問題はそこではなくて、
・スライスに「可変長なだけの配列」に見えるような表記を割り当てた
・真に「可変長なだけの配列」(vectorみたいなの)が存在しない
なので、スライスと配列を混同して使わざるを得ない言語設計が問題。
素直にCOWスライスを用意すればまだ良かったんだけどね。
664デフォルトの名無しさん
2023/08/18(金) 21:41:06.14ID:VmqYer8d Goのスライスは現実社会の物を表しているとも言える
1,2,3と書かれた箱が並べてあって、あるスライス(窓)が1,2を指しているとする
そのスライスに4の箱を追加されたとしたらどのようになるのが望ましいか
Goは現実世界のように1,2,4,3と箱が並ぶ
Pyothonはどこかから急に箱が表れて
1,2,4と言う並びの箱の列と1,2,3と言う並びの箱の列ができる
1,2,3と書かれた箱が並べてあって、あるスライス(窓)が1,2を指しているとする
そのスライスに4の箱を追加されたとしたらどのようになるのが望ましいか
Goは現実世界のように1,2,4,3と箱が並ぶ
Pyothonはどこかから急に箱が表れて
1,2,4と言う並びの箱の列と1,2,3と言う並びの箱の列ができる
665デフォルトの名無しさん
2023/08/18(金) 21:42:56.92ID:seEzfIxj なるほど、スライスと言われてなんとなくわからんでもない挙動には見えてきた
でもやっぱりバグを呼び込むためだけの仕様にも思える
こんな仕様にして誰か幸せになるんかな
でもやっぱりバグを呼び込むためだけの仕様にも思える
こんな仕様にして誰か幸せになるんかな
666デフォルトの名無しさん
2023/08/18(金) 21:45:59.61ID:pJm/stU2 >>665
スピードマニア、つまりgo ユーザー。
スピードマニア、つまりgo ユーザー。
667デフォルトの名無しさん
2023/08/18(金) 22:01:59.17ID:UHKUI4sz C++もRustもわかりやすい仕様だけどGoよりスピード出る
668デフォルトの名無しさん
2023/08/18(金) 22:23:22.38ID:Jp8sOWVj Goは言語設計をミスってるな
>>630
// 実験3: 要素の追加 (その1)
a = append(a, 777)
この部分は他の言語だとメソッド名こそ異なれど
a.add(777)
a.append(777)
a.push(777)
a.push_back(777)
となる
メソッド名は自由だがこの形式が正しい
Goの失敗の原点はここだ
a = append(a, 777)
>>630
// 実験3: 要素の追加 (その1)
a = append(a, 777)
この部分は他の言語だとメソッド名こそ異なれど
a.add(777)
a.append(777)
a.push(777)
a.push_back(777)
となる
メソッド名は自由だがこの形式が正しい
Goの失敗の原点はここだ
a = append(a, 777)
669デフォルトの名無しさん
2023/08/18(金) 22:31:11.69ID:7ABRPFiH 言語とライブラリを分離できないと潰しがきかない
C++の場合mallocやsjljを単なるライブラリではなく言語の一部にしたのが悪手
C++の場合mallocやsjljを単なるライブラリではなく言語の一部にしたのが悪手
670デフォルトの名無しさん
2023/08/18(金) 22:42:32.22ID:hfXr0Ior671デフォルトの名無しさん
2023/08/18(金) 23:16:43.53ID:Xs4y23Ew 手軽というのは実際はただの手抜きなんだよ
その尻拭いをさせられてきた良識ある若者が次の世代のためにRustのようなものを産み出す
それを無自覚な老害が腐す
その尻拭いをさせられてきた良識ある若者が次の世代のためにRustのようなものを産み出す
それを無自覚な老害が腐す
672デフォルトの名無しさん
2023/08/18(金) 23:38:51.82ID:H/YqNwUg >>629
標準ライブラリの範囲は言語ごとに異なる
Rustの方針は言語サポートが必要な機能を標準ライブラリとする傾向が強いため他より範囲が狭い
例えばRustの標準ライブラリに正規表現や乱数などは含まれていない
だからといってRustはそれらが扱えない、というのは正しくないように
標準ライブラリに入っているか否かはさほど重要なことではない
今回の例で言えばC++20のコルーチンもRustのasyncコルーチン(タスク)も意図的にそれ自体の機能のみを言語機能および標準ライブラリに入れている
コルーチンのスケジューリング機能など含めてほとんどの機能は標準ライブラリにない
それらは言語自体が直後サポートしなくても実装可能だからであろう
Rustの場合はデファクトスタンダードの地位を確立したtokioがあるため困ることはない
標準ライブラリの範囲は言語ごとに異なる
Rustの方針は言語サポートが必要な機能を標準ライブラリとする傾向が強いため他より範囲が狭い
例えばRustの標準ライブラリに正規表現や乱数などは含まれていない
だからといってRustはそれらが扱えない、というのは正しくないように
標準ライブラリに入っているか否かはさほど重要なことではない
今回の例で言えばC++20のコルーチンもRustのasyncコルーチン(タスク)も意図的にそれ自体の機能のみを言語機能および標準ライブラリに入れている
コルーチンのスケジューリング機能など含めてほとんどの機能は標準ライブラリにない
それらは言語自体が直後サポートしなくても実装可能だからであろう
Rustの場合はデファクトスタンダードの地位を確立したtokioがあるため困ることはない
673デフォルトの名無しさん
2023/08/18(金) 23:44:30.71ID:H/YqNwUg674デフォルトの名無しさん
2023/08/18(金) 23:52:18.58ID:H/YqNwUg >>654
RustでVecだと最初のb = aの時点でムーブとなるためその問題は起きない
ムーブではなくb = &aとして参照にしても競合防止のため書き換えできず問題は起きない
Goでaとbが異なったり同じになったりを二転三転してるのはaとbが競合してると考えてもいいのかもしれない
RustでVecだと最初のb = aの時点でムーブとなるためその問題は起きない
ムーブではなくb = &aとして参照にしても競合防止のため書き換えできず問題は起きない
Goでaとbが異なったり同じになったりを二転三転してるのはaとbが競合してると考えてもいいのかもしれない
675デフォルトの名無しさん
2023/08/18(金) 23:57:19.87ID:H/YqNwUg >>670
Rustはオブジェクト指向であってクラス継承の概念のみを排除している
だからそこではRustでもa.push(a)の形となりVec型の値(オブジェクト)が書き換わる
他の例でもイテレータはnext()する毎に値(オブジェクト)が書き換わる
Rustはオブジェクト指向であってクラス継承の概念のみを排除している
だからそこではRustでもa.push(a)の形となりVec型の値(オブジェクト)が書き換わる
他の例でもイテレータはnext()する毎に値(オブジェクト)が書き換わる
676デフォルトの名無しさん
2023/08/19(土) 00:22:06.39ID:yRRJwuXx getterだけを公開すればオブジェクト指向だが
いつどこからsetされるか分からないコードはstatic変数に近い性質
それはオブジェクト指向ではない
いつどこからsetされるか分からないコードはstatic変数に近い性質
それはオブジェクト指向ではない
677デフォルトの名無しさん
2023/08/19(土) 00:59:21.18ID:78dnv4FG >>676
「いつどこからsetされるか分からないコード」について
Rustは所有権もしくは可変参照を持たないと値を書き換えられないからコード上で明確にわかるよ
static変数については「いつどこからsetされるか分からないコード」によってデータ競合が起きうるのはその通り
しかしRustのstatic変数は(unsafeを除いて)可変(mutable)ではないため「いつどこからsetされるか分からないコード」によってデータ競合を起こすこともないよ
例えばRustのstatic変数をマルチスレッドで共有しつつ値を書き換えたいならばMutexなどによる内部可変性を与える必要がありデータ競合が必ず避けられる
「いつどこからsetされるか分からないコード」について
Rustは所有権もしくは可変参照を持たないと値を書き換えられないからコード上で明確にわかるよ
static変数については「いつどこからsetされるか分からないコード」によってデータ競合が起きうるのはその通り
しかしRustのstatic変数は(unsafeを除いて)可変(mutable)ではないため「いつどこからsetされるか分からないコード」によってデータ競合を起こすこともないよ
例えばRustのstatic変数をマルチスレッドで共有しつつ値を書き換えたいならばMutexなどによる内部可変性を与える必要がありデータ競合が必ず避けられる
678デフォルトの名無しさん
2023/08/19(土) 01:55:38.87ID:3nD/Pt3g こういう意味のない比較を少なくとも2年はずっと書き散らし続けて
何も生み出していないっていうね
何も生み出していないっていうね
679デフォルトの名無しさん
2023/08/19(土) 06:12:11.05ID:ImsjC3MV 技術板のスレなのに無能が適当なこと書き散らすだけで他人が参考にならないスレ
板違いの雑談スレなんだからせめてageるな
板違いの雑談スレなんだからせめてageるな
680デフォルトの名無しさん
2023/08/19(土) 08:18:21.33ID:7swIlm9f Rust は安全(キリっ
ですね
わかります
ですね
わかります
681デフォルトの名無しさん
2023/08/19(土) 08:30:53.11ID:EolsykgK >>672
標準ライブラリのサポートは重要だろ
ちょっとしたことをやるだけでいちいちライブラリを選定する必要があり、コンパイルが遅くなる
CICDも遅くなるし、ライセンスもいちいちクリアしなくては行けない
同じく標準ライブラリが薄いNode.js使っててnode_modules肥大化問題に悩んでいる奴は多いだろう
例えばhttpリクエストするだけでもプロジェクトによってライブラリが異なる
ライブラリが異なるのでそれぞれの使い方をいちいち覚えないといけない
こういったことは企業で開発する上で不毛なんだよ
標準ライブラリのサポートは重要だろ
ちょっとしたことをやるだけでいちいちライブラリを選定する必要があり、コンパイルが遅くなる
CICDも遅くなるし、ライセンスもいちいちクリアしなくては行けない
同じく標準ライブラリが薄いNode.js使っててnode_modules肥大化問題に悩んでいる奴は多いだろう
例えばhttpリクエストするだけでもプロジェクトによってライブラリが異なる
ライブラリが異なるのでそれぞれの使い方をいちいち覚えないといけない
こういったことは企業で開発する上で不毛なんだよ
682デフォルトの名無しさん
2023/08/19(土) 08:44:42.58ID:iXpPt34C 企業については、企業がライブラリを指定するんだし…感はある(非プロの感想です
683デフォルトの名無しさん
2023/08/19(土) 10:43:11.58ID:7swIlm9f >>681
わかります
わかります
684デフォルトの名無しさん
2023/08/19(土) 10:53:02.71ID:LtLp+SED 選定ばかりで何も生み出さない消費者を許せないってそこに書いてある
だから選択肢を増やせば増やすほど評価が高い
だから選択肢を増やせば増やすほど評価が高い
685デフォルトの名無しさん
2023/08/19(土) 14:23:54.36ID:whLCc1g8 オープンソース環境は、OSや環境に変化があるたびに、
別人が別の修正版を出してきて、少しずつ使い勝手が違う
ので、めんどくさい。
Rustもそうなる予感がするので使わない。
別人が別の修正版を出してきて、少しずつ使い勝手が違う
ので、めんどくさい。
Rustもそうなる予感がするので使わない。
686デフォルトの名無しさん
2023/08/19(土) 14:30:43.48ID:whLCc1g8 >>685
今、OSSのある開発環境を使い始めたとしよう。
・ドキュメントも不十分なので、上手く行く方法を
試行錯誤して探すのが必須。
・やっと探し出した方法でmakefileやbatファイルなどを
整備して開発できるようになる。
・数年後、試して見ると動作しなくなっている。
・それでまた、ググり調査 + 自分でテストを繰り返し、
数種類の配布物を試してやっとの思いで昔と似た
ことが出来る方法にたどり着く。その間、大部分の
環境は、来たいはずれの「試し損」となる。
・そして、makefileやbatファイルが作り直しとなる。
・ライブラリパス、インクルードパス、#includeなどの
修正も必要となる。xxx.h だったものが、sys/xxx に移って
いたり、昔 typedef されていたものが、なぜか無くなったり
別ファイルで定義し奈緒知れていたりする。
・ここまで、数日間かかり、プログラミングは全く出来ない。
経験法則から導かれたOSSの開発環境の日常の風景。
今、OSSのある開発環境を使い始めたとしよう。
・ドキュメントも不十分なので、上手く行く方法を
試行錯誤して探すのが必須。
・やっと探し出した方法でmakefileやbatファイルなどを
整備して開発できるようになる。
・数年後、試して見ると動作しなくなっている。
・それでまた、ググり調査 + 自分でテストを繰り返し、
数種類の配布物を試してやっとの思いで昔と似た
ことが出来る方法にたどり着く。その間、大部分の
環境は、来たいはずれの「試し損」となる。
・そして、makefileやbatファイルが作り直しとなる。
・ライブラリパス、インクルードパス、#includeなどの
修正も必要となる。xxx.h だったものが、sys/xxx に移って
いたり、昔 typedef されていたものが、なぜか無くなったり
別ファイルで定義し奈緒知れていたりする。
・ここまで、数日間かかり、プログラミングは全く出来ない。
経験法則から導かれたOSSの開発環境の日常の風景。
687デフォルトの名無しさん
2023/08/19(土) 14:31:48.17ID:yRurJ253 >>685
C++の新しい規格を使わないのかな?
C++の新しい規格を使わないのかな?
688デフォルトの名無しさん
2023/08/19(土) 14:35:14.63ID:yRurJ253689デフォルトの名無しさん
2023/08/19(土) 14:44:59.29ID:rWZzqTr8 2022年版年次Rust調査結果、1万超の回答 職場でRustを使う理由
https://atmarkit.itmedia.co.jp/ait/articles/2308/19/news032.html
プロフェッショナルな環境でRustを使用する主な理由としては、「バグのないソフトウェアを作成できる」という認識(86%)、Rustのパフォーマンス特性(84%)、Rustのセキュリティと安全性の保証(69%)が挙げられる。また、回答者の76%が、「Rustが楽しいと感じたから」という理由だけでRustを使い続けている(ここでは回答者が複数の選択肢を選択できるので、数値の合計が100%になるわけではない)。
仕事でRustを使用した回答者のうち、72%が「チームの目標達成に役立った」と報告し(前年比4ポイント増加)、75%は今後もチームでRustを使用し続ける計画を持っている。
一方で、職場で適用されている他の言語と同様、Rustの学習曲線は重要な考慮事項だ。専門的な立場でRustを使用している回答者の39%は、そのプロセスが「挑戦的だ」と報告している。
回答者の9%は、職場でRustを採用することで「チームの速度が低下した」と回答した。
https://atmarkit.itmedia.co.jp/ait/articles/2308/19/news032.html
プロフェッショナルな環境でRustを使用する主な理由としては、「バグのないソフトウェアを作成できる」という認識(86%)、Rustのパフォーマンス特性(84%)、Rustのセキュリティと安全性の保証(69%)が挙げられる。また、回答者の76%が、「Rustが楽しいと感じたから」という理由だけでRustを使い続けている(ここでは回答者が複数の選択肢を選択できるので、数値の合計が100%になるわけではない)。
仕事でRustを使用した回答者のうち、72%が「チームの目標達成に役立った」と報告し(前年比4ポイント増加)、75%は今後もチームでRustを使用し続ける計画を持っている。
一方で、職場で適用されている他の言語と同様、Rustの学習曲線は重要な考慮事項だ。専門的な立場でRustを使用している回答者の39%は、そのプロセスが「挑戦的だ」と報告している。
回答者の9%は、職場でRustを採用することで「チームの速度が低下した」と回答した。
690デフォルトの名無しさん
2023/08/19(土) 14:45:09.39ID:B82tdG00 >>681
Rustはデファクトスタンダードがあるからそのように困ったことないな
httpならhttpという名のクレートに基本事項が定められていて全てのhttp実装やその上の各フレームワーク等がこれを使う
httpクレート自体はhttp実装を持たずにhttpのリクエスト型やレスポンス型にURI型やヘッダ型やステータス型などだけを持つところが重要なポイント
もし新たな速いhttp実装が現れたとしてもインターフェイスはこのhttpクレートに(少なくとも今までは全て)従うため利用者が困ることはない
Rustはデファクトスタンダードがあるからそのように困ったことないな
httpならhttpという名のクレートに基本事項が定められていて全てのhttp実装やその上の各フレームワーク等がこれを使う
httpクレート自体はhttp実装を持たずにhttpのリクエスト型やレスポンス型にURI型やヘッダ型やステータス型などだけを持つところが重要なポイント
もし新たな速いhttp実装が現れたとしてもインターフェイスはこのhttpクレートに(少なくとも今までは全て)従うため利用者が困ることはない
691デフォルトの名無しさん
2023/08/19(土) 16:02:34.86ID:HZzlwK9f692デフォルトの名無しさん
2023/08/19(土) 16:07:41.17ID:HZzlwK9f693デフォルトの名無しさん
2023/08/19(土) 16:16:02.61ID:yRurJ253 >>691
適応能力に長けてないと扱うのは難しい
変化の速さがOSSの競争力の源泉の一つと感じられなければ
苦痛だろうね
オープンソースでもboostとかはほとんど変わらんやろ? 使わないの?
規格にすらあなたは新しいものにクレームつけそうだがw
適応能力に長けてないと扱うのは難しい
変化の速さがOSSの競争力の源泉の一つと感じられなければ
苦痛だろうね
オープンソースでもboostとかはほとんど変わらんやろ? 使わないの?
規格にすらあなたは新しいものにクレームつけそうだがw
694デフォルトの名無しさん
2023/08/19(土) 16:17:31.20ID:yRurJ253 >>692
仕事が遅いと言われるだろ?
仕事が遅いと言われるだろ?
695デフォルトの名無しさん
2023/08/19(土) 16:19:22.12ID:LtLp+SED debとかrpmとかバイナリパッケージを否定したら挫折するね
Windowsに依存しないだけならそこまで無理ゲーではないけど
WindowsもLinuxもどっちも認めないいわゆる「中立」が過激化するとうまくいかない
Windowsに依存しないだけならそこまで無理ゲーではないけど
WindowsもLinuxもどっちも認めないいわゆる「中立」が過激化するとうまくいかない
696デフォルトの名無しさん
2023/08/19(土) 16:36:31.92ID:HZzlwK9f697デフォルトの名無しさん
2023/08/19(土) 16:37:25.19ID:HZzlwK9f698デフォルトの名無しさん
2023/08/19(土) 17:00:00.61ID:nqM77Zy+ OSSかどうかとは関係なく現状のRustはライブラリ探しと精査に超時間がかかるのは確か
アプリケーションプログラマーから見るとこれがRustの最大の欠点
アプリケーションプログラマーから見るとこれがRustの最大の欠点
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- 【J SPORTS】FIFA U-17ワールドカップ ★10
- とらせん IPあり
- 巨専】
- こいせん 全レス転載禁止
- 【ATP】テニス総合実況スレ2025 Part 211【WTA】
- ネットでサッカー観戦◆2025-29
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
- 地球から無限km先の場所ってどうなっているの?
- 日本、高市のお陰で破滅に近づくwwwwwwww
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- 🖐( -᷄ὢ)俺に挑むのはやめておけ……実力差がありすぎる
- 岡田克也「軽々しく存立危機事態とか言うべきじゃない」高市早苗「台湾で武力攻撃が発生したらどう考えても日本の存立危機事態」 [931948549]
