[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/27 03:27 / Filesize : 361 KB / Number-of Response : 1025
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++ vs Rust



1 名前:デフォルトの名無しさん mailto:sage [2021/04/24(土) 08:04:49.48 ID:nPKzA798.net]
競え

321 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 23:55:11.62 ID:4Q+A1yLL.net]
>>311
参照先自体を削除するんじゃなくて、参照先からさらにnextとかprevたどってどっかのノードを削除するってこと?
参照先自体を削除するのはRustに限らず問題でるよね

322 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 23:58:04.28 ID:7gi7NmEv.net]
>>315
参照先を削除するのは普通なことで、安全に行えるぞ。
参照とは、つまり、識別番号の代わりに使うものだからな。
参照はオブジェクトに付けられた名前みたいなもんだから、
逆に言えば、参照先を削除できないなら、削除する方法がほぼ無い。

323 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:00:50.13 ID:1c3aeddQ.net]
何の話についてもまずは具体的なC言語のコードを示すべきじゃないかな
そうすればRustのコードを2種類みんなが出してくれるよ
 ・1つは元のC言語と同じ安全度で場合によってはunsafeを用いて実装
 ・もう1つはメモリ安全性を保証してunsafeを使わずに実装
つまり「C言語で出来ることはRustで必ず出来る」+「Rustではメモリ安全性を保証した実装も可能」
明らかにC言語よりもRustの方が能力も高く優れている

324 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:00:51.12 ID:16zHq7La.net]
>>314
残り9個の参照はそのノードが削除されたことを知る術がないからダングリングポインタになるってことだろ

325 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:08:02.67 ID:xJBrssBV.net]
>>318
本来は、明らかに別のノードであれば問題ない。
C++では普通に安全にそれが行える。
リンクリストの中に、A, B, C という名前の人のデータが入っていて、
それぞれに対して1つずつそれぞれ、ポインタ pA, pB, pC が存在している時に
ポインタ pA を介してAを削除しても、B, C へのポインタ pB, pC は残っていて、
値も変更されることも絶対に無いから完全に安全。
Aさんのデータを削除する場合にはこのようなことが起きるが、その時には、
delete pA の後、pAを捨ててしまうだけで全く安全。
pB, pC は何事も無くまったく安全に残せるし、何のバグも入らない。
こんな単純なロジック、何の問題も無い。

326 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:15:34.94 ID:8Ju98kPx.net]
同一のノードに10個の参照って意味ちゃうん?

327 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:16:47.17 ID:1c3aeddQ.net]
>>319
それだと>>311の条件を満たしていないのでやり直し
 ・いずれにせよC/C++で書けるコードはそのままの形でそのままの安全度で必ずRustでもunsafeを用いて書ける
 ・更にRustでは安全性を保証する形でunsafeを用いずに実装することもできる
C/C++よりもRustのほうが明白に能力が高い

328 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:20:07.35 ID:xJBrssBV.net]
>>320
1つのリンクリストの異なる10個のノードに対する10個の参照。

329 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:21:41.44 ID:/rTkTwIT.net]
>>319
C++でノードへのポインタは実装依存な方法でしか取れないよ
pAその他は本当にポインタ?イテレータではなく?



330 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:21:54.64 ID:xJBrssBV.net]
>>321
何度もしているが、それはフェイク。
Cできることのうち、Rustでは追加コストを掛けずにはsafeモードで出来ないことはたくさん有る。
unsafeモードを使いまくれば別。
しかしそれではRustを使う意味が無い。

331 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:22:40.62 ID:xJBrssBV.net]
>>323
C++ではなく、Cのリンクリストで考えよう。C++は別の複雑さを入れ込んだから。

332 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:22:46.42 ID:s6k3uLQ1.net]
>>324
なぜRustを使う意味がないのですか

