探検
C++ vs Rust
■ このスレッドは過去ログ倉庫に格納されています
2021/04/24(土) 08:04:49.48ID:nPKzA798
競え
2021/09/10(金) 12:27:50.85ID:4cVpX4oe
>>79
push_front()使ってるから先頭へ挿入してるだけじゃないか。
Cのリンクリストは、どんな非負整数 M に対して、M番目に挿入しても
MにもNにも依存しない定数時間で挿入できる。
それがRustに欠けている。
push_front()使ってるから先頭へ挿入してるだけじゃないか。
Cのリンクリストは、どんな非負整数 M に対して、M番目に挿入しても
MにもNにも依存しない定数時間で挿入できる。
それがRustに欠けている。
2021/09/10(金) 12:28:54.60ID:2Djs9W2b
>>75
そのオーバーヘッドは実用上問題になりますか?
例えばmallocの実装もarenaを使っていますが問題はないのですか?
そもそも計算量の議論をしていたのはあなたなのになぜ論点をずらすのですか?
そのオーバーヘッドは実用上問題になりますか?
例えばmallocの実装もarenaを使っていますが問題はないのですか?
そもそも計算量の議論をしていたのはあなたなのになぜ論点をずらすのですか?
2021/09/10(金) 12:30:48.00ID:Ga+Uz44a
2021/09/10(金) 12:41:50.91ID:4cVpX4oe
2021/09/10(金) 12:42:38.21ID:XIGB6bHM
>>65が何言ってるのか1行たりとも理解できなくて日本語の見た目した何かにしか見えないんだけど、
なんで話が進んでるの・・・
なんで話が進んでるの・・・
2021/09/10(金) 13:08:34.28ID:Ga+Uz44a
>>83
自分でM番目に挿入って書いてるわけだが
自分でM番目に挿入って書いてるわけだが
2021/09/10(金) 13:34:07.88ID:4cVpX4oe
>>85
「M番目に挿入」するが、それをMという数値で識別するとは書いてない。
数学とはそういうものだ。
ポインタ p で表現する場合でも、p が M 番目のノードを指していることがある。
その場合は、M番目に挿入と表現される。
そう表現しないと、O(x)記号で表現しにくいからだ。
「M番目に挿入」するが、それをMという数値で識別するとは書いてない。
数学とはそういうものだ。
ポインタ p で表現する場合でも、p が M 番目のノードを指していることがある。
その場合は、M番目に挿入と表現される。
そう表現しないと、O(x)記号で表現しにくいからだ。
2021/09/10(金) 13:35:00.70ID:FsmeH+FF
2021/09/10(金) 13:35:29.31ID:4cVpX4oe
数学での言葉の表現と日常の言葉の表現は異なる。
「M番目に挿入」することと、そのノードを、index = M - 1 で表すこととは
別の話だ。
「M番目に挿入」することと、そのノードを、index = M - 1 で表すこととは
別の話だ。
2021/09/10(金) 13:47:35.86ID:4cVpX4oe
>>87
同じノードを複数のCursor/CursorMutが参照している場合、1つの参照経由
でノードを削除した場合、別の参照がダングリング参照になるのを0コストで
防ぐ方法は無いはずだ。
静的解析が不可能で、時間や記憶域に何らかのオーバヘッドが必要となるはず。
同じノードを複数のCursor/CursorMutが参照している場合、1つの参照経由
でノードを削除した場合、別の参照がダングリング参照になるのを0コストで
防ぐ方法は無いはずだ。
静的解析が不可能で、時間や記憶域に何らかのオーバヘッドが必要となるはず。
2021/09/10(金) 14:16:45.03ID:4cVpX4oe
さらに、1つの LinkedListに対して、同時に2個以上の CursorMut を作ることは
出来ないはず。
出来ないはず。
2021/09/10(金) 14:18:55.00ID:iOAXb/4V
Cでリンクドリストの途中を直接ポインタで持っていると速いが
その途中が削除された場合にそのポインタは危険なポインタとなる
つまりCで記述しても何らかのコストをかけなければ安全に出来ない
つまりこの問題はどの言語であろうがコストゼロにすることは不可能
その途中が削除された場合にそのポインタは危険なポインタとなる
つまりCで記述しても何らかのコストをかけなければ安全に出来ない
つまりこの問題はどの言語であろうがコストゼロにすることは不可能
2021/09/10(金) 15:27:02.65ID:I2sJLr90
93デフォルトの名無しさん
2021/09/10(金) 15:44:47.65ID:EyQ85oMr すげぇバカ
2021/09/10(金) 15:45:34.73ID:XIGB6bHM
よくわからないけどこんなスレよりqiitaとかzennとかで記事書いたほうがいいと思う
2021/09/10(金) 17:06:16.82ID:lpjuAWj9
>>86
屁理屈
屁理屈
2021/09/10(金) 17:11:54.58ID:lpjuAWj9
どんな非負整数Mに対して
と自分で書いている
当然与える情報はMである
各Mに対応するポインタを保持するなら
挿入時にそのテーブルを更新しなきゃならないから
O(1)では出来ない
と自分で書いている
当然与える情報はMである
各Mに対応するポインタを保持するなら
挿入時にそのテーブルを更新しなきゃならないから
O(1)では出来ない
2021/09/10(金) 17:38:39.28ID:dS7angqs
>>96
Mを与える情報とは書いてない。
Mというものを使わないと、LinkedListとVectorで共通した議論が出来なく
なるから書いてるだけ。数学では良く使う論法。
つまり、Mは、議論の中で場所を特定するために用いているだけで、
プログラム中で用いているとは言ってない。
Mを与える情報とは書いてない。
Mというものを使わないと、LinkedListとVectorで共通した議論が出来なく
なるから書いてるだけ。数学では良く使う論法。
つまり、Mは、議論の中で場所を特定するために用いているだけで、
プログラム中で用いているとは言ってない。
2021/09/10(金) 17:41:20.99ID:dS7angqs
例えば、コンテナに100個のノードが入っていたとする。
コンテナは、LinkedListやVectorなどどんなアルゴリズムを使っているかは何でも良い。
で、「5番目の場所にノードを追加する」という言葉は、LinkedListにも使えるが、
その場合、プログラム中では5という数値で識別せず使わず、ポインタで識別する
のが C言語での常識。
でも、「5番目の場所に追加する」という言葉は使ってよい事になっている。
コンテナは、LinkedListやVectorなどどんなアルゴリズムを使っているかは何でも良い。
で、「5番目の場所にノードを追加する」という言葉は、LinkedListにも使えるが、
その場合、プログラム中では5という数値で識別せず使わず、ポインタで識別する
のが C言語での常識。
でも、「5番目の場所に追加する」という言葉は使ってよい事になっている。
2021/09/10(金) 17:43:19.62ID:iOAXb/4V
>>96
その人は数学が得意と言いながらそこすら理解できていない人だからね
Cでもプログラミングしたことあるならすぐわかることだからプログラミング経験も乏しいと推測される
つまりRustを叩きたいだけの人が暴れているだけの構図
その人は数学が得意と言いながらそこすら理解できていない人だからね
Cでもプログラミングしたことあるならすぐわかることだからプログラミング経験も乏しいと推測される
つまりRustを叩きたいだけの人が暴れているだけの構図
100デフォルトの名無しさん
2021/09/10(金) 17:48:47.41ID:dS7angqs >>99
理解してる。
お前らが、M番目のノードを数値Mでプログラムでも辿ると勘違いしている
抽象化が理解できない馬鹿だからそう思ってるだけ。
俺は抽象化が得意だから、M番目のノードをポインタで識別すると
考える。お前らは、Mとpを脳内で橋渡しできないだけ。
理解してる。
お前らが、M番目のノードを数値Mでプログラムでも辿ると勘違いしている
抽象化が理解できない馬鹿だからそう思ってるだけ。
俺は抽象化が得意だから、M番目のノードをポインタで識別すると
考える。お前らは、Mとpを脳内で橋渡しできないだけ。
101デフォルトの名無しさん
2021/09/10(金) 17:49:37.61ID:dS7angqs 数学的才能の無い人とは話が合わない。
知能に差が大きすぎる人達とは話が合わない。
知能に差が大きすぎる人達とは話が合わない。
102デフォルトの名無しさん
2021/09/10(金) 17:58:29.87ID:9JzLMDXF もっと知能レベルが合った人が集う場所にいきな
103デフォルトの名無しさん
2021/09/10(金) 18:15:44.49ID:ae9TKcqK >>100
君は数学が不得意だな
入力Mに対してM番目を得る関数のコスト(リソースコストなど含む)を考えればいいだけなのにそれができない
抽象的に考えるのが苦手なら具体的な関数のプログラムを考えてもよい
Rustを叩きたいだけだとしてもC言語のプログラミングくらいはできるんだろ?
君の主張が間違っていて実現不可能なことがすぐわかる
そして示せなければ君の完全敗北確定だ
君は数学が不得意だな
入力Mに対してM番目を得る関数のコスト(リソースコストなど含む)を考えればいいだけなのにそれができない
抽象的に考えるのが苦手なら具体的な関数のプログラムを考えてもよい
Rustを叩きたいだけだとしてもC言語のプログラミングくらいはできるんだろ?
君の主張が間違っていて実現不可能なことがすぐわかる
そして示せなければ君の完全敗北確定だ
104デフォルトの名無しさん
2021/09/10(金) 18:22:19.32ID:uQqwzIiF >>98
完全に屁理屈
それならわざわざ「どんな非負整数Mに対しても」なんて言う必要は全く無い
任意のノード、任意の箇所
ならまだそういう可能性もある
たまたまMに対応するポインタがキャッシュされてた場合の計算量を言っても何の意味も無い
ちなみに数学的能力はお前よりあると思うよ
実績で勝負するなら付き合う
完全に屁理屈
それならわざわざ「どんな非負整数Mに対しても」なんて言う必要は全く無い
任意のノード、任意の箇所
ならまだそういう可能性もある
たまたまMに対応するポインタがキャッシュされてた場合の計算量を言っても何の意味も無い
ちなみに数学的能力はお前よりあると思うよ
実績で勝負するなら付き合う
105デフォルトの名無しさん
2021/09/10(金) 18:33:25.73ID:HO5HNd+Q106デフォルトの名無しさん
2021/09/10(金) 20:54:06.22ID:2Djs9W2b まあここ隔離スレなんで
107デフォルトの名無しさん
2021/09/10(金) 22:29:30.98ID:S72cPfGI 自分は数学できないからできる人の相場感覚は分からないが、数学の天才って◯◯予想を証明したとか、定理に自分の名前が付いているとか、そういうレベルの人のことじゃない? 東大数学程度で数学の天才を名乗られても……。
108デフォルトの名無しさん
2021/09/10(金) 23:03:29.47ID:G/i8H+xj > 高校生が灯台に入学するときに受ける東大の数学の試験のことだよ。
高校数学でここまでイキれるのはもはや才能だと思うわ
数学の天才っていうのは数学の研究してて教科書書いてるような
著名な人をまわりの人が「他称」するときの話で
高校数学の成績で「自称」しちゃうってのは別の才能w
高校数学でここまでイキれるのはもはや才能だと思うわ
数学の天才っていうのは数学の研究してて教科書書いてるような
著名な人をまわりの人が「他称」するときの話で
高校数学の成績で「自称」しちゃうってのは別の才能w
109デフォルトの名無しさん
2021/09/10(金) 23:04:20.56ID:uQqwzIiF 東大でやる数学じゃなくて入試でしょ?
つまり高校レベル
こんなのを東大の数学と言うな
つまり高校レベル
こんなのを東大の数学と言うな
110デフォルトの名無しさん
2021/09/11(土) 01:22:42.58ID:Q/hQI3Xf 知ってる一番難しい数学がそれだったんでしょ
つっこんであげないのが優しさでは
つっこんであげないのが優しさでは
111デフォルトの名無しさん
2021/09/11(土) 01:40:01.24ID:PRM8i6LA112デフォルトの名無しさん
2021/09/11(土) 10:36:57.99ID:kQXQH3+b 馬鹿ばっか。
113デフォルトの名無しさん
2021/09/11(土) 11:20:17.45ID:PFLibieQ 実際連結リストのノードに対する参照を保持しておくってどういうユースケースで現れるんだろうか
114デフォルトの名無しさん
2021/09/11(土) 11:40:09.41ID:tSun79KI 掲示板で算数自慢するときに使う
115デフォルトの名無しさん
2021/09/11(土) 11:42:49.15ID:kQXQH3+b >>113
例:
1. テキストエディタで、10万行のファイルを読み込み、その先頭に
1000行のテキストを挿入するときの速度向上。
2. 言語を自作する時、マクロ展開の時のトークン列へのトークンの挿入
例:
1. テキストエディタで、10万行のファイルを読み込み、その先頭に
1000行のテキストを挿入するときの速度向上。
2. 言語を自作する時、マクロ展開の時のトークン列へのトークンの挿入
116デフォルトの名無しさん
2021/09/11(土) 16:43:18.56ID:zUj2TAiQ117デフォルトの名無しさん
2021/09/11(土) 23:33:36.29ID:EO9owr6G118デフォルトの名無しさん
2021/09/12(日) 00:21:25.00ID:CFIv5O+a 相手をバカと貶めることで何もしなくても自分わ相対的に高めることができるという高等な議論テクだ
さすが高学歴
さすが高学歴
119デフォルトの名無しさん
2021/09/12(日) 02:54:54.78ID:x/1IPUIX >>115
1.ってバッファを1個のLinkedListとして持っておいて、カーソルの位置をノードへの&mutで持っておきたいって発想だよね
それよか2個のLinkedListに「カーソル以前の内容」「カーソル以降の内容」を最初から分けて持っておいて、
必要に応じて前者の末尾または後者の先頭を操作するという風にすれば、常に&mut LinkedListつかまれることもなくて都合良いのでは?
workaroundでしかないという批判は認めよう
1.ってバッファを1個のLinkedListとして持っておいて、カーソルの位置をノードへの&mutで持っておきたいって発想だよね
それよか2個のLinkedListに「カーソル以前の内容」「カーソル以降の内容」を最初から分けて持っておいて、
必要に応じて前者の末尾または後者の先頭を操作するという風にすれば、常に&mut LinkedListつかまれることもなくて都合良いのでは?
workaroundでしかないという批判は認めよう
120デフォルトの名無しさん
2021/09/17(金) 13:36:25.88ID:9sB/yeOV 任意のM番目に要素を挿入する時間計算量がO(1)の線形リストができないと入院中の妹が苦しむんだわ…
121デフォルトの名無しさん
2021/09/18(土) 16:11:40.95ID:bNqoSBDr どーでも良いですよ
byだいたひかる
byだいたひかる
122デフォルトの名無しさん
2021/10/05(火) 15:44:11.57ID:+1Hntkr6 素人だからよく分からんけど、実務やってる人からCppだとvoid**とか出てきて難しすぎて狂うって話は聞いたことあるけどラッパークラスを作って分かりやすいメソッドつくればいいんじゃないの
123デフォルトの名無しさん
2021/10/05(火) 18:47:14.74ID:JbR3YU6O void**のどこが難しいのかさっぱり
124デフォルトの名無しさん
2021/10/17(日) 09:40:31.27ID:6Bvliwnf void**は許さない派
125デフォルトの名無しさん
2021/10/24(日) 13:55:43.29ID:eQqSgpa/ 任意の言語ができる操作が任意の言語ではできないとほざくやつが数学ができるとかネタか糖質だろう...
チューニングマシンの存在を真っ向から否定したいならここではなく学会で論文を出そうね
チューニングマシンの存在を真っ向から否定したいならここではなく学会で論文を出そうね
126デフォルトの名無しさん
2021/10/24(日) 14:24:43.42ID:eQqSgpa/ プロレスごっこを期待して覗いたら、キチガイが占拠していたのは笑う
127デフォルトの名無しさん
2021/10/24(日) 14:57:26.55ID:dxF2sYGf ここ隔離スレなので
128デフォルトの名無しさん
2021/10/24(日) 18:05:52.35ID:NLtlOSxj チューニングマシンて
129デフォルトの名無しさん
2021/10/24(日) 20:19:43.90ID:IF6Ria+p c++とrustってチューニング完全なんですよね。意外にこれ知られてない
130デフォルトの名無しさん
2021/10/24(日) 20:55:50.68ID:IF6Ria+p rustの所有権は所謂、線形型
普通に理論として確立している
数学できるくんの主張は線形型によってチューニングマシンの計算複雑性が変化するってことだろう
証明できたらチューニング賞ものだろう
何十年ぶりじゃないか?記述計算量に新しい概念が導入されるのは
普通に理論として確立している
数学できるくんの主張は線形型によってチューニングマシンの計算複雑性が変化するってことだろう
証明できたらチューニング賞ものだろう
何十年ぶりじゃないか?記述計算量に新しい概念が導入されるのは
131デフォルトの名無しさん
2021/10/24(日) 22:07:03.33ID:+peTc5KU rustの所有権や借用や、コンパイルが通らずにいらいらきますが、慣れればスラスラというか、ストレスなく書けるようになるのかな
132デフォルトの名無しさん
2021/10/24(日) 22:10:42.59ID:+peTc5KU 日本語がおかしいですが、
所有権や借用が、やりたいことをストレスなく書けるようになる気がしなくて…
所有権や借用が、やりたいことをストレスなく書けるようになる気がしなくて…
133デフォルトの名無しさん
2021/10/24(日) 22:29:10.11ID:HVo+cqVA 慣れみたいなものはあると思う
コンパイル通るようコード直すことを繰り返す内に最初からコンパイル通すことができるようになるかと
コンパイル通るようコード直すことを繰り返す内に最初からコンパイル通すことができるようになるかと
134デフォルトの名無しさん
2021/10/24(日) 22:41:32.45ID:+peTc5KU135デフォルトの名無しさん
2021/10/25(月) 17:58:05.73ID:a6PpXdhO136デフォルトの名無しさん
2021/10/25(月) 20:25:16.68ID:cubP7NbG >>135
ご利益の大小はソフトウェアの種類によって変わるだろうね
OSやブラウザのようなメモリアクセス違反が即致命的な脆弱性に繋がり得る、かつ、巨大でバグを取り除ききるのが難しいソフトではご利益大きい
逆に多少バギーでも困らないソフトならただ煩わしいだけというのは正しいかも
とはいえ慣れればコンパイルが通るようにコードを書くのは多くの場合難しくないので、個人的にはカジュアルユースでもコストよりメリットが多いように感じる
ご利益の大小はソフトウェアの種類によって変わるだろうね
OSやブラウザのようなメモリアクセス違反が即致命的な脆弱性に繋がり得る、かつ、巨大でバグを取り除ききるのが難しいソフトではご利益大きい
逆に多少バギーでも困らないソフトならただ煩わしいだけというのは正しいかも
とはいえ慣れればコンパイルが通るようにコードを書くのは多くの場合難しくないので、個人的にはカジュアルユースでもコストよりメリットが多いように感じる
137デフォルトの名無しさん
2021/10/26(火) 18:03:05.91ID:KgmW7hJW >>136
め早口
め早口
138デフォルトの名無しさん
2021/10/26(火) 20:06:45.12ID:OracOvFU139デフォルトの名無しさん
2021/10/26(火) 22:54:07.10ID:XkR6Nv6d140デフォルトの名無しさん
2021/10/26(火) 23:17:46.13ID:zVG+0sad141デフォルトの名無しさん
2021/10/27(水) 08:20:39.13ID:qg2SY4Q5 こんな実装するならrust使う意味ないけどねw
https://doc.rust-lang.org/stable/std/alloc/trait.Allocator.html
頭悪いからさらに時間使っちゃいそうでかわいそう。
https://doc.rust-lang.org/stable/std/alloc/trait.Allocator.html
頭悪いからさらに時間使っちゃいそうでかわいそう。
142デフォルトの名無しさん
2021/10/27(水) 09:20:32.30ID:2iZWGrmg ゴールをずらせば負けたことにならないまで読んだ
143デフォルトの名無しさん
2021/10/27(水) 09:23:36.95ID:q+lzbSiO あちゃちゃwそれ別のapiじゃんw
お馬鹿さんだからメーリス追えないんだねww
お馬鹿さんだからメーリス追えないんだねww
144デフォルトの名無しさん
2021/10/27(水) 09:29:13.91ID:zfYVqfDQ 話追えるようになってから来てくださいね🤗
145デフォルトの名無しさん
2021/10/27(水) 09:30:10.86ID:zfYVqfDQ 頭悪いのどっちかな
146デフォルトの名無しさん
2021/10/27(水) 14:57:34.79ID:qg2SY4Q5 は?linuxの方ならここから話全く進んでないんだが。。誤魔化せると思ったのかな。。
https://lkml.org/lkml/2021/7/7/349
https://lkml.org/lkml/2021/7/7/349
147デフォルトの名無しさん
2021/10/27(水) 15:49:20.46ID:G9Y5/nKM だからそれだけ貼られても経緯とかなんもわからんし読む気もおきんって
148デフォルトの名無しさん
2021/10/27(水) 16:58:29.94ID:Ru0zcXw7 顔真っ赤っかで草w
悔しいねえw
悔しいねえw
149デフォルトの名無しさん
2021/10/27(水) 16:59:43.91ID:3BkIbLo2 >>146
頭悪いの君だよね?
頭悪いの君だよね?
150デフォルトの名無しさん
2021/10/27(水) 18:36:52.66ID:zwnES/cK あわしろ氏がLinuxをRustで書き直すプロジェクト始めなかったっけ。
151デフォルトの名無しさん
2021/11/21(日) 11:28:03.98ID:aXP4f2By どんなに簡単でも、できることに制限がある言語は流行らない、という経験法則がある。
Rustも使えるアルゴリズムに制限があるのだが。
例えば、C言語で使えていたアルゴリズムは、C++/Java/C#ではそのまま使える。
特にC++とC#には、Cから移行するときの制限が少ない。
ところがRustでは、これらのコードからはシンプルには移植できないものが存在
してしまう。
C#やJavaは速度を遅くする代わりに安全性と自由性の両方を確保できているが、
Rustは、速度は余り遅くならないが、自由性を犠牲にしている。
これは大問題となるだろう。
Rustも使えるアルゴリズムに制限があるのだが。
例えば、C言語で使えていたアルゴリズムは、C++/Java/C#ではそのまま使える。
特にC++とC#には、Cから移行するときの制限が少ない。
ところがRustでは、これらのコードからはシンプルには移植できないものが存在
してしまう。
C#やJavaは速度を遅くする代わりに安全性と自由性の両方を確保できているが、
Rustは、速度は余り遅くならないが、自由性を犠牲にしている。
これは大問題となるだろう。
152デフォルトの名無しさん
2021/11/21(日) 11:54:39.30ID:7O4ablWw C++に勝てるワケねぇだろ
153デフォルトの名無しさん
2021/11/21(日) 13:31:58.91ID:kZvTUakz unsafeあるくせにできないことあるのか
154デフォルトの名無しさん
2021/11/21(日) 13:33:18.01ID:vno614JY いつもの奴だ
155デフォルトの名無しさん
2021/11/21(日) 14:23:27.74ID:qwOTZsAN >>153
unsafeの中だけに閉じ込めきれないのが問題。
例えば、C言語の場合、アセンブラにしか掛けないことは、アセンブラでコードを書いた
ものをCの関数にして、Cから呼び出すことが出来たので問題なかった。
ところがRustの場合、リンクリストをポインタや参照を使って高速に扱うことが
unsafeの中だけでは完結できないので無理。
結論的には、リンクリストをO(1)でアクセスすることがRustのsafeモードでは
完全に不可能といえる。たとえ unsafe モードを使っても、safeモードに
「しみ出してきて」駄目になる。
unsafeの中だけに閉じ込めきれないのが問題。
例えば、C言語の場合、アセンブラにしか掛けないことは、アセンブラでコードを書いた
ものをCの関数にして、Cから呼び出すことが出来たので問題なかった。
ところがRustの場合、リンクリストをポインタや参照を使って高速に扱うことが
unsafeの中だけでは完結できないので無理。
結論的には、リンクリストをO(1)でアクセスすることがRustのsafeモードでは
完全に不可能といえる。たとえ unsafe モードを使っても、safeモードに
「しみ出してきて」駄目になる。
156デフォルトの名無しさん
2021/11/21(日) 14:25:17.13ID:qwOTZsAN Rustを使うなら、次のデータ構造をCのように「効率よく扱う」のは諦めるしかない:
・リンクリスト
・ツリー構造(バイナリツリーなども含む)
なんどもいうが、unsafeモードをいくら使っても言語の構造上、
無理なものは無理。
俺は数学の天才。最初から結論が分かる。
・リンクリスト
・ツリー構造(バイナリツリーなども含む)
なんどもいうが、unsafeモードをいくら使っても言語の構造上、
無理なものは無理。
俺は数学の天才。最初から結論が分かる。
157デフォルトの名無しさん
2021/11/21(日) 14:27:35.80ID:qwOTZsAN 何度も言おう。
Rustでリンクリストやツリー構造をO(1)でsafeモードからランダムアクセス
できないことは数学的に完全に証明できる。
そしてそれは、unsafeモードをいかに工夫して使っても無理。
無理なものは無理。これは絶対。
俺は数学の天才。
Rustでリンクリストやツリー構造をO(1)でsafeモードからランダムアクセス
できないことは数学的に完全に証明できる。
そしてそれは、unsafeモードをいかに工夫して使っても無理。
無理なものは無理。これは絶対。
俺は数学の天才。
158デフォルトの名無しさん
2021/11/21(日) 14:30:47.72ID:qwOTZsAN [補足]
それが出来るんだったらもっと普及してるし、もっと真似されてる。
Rustのやり方では不可能だから普及できない。
それが出来るんだったらもっと普及してるし、もっと真似されてる。
Rustのやり方では不可能だから普及できない。
159デフォルトの名無しさん
2021/11/21(日) 14:37:38.26ID:ekMm5ue5 >>155
つまりunsafe使えばできるのね
つまりunsafe使えばできるのね
160デフォルトの名無しさん
2021/11/21(日) 14:54:12.46ID:uAxr+NUo161デフォルトの名無しさん
2021/11/21(日) 19:24:03.14ID:a8amZ/lG >>157
また嘘つきがRust叩きをしているのか
>リンクリストやツリー構造をO(1)でランダムアクセスできない
これは全てのプログラミング言語で不可能
もちろんC言語でも不可能
以前も皆に論破されて逃走したのにまた戻ってきたのか
また嘘つきがRust叩きをしているのか
>リンクリストやツリー構造をO(1)でランダムアクセスできない
これは全てのプログラミング言語で不可能
もちろんC言語でも不可能
以前も皆に論破されて逃走したのにまた戻ってきたのか
162デフォルトの名無しさん
2021/11/21(日) 19:46:49.29ID:/ddxrWFf163デフォルトの名無しさん
2021/11/21(日) 19:47:48.85ID:/ddxrWFf ここはレベルが低すぎる。
丁寧に説明したのに全く理解を示さないやつばかり。
丁寧に説明したのに全く理解を示さないやつばかり。
164デフォルトの名無しさん
2021/11/21(日) 19:49:09.49ID:/ddxrWFf C/C++が速いのは、リンクリストのおかげだ。
Stroustrapも馬鹿だからリンクリストを理解できてない。
vectorだけでは人気アプリの速度は達成できてない。
Stroustrapも馬鹿だからリンクリストを理解できてない。
vectorだけでは人気アプリの速度は達成できてない。
165デフォルトの名無しさん
2021/11/21(日) 20:11:47.26ID:ru7ojY1Q よく知らんけど、ツリーとかリンクリストうまく扱えないの?
166デフォルトの名無しさん
2021/11/21(日) 20:18:26.10ID:ekMm5ue5167デフォルトの名無しさん
2021/11/21(日) 20:23:22.75ID:a8amZ/lG std::collections::LinkedList
https://doc.rust-lang.org/std/collections/struct.LinkedList.html
std::collections::BTreeMap
https://doc.rust-lang.org/std/collections/struct.BTreeMap.html
https://doc.rust-lang.org/std/collections/struct.LinkedList.html
std::collections::BTreeMap
https://doc.rust-lang.org/std/collections/struct.BTreeMap.html
168デフォルトの名無しさん
2021/11/21(日) 20:53:48.92ID:ZPin+mWW 算数得意おじちゃんが生えてきたな
169デフォルトの名無しさん
2021/11/22(月) 00:48:17.10ID:saDsX792170デフォルトの名無しさん
2021/11/22(月) 00:50:22.67ID:saDsX792 >>168
余りにも馬鹿すぎるから、発言者の背景を示すしかなかった。
IQの違いが大きすぎると話が通じないと言われるが、まさに
このスレがそうで、ちゃんと言わないと、正しいことを言ってる
人が馬鹿にされるから。
余りにも馬鹿すぎるから、発言者の背景を示すしかなかった。
IQの違いが大きすぎると話が通じないと言われるが、まさに
このスレがそうで、ちゃんと言わないと、正しいことを言ってる
人が馬鹿にされるから。
171デフォルトの名無しさん
2021/11/22(月) 01:02:53.27ID:saDsX792 >>166
・Cだとリンクリストやツリーの中のノードを識別するのに、通し番号ではなく
ポインタが使われる。そのポインタは、関数内部にとどまらず、
アプリ全体で大規模に保持され続け、ノードが必要になった場合、それを
介してノードにアクセスする。だから、読み込みも書き込みも自由自在に
行える。一つのツリーの中の有るノードを削除し、あるノードに子ノード
を追加し、あるノードの直後に弟ノードを追加し、あるノードを読み取り、
あるノードに書き込む、などを全く任意のタイミングで行える。
繰り返しになるが、これらのポインタはある関数の内部だけで完結
せずに、関数の外のグローバル変数にアプリの起動時から終了時まで
恒久的に保持され、必要なタイミングで使用される。
・Rustではこのようなことが不可能。ツリーのノードを指す参照を、
グローバル変数に複数保持して、書き込みと読み込みを自由自在に
行うことが不可能だかっら。
・Cだとリンクリストやツリーの中のノードを識別するのに、通し番号ではなく
ポインタが使われる。そのポインタは、関数内部にとどまらず、
アプリ全体で大規模に保持され続け、ノードが必要になった場合、それを
介してノードにアクセスする。だから、読み込みも書き込みも自由自在に
行える。一つのツリーの中の有るノードを削除し、あるノードに子ノード
を追加し、あるノードの直後に弟ノードを追加し、あるノードを読み取り、
あるノードに書き込む、などを全く任意のタイミングで行える。
繰り返しになるが、これらのポインタはある関数の内部だけで完結
せずに、関数の外のグローバル変数にアプリの起動時から終了時まで
恒久的に保持され、必要なタイミングで使用される。
・Rustではこのようなことが不可能。ツリーのノードを指す参照を、
グローバル変数に複数保持して、書き込みと読み込みを自由自在に
行うことが不可能だかっら。
172デフォルトの名無しさん
2021/11/22(月) 01:07:59.95ID:saDsX792 >>171
[補足]
Cの方で説明したやり方は、C++/C/Javaでも可能。
JSやRuby、Pythonでも可能。
Rustだけが不可能。
つまり、多くの言語が出来る中でRustだけが出来ない。
その結果、数学的な意味での「一般的」には、TreeやLinkedListでまともな性能が出ない。
もちろん、特定のケースでは同等性能が出ることはあるが。
[補足]
Cの方で説明したやり方は、C++/C/Javaでも可能。
JSやRuby、Pythonでも可能。
Rustだけが不可能。
つまり、多くの言語が出来る中でRustだけが出来ない。
その結果、数学的な意味での「一般的」には、TreeやLinkedListでまともな性能が出ない。
もちろん、特定のケースでは同等性能が出ることはあるが。
173デフォルトの名無しさん
2021/11/22(月) 01:08:41.45ID:saDsX792 なお、今言ったことは、未踏や研究テーマで扱うことは禁止する。
174デフォルトの名無しさん
2021/11/22(月) 01:32:04.72ID:saDsX792 >>172
[補足2]
通し番号ではなく、ポインタでノードを識別することで、末尾以外のノードを
削除した時でも、識別番号の書き換えが不要であるメリットもある。
ポインタとはアドレスを保持する変数のことであるが、リンクリストや
ツリー構造の場合、途中のノードを削除しても、別のノードのアドレス
は全く変化しないので、削除したノード以外のポインタ値は全く変更されないので
書き換えも必要ないからである。
一方、初心者がやりがちなのは、リンクリストでも先頭のノードを0番にして、
それ以後のノードを1、2、3 という通し番号で識別しようとする方法。
これだと、5番のノードを削除した時、6番以後のノードは番号の付け替えが
必要になるのでものすごく効率が下がる。
また、k 番のノードをアクセスする際には、O(k)の時間が掛かってしまう。
本来、Cではノードを識別するのは、このような通し番号ではなく、
ポインタ(アドレス)で行うのが伝統であって、アルゴリズムの教科書でも
それが前提になっている。
それがいつからか、リンクリストでも通し番号で識別する流儀を誰かが持ち込み
初めて混乱が生じるようになった。
[補足2]
通し番号ではなく、ポインタでノードを識別することで、末尾以外のノードを
削除した時でも、識別番号の書き換えが不要であるメリットもある。
ポインタとはアドレスを保持する変数のことであるが、リンクリストや
ツリー構造の場合、途中のノードを削除しても、別のノードのアドレス
は全く変化しないので、削除したノード以外のポインタ値は全く変更されないので
書き換えも必要ないからである。
一方、初心者がやりがちなのは、リンクリストでも先頭のノードを0番にして、
それ以後のノードを1、2、3 という通し番号で識別しようとする方法。
これだと、5番のノードを削除した時、6番以後のノードは番号の付け替えが
必要になるのでものすごく効率が下がる。
また、k 番のノードをアクセスする際には、O(k)の時間が掛かってしまう。
本来、Cではノードを識別するのは、このような通し番号ではなく、
ポインタ(アドレス)で行うのが伝統であって、アルゴリズムの教科書でも
それが前提になっている。
それがいつからか、リンクリストでも通し番号で識別する流儀を誰かが持ち込み
初めて混乱が生じるようになった。
175デフォルトの名無しさん
2021/11/22(月) 01:46:12.87ID:4Q+A1yLL176165
2021/11/22(月) 02:04:09.01ID:43z4eYfr >>169,172
なるほど、そうなんだ
でも正直、なにを言ってるのかまだよくわからんから、ちょっとベンチマークを投稿して遅さを示してみてくれん?
Linked Listの実装なんてその投稿よりも圧倒的に短く書けるとおもうし、ちょっとやってみせておくれ
なるほど、そうなんだ
でも正直、なにを言ってるのかまだよくわからんから、ちょっとベンチマークを投稿して遅さを示してみてくれん?
Linked Listの実装なんてその投稿よりも圧倒的に短く書けるとおもうし、ちょっとやってみせておくれ
177デフォルトの名無しさん
2021/11/22(月) 10:14:51.86ID:ejqG4gpN pub fn cursor_front_mut(&mut self) -> CursorMut<'_, T>
This is a nightly-only experimental API. (linked_list_cursors #58533)
CursorMutのStabilisedがまだ来てないことへの批判ってこと?
This is a nightly-only experimental API. (linked_list_cursors #58533)
CursorMutのStabilisedがまだ来てないことへの批判ってこと?
178デフォルトの名無しさん
2021/11/22(月) 10:24:02.08ID:EEj8G+es >>157
> Rustでリンクリストやツリー構造をO(1)でsafeモードからランダムアクセスできない
どんな言語で書いてもO(1)でランダムアクセスできないのでRustでも同様にO(1)でできないのは当たり前
一般的にランダムでkが与えられた時にリンクリストでk番目を得るにはO(n)かかる
C言語でもO(n)でありO(1)では不可能
> Rustでリンクリストやツリー構造をO(1)でsafeモードからランダムアクセスできない
どんな言語で書いてもO(1)でランダムアクセスできないのでRustでも同様にO(1)でできないのは当たり前
一般的にランダムでkが与えられた時にリンクリストでk番目を得るにはO(n)かかる
C言語でもO(n)でありO(1)では不可能
179デフォルトの名無しさん
2021/11/22(月) 11:08:38.58ID:0RwULqeG >>178
リンクリストとポインタを学び直してから出直せ。
リンクリストとポインタを学び直してから出直せ。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】U-17日本代表、激闘PK戦制す 北朝鮮撃破で6大会ぶり8強入り U17W杯 [久太郎★]
- 「国民の憤りを引き起こした」中国側“高市首相発言の撤回改めて要求” [どどん★]
- 【インバウンド】中国からの“渡航自粛”…ツアー1000人分の直前キャンセル「キャンセル料は免除してくれ」 ことしいっぱいキャンセルに [1ゲットロボ★]
- 【芸能】日中関係悪化でエンタメ業界に大ダメージ… JO1の中国でのイベント中止、邦画は公開延期、STARTOアイドルへの影響も [冬月記者★]
- XやChatGPTで広範囲の通信障害 投稿や閲覧できず [蚤の市★]
- 【サッカー】日本代表、ボリビアに3発快勝 森保監督通算100試合目を飾る…鎌田、町野、中村がゴール [久太郎★]
- Perfume・あ~ちゃんの結婚相手の一般男性、吉田カバンの社長と判明 [977261419]
- 急に真冬かよ!!!⛄❄✨
- 地球から無限km先の場所ってどうなっているの?
- お前らインターネット大規模障害起きてたとき何してた
- 自民党議員「高市は先人が築き上げた日中関係を壊した。外務省が謝罪に言ってるが自分で責任を取れ」 [834922174]
- 日本、高市のお陰で破滅に近づくwwwwwwww
