探検
C++ vs Rust
■ このスレッドは過去ログ倉庫に格納されています
2021/04/24(土) 08:04:49.48ID:nPKzA798
競え
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待ちになるところで他のタスクへ切り替わるのが普通のシステムです
664デフォルトの名無しさん
2021/11/30(火) 21:07:36.86ID:WEl8d1PC >>663
伝統的な理解では、その場合の、タスクというのは、JSのasyncのタスクの事
ではなくて、別のアプリの「プロセス」のことである事は分かってる?
JSのような意味でのタスクだと切り替えた瞬間にアプリがおかしくなってしまう。
だから、あなた自身が分かっているような「排他処理」が必要だと考えに至る。
ところが、MSが採用している標準的なGUIシステムでは、最初からそうならない
ようになっているから、その心配が無い。
伝統的な理解では、その場合の、タスクというのは、JSのasyncのタスクの事
ではなくて、別のアプリの「プロセス」のことである事は分かってる?
JSのような意味でのタスクだと切り替えた瞬間にアプリがおかしくなってしまう。
だから、あなた自身が分かっているような「排他処理」が必要だと考えに至る。
ところが、MSが採用している標準的なGUIシステムでは、最初からそうならない
ようになっているから、その心配が無い。
665デフォルトの名無しさん
2021/11/30(火) 21:22:23.73ID:Y6JwF3m3 >>664
いいえ
ここでタスクと呼んでいるのはそのJSだけでなくRustでも同じで
シングルOSスレッドの中でも複数が動くタスクのことであって
別名グリーンスレッドと呼ばれる並行プログラミングでの単位のことです
シングルスレッド内のタスクの中でI/Oや通信待ちとなる時は他のタスクへスケジューラーが切り替えます
別タスクへ切り替えないとI/Oや通信待ちのままプログラムが動かなくなるからです
いいえ
ここでタスクと呼んでいるのはそのJSだけでなくRustでも同じで
シングルOSスレッドの中でも複数が動くタスクのことであって
別名グリーンスレッドと呼ばれる並行プログラミングでの単位のことです
シングルスレッド内のタスクの中でI/Oや通信待ちとなる時は他のタスクへスケジューラーが切り替えます
別タスクへ切り替えないとI/Oや通信待ちのままプログラムが動かなくなるからです
666デフォルトの名無しさん
2021/11/30(火) 21:31:24.72ID:WEl8d1PC667デフォルトの名無しさん
2021/11/30(火) 21:37:25.41ID:Y6JwF3m3 >>666
マイクロソフトには興味がないので知りませんが並行プログラミングの常識ですよ
少なくともウェブブラウザで動くJavaScriptは通信I/O待ちで止まったままにはなりませんね
その間も例えば人間が操作すると反応するように他のタスクが並行して動いています
マイクロソフトには興味がないので知りませんが並行プログラミングの常識ですよ
少なくともウェブブラウザで動くJavaScriptは通信I/O待ちで止まったままにはなりませんね
その間も例えば人間が操作すると反応するように他のタスクが並行して動いています
668デフォルトの名無しさん
2021/11/30(火) 21:50:24.93ID:cmlIqpOQ669デフォルトの名無しさん
2021/11/30(火) 21:58:56.83ID:Y6JwF3m3670デフォルトの名無しさん
2021/11/30(火) 22:24:13.84ID:cmlIqpOQ >>669
結局の所、Rustって基本は非同期で、プログラマが await-std や tokio を使って
明示的に非同期プログラミングするってことですよね。
それだったら C++ や Windows の WinForms/WPF アプリでも非同期プログラミングのフレームワークを使えば同じ事。
あなたのこれまでの投稿内容を見て、JavaScript では全てが勝手に非同期で動くと私は受け取りました。
結局の所、Rustって基本は非同期で、プログラマが await-std や tokio を使って
明示的に非同期プログラミングするってことですよね。
それだったら C++ や Windows の WinForms/WPF アプリでも非同期プログラミングのフレームワークを使えば同じ事。
あなたのこれまでの投稿内容を見て、JavaScript では全てが勝手に非同期で動くと私は受け取りました。
671デフォルトの名無しさん
2021/11/30(火) 22:47:13.22ID:Y6JwF3m3 >>670
つまりWindowsのシングルスレッドのプログラミングでも通信I/O待ちになると他のタスクへ切り替わるわけですね
そうすると元々の話
シングルスレッド内でもマルチタスクならば競合を避けるために何らかの排他的な制御が必要、と合意できますよね
そしてその排他的な制御が無ければ他のタスクにより書き換えや削除も起き得るということがわかっていただけましたでしょうか?
リンクリストか否かに関わらず全てのデータ構造で。
つまりWindowsのシングルスレッドのプログラミングでも通信I/O待ちになると他のタスクへ切り替わるわけですね
そうすると元々の話
シングルスレッド内でもマルチタスクならば競合を避けるために何らかの排他的な制御が必要、と合意できますよね
そしてその排他的な制御が無ければ他のタスクにより書き換えや削除も起き得るということがわかっていただけましたでしょうか?
リンクリストか否かに関わらず全てのデータ構造で。
672デフォルトの名無しさん
2021/11/30(火) 22:53:37.50ID:WEl8d1PC >>671
>つまりWindowsのシングルスレッドのプログラミングでも通信I/O待ちになると他のタスクへ切り替わるわけですね
Win32の場合、ファイルI/Oは、通常は同期式だが、特殊な場合には非同期に
することも出来ることは出来る。
しかし、その場合、プログラミングが難しくなるので上級者向きで、
初心者はやるべきではない。
その場合、もちろん、何らかのフラグで危険な状態になるのを防ぐ必要がある。
>つまりWindowsのシングルスレッドのプログラミングでも通信I/O待ちになると他のタスクへ切り替わるわけですね
Win32の場合、ファイルI/Oは、通常は同期式だが、特殊な場合には非同期に
することも出来ることは出来る。
しかし、その場合、プログラミングが難しくなるので上級者向きで、
初心者はやるべきではない。
その場合、もちろん、何らかのフラグで危険な状態になるのを防ぐ必要がある。
673デフォルトの名無しさん
2021/11/30(火) 23:04:55.17ID:Y6JwF3m3 >>672
このスレで初心者用のお子様向けメニューの話をしても仕方ないでしょ
現在プログラミング界ではasync/awaitが普通となっている現状で非同期プログラミングは当たり前のことなので
プログラムが難しくなるから同期だけ使う、というケースだけを前提に考えては駄目ですよ
このスレで初心者用のお子様向けメニューの話をしても仕方ないでしょ
現在プログラミング界ではasync/awaitが普通となっている現状で非同期プログラミングは当たり前のことなので
プログラムが難しくなるから同期だけ使う、というケースだけを前提に考えては駄目ですよ
674デフォルトの名無しさん
2021/11/30(火) 23:11:44.10ID:WEl8d1PC675デフォルトの名無しさん
2021/11/30(火) 23:18:26.84ID:WEl8d1PC 「C++では安全なプログラムが難しい」
と思ってる人も、「非同期I/Oを使わなければ成らない」と思い込んでる人が
多いのかもね。
実際は、非同期I/Oは高度なので避けることが賢明と考えられている。
同期I/Oでもほとんどの場合は十分に機能を果たし、十分に高速なプログラムになる。
イバラの道を避けることで安全なプログラムが簡単に書けるようになる。
と思ってる人も、「非同期I/Oを使わなければ成らない」と思い込んでる人が
多いのかもね。
実際は、非同期I/Oは高度なので避けることが賢明と考えられている。
同期I/Oでもほとんどの場合は十分に機能を果たし、十分に高速なプログラムになる。
イバラの道を避けることで安全なプログラムが簡単に書けるようになる。
676デフォルトの名無しさん
2021/11/30(火) 23:30:35.59ID:Y6JwF3m3677デフォルトの名無しさん
2021/11/30(火) 23:38:36.37ID:WEl8d1PC >>676
JSがある程度以上高度なプログラミングができないのは、非同期を使おうと
する人が多いからも有るかも。しかも、それを推奨したりする人が多くて。
簡単な方法で十分なのに、敢えてロジックがこんがらがる方法を使う必要は無い。
昔から言われていることとして、初心者ほど、マルチスレッドや、高度な
メッセージ通信、Mutexやセマフォなどの同期処理に興味を持ちやすい、
ということがある。
そして、上級者ほど、ほとんどの目的ではそれらを使わなくても
十分に良いプログラミングできることを知っている。
初心者ほど独特の複雑な記法を好み、一行で何もかも書こうとし、
関数に分けずにラムダ式で書こうとする。
上級者ほど、単純で平易な書き方をしようとし、複雑な記法や難しい
仕組みは避ける。
JSがある程度以上高度なプログラミングができないのは、非同期を使おうと
する人が多いからも有るかも。しかも、それを推奨したりする人が多くて。
簡単な方法で十分なのに、敢えてロジックがこんがらがる方法を使う必要は無い。
昔から言われていることとして、初心者ほど、マルチスレッドや、高度な
メッセージ通信、Mutexやセマフォなどの同期処理に興味を持ちやすい、
ということがある。
そして、上級者ほど、ほとんどの目的ではそれらを使わなくても
十分に良いプログラミングできることを知っている。
初心者ほど独特の複雑な記法を好み、一行で何もかも書こうとし、
関数に分けずにラムダ式で書こうとする。
上級者ほど、単純で平易な書き方をしようとし、複雑な記法や難しい
仕組みは避ける。
678デフォルトの名無しさん
2021/11/30(火) 23:51:36.86ID:Y6JwF3m3 >>677
あなたが全く理解できていないから
このスレに無関係なJavaScriptをデタラメに叩いている
メジャーな言語の多くでasync/awaitや類するものが導入されている
時代遅れのC++ですらC++20で半分だけ導入するらしいぜ
あなたが全く理解できていないから
このスレに無関係なJavaScriptをデタラメに叩いている
メジャーな言語の多くでasync/awaitや類するものが導入されている
時代遅れのC++ですらC++20で半分だけ導入するらしいぜ
679デフォルトの名無しさん
2021/11/30(火) 23:58:50.35ID:8WvE/rry 数学100点マンの人が
同期プログラミングしか出来ない初心者だと判明したことが大きいな
同期プログラミングしか出来ない初心者だと判明したことが大きいな
680デフォルトの名無しさん
2021/12/01(水) 00:01:00.14ID:0/nHr1m/ >>678
全く理解出来て無いわけではなくて、Promise や then() や await も
使ったことは有ることはあって、色々テストしてみたが、理解が難しい部分が
残るなとは思った。
で、俺は馬鹿だと思うかも知れないが、これでも数学100点連続マンだったからね。
少なくともそれ位は数学が出来たのに、Promiseが易しい概念だとは思わない。
e.responseWith()や、e.waitUntil()も未だにちゃんと理解出来てる自信が無い。
async関数をthenの中に入れているような場合も、ちゃんとは理解出来て無い。
全く理解出来て無いわけではなくて、Promise や then() や await も
使ったことは有ることはあって、色々テストしてみたが、理解が難しい部分が
残るなとは思った。
で、俺は馬鹿だと思うかも知れないが、これでも数学100点連続マンだったからね。
少なくともそれ位は数学が出来たのに、Promiseが易しい概念だとは思わない。
e.responseWith()や、e.waitUntil()も未だにちゃんと理解出来てる自信が無い。
async関数をthenの中に入れているような場合も、ちゃんとは理解出来て無い。
681デフォルトの名無しさん
2021/12/01(水) 00:01:49.75ID:0/nHr1m/ >>679
CやC++には、基本的にそのようなタイプの非同期システムは無いからね。
CやC++には、基本的にそのようなタイプの非同期システムは無いからね。
682ハノン ◆QZaw55cn4c
2021/12/01(水) 00:01:56.93ID:VU8XmWVx >>677
>上級者ほど、ほとんどの目的ではそれらを使わなくても
>十分に良いプログラミングできることを知っている。
金子氏も Windows を信用せず自前で並行処理を記述していたというし、しかし本当なのでしょうか?誰か解析してください…
>上級者ほど、ほとんどの目的ではそれらを使わなくても
>十分に良いプログラミングできることを知っている。
金子氏も Windows を信用せず自前で並行処理を記述していたというし、しかし本当なのでしょうか?誰か解析してください…
683デフォルトの名無しさん
2021/12/01(水) 00:21:49.47ID:zPx7iS9T >>681
std::future
std::future
684デフォルトの名無しさん
2021/12/01(水) 00:37:59.70ID:hYYowF9a >>680
Promise(言語によってはFuture)が難しいって数学も苦手なんだな
Promiseは単なる先物であって内部はpending/ok/error(言語によって名称など異なる)の状態を持つだけ
async関数はPromiseを返すだけだしawaitはpendingじゃなくなるのを待つだけ
thenの引数はokとなったら呼ばれるだけ
一方でresponseWithやwaitUntilは上述のような言語の基本構成ではなく
ブラウザのWeb APIに過ぎないからそこをまず区別できないと
Promise(言語によってはFuture)が難しいって数学も苦手なんだな
Promiseは単なる先物であって内部はpending/ok/error(言語によって名称など異なる)の状態を持つだけ
async関数はPromiseを返すだけだしawaitはpendingじゃなくなるのを待つだけ
thenの引数はokとなったら呼ばれるだけ
一方でresponseWithやwaitUntilは上述のような言語の基本構成ではなく
ブラウザのWeb APIに過ぎないからそこをまず区別できないと
685デフォルトの名無しさん
2021/12/01(水) 01:04:02.61ID:0/nHr1m/ >>684
関数の最後に○○をreturnするとPromiseでラップされるとか、qiitaなどでは
見つけられたんだが、公式サイトで見つけられなかった。
それと実際色々実験して見ると、単にコールバック関数を登録していると
すれば予想される順序とは異なった順序でconsole.log()文が呼び出されて
いたりした。
その順序はとても独特だった。
また、Proimseを解説する記事において、Aを解決するBなどという言葉が
多用されていたが、その定義を見つけられなかった。
推定は出来るが。しかし、定義が無いと分かりにくい。
関数の最後に○○をreturnするとPromiseでラップされるとか、qiitaなどでは
見つけられたんだが、公式サイトで見つけられなかった。
それと実際色々実験して見ると、単にコールバック関数を登録していると
すれば予想される順序とは異なった順序でconsole.log()文が呼び出されて
いたりした。
その順序はとても独特だった。
また、Proimseを解説する記事において、Aを解決するBなどという言葉が
多用されていたが、その定義を見つけられなかった。
推定は出来るが。しかし、定義が無いと分かりにくい。
686デフォルトの名無しさん
2021/12/01(水) 01:30:16.63ID:hYYowF9a >>685
公式を見なさい
RustではPromiseはFuture traitでゼロコスト設計
https://doc.rust-lang.org/std/future/trait.Future.html
Futureはpoll()を持ち呼ばれると以下の2状態いずれかを返す
・Poll::Pending
・Poll::Ready(val) 【Rustではエラー状態はなくResult<正常値,エラー値>で返す】
https://doc.rust-lang.org/std/keyword.async.html
asyncはFutureを返す
JavaScriptがそんなに好きならこちら
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Promiseは以下の3状態を持つ
・pending
・fulfilled 【正常値が得られた時】
・rejected 【エラー値が得られた時】
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
asyncはPromiseを返す
このように概念は全く同じ
ただしJavaScriptはPromise作れば自動的にスケジューラーに登録されてタスク切り替え実行されるが
Rustはゼロコスト設計だからFuture作ったら自分で好みのスケジューラーに登録してタスク切り替え実行される
もし非同期プログラミングが不得意ならば数学も不得意だろう
公式を見なさい
RustではPromiseはFuture traitでゼロコスト設計
https://doc.rust-lang.org/std/future/trait.Future.html
Futureはpoll()を持ち呼ばれると以下の2状態いずれかを返す
・Poll::Pending
・Poll::Ready(val) 【Rustではエラー状態はなくResult<正常値,エラー値>で返す】
https://doc.rust-lang.org/std/keyword.async.html
asyncはFutureを返す
JavaScriptがそんなに好きならこちら
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
Promiseは以下の3状態を持つ
・pending
・fulfilled 【正常値が得られた時】
・rejected 【エラー値が得られた時】
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
asyncはPromiseを返す
このように概念は全く同じ
ただしJavaScriptはPromise作れば自動的にスケジューラーに登録されてタスク切り替え実行されるが
Rustはゼロコスト設計だからFuture作ったら自分で好みのスケジューラーに登録してタスク切り替え実行される
もし非同期プログラミングが不得意ならば数学も不得意だろう
687デフォルトの名無しさん
2021/12/01(水) 01:33:52.46ID:0/nHr1m/ >>686
というか、Promiseは自分では使いたくないから興味が沸かないし、
実験する時間も取りたくないのに、サンプルなどでは大量に使われてる
場合が多いからもある。
意味が無いものには興味が沸かないというか。
というか、Promiseは自分では使いたくないから興味が沸かないし、
実験する時間も取りたくないのに、サンプルなどでは大量に使われてる
場合が多いからもある。
意味が無いものには興味が沸かないというか。
688デフォルトの名無しさん
2021/12/01(水) 01:36:10.77ID:0/nHr1m/ なお、俺が数学が不得意に分類されるなら、全人口の99.99%位は数学が
超不得意になるだろうな。
超不得意になるだろうな。
689デフォルトの名無しさん
2021/12/01(水) 01:45:02.34ID:zPx7iS9T 一生そのままRustにも興味持たないで平和に暮らしてくれ
意味無いから
意味無いから
690デフォルトの名無しさん
2021/12/01(水) 01:46:47.59ID:0/nHr1m/ Promise知らないことは単なる知識。
O(1)やリンクリストの話は、イマジネーションの世界だから生まれつきの
頭の良さの影響が大きい。
Promiseを知らないことを馬鹿にされても、俺の意見が間違っていることには成らない。
O(1)やリンクリストの話は、イマジネーションの世界だから生まれつきの
頭の良さの影響が大きい。
Promiseを知らないことを馬鹿にされても、俺の意見が間違っていることには成らない。
691デフォルトの名無しさん
2021/12/01(水) 01:52:57.27ID:0/nHr1m/ 明らかに間違ってるのに、俺を馬鹿にしてくるのは、この分野は、
博士課程などにも馬鹿が多いからかもな。
どうみても生まれつきの頭は大したことが無いのに、大学に残ってるような
人が多い分野。
それで馬鹿なのに勘違いして、明らかに間違ったことをいつまでも信じ続ける
人が居る。
さらに悪いのは間違ったことを流布してしまう。
博士課程などにも馬鹿が多いからかもな。
どうみても生まれつきの頭は大したことが無いのに、大学に残ってるような
人が多い分野。
それで馬鹿なのに勘違いして、明らかに間違ったことをいつまでも信じ続ける
人が居る。
さらに悪いのは間違ったことを流布してしまう。
692デフォルトの名無しさん
2021/12/01(水) 01:53:04.71ID:oI4zTDt2 rustの非同期ランタイムは非標準ライブラリで提供されているからフリースタンディング環境でも使えるものがあったりするんだけど
c++ の future とかコルーチンってその辺どうなんですか?
c++ の future とかコルーチンってその辺どうなんですか?
693デフォルトの名無しさん
2021/12/01(水) 02:18:40.66ID:nZUH6NM1 非同期と同期のどちらがよいかは場合によりけりでしょ。
複数のクライアントから同時接続されるサーバだとあるクライアントと通信している間に別のクライアントからの要求を処理しないと効率悪いだろうし。
ネットからファイルを一つダウンロードして解凍して中のファイルを読み込むだけのプログラムだったら前の処理が終わらないと何もできないから同期処理で十分。
複数のクライアントから同時接続されるサーバだとあるクライアントと通信している間に別のクライアントからの要求を処理しないと効率悪いだろうし。
ネットからファイルを一つダウンロードして解凍して中のファイルを読み込むだけのプログラムだったら前の処理が終わらないと何もできないから同期処理で十分。
694デフォルトの名無しさん
2021/12/01(水) 02:25:30.27ID:SFGWVOvC■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★4 [ぐれ★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★3 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 【大分】佐賀関で大規模火災、170棟以上が延焼中 70代男性1人と連絡取れず [ぐれ★]
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「クマはなるべく山に返す努力を」「クマと戦争は間違っている」動物保護活動家の主張 棲み分けと学習放獣でクマ被害なくなるのか?★7 [ぐれ★]
- とらせん IPあり
- 【DAZN】ワールドカップ欧州予選総合 ★5
- 巨専】
- こいせん 全レス転載禁止
- 侍ジャパンシリーズ2025「日本vs韓国」その12
- 【J SPORTS】FIFA U-17ワールドカップ ★10
- 高市「次回選挙争点は台湾有事よ!!」自民立憲公明維新国民「やめろーー!!」これが現実になりそうな件 [469534301]
- 経済保安相「気に入らないことがあれば経済的威圧をする国への依存はリスク」日本さん遂にアメリカと断交へ!!! [472617201]
- 自閉症が「んなっしょい」と連呼するお🏡
- 「世の中、バカが多くて疲れません?」👉1991年日本人大発狂 [543236886]
- アンケート調査で「高市発言は問題なし」 93.5%wwwwwwwwwwwwwwwwwwwwwwwww [279254606]
- 来年は卵が1パック400円以上になるらしい