333 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:25:21.42 ID:xJBrssBV.net]
>>326
Rustの売りはゼロコスト+安全性にあるからだよ。
どちらが掛けても意味が無い。
ゼロコストで無いなら既にC#やJavaがある。
安全で無いなら既にC++がある。

334 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:26:18.34 ID:6/+wazXE.net]
ああ、なるほど
安全性を考慮していないCのLinked Listと、安全性が保証されたRustのLinked Listを比較して、
Rustは遅い、できることが少なくて不便だ、みたいなことを述べてたわけか

Cでもメモリリークしないようにして、スレッドセーフにするとかしたら、途端に大変になりそう

335 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:26:36.02 ID:s6k3uLQ1.net]
>>327
違いますよ

336 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:27:06.93 ID:8Ju98kPx.net]
>>324
リンクトリスト内のメソッドでunsafeを閉じ込めることできると思うんだけどそれではだめなのか

337 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:28:01.20 ID:8Ju98kPx.net]
なんなら>>330は「基本的な操作のメソッドは」ってしてもいいけど

338 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:31:19.33 ID:xJBrssBV.net]
>>330
複数のノードへの読み書き自由なアクセスの速度をO(1)を保ったままで、
RustではunsafeをLinkedListのメソッド内には閉じ込めることが基本的に
出来ない。基本的に、と言ったのは、先ほど彼が示したリンク先の独自
実装の様に、ゼロコストであることを諦めてコストを掛ければできる
ようになるから。ただし、その場合、スパイク的にO(N)の時間でコピー
動作が発生してしまう。

339 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:32:59.52 ID:xJBrssBV.net]
>>332
[補足]
スパイク的なコピーの発生だけでなく、普段からコスト増加もある。
ベースアドレス + 相対アドレスでアクセスするから。



340 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:38:03.01 ID:1c3aeddQ.net]
>>262
その人が作ったLinkedList実装がポインタではなく格納配列のインデックスを使っているだけだよ
Rustの標準ライブラリのLinkedList実装ではポインタを使っています
std::collections::LinkedList
https://doc.rust-lang.org/std/collections/struct.LinkedList.html

341 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:39:30.31 ID:xJBrssBV.net]
>>334
それは分かってる。
で、標準の方は、ノードのアクセス速度に問題がある。

342 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:43:10.08 ID:qrGqDm2c.net]
>>335
RustはLinkedListでも問題を感じたことがないですが何を根拠に?

343 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 00:49:14.22 ID:xJBrssBV.net]
>>336
1つのリンクリストの異なる10個のノードに対する10個のmut参照を同時
に持ち事は出来ないので、O(1)でアクセスできないからだ。

344 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 01:04:38.76 ID:qrGqDm2c.net]
>>337
意味がわからないので具体的に意味のあるCコードを書いて

345 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 01:08:49.01 ID:8Ju98kPx.net]
Rustだと確かに複数個所のノードへの可変参照を得るのはunsafeメソッドになるだろうね
そのノードが全部別々であることが保証できないから
でもそれは他の言語でも同じで、例えば1のノードに複数の可変参照があって、
1の参照がノード消したらまずことになる

そしてunsafeを許すのなら、内部実装でUnsafe Cell使えばコンパイラからの見た目は不変参照になるから、
オーバーヘッドなしでそういうのは実装可能(ただしstdのLinkedListはそのようにはなっていない)

んで、複数個所のノードへの可変参照を得るというのは相当レアな操作なはずなので、
それはunsafeにしてもAPIの使い勝手としては全然問題はない

346 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 01:37:22.61 ID:1c3aeddQ.net]
あるC/C++コードがあった時
(A) 常にRustではC/C++コードと同じ安全度で(必要時はunsafeを用いて)実装できる
(B) ほとんどのケースでRustでは安全なコードを(unsafeを用いずに)実装できる

つまりRustの能力はC/C++を上回っている

