C++ vs Rust
■ このスレッドは過去ログ倉庫に格納されています
2021/04/24(土) 08:04:49.48ID:nPKzA798
競え
563デフォルトの名無しさん
2021/11/29(月) 01:53:14.65ID:HgRvzIV4 沢山実験して、LinkedListの方が性能がいいことが分かってるからLinkedList
を使ってる。
ベンチマークは、ベンチマークを作る人が正しく理解してなければ、正しい
テストプログラムを書けないから、正しい結果が出ない。
CPUのベンチマークも実際の体感速度に比例しているとは限らないのと同様。
を使ってる。
ベンチマークは、ベンチマークを作る人が正しく理解してなければ、正しい
テストプログラムを書けないから、正しい結果が出ない。
CPUのベンチマークも実際の体感速度に比例しているとは限らないのと同様。
564デフォルトの名無しさん
2021/11/29(月) 01:54:51.63ID:HgRvzIV4 list の実装の仕方や使い方に問題があるだけだ。
何度も言ってるように、listは、双対原理から言って、添え字番号ではなく
アドレスを用いなければ成らないことをベンチマークプログラムを作ってる
人が理解出来て無いから、遅く出てることが多い。
何度も言ってるように、listは、双対原理から言って、添え字番号ではなく
アドレスを用いなければ成らないことをベンチマークプログラムを作ってる
人が理解出来て無いから、遅く出てることが多い。
565デフォルトの名無しさん
2021/11/29(月) 01:56:39.58ID:27e/xIh/ 2017年版あったからこっち見た方がよさそう
https://baptiste-wicht.com/posts/2017/05/cpp-containers-benchmark-vector-list-deque-plf-colony.html
>>563
あなたのワークロードではそうなんですね、なるほど
https://baptiste-wicht.com/posts/2017/05/cpp-containers-benchmark-vector-list-deque-plf-colony.html
>>563
あなたのワークロードではそうなんですね、なるほど
566デフォルトの名無しさん
2021/11/29(月) 01:57:29.30ID:tPktcSTu567デフォルトの名無しさん
2021/11/29(月) 02:04:18.84ID:HgRvzIV4 >>565
要素サイズが128バイトや4096バイトの時には、listの方がvectorより速い。
それに、NonTrivialの時こそ list が効率がいいはずなのに結果が逆になって
いたり、listは、安定なはずなのに、trivial 128 で list のグラフが
途中で直線になってないこともおかしい。
listは、どんなときでも速度が変化しにくい性質があるはず。
何かそのテストはおかしい。
要素サイズが128バイトや4096バイトの時には、listの方がvectorより速い。
それに、NonTrivialの時こそ list が効率がいいはずなのに結果が逆になって
いたり、listは、安定なはずなのに、trivial 128 で list のグラフが
途中で直線になってないこともおかしい。
listは、どんなときでも速度が変化しにくい性質があるはず。
何かそのテストはおかしい。
568デフォルトの名無しさん
2021/11/29(月) 02:05:00.82ID:HgRvzIV4569デフォルトの名無しさん
2021/11/29(月) 02:07:29.41ID:HgRvzIV4 実際に自分で実験したこそが無いのに、誰かが実験したものを信じるな。
実際に一般的なケースでは、vectorとlistでは、listの方が速いことが多い。
実際に一般的なケースでは、vectorとlistでは、listの方が速いことが多い。
570デフォルトの名無しさん
2021/11/29(月) 02:09:04.94ID:tPktcSTu571デフォルトの名無しさん
2021/11/29(月) 02:12:28.28ID:HgRvzIV4572デフォルトの名無しさん
2021/11/29(月) 02:15:22.14ID:27e/xIh/ >>567
NonTrivialはMovableな要素だから追加削除時には要素あたりポインタ数個分のデータがコピーされるだけで小サイズと同じ特性になるのは不思議ではないのでは
listについては要素サイズの変化に対して他のコンテナよりも安定的に見えるけど
さすがに要素のコピー分のコストはかかるから要素サイズ変わっても全く同じという訳ではないけど
NonTrivialはMovableな要素だから追加削除時には要素あたりポインタ数個分のデータがコピーされるだけで小サイズと同じ特性になるのは不思議ではないのでは
listについては要素サイズの変化に対して他のコンテナよりも安定的に見えるけど
さすがに要素のコピー分のコストはかかるから要素サイズ変わっても全く同じという訳ではないけど
573デフォルトの名無しさん
2021/11/29(月) 02:21:21.41ID:HgRvzIV4 こういうベンチマークには、ファクトチェックが必要だ。
今までネットのこういう変な結果のベンチマークを見てきたが、
ソースを見てみると変なことをしてることが多かった。
多かったというより、結果がおかしいと思って調べてみたら全て変なことしてた。
秀才以外が行ったベンチマークは信用できない。
まだ、雑誌は信用できることが多いが、ネットのベンチマークはおかしい。
今までネットのこういう変な結果のベンチマークを見てきたが、
ソースを見てみると変なことをしてることが多かった。
多かったというより、結果がおかしいと思って調べてみたら全て変なことしてた。
秀才以外が行ったベンチマークは信用できない。
まだ、雑誌は信用できることが多いが、ネットのベンチマークはおかしい。
574デフォルトの名無しさん
2021/11/29(月) 02:23:11.00ID:tPktcSTu 『リンクリスト vs. ベクター』のスレ立ててそこでやったら?
少なくともこのスレでやることではない
少なくともこのスレでやることではない
575デフォルトの名無しさん
2021/11/29(月) 02:25:44.21ID:zo5XubVi ではどうぞ、ファクトチェックしてくださいまし
https://github.com/wichtounet/articles/blob/master/src/vector_list_update_1/bench.cpp
https://github.com/wichtounet/articles/blob/master/src/vector_list_update_1/bench.cpp
576デフォルトの名無しさん
2021/11/29(月) 02:29:42.73ID:27e/xIh/ 誰かこのベンチマークをRustに移植してみてよ
577デフォルトの名無しさん
2021/11/29(月) 02:44:22.88ID:HgRvzIV4 作業時間が発生するものを持ち込まないで欲しい。
こっちはボランティアに馬鹿に説明してやってるだけなんだから。
ソースを出せ、と言ってくるのは抽象的理解が出来ないから。
とても簡単なことを言ってるだけなのに、少しでも抽象的(symbolic)
な言葉で語ると全然理解できない。
数学とは抽象性(symbolic)な学問であるから、数学が出来ない人は
コードを示さないと理解できないらしい。
こっちはボランティアに馬鹿に説明してやってるだけなんだから。
ソースを出せ、と言ってくるのは抽象的理解が出来ないから。
とても簡単なことを言ってるだけなのに、少しでも抽象的(symbolic)
な言葉で語ると全然理解できない。
数学とは抽象性(symbolic)な学問であるから、数学が出来ない人は
コードを示さないと理解できないらしい。
578デフォルトの名無しさん
2021/11/29(月) 02:59:57.67ID:qK4xTYr2 ベンチマークとかはどうでもいいが、
CだろうがRustだろうが実装可能って話にしか見えん
CだろうがRustだろうが実装可能って話にしか見えん
579デフォルトの名無しさん
2021/11/29(月) 07:57:57.28ID:cydEy5/m580デフォルトの名無しさん
2021/11/29(月) 08:02:08.66ID:LzdsKRCS 実体へのポインタの配列だけでいいよなw
それで実体にはすべて到達できるもんw
ある実体の次も、前も、それも両方分かるしw
それで実体にはすべて到達できるもんw
ある実体の次も、前も、それも両方分かるしw
581デフォルトの名無しさん
2021/11/29(月) 10:19:47.16ID:zFB6Wt84 抽象はabstract
582デフォルトの名無しさん
2021/11/29(月) 11:26:03.41ID:ynhRtjt2583デフォルトの名無しさん
2021/11/29(月) 11:29:51.75ID:ynhRtjt2 >>582
[補足]
抽象的理解が難しい人に具体的に書いておいてやろう。
LinkedList ll;
ArrayList al; //自動伸張方式の動的配列だと仮定する
al[0] = ll.append("りんご");
al[1] = ll.append("みかん");
al[2] = ll.append("バナナ");
だと >>538 が指摘しているような不具合が起きる。しかし、
LinkedList ll;
LinkedList ll2;
ll2.append( ll.append("りんご") );
ll2.append( ll.append("みかん") );
ll2.append( ll.append("バナナ") );
だと起きない。
[補足]
抽象的理解が難しい人に具体的に書いておいてやろう。
LinkedList ll;
ArrayList al; //自動伸張方式の動的配列だと仮定する
al[0] = ll.append("りんご");
al[1] = ll.append("みかん");
al[2] = ll.append("バナナ");
だと >>538 が指摘しているような不具合が起きる。しかし、
LinkedList ll;
LinkedList ll2;
ll2.append( ll.append("りんご") );
ll2.append( ll.append("みかん") );
ll2.append( ll.append("バナナ") );
だと起きない。
584デフォルトの名無しさん
2021/11/29(月) 11:36:08.77ID:27e/xIh/585デフォルトの名無しさん
2021/11/29(月) 11:36:25.33ID:ynhRtjt2 >>583
もっと具体的に書いてやろう。
リンクリストの中の追加した6つの果物の内、4つを他の配列やリンクリストの
中から参照する例を示しておこう。
これの応用としてリンクリスト内の1000個の品物の内、何らかの条件で選び取った10個を
別の配列やリンクリストから参照することが出来る。
1. リンクリスト + 配列
LinkedList ll;
ArrayList al; //自動伸張方式の動的配列だと仮定する
al[0] = ll.append("りんご");
ll.append("みかん");
al[1] = ll.append("バナナ");
ll.append("すいか");
al[2] = ll.append("パイナップル");
al[3] = ll.append("ブドウ");
2. リンクリスト + リンクリスト
LinkedList ll;
LinkedList ll2;
ll2.append( ll.append("りんご") );
ll.append("みかん");
ll2.append( ll.append("バナナ") );
ll.append("すいか");
ll2.append( ll.append("パイナップル") );
ll2.append( ll.append("ブドウ") );
もっと具体的に書いてやろう。
リンクリストの中の追加した6つの果物の内、4つを他の配列やリンクリストの
中から参照する例を示しておこう。
これの応用としてリンクリスト内の1000個の品物の内、何らかの条件で選び取った10個を
別の配列やリンクリストから参照することが出来る。
1. リンクリスト + 配列
LinkedList ll;
ArrayList al; //自動伸張方式の動的配列だと仮定する
al[0] = ll.append("りんご");
ll.append("みかん");
al[1] = ll.append("バナナ");
ll.append("すいか");
al[2] = ll.append("パイナップル");
al[3] = ll.append("ブドウ");
2. リンクリスト + リンクリスト
LinkedList ll;
LinkedList ll2;
ll2.append( ll.append("りんご") );
ll.append("みかん");
ll2.append( ll.append("バナナ") );
ll.append("すいか");
ll2.append( ll.append("パイナップル") );
ll2.append( ll.append("ブドウ") );
586デフォルトの名無しさん
2021/11/29(月) 11:36:55.60ID:ynhRtjt2587デフォルトの名無しさん
2021/11/29(月) 11:39:40.44ID:ynhRtjt2 >>585
これがどういう時に起きるかといえば、最初に1000個の品物の入った
リンクリスト ll がある時、条件に合う品物を1つ探してリンクリスト ll2
の末尾に参照を追加する。
それを10回繰り返した後に、実質的に生じる。
これがどういう時に起きるかといえば、最初に1000個の品物の入った
リンクリスト ll がある時、条件に合う品物を1つ探してリンクリスト ll2
の末尾に参照を追加する。
それを10回繰り返した後に、実質的に生じる。
588デフォルトの名無しさん
2021/11/29(月) 12:08:42.24ID:27e/xIh/ >>587
queryに対する抽出結果をリストとして保持しておいて元のリストの更新に応じてquery結果も適宜更新されるイメージですか?
queryに対する抽出結果をリストとして保持しておいて元のリストの更新に応じてquery結果も適宜更新されるイメージですか?
589デフォルトの名無しさん
2021/11/29(月) 12:10:54.78ID:qK4xTYr2 一部のノードが2つのリストで共有されてんのこれ?
590デフォルトの名無しさん
2021/11/29(月) 12:15:46.59ID:V8SeceOD l2のリストに入れる数によって変わるので結局O(N)の操作じゃね?
591デフォルトの名無しさん
2021/11/29(月) 12:42:23.24ID:G+erg93y592デフォルトの名無しさん
2021/11/29(月) 12:43:56.81ID:4MgUQE5v リンクリストを少し調べたところ様々な種類のものが使われているようで
様々な分類が生じるうち今回関係するノードの参照については以下の4種類あるようだ
(A) データを挿入しても作られたノード自体は返さない方式
実際にこの仕様でも困らない用途も多いようでこの方式も普通に使われている
もちろん問題は何も生じない
(B) データを挿入して作られたノードのポインタを直接返す方式
これは危険で最も推奨されない方式
ポインタを握っていても使う時にそのノードは削除されているかもしれない
削除で開放されてヒープに戻され更に再利用されているとデータの中身もnext辿りも滅茶苦茶になりうる
そしてデータの扱い次第で実際に削除は起き得るしUI人間や通信相手から発動ルーチンでの削除も有り得る
(C) データを挿入して作られたノードの(一般的な)スマートポインタを返す方式
これはshared_ptrなど安全とされているスマートポインタを返すためメモリ使用上は安全
しかしポインタ先がヒープへ戻されていないことしか保証がない
つまり(B)と同様にリンクリスト自体からの削除が起きている可能性がありそれを知る方法がない
(D) データを挿入して作られたノードを管理しているリンクリスト内部の何らかを返す方式
リスクの高い(B)や(C)と異なりこの方式は安全かつ整合性が維持される
もしノードがリンクリストから削除されていればそれに対して対応ができる
この返されたデータを用いて新たなデータをその位置に挿入する時に元ノードが削除されていた場合
(D)-1. 挿入はされず既に元ノードが削除されていると知らせる
(D)-2. 知らせずに削除された元ノードの次に有効なノードの位置に挿入する
などリンクリストの仕様や用意されたメソッドにより異なるようだ
以上まとめると現実的に安全に使える方式は(A)もしくは(D)となっている
例えばC++の標準リンクリストstd::listでもこの(D)方式を採用しており
insert()はリンクリスト上をその位置から順に辿っていくイテレータを返す
様々な分類が生じるうち今回関係するノードの参照については以下の4種類あるようだ
(A) データを挿入しても作られたノード自体は返さない方式
実際にこの仕様でも困らない用途も多いようでこの方式も普通に使われている
もちろん問題は何も生じない
(B) データを挿入して作られたノードのポインタを直接返す方式
これは危険で最も推奨されない方式
ポインタを握っていても使う時にそのノードは削除されているかもしれない
削除で開放されてヒープに戻され更に再利用されているとデータの中身もnext辿りも滅茶苦茶になりうる
そしてデータの扱い次第で実際に削除は起き得るしUI人間や通信相手から発動ルーチンでの削除も有り得る
(C) データを挿入して作られたノードの(一般的な)スマートポインタを返す方式
これはshared_ptrなど安全とされているスマートポインタを返すためメモリ使用上は安全
しかしポインタ先がヒープへ戻されていないことしか保証がない
つまり(B)と同様にリンクリスト自体からの削除が起きている可能性がありそれを知る方法がない
(D) データを挿入して作られたノードを管理しているリンクリスト内部の何らかを返す方式
リスクの高い(B)や(C)と異なりこの方式は安全かつ整合性が維持される
もしノードがリンクリストから削除されていればそれに対して対応ができる
この返されたデータを用いて新たなデータをその位置に挿入する時に元ノードが削除されていた場合
(D)-1. 挿入はされず既に元ノードが削除されていると知らせる
(D)-2. 知らせずに削除された元ノードの次に有効なノードの位置に挿入する
などリンクリストの仕様や用意されたメソッドにより異なるようだ
以上まとめると現実的に安全に使える方式は(A)もしくは(D)となっている
例えばC++の標準リンクリストstd::listでもこの(D)方式を採用しており
insert()はリンクリスト上をその位置から順に辿っていくイテレータを返す
593デフォルトの名無しさん
2021/11/29(月) 12:52:17.03ID:qK4xTYr2594デフォルトの名無しさん
2021/11/29(月) 13:00:24.04ID:27e/xIh/ >>593
rustだけはsafeじゃないとだめらしいですよ
rustだけはsafeじゃないとだめらしいですよ
595デフォルトの名無しさん
2021/11/29(月) 15:16:40.92ID:LzdsKRCS > 2. リンクリスト + リンクリスト
それだとさあ
最初から主張してるO(1)ランダムアクセスできないけどいいのw
配列だからこそi番目が定数時間でa[i]でアクセスできるんでしょ
それだとさあ
最初から主張してるO(1)ランダムアクセスできないけどいいのw
配列だからこそi番目が定数時間でa[i]でアクセスできるんでしょ
596デフォルトの名無しさん
2021/11/29(月) 15:56:54.32ID:tPktcSTu597デフォルトの名無しさん
2021/11/29(月) 16:56:11.45ID:KFZ7/agt C++ の std::list はポインタではなくイテレータで扱うけど、実質ポインタと同じだぞ。
Debug ビルドだと二重 erase は検出してくれるけど、Release ビルドだとセグフォで落ちる。
Debug ビルドだと二重 erase は検出してくれるけど、Release ビルドだとセグフォで落ちる。
598デフォルトの名無しさん
2021/11/29(月) 17:12:06.45ID:tPktcSTu そもそも途中ノードのポインタを保持していても普通の使い方だとそこへ挿入することないよな
リンクリストの先頭挿入か最後挿入かあるいは何らかのデータ順になっていてその位置に挿入だよな
可能性があるのはエディターくらいだけどそれならばカレントポジションをエディター用リンクリストの中で保持した方が便利
リンクリストの先頭挿入か最後挿入かあるいは何らかのデータ順になっていてその位置に挿入だよな
可能性があるのはエディターくらいだけどそれならばカレントポジションをエディター用リンクリストの中で保持した方が便利
599デフォルトの名無しさん
2021/11/29(月) 17:31:01.57ID:uM27l7Qv ポインタだらけのデータ構造ってそれをファイルに保存するとかネットで繋がった別のマシンに送るのって大変じゃない?
ポインタの代わりにインデックス使ってればそのままシリアライズできるけど
ポインタの代わりにインデックス使ってればそのままシリアライズできるけど
600デフォルトの名無しさん
2021/11/29(月) 17:39:15.23ID:KFZ7/agt というか std::list はメモリも速度もコスト高いし、普通は std::vector を使う。
途中への挿入・削除が頻繁に発生するようなら std::list の使用も検討するべき。
ノードが既に分かっているとして、当該ノードの保持する値へのアクセスが O(1) で
行えるのは当たり前の話で、これが出来ないコンテナって存在するのか?
リンクリストは(既に分かっている)ノードの削除、
(既に分かっているノードの前後への)挿入が O(1) で行えることに意味がある。
途中への挿入・削除が頻繁に発生するようなら std::list の使用も検討するべき。
ノードが既に分かっているとして、当該ノードの保持する値へのアクセスが O(1) で
行えるのは当たり前の話で、これが出来ないコンテナって存在するのか?
リンクリストは(既に分かっている)ノードの削除、
(既に分かっているノードの前後への)挿入が O(1) で行えることに意味がある。
601ハノン ◆QZaw55cn4c
2021/11/29(月) 19:03:52.90ID:NTguHH8l >>585
C でも rust でもいいから動くソースを出してもらえませんか?ここ、確かプログラム板でしょ?
C でも rust でもいいから動くソースを出してもらえませんか?ここ、確かプログラム板でしょ?
602デフォルトの名無しさん
2021/11/29(月) 19:45:36.73ID:27e/xIh/ >>599
多くのケースではシリアライザ手書きしないから気にならないのでは
例えばrustならserdeがLinkedList対応してるからVecと同じ手軽さでシリアライズ・デシリアライズできると思われる
多くのケースではシリアライザ手書きしないから気にならないのでは
例えばrustならserdeがLinkedList対応してるからVecと同じ手軽さでシリアライズ・デシリアライズできると思われる
603デフォルトの名無しさん
2021/11/29(月) 19:59:41.83ID:tPktcSTu >>602
その中の切れ端へのポインタをもらってどうするの?って話だから話がずれてる
その中の切れ端へのポインタをもらってどうするの?って話だから話がずれてる
604デフォルトの名無しさん
2021/11/29(月) 20:15:59.10ID:FNlZ9i/O リンクリストのノードをさらにリンクリストにいれてなにがしたいんだ
605デフォルトの名無しさん
2021/11/29(月) 20:28:16.85ID:4MgUQE5v >>604
リンクリストはポインタだからO(1)で速い!とナゾ主張する勘違い君がさらに暴走した結果
リンクリストはポインタだからO(1)で速い!とナゾ主張する勘違い君がさらに暴走した結果
606デフォルトの名無しさん
2021/11/29(月) 21:15:38.25ID:27e/xIh/ >>603
普通にVec相当の構造に変換された上でシリアライズされてデシリアライズ時にlistに変換されるよ
普通にVec相当の構造に変換された上でシリアライズされてデシリアライズ時にlistに変換されるよ
607デフォルトの名無しさん
2021/11/29(月) 21:27:48.38ID:4MgUQE5v >>606
それ怪しいな
LinkedList型はser/de定義されていて先頭保持してるところから順にたどって全体を巡るとして
途中ノードのポインタを渡されてもまずそのノードだけ対象になるのかそれとも次をたどるのか曖昧
もし同じように順にたどるとしてもLinkedListの一部分が出来上がりそれに意味があるのか疑問
それ怪しいな
LinkedList型はser/de定義されていて先頭保持してるところから順にたどって全体を巡るとして
途中ノードのポインタを渡されてもまずそのノードだけ対象になるのかそれとも次をたどるのか曖昧
もし同じように順にたどるとしてもLinkedListの一部分が出来上がりそれに意味があるのか疑問
608デフォルトの名無しさん
2021/11/29(月) 21:32:39.40ID:2AI6LBe9 そりゃsafety売りにしてる言語が実はunsafeばっかとか言えませんよね。普通の感覚ならね。
609デフォルトの名無しさん
2021/11/29(月) 22:50:59.13ID:27e/xIh/610デフォルトの名無しさん
2021/11/29(月) 22:59:12.77ID:qFPvT22S あわしろ氏はC++の危険性を見過ごせないと言ってた。
ダングリングポインタは諸悪の根源と言える。
ダングリングポインタは諸悪の根源と言える。
611デフォルトの名無しさん
2021/11/30(火) 00:01:14.91ID:LDqTXpbe 他の言語なら危険でないとでも?
612デフォルトの名無しさん
2021/11/30(火) 00:58:11.71ID:oK3YB4Sq >>595
ll2にllの検索条件に合うノードのポインタを順に入れて言った場合、
llのノードが順序がバラバラで入っていることになり、
ll2を先頭から順にシーケンシャルアクセスすると
llはランダムアクセスされることになる。
なお、ランダムアクセスとはシーケンシャルアクセス以外のアクセスを全て指す
言葉。
ll2にllの検索条件に合うノードのポインタを順に入れて言った場合、
llのノードが順序がバラバラで入っていることになり、
ll2を先頭から順にシーケンシャルアクセスすると
llはランダムアクセスされることになる。
なお、ランダムアクセスとはシーケンシャルアクセス以外のアクセスを全て指す
言葉。
613デフォルトの名無しさん
2021/11/30(火) 00:58:48.79ID:oK3YB4Sq >>612
もちろん、O(1)だ。
もちろん、O(1)だ。
614デフォルトの名無しさん
2021/11/30(火) 02:01:49.64ID:Y6JwF3m3615デフォルトの名無しさん
2021/11/30(火) 02:45:59.65ID:oK3YB4Sq616デフォルトの名無しさん
2021/11/30(火) 03:29:37.11ID:oK3YB4Sq リンクリストは、損して得取れの考え方だからね。
配列は、ちょっとしたことで使うには良いが、
一見得してるようだが、複雑なことをやる場合には損することが多い。
配列は、ちょっとしたことで使うには良いが、
一見得してるようだが、複雑なことをやる場合には損することが多い。
617デフォルトの名無しさん
2021/11/30(火) 03:32:42.38ID:Y6JwF3m3 >>615
リンクリストはランダムアクセスO(n)で遅いから特殊な用途でしか使われていない
ほとんどのケースではランダムアクセスO(1)のベクタが使われている
シーケンシャルアクセスだけならどちらも同じだけどポインタをたどるリンクリストは遅くてメモリも余分に使って結果不利
リンクリストはランダムアクセスO(n)で遅いから特殊な用途でしか使われていない
ほとんどのケースではランダムアクセスO(1)のベクタが使われている
シーケンシャルアクセスだけならどちらも同じだけどポインタをたどるリンクリストは遅くてメモリも余分に使って結果不利
618デフォルトの名無しさん
2021/11/30(火) 03:45:18.10ID:oK3YB4Sq619デフォルトの名無しさん
2021/11/30(火) 03:56:01.94ID:oK3YB4Sq 今後、秀才か天才しか書込み禁止。
そうでないと、まともな議論にならない。
IQ130以上限定。
そうでないと、まともな議論にならない。
IQ130以上限定。
620デフォルトの名無しさん
2021/11/30(火) 05:23:13.37ID:Z1GOh4zf 数学100点マンがなんだ俺はセンター数学2科目200点マンだぞ
621デフォルトの名無しさん
2021/11/30(火) 07:52:52.15ID:OSju058V 東大入試数学満点、数オリ経験者のオレ登場
622デフォルトの名無しさん
2021/11/30(火) 09:09:56.43ID:9yDJj/SR >>621
今までの論争?についてどうですか?
今までの論争?についてどうですか?
623デフォルトの名無しさん
2021/11/30(火) 12:21:03.90ID:M/ykbWDe >>622
細かくは読んで無いけど
限定がなければ当然同じ計算オーダーの構造は作れるはず
いずれもリソースを限定しなければチューリング完全な言語であるわけだから
あとは限定次第
特定のコンテナを使う場合とか安全性とか
各言語での流儀とか
細かくは読んで無いけど
限定がなければ当然同じ計算オーダーの構造は作れるはず
いずれもリソースを限定しなければチューリング完全な言語であるわけだから
あとは限定次第
特定のコンテナを使う場合とか安全性とか
各言語での流儀とか
624デフォルトの名無しさん
2021/11/30(火) 12:22:32.67ID:M/ykbWDe 計算可能性と計算オーダーは関係無かったか
2文目は取り消しでお願い
2文目は取り消しでお願い
625デフォルトの名無しさん
2021/11/30(火) 17:35:34.91ID:BH845EGe >>623
>限定がなければ当然同じ計算オーダーの構造は作れるはず
>いずれもリソースを限定しなければチューリング完全な言語であるわけだから
確かに同じ計算オーダーの構造は作れるが、制限を回避するためにかなり遅くなる。
例として、参照もポインタも無いBASIC言語で、配列だけを使ってポインタを
模倣することも可能ではあり、実際にポインタと同じような計算オーダーを
持つものをそれでも実現可能ではあるが、「速度係数」が大きくなる。
Rustの場合、safeモードでは、1つのリンクリストに対して、読み書きが出来る
参照を複数同時にはマシン語レベルの生アドレスとしては持つことが出来ない。
その制約を回避するため、別の配列をわざわざよういして、アドレスの代わりに
配列の添え字番号を持つ整数型を参照型の代替として用いるやり方が、
提示されていた。
>限定がなければ当然同じ計算オーダーの構造は作れるはず
>いずれもリソースを限定しなければチューリング完全な言語であるわけだから
確かに同じ計算オーダーの構造は作れるが、制限を回避するためにかなり遅くなる。
例として、参照もポインタも無いBASIC言語で、配列だけを使ってポインタを
模倣することも可能ではあり、実際にポインタと同じような計算オーダーを
持つものをそれでも実現可能ではあるが、「速度係数」が大きくなる。
Rustの場合、safeモードでは、1つのリンクリストに対して、読み書きが出来る
参照を複数同時にはマシン語レベルの生アドレスとしては持つことが出来ない。
その制約を回避するため、別の配列をわざわざよういして、アドレスの代わりに
配列の添え字番号を持つ整数型を参照型の代替として用いるやり方が、
提示されていた。
626デフォルトの名無しさん
2021/11/30(火) 18:12:13.96ID:Y6JwF3m3627デフォルトの名無しさん
2021/11/30(火) 18:13:44.06ID:BH845EGe628デフォルトの名無しさん
2021/11/30(火) 18:15:08.99ID:rIKeeiBO safe Rustが要求するレベルの安全性(特に共有参照が存在する間はそれを変更できない)を実現するには、
C言語だろうとC++だろうと排他機構が必要になって、実行時コストを払わずに行うことは不可能
C言語だろうとC++だろうと排他機構が必要になって、実行時コストを払わずに行うことは不可能
629デフォルトの名無しさん
2021/11/30(火) 18:16:39.59ID:BH845EGe630デフォルトの名無しさん
2021/11/30(火) 18:25:09.74ID:rIKeeiBO >>629
聞いたことないが誰の言葉?
聞いたことないが誰の言葉?
631デフォルトの名無しさん
2021/11/30(火) 18:26:13.61ID:BH845EGe >>629
[補足]
なお、マルチスレッドにおける、排他制御はCやC++では必ず必要。
それはプログラマが頭で考えても省略できない。
なお、シングルスレッドにおける Rustの借用規則のような仕組みを
に「排他制御」という言葉は通常は使わない。
[補足]
なお、マルチスレッドにおける、排他制御はCやC++では必ず必要。
それはプログラマが頭で考えても省略できない。
なお、シングルスレッドにおける Rustの借用規則のような仕組みを
に「排他制御」という言葉は通常は使わない。
632デフォルトの名無しさん
2021/11/30(火) 18:27:12.73ID:BH845EGe633デフォルトの名無しさん
2021/11/30(火) 18:35:01.07ID:rIKeeiBO イテレータをポインタだと思ってやっぱ複雑なC++じゃなくてC言語で話そうとか言っちゃう人が自分の頭で考えて安全性確保できる秀才ってマジですか
634デフォルトの名無しさん
2021/11/30(火) 18:39:16.69ID:TJjyIr2u Rustで書かれたFirefoxはC++で書かれたChromeより三倍以上の安全性を持つ。
635デフォルトの名無しさん
2021/11/30(火) 18:41:46.86ID:BH845EGe >>633
なぜC++で説明しないのかといえば、std::listは、std::vectorなどの
他のコンテナと同じ使い勝手にするために、リンクトリスト本来の
アルゴリズムとは異なって実装されてしまっている可能性があるから。
なぜC++で説明しないのかといえば、std::listは、std::vectorなどの
他のコンテナと同じ使い勝手にするために、リンクトリスト本来の
アルゴリズムとは異なって実装されてしまっている可能性があるから。
636デフォルトの名無しさん
2021/11/30(火) 18:42:00.53ID:Y6JwF3m3 >>631
シングルスレッド内のマルチタスク(いわゆるグリーンスレッド)でも競合は起きます
例えばポインタを得た後にファイルや通信の読み書きを行えばシングルスレッド内の別タスクに切り替わります
その別タスクが人間UIから指示でリンクリストの一部削除も起き得ます
元のタスクに切り替わった時に保持してるポインタの先は既に削除されて存在しないかもしれません
したがってシングルスレッドでも競合対策は必要です
シングルスレッド内のマルチタスク(いわゆるグリーンスレッド)でも競合は起きます
例えばポインタを得た後にファイルや通信の読み書きを行えばシングルスレッド内の別タスクに切り替わります
その別タスクが人間UIから指示でリンクリストの一部削除も起き得ます
元のタスクに切り替わった時に保持してるポインタの先は既に削除されて存在しないかもしれません
したがってシングルスレッドでも競合対策は必要です
637デフォルトの名無しさん
2021/11/30(火) 18:43:00.57ID:BH845EGe638デフォルトの名無しさん
2021/11/30(火) 18:44:23.35ID:BH845EGe639デフォルトの名無しさん
2021/11/30(火) 18:46:28.71ID:TJjyIr2u >>637
クレジットカードやパスワードが既に。
クレジットカードやパスワードが既に。
640デフォルトの名無しさん
2021/11/30(火) 18:55:31.01ID:Y6JwF3m3641デフォルトの名無しさん
2021/11/30(火) 18:56:55.23ID:TJjyIr2u シグナルハンドラの中と競合が起きないようにするのは、排他と呼んでますよ。
642デフォルトの名無しさん
2021/11/30(火) 19:00:10.44ID:BH845EGe >>640
言葉は知らない。
ただし、MicrosoftのWinFormsやMFC、Win32だと、メッセージキューを
上手く使うことができていて、1つのメッセージ(イベント)を処理中は、他のメッセージを
受け付けないようにする仕組みになっているので、自分のアプリのイベントハンドラに
二重に入ってくることがない。だから、あなたの言っているような状況は絶対に起きないように
なっているため、心配要らないし、それを一般プログラマがコードで避けることも
通常は必要ない。
JSだとメッセージキューを上手く操れないためにイベントが二重に入ってくる
ことを一般プログラマが手作業で避ける必要がある場合が出てくるが。
言葉は知らない。
ただし、MicrosoftのWinFormsやMFC、Win32だと、メッセージキューを
上手く使うことができていて、1つのメッセージ(イベント)を処理中は、他のメッセージを
受け付けないようにする仕組みになっているので、自分のアプリのイベントハンドラに
二重に入ってくることがない。だから、あなたの言っているような状況は絶対に起きないように
なっているため、心配要らないし、それを一般プログラマがコードで避けることも
通常は必要ない。
JSだとメッセージキューを上手く操れないためにイベントが二重に入ってくる
ことを一般プログラマが手作業で避ける必要がある場合が出てくるが。
643デフォルトの名無しさん
2021/11/30(火) 19:01:35.67ID:BH845EGe644デフォルトの名無しさん
2021/11/30(火) 19:04:13.70ID:BH845EGe >>643
[補足]
正しくは「JS」ではなくて、ブラウザ上でJSで使ったイベント処理の話。
onclick="func()" みたいに書くやり方のこと。
イベントキューは有ることはあるが、一般プログラマが細かく制御できない。
Win32やMFCでは細かく制御できる。
[補足]
正しくは「JS」ではなくて、ブラウザ上でJSで使ったイベント処理の話。
onclick="func()" みたいに書くやり方のこと。
イベントキューは有ることはあるが、一般プログラマが細かく制御できない。
Win32やMFCでは細かく制御できる。
645デフォルトの名無しさん
2021/11/30(火) 19:08:01.74ID:Y6JwF3m3 >>642
Microsoftは全く使うことがないので知らないのですがそんなダメ仕様なの?
さすがに通信I/O待ちになったら別タスクに切り替わると思いますよ
少なくとも他のまともなシステムならば別タスクへと切り替わります
ずっと通信I/Oを待ち続けるのは明らかに時間の無駄ですから
Microsoftは全く使うことがないので知らないのですがそんなダメ仕様なの?
さすがに通信I/O待ちになったら別タスクに切り替わると思いますよ
少なくとも他のまともなシステムならば別タスクへと切り替わります
ずっと通信I/Oを待ち続けるのは明らかに時間の無駄ですから
646デフォルトの名無しさん
2021/11/30(火) 19:20:14.50ID:0cv+Qgr4647デフォルトの名無しさん
2021/11/30(火) 19:46:30.08ID:WEl8d1PC >>645
「タスク」って言うのが、他のアプリのプロセスやスレッドに切り替わるというの
なら、その通りだが、自分のアプリのイベント中に、自分のアプリの別にイベントが
発生するのはプログラムが複雑になるので、MicrosoftのGUIではわざと避けられて
いる。でも、そのおかげでGUIプログラムが簡単に書けるようになっている。
「タスク」って言うのが、他のアプリのプロセスやスレッドに切り替わるというの
なら、その通りだが、自分のアプリのイベント中に、自分のアプリの別にイベントが
発生するのはプログラムが複雑になるので、MicrosoftのGUIではわざと避けられて
いる。でも、そのおかげでGUIプログラムが簡単に書けるようになっている。
648デフォルトの名無しさん
2021/11/30(火) 19:48:30.63ID:Y6JwF3m3649デフォルトの名無しさん
2021/11/30(火) 19:56:09.78ID:WEl8d1PC >>648
ドローツールで、メニューからファイル保存ハンドラを起動して、
ファイル保存処理中に、マウスをクリックして、マウスイベントを起動して、
データを変更する必要は無いよね。
だから、マイクロソフトのMFCやWinFormsでは、最初から、メニューハンドラを
実行中は、マウスイベントが起動しないように設計されている。
同様に、あらゆるイベントは、必ず1つずつ順番に実行される設計になっている。
ドローツールで、メニューからファイル保存ハンドラを起動して、
ファイル保存処理中に、マウスをクリックして、マウスイベントを起動して、
データを変更する必要は無いよね。
だから、マイクロソフトのMFCやWinFormsでは、最初から、メニューハンドラを
実行中は、マウスイベントが起動しないように設計されている。
同様に、あらゆるイベントは、必ず1つずつ順番に実行される設計になっている。
650デフォルトの名無しさん
2021/11/30(火) 19:59:43.64ID:Y6JwF3m3651デフォルトの名無しさん
2021/11/30(火) 20:11:18.02ID:s7fhQ2Tk >>643
二重にイベントが呼び出されるとはどういう現象を指しているのでしょうか
またJSはシングルスレッドなのでデータ競合は発生しないと思うのですが
そもそもなぜ突然JSの話が出てきたのですか
シグナルハンドラとイベントハンドラを混同していませんか
二重にイベントが呼び出されるとはどういう現象を指しているのでしょうか
またJSはシングルスレッドなのでデータ競合は発生しないと思うのですが
そもそもなぜ突然JSの話が出てきたのですか
シグナルハンドラとイベントハンドラを混同していませんか
652デフォルトの名無しさん
2021/11/30(火) 20:16:25.11ID:WEl8d1PC >>651
JSは、ファイルI/Oを非同期でやりたがる人が居て、例えば、
Unixの write() は、書き終わるまでその場で停止して、書き終わってから
次の行から実行が再開される。
ところが、JSの場合は、書いている間に、イベントキューの読み取りに戻って
別のイベントが起動される可能性が生まれる。
だから、メニューからファイル保存を選んで、write() 文に相当する関数を
呼び出すと、まだ保存が終了して無いのに、別のメニューをもう一回起動
できるようなアホな状況が生まれる可能性が出てくる。
JSは、ファイルI/Oを非同期でやりたがる人が居て、例えば、
Unixの write() は、書き終わるまでその場で停止して、書き終わってから
次の行から実行が再開される。
ところが、JSの場合は、書いている間に、イベントキューの読み取りに戻って
別のイベントが起動される可能性が生まれる。
だから、メニューからファイル保存を選んで、write() 文に相当する関数を
呼び出すと、まだ保存が終了して無いのに、別のメニューをもう一回起動
できるようなアホな状況が生まれる可能性が出てくる。
653デフォルトの名無しさん
2021/11/30(火) 20:20:26.40ID:Y6JwF3m3654デフォルトの名無しさん
2021/11/30(火) 20:29:47.98ID:WEl8d1PC >>653
あなたは、テキストエディタで保存中に、別の処理をしてしまう人?
あなたは、テキストエディタで保存中に、別の処理をしてしまう人?
655デフォルトの名無しさん
2021/11/30(火) 20:32:09.62ID:Y6JwF3m3656デフォルトの名無しさん
2021/11/30(火) 20:32:20.30ID:s7fhQ2Tk657デフォルトの名無しさん
2021/11/30(火) 20:35:32.02ID:WEl8d1PC >>655
いや、作れる。
いや、作れる。
658デフォルトの名無しさん
2021/11/30(火) 20:37:39.44ID:WEl8d1PC659デフォルトの名無しさん
2021/11/30(火) 20:46:39.91ID:s7fhQ2Tk660デフォルトの名無しさん
2021/11/30(火) 20:52:01.15ID:Y6JwF3m3 >>657
通信やI/O待ちしたままシングルスレッド内で他へ切り替わらないと主張しているのですからウェブブラウザを実装するのは無理でしょ
JavaScriptを含むまともなシステムのように通信やI/O待ちの時はシングルスレッド内の他のタスクへ切り替わるのが普通であってそれだと実装できます
通信やI/O待ちしたままシングルスレッド内で他へ切り替わらないと主張しているのですからウェブブラウザを実装するのは無理でしょ
JavaScriptを含むまともなシステムのように通信やI/O待ちの時はシングルスレッド内の他のタスクへ切り替わるのが普通であってそれだと実装できます
661デフォルトの名無しさん
2021/11/30(火) 20:53:04.96ID:WEl8d1PC あんたたち、まず、世界標準であるところの、マイクロソフトのGUIプログラミング
の構造を理解しなくては。基本は、MFCとWinForms。
の構造を理解しなくては。基本は、MFCとWinForms。
662デフォルトの名無しさん
2021/11/30(火) 20:54:17.71ID:WEl8d1PC663デフォルトの名無しさん
2021/11/30(火) 21:02:11.91ID:Y6JwF3m3 >>661
マイクロソフトには興味ないのでどうでもいいです
シングルスレッドである限りは通信やI/O待ちで他へ切り替わらずに全体が止まってしまってはどうしようもありません
通信やI/O待ちになるところで他のタスクへ切り替わるのが普通のシステムです
マイクロソフトには興味ないのでどうでもいいです
シングルスレッドである限りは通信やI/O待ちで他へ切り替わらずに全体が止まってしまってはどうしようもありません
通信やI/O待ちになるところで他のタスクへ切り替わるのが普通のシステムです
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国、日本行き“50万人”キャンセル 渡航自粛でコロナ禍以来最大 ★2 [お断り★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★6 [ぐれ★]
- 中国外務省局長 「ポケットに手を入れていたのは寒いから」 日本との局長級会談で [お断り★]
- 【速報】中国外務省報道官 高市首相発言撤回なければ「断固たる対抗措置」 ★3 [蚤の市★]
- 中国、日本行き“50万人”キャンセル 渡航自粛でコロナ禍以来最大 ★3 [お断り★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★4 [BFU★]
- 【実況】博衣こよりのえちえちフログロ学力テスト🧪★2
- 【実況】博衣こよりのえちえちフログロ学力テスト🧪
- 【高市早苗】習近平、本気で激おこ [115996789]
- 【ぺこ専🐰】なんG 兎田ぺこら実況スレ🏡【ホロライブ▶】
- 【傾国の美女】高市早苗さん、地元奈良の柿を頬張りラップを披露「未来を拓く、ちから湧く」 [522666295]
- 【悲報】高市早苗さん、もう辞職しか選択肢がない… [271912485]