言い換えると
C/C++を捨ててRustを使えば
(B) ほとんどのケースで安全性を保証する形で実装できる
(A) 残りのレアケースでもC/C++と同じ安全度で実装できる

したがってC/C++を用いずにRustを用いたほうがよい

347 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 05:32:01.67 ID:RKGfozTd.net]
安全性よりも、
とにかくパフォーマンスや使用リソースが最重要な用途がある
そういう所でC/C++が使われる

C/C++は少なくとも今後20年は使われ続ける

348 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 05:47:19.80 ID:qrGqDm2c.net]
>>341
RustはC/C++と同じパフォーマンスを出せます
>>340を読みましょ
C/C++からRustへ移ったほうが誰の目にも得です

349 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 07:27:06.42 ID:RKGfozTd.net]
本当に良いことばかりなら
ここで宣伝しなくても自然に広まるはず



350 名前:デフォルトの名無しさん [2021/11/23(火) 13:48:55.03 ID:VKZug2mU.net]
いや、あわしろ氏もC++は窓から投げ捨てろと言ってる。

351 名前:ハノン mailto:sage [2021/11/23(火) 14:00:24.39 ID:A++o7U7T.net]
>>344
その、あわしろ氏とやらは、では、なにを推薦しているのでしょうか?

352 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 14:20:23.73 ID:BTZW3nye.net]
ほんとRust気持ち悪いなw
リンクリストのような単純な構造でSTLでもboostでもそれ自体が「安全でない」ことはめったにない。
バグや脆弱性を作りこんでしまうのは多くは固定長のバッファに対するパース処理などで、確かに各種の
*nixコマンドなんかはRustで書いて貰ったほうが良い場合があるが、C/C++の数msが致命となる世界で
Rustが一般的となることはない。そんな布教をやってるから嫌われるんだよw
悔しかったらOpenSSLとか書き直して”安全なコード”で出してみろよ?WebkitにC/C++を排除させて
Rustだけにさせてみろw

353 名前:デフォルトの名無しさん [2021/11/23(火) 14:29:53.22 ID:VKZug2mU.net]
いまさらC++やってるようでは時代についていけない老害という評価しかない。

354 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 14:45:56.12 ID:CrSl9z1L.net]
Linusも老害だしChromeコミッターも全部老害、気持ち悪さNo1のRustたちが敵を作りまくる自己評価で
あらゆるスレで暴れてる

355 名前:ハノン mailto:sage [2021/11/23(火) 14:49:30.08 ID:A++o7U7T.net]
>>348
linus を老害呼ばわりするとは…

356 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 14:56:32.81 ID:s6k3uLQ1.net]
>>346
usじゃなくてmsなのか...

357 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 14:57:43.30 ID:2khltGI7.net]
twitterでも、RustはHaskell程度にしか発言されて無い。
一方、C 言語 で検索すると一日分でも見ることが不可能なくらい大量に
発言されてることが分かる。
twitterでは「C++」というキーワードでは検索できないので推定するしかないが、
C 言語以上であろう。

358 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 15:54:02.42 ID:hMtNqdGd.net]
>>340
>つまりRustの能力はC/C++を上回っている
ダウト。
安全面に置いては上回っているが、効率面では下がるケースがかなりある。

359 名前:デフォルトの名無しさん [2021/11/23(火) 16:13:02.54 ID:hMtNqdGd.net]
・速度を落として安全性を高めたものは、既にJavaやC#がある。
・Rustが仮に速度面ではCに比べて余り遅くならないケースが多いと
 仮定しても(この仮定には嘘があるのだが)、使いこなすのがJavaやC#
 に比べると難しい。

特に参照関連だけでも、Option, Box, Rc, Arc, Cell, RefCell, Cursor, ref, &
の理解が必要な他、mut &'a などの表記、
let mut a : mut &:T = mut& b

Option<Rc<RefCell<T>>> a;
new Box<T>( T {・・・} );
のような解読が難しいシンタックスも多い。
このような複雑な表記は、JavaやC#には存在しない。

また、& と * の違いもあれば、& と ref の違いも有る。
let文ですらパターンマッチング方式になっているので Cのポインタの 10倍理解が難しい。

つまり、普通IQ者には理解が難しい。
逆に高IQ者は、C++でも安全に使えるし、C++を安全面では余り問題を感じて無い人が多い。



360 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 16:19:09.75 ID:hMtNqdGd.net]
>>353
さらに言えば、
・「自動参照外し」は便利だとされるが、逆に勝手に参照が外れることで、
 他人の書いたコードの理解が難しいことがある。明記してるコードと
 省略してるコードが同じことを意味してるのが理解しにくいので。
・&の意味が、let文の左辺ではパターンマッチング、右辺では参照、
 の意味になっているので混乱しやすい。左辺では参照をはずす意味
 になってしまう。
・&は、reference(参照)演算子と呼ばれるのに、ref という演算子もあるが、
 これは、意味がかなり違うため、混乱し易い。
・nullポインタを代入するポインタは、Option<Box<T>> のように長くなる。
・ライフタイム注釈が発展途上中なのか、特に構造体に関するライフタイム注釈
 のドキュメントが少なく、例で説明されるだけで、根本的な意味を書いた
 ドキュメントが存在して無い。

361 名前:ハノン mailto:sage [2021/11/23(火) 16:26:18.07 ID:A++o7U7T.net]
>>353
IQの定義は?

362 名前:デフォルトの名無しさん [2021/11/23(火) 18:18:27.96 ID:VKZug2mU.net]
LinuxはRustを第二言語と位置づけ、カーネル開発に積極利用する計画です。

363 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 18:21:55.09 ID:1c3aeddQ.net]
C/C++/Rustをやってきた人ならRustが圧倒的にプログラミングしやすいことで一致している
調査結果でもRustが連続1位を続けていることからも客観的に明白

364 名前:デフォルトの名無しさん [2021/11/23(火) 18:23:28.79 ID:VKZug2mU.net]
あわしろ氏もC++は終了する言語と言っています。

365 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 19:08:31.54 ID:s6k3uLQ1.net]
>>353
例示してるシンタックス全部間違ってるし釣りだろこれ

366 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 19:22:32.43 ID:4h9SSBVx.net]
>Rustが圧倒的にプログラミングしやすい
うんこ嘘つき野郎

367 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 19:25:27.46 ID:1ymEsXZx.net]
>>359
let mut a : mut &T = mut& b
Box<T>::new( T {・・・} );
だったかも知れんな。
複雑すぎるし、C++との違いが大きすぎて覚えてない。
C++ だと、new クラス名で、Rubyだと確か、クラス名.new。
Rustは、後者に近い書き方だから、書き方だけを見てもRustはC++とはやはり遠い。

368 名前:デフォルトの名無しさん [2021/11/23(火) 19:43:48.41 ID:VKZug2mU.net]
RustはRubyの影響を受けた言語。
大変使いやすい。

369 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 19:51:13.12 ID:1ymEsXZx.net]
>>362
いくつか本を読んだが、スクリプト言語的な範囲で使うならばそうかも知れん。
しかし、C++やCのようにポインタを駆使したリンクリストやツリー構造の様な
ものを効率よく高速に、メモリーも節約しながら扱うには、Rustはとても
複雑になる。訳の分からんCell,RefCellなどと組み合わせる必要があることも多い。



370 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 19:53:12.58 ID:/rTkTwIT.net]
訳が分かってから文句垂れてください

371 名前:デフォルトの名無しさん [2021/11/23(火) 19:59:41.90 ID:VKZug2mU.net]
いまどきC++使ってるのは老害でしょう。
すぐにRustを始めるべきです。

372 名前:ハノン mailto:sage [2021/11/23(火) 20:09:04.33 ID:A++o7U7T.net]
あわしろ氏って、もしかして馬鹿ぁ?

373 名前:デフォルトの名無しさん [2021/11/23(火) 21:01:08.57 ID:VKZug2mU.net]
低能が何か申しておりますw

374 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 21:24:52.33 ID:dif3t6ob.net]
>>364
俺は調査目的で調べてるだけで、実用的に使うつもりはないからな。

375 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 22:01:53.34 ID:qrGqDm2c.net]
>>368
たまに見かける使いこなせなくて脱落したケース?

376 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 22:12:56.79 ID:WEl5Ae/m.net]
あわしろって誰?調べても出てこない

377 名前:デフォルトの名無しさん mailto:sage [2021/11/23(火) 23:01:49.38 ID:dif3t6ob.net]
>>369
使う必要性を感じない。

378 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 07:30:28.98 ID:bRL60DLP.net]
>>368
であれば、批判する資格はないな

379 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 10:47:07.21 ID:vbixrgR4.net]
>>372
有る。



380 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 10:49:35.25 ID:kXzWnsgO.net]
仮に泡白という人物が実在したとしても
ここで連呼されるのは本人も迷惑してるんじゃないかな

381 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 11:15:10.51 ID:vbixrgR4.net]
Ubuntu Linuxや OpenOffice系の洋書の翻訳家に、
「あわしろいくや」という人物がいるようだ。

382 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 11:21:34.63 ID:RpLLJ5lb.net]
しかもRustやC++の専門家のようには見えんけども…

383 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 17:09:21.00 ID:5wn/1hS5.net]
>>373
CとRustそれぞれでコードを書いてみることをおすすめします
計算量オーダーが変わるアルゴリズムレベルの検討ならともかく
コンパイラの最適化でいくらでも性能が変わりうる実装の詳細についてはまず性能測定するのが常識だと思います

384 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 17:29:56.67 ID:mlqzRK ]
[ここ壊れてます]

385 名前:jQ.net mailto: リンクリストで頑張るより配列のほうが色々捗る場面も多々あるよな
キャッシュが効いてるとこ読むときの速度は目を見張るもんがある
ヒープで飛び飛びになったデータ構造はその点で恐ろしく不利
それを知ってる人は実測した結果で語る
[]
[ここ壊れてます]

386 名前:デフォルトの名無しさん [2021/11/24(水) 19:53:47.71 ID:6QwWetEE.net]
21世紀にもなってC++使ってるのは頭がおかしい。

387 名前:デフォルトの名無しさん [2021/11/24(水) 19:54:39.96 ID:6QwWetEE.net]
Linusは20世紀の頃からC++は駄目だと言ってた。
天才。

388 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 22:30:18.26 ID:Vyl+UaHe.net]
Rustは言語が汚い。

389 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 22:43:39.16 ID:RtLWv5R+.net]
linusのc++否定ってのは当時の実装のバギーさとオブジェクト指向に対する否定だな。
関数型流行ってる今から見ると割と普通のこと言っとるわ。



390 名前:デフォルトの名無しさん mailto:sage [2021/11/24(水) 23:59:24.30 ID:e1u6MioL.net]
>>381
むしろ綺麗な方

391 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 01:15:43.82 ID:/vPuyV+m.net]
>>381
言語が汚いってのはよくわからないけど例えばどういうところが汚いと感じたの?

392 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 01:47:48.10 ID:pEcDGUra.net]
でもLinkedList版sliceみたいなのって実現できないのかね

393 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 02:58:46.76 ID:6PNOZvLH.net]
ここまでのまとめ
(1) ほとんどの用途でLinkedListよりVecの方が有用
(2) Rustの標準ライブラリにはLinkedList型もVec型もどちらもある
(3) もしLinkedListやVecを使っても実現できないならまずはそのRustコードを示すべき
(4) 仮に超レアケースがあったとしてもRustでは自分で自由に必要な型を作ればよい

394 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 07:50:48.33 ID:3Rcu7yrD.net]
>>381
アセンブラとチューリングマシン語以外の言語は汚い

395 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 09:50:29.78 ID:r5Heuy4P.net]
LLVM最強ですね判ります

396 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 16:04:22.18 ID:S6TYxgmH.net]
>>386
嘘を書くな。

397 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 16:33:56.78 ID:sK32tKJd.net]
>>389
特に嘘はないと思うけど
stdのLinkedListがちょっと融通利かないところはあるけど

398 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 16:34:58.88 ID:ug4Dh0aR.net]
>>386
様々な言語の中でRustだけ linked list の任意の要素にO(1)でアクセスできないというのは嘘だった
も追加で

399 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 20:15:57.40 ID:SwFLZgNz.net]
macro記述と言語がまるで別言語、いちいちウザいアトリビュート。letは固定を意味するのではなく式展開
何種類もある「文字列」、それに生えている似たようで意味が違ういっぱいのfn(これはトレイトのせい)
わざと敷居を高くしてるとしか思えん



400 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 20:31:51.42 ID:6PNOZvLH.net]
>>392
> letは固定を意味するのではなく式展開

letは常に成功する構造パターンマッチングにすぎないよ
if letは成功か失敗か不明な構造パターンマッチング
今どきの言語ならば左辺値にパターンが書けるのが普通

> 何種類もある「文字列」

文字列はヒープにあり伸縮可能なStringとそうでないstrの2種類しかないよ
ヒープを意識する言語なら2種類ある
あとは文字列の参照として&strがあってその本体はヒープにあろうがなかろうが同じ扱いできるだけ

401 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 20:38:50.41 ID:pEcDGUra.net]
CString
CStr
OsString
OsStr

402 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 20:58:33.97 ID:88pS2ZzI.net]
>>394
それはRustの文字列ではなく単なるFFI
通常のプログラミングでは登場しない

403 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 21:05:41.06 ID:NJM+Y62L.net]
>>391
「任意の」
の定義をしないと無意味な主張

404 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 21:16:25.34 ID:vljrMlfk.net]
じゃあ何種類もあるじゃない、全部が汚いことへの言い訳にしか聞こえない

405 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 21:25:33.18 ID:88pS2ZzI.net]
まとめ
・どの言語でもリンクリストでk番目を得るにはO(n)かかる
・そのk番目を配列で持てばO(1)だがそれはリンクリストではなく配列アクセスのコスト
・リンクリストのk番目を保持する配列を維持するには削除挿入のたびにO(n)の移動が生じる
・これらは言語に依存しない

406 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 21:33:37.11 ID:/vPuyV+m.net]
>>397
言語の汚さというよりもOSなどの環境が抱える複雑さをそのまま見せたらそうなったのでは

407 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 21:38:29.78 ID:beDf3C1p.net]
それが低いレイヤーをやるってことだわな。
それを他の言語のせいにするrust野郎はクソってことだよ。

408 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 22:13:10.27 ID:88pS2ZzI.net]
誤解している人が居るようなので正しい情報
・Rustの通常のプログラミングでCStrやOsStrが出てくることはない
・そこでファイルやディレクトリやソケットを操作してもCStrやOsStrは出てこない
・つまりRustで使う文字列はstrとヒープのStringの2種類しかない
・CStrやOsStrはFFIを書く人のみが用いるのでほとんどの人には無縁

409 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 22:18:29.72 ID:3Rcu7yrD.net]
「通常」の定義は?



410 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 22:30:32.62 ID:6PNOZvLH.net]
>>402
Rustで未だ対応していない未知のものが出現した時にその対応する人だけがCStrやOsStrを用いる
その時のその人を除き、全ての人はCStrやOsStrなんか知らなくてもRustでプログラミング可能

411 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 23:14:44.56 ID:/vPuyV+m.net]
>>401
Pathの操作してるとOsStrは普通に出てくるのでFFIでしか出てこないというのは嘘

412 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 23:16:52.42 ID:/vPuyV+m.net]
他の言語がごまかしている箇所を正確に扱えるのがrustの強みでもありめんどくさいところでもある

413 名前:デフォルトの名無しさん mailto:sage [2021/11/25(木) 23:45:28.39 ID:sK32tKJd.net]
Rust擁護マンでも標準の文字列(String/str)以外がFFIのみというのはさすがに筋悪に見える
Rustで標準の文字列をUTF8のバイト配列(ヌル文字終端不採用)としたことによる弊害って側面が割と強い
でも他言語みたいにそこしっかりしないとなるとそれはそれでめんどくさいから結局のところトレードオフ

でもOsStrめんどいわ

414 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 00:54:57.87 ID:Ye0bskEh.net]
文字列エンコードを規定しないとそれはそれで移植性に問題あるし難しいところ
WTF-8なる概念必要になったりとにかくWindowsが悪いという気はする

415 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 03:23:02.14 ID:FqYYA0QW.net]
>>391
嘘を書くな。
正しくは、Rustは配列を使って独自実装しないとO(1)には出来無い事が明らかに成った。
参照だと借用規則で出来なくて、配列の添え字番号だと単なる整数なので借用規則の
適用範囲外だからできる。添え字番号をポインタの代わりに使って、独自に
リンクトリストを実装することで初めて、O(1)になる。
しかし、O(1)になっても、「係数」が大きくなり、1アクセスに20クロックくらいかかる。
配列の範囲チェックと、配列アクセスのための乗算と加算が追加で必要になるため。

一方、C、C++、C#、Javaではそんなことしなくても最初からO(1)。

416 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 03:24:19.18 ID:FqYYA0QW.net]
>>398
お前みたいなやつは、一度殴ってやりたい。
匿名掲示板だからと言って、でたらめを書くな!!
ばか者!

417 名前:ハノン mailto:sage [2021/11/26(金) 03:25:10.11 ID:xSrpn+m5.net]
>>408
C/C++ のリンクリストがどうして O(1) なんですか?

418 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 03:33:50.05 ID:FqYYA0QW.net]
>>398は、数学できない。
細かい点が全然分かって無い。
リンクリストでは、「k番目にアクセスする」と言っても、次の二種類ある。
1. (乱数などで)整数 k

419 名前:を与えられて、ノードを探す。
 この場合、どうしても、O(N)、O(k)の時間がかかる。
2. 既に追加したノードを、もう一度アクセスする。
 これには、C、C++、C#、Javは、O(1)しかかからない。
 しかも、C、C++だと 1 クロック。
 Rustだと配列と添え字番号を使って独自実装しなければ、
 基本的にO(N)、O(k)かかる。独自実装した場合、
 O(1)ではあるが、20〜50クロックくくらいかかる。
 
[]
[ここ壊れてます]



420 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 03:34:37.06 ID:FqYYA0QW.net]
>>410
>>411を読め。
俺は正直に言っている。また、数学が昔から良くできるので、間違ってない。

421 名前:デフォルトの名無しさん mailto:sage [2021/11/26(金) 03:40:28.33 ID:FqYYA0QW.net]
>>411
[補足]
実際、>>257 の独自実装は、Rustでも、任意の場所のノードをO(1)で
アクセスできるが、1アクセスあたりに一般的なノードサイズでは
20〜50クロック掛かる。

悪いが、QZが出てくると話がややこしくなる。
かわいそうだが、単刀直入にいえば、QZは頭が良くないので、
レベルが全体に下がってしまう。
ようは、レベルが違う人は、教室を分けないとめちゃくちゃに成る。
レベルというのは熟練しているかどうかではなく、生まれつき決まっていて、
直すことが出来ない。
すまん。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<361KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef