Mozilla発のRust言語のスレ
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
Web上の実行環境
https://play.rust-lang.org
前スレ
Rust part8
https://mevius.5ch.net/test/read.cgi/tech/1579834072/
探検
Rust part9
レス数が1000を超えています。これ以上書き込みはできません。
2020/08/23(日) 01:07:35.52ID:MgEpWwVh
2020/08/23(日) 10:31:18.31ID:WHl934bN
Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
https://doc.rust-lang.org/book/
2020/08/23(日) 12:12:13.82ID:vopEnHQM
いちおつ
2020/08/23(日) 13:15:25.53ID:jbA8Vxfm
最近は初学者向けの文書も充実してきてるね
Tour of Rust
https://tourofrust.com
Rust explained using easy English
https://github.com/Dhghomon/easy_rust
Tour of Rust
https://tourofrust.com
Rust explained using easy English
https://github.com/Dhghomon/easy_rust
2020/08/23(日) 15:24:56.55ID:dfu3xBf1
2020/08/24(月) 02:54:03.17ID:ko9AntT7
日本語でおけ
7デフォルトの名無しさん
2020/08/24(月) 03:09:08.38ID:gAClNVkQ web_sys使って意図的にHTML食わせてDOM操作とかしたいんだけどこれって出来ない?
https://docs.rs/web-sys/0.3.44/web_sys/
https://docs.rs/web-sys/0.3.44/web_sys/
2020/08/25(火) 22:04:20.93ID:cBDpP6RF
>>7
rustからDOM叩くのはバインディングさえ用意すれば出来るけど"意図的にHTML食わせて"の意味がわからん。
rustからDOM叩くのはバインディングさえ用意すれば出来るけど"意図的にHTML食わせて"の意味がわからん。
9デフォルトの名無しさん
2020/08/26(水) 09:25:11.81ID:zXQp5MBn >>8
HTMLのテキストをDocument::from(&html_text)みたいに読ませて、そこからDOM操作してDOMのvalueとかattrとか読みたい。
他のHTMLパーサーは規格がバラバラだからweb_sys使いたい
HTMLのテキストをDocument::from(&html_text)みたいに読ませて、そこからDOM操作してDOMのvalueとかattrとか読みたい。
他のHTMLパーサーは規格がバラバラだからweb_sys使いたい
2020/08/26(水) 09:37:17.33ID:4U25QJJo
2020/08/26(水) 10:49:33.15ID:goOahd89
12デフォルトの名無しさん
2020/08/26(水) 14:28:06.12ID:zXQp5MBn easy-scraperは個人的に仕様がダサいと思う
>>11
web_sysのドキュメント見たら分かるけど、APIがかなり豊富でMDN遵守してるし、wasmにも移管できる。
その三つは楽だけどそれ以外はweb_sysの方が良いから
>>11
web_sysのドキュメント見たら分かるけど、APIがかなり豊富でMDN遵守してるし、wasmにも移管できる。
その三つは楽だけどそれ以外はweb_sysの方が良いから
2020/08/26(水) 15:34:22.88ID:goOahd89
>>12
wasmにも移管できるって、web-sysはwasm前提だと思うんだけどwasm以外で使えるの?
wasmにも移管できるって、web-sysはwasm前提だと思うんだけどwasm以外で使えるの?
2020/08/26(水) 17:13:59.22ID:Yn/rXsvn
>>12
ダサいといえばダサいんだが、綺麗さより楽さを取ったデザインって感じの話が作者のブログに書いてあったよ。
ダサいといえばダサいんだが、綺麗さより楽さを取ったデザインって感じの話が作者のブログに書いてあったよ。
2020/08/26(水) 21:28:36.70ID:mE3MiLfN
>>9
whatwg DOMにDOM Level3 Load & Saveがないから今のDOMで外部ファイルのパースはできない。
適当なAPIでファイル読んでwasmにコンパイルした他のDOM Level3実装に食わせればいい。
rustで書かれたDOM Level3実装が見当たらないから他言語になるかな。
whatwgのDOMはesからhtml操作する以外は考えてないから、そういう事したいなら他でやるしかないね。
whatwg DOMにDOM Level3 Load & Saveがないから今のDOMで外部ファイルのパースはできない。
適当なAPIでファイル読んでwasmにコンパイルした他のDOM Level3実装に食わせればいい。
rustで書かれたDOM Level3実装が見当たらないから他言語になるかな。
whatwgのDOMはesからhtml操作する以外は考えてないから、そういう事したいなら他でやるしかないね。
16デフォルトの名無しさん
2020/08/26(水) 22:06:03.86ID:JjGrRnat 綺麗に作れないから自分が楽な設計をしたというだけ
アラフォープログラマにありがちな言い訳
アラフォープログラマにありがちな言い訳
2020/08/27(木) 02:24:33.81ID:yLQzP5wb
無能の僻みかな
2020/08/27(木) 03:10:08.73ID:MrnqDky1
19デフォルトの名無しさん
2020/08/27(木) 04:23:21.10ID:FQ07KrIG20デフォルトの名無しさん
2020/08/27(木) 08:43:15.31ID:bHW4ZDaj >>18
そう主張してるが本人が楽なだけ
そう主張してるが本人が楽なだけ
2020/08/28(金) 01:00:10.14ID:LEZPXhgF
easy-scraperのブログみて試しにkuchikiでやってみたけどドキュメントがなさすぎてkichikuだった
次はscraperにする
次はscraperにする
2020/08/28(金) 10:56:42.59ID:kaNWPz+d
今月の新機能 Option::zip の使いどころが分からない
こんなの要らないだろ
https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.zip
こんなの要らないだろ
https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.zip
23デフォルトの名無しさん
2020/08/28(金) 15:11:57.10ID:AUb/6LnR 使うならOption版の論理演算とかかな
2020/08/28(金) 23:01:39.34ID:LEZPXhgF
the bookの分かりやすい更新履歴みたいのってある?
1度読み終わって以降に新しく追加された章や節がないかを確認したいんだけど
githubのcommitログ眺めていく以外の現実的な方法が見つからなくて困ってる
1度読み終わって以降に新しく追加された章や節がないかを確認したいんだけど
githubのcommitログ眺めていく以外の現実的な方法が見つからなくて困ってる
2020/08/29(土) 00:41:53.30ID:JtEdK3mn
>>22
cons cellにしてからflatするの面倒くさい。
俺はvec::Drainをas_sliceする用途がよくわからん。ただの変換用だろうか。
こっちの互換性残ってよかった。
ttps://github.com/rust-lang/rust/pull/74150/
cons cellにしてからflatするの面倒くさい。
俺はvec::Drainをas_sliceする用途がよくわからん。ただの変換用だろうか。
こっちの互換性残ってよかった。
ttps://github.com/rust-lang/rust/pull/74150/
2020/08/29(土) 17:57:40.88ID:6ekcNRq6
anyhowとthiserror 初めて知ったわ
std::Errorが便利になるまではこれ使っとけばよさそうだね
std::Errorが便利になるまではこれ使っとけばよさそうだね
2020/08/29(土) 22:59:59.85ID:CxDsroMX
とっくにfailureのフィードバック終わってるけど、ver古くない?
2020/08/29(土) 23:02:55.48ID:MYuD75tc
結局今は何使うべきなの?
std::Error? failure? anyhow?
std::Error? failure? anyhow?
2020/08/30(日) 03:03:14.91ID:A+BfCyCQ
@rustlangって日本語のRTもするのか
機械翻訳で読んだのかな
機械翻訳で読んだのかな
30デフォルトの名無しさん
2020/08/30(日) 11:07:07.53ID:YXE1VqL6 いつになったらベンチマークStableにすんだよな
2020/08/30(日) 18:03:13.46ID:nkt3Z4R5
ベアメタル用のコードを-C opt-level=0でコンパイルして乗算のオーバーフローチェック等のpanic機構って使用できる?
アセンブラリストを出力すると存在しないラベルの分岐命令が出力されるんだが正常な動作なのか・・・
アセンブラリストを出力すると存在しないラベルの分岐命令が出力されるんだが正常な動作なのか・・・
3231
2020/08/30(日) 18:53:07.92ID:nkt3Z4R5 例えばこんな感じ
ttps://uploader.purinka.work/src/17641.png
callqの行き先が不明
ttps://uploader.purinka.work/src/17641.png
callqの行き先が不明
2020/08/30(日) 19:51:29.80ID:03fMpyFE
--emit asmってlibcoreとリンクしたもの吐くの?
リンクされてないだけでここ呼んでるだけな気がする
https://github.com/rust-lang/rust/blob/1.46.0/src/libcore/panicking.rs#L39
リンクされてないだけでここ呼んでるだけな気がする
https://github.com/rust-lang/rust/blob/1.46.0/src/libcore/panicking.rs#L39
2020/08/30(日) 22:35:01.08ID:vWRii7PY
3531
2020/08/30(日) 23:57:14.44ID:mEmNBl/k36デフォルトの名無しさん
2020/08/31(月) 08:19:34.04ID:DTQYV4xt ターミナル上で色つけるのとテキストポジションを決めたいだけの簡単なTUIアプリ作りたいんだけど、有名なTUIクレートが多くて迷ってます。
適切なクレートが何か分かる方教えてください。
適切なクレートが何か分かる方教えてください。
2020/08/31(月) 10:44:07.07ID:8VYSRGWn
複雑なことしないなら termion
なんてどう?
なんてどう?
38デフォルトの名無しさん
2020/08/31(月) 20:17:03.77ID:DTQYV4xt >>37
ありがとうございます。一度見てみます。
ありがとうございます。一度見てみます。
2020/08/31(月) 22:50:36.76ID:hNA5PDaQ
>>35
英語読めないって話?
>A behavior can be chosen by declaring a #[panic_handler] function. This function must appear exactly once in the dependency graph of a program, and must have the following signature: fn(&PanicInfo) -> !, where PanicInfo is a struct containing information about the location of the panic.
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior but there are plenty of commonly used behaviors. These common behaviors have been packaged into crates that define the #[panic_handler] function. Some examples include:
英語読めないって話?
>A behavior can be chosen by declaring a #[panic_handler] function. This function must appear exactly once in the dependency graph of a program, and must have the following signature: fn(&PanicInfo) -> !, where PanicInfo is a struct containing information about the location of the panic.
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior but there are plenty of commonly used behaviors. These common behaviors have been packaged into crates that define the #[panic_handler] function. Some examples include:
40デフォルトの名無しさん
2020/09/01(火) 00:12:49.85ID:OUJLkiQD MirakurunクローンのmirakcってRustでかかれてるのか
ソースちょっとのぞいてみたけどサッパリだった
ソースちょっとのぞいてみたけどサッパリだった
41デフォルトの名無しさん
2020/09/01(火) 00:14:06.84ID:pQTVtNeX よく作れるよなあ
2020/09/01(火) 00:23:01.46ID:TpxWZL4k
>>35
記述例が見たいならそこからリンクされてるpanicハンドラクレートのソースを見ればいい。
例えばこれとか。
https://github.com/japaric/panic-abort/blob/master/src/lib.rs
記述例が見たいならそこからリンクされてるpanicハンドラクレートのソースを見ればいい。
例えばこれとか。
https://github.com/japaric/panic-abort/blob/master/src/lib.rs
2020/09/02(水) 00:14:27.98ID:I/VQ/2li
>>42
そうじゃなくて
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior
の意味がわからないんだろう。ベアメタルで人の書いたpanic handlerの中身なんて読んでも意味ないし。
そうじゃなくて
>Given that embedded systems range from user facing to safety critical (cannot crash) there's no one size fits all panicking behavior
の意味がわからないんだろう。ベアメタルで人の書いたpanic handlerの中身なんて読んでも意味ないし。
4431
2020/09/02(水) 08:06:57.73ID:s4/GEX112020/09/03(木) 00:54:39.65ID:d+ZpNCKo
Supporting Linux kernel development in Rust
https://lwn.net/SubscriberLink/829858/281103f9c6fd0dc2/
https://lwn.net/SubscriberLink/829858/281103f9c6fd0dc2/
46デフォルトの名無しさん
2020/09/03(木) 13:59:41.08ID:knKXFRQt お前らの考えとしてぶっちゃけどうよ?
今後10年でc/c++を凌駕する存在になり得るのかRustは
今後10年でc/c++を凌駕する存在になり得るのかRustは
47デフォルトの名無しさん
2020/09/03(木) 14:09:27.73ID:1kMF5+E3 10年もありゃRustベースのもっといいやつが出てきそう
48デフォルトの名無しさん
2020/09/03(木) 14:28:37.24ID:DK3Ul6vK Dはもう20年になるのか胸熱
2020/09/03(木) 14:49:09.48ID:p5IeVBH6
C++ 30よりは普及するんじゃないか。
(30とかどんな魔境になってるんだろうか…)
(30とかどんな魔境になってるんだろうか…)
2020/09/03(木) 16:20:07.25ID:Tou2TpEC
Rust++もそこそこの魔境になるから大丈夫
2020/09/03(木) 16:22:17.40ID:Tou2TpEC
折角Edition分けしてんだし、一部後方互換性をバッサリ捨てて冗長な表現を纏めて++回避したら流行りそう
なおロードマップ見渡してもその予定は一切御座いません(笑)
なおロードマップ見渡してもその予定は一切御座いません(笑)
2020/09/03(木) 21:15:25.18ID:303ndmJQ
Rustって未だにセルフホストできていない事に驚いた
標準添付のライブラリのビルドを試みたら
>error[E0554]: `#![feature]` may not be used on the stable release channel
等が大量に吐かれたw 要nightlyかよ
標準添付のライブラリのビルドを試みたら
>error[E0554]: `#![feature]` may not be used on the stable release channel
等が大量に吐かれたw 要nightlyかよ
2020/09/03(木) 22:16:06.69ID:ciEvly1U
2020/09/04(金) 08:11:24.22ID:19D8+X78
rustc: 1.48.0-nightly (130359cb0 2020-09-01)
src: 1.46.0
でもダメだった
>>53
丸ごとビルドしたい訳じゃなくて一部だけビルドしたい
ttps://qiita.com/kotetuco/items/54af67d5663013ad0db7#rust-core-library%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B
こんな感じ。実際にはコンパイルオプションを調整したいけど
コンパイルできる組み合わせを探すしかないのか?stableとnightlyじゃコードツリーのディレクトリ構造からして違う有様だしなぁ
src: 1.46.0
でもダメだった
>>53
丸ごとビルドしたい訳じゃなくて一部だけビルドしたい
ttps://qiita.com/kotetuco/items/54af67d5663013ad0db7#rust-core-library%E3%82%92%E7%94%A8%E6%84%8F%E3%81%99%E3%82%8B
こんな感じ。実際にはコンパイルオプションを調整したいけど
コンパイルできる組み合わせを探すしかないのか?stableとnightlyじゃコードツリーのディレクトリ構造からして違う有様だしなぁ
2020/09/04(金) 10:04:14.14ID:8dK8t4gI
>>54
coreだけでもビルドできるが…。さすがに開発中に毎回bootstrapするわけない。
https://rustc-dev-guide.rust-lang.org/building/how-to-build-and-run.html#build-specific-components
自己流で試行錯誤するよりまず公式通りにやってからカスタマイズする方がいいのでは。
coreだけでもビルドできるが…。さすがに開発中に毎回bootstrapするわけない。
https://rustc-dev-guide.rust-lang.org/building/how-to-build-and-run.html#build-specific-components
自己流で試行錯誤するよりまず公式通りにやってからカスタマイズする方がいいのでは。
2020/09/04(金) 15:34:10.06ID:7Uip4zIA
>>55
thx。それを実行するにあたって最低限必要な物ってなんだろ。書いていないような・・・
Pythonとbetaなコンパイラが必要そうっぽい事は判るけど
というかコンパイラも含めたビルドは出来るだけ避けたい
環境(Windows)やマシン(2Core/8GB)のリソース的に成功するか判らないし失敗した場合の
トラブルシュートも難しい
あとそのコマンドはnightly?beta?限定のような。1.46.0 stableのコードツリーだとディレクトリ名が違う
thx。それを実行するにあたって最低限必要な物ってなんだろ。書いていないような・・・
Pythonとbetaなコンパイラが必要そうっぽい事は判るけど
というかコンパイラも含めたビルドは出来るだけ避けたい
環境(Windows)やマシン(2Core/8GB)のリソース的に成功するか判らないし失敗した場合の
トラブルシュートも難しい
あとそのコマンドはnightly?beta?限定のような。1.46.0 stableのコードツリーだとディレクトリ名が違う
57デフォルトの名無しさん
2020/09/04(金) 18:04:10.13ID:REp3w4XA2020/09/04(金) 18:33:08.78ID:GMhQHpfx
>>56
環境構築はREADMEだな。
https://github.com/rust-lang/rust#building-on-windows
ディレクトリはちょうど運悪く先月くらいに構成変わってて、今betaまで反映されてるから次のリリースでstableも同じになる。
とりあえず今のstableなら以下でcoreだけビルドできるはず。
./x.py build --stage 0 src/libcore
コンパイラはx.pyが適切なバージョンを勝手に取ってくるから任せればよい。
環境構築はREADMEだな。
https://github.com/rust-lang/rust#building-on-windows
ディレクトリはちょうど運悪く先月くらいに構成変わってて、今betaまで反映されてるから次のリリースでstableも同じになる。
とりあえず今のstableなら以下でcoreだけビルドできるはず。
./x.py build --stage 0 src/libcore
コンパイラはx.pyが適切なバージョンを勝手に取ってくるから任せればよい。
2020/09/05(土) 10:06:13.78ID:TAeq65PR
2Core/8GBでLLVMビルドするのかなりつらそう
60デフォルトの名無しさん
2020/09/05(土) 13:17:51.96ID:c1warezh forとiterの使い分けってどうしたらいいんだろ
用途?
用途?
2020/09/05(土) 15:05:36.16ID:TAeq65PR
コードが読みやすくなる方を使う
62デフォルトの名無しさん
2020/09/05(土) 21:40:57.16ID:I89Y16zH codewarsをRustで解いてるけどなかなか勉強になる
2020/09/06(日) 00:09:09.42ID:/EPcKLfQ
戦争反対
2020/09/06(日) 00:12:10.28ID:YpEFqLu/
敗戦国に対する差別を助長するとアメリカで主張していこうな!
65デフォルトの名無しさん
2020/09/06(日) 13:05:53.33ID:iYICzO1R Cargo.tomlにrustのバージョン指定する方法ってどうやるっけ?
どこかで見た気がするんだけどcargo reference探してもないから知ってる人いる?
どこかで見た気がするんだけどcargo reference探してもないから知ってる人いる?
2020/09/06(日) 13:33:28.17ID:378cUVT9
2020/09/06(日) 13:50:50.21ID:NTBgE1bF
低レイヤーのアルゴリズム実装てrustは実は向いてないんだよ。
2020/09/06(日) 20:53:31.66ID:q3JWysFz
69デフォルトの名無しさん
2020/09/07(月) 05:35:58.44ID:pQuWqVzw >>68
おお、そうそう。ありがとう
おお、そうそう。ありがとう
70デフォルトの名無しさん
2020/09/08(火) 14:08:21.21ID:VQ4SFraN なんでIteratorの方にはchunksとかwindowsとかないの?
Vecに変換するのめんどくさい
Vecに変換するのめんどくさい
2020/09/08(火) 14:14:25.89ID:D8/F+ExD
stdにない理由はしらんけどItertoolsでできるっしょ
2020/09/08(火) 16:58:13.30ID:Qt4K4jXD
rustのormって何でdieselしかないの?dieselが完成されてるから?それともrustがdb使う用途に使われることが少ないとか?
2020/09/08(火) 18:04:31.50ID:7F3fj5vU
rustに関わらずormって限らられたシーンでしか使えない印象
2020/09/08(火) 20:34:32.20ID:iCuj3PWZ
>>70
任意のimpl Iteratorからスライス作るためにはcollectしてVecを作るなど、比較的重めの処理が必要になる
コストのかかる処理は明示的にやらせるというのがstdのポリシーなので、用意されていないのでは
あと利用者側で .collect::<Vec<_>>() を追加するだけでよくて対処が難しくないのもわざわざstdに追加しようとする人が現れない理由だと思う
任意のimpl Iteratorからスライス作るためにはcollectしてVecを作るなど、比較的重めの処理が必要になる
コストのかかる処理は明示的にやらせるというのがstdのポリシーなので、用意されていないのでは
あと利用者側で .collect::<Vec<_>>() を追加するだけでよくて対処が難しくないのもわざわざstdに追加しようとする人が現れない理由だと思う
75デフォルトの名無しさん
2020/09/09(水) 18:10:37.98ID:8UaafUk3 >>74
コストのかかる処理は ってIteratorにないからコストかかってるのでその理由は成り立たない気がする
個人的にはIteratorとスライスという違う型に同じメソッド名が生えてるのがあれなのかなと思った
コストのかかる処理は ってIteratorにないからコストかかってるのでその理由は成り立たない気がする
個人的にはIteratorとスライスという違う型に同じメソッド名が生えてるのがあれなのかなと思った
76デフォルトの名無しさん
2020/09/09(水) 18:23:13.97ID:8UaafUk3 >>72
Dieselが早いうちに作られて支配的に使われるようになって他の連携クレートもdiesel用を用意してそして誰もいなくなった的な展開
個人的にはdieselは癖強いから完成度高くないと思う、ただ連携はかなり強い
Dieselが早いうちに作られて支配的に使われるようになって他の連携クレートもdiesel用を用意してそして誰もいなくなった的な展開
個人的にはdieselは癖強いから完成度高くないと思う、ただ連携はかなり強い
77デフォルトの名無しさん
2020/09/09(水) 18:58:45.43ID:oR4G2d97 sqlxが本名だと思う
2020/09/09(水) 21:48:02.38ID:5DrZyU/S
Sqlx良いね
2020/09/09(水) 22:34:56.87ID:ldUOsxby
2020/09/10(木) 07:20:42.22ID:CtWfYO23
itertoolsの実装どんなんかしらんけど、
itertoolsのchunksは各チャンクがイテレータになってるし、
windowsのほうはtupleで帰ってくるからアロケーションしないんじゃね?
itertoolsのchunksは各チャンクがイテレータになってるし、
windowsのほうはtupleで帰ってくるからアロケーションしないんじゃね?
2020/09/10(木) 07:23:35.08ID:CtWfYO23
すまん、チャンク・ウィンドウの個数分のアロケーションはさすがに発生してると思うわ多分
82デフォルトの名無しさん
2020/09/13(日) 20:54:26.61ID:e9EK7dt7 VS2019の拡張機能にRustがあるんだけど、これは本物ですか?
VSCodeのとは違うみたいで情報がない
VSCodeのとは違うみたいで情報がない
83デフォルトの名無しさん
2020/09/14(月) 01:42:47.60ID:uF+7D4// &'static strってデータかテキスト領域どっちに入るの?デバッグ方法分からん
2020/09/16(水) 01:12:00.89ID:fJPIYTy9
Rustってむずくないですか
これ最初にプログラムやる言語じゃないよね…昔にC触ったとかそんなレベルだと全然わからん
これ最初にプログラムやる言語じゃないよね…昔にC触ったとかそんなレベルだと全然わからん
85デフォルトの名無しさん
2020/09/16(水) 10:24:27.14ID:l4YX/vwQ むずくない
めんどくい
めんどくい
86デフォルトの名無しさん
2020/09/16(水) 11:57:04.37ID:Kj2RyNnD std::collections とかが複数形でstd::markerが単数形な理由ってなに?
2020/09/16(水) 12:36:20.15ID:g8ss57Sd
2020/09/16(水) 13:09:08.47ID:mQPJrXyp
え?仕様公開されてるだろ英語で
89デフォルトの名無しさん
2020/09/16(水) 13:54:55.78ID:GiXJ7CmX 自分の足も撃ち抜けない不自由な言語
2020/09/16(水) 14:23:57.05ID:r03rWfLq
2020/09/16(水) 20:12:39.40ID:Gmhk8xHy
具体的な話をしてくれ
2020/09/17(木) 04:57:16.23ID:SW6+Z1Cs
>>88
公開されてない。
公開されてない。
2020/09/17(木) 06:48:06.13ID:VCs9Ea+4
何の仕様が知りたくて見つけられなかったのか言ってくれよ
94デフォルトの名無しさん
2020/09/17(木) 09:31:52.63ID:k60QR6Dx チュートリアル追ってみたらLinkedListの実装に結局
unsafeなことやらなきゃいけないみたいに書いてあって
やる気なくしたアホくさ
unsafeなことやらなきゃいけないみたいに書いてあって
やる気なくしたアホくさ
2020/09/17(木) 09:38:19.49ID:bFAy1lxI
LinkedListはもうオワコン
あれはCPUが遅くてキャッシュミスとかあまり考えなくても良かった時代のもの
あれはCPUが遅くてキャッシュミスとかあまり考えなくても良かった時代のもの
2020/09/17(木) 09:49:42.39ID:CU1OLpA0
初心者が「まずは独自コンテナクラスでも実装してみるか」っていって討ち死にしていくのはしばしば見られるよな。
Rustのコンテナ実装は高難度なので素直に標準ライブラリを使いましょう、ってどこかに書いてあるべきかも。
Rustのコンテナ実装は高難度なので素直に標準ライブラリを使いましょう、ってどこかに書いてあるべきかも。
97デフォルトの名無しさん
2020/09/17(木) 09:53:23.90ID:k60QR6Dx 高難度?ただ面倒なだけじゃなくて?
2020/09/17(木) 10:01:04.46ID:CU1OLpA0
99デフォルトの名無しさん
2020/09/17(木) 10:11:43.63ID:k60QR6Dx 別にRustのチュートリアルはプログラミング初心者のためにあるわけじゃないし
100デフォルトの名無しさん
2020/09/17(木) 10:53:28.83ID:SW6+Z1Cs >>93
一番問題なのは、ヒープに対する参照の詳細が英語でもどこを探してもないこと。
Box<T>, Rc<T>, RefCell<T>
などの詳細と、生存期間、所有、借用、コンストラクト時のMoveの処理の話。
Option<T>はまだ分かるが。
一番問題なのは、ヒープに対する参照の詳細が英語でもどこを探してもないこと。
Box<T>, Rc<T>, RefCell<T>
などの詳細と、生存期間、所有、借用、コンストラクト時のMoveの処理の話。
Option<T>はまだ分かるが。
101デフォルトの名無しさん
2020/09/17(木) 10:55:15.75ID:SW6+Z1Cs102デフォルトの名無しさん
2020/09/17(木) 11:01:24.99ID:eg0aXI83 Cアルゴリズム入門的な本があるように
Rustアルゴリズム入門的な記事があっていい気がする
Rustアルゴリズム入門的な記事があっていい気がする
103デフォルトの名無しさん
2020/09/17(木) 11:06:01.57ID:k60QR6Dx 任意の場所への挿入・削除とかは動的配列よりLinkedListでやったほうが効率いいし
104デフォルトの名無しさん
2020/09/17(木) 11:19:25.01ID:Wtt+0SS3 >>94
unsafe使わなくてもできるよ
stdのLinkedListがunsafe使ってるのはパフォーマンスのため
独自実装のLinkedListなんでプロダクションでは使わないだろう
unsafe使わないやり方で作ってみればいいと思うよ
unsafe使わなくてもできるよ
stdのLinkedListがunsafe使ってるのはパフォーマンスのため
独自実装のLinkedListなんでプロダクションでは使わないだろう
unsafe使わないやり方で作ってみればいいと思うよ
105デフォルトの名無しさん
2020/09/17(木) 11:22:36.45ID:wWB4PA6B >>101
まともな論文ではないけどC++のハゲがそんなこと言ってなかったっけ
まともな論文ではないけどC++のハゲがそんなこと言ってなかったっけ
106デフォルトの名無しさん
2020/09/17(木) 11:27:31.41ID:k60QR6Dx キャッシュミスしやすいのはそうだろう
メモリが連続してないんだから当然だね
ただ時代遅れってのは勝手に付け足したろ
メモリが連続してないんだから当然だね
ただ時代遅れってのは勝手に付け足したろ
107デフォルトの名無しさん
2020/09/17(木) 11:33:13.70ID:Wtt+0SS3 >>100
「ヒープに対する参照の詳細」って何じゃい?
Box<T>, Rc<T>, RefCell<T>は標準ライブラリだからライブラリのリファレンスを見る
>生存期間、所有、借用、コンストラクト時のMoveの処理の話。
こっちは一般原則だから普通に明記されてると思うけど
Language Reference本も完成はしてないから書いてない詳細もあるだろうけど
それで困るのは一般原則的なことじゃないでしょ
「ヒープに対する参照の詳細」って何じゃい?
Box<T>, Rc<T>, RefCell<T>は標準ライブラリだからライブラリのリファレンスを見る
>生存期間、所有、借用、コンストラクト時のMoveの処理の話。
こっちは一般原則だから普通に明記されてると思うけど
Language Reference本も完成はしてないから書いてない詳細もあるだろうけど
それで困るのは一般原則的なことじゃないでしょ
108デフォルトの名無しさん
2020/09/17(木) 12:26:42.19ID:NHfa1bvj C++ のコンテナは、デフォルトでベクター
ゲームプログラミングでは、プログラマー自身がまとめてメモリを確保する、
メモリ管理システムの例が、よく載っているけど、
一般用途では、ベクターの速度には勝てないのじゃないか?
2分木とか、特殊用途なら別だが
Elixir でも、リストは先頭・末尾だけが速いだけで、
中間の要素を取得するには、N / 2 要素をたどる必要がある
ただ、Elixirは関数型で、元の要素が変化しないから、
更新時だけ、要素をコピーすればよい
ゲームプログラミングでは、プログラマー自身がまとめてメモリを確保する、
メモリ管理システムの例が、よく載っているけど、
一般用途では、ベクターの速度には勝てないのじゃないか?
2分木とか、特殊用途なら別だが
Elixir でも、リストは先頭・末尾だけが速いだけで、
中間の要素を取得するには、N / 2 要素をたどる必要がある
ただ、Elixirは関数型で、元の要素が変化しないから、
更新時だけ、要素をコピーすればよい
109デフォルトの名無しさん
2020/09/17(木) 13:19:52.64ID:OW2OZx8D C++のvectorでも深い考え無しに闇雲に使うと
要素コピー発生しまくりなアホなコードになる
要素コピー発生しまくりなアホなコードになる
110デフォルトの名無しさん
2020/09/17(木) 13:41:43.66ID:SW6+Z1Cs LinkedListと動的配列の違いは速度だけの問題じゃないんだな、これが。
前者はプログラミング上、後者より圧倒的に有利な場面がある。
それは、要素の識別性だ。
前者はプログラミング上、後者より圧倒的に有利な場面がある。
それは、要素の識別性だ。
111デフォルトの名無しさん
2020/09/17(木) 14:10:37.15ID:k60QR6Dx C++のRAIIイディオム、SharedPointer、Moveセマンティクス
でRustにメモリ安全でどこまで対抗可能かな
でRustにメモリ安全でどこまで対抗可能かな
112デフォルトの名無しさん
2020/09/17(木) 15:25:52.19ID:wWB4PA6B とりあえず二重開放でコケますね
113デフォルトの名無しさん
2020/09/17(木) 15:58:39.73ID:av+XxBIf C++は確かに道具は十分揃ってるんだけど、
適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
114デフォルトの名無しさん
2020/09/17(木) 20:47:10.45ID:PWLbdk49 LinkedListが役に立たないと知ったのは結構前だな
Javaのスレで色々議論があったんだけど
LinkedListが優位になるであろう場面でもArrayListのほうが早いと断言するやつが居て
バカじゃねーの?と思いつつも実装してみたら完全にArrayListのほうが早かった
古い知識でイキってた当時の自分が恥ずかしい
Javaのスレで色々議論があったんだけど
LinkedListが優位になるであろう場面でもArrayListのほうが早いと断言するやつが居て
バカじゃねーの?と思いつつも実装してみたら完全にArrayListのほうが早かった
古い知識でイキってた当時の自分が恥ずかしい
115デフォルトの名無しさん
2020/09/17(木) 21:46:41.57ID:QIzByEmL > C++は確かに道具は十分揃ってるんだけど、
> 適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
そもそもC++は注意力の前に必要知識が多すぎる
>>114
ベンチのソースとか記事ないの?
> 適切に使えるかどうかはプログラマーの注意力次第なので厳しい…。
そもそもC++は注意力の前に必要知識が多すぎる
>>114
ベンチのソースとか記事ないの?
116デフォルトの名無しさん
2020/09/17(木) 21:47:07.97ID:k60QR6Dx その早いって何が?
要素の検索が?挿入・削除が?
要素の検索が?挿入・削除が?
117デフォルトの名無しさん
2020/09/17(木) 21:56:39.63ID:k60QR6Dx 適当に検索した記事みてみたら普通に予想通りの内容だったけど
118デフォルトの名無しさん
2020/09/17(木) 22:27:03.14ID:eGAt76U1 リンクリストのキャッシュミスが問題になるのであれば
探索時にプリフェッチしておけばよくね?
今時の高性能なプロセッサなら大抵そういう命令を装備しているだろ
遅いのは実装がウンコなだけなんじゃ
探索時にプリフェッチしておけばよくね?
今時の高性能なプロセッサなら大抵そういう命令を装備しているだろ
遅いのは実装がウンコなだけなんじゃ
119デフォルトの名無しさん
2020/09/18(金) 00:33:25.64ID:FytpOkUB リストの要素がそれぞれ離れたアドレスにあるような実装だったら、クソデカキャッシュ必要になったりしない?
120デフォルトの名無しさん
2020/09/18(金) 02:24:56.35ID:2RtYnDyr 最近のDDR4(?)メモリの速度の進化も凄いから、キャッシュミスがあっても、
キャッシュがヒットした場合の3倍位の速度低下で済むんじゃないかと思うし、
少なくとも、キャッシュミスによる速度低下には上限がある。
一方、LinkedList、動的配列の途中への挿入や、途中要素の削除にかかる時間は、
全体の要素数を N とした時、それぞれ、O(1)、O(N)となる。
キャッシュミスによる速度低下が高々3倍程度なのに対し、
動的配列の遅さは、要素数 N に比例してしまうから上限がない。
だから、本質的に要素数が多くなった場合には、
キャッシュミスによる速度低下とは比べ物にならないくらい
速度差は歴然たるものとなる。
キャッシュがヒットした場合の3倍位の速度低下で済むんじゃないかと思うし、
少なくとも、キャッシュミスによる速度低下には上限がある。
一方、LinkedList、動的配列の途中への挿入や、途中要素の削除にかかる時間は、
全体の要素数を N とした時、それぞれ、O(1)、O(N)となる。
キャッシュミスによる速度低下が高々3倍程度なのに対し、
動的配列の遅さは、要素数 N に比例してしまうから上限がない。
だから、本質的に要素数が多くなった場合には、
キャッシュミスによる速度低下とは比べ物にならないくらい
速度差は歴然たるものとなる。
121デフォルトの名無しさん
2020/09/18(金) 02:26:46.51ID:2RtYnDyr122デフォルトの名無しさん
2020/09/18(金) 02:33:02.97ID:2RtYnDyr >>121
これをMoveに置き換えて高速になるのは、要素の中身が、Heap領域など、要素自体
とは別の場所に有る場合である。たとえば、
struct Element {
const char *m_pszText; // new char[]で確保したHeap領域を指す0終端文字列
};
簡単のためこれの固定長配列を書いてみれば:
Element g_arr[1024];
となる。この要素のデータを読み取る場合は次のようになる、
for ( int i=0; i<1024; i++) {
printf( "i=%d, text=%s\n", i, g_arr[i].m_pszText );
}
この場合、m_pszTextは、ヒープ領域にとってあるから、結局、配列でも
キャッシュミスは生じ得る。
ということで、動的配列でMove動作が有効である例では、たとえ動的配列で
あっても、結局、キャッシュミスは生じる。
これをMoveに置き換えて高速になるのは、要素の中身が、Heap領域など、要素自体
とは別の場所に有る場合である。たとえば、
struct Element {
const char *m_pszText; // new char[]で確保したHeap領域を指す0終端文字列
};
簡単のためこれの固定長配列を書いてみれば:
Element g_arr[1024];
となる。この要素のデータを読み取る場合は次のようになる、
for ( int i=0; i<1024; i++) {
printf( "i=%d, text=%s\n", i, g_arr[i].m_pszText );
}
この場合、m_pszTextは、ヒープ領域にとってあるから、結局、配列でも
キャッシュミスは生じ得る。
ということで、動的配列でMove動作が有効である例では、たとえ動的配列で
あっても、結局、キャッシュミスは生じる。
123デフォルトの名無しさん
2020/09/18(金) 03:33:15.49ID:/+t0myE3 ここまでベンチなんもないのでとりあえず適当に拾ったやつ
https://dzone.com/articles/performance-of-array-vs-linked-list-on-modern-comp
総データ量がキャッシュをはるかに超えるとかだと多分変わってくるんだとは思う
その場合でもUnrolled linked listとかを使うのがいいってことにはなるのかな?
https://dzone.com/articles/performance-of-array-vs-linked-list-on-modern-comp
総データ量がキャッシュをはるかに超えるとかだと多分変わってくるんだとは思う
その場合でもUnrolled linked listとかを使うのがいいってことにはなるのかな?
124デフォルトの名無しさん
2020/09/18(金) 03:52:17.29ID:2RtYnDyr125デフォルトの名無しさん
2020/09/18(金) 03:53:47.62ID:M9ZXsRqQ 推測するな、計測せよ
126デフォルトの名無しさん
2020/09/18(金) 03:54:10.38ID:2RtYnDyr >>124
C++のSTLは設計は馬鹿なので、先頭から k 番目に挿入するなど言う
馬鹿な統一関数がある。
それは、リンクリストにとって最悪の挿入法で、O(N)の時間が掛かる。
だから遅い。
数学的なイマジネーションが無いので、その間違いに気づかない。
C++のSTLは設計は馬鹿なので、先頭から k 番目に挿入するなど言う
馬鹿な統一関数がある。
それは、リンクリストにとって最悪の挿入法で、O(N)の時間が掛かる。
だから遅い。
数学的なイマジネーションが無いので、その間違いに気づかない。
127デフォルトの名無しさん
2020/09/18(金) 03:54:37.58ID:2RtYnDyr >>125
いくら測定しても、理屈が間違っていれば、間違った実験結果となる。
いくら測定しても、理屈が間違っていれば、間違った実験結果となる。
128デフォルトの名無しさん
2020/09/18(金) 03:56:20.84ID:2RtYnDyr129デフォルトの名無しさん
2020/09/18(金) 03:58:23.37ID:2RtYnDyr 数学が出来ない人は、生まれつき脳が馬鹿なので、
この人も、乱数で番号を発生させて、先頭からk番目の位置に挿入する
という馬鹿なベンチマークを作って、リンクリストが遅いなどと言っている
のだろう。
そんなことすれば遅くなるに決まっているが、彼は馬鹿なので分からない。
この人も、乱数で番号を発生させて、先頭からk番目の位置に挿入する
という馬鹿なベンチマークを作って、リンクリストが遅いなどと言っている
のだろう。
そんなことすれば遅くなるに決まっているが、彼は馬鹿なので分からない。
130デフォルトの名無しさん
2020/09/18(金) 04:01:14.05ID:2RtYnDyr 数学脳を持ってない人にヒントをかいておくと、
リンクリストは、途中への挿入は O(1)で可能だが、
先頭から k 番目という番号を指定した位置への挿入は、O(N)の時間が掛かる。
こういうベンチマークを取って論文にしてしまうような人は、
プログラミングもコンピュータサイエンスにも全く向いてない。
リンクリストは、途中への挿入は O(1)で可能だが、
先頭から k 番目という番号を指定した位置への挿入は、O(N)の時間が掛かる。
こういうベンチマークを取って論文にしてしまうような人は、
プログラミングもコンピュータサイエンスにも全く向いてない。
131デフォルトの名無しさん
2020/09/18(金) 04:04:00.76ID:2RtYnDyr アメリカの大学生の非常に多くのがポインタやアドレスの概念が理解できないらしい。
この人もそれに近い状態だから、途中への挿入を、先頭からの番号で指定すると言う
発想しか出来ないのだろう。
ポインタが何故頭のいい人に好まれるか、そういう人種の人にはわからない。
そして、間違ったベンチマークを大真面目に論文にしてしまう。
この人もそれに近い状態だから、途中への挿入を、先頭からの番号で指定すると言う
発想しか出来ないのだろう。
ポインタが何故頭のいい人に好まれるか、そういう人種の人にはわからない。
そして、間違ったベンチマークを大真面目に論文にしてしまう。
132デフォルトの名無しさん
2020/09/18(金) 06:34:01.52ID:JNeepSOt >C++のSTLは設計は馬鹿なので、先頭から k 番目に挿入するなど言う
>馬鹿な統一関数がある
え?ここ見る限りそんなのないけど
https://cpprefjp.github.io/reference/list/list/insert.html
>馬鹿な統一関数がある
え?ここ見る限りそんなのないけど
https://cpprefjp.github.io/reference/list/list/insert.html
133デフォルトの名無しさん
2020/09/18(金) 08:12:28.71ID:aEEfDPH5 DDRメモリのセットアップタイムをググったらcrucialが判りやすい資料を公開していた
ttps://www.crucial.jp/articles/about-memory/difference-between-speed-and-latency
これはメモリ単体での値だから実際にはCPU内キャッシュの探索時間、バスの調停時間
メモリコントローラの動作時間が積まれる。L3まで探って未ヒットだった場合CPUが3GHzとしても
30サイクル以上は待たされそう
今時のPCで使用されるプロセッサはL1からのロードですらノーウェイトではないし計画的なロードは超重要
ttps://www.crucial.jp/articles/about-memory/difference-between-speed-and-latency
これはメモリ単体での値だから実際にはCPU内キャッシュの探索時間、バスの調停時間
メモリコントローラの動作時間が積まれる。L3まで探って未ヒットだった場合CPUが3GHzとしても
30サイクル以上は待たされそう
今時のPCで使用されるプロセッサはL1からのロードですらノーウェイトではないし計画的なロードは超重要
134デフォルトの名無しさん
2020/09/18(金) 09:09:51.55ID:FytpOkUB 先頭や末尾への挿入削除だけならVecDequeでよくね
135デフォルトの名無しさん
2020/09/18(金) 09:26:18.23ID:/+t0myE3 >>123が参照してる記事でもっと詳細あったわ
https://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html
こっちは、挿入が挿入箇所のサーチも加わったことを断った上で比較してますね
サーチを加えてもデータサイズがでかい・コンストラクタのコストが重い場合はlistが有利っすね
挿入位置のサーチの分のコストを含めるかは難しいところだけど、先頭・末尾以外の一定位置にだけ挿入するってシチュエーションはそうそうないだろうし、
この程度の比較でいいんじゃねーのかな
https://baptiste-wicht.com/posts/2012/12/cpp-benchmark-vector-list-deque.html
こっちは、挿入が挿入箇所のサーチも加わったことを断った上で比較してますね
サーチを加えてもデータサイズがでかい・コンストラクタのコストが重い場合はlistが有利っすね
挿入位置のサーチの分のコストを含めるかは難しいところだけど、先頭・末尾以外の一定位置にだけ挿入するってシチュエーションはそうそうないだろうし、
この程度の比較でいいんじゃねーのかな
136デフォルトの名無しさん
2020/09/18(金) 09:34:00.68ID:/+t0myE3137デフォルトの名無しさん
2020/09/18(金) 09:59:55.15ID:2RtYnDyr 実際には、挿入箇所のサーチなど必要無い事が多いので、リンクリストが速い。
テストする人は馬鹿なので、実際的な「ランダム」の意味が分かってない。
テストする人は馬鹿なので、実際的な「ランダム」の意味が分かってない。
138デフォルトの名無しさん
2020/09/18(金) 10:03:14.54ID:2RtYnDyr >>135
>挿入位置のサーチの分のコストを含めるかは難しいところだけど、先頭・末尾以外の一定位置にだけ挿入するってシチュエーションはそうそうないだろうし、
>この程度の比較でいいんじゃねーのかな
違う。
サーチが必要なく、分かっている途中の場所に挿入するケースが圧倒的に多い。
>挿入位置のサーチの分のコストを含めるかは難しいところだけど、先頭・末尾以外の一定位置にだけ挿入するってシチュエーションはそうそうないだろうし、
>この程度の比較でいいんじゃねーのかな
違う。
サーチが必要なく、分かっている途中の場所に挿入するケースが圧倒的に多い。
139デフォルトの名無しさん
2020/09/18(金) 10:30:57.15ID:2RtYnDyr >>133
それはリンクリストだけの問題ではなく、>>122のように、動的配列でも
現実的には事情は変わらない事が多い。
動的配列は、要素のサイズが小さくて、Heap領域へのポインタなどを中に持ってない
場合のみ、リンクリストに勝てる。
たとえば、この条件に当てはまっている典型的な例として、文字列を文字の集合とみなした場合や、
3Dの頂点座標などは、(動的/固定)配列で持っているのは正しい判断で、リンクリストで
持つべきではない。
たとえば、要素がメンバとして、CStringやstd::stringなどの文字列を持つ構造体の場合は、
>>122の状況が生じるので、要素を配列で持ってもキャッシュミスは避けられない。
それはリンクリストだけの問題ではなく、>>122のように、動的配列でも
現実的には事情は変わらない事が多い。
動的配列は、要素のサイズが小さくて、Heap領域へのポインタなどを中に持ってない
場合のみ、リンクリストに勝てる。
たとえば、この条件に当てはまっている典型的な例として、文字列を文字の集合とみなした場合や、
3Dの頂点座標などは、(動的/固定)配列で持っているのは正しい判断で、リンクリストで
持つべきではない。
たとえば、要素がメンバとして、CStringやstd::stringなどの文字列を持つ構造体の場合は、
>>122の状況が生じるので、要素を配列で持ってもキャッシュミスは避けられない。
140デフォルトの名無しさん
2020/09/18(金) 10:40:12.02ID:2RtYnDyr STLの設計も悪いが、リンクリストに対するランダム挿入のテストで、
ランダムな整数kを求めて「k番目の要素」の直前に挿入するような
馬鹿なテストをしている場合、リンクリストは、先頭からk番目までを
丁寧に辿らなければならないので、その時にO(k)の時間がかかる。
全体の要素がN個の場合、このようなランダムの場合、平均でN/2に比例した時間が
掛かるのでO(N)と表現される。
しかもこのとき、要素をk個もたどらなければならないので、キャッシュミスがあったら
かなりの時間が掛かってしまう。
逆に、動的配列の場合は、先頭からkまでをたどったとしても、キャッシュミスは軽微。
しかし、現実の途中の挿入は、このような「辿る操作」が全く必要無い事が多いので、
リンクリストは速い。
要素を識別するために、先頭から「k番」という番号で行うのは、「配列流」で
あって、ポインタが理解できない人には、それしか方法が分からないが、リンクリストは
そのような方法で要素を識別しない。
そして、その識別方法こそが、リンクリストが配列よりも圧倒的に便利であることに繋がる。
ポインタはとても賢い方法なのだが、頭が悪い人には理解できないので、どうしても、
先頭からの番号でしか要素を識別したがらない。
そしてそのことこそが、あらゆることを遅くし、プログラムを見通しの悪いものにしている
ことにも気づかない。
ランダムな整数kを求めて「k番目の要素」の直前に挿入するような
馬鹿なテストをしている場合、リンクリストは、先頭からk番目までを
丁寧に辿らなければならないので、その時にO(k)の時間がかかる。
全体の要素がN個の場合、このようなランダムの場合、平均でN/2に比例した時間が
掛かるのでO(N)と表現される。
しかもこのとき、要素をk個もたどらなければならないので、キャッシュミスがあったら
かなりの時間が掛かってしまう。
逆に、動的配列の場合は、先頭からkまでをたどったとしても、キャッシュミスは軽微。
しかし、現実の途中の挿入は、このような「辿る操作」が全く必要無い事が多いので、
リンクリストは速い。
要素を識別するために、先頭から「k番」という番号で行うのは、「配列流」で
あって、ポインタが理解できない人には、それしか方法が分からないが、リンクリストは
そのような方法で要素を識別しない。
そして、その識別方法こそが、リンクリストが配列よりも圧倒的に便利であることに繋がる。
ポインタはとても賢い方法なのだが、頭が悪い人には理解できないので、どうしても、
先頭からの番号でしか要素を識別したがらない。
そしてそのことこそが、あらゆることを遅くし、プログラムを見通しの悪いものにしている
ことにも気づかない。
141デフォルトの名無しさん
2020/09/18(金) 11:07:59.09ID:0XVxbS2k リンクリストをサーチする場合
1.次の要素のアドレスを取得
2.次の要素のメタデータを取得
3.データを評価
4.アンマッチだったら1に戻る
を繰り返すので、メモリ配置次第ではランダムアクセスになりやすく
無策だとキャッシュミスを発生させやすいって話じゃないの?
1.次の要素のアドレスを取得
2.次の要素のメタデータを取得
3.データを評価
4.アンマッチだったら1に戻る
を繰り返すので、メモリ配置次第ではランダムアクセスになりやすく
無策だとキャッシュミスを発生させやすいって話じゃないの?
142デフォルトの名無しさん
2020/09/18(金) 12:20:02.02ID:2RtYnDyr >>141
でも、要素の中にstd::stringなどを入れていた場合、そのstringの中味は、
Heap領域を指しているので、どうせ動的配列でもキャッシュミスは生じる。
だから動的配列がサーチで有利になるのは要素がトリビアルな場合のみ。
また、サーチしても、削除などを行うととたんに動的配列は遅くなる。
この場合、O(N)個のCopyまたはMoveが生じる。Moveでも
コピー動作が全く生じないわけではないので(途中の)1個の要素の削除でも、
動的配列はO(N)の時間が掛かる。
一方、リンクリストは、O(1)。
読み取りが中心になる場合は、動的配列はもちろん速い。
でも、要素の中にstd::stringなどを入れていた場合、そのstringの中味は、
Heap領域を指しているので、どうせ動的配列でもキャッシュミスは生じる。
だから動的配列がサーチで有利になるのは要素がトリビアルな場合のみ。
また、サーチしても、削除などを行うととたんに動的配列は遅くなる。
この場合、O(N)個のCopyまたはMoveが生じる。Moveでも
コピー動作が全く生じないわけではないので(途中の)1個の要素の削除でも、
動的配列はO(N)の時間が掛かる。
一方、リンクリストは、O(1)。
読み取りが中心になる場合は、動的配列はもちろん速い。
143デフォルトの名無しさん
2020/09/18(金) 12:35:56.71ID:2RtYnDyr >>141
リンクリストをサーチするのは pure Cで書けばこんなに簡単で、物凄く効率が良い:
CNode *pNode = pTop;
while (pNode != NULL ) {
(pNodeを検査);
pNode = pNode->m_pNext;
}
リンクリストをサーチするのは pure Cで書けばこんなに簡単で、物凄く効率が良い:
CNode *pNode = pTop;
while (pNode != NULL ) {
(pNodeを検査);
pNode = pNode->m_pNext;
}
144デフォルトの名無しさん
2020/09/18(金) 14:22:59.83ID:JNeepSOt ( ´,_ゝ`)プッ
145デフォルトの名無しさん
2020/09/18(金) 15:09:39.89ID:lOTfajhS >>141
同じO(n)でもLocalityの違いでVecとLinkedListじゃ桁違いの差が出るよって話
「無策だと」って言っても現実的にLinkedListをVecと同じようにCache Friendlyにする方法ないよね?
同じO(n)でもLocalityの違いでVecとLinkedListじゃ桁違いの差が出るよって話
「無策だと」って言っても現実的にLinkedListをVecと同じようにCache Friendlyにする方法ないよね?
146デフォルトの名無しさん
2020/09/18(金) 15:41:38.07ID:2RtYnDyr 実際にテキストエディタでも作ってみれば、LinkedListの優秀さが分かる。
行数が大きくなった場合、動的配列では遅くてどうしようもない。
行数が大きくなった場合、動的配列では遅くてどうしようもない。
147デフォルトの名無しさん
2020/09/18(金) 16:53:33.12ID:JNeepSOt なるほどね
テキストエディタという具体例があったか
テキストエディタという具体例があったか
148デフォルトの名無しさん
2020/09/18(金) 17:30:51.35ID:lOTfajhS エディタの場合はO(n)の探索じゃ困るからLinkedListで作られてるメジャーなのないでしょ
Piece Table, Gap Buffer, RopeのいずれかでRope以外は基本的に配列を中心に実装されてる
VS Codeの例
https://code.visualstudio.com/blogs/2018/03/23/text-buffer-reimplementation
Heap ManagerとかMemory Allocatorみたいなのは内部的にLinkedList使ってる
Piece Table, Gap Buffer, RopeのいずれかでRope以外は基本的に配列を中心に実装されてる
VS Codeの例
https://code.visualstudio.com/blogs/2018/03/23/text-buffer-reimplementation
Heap ManagerとかMemory Allocatorみたいなのは内部的にLinkedList使ってる
149デフォルトの名無しさん
2020/09/18(金) 18:36:08.52ID:2RtYnDyr >>148
>エディタの場合はO(n)の探索じゃ困るからLinkedListで作られてるメジャーなのないでしょ
「探索」とは何のことか知らないが、
「検索」に関しては、ArrayListでもLinkedListでもbig O表記は変わらないが。
>エディタの場合はO(n)の探索じゃ困るからLinkedListで作られてるメジャーなのないでしょ
「探索」とは何のことか知らないが、
「検索」に関しては、ArrayListでもLinkedListでもbig O表記は変わらないが。
150デフォルトの名無しさん
2020/09/18(金) 18:40:53.97ID:2RtYnDyr StackOverflowも、これに関してはデタラメ。
実測してLinkedListの挿入が遅いとした人のコード見てたら、
ノードの個数Nの値が、1から100までしかならないようになっていて、
それを、以下の様に外側から100000回くらいループした、二重ループになっていた。
for(100000回のループ) {
リストの変数を作成
for(100回挿入するループ) {
}
}
これだと、LinkedListのNodeがHeapから作製される遅さばかりを測定しているだけで、
全く、LinkedListの真骨頂であるところのNが大きな時の挿入はテストできていない。
StackOverflowはとても高度なことを答えている人もいるが、この件に関しては、
レベルの低い人の書き込みが目立っている。あれを信じてはいけない。
実測してLinkedListの挿入が遅いとした人のコード見てたら、
ノードの個数Nの値が、1から100までしかならないようになっていて、
それを、以下の様に外側から100000回くらいループした、二重ループになっていた。
for(100000回のループ) {
リストの変数を作成
for(100回挿入するループ) {
}
}
これだと、LinkedListのNodeがHeapから作製される遅さばかりを測定しているだけで、
全く、LinkedListの真骨頂であるところのNが大きな時の挿入はテストできていない。
StackOverflowはとても高度なことを答えている人もいるが、この件に関しては、
レベルの低い人の書き込みが目立っている。あれを信じてはいけない。
151デフォルトの名無しさん
2020/09/18(金) 18:42:40.33ID:UNsmlUgz152デフォルトの名無しさん
2020/09/18(金) 18:49:50.54ID:2RtYnDyr153デフォルトの名無しさん
2020/09/18(金) 19:35:36.32ID:nXbcIFBH Intelの最適化マニュアルを見ると、不規則なメモリアクセスで
ハードウェアプリフェッチが有効に機能しないシチュエーションでは
ソフトウェアプリフェッチが有効であると書いてある。つまり
>>141 2.5 次アクセスするメモリに対しプリフェッチ出来る命令を実行する
みたいにすればメモリのランダムアクセスに起因するレイテンシを短縮できる
あとサーチの場合メモリ配置の局所性以外の要因でも配列とリンクリストの速度差は発生する
リンクリストの場合メモリ帯域の一部をアドレスのロードに取られるのでデータのロードに使える帯域は減少する
配列の場合はレジスタにおいたアドレスを使ってロードできるし
ストリング命令が使えるプロセッサであればサーチ命令を使用する事も出来る
ハードウェアプリフェッチが有効に機能しないシチュエーションでは
ソフトウェアプリフェッチが有効であると書いてある。つまり
>>141 2.5 次アクセスするメモリに対しプリフェッチ出来る命令を実行する
みたいにすればメモリのランダムアクセスに起因するレイテンシを短縮できる
あとサーチの場合メモリ配置の局所性以外の要因でも配列とリンクリストの速度差は発生する
リンクリストの場合メモリ帯域の一部をアドレスのロードに取られるのでデータのロードに使える帯域は減少する
配列の場合はレジスタにおいたアドレスを使ってロードできるし
ストリング命令が使えるプロセッサであればサーチ命令を使用する事も出来る
154デフォルトの名無しさん
2020/09/18(金) 19:52:23.34ID:qGyW3gPx Twitterによくいるトンチンカンな知識の割に
謎の上から目線で口上垂れてる同類だな
謎の上から目線で口上垂れてる同類だな
155108
2020/09/18(金) 21:29:14.35ID:EwCVEpJE Elixir では、リストへの全走査が主体。
フィルターとか
ランダムアクセスではない。
全探索が基本
全探索はリスト、ランダムアクセスは配列。
リストは、次の要素しか分からないから
「1, 2, 3, 4, 5」という要素があって、奇数だけをフィルタリングしたら、
「1 -> 3 -> 5」みたいに、リンクをつなぎ直す。
2, 4 はGC の対象になる
こういう全走査では、リストが圧倒的!
これが動的配列なら、2の削除で、345 を前に移動して、
4の削除で、5 を前に移動してと、コピーの連続になって大変
だから、Elixir では、リストが主体になっている。
関数型では状態を変えず、パイプラインで、新たな要素を作っていくのが基本
全走査が基本で、ランダムアクセスしないからだろう
フィルターとか
ランダムアクセスではない。
全探索が基本
全探索はリスト、ランダムアクセスは配列。
リストは、次の要素しか分からないから
「1, 2, 3, 4, 5」という要素があって、奇数だけをフィルタリングしたら、
「1 -> 3 -> 5」みたいに、リンクをつなぎ直す。
2, 4 はGC の対象になる
こういう全走査では、リストが圧倒的!
これが動的配列なら、2の削除で、345 を前に移動して、
4の削除で、5 を前に移動してと、コピーの連続になって大変
だから、Elixir では、リストが主体になっている。
関数型では状態を変えず、パイプラインで、新たな要素を作っていくのが基本
全走査が基本で、ランダムアクセスしないからだろう
156デフォルトの名無しさん
2020/09/18(金) 22:34:29.90ID:lOTfajhS157デフォルトの名無しさん
2020/09/18(金) 23:42:30.07ID:JNeepSOt158デフォルトの名無しさん
2020/09/18(金) 23:44:17.88ID:JNeepSOt VS Codeの異常に早い検索はそれで実現されてるのか
159デフォルトの名無しさん
2020/09/19(土) 01:43:40.66ID:nzD54rrP IteratorでItemがimpl Futureをしてる型を返すっていう実装したいんですが、方法が分かりません。
どのように解決すればよいのでしょうか?
while Some(fut) = fut_iter.next() {
let result = fut.await;
}
どのように解決すればよいのでしょうか?
while Some(fut) = fut_iter.next() {
let result = fut.await;
}
160デフォルトの名無しさん
2020/09/19(土) 02:11:22.63ID:U+RTm7Td >>154
数学が分からん人には、LinkedListの優秀性も理解できない。
実験しても実験の仕方が間違っているので間違った結果になっているが、
本人が気づかない。
C++のStrousstrup氏も間違っている。
集団幻想。
それだけ数学的なことは才能が必要だということだ。
多数決では、ArrayListが圧勝と言うことになってしまっているが、それは
本等は間違い。
数学が分からん人には、LinkedListの優秀性も理解できない。
実験しても実験の仕方が間違っているので間違った結果になっているが、
本人が気づかない。
C++のStrousstrup氏も間違っている。
集団幻想。
それだけ数学的なことは才能が必要だということだ。
多数決では、ArrayListが圧勝と言うことになってしまっているが、それは
本等は間違い。
161デフォルトの名無しさん
2020/09/19(土) 02:19:57.57ID:U+RTm7Td 数学的なことは、99%位の人が正しく理解できないので、ベンチマークテスト
のプログラムも1%位の人しか正しくかけない。
だからデタラメな集団幻想が、LinkedListが過小評価に繋がっている。
まだ、雑誌などでは学歴フィルターというか、頭の良さフィルターをかけて入社
させない仕組みがあるので、あまり間違ってはないが、ネットはめちゃくちゃ。
見ていたら、論文にまでしてしまっているひとまでいるようだが、間違っている。
のプログラムも1%位の人しか正しくかけない。
だからデタラメな集団幻想が、LinkedListが過小評価に繋がっている。
まだ、雑誌などでは学歴フィルターというか、頭の良さフィルターをかけて入社
させない仕組みがあるので、あまり間違ってはないが、ネットはめちゃくちゃ。
見ていたら、論文にまでしてしまっているひとまでいるようだが、間違っている。
162デフォルトの名無しさん
2020/09/19(土) 02:23:16.42ID:Vwp+/AeQ >>95
グラフ表現とかでもlinkedlist使わんの?
グラフ表現とかでもlinkedlist使わんの?
163デフォルトの名無しさん
2020/09/19(土) 03:22:40.39ID:Q84IJBEo あーあっち側の人すかー
有意義な議論ができるかと思ってた
皆さまご苦労さまです
有意義な議論ができるかと思ってた
皆さまご苦労さまです
164デフォルトの名無しさん
2020/09/19(土) 11:06:03.78ID:Ltx9b8Lt とりあえずベンチマーク取ってみたらええやん。。よくいる種類の馬鹿だよね。
こういうタイプはフィボナッチヒープとか大好きなんだよな。
こういうタイプはフィボナッチヒープとか大好きなんだよな。
165デフォルトの名無しさん
2020/09/19(土) 11:36:48.27ID:iDecIr7K ArrayListおじさんはArrayDequeをどう評価するの?
166デフォルトの名無しさん
2020/09/19(土) 12:38:52.28ID:2HkJedVD >>162
グラフは何かしらのツリー構造を使うからLinkedListは使わないでしょ
グラフは何かしらのツリー構造を使うからLinkedListは使わないでしょ
167デフォルトの名無しさん
2020/09/19(土) 16:29:00.47ID:4d+Mnie5168デフォルトの名無しさん
2020/09/19(土) 16:47:45.15ID:4d+Mnie5169デフォルトの名無しさん
2020/09/19(土) 17:53:59.50ID:Qry/LSKT まだ続くなら、動的配列とリストの具体的なベンチマークのコードを載せてくれ
rustが好ましい
rustが好ましい
170デフォルトの名無しさん
2020/09/19(土) 18:25:43.76ID:nFBIHSQH >>167
Javaでは、末尾追加の aitと、途中削除の rit、先頭への追加 は、LinkedListの方が
速いという結果だね。
この場合、要素数が2万個だけど、もっと多くなると理論上、その差はいくらでも開いて行く。
また、単純に全要素を足すsumitとsumforでは、0.25%, 1.4% の差しかない。
逆に、末尾追加のalastは、ArrayListの方が4.8倍速い。
これはLinkedListの場合、1要素ずつメモリアロケーターを呼び出しているので遅くなっており、
予想通り。
しかし、先頭追加のa0とalastの時間差が、LinkedListではほとんどない(理論上は全くないのだが)
のに対し、ArrayListでは82倍もあるのも予想通りの結果。
LinkedListは、先頭、末尾、途中のどこを操作しても、理論上、時間差が(ほぼ)ないが、
ArrayListは、大きく違ってくるというのが理論上予想されたことで、このベンチマークは正しく
それを反映している。
Javaでは、末尾追加の aitと、途中削除の rit、先頭への追加 は、LinkedListの方が
速いという結果だね。
この場合、要素数が2万個だけど、もっと多くなると理論上、その差はいくらでも開いて行く。
また、単純に全要素を足すsumitとsumforでは、0.25%, 1.4% の差しかない。
逆に、末尾追加のalastは、ArrayListの方が4.8倍速い。
これはLinkedListの場合、1要素ずつメモリアロケーターを呼び出しているので遅くなっており、
予想通り。
しかし、先頭追加のa0とalastの時間差が、LinkedListではほとんどない(理論上は全くないのだが)
のに対し、ArrayListでは82倍もあるのも予想通りの結果。
LinkedListは、先頭、末尾、途中のどこを操作しても、理論上、時間差が(ほぼ)ないが、
ArrayListは、大きく違ってくるというのが理論上予想されたことで、このベンチマークは正しく
それを反映している。
171デフォルトの名無しさん
2020/09/19(土) 18:27:51.00ID:nFBIHSQH >>170
なお、末尾追加も、同じサイズのノードに限定したものなら、メモリアロケーターが
劇速のものが作れるので、LinkedListでも、ArrayListに匹敵するくらい速度が
出るように作れる。
なお、末尾追加も、同じサイズのノードに限定したものなら、メモリアロケーターが
劇速のものが作れるので、LinkedListでも、ArrayListに匹敵するくらい速度が
出るように作れる。
172デフォルトの名無しさん
2020/09/19(土) 18:28:30.00ID:nFBIHSQH173デフォルトの名無しさん
2020/09/19(土) 18:30:31.19ID:nFBIHSQH この結果は、JavaのLinkedListが、素直にLinkedListを素朴に実装しているから
出てきたもの。
一方、STLは、設計が悪いので初心者が誤解を招く結果が出てしまう。
それは、追加する場所をアドレスではなく、先頭からの通し番号で指定する
ことが標準になっていたりするから。
出てきたもの。
一方、STLは、設計が悪いので初心者が誤解を招く結果が出てしまう。
それは、追加する場所をアドレスではなく、先頭からの通し番号で指定する
ことが標準になっていたりするから。
174デフォルトの名無しさん
2020/09/19(土) 18:48:41.03ID:cxOsPIuF >>173
> 先頭からの通し番号で指定することが標準になっていたりするから。
なんでそんな間違った前提を置いてるんだ?
C++ の std::list にそんな機能はないってことをたびたび指摘されてるが、
あんたは今までリンクリストの優位性がどうこう言ってたのとは別の人なんか?
(いや、そんなはずはないよな、こんな荒らし野郎が何人もいるとは思いたくない。)
> 先頭からの通し番号で指定することが標準になっていたりするから。
なんでそんな間違った前提を置いてるんだ?
C++ の std::list にそんな機能はないってことをたびたび指摘されてるが、
あんたは今までリンクリストの優位性がどうこう言ってたのとは別の人なんか?
(いや、そんなはずはないよな、こんな荒らし野郎が何人もいるとは思いたくない。)
175デフォルトの名無しさん
2020/09/19(土) 19:00:07.16ID:iDecIr7K Javaはmalloc/freeが超速いので、他の言語よりはLinkedListに優しい
176デフォルトの名無しさん
2020/09/19(土) 19:14:15.33ID:6s6pvu7S >>175
どうせ妄想を書いてるだけだろ
どうせ妄想を書いてるだけだろ
177デフォルトの名無しさん
2020/09/19(土) 19:22:13.23ID:k5fZduun GC言語は領域の再利用をgc時に行うからnewの時に空きを探す手間が少ない。
単純に端っこから割り当てていくだけ。
単純に端っこから割り当てていくだけ。
178デフォルトの名無しさん
2020/09/19(土) 19:39:34.30ID:nFBIHSQH179デフォルトの名無しさん
2020/09/19(土) 19:57:18.05ID:X3OIhUCa Listスレかな?
180デフォルトの名無しさん
2020/09/19(土) 23:26:19.32ID:4d+Mnie5181デフォルトの名無しさん
2020/09/19(土) 23:52:44.02ID:61l8trcl ゲームエンジン・データベースなどの本には、メモリプールを作る方法が、よく載っている
同じサイズの要素を、まとめて確保して、そのプール内で管理する方法
同じサイズの要素を、まとめて確保して、そのプール内で管理する方法
182デフォルトの名無しさん
2020/09/20(日) 00:02:10.17ID:MLu0Cj9r 次はhashmap vs vector
183デフォルトの名無しさん
2020/09/20(日) 00:06:23.82ID:hvjw0ZD9 ここで定番のRustハッシュ関数遅い問題で一悶着
184デフォルトの名無しさん
2020/09/20(日) 00:17:48.39ID:mlVvoUwY185デフォルトの名無しさん
2020/09/20(日) 01:00:22.31ID:zH0CDqJ7 >>181
システムコールの呼び出し回数を押さえるため?
でも通常のmalloc/freeもプロセス再起動されなければ領域再利用されるよね。
なら最初にmallocでガバっと取って、実際に使う時にfreeしてmallocしなおせば良くない?
ゲーム専用機の場合はシステムのAPIもいまいちだったりするから自前でメモリ管理もありだと思うし、DBの場合もキャッシュやら共有メモリやらmmapしてどうたらで自前で管理したいのもわかる。
でもそれ以外で普通のOS上のアプリで自前でメモリプール管理するメリットってどれだけあるの?
システムコールの呼び出し回数を押さえるため?
でも通常のmalloc/freeもプロセス再起動されなければ領域再利用されるよね。
なら最初にmallocでガバっと取って、実際に使う時にfreeしてmallocしなおせば良くない?
ゲーム専用機の場合はシステムのAPIもいまいちだったりするから自前でメモリ管理もありだと思うし、DBの場合もキャッシュやら共有メモリやらmmapしてどうたらで自前で管理したいのもわかる。
でもそれ以外で普通のOS上のアプリで自前でメモリプール管理するメリットってどれだけあるの?
186デフォルトの名無しさん
2020/09/20(日) 01:12:40.58ID:GOdQy7G8 予め決まったサイズを確保することが多いから、予めまとめて確保しておいて数珠繋ぎにしておけば最速で出し入れできる
187デフォルトの名無しさん
2020/09/20(日) 01:16:59.26ID:GOdQy7G8 16msecの間にすべての処理を完了しないといけないからmalloc呼び出しなんてありえないよ
188デフォルトの名無しさん
2020/09/20(日) 01:29:40.54ID:mlVvoUwY >>167
このデータの作り方だとLinkedListでもかなり連続したメモリ領域が使われてる可能性が高いような気がする
Javaの場合はList<int>じゃなくList<Integer>で
値を使うケースだとポインタを辿る必要があるのでそれも結果に影響しそう
このデータの作り方だとLinkedListでもかなり連続したメモリ領域が使われてる可能性が高いような気がする
Javaの場合はList<int>じゃなくList<Integer>で
値を使うケースだとポインタを辿る必要があるのでそれも結果に影響しそう
189デフォルトの名無しさん
2020/09/20(日) 03:23:18.11ID:7hHTPvJJ >>159 に答えれる方いませんか?
ここはリスト議論のスレッドですか?
ここはリスト議論のスレッドですか?
190デフォルトの名無しさん
2020/09/20(日) 08:14:35.07ID:nUMPJonN191デフォルトの名無しさん
2020/09/20(日) 09:09:08.11ID:sD69NUu0 挿入が必要なら普通はヒープ組むのになんで誰も突っ込まんの?
192デフォルトの名無しさん
2020/09/20(日) 10:27:51.76ID:iRiS7kHZ テキストエディタのようなものだと、アプリを起動して編集し始めた時から、
新しく追加したデータに関しては、対応するノードは、Heapからアロケートしても、
連続したアドレスに載っている。
ロードした直後、最後の行のノードのアドレスと、編集で追加したノード
のアドレスが近い。
編集で追加した行の直前直後のノードのアドレスと、編集で追加したノードのアドレスは
不連続である。
しかし、キャッシュは、何も、最後の1つのページだけしか覚えておけないわけでなく、
1000種類位は覚えておける。
だから、このくらいだと、どちらもキャッシュに乗ることになる。
なお、ArrayListの場合、途中へ追加すると、半分近くの要素に対してコピー動作が
必要になるが、その際、キャッシュを全て使い切ってしまうことがある。
配列の全データが100MBだとすると、このコピー動作のために100MB分のデータが
いったんキャッシュに読み込まれる必要がある。
キャッシュはL3ですら8MB程度しかないので、これだと全くキャッシュが足りなくなる。
その点、LinkedListは、このようなキャッシュ汚染は生じない。
新しく追加したデータに関しては、対応するノードは、Heapからアロケートしても、
連続したアドレスに載っている。
ロードした直後、最後の行のノードのアドレスと、編集で追加したノード
のアドレスが近い。
編集で追加した行の直前直後のノードのアドレスと、編集で追加したノードのアドレスは
不連続である。
しかし、キャッシュは、何も、最後の1つのページだけしか覚えておけないわけでなく、
1000種類位は覚えておける。
だから、このくらいだと、どちらもキャッシュに乗ることになる。
なお、ArrayListの場合、途中へ追加すると、半分近くの要素に対してコピー動作が
必要になるが、その際、キャッシュを全て使い切ってしまうことがある。
配列の全データが100MBだとすると、このコピー動作のために100MB分のデータが
いったんキャッシュに読み込まれる必要がある。
キャッシュはL3ですら8MB程度しかないので、これだと全くキャッシュが足りなくなる。
その点、LinkedListは、このようなキャッシュ汚染は生じない。
193デフォルトの名無しさん
2020/09/20(日) 10:32:00.78ID:iRiS7kHZ194デフォルトの名無しさん
2020/09/20(日) 10:48:59.50ID:iRiS7kHZ >>193
テキストエディタの例だと、100万行のファイルを読み込んだとしても、
実際に閲覧したり、書き込んだりしたい場所は、数箇所に集中することが
多い。
LinkedListの場合だと、編集時に行を挿入する場合、全データを移動する
必要が無いので、1行当たり、数10バイトくらいのコピーで済む。
この場合、キャッシュ汚染はほとんど生じない。
一方、ArrayListだと、100万行のコピー動作が必要になり、その際に
キャッシュを浪費してしまう。
テキストエディタの例だと、100万行のファイルを読み込んだとしても、
実際に閲覧したり、書き込んだりしたい場所は、数箇所に集中することが
多い。
LinkedListの場合だと、編集時に行を挿入する場合、全データを移動する
必要が無いので、1行当たり、数10バイトくらいのコピーで済む。
この場合、キャッシュ汚染はほとんど生じない。
一方、ArrayListだと、100万行のコピー動作が必要になり、その際に
キャッシュを浪費してしまう。
195デフォルトの名無しさん
2020/09/20(日) 10:55:21.87ID:GOdQy7G8196デフォルトの名無しさん
2020/09/20(日) 11:02:59.45ID:iRiS7kHZ197デフォルトの名無しさん
2020/09/20(日) 14:40:25.89ID:2Z1dYVPL なんでテキストエディタの例でArratListが出てくるんだ
198デフォルトの名無しさん
2020/09/20(日) 17:50:32.22ID:rmF3ZCsn スレ間違ってますよ
199デフォルトの名無しさん
2020/09/21(月) 04:23:45.31ID:6Tk/tz3a200デフォルトの名無しさん
2020/09/22(火) 01:30:08.72ID:oMNW4x3G CSのスレでも立てればいいのにな
無駄なマウントとプライドで議論になってないじゃん
無駄なマウントとプライドで議論になってないじゃん
201デフォルトの名無しさん
2020/09/22(火) 02:42:29.78ID:EwzeVKsQ あっちで相手にされないからこっちに来るんだろう
202デフォルトの名無しさん
2020/09/22(火) 02:55:14.94ID:3nDER7vv あっちってどこ?
203デフォルトの名無しさん
2020/09/22(火) 03:04:18.34ID:EwzeVKsQ 本人にだけ判れば良いんだよ
204デフォルトの名無しさん
2020/09/23(水) 23:05:59.13ID:JL46F86k Rust 初心者ってか始めてもないけど、
fn main() {
println!("Hello, world!");
}
これってセミコロン要るの?
fn main() {
println!("Hello, world!");
}
これってセミコロン要るの?
205デフォルトの名無しさん
2020/09/23(水) 23:22:55.07ID:O1ICXtuo206デフォルトの名無しさん
2020/09/24(木) 04:24:32.56ID:sKL6gd3p なんでreturn文省略するん
207デフォルトの名無しさん
2020/09/24(木) 08:46:29.52ID:imaK44AN208デフォルトの名無しさん
2020/09/24(木) 19:57:00.21ID:AHitBJm/ 関数型のフリがしたいから。
209デフォルトの名無しさん
2020/09/24(木) 20:40:06.68ID:aHCv/EIt return省略は関数型なのか?
関数型をふりをするなら {} を省略して = で書くとかでは
関数型をふりをするなら {} を省略して = で書くとかでは
210デフォルトの名無しさん
2020/09/24(木) 21:02:07.22ID:anZxJGRt lispのprognみたいな感じじゃね。
セミコロンを書くとその後に空の式があるようにみなすのはイケてないと思うけど。
セミコロンを書くとその後に空の式があるようにみなすのはイケてないと思うけど。
211デフォルトの名無しさん
2020/09/24(木) 21:34:50.13ID:sW11ypIO expressionをstatementにするのがセミコロン
statementは`()`として扱われる
セミコロン不要にして必要に応じて`()`を明記するスタイルのほうがイケてたとは思う
returnを省略するのは慣習
関数を含めて式が値に評価されていくというメンタルモデルなので
”return文”という感覚ではないのかもね
statementは`()`として扱われる
セミコロン不要にして必要に応じて`()`を明記するスタイルのほうがイケてたとは思う
returnを省略するのは慣習
関数を含めて式が値に評価されていくというメンタルモデルなので
”return文”という感覚ではないのかもね
212デフォルトの名無しさん
2020/09/25(金) 01:43:09.63ID:rqLAnW3Q C++系言語に見た目を近づけるという設計意図があるから()を明記するという判断にはならなかっただろうとおもう
213デフォルトの名無しさん
2020/09/25(金) 06:33:09.44ID:JNOcuagu 戻り値型の宣言にも -> () っていちいち書かなくていいしなあ
そういうもんだとしか
そういうもんだとしか
214デフォルトの名無しさん
2020/09/25(金) 07:11:20.18ID:LUJK9/4D なんで戻り値は型推論してくんないんだろう。
215デフォルトの名無しさん
2020/09/25(金) 07:33:16.25ID:SbSfhD0k 単純に、セミコロンの有無だけで区別するのが視認性が良くないんだよな。
エディタの方で違いを目立たせられたりしたらいいけど。
エディタの方で違いを目立たせられたりしたらいいけど。
216デフォルトの名無しさん
2020/09/25(金) 07:58:20.78ID:ZK6gJNpW217デフォルトの名無しさん
2020/09/25(金) 19:12:30.94ID:yo3ZA1rx >>215
いまさらどうにもならないが、使いはじめの頃は、もっと視認性のあるフレーズ使ってくれてたらなぁと思ってた。
例えば、F#の
hofe |> ignore
なんかは、冗長ではあるが逆に視認性も良く、捨てる気満々の書き方で気に入ってる。
いまさらどうにもならないが、使いはじめの頃は、もっと視認性のあるフレーズ使ってくれてたらなぁと思ってた。
例えば、F#の
hofe |> ignore
なんかは、冗長ではあるが逆に視認性も良く、捨てる気満々の書き方で気に入ってる。
218デフォルトの名無しさん
2020/09/25(金) 23:12:55.80ID:ZK6gJNpW そういえばelse節の無いif式は()に評価されるんだっけか
219デフォルトの名無しさん
2020/09/25(金) 23:17:40.79ID:ZK6gJNpW https://doc.rust-lang.org/reference/expressions/return-expr.html
ってかそもそもRustのreturnは式だったわ
return bar;はreturn文じゃなくて式文の一種だったわ
ってかそもそもRustのreturnは式だったわ
return bar;はreturn文じゃなくて式文の一種だったわ
220デフォルトの名無しさん
2020/09/26(土) 06:07:19.66ID:Jy/kksq4 コンピューターはともかく、人間にはreturnくらいの文字的冗長性があった方が視認性がいい。
221デフォルトの名無しさん
2020/09/26(土) 08:31:48.23ID:2tuZfHCi ifは末尾}に;不要なのにletは末尾}に;必要なのだるい
222デフォルトの名無しさん
2020/09/26(土) 09:30:48.93ID:en54jqZM >>220
returnがあればearly returnだと識別できるのでその意味では視認性は高い
ただセミコロンというC系言語経験者が注視しない記号に新しく重要な意味をもたせたから戸惑う
>>221
ifブロック末尾のセミコロンは常に省略できるわけじゃない
https://doc.rust-lang.org/reference/statements.html#expression-statements
セミコロンがないと意図通りパースできないケースってほとんどないと思うので
そのうちJSのASIのようなものでセミコロン不要になる未来もある気がする
returnがあればearly returnだと識別できるのでその意味では視認性は高い
ただセミコロンというC系言語経験者が注視しない記号に新しく重要な意味をもたせたから戸惑う
>>221
ifブロック末尾のセミコロンは常に省略できるわけじゃない
https://doc.rust-lang.org/reference/statements.html#expression-statements
セミコロンがないと意図通りパースできないケースってほとんどないと思うので
そのうちJSのASIのようなものでセミコロン不要になる未来もある気がする
223デフォルトの名無しさん
2020/09/26(土) 10:01:37.83ID:GOW7LNc9 個人的にはセミコロンうんぬんよりifの中括弧が苦痛
/* c */
#include <stdio.h>
#define min(a, b) ((a) < (b) ? (a) : (b)) // スッキリ
int min2(int a, int b) {return a < b ? a : b;} // ややスッキリ
int min3(int a, int b) {
if (a < b) return a; else return b; // スッキリ?
}
int main() {
printf("%d ", min(3, 2));
printf("%d ", min2(3, 2));
printf("%d ", min3(3, 2));
return 0;
}
// rust
fn main() {
let min = |a, b| if a < b {a} else {b}; // 中括弧が嫌
//let min = |a, b| if (a < b) a else b; // これならスッキリ
//let min = |a, b| if a < b then a else b; // あるいはこれ
println!("{}", min(3, 2));
}
(* ocaml *)
let min a b = if a < b then a else b (* スッキリ *)
let () = print_int (min 3 2)
/* c */
#include <stdio.h>
#define min(a, b) ((a) < (b) ? (a) : (b)) // スッキリ
int min2(int a, int b) {return a < b ? a : b;} // ややスッキリ
int min3(int a, int b) {
if (a < b) return a; else return b; // スッキリ?
}
int main() {
printf("%d ", min(3, 2));
printf("%d ", min2(3, 2));
printf("%d ", min3(3, 2));
return 0;
}
// rust
fn main() {
let min = |a, b| if a < b {a} else {b}; // 中括弧が嫌
//let min = |a, b| if (a < b) a else b; // これならスッキリ
//let min = |a, b| if a < b then a else b; // あるいはこれ
println!("{}", min(3, 2));
}
(* ocaml *)
let min a b = if a < b then a else b (* スッキリ *)
let () = print_int (min 3 2)
224デフォルトの名無しさん
2020/09/26(土) 12:46:41.58ID:XnDuVG4Q はいはいdangling else dangling else
225デフォルトの名無しさん
2020/09/26(土) 13:01:32.24ID:nz56jET8 Goもそうだけど、条件式に括弧を使わないのがいまだに慣れない。
226デフォルトの名無しさん
2020/09/26(土) 13:49:35.37ID:Rxc/dJS+ BASIC は要らなかったから慣れてる。
3項演算子考えたやつは天才。
3項演算子考えたやつは天才。
227デフォルトの名無しさん
2020/09/26(土) 14:34:05.78ID:d+bfMgei228デフォルトの名無しさん
2020/09/26(土) 14:40:21.79ID:Lg3GZEAb >>225
そのへんとモジュールまわりはPythonの影響かなと思った
そのへんとモジュールまわりはPythonの影響かなと思った
229デフォルトの名無しさん
2020/09/26(土) 16:28:05.98ID:en54jqZM >>228
PythonというよりRubyだろね
コアチームは過去も含めてRubyコミュニティ出身者が多いから
モジュールはPythonのようにファイルベースじゃなくキーワードで名前空間をきちんと切るし
クロージャの書き方だったりreturnを書かない慣習だったりも他言語に比べて類似性が高い
PythonというよりRubyだろね
コアチームは過去も含めてRubyコミュニティ出身者が多いから
モジュールはPythonのようにファイルベースじゃなくキーワードで名前空間をきちんと切るし
クロージャの書き方だったりreturnを書かない慣習だったりも他言語に比べて類似性が高い
230デフォルトの名無しさん
2020/09/26(土) 16:42:46.56ID:d+bfMgei 型システムは ML 系の言語でよくあるやつだし、
そっち方面の影響もあるんじゃないの?
そっち方面の影響もあるんじゃないの?
231デフォルトの名無しさん
2020/09/26(土) 17:41:02.34ID:iHt0gIo3232デフォルトの名無しさん
2020/09/26(土) 17:52:07.70ID:YRaYmiXd233デフォルトの名無しさん
2020/09/26(土) 18:02:33.75ID:2tuZfHCi if a < b => a else => b っていう変なもんを思いついてしまった
だーめだこりゃ
だーめだこりゃ
234デフォルトの名無しさん
2020/09/27(日) 04:32:18.28ID:Wycq4Ck4 セミコロンとかはEdition上げて撤廃してほしいけど、ここまでRustのOSS書かれてたら無理だろなぁ...
235デフォルトの名無しさん
2020/09/27(日) 07:58:10.90ID:ePGxxCtX >>232
それはSmalltalkだろ
それはSmalltalkだろ
236デフォルトの名無しさん
2020/09/27(日) 08:00:03.20ID:6sIZ9RBB Rust, Go, Elixir などの新しい言語は、Ruby の影響が強い。
Ruby で最も良いのは、すべての進数の数値リテラルに、_ を含められること
こういうコメントを書かなくて済む
1000000 // 1_000_000
Ruby で最も良いのは、すべての進数の数値リテラルに、_ を含められること
こういうコメントを書かなくて済む
1000000 // 1_000_000
237デフォルトの名無しさん
2020/09/27(日) 09:53:51.56ID:xq8pY9v9 戻り値の有無がセミコロンだけで区別されている現状をどうにかしないとそもそもセミコロン廃止なんて
無理だろうけど、セミコロンレスってそんなにいいかねぇ?
行の折り返しを間違えて別の文になってしまってもスルーされる場合があるのがなんか嫌。
ASIがあるJSでもメジャーどころのスタイルガイドはみんなASIを信用しないでセミコロン使うことに
なっているし。
pythonだとセミコロン使わないスタイルも多いけど、あっちはインデントで判別できるしね。
無理だろうけど、セミコロンレスってそんなにいいかねぇ?
行の折り返しを間違えて別の文になってしまってもスルーされる場合があるのがなんか嫌。
ASIがあるJSでもメジャーどころのスタイルガイドはみんなASIを信用しないでセミコロン使うことに
なっているし。
pythonだとセミコロン使わないスタイルも多いけど、あっちはインデントで判別できるしね。
238デフォルトの名無しさん
2020/09/27(日) 10:45:39.75ID:5NvF/cEJ >>237
>ASIを信用しないでセミコロン使うことに
ASIを信用してないわけじゃないよ
ASIの仕様はJSの仕様で決まってるから例外的に挿入されない場合もはっきり分かってる
セミコロンを使うスタイルが多いのはミニファイとかを考慮してるから
JSの場合は普通に書いてる分にはセミコロンの有無でほぼ違いが無い上に
セミコロンレスで書いてもリンター使って自動挿入できるから実質書き手の自由
1行に複数文書いてるときでもなければセミコロンに特別な意味はないから気にする必要がない
>ASIを信用しないでセミコロン使うことに
ASIを信用してないわけじゃないよ
ASIの仕様はJSの仕様で決まってるから例外的に挿入されない場合もはっきり分かってる
セミコロンを使うスタイルが多いのはミニファイとかを考慮してるから
JSの場合は普通に書いてる分にはセミコロンの有無でほぼ違いが無い上に
セミコロンレスで書いてもリンター使って自動挿入できるから実質書き手の自由
1行に複数文書いてるときでもなければセミコロンに特別な意味はないから気にする必要がない
239デフォルトの名無しさん
2020/09/27(日) 11:08:19.83ID:OQ0JAVEc セミコロンは基本的にはあっていいけどたまに}のあとに;必要なやつとかあったりしてこれはイヤ
240デフォルトの名無しさん
2020/09/27(日) 11:27:51.54ID:xq8pY9v9 たしかに「ASIを信用しないで」というと疑っているみたいだから「依存しないで」の方が
適切だったかも。
いずれにしても、どのスタイルガイドもプログラマの意図と異なる判断がされる危険を
挙げていて、それを防ぐためには明示的にセミコロンを記述する方が良いと謳っている。
minifyはそれこそminify時にセミコロンを補完すればいいんだから関係ないと思う。
適切だったかも。
いずれにしても、どのスタイルガイドもプログラマの意図と異なる判断がされる危険を
挙げていて、それを防ぐためには明示的にセミコロンを記述する方が良いと謳っている。
minifyはそれこそminify時にセミコロンを補完すればいいんだから関係ないと思う。
241デフォルトの名無しさん
2020/09/27(日) 11:40:37.55ID:NFiicpwR242デフォルトの名無しさん
2020/09/27(日) 12:00:44.11ID:4LQaG5je セミコロン撤廃要望多いとは思えないんだけどRFCとか書いてる人いるのか?
243デフォルトの名無しさん
2020/09/27(日) 12:27:31.82ID:MoLnvbgN セミコロン書き忘れる事は多々あるけど、意図しない値が返ってとかならない(はず)なので別に困らない
それより、Docs.rsに見にくいクレートが有る方が困る、AutoとBlanket以外のShow hidden undocumented itemsを
デフォルトで展開するオプションが有れば良いのに、この議題はどっかで見たような気がする。
それより、Docs.rsに見にくいクレートが有る方が困る、AutoとBlanket以外のShow hidden undocumented itemsを
デフォルトで展開するオプションが有れば良いのに、この議題はどっかで見たような気がする。
244デフォルトの名無しさん
2020/09/27(日) 12:34:01.78ID:FTgnsV+4 >>241
1967のPL/Iあたりからかな?登場時期からするともっと広まってもおかしくなかった気もするけど、16/32ビットリテラルしかなかった時代には需要なかったんだろうね。verilogは何ビットでもいけるから必要だけど。
最近は128ビット型とかBigIntとかでようやく必要になってきたってことか。
1967のPL/Iあたりからかな?登場時期からするともっと広まってもおかしくなかった気もするけど、16/32ビットリテラルしかなかった時代には需要なかったんだろうね。verilogは何ビットでもいけるから必要だけど。
最近は128ビット型とかBigIntとかでようやく必要になってきたってことか。
245デフォルトの名無しさん
2020/09/27(日) 12:55:24.47ID:ePGxxCtX rustのAPI documentなんか読みづらい気がする
うまく説明できないけど
型クラスのあたりも見づらい
うまく説明できないけど
型クラスのあたりも見づらい
246デフォルトの名無しさん
2020/09/27(日) 13:55:00.63ID:5NvF/cEJ >>240
きちんとした手順にそったminifyだけを指して言ったわけじゃないんだが
GoogleやAirbnbのstyle guideを見ると確かにそういう意図ではないみたいだね
npmやGithubみたいにセミコロンレスのstandard style使ってるところも多いから
「メジャーどころはみんなセミコロンを明示的に書く」というのはちと言い過ぎかな
いずれにしろJSの場合は1コマンドで一瞬で切り替え可能で書く時はどっちでいいから
Rustとはかなり事情が違うと思う
きちんとした手順にそったminifyだけを指して言ったわけじゃないんだが
GoogleやAirbnbのstyle guideを見ると確かにそういう意図ではないみたいだね
npmやGithubみたいにセミコロンレスのstandard style使ってるところも多いから
「メジャーどころはみんなセミコロンを明示的に書く」というのはちと言い過ぎかな
いずれにしろJSの場合は1コマンドで一瞬で切り替え可能で書く時はどっちでいいから
Rustとはかなり事情が違うと思う
247デフォルトの名無しさん
2020/09/27(日) 14:15:05.14ID:5NvF/cEJ >>242
探してみたらRFCあったけどCloseされてた
https://github.com/rust-lang/rfcs/issues/2583
C/C++/G#/Javaあたりから来た人はセミコロンあるのが普通だろうけど
Go/Scala/Swift/Kotlin/Ruby/Pythonだとセミコロンないのが普通なので面倒くさく感じるのよ
RFCのやり取りや↓ここの議論を見るとセミコロンが不要になる可能性はもうないね
https://internals.rust-lang.org/t/make-some-separators-optional/4846
探してみたらRFCあったけどCloseされてた
https://github.com/rust-lang/rfcs/issues/2583
C/C++/G#/Javaあたりから来た人はセミコロンあるのが普通だろうけど
Go/Scala/Swift/Kotlin/Ruby/Pythonだとセミコロンないのが普通なので面倒くさく感じるのよ
RFCのやり取りや↓ここの議論を見るとセミコロンが不要になる可能性はもうないね
https://internals.rust-lang.org/t/make-some-separators-optional/4846
248デフォルトの名無しさん
2020/09/27(日) 15:12:03.29ID:FTgnsV+4 セミコロンレスってフォーマット的な改行と文末の改行を文脈を見て判断する必要があるから好きじゃないなぁ。
一文が複数行になりやすいビルダーパターンとかイテレータアダプタの類いが特に。
入力する側としてはほとんど無意識に打ってるから特に面倒とも感じないし。
一文が複数行になりやすいビルダーパターンとかイテレータアダプタの類いが特に。
入力する側としてはほとんど無意識に打ってるから特に面倒とも感じないし。
249デフォルトの名無しさん
2020/09/27(日) 15:18:06.12ID:ePGxxCtX IntelliJ使えばセミコロンを殆ど見えないような色に設定できるぞ
250デフォルトの名無しさん
2020/09/27(日) 19:00:04.17ID:4LQaG5je 典型的なbikeshed
251デフォルトの名無しさん
2020/09/28(月) 01:45:21.81ID:1Vhx5XJ3 >>223
ocamlってセミコロン必要じゃなかったっけ?
ocamlってセミコロン必要じゃなかったっけ?
252デフォルトの名無しさん
2020/09/28(月) 07:53:40.34ID:cZtg7eSb >>251
この例では必要になる場所は無い
この例では必要になる場所は無い
253デフォルトの名無しさん
2020/09/28(月) 09:58:13.64ID:UVos1NUC docsのフロント部分は特に強いUXデザイナーがいない感じがすごくする
254デフォルトの名無しさん
2020/09/28(月) 18:49:05.66ID:5HiAAmxH >>251
トップレベルの分を区切るのに;;を使う
ただしletの直前、ファイルの最後、などでは省略できる
https://ocaml.org/learn/tutorials/structure_of_ocaml_programs.ja.html
構文は
https://ocaml.org/releases/4.11/htmlman/language.html
let min a b = if a < b then a else b (* letの直前だから;;省略 *)
let () = print_int (min 3 2) (* ファイルの最後だから;;省略 *)
トップレベルの分を区切るのに;;を使う
ただしletの直前、ファイルの最後、などでは省略できる
https://ocaml.org/learn/tutorials/structure_of_ocaml_programs.ja.html
構文は
https://ocaml.org/releases/4.11/htmlman/language.html
let min a b = if a < b then a else b (* letの直前だから;;省略 *)
let () = print_int (min 3 2) (* ファイルの最後だから;;省略 *)
255デフォルトの名無しさん
2020/10/01(木) 14:03:33.62ID:WCPslwmj slice::windowsのstrバージョンみたいなのってないのでしょうか。
ようするにある文字列に含まれる連続するn文字を頭から順に返すイテレータを作ってくれるようなやつです。
ようするにある文字列に含まれる連続するn文字を頭から順に返すイテレータを作ってくれるようなやつです。
256デフォルトの名無しさん
2020/10/01(木) 18:29:40.74ID:HHhjPj0U >>255
ないのでVec<char>を生成してwindowsを呼ぶとか
let cs: Vec<_> = String::from("あいうえお").chars().collect();
let ws: Vec<_> = cs.windows(2).map(|v| v.iter().collect::<String>()).collect();
ないのでVec<char>を生成してwindowsを呼ぶとか
let cs: Vec<_> = String::from("あいうえお").chars().collect();
let ws: Vec<_> = cs.windows(2).map(|v| v.iter().collect::<String>()).collect();
257デフォルトの名無しさん
2020/10/01(木) 18:54:04.45ID:i8Yvf3kp 文字幅が可変長 (utf-8) であっても windows みたいなことをするのはそんなにコスト大きくないよね?
ふたつのポインタを一文字ずつ進めるだけなんだから O(N) で出来るはず。
ふたつのポインタを一文字ずつ進めるだけなんだから O(N) で出来るはず。
258デフォルトの名無しさん
2020/10/02(金) 09:46:31.03ID:D4+ZSkLl アロケートなしだと、
(0..s.len()-n).map(|i| &s[i..i+n])
となるけど自分で-nとか+nとかiとかやるのめっちゃアホくさいしそのうちミスりそう
(0..s.len()-n).map(|i| &s[i..i+n])
となるけど自分で-nとか+nとかiとかやるのめっちゃアホくさいしそのうちミスりそう
259デフォルトの名無しさん
2020/10/02(金) 14:20:31.00ID:iKrdrFom >>258
アロケートなしならこれでもいけるはず。utf8を食わせると死ぬけど
.as_bytes().windows(2).map(|v| std::str::from_utf8(v).unwrap())
アロケートなしならこれでもいけるはず。utf8を食わせると死ぬけど
.as_bytes().windows(2).map(|v| std::str::from_utf8(v).unwrap())
260デフォルトの名無しさん
2020/10/08(木) 09:18:16.25ID:PyhRFgfx アロケートなしっていっても結局collect::<Vec<_>>()するんだからなしって表現は違うくないか
261デフォルトの名無しさん
2020/10/08(木) 09:56:48.36ID:Ney38h5h collectするとは限らんやろ
ヒット数だけ必要な場合とか
ヒット数だけ必要な場合とか
262デフォルトの名無しさん
2020/10/09(金) 10:41:17.11ID:mqWQnM2v Rust 1.47リリース
263デフォルトの名無しさん
2020/10/12(月) 16:21:28.62ID:Z3Kcjb2S Vec<T>って既に有る要素の中身を修正する方法はありますか。
有れば教えていただければ幸いです。
有れば教えていただければ幸いです。
264デフォルトの名無しさん
2020/10/12(月) 16:28:10.38ID:Z3Kcjb2S 自分が見た本ではvec[0]でアクセスする例は出てなかったと思うのですが
今ネットで見たところ
let mut vec = Vec::new();
vec.push(1);
vec.push(2);
vec[0] = 7
という例がありました。
Vec<T>の要素Tが構造体の場合、
vec[0]のアドレスを参照で受け取ってアクセスするには
let &mut a=&v[0];
a.xxx = yyy;
でよいのでしょうか?
(基礎が分かって無いだけかもしれませんが)
今ネットで見たところ
let mut vec = Vec::new();
vec.push(1);
vec.push(2);
vec[0] = 7
という例がありました。
Vec<T>の要素Tが構造体の場合、
vec[0]のアドレスを参照で受け取ってアクセスするには
let &mut a=&v[0];
a.xxx = yyy;
でよいのでしょうか?
(基礎が分かって無いだけかもしれませんが)
265デフォルトの名無しさん
2020/10/12(月) 16:30:35.47ID:ldeP4Qys .get
.get_mut
.get_mut
266デフォルトの名無しさん
2020/10/12(月) 16:48:39.55ID:Z3Kcjb2S267デフォルトの名無しさん
2020/10/12(月) 17:02:51.68ID:tosLr/AM std::ops::Indexとstd::ops::IndexMutをリファレンスで見て
268デフォルトの名無しさん
2020/10/12(月) 17:06:26.06ID:tosLr/AM269デフォルトの名無しさん
2020/10/12(月) 19:19:30.09ID:Z3Kcjb2S270デフォルトの名無しさん
2020/10/12(月) 19:50:22.11ID:ldeP4Qys https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a388e403b6cd7afe902a9fd8618b5a65
質問内容とブレてたらごめんなさい
質問内容とブレてたらごめんなさい
271デフォルトの名無しさん
2020/10/12(月) 19:53:01.17ID:P0Nqqpd2 TがCopyだと let &mut a = &mut v[0]; ならコンパイル通っちゃうのは落とし穴かもしれない
272デフォルトの名無しさん
2020/10/12(月) 19:54:11.97ID:P0Nqqpd2 >>270
get_mutをunwrapしちゃうなら普通に &mut v[0] で良いと思う
get_mutをunwrapしちゃうなら普通に &mut v[0] で良いと思う
273デフォルトの名無しさん
2020/10/20(火) 10:25:29.99ID:ohigEgI0 Rustは2番目にエネルギー効率の良い言語
https://okuranagaimo.blogspot.com/2020/10/blog-post_19.html
https://okuranagaimo.blogspot.com/2020/10/blog-post_19.html
274デフォルトの名無しさん
2020/10/20(火) 12:34:59.11ID:MZbW1JAa アセンブラ使えないやつがいるとは。
275デフォルトの名無しさん
2020/10/20(火) 19:00:44.91ID:CHq3Beyq 勉強始めたばかりですが変数のシャドーイングって必要ですか?
なんとなくグローバルに置いた変数もシャドーイングできそうなのですが実害は出たことありますか?
多分ないと思いますが…
なんとなくグローバルに置いた変数もシャドーイングできそうなのですが実害は出たことありますか?
多分ないと思いますが…
276デフォルトの名無しさん
2020/10/20(火) 19:31:52.86ID:KPdri9BA Which Programming Languages Use the Least Electricity?
https://thenewstack.io/which-programming-languages-use-the-least-electricity/
> Energy consumed Run-time
> C 57J 2019 ms
> Rust 59J 2103 ms
> C++ 77J 3155 ms
> Ada 98J 3740 ms
> Java 114J 3821 ms
https://thenewstack.io/which-programming-languages-use-the-least-electricity/
> Energy consumed Run-time
> C 57J 2019 ms
> Rust 59J 2103 ms
> C++ 77J 3155 ms
> Ada 98J 3740 ms
> Java 114J 3821 ms
277デフォルトの名無しさん
2020/10/20(火) 20:46:27.74ID:7hmMXh1W デバッグやバグ修正に必要なエネルギーコストを加味したらCより効率よくなりそう
278デフォルトの名無しさん
2020/10/21(水) 02:18:21.88ID:Q9+kxPSM Rustはビルドでめっちゃ電力使うやろ
279デフォルトの名無しさん
2020/11/01(日) 07:27:17.14ID:an3UASXf let mut bt = (0..10).collect::<BTreeSet<_>>();
for e in bt.iter() {
// ここで条件に一致する要素をbtから削除したい
}
こんな感じのものを作りたくなったのですがどうすればいいのでしょうか?
うまい具合にやる方法が思いつかなくて以下のようにやっているのですが、なんというかすごくアホくさいというか・・・
let mut bt = (0..10).collect::<BTreeSet<_>>();
let mut temp = Vec::new()
for e in bt.iter() {
if e == Foo { temp.push(e); } // 削除予定のものをtempに入れる
}
for e in temp {
bt.remove(&e);
}
for e in bt.iter() {
// ここで条件に一致する要素をbtから削除したい
}
こんな感じのものを作りたくなったのですがどうすればいいのでしょうか?
うまい具合にやる方法が思いつかなくて以下のようにやっているのですが、なんというかすごくアホくさいというか・・・
let mut bt = (0..10).collect::<BTreeSet<_>>();
let mut temp = Vec::new()
for e in bt.iter() {
if e == Foo { temp.push(e); } // 削除予定のものをtempに入れる
}
for e in temp {
bt.remove(&e);
}
280デフォルトの名無しさん
2020/11/01(日) 11:33:15.11ID:lQA9Y5E+ let bt = (0..10).filter(|e| eが要るなら真).collect::<BtreeSet<_>>();
じゃあかんのか
じゃあかんのか
281デフォルトの名無しさん
2020/11/01(日) 13:38:40.42ID:an3UASXf btがこの例のとおりのものならそれでいいんですけど、
いろんな状況でbtに要素が追加されるっていう感じです
あと、if e == Fooはちょっと雑すぎましたif is_xxx(e)とかのほうがよいです
いろんな状況でbtに要素が追加されるっていう感じです
あと、if e == Fooはちょっと雑すぎましたif is_xxx(e)とかのほうがよいです
282デフォルトの名無しさん
2020/11/01(日) 17:37:39.36ID:o3MRCmTo コンテナのイテレーターのループ回してる間にコンテナの要素を追加や削除は出来ない。これは他のコンテナ(Vecなど)でもそう。どうしてもやるなら内部実装を理解した上でunsafeな方法で。
「いろんな状況でbtに要素が追加される」がループ中なのか何なのか分からないのでどうしようもないが、
let bt = bt.into_iter().filter(|&e| e == foo).collect::<std::collections::BTreeSet<_>>();
で新たなbtを作るか、
もとのbtから要素を削除するにしても
for e in bt.iter().filter(|&&e| e == foo).cloned().collect::<Vec<_>>() {
bt.remove(&e);
}
などでもう少し簡潔に書ける。
「いろんな状況でbtに要素が追加される」がループ中なのか何なのか分からないのでどうしようもないが、
let bt = bt.into_iter().filter(|&e| e == foo).collect::<std::collections::BTreeSet<_>>();
で新たなbtを作るか、
もとのbtから要素を削除するにしても
for e in bt.iter().filter(|&&e| e == foo).cloned().collect::<Vec<_>>() {
bt.remove(&e);
}
などでもう少し簡潔に書ける。
283デフォルトの名無しさん
2020/11/01(日) 18:31:04.97ID:adfXjKjb BTreeSet::drain_filter が安定化されるのを待とう
std::collections の unatable な機能を含めて切り出した crate とかあれば良いのに
std::collections の unatable な機能を含めて切り出した crate とかあれば良いのに
284デフォルトの名無しさん
2020/11/01(日) 18:31:59.68ID:adfXjKjb >>282
Vec::retain がある。
Vec::retain がある。
285デフォルトの名無しさん
2020/11/01(日) 19:09:00.30ID:o3MRCmTo retainやdrain_filterについて不勉強だった。ありがとう。
286デフォルトの名無しさん
2020/11/06(金) 03:44:45.46ID:S3a0GE/K Rust book 構造体の章の以下のコード片なんですが
let mut user1 = User {
email: String::from("someone@example.com"),
email: String::from("someusername123"),
active: true,
sign_in_count: 1,
}
user1.email = String::from("another@example.com");
//コード片ここまで
最後の行でどこからも参照されなくなった元の
String::from("someone@example.com")
は、どういう理屈で解放されるんでしょうか?
もしGC言語なら最後の行でGC対象になるとこですけど。
Rust bookのこれ以前の章で、変数がスコープを外れるときdropが呼ばれることの説明はあったのですが、変数の束縛外れちゃったStringはいつ、どこで?
let mut user1 = User {
email: String::from("someone@example.com"),
email: String::from("someusername123"),
active: true,
sign_in_count: 1,
}
user1.email = String::from("another@example.com");
//コード片ここまで
最後の行でどこからも参照されなくなった元の
String::from("someone@example.com")
は、どういう理屈で解放されるんでしょうか?
もしGC言語なら最後の行でGC対象になるとこですけど。
Rust bookのこれ以前の章で、変数がスコープを外れるときdropが呼ばれることの説明はあったのですが、変数の束縛外れちゃったStringはいつ、どこで?
287デフォルトの名無しさん
2020/11/06(金) 04:09:10.53ID:2cok4roU288デフォルトの名無しさん
2020/11/06(金) 04:35:01.60ID:B4UB4dMh289デフォルトの名無しさん
2020/11/06(金) 07:48:41.67ID:aWxirctc >>288
https://doc.rust-lang.org/reference/destructors.html
> Assignment also runs the destructor of its left-hand operand, if it's initialized.
だそうです
https://doc.rust-lang.org/reference/destructors.html
> Assignment also runs the destructor of its left-hand operand, if it's initialized.
だそうです
290デフォルトの名無しさん
2020/11/06(金) 08:36:34.29ID:HarnCsHz 考えてみりゃ確かにunstableのcrateってめっちゃいい案だな
use unstable::prelude::*;
で全部取り込める上にバージョンあげたらunstableから無くなってstdの方が挿し代わって使われるし
use unstable::prelude::*;
で全部取り込める上にバージョンあげたらunstableから無くなってstdの方が挿し代わって使われるし
291デフォルトの名無しさん
2020/11/06(金) 08:47:23.44ID:mKCogF8p 明らかに可読性悪い言語なのだがあと5年くらいしたらこの界隈も気づくかもね
292デフォルトの名無しさん
2020/11/06(金) 08:54:20.60ID:wXTP989a 5年先いくパイセン降臨
293デフォルトの名無しさん
2020/11/06(金) 09:52:32.90ID:S3a0GE/K >>289
なるほど!分かりましたありがとう
なるほど!分かりましたありがとう
294デフォルトの名無しさん
2020/11/06(金) 11:09:54.01ID:ifaT2orV 可読性が悪い「言語」ってそうそうあるもんかね
295デフォルトの名無しさん
2020/11/06(金) 11:22:47.79ID:JyOrEzG9 それ、「俺様には理解できない」にderefされてます
296デフォルトの名無しさん
2020/11/06(金) 20:08:48.42ID:g6FZ2Lxp >>291
esolangはさておきAPLとかは難読言語といっても良いかも
あとは暗黙の○○が多い言語や記号が多い言語は初心者にとっては難読だと思うけど
Rustはこれらには当てはまらないと思うけど、どういう点で難読と思ったのか教えて欲しい
esolangはさておきAPLとかは難読言語といっても良いかも
あとは暗黙の○○が多い言語や記号が多い言語は初心者にとっては難読だと思うけど
Rustはこれらには当てはまらないと思うけど、どういう点で難読と思ったのか教えて欲しい
297デフォルトの名無しさん
2020/11/11(水) 20:37:16.07ID:ZuM/CkEs >>291
お前は5年後もC++使ってろよ
お前は5年後もC++使ってろよ
298デフォルトの名無しさん
2020/11/12(木) 10:54:00.16ID:uK53dAw4 fn foo(bar: impl Buzz)
というシグネチャは、
fn foo<T: Buzz>(bar: T)
の構文糖なんですよね?
では、
fn foo() -> impl Buzz
を、
fn foo<T: Buzz>() -> T
と書けないのはなぜなんでしょう?
というシグネチャは、
fn foo<T: Buzz>(bar: T)
の構文糖なんですよね?
では、
fn foo() -> impl Buzz
を、
fn foo<T: Buzz>() -> T
と書けないのはなぜなんでしょう?
299デフォルトの名無しさん
2020/11/12(木) 11:47:01.17ID:tcFc7SO9300デフォルトの名無しさん
2020/11/12(木) 12:00:24.36ID:tcFc7SO9301デフォルトの名無しさん
2020/11/12(木) 13:24:24.86ID:uK53dAw4 >>299
Rust bookにはsyntax sugarと書かれていたのですが…
https://doc.rust-lang.org/book/ch10-02-traits.html#trait-bound-syntax
> The impl Trait syntax works for straightforward cases but is actually syntax sugar for a longer form, which is called a trait bound; it looks like this:
>>300
ありがとうございます。
Rust bookはあんまり信用できないのかな…
Rust bookにはsyntax sugarと書かれていたのですが…
https://doc.rust-lang.org/book/ch10-02-traits.html#trait-bound-syntax
> The impl Trait syntax works for straightforward cases but is actually syntax sugar for a longer form, which is called a trait bound; it looks like this:
>>300
ありがとうございます。
Rust bookはあんまり信用できないのかな…
302デフォルトの名無しさん
2020/11/12(木) 16:23:24.97ID:tcFc7SO9303デフォルトの名無しさん
2020/11/12(木) 18:49:52.91ID:C+/hhwIt 記号が多い言語は英語の苦手な日本人には有利だ
英文に近づけようとする言語は不利だ
英文に近づけようとする言語は不利だ
304デフォルトの名無しさん
2020/11/13(金) 19:01:00.42ID:nD6TGu67 そんなあなたにPerlがあるよ
305デフォルトの名無しさん
2020/11/13(金) 23:39:03.73ID:RhbFV+AU APLもおるでよ
306デフォルトの名無しさん
2020/11/14(土) 06:16:49.16ID:6dxHy4Fn python最強じゃん
307デフォルトの名無しさん
2020/11/14(土) 09:55:40.26ID:B7e1nuZg LISPかな。まあ記号と言っても括弧ばっかりだが。
308デフォルトの名無しさん
2020/11/14(土) 10:07:50.72ID:DnZAmAgg 「Lots of Isolated Silly Parentheses」の略だからな。
309デフォルトの名無しさん
2020/11/14(土) 10:52:27.43ID:wQlu6eHI310デフォルトの名無しさん
2020/11/14(土) 12:17:47.68ID:dRjRf4O1311デフォルトの名無しさん
2020/11/14(土) 13:14:02.66ID:DnZAmAgg The name "turbofish" was made up by reddit user deadstone in 2015, and has since caught on in the Rust community, being used even in the official documentation.
「turbofish」という名前は、2015年にredditユーザーのdeadstone氏によって作成され、それ以来Rustコミュニティで定着し、公式ドキュメントでも使用されています。
「turbofish」という名前は、2015年にredditユーザーのdeadstone氏によって作成され、それ以来Rustコミュニティで定着し、公式ドキュメントでも使用されています。
312デフォルトの名無しさん
2020/11/15(日) 04:06:11.96ID:H90rIdiK function<>()の方が良かったけどね。パーサーの複雑性があって解決されてなく、もうここまで広まったしいいやってなってるけど
313デフォルトの名無しさん
2020/11/15(日) 23:56:20.08ID:HUIHtxgp >>301,302
型制約と存在型じゃ概念が違うから構文糖は語弊がある。
生成するコードはどちらもモノモーフィックな関数吐くけど存在型は第一引数の違いだけでコンパイル時に
ディスパッチ先が一意に決まらないケースが有るからマルチメソッドを直接サポートしない弊害があるかな。
型制約と存在型じゃ概念が違うから構文糖は語弊がある。
生成するコードはどちらもモノモーフィックな関数吐くけど存在型は第一引数の違いだけでコンパイル時に
ディスパッチ先が一意に決まらないケースが有るからマルチメソッドを直接サポートしない弊害があるかな。
314デフォルトの名無しさん
2020/11/20(金) 21:14:37.50ID:YhokOqrJ Rust 1.48リリース
315デフォルトの名無しさん
2020/11/20(金) 21:23:36.45ID:g8U1YOSi Internet Archive、Flashコンテンツをアーカイブ プラグインなしで21年以降も閲覧可能に
https://www.itmedia.co.jp/news/articles/2011/20/news143.html
プログラミング言語Rustで作られたFlashのエミュレータ「Ruffle」を使うことで、Flashプラグインをインストールしなくても、WebAssembyが動作するWebブラウザさえあれば動作するとしている。
https://www.itmedia.co.jp/news/articles/2011/20/news143.html
プログラミング言語Rustで作られたFlashのエミュレータ「Ruffle」を使うことで、Flashプラグインをインストールしなくても、WebAssembyが動作するWebブラウザさえあれば動作するとしている。
316デフォルトの名無しさん
2020/11/20(金) 23:10:09.72ID:znicv9zG すげえなww
でも先人の苦労の作品が残ってよかった
でも先人の苦労の作品が残ってよかった
317デフォルトの名無しさん
2020/11/22(日) 16:39:30.67ID:ujQ9d+0r Rust bookのDropトレイト解説のページ ( https://doc.rust-jp.rs/book-ja/ch15-03-drop.html ) で質問です。
以下のようなコードなのですが、
struct CustomSmartPointer {
data: String,
}
impl Drop for CustomSmartPointer {
fn drop(&mut self) {
println!("Dropping CustomSmartPointer with data `{}`!", self.data);
}
}
fn main() {
let c = CustomSmartPointer { data: String::from("my stuff") };
println!("CustomSmartPointers created.");
}
これ、dropの実装部分にprintln!しか書かれてませんが&self.dataの処理は書かなくてよいのでしょうか?
例えば、println!の下に、
drop(&self.data);
のように。
どちらかがコンパイルエラーになるならいいのですが、書いても書かなくてもどちらでも問題なくコンパイルが通ってしまい、困惑しています。
以下のようなコードなのですが、
struct CustomSmartPointer {
data: String,
}
impl Drop for CustomSmartPointer {
fn drop(&mut self) {
println!("Dropping CustomSmartPointer with data `{}`!", self.data);
}
}
fn main() {
let c = CustomSmartPointer { data: String::from("my stuff") };
println!("CustomSmartPointers created.");
}
これ、dropの実装部分にprintln!しか書かれてませんが&self.dataの処理は書かなくてよいのでしょうか?
例えば、println!の下に、
drop(&self.data);
のように。
どちらかがコンパイルエラーになるならいいのですが、書いても書かなくてもどちらでも問題なくコンパイルが通ってしまい、困惑しています。
318デフォルトの名無しさん
2020/11/22(日) 16:58:52.26ID:JIsF8Dpm >>317
もう少し細かい話はこの辺に書いてあるよ。
https://doc.rust-lang.org/std/ops/trait.Drop.html
簡単に言えばそのdataは勝手に解放されるからdropは不要。
解放以外で何か処理したいなら書けばいい。
drop(&self.data)としたとしても、それは参照を作ってその参照を即座に破棄してるだけなので特に意味はない。
本当にdataを解放したいならdrop(self.data)になるけどこれはコンパイルエラーになるはず。
もう少し細かい話はこの辺に書いてあるよ。
https://doc.rust-lang.org/std/ops/trait.Drop.html
簡単に言えばそのdataは勝手に解放されるからdropは不要。
解放以外で何か処理したいなら書けばいい。
drop(&self.data)としたとしても、それは参照を作ってその参照を即座に破棄してるだけなので特に意味はない。
本当にdataを解放したいならdrop(self.data)になるけどこれはコンパイルエラーになるはず。
319デフォルトの名無しさん
2020/11/22(日) 17:05:23.09ID:JIsF8Dpm あ、最後の行のは多分deref抜けてるな。
いずれにしてもdropするなら所有権を取る必要があるけど、
&mut selfからdataの所有権を取る方法はないので
正しくdropするコードを書けばエラーになるはず。
いずれにしてもdropするなら所有権を取る必要があるけど、
&mut selfからdataの所有権を取る方法はないので
正しくdropするコードを書けばエラーになるはず。
320デフォルトの名無しさん
2020/11/22(日) 17:16:38.55ID:ujQ9d+0r >>318-319
おお、
drop(self.data);
でも
drop((*self).data);
でも同じ、
cannot move out of `self.data` which is behind a mutable reference
エラーでました!
スッキリしましたありがとうございます。
std::mem::dropの実装って
pub fn drop<T>(_x: T) { }
だったんですねぇ…
おお、
drop(self.data);
でも
drop((*self).data);
でも同じ、
cannot move out of `self.data` which is behind a mutable reference
エラーでました!
スッキリしましたありがとうございます。
std::mem::dropの実装って
pub fn drop<T>(_x: T) { }
だったんですねぇ…
321デフォルトの名無しさん
2020/11/24(火) 00:31:06.85ID:EBaS3Lgi Rust bookのRefCell解説のページ ( https://doc.rust-jp.rs/book-ja/ch15-05-interior-mutability.html ) で質問です。
以下のようなコードなのですが、
pub trait Messenger {
fn send(&self, msg: &str);
}
pub struct LimitTracker<'a, T: 'a + Messenger> {
messenger: &'a T,
value: usize,
max: usize,
}
impl<'a, T> LimitTracker<'a, T>
where T: Messenger {
pub fn new(messenger: &T, max: usize) -> LimitTracker<T> {
LimitTracker {
messenger,
value: 0,
max,
}
}
// 以下略
pub struct LimitTracker<'a, T: 'a + Messenger> {
の行でトレイト境界に
'a + Messenger
を指定しているようなのですが、
このような書き方今までに出てこなかったので試しに
pub struct LimitTracker<'a, T: Messenger> {
と書き替えてみたところ、警告もなしにコンパイルできてしまいました…
これ、何の意味があるんでしょう?
以下のようなコードなのですが、
pub trait Messenger {
fn send(&self, msg: &str);
}
pub struct LimitTracker<'a, T: 'a + Messenger> {
messenger: &'a T,
value: usize,
max: usize,
}
impl<'a, T> LimitTracker<'a, T>
where T: Messenger {
pub fn new(messenger: &T, max: usize) -> LimitTracker<T> {
LimitTracker {
messenger,
value: 0,
max,
}
}
// 以下略
pub struct LimitTracker<'a, T: 'a + Messenger> {
の行でトレイト境界に
'a + Messenger
を指定しているようなのですが、
このような書き方今までに出てこなかったので試しに
pub struct LimitTracker<'a, T: Messenger> {
と書き替えてみたところ、警告もなしにコンパイルできてしまいました…
これ、何の意味があるんでしょう?
322デフォルトの名無しさん
2020/11/24(火) 01:32:20.18ID:mGIqKDo2323デフォルトの名無しさん
2020/11/24(火) 14:58:09.97ID:p7TzmKlx >>322
ズバリのページありがとうございます!
ズバリのページありがとうございます!
324デフォルトの名無しさん
2020/11/24(火) 21:59:32.67ID:wabd38wc どういたしまして
325デフォルトの名無しさん
2020/11/25(水) 14:15:02.94ID:3ZJ1Ge7R &mut TがCopyとCloneをimplしていないのは理解しているんだけど
let a: &mut i32 = &mut 0;
let b = a;
dbg!(a);
これがaがムーブされてエラーになって
let a: &mut i32 = &mut 0;
let b: &mut i32 = a;
dbg!(a);
これがエラーにならないのはナンデ?
let a: &mut i32 = &mut 0;
let b = a;
dbg!(a);
これがaがムーブされてエラーになって
let a: &mut i32 = &mut 0;
let b: &mut i32 = a;
dbg!(a);
これがエラーにならないのはナンデ?
326デフォルトの名無しさん
2020/11/25(水) 14:51:10.49ID:wYoO0jiQ >>325
それが借用でしょ。
それが借用でしょ。
327デフォルトの名無しさん
2020/11/25(水) 14:59:59.26ID:wYoO0jiQ >>325
b が使われないことはわかってるので無かったことになる。
b が使われるなら借用中ということでエラーになるよ。
↓ これはエラーになる。
let a: &mut i32 = &mut 0;
let b: &mut i32 = a;
dbg!(a);
dbg!(b);
b が使われないことはわかってるので無かったことになる。
b が使われるなら借用中ということでエラーになるよ。
↓ これはエラーになる。
let a: &mut i32 = &mut 0;
let b: &mut i32 = a;
dbg!(a);
dbg!(b);
328デフォルトの名無しさん
2020/11/25(水) 15:24:43.58ID:s/U6WABr これは僕もエラーにしてほしいなあ
何か深い理由があるんだろうけど…
何か深い理由があるんだろうけど…
329デフォルトの名無しさん
2020/11/25(水) 22:28:12.61ID:70iTIiqa let a: &mut i32 = &mut 0;
let b: &mut i32 = a;
dbg!(b);
dbg!(a);
これをOKにしたいんだから3行目が無くてもOKなのは必然
let b: &mut i32 = a;
dbg!(b);
dbg!(a);
これをOKにしたいんだから3行目が無くてもOKなのは必然
330デフォルトの名無しさん
2020/11/25(水) 22:32:25.21ID:g8/riQpL エラーにしたい理由がよく分からんな。
実際bを使ってないんならエラーになる意味がないし、
typoでbを使い損ねてるならbが未使用のwarningは出るから気付けるし。
実際bを使ってないんならエラーになる意味がないし、
typoでbを使い損ねてるならbが未使用のwarningは出るから気付けるし。
331デフォルトの名無しさん
2020/11/26(木) 02:46:48.20ID:Hqg/GFYt332デフォルトの名無しさん
2020/11/26(木) 10:22:00.12ID:LVnm3iYq fn noop<T>(t: T) -> T {
t
}
let a: &mut i32 = &mut 0;
let b = noop(a);
dbg!(b);
dbg!(a);
これはエラーになる
let a: &mut i32 = &mut 0;
let b: &mut i32 = noop(a);
dbg!(b);
dbg!(a);
エラーにならない
ナンデ?
t
}
let a: &mut i32 = &mut 0;
let b = noop(a);
dbg!(b);
dbg!(a);
これはエラーになる
let a: &mut i32 = &mut 0;
let b: &mut i32 = noop(a);
dbg!(b);
dbg!(a);
エラーにならない
ナンデ?
333デフォルトの名無しさん
2020/11/26(木) 14:53:19.68ID:LVnm3iYq https://users.rust-lang.org/t/questions-about-mut-t-and-move-semantics-mut-t-is-move-only/37484/13
ナンデかわかりました
implicit reborrowというものらしいです
ナンデかわかりました
implicit reborrowというものらしいです
334デフォルトの名無しさん
2020/11/26(木) 16:45:55.16ID:02Rh/1GY 俺も↓これみてやっと分かった
https://github.com/rust-lang/rust/issues/35919#issuecomment-304130115
https://stackoverflow.com/a/58587870
関数のシグニチャの場合を含めて型が明示されてれば
&mut T -> & mut Tの場合でもimplicit reborrowが発生してmoveじゃなくなる
(auto-reborrowやreborrow coercionと呼んでる人も)
今まで気にしたことなかったわ
https://github.com/rust-lang/rust/issues/35919#issuecomment-304130115
https://stackoverflow.com/a/58587870
関数のシグニチャの場合を含めて型が明示されてれば
&mut T -> & mut Tの場合でもimplicit reborrowが発生してmoveじゃなくなる
(auto-reborrowやreborrow coercionと呼んでる人も)
今まで気にしたことなかったわ
335デフォルトの名無しさん
2020/11/26(木) 17:14:06.85ID:O9/RzT4k なんでこんなの入れたんだろう…
336デフォルトの名無しさん
2020/11/26(木) 18:11:09.60ID:02Rh/1GY Type Coercionの一貫
ここに少し理由が書いてある
https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/check/coercion/index.html
↓これも同じ理由でエラーにならない
let a: &mut i32 = &mut 0;
let b = a as &mut i32;
dbg!(b);
dbg!(a);
ここに少し理由が書いてある
https://doc.rust-lang.org/nightly/nightly-rustc/rustc_typeck/check/coercion/index.html
↓これも同じ理由でエラーにならない
let a: &mut i32 = &mut 0;
let b = a as &mut i32;
dbg!(b);
dbg!(a);
337デフォルトの名無しさん
2020/11/26(木) 23:01:58.61ID:SYxS73xz 最後にアクセスしたところで借用が終了すると思えば特に違和感はない
338デフォルトの名無しさん
2020/11/26(木) 23:48:56.99ID:O9/RzT4k 変数宣言時に決まらず、今後スコープが終わるまでに使われるか使われないかで変わってしまうのか
339デフォルトの名無しさん
2020/12/04(金) 00:56:22.75ID:g/NRvcV0 >>334
>&mut T -> & mut Tの場合でもimplicit reborrowが発生してmoveじゃなくなる
stackoverflowの方でも説明されてるけど、&mut T -> & mut Tじゃなくて&'a mut T -> &'b mut Tだな。
>&mut T -> & mut Tの場合でもimplicit reborrowが発生してmoveじゃなくなる
stackoverflowの方でも説明されてるけど、&mut T -> & mut Tじゃなくて&'a mut T -> &'b mut Tだな。
340デフォルトの名無しさん
2020/12/04(金) 03:01:18.62ID:2+VKdPy1 implicitにする必要あった?
便利さより明示・明確で行って欲しい
便利さより明示・明確で行って欲しい
341デフォルトの名無しさん
2020/12/04(金) 11:37:04.89ID:OAjYDL2x >>334のstackoverflowのコメント見れば必要だとしか
間違えたら単にコンパイルエラーになるわけで
間違えたら単にコンパイルエラーになるわけで
342デフォルトの名無しさん
2020/12/06(日) 23:56:40.78ID:0jqklMIU imple Trait for Something のTraitとSomething、逆の方が良かったなぁ
トレイトはまとめてモジュールにされることあるからimportしてからstructの直下でimplするからimpl struct with traitのほうが可読性高い、git的にも綺麗な差分の表示にもなるし
これなんか明確な理由とかないのかな?
トレイトはまとめてモジュールにされることあるからimportしてからstructの直下でimplするからimpl struct with traitのほうが可読性高い、git的にも綺麗な差分の表示にもなるし
これなんか明確な理由とかないのかな?
343デフォルトの名無しさん
2020/12/07(月) 00:00:26.20ID:owPfoMMb ないでしょうね
どっちにでも設計できたでしょうし
どっちにでも設計できたでしょうし
344デフォルトの名無しさん
2020/12/07(月) 00:39:06.96ID:O/wMvD4W 昔は impl Struct :Trait {} だった気がする
: だとどっちがどっちかわかりにくいみたいな議論はあったような
: だとどっちがどっちかわかりにくいみたいな議論はあったような
345デフォルトの名無しさん
2020/12/07(月) 00:39:59.19ID:O/wMvD4W あと impl Struct with Trait だと Struct "を" 実装すると読めるのがイマイチな気はする
346デフォルトの名無しさん
2020/12/07(月) 01:03:15.94ID:BaEMz00S impl Struct with Traitだと複数書くと同一Structを何回もimplすることになってちょっと変かも
このあたりはネイティブだと「てにをは」がおかしい感じに見えるのかもね
このあたりはネイティブだと「てにをは」がおかしい感じに見えるのかもね
347デフォルトの名無しさん
2020/12/08(火) 21:05:17.59ID:4EYeOh4b lifetime関係で文句言われまくって暗黙にした部分が多いんだろう。。そんな輩にrust使わせる必要なんてないのに。
348デフォルトの名無しさん
2020/12/09(水) 00:30:14.37ID:jODQKuwy 暗黙はイヤだあぁ〜っ!!
349デフォルトの名無しさん
2020/12/09(水) 10:40:53.58ID:LSaC/unp 適当なライフタイムパラメータをつけるとコンパイルできることもあると学んだ
350デフォルトの名無しさん
2020/12/09(水) 13:24:40.25ID:WuZTb4kZ qiitaに久々に良記事あったわ
351デフォルトの名無しさん
2020/12/09(水) 13:27:46.69ID:jODQKuwy >>350
ヒントくれ
ヒントくれ
352デフォルトの名無しさん
2020/12/10(木) 11:18:18.25ID:U7s1vwLT353デフォルトの名無しさん
2020/12/10(木) 11:43:02.02ID:U7s1vwLT354デフォルトの名無しさん
2020/12/10(木) 11:57:47.75ID:U7s1vwLT 正規表現やLISPなんかも可読性が低い。
355デフォルトの名無しさん
2020/12/10(木) 12:16:53.52ID:hyB2wVsL LISPが可読性低いはモグリ
356デフォルトの名無しさん
2020/12/10(木) 12:25:40.73ID:YXjbRyJb クポー!
357デフォルトの名無しさん
2020/12/10(木) 12:41:56.12ID:oYgS32h8 >>352
具体的な記述例上げてくれないと何の説得力も無いぞ
具体的な記述例上げてくれないと何の説得力も無いぞ
358デフォルトの名無しさん
2020/12/10(木) 15:03:07.81ID:YBB2SlAl いつものヤバイ人だってすぐわかるだろ
荒らしの相手をするのも荒らしだぞ
荒らしの相手をするのも荒らしだぞ
359デフォルトの名無しさん
2020/12/11(金) 11:56:33.87ID:/1hdqM5e Cを日常的に使っていた人がRustに移行しようとするとやりたいことが出来なくて
馬鹿馬鹿しくなる。
数学的には完全に安全な書き方なのにRustには怒られる。
馬鹿馬鹿しくなる。
数学的には完全に安全な書き方なのにRustには怒られる。
360デフォルトの名無しさん
2020/12/11(金) 12:12:02.16ID:NpU6prgS Rust by Example によれば
drop が (自動で) 呼ばれるのは「スコープの終わり」と書いてあるけど、
それは変わってないと考えていいよね?
最終のアクセスがスコープのまんなからへんだったとしても、
drop はスコープの最後ってのは今でも保証されるんだよね?
drop が (自動で) 呼ばれるのは「スコープの終わり」と書いてあるけど、
それは変わってないと考えていいよね?
最終のアクセスがスコープのまんなからへんだったとしても、
drop はスコープの最後ってのは今でも保証されるんだよね?
361デフォルトの名無しさん
2020/12/11(金) 12:22:51.07ID:aOnuSvpC っぱ、D言語よ
362デフォルトの名無しさん
2020/12/11(金) 12:39:48.46ID:RI9UvvOD363デフォルトの名無しさん
2020/12/11(金) 18:10:27.06ID:7ILiijQb 数学的に完全に安全であるって証明を必要十分な早さで必要十分な量のコードに対して出きる人なら
おとなしくC使ってた方が良いんじゃないですかね
おとなしくC使ってた方が良いんじゃないですかね
364デフォルトの名無しさん
2020/12/11(金) 20:55:17.88ID:FrajMXPf365デフォルトの名無しさん
2020/12/12(土) 01:56:14.01ID:4q8SABHv >>364
いやです。
いやです。
366デフォルトの名無しさん
2020/12/12(土) 01:56:52.38ID:4q8SABHv >>363
少なくともRustは使いません。
少なくともRustは使いません。
367デフォルトの名無しさん
2020/12/12(土) 02:31:40.86ID:ub7HMY53 >>366
さようなら
さようなら
368デフォルトの名無しさん
2020/12/12(土) 02:52:34.60ID:4q8SABHv 問題点を指摘されたら排除する風潮。
369デフォルトの名無しさん
2020/12/12(土) 02:55:04.93ID:ub7HMY53 だってあなたがここに残っても得られる物何もないでしょ
370デフォルトの名無しさん
2020/12/12(土) 03:02:09.48ID:SyIWV3x/ アメリカでは人気言語なんだろ?
つまり問題なく安全に使えてるってことだよね
つまり問題なく安全に使えてるってことだよね
371デフォルトの名無しさん
2020/12/12(土) 03:03:58.91ID:4q8SABHv >>370
本当はそんなに人気無い。
本当はそんなに人気無い。
372デフォルトの名無しさん
2020/12/12(土) 03:12:39.08ID:SyIWV3x/ 全お前の中ではそうだろうね
373デフォルトの名無しさん
2020/12/12(土) 03:12:53.23ID:Dxj0vT3B >>359
なんでunsafe使わなかったの?
なんでunsafe使わなかったの?
374デフォルトの名無しさん
2020/12/12(土) 15:08:06.15ID:c8Fd2aiR375デフォルトの名無しさん
2020/12/12(土) 15:30:46.47ID:0QXb5/mT 数学的にもOKでも、書いてるのはコードなんだからプログラミング的にもOKじゃないといけない
っていうマジレスでいい?
言語には仕様があるわけでどの言語でもそうだろ。
そもそもプログラミングしない方がいいよ、数学でもしてりゃいいじゃん
っていうマジレスでいい?
言語には仕様があるわけでどの言語でもそうだろ。
そもそもプログラミングしない方がいいよ、数学でもしてりゃいいじゃん
376デフォルトの名無しさん
2020/12/12(土) 16:08:31.70ID:Xc3o7Cw9 コンパイラが証明できないけど人間が証明できるときのためにunsafeがあるんだから使えばいいのに
377デフォルトの名無しさん
2020/12/12(土) 16:37:40.21ID:M7Hs6d8R 数学的には完全に安全ww
こんな低脳ワード使ってるやつ相手にして君たち頭おかしいんとちゃう?
こんな低脳ワード使ってるやつ相手にして君たち頭おかしいんとちゃう?
378デフォルトの名無しさん
2020/12/12(土) 17:13:45.58ID:ub7HMY53 完全に安全ってフレーズだけは韻踏んでて好き
379デフォルトの名無しさん
2020/12/12(土) 18:01:42.98ID:E+dxDDH/ チューリング安全
380デフォルトの名無しさん
2020/12/12(土) 23:00:12.57ID:a3JdWCxW ヨシ! 今日も一日 ご安全に
381デフォルトの名無しさん
2020/12/12(土) 23:31:38.16ID:Updd5mRQ 今日は安全日なの。
382デフォルトの名無しさん
2020/12/12(土) 23:32:54.53ID:obc9b6E9 まあrust使ってれば完全に安全とか言い出す馬鹿もいたしどこにでも馬鹿はおるわ。
383デフォルトの名無しさん
2020/12/13(日) 02:17:41.84ID:1g8P/X2h rustでRSSリーダー作れましゅか?
384デフォルトの名無しさん
2020/12/14(月) 12:25:27.59ID:6iyAwzKw 色々調べて学んでみたが個人的にはRustは好きな言語ではないし
本の帯に書かれているようなC/C++の代替になるようなものではない。
メモリー安全なのはポインタが理解できない人向け。
Ruby/Puthon/JSのようなスクリプト言語的な使い方ならある程度できそうだが
それらより遙かに難しくなっている側面が有ることも否めない。
C/C++のように自由にデータ構造を作るには向いていない。
C#やJavaは速度は落ちるが、C/C++のコードを容易に移植できたが
Rustは出来ない。
本の帯に書かれているようなC/C++の代替になるようなものではない。
メモリー安全なのはポインタが理解できない人向け。
Ruby/Puthon/JSのようなスクリプト言語的な使い方ならある程度できそうだが
それらより遙かに難しくなっている側面が有ることも否めない。
C/C++のように自由にデータ構造を作るには向いていない。
C#やJavaは速度は落ちるが、C/C++のコードを容易に移植できたが
Rustは出来ない。
385デフォルトの名無しさん
2020/12/14(月) 12:30:01.03ID:6iyAwzKw >>384
C#やJavaは、データ構造やアルゴリズムを自由に作りやすいC/C++の自由さを
速度やメモリー効率を落とすことで初心者やポインタが理解できない人でも
手に入れることが出来る言語であった。
RustはC/C++と比べて効率は落ちにくいが C/C++の自由さは手に入らない。
ポインタを良く理解している人であってもRustのsafeモードでは独自の
データ構造やアルゴリズムを作るのは非常に難解。
なぜならライフタイムやBox<T>などの仕様が明言されて無く不明確だから。
C#やJavaは、データ構造やアルゴリズムを自由に作りやすいC/C++の自由さを
速度やメモリー効率を落とすことで初心者やポインタが理解できない人でも
手に入れることが出来る言語であった。
RustはC/C++と比べて効率は落ちにくいが C/C++の自由さは手に入らない。
ポインタを良く理解している人であってもRustのsafeモードでは独自の
データ構造やアルゴリズムを作るのは非常に難解。
なぜならライフタイムやBox<T>などの仕様が明言されて無く不明確だから。
386デフォルトの名無しさん
2020/12/14(月) 13:20:59.79ID:P41Kk9Hq387デフォルトの名無しさん
2020/12/14(月) 13:30:32.20ID:B3PAtuba いつもの人だし関心するような内容あったか?
388デフォルトの名無しさん
2020/12/14(月) 13:39:47.48ID:P41Kk9Hq すまんな、rustスレ初めて覗いたんだ
389デフォルトの名無しさん
2020/12/14(月) 14:39:07.69ID:GNvWdWeF390デフォルトの名無しさん
2020/12/14(月) 14:40:42.59ID:olJ8vT42 この人ほんとゴミやな
Rustは優秀な老害フィルターかもしれん
Rustは優秀な老害フィルターかもしれん
391デフォルトの名無しさん
2020/12/14(月) 15:05:11.25ID:GNvWdWeF 嫌いなものを無理に使う必要ないんだが、それを何度も何度も言いに来られてもな
説明しても聞く気ないし
説明しても聞く気ないし
392デフォルトの名無しさん
2020/12/14(月) 15:39:33.85ID:SRefut4W 仕様が公開されていないおじさん
393デフォルトの名無しさん
2020/12/14(月) 16:56:39.26ID:XcunzViE 数学的に正しい仕様が公開されてないおじさん
394デフォルトの名無しさん
2020/12/15(火) 09:41:38.47ID:uMItmhUb 老害に失礼だろ(笑)
395デフォルトの名無しさん
2020/12/15(火) 09:52:45.57ID:ndUamRAR 具体的に何ができないか言ってくれないとただのお気持ち表明でしかない
396デフォルトの名無しさん
2020/12/15(火) 16:41:25.69ID:DgOkpJ7c リングバッファ実装でさえunsafe使わなきゃ無理だろ。
397デフォルトの名無しさん
2020/12/15(火) 18:07:45.20ID:08XnxdOZ リングバッファにunsafe必須とか正気か?
何も分かってないだけじゃん
何も分かってないだけじゃん
398デフォルトの名無しさん
2020/12/15(火) 18:38:51.06ID:cTRY0FQu 仮に unsafe 必須だとしてそれがどうだっていうんだ?
399デフォルトの名無しさん
2020/12/15(火) 19:50:18.09ID:DgOkpJ7c なるほどunsafeでもかまわんと。。まあそれでいいならそれでいいんじゃないですかね。
rustの旨味半減もいいとこだが。
https://github.com/rust-lang/rust/blob/master/library/core/src/alloc/mod.rs
rustの旨味半減もいいとこだが。
https://github.com/rust-lang/rust/blob/master/library/core/src/alloc/mod.rs
400デフォルトの名無しさん
2020/12/15(火) 20:31:28.92ID:ndUamRAR Vec使ったsafeな実装もできるだろうし、
パフォーマンスを求めるなら直接allocのAPIを叩くunsafeの実装もできる
dogmaticにならず目的に応じて適切な手段を使い分けられるというRustの良いところの例だと思うが
なんでunsafe使ったら負けみたいな思考になるのかが分からない
パフォーマンスを求めるなら直接allocのAPIを叩くunsafeの実装もできる
dogmaticにならず目的に応じて適切な手段を使い分けられるというRustの良いところの例だと思うが
なんでunsafe使ったら負けみたいな思考になるのかが分からない
401デフォルトの名無しさん
2020/12/15(火) 20:32:49.79ID:WLyCzOT+ むしろ libc crateだけで作ればいいんじゃないか
402デフォルトの名無しさん
2020/12/15(火) 21:30:40.05ID:+RD1gPFt unsafe使ったリングバッファで数学的に完全に安全てw
自分の書いたロジックをコンパイラが検証してくれないって話だったのかよ
自分の書いたロジックをコンパイラが検証してくれないって話だったのかよ
403デフォルトの名無しさん
2020/12/15(火) 21:56:57.57ID:/27NEAtR safeとunsafeを混ぜられるところはまさにRustの旨味そのものなんだが
404デフォルトの名無しさん
2020/12/16(水) 01:59:42.07ID:yml2nxMy そこまでしてRust使うならC++で十分。
405デフォルトの名無しさん
2020/12/16(水) 07:41:21.74ID:L6k9APCP >>404
unsafeじゃない実装もできるいうてますやん
unsafeじゃない実装もできるいうてますやん
406デフォルトの名無しさん
2020/12/16(水) 11:49:20.44ID:tsGP+5/P 全部unsafeで常に安全性に気を使わなければならないC++
一部のunsafeな箇所の安全性にさえ気をつければ、大部分のsafeな箇所はコンパイラに従うだけで安全になるRust
C++の方が楽と感じるのはなぜ?使い慣れているから?コンパイラに叱られないから?
一部のunsafeな箇所の安全性にさえ気をつければ、大部分のsafeな箇所はコンパイラに従うだけで安全になるRust
C++の方が楽と感じるのはなぜ?使い慣れているから?コンパイラに叱られないから?
407デフォルトの名無しさん
2020/12/16(水) 12:51:22.00ID:N/7dwjAk 数学的にというがそれはどうせ高校までの数学でしょ?
大学で教わった群論や離散数学を含んでるのか?
大学で教わった群論や離散数学を含んでるのか?
408デフォルトの名無しさん
2020/12/16(水) 12:57:08.01ID:XkwPQibg 数学的に安全というのはCoq使って検証したとか
言ってもらわないとなあ
言ってもらわないとなあ
409デフォルトの名無しさん
2020/12/16(水) 13:02:30.37ID:2c+prgNQ 一気に議論がチープになった
「数学的」でNG推奨
「数学的」でNG推奨
410デフォルトの名無しさん
2020/12/16(水) 13:56:32.92ID:zVHRhpaQ RustBeltやRustHornみたいな取り組みに期待したい
411デフォルトの名無しさん
2020/12/16(水) 14:07:09.63ID:tsGP+5/P miriってどうなの?
412デフォルトの名無しさん
2020/12/16(水) 14:47:33.79ID:zVHRhpaQ miriは普通に使えるんじゃない?
といっても実行パスでUB踏んでないか見るだけだから
RustBeltみたいな証明とは違うけど
といっても実行パスでUB踏んでないか見るだけだから
RustBeltみたいな証明とは違うけど
413デフォルトの名無しさん
2020/12/16(水) 16:16:13.30ID:qBZDuvPr >>409
お前それ数学的に証明できんの?
お前それ数学的に証明できんの?
414デフォルトの名無しさん
2020/12/16(水) 18:05:54.84ID:QJd1nMyw >>414
私は馬鹿だから、あなたがとってもうらやましいですね…
私は馬鹿だから、あなたがとってもうらやましいですね…
416デフォルトの名無しさん
2020/12/16(水) 18:22:19.17ID:tsGP+5/P >>414
C++の言語仕様完全に理解してそう。すごい
C++の言語仕様完全に理解してそう。すごい
417デフォルトの名無しさん
2020/12/17(木) 00:47:25.43ID:X4tT/GwL418デフォルトの名無しさん
2020/12/17(木) 15:00:55.83ID:dPcuBcMK >>417
それでもミスるのが人間。そういった経験からシステム的にミスを無くそうと試みているのがrust。
それをわかった上で俺はミスしないって言ってるのはただの経験不足か、プログラムを全然組まないやつだな。
それでもミスるのが人間。そういった経験からシステム的にミスを無くそうと試みているのがrust。
それをわかった上で俺はミスしないって言ってるのはただの経験不足か、プログラムを全然組まないやつだな。
419デフォルトの名無しさん
2020/12/17(木) 16:21:39.70ID:lSe9thVt >>417
(とりあえず unsafe を使う必要がないようなコードで)
Rust を使って最初からエラーなしで通すことが出来るんか?
それでどこかで引っかかるようなら C++ でもたぶん出来てないぞ。
(とりあえず unsafe を使う必要がないようなコードで)
Rust を使って最初からエラーなしで通すことが出来るんか?
それでどこかで引っかかるようなら C++ でもたぶん出来てないぞ。
420デフォルトの名無しさん
2020/12/17(木) 17:13:31.93ID:lDGBWs83 触れるなよもう……
421デフォルトの名無しさん
2020/12/17(木) 17:54:41.43ID:Lgh9khpQ cd ~/.cargo/registry/index/github.com-1ecc6299db9ec823
git pull https://github.com/rust-lang/crates.io-index.git
git pull https://github.com/rust-lang/crates.io-index.git
422デフォルトの名無しさん
2020/12/17(木) 19:07:39.53ID:mqVedE2Y D言語はどうなったんや?
423デフォルトの名無しさん
2020/12/17(木) 19:08:57.68ID:h5oPvIGR まだ生きてんだw
424デフォルトの名無しさん
2020/12/17(木) 19:35:09.90ID:zyd/WMbf D言語のリファレンスって平易な英語で書かれていて、自分でドキュメントを書く時にすごく参考になる
425デフォルトの名無しさん
2020/12/18(金) 03:45:53.54ID:WanfFh5H426デフォルトの名無しさん
2020/12/18(金) 04:06:31.91ID:4UaQE5Dn 経験的ねぇw
数学得意な奴が使いそうな言葉だねw
数学得意な奴が使いそうな言葉だねw
>>425
メモリ関連のバグは「確率が低い」では全然だめですよ、バグを作ってしまうことは仕方ないにしても、最初から根絶を目指さなくてはいけないかと
私なら、最低限 new/delete はオーバーロードしてラッパを書き 未 delete・重複 delete くらいは確認しておきますね
まあ、最近はお気楽に unique_ptr, shared_ptr で妥協することがほとんどですが、weak_ptr はちょっと怖くて使わないようにしています…
メモリ関連のバグは「確率が低い」では全然だめですよ、バグを作ってしまうことは仕方ないにしても、最初から根絶を目指さなくてはいけないかと
私なら、最低限 new/delete はオーバーロードしてラッパを書き 未 delete・重複 delete くらいは確認しておきますね
まあ、最近はお気楽に unique_ptr, shared_ptr で妥協することがほとんどですが、weak_ptr はちょっと怖くて使わないようにしています…
428デフォルトの名無しさん
2020/12/18(金) 08:33:16.84ID:8E8ygoYj >>425
あなたのプログラムでバグが起きる確率が低いことはどのように検証したのですか?
あなたのプログラムでバグが起きる確率が低いことはどのように検証したのですか?
429デフォルトの名無しさん
2020/12/18(金) 11:50:56.29ID:2oY35fJZ 経験的に、そうだからです
430デフォルトの名無しさん
2020/12/18(金) 12:17:36.04ID:QLPAoxRE そう、未だ気づかれていない大量のバグが潜んでいるのだった
431デフォルトの名無しさん
2020/12/18(金) 15:39:43.38ID:WanfFh5H みんな同じじゃないぞ。
頭にも才能があるのを忘れるな。
そうでないと高IQ者が活躍できない。
頭にも才能があるのを忘れるな。
そうでないと高IQ者が活躍できない。
432デフォルトの名無しさん
2020/12/18(金) 15:43:18.03ID:WanfFh5H >>427
QZは馬鹿。
QZは馬鹿。
434デフォルトの名無しさん
2020/12/18(金) 15:56:33.29ID:WanfFh5H >>433
普通、高IQといえば、IQ=140以上だろう。
普通、高IQといえば、IQ=140以上だろう。
435デフォルトの名無しさん
2020/12/18(金) 16:25:31.81ID:D1qPLrji IQ高いけどとても残念な人なんですね
436デフォルトの名無しさん
2020/12/18(金) 16:45:14.29ID:e23FtnoV >>434
メンサの方ですね、証拠をどうぞ
メンサの方ですね、証拠をどうぞ
437デフォルトの名無しさん
2020/12/18(金) 16:58:40.57ID:y5AIURZA >>431
それでメモリ関連のバグの有無はどういう基準で判定してるんですか?
それでメモリ関連のバグの有無はどういう基準で判定してるんですか?
438デフォルトの名無しさん
2020/12/18(金) 16:58:41.81ID:WanfFh5H QZの方が最悪だ。
自分と自分の周りの価値観がすべてだと思っている。
平均の人々と秀才とはどこまで行っても違う。
言語の好みから何から何まで。
必要としていることも何もかも。
自分と自分の周りの価値観がすべてだと思っている。
平均の人々と秀才とはどこまで行っても違う。
言語の好みから何から何まで。
必要としていることも何もかも。
>>438
>自分と自分の周りの価値観がすべてだと思っている。
私は私の持つ価値観以外にも、別の価値観やセンスオブバリューが存在し、かつ、私の持つ価値観よりも優れた価値観が存在し得ることも想定していますが、
私の発言の中に「自分と自分の周りの価値観がすべてだと思っている」とあなたに感じさせた部分がありましたら、是非ご指摘いただけるととても嬉しいです
>自分と自分の周りの価値観がすべてだと思っている。
私は私の持つ価値観以外にも、別の価値観やセンスオブバリューが存在し、かつ、私の持つ価値観よりも優れた価値観が存在し得ることも想定していますが、
私の発言の中に「自分と自分の周りの価値観がすべてだと思っている」とあなたに感じさせた部分がありましたら、是非ご指摘いただけるととても嬉しいです
440デフォルトの名無しさん
2020/12/18(金) 17:46:11.20ID:OB9lVkoO 経験的に数学的に完全に安全
これが高IQ語法か
これが高IQ語法か
>>440
それって変てこな語法ですよね
数学的に正しいのであれば、それは経験とか履歴とかヒストリーとかにまったく関係なく、
数学的に正しいと証明された時点で、現存宇宙のビッグバン以前、宇宙死以後にも、数学的に正しいのに
ど う し て 「 経 験 的 」 と い う 単 語 を 使 用 し て い る の で し ょ う か ?
それって変てこな語法ですよね
数学的に正しいのであれば、それは経験とか履歴とかヒストリーとかにまったく関係なく、
数学的に正しいと証明された時点で、現存宇宙のビッグバン以前、宇宙死以後にも、数学的に正しいのに
ど う し て 「 経 験 的 」 と い う 単 語 を 使 用 し て い る の で し ょ う か ?
442デフォルトの名無しさん
2020/12/18(金) 19:22:04.03ID:ZgVdoEAh >>425
残念ながらお前の同僚や部下は違うんだ
残念ながらお前の同僚や部下は違うんだ
443デフォルトの名無しさん
2020/12/18(金) 19:41:43.87ID:0PDslekh >>436
年内に会費払わなきゃいけないのを思い出した。ありがとう。
年内に会費払わなきゃいけないのを思い出した。ありがとう。
>>436
メンサの人ってどんな人なんでしょう?
一度お会いしたいです
お話しするなかで、私のような馬鹿がもう少し生きやすくなるコツみたいなものが私にも感じられたら(多分理解は無理だと思います…)とても嬉しいですね
メンサの人ってどんな人なんでしょう?
一度お会いしたいです
お話しするなかで、私のような馬鹿がもう少し生きやすくなるコツみたいなものが私にも感じられたら(多分理解は無理だと思います…)とても嬉しいですね
445デフォルトの名無しさん
2020/12/18(金) 22:14:54.92ID:+Wrhvh6s せっかくのRustスレなのにどうしてこんなカオスなスレになっちまったんだ…
446デフォルトの名無しさん
2020/12/18(金) 22:29:37.14ID:y5YMvzUM キチガイに構っても得るものはない
447デフォルトの名無しさん
2020/12/18(金) 22:30:30.78ID:tYOLON+r unsafeの必要性がよくわかっていいじゃない
448デフォルトの名無しさん
2020/12/18(金) 22:40:26.63ID:CFV0tuU9 専門板名物
449デフォルトの名無しさん
2020/12/22(火) 13:40:54.01ID:n+6lDw0n from_str を実装しようとしています。
入力となる文字列 (の一部) をスライスとして保持するようなデザインにしたいのですが、
ライフタイムの整合性を取れる書き方が出来ません。
FromStr はそういうことが出来ないように制約付けられたトレイトということなのでしょうか?
それとも工夫してどうにか出来るでしょうか?
やりたいことをコードで言えばこんな感じです。
use std::str::FromStr;
struct foo<'a>(&'a str);
impl<'a> FromStr for foo<'a> {
type Err = &'static str;
fn from_str(s: &'a str) -> std::result::Result<Self, Self::Err> {
Ok(foo(s))
}
}
入力となる文字列 (の一部) をスライスとして保持するようなデザインにしたいのですが、
ライフタイムの整合性を取れる書き方が出来ません。
FromStr はそういうことが出来ないように制約付けられたトレイトということなのでしょうか?
それとも工夫してどうにか出来るでしょうか?
やりたいことをコードで言えばこんな感じです。
use std::str::FromStr;
struct foo<'a>(&'a str);
impl<'a> FromStr for foo<'a> {
type Err = &'static str;
fn from_str(s: &'a str) -> std::result::Result<Self, Self::Err> {
Ok(foo(s))
}
}
450デフォルトの名無しさん
2020/12/22(火) 15:57:10.65ID:RsVnnyiY >>449
できない
できない
451デフォルトの名無しさん
2020/12/22(火) 16:08:49.13ID:I4oG7AXR452デフォルトの名無しさん
2020/12/22(火) 16:33:15.01ID:n+6lDw0n453デフォルトの名無しさん
2020/12/24(木) 02:29:50.39ID:MTdaKV6Z 高IQの自分は、Cでメモリーマネジメントに悩まされたことは無かった。
一方、Rustはメモリーマネジメントが言語の中心に有り、プログラムの
アルゴリズムや本質的な処理よりもメモリーマネジメントに意識が集中して
しまう傾向がるため、人によるだろうが自分にとっては効率的な言語ではない。
一方、Rustはメモリーマネジメントが言語の中心に有り、プログラムの
アルゴリズムや本質的な処理よりもメモリーマネジメントに意識が集中して
しまう傾向がるため、人によるだろうが自分にとっては効率的な言語ではない。
454デフォルトの名無しさん
2020/12/24(木) 02:43:25.72ID:MTdaKV6Z 一般プログラマにとっては層ではないかも知れないが、
高IQのエキスパートにとっては、もっと安全に書ける方法を高頻度で天才的に
思いつくが、それはRustのチェッカと戦いとなる。
高IQのエキスパートにとっては、もっと安全に書ける方法を高頻度で天才的に
思いつくが、それはRustのチェッカと戦いとなる。
455デフォルトの名無しさん
2020/12/24(木) 06:27:27.80ID:NfngU3lj その話前も聞いた
456デフォルトの名無しさん
2020/12/24(木) 07:10:24.63ID:nIBEXBhK 糖質には構わず黙ってNGせよ
457デフォルトの名無しさん
2020/12/24(木) 07:21:13.47ID:0tNyylQf D言語使えよ
458デフォルトの名無しさん
2020/12/24(木) 10:57:33.54ID:wstK+Rzy Rustは、海外では既に大量の問題点が指摘されている:
https://www.reddit.com/r/rust/comments/ggyo51/criticisms_of_rust/
https://www.reddit.com/r/rust/comments/ggyo51/criticisms_of_rust/
459デフォルトの名無しさん
2020/12/24(木) 12:13:15.97ID:bpYd2wwx 日本語で頼む
460デフォルトの名無しさん
2020/12/24(木) 12:13:28.21ID:bpYd2wwx ヘタレなもんで
461デフォルトの名無しさん
2020/12/24(木) 12:41:29.49ID:5ZTYEX+H 学習曲線、ライブラリが未成熟、コンパイル遅い、っていういつものやつをみんながコメントしてるだけ
まぁ問題には違いないし改善も試みてるわけだけど
まぁ問題には違いないし改善も試みてるわけだけど
462デフォルトの名無しさん
2020/12/24(木) 12:46:16.64ID:QpBp7gJf >>461
それだけではないぞ。
それだけではないぞ。
463デフォルトの名無しさん
2020/12/24(木) 12:52:51.59ID:5ZTYEX+H464デフォルトの名無しさん
2020/12/24(木) 13:18:18.43ID:QpBp7gJf >>463
453, 454 もその一部に書いてあったものだ。覚えているものだけでも:
・Rustでは、本質ではなくメモリーマネジメントが前面に出たプログラミングとなってしまう。
・もっと良いモデルで書こうとしてもRustが安全性を理解できずエラーになってしまう。
・unsafeモードは悪者扱いされた結果ドキュメントが乏しく進化も遅いため使いにくい。
・長い歴史で実績の有るクラスの継承や例外機構が使えない言語設計。
・抽象化が深すぎて最適化を前提としているので最適化しないと極端に遅い。
・抽象化が深すぎるしマクロが多用されているためデバッガが使いにくくprintfデバッグ中心で行かざるを得ない。
・正確で詳細な言語仕様に乏しいためシステムプログラミングや組み込みには向いていない。
・コンパイラの多様性に乏しい(今のところrustc一個しかない)。
・ターゲットCPUがLLVMのものに限られるため、組み込みには向いていない。
・グラフィックが弱い。
・OpenGL、DirectXと併用するのが難しい。
・コンパイルが極端に遅い。
まだまだある。
453, 454 もその一部に書いてあったものだ。覚えているものだけでも:
・Rustでは、本質ではなくメモリーマネジメントが前面に出たプログラミングとなってしまう。
・もっと良いモデルで書こうとしてもRustが安全性を理解できずエラーになってしまう。
・unsafeモードは悪者扱いされた結果ドキュメントが乏しく進化も遅いため使いにくい。
・長い歴史で実績の有るクラスの継承や例外機構が使えない言語設計。
・抽象化が深すぎて最適化を前提としているので最適化しないと極端に遅い。
・抽象化が深すぎるしマクロが多用されているためデバッガが使いにくくprintfデバッグ中心で行かざるを得ない。
・正確で詳細な言語仕様に乏しいためシステムプログラミングや組み込みには向いていない。
・コンパイラの多様性に乏しい(今のところrustc一個しかない)。
・ターゲットCPUがLLVMのものに限られるため、組み込みには向いていない。
・グラフィックが弱い。
・OpenGL、DirectXと併用するのが難しい。
・コンパイルが極端に遅い。
まだまだある。
465デフォルトの名無しさん
2020/12/24(木) 13:20:42.91ID:QpBp7gJf >>464
[追加]
・抽象化が深すぎるため最適化無しでは極端に遅くなるため、デバッグ時も
最適化しなくてはまともに動作確認できない。これもデバッガが使い物に
ならなくてprintfデバッグ中心になる理由。
[追加]
・抽象化が深すぎるため最適化無しでは極端に遅くなるため、デバッグ時も
最適化しなくてはまともに動作確認できない。これもデバッガが使い物に
ならなくてprintfデバッグ中心になる理由。
466デフォルトの名無しさん
2020/12/24(木) 13:35:19.50ID:QpBp7gJf >>465
[追加2]
・リンカをVC++のlink.exeに頼っている。
・ツール類がVC++に比べてとても貧弱(赤ちゃんのおもちゃ)。
・unsafeを使わないととても面倒なことが多い。
・C++では、newとdelete以外にはコンパイラが独自提供しているもの(Hooks)
がないが、Rustでは大量に有る。例えば、Box<T>はソースがあるようにみえて
実質はコンパイラ提供のものなので途中でソースがなくなっている。
・C++を含めた多くの言語では、コードの位置の任意の一部を切り取って関数化する
ことは平易に機械的に(一般的に)できるが、Rustだと一般的には出来ない。
なぜならRustのコードは、その文脈においてのみ有効なコードに過ぎないからである。
文脈に応じて書き換えなければボローチェッカに文句を言われてコンパイルが通らない
から。
[追加2]
・リンカをVC++のlink.exeに頼っている。
・ツール類がVC++に比べてとても貧弱(赤ちゃんのおもちゃ)。
・unsafeを使わないととても面倒なことが多い。
・C++では、newとdelete以外にはコンパイラが独自提供しているもの(Hooks)
がないが、Rustでは大量に有る。例えば、Box<T>はソースがあるようにみえて
実質はコンパイラ提供のものなので途中でソースがなくなっている。
・C++を含めた多くの言語では、コードの位置の任意の一部を切り取って関数化する
ことは平易に機械的に(一般的に)できるが、Rustだと一般的には出来ない。
なぜならRustのコードは、その文脈においてのみ有効なコードに過ぎないからである。
文脈に応じて書き換えなければボローチェッカに文句を言われてコンパイルが通らない
から。
467デフォルトの名無しさん
2020/12/24(木) 13:38:01.51ID:QpBp7gJf >>466
[追加3]
・「Rustは独断的な言語です。それは良いことも悪いこともあります。
あなたがたまたまその意見に同意するならそれは良いことです、
さもなければそれは信じられないほど迷惑です。」
[追加3]
・「Rustは独断的な言語です。それは良いことも悪いこともあります。
あなたがたまたまその意見に同意するならそれは良いことです、
さもなければそれは信じられないほど迷惑です。」
468デフォルトの名無しさん
2020/12/24(木) 13:48:59.29ID:jsfyfwVN 「システムタイプのプロジェクトでやらなければならないことの多くは、Rustでは実行できず、安全でないコードが必要になります。そしてもちろん、使用する基盤となるモジュールの多くには、安全でないコードが含まれています。したがって、ある意味で、メモリの安全性の約束は実際には真実ではありません。それらのいずれかが、現在または将来、コードの他の場所で量子力学的問題を引き起こす可能性のあるメモリの問題を抱えている可能性があります。もちろん、それを実行する可能性のあるコードの量を大幅に削減しますが、それでもかなりの量があります。」
「RustがC ++の句読点の爆発を起こし、さらに悪化させたように感じます。コードのコンパクトさは、読みやすさに比べてそれほど価値があるとは思いません。Rustはシステムの言語であり、SPAフレームワークではありません。それを速くすることは目標ではありません、それを正しくすることは目標です、そしてそれはそれを何年にもわたって書くよりもそれを読んで編集することに非常に多くの時間を費やすことを含みます。」
「コンパイラには、C ++よりも多くのライブラリへのフックがあります。大規模で完全にコヒーレントなシステムの構築に関心のある私たちの中には、それを困難にしている人もいます。C ++では、基本的に新しく削除され、他のすべては完全に自分で行うことができます。」
「Rustは、例外や継承など、何十年にもわたる成功を無視していると感じています。私は自分が書いているコードを見て、ほとんどすべての呼び出しが?で終わる場所で、手作業で効果的に例外を実行しています。そして、すべてのメソッドは、自動的に伝播される可能性のあるエラーを手動で返す必要があります。」
「Rustの安全規則は、より安全なコードを作成しようとする試みと戦う場合があります。」
「RustがC ++の句読点の爆発を起こし、さらに悪化させたように感じます。コードのコンパクトさは、読みやすさに比べてそれほど価値があるとは思いません。Rustはシステムの言語であり、SPAフレームワークではありません。それを速くすることは目標ではありません、それを正しくすることは目標です、そしてそれはそれを何年にもわたって書くよりもそれを読んで編集することに非常に多くの時間を費やすことを含みます。」
「コンパイラには、C ++よりも多くのライブラリへのフックがあります。大規模で完全にコヒーレントなシステムの構築に関心のある私たちの中には、それを困難にしている人もいます。C ++では、基本的に新しく削除され、他のすべては完全に自分で行うことができます。」
「Rustは、例外や継承など、何十年にもわたる成功を無視していると感じています。私は自分が書いているコードを見て、ほとんどすべての呼び出しが?で終わる場所で、手作業で効果的に例外を実行しています。そして、すべてのメソッドは、自動的に伝播される可能性のあるエラーを手動で返す必要があります。」
「Rustの安全規則は、より安全なコードを作成しようとする試みと戦う場合があります。」
469デフォルトの名無しさん
2020/12/24(木) 13:57:55.75ID:FVOPSkk3 僕は絶対にミスはしませんって言って全部unsafeで包もうぜ
470デフォルトの名無しさん
2020/12/24(木) 14:21:36.07ID:7F4cW8XH >>464
> ・長い歴史で実績の有るクラスの継承や例外機構が使えない言語設計。
クラスの継承や例外機構は長い社会実験の末クソだったって結論出たろ。
だからGoだってわざわざ外してる。
C++にあるものを「実装できない」訳がないよな。わざわざ外してんだよ。
> ・長い歴史で実績の有るクラスの継承や例外機構が使えない言語設計。
クラスの継承や例外機構は長い社会実験の末クソだったって結論出たろ。
だからGoだってわざわざ外してる。
C++にあるものを「実装できない」訳がないよな。わざわざ外してんだよ。
471デフォルトの名無しさん
2020/12/24(木) 14:28:12.73ID:YICz7XpS 読んだのか、凄いなw
しかし、スルー検定3級不合格です
しかし、スルー検定3級不合格です
472デフォルトの名無しさん
2020/12/24(木) 14:56:25.90ID:TzdYJrci スル検は難関だからな。
473デフォルトの名無しさん
2020/12/24(木) 20:14:08.88ID:OKXZXV0n CやC++の批判で同じようにredditでコメント集めたらこんなもんじゃ済まないだろ
474デフォルトの名無しさん
2020/12/24(木) 21:01:24.33ID:3B9cL9c2 c++と結局同じ道を辿ってるというところが一番愚かな点。
rust覚える早道が結局c/c++勉強することっていう。
rust覚える早道が結局c/c++勉強することっていう。
475デフォルトの名無しさん
2020/12/24(木) 21:42:23.65ID:OKXZXV0n476デフォルトの名無しさん
2020/12/24(木) 21:44:10.79ID:5ZTYEX+H FFIのデファクトとしてのC ABIはしょうがないけど
C++とか一切触れる必要ないだろ
C++とか一切触れる必要ないだろ
477デフォルトの名無しさん
2020/12/24(木) 22:57:56.32ID:NfngU3lj レディットの負け犬に反論する必要なくない
賢さでいったらポメラニアンと同じくらいの連中なのに
賢さでいったらポメラニアンと同じくらいの連中なのに
478デフォルトの名無しさん
2020/12/25(金) 01:07:22.65ID:8LlCCPCm 所有権の重要さを実感するのは結局c++やってたやつだけだろ。
本当に一切c++触らないでrustだけで覚えたとかいう奴はいないわ。
いてもまともなコードは書けないだろう。
本当に一切c++触らないでrustだけで覚えたとかいう奴はいないわ。
いてもまともなコードは書けないだろう。
479デフォルトの名無しさん
2020/12/25(金) 02:44:51.30ID:M0TXsabA >>475
俺はそいつじゃないが、二文は繋がってない独立した文。
俺はそいつじゃないが、二文は繋がってない独立した文。
480デフォルトの名無しさん
2020/12/25(金) 02:53:15.82ID:M0TXsabA >>477
redditみたいなアメリカ最大の一般的な掲示板に書き込む人が皆、負け犬なんて
分けはない。
むしろSourceForgeみたいなところは、プログラミング関連の掲示板だから、
プライドだけが高くて力が無い人が集まることも有り得て、ずっと偏りが
あるため、負け犬率が高い可能性がありそこの好きな言語ランキング
なんて信用なら無い。
redditみたいなアメリカ最大の一般的な掲示板に書き込む人が皆、負け犬なんて
分けはない。
むしろSourceForgeみたいなところは、プログラミング関連の掲示板だから、
プライドだけが高くて力が無い人が集まることも有り得て、ずっと偏りが
あるため、負け犬率が高い可能性がありそこの好きな言語ランキング
なんて信用なら無い。
481デフォルトの名無しさん
2020/12/25(金) 02:56:53.96ID:M0TXsabA はっきいり言って、2ch/5chでも人が大量に来る一般的な板は平均程度の
知的レベルはあるが、この板みたいな技術系の板は、なぜか平均より低い人が
集まりがち。
なぜならリアルで認めてもらえない人がストレスのはけ口のようにして
書いてくる率が高いから。
その意味でSourceForgeは一般人より馬鹿が集まり易く、redditは一般人と
同程度のレベルがある。
2ch/5chもニュース意が見たいなのは一般人と同じくらいの知的水準だが
プログラム技術板は一般人よりも何故か劣っている。
知的レベルはあるが、この板みたいな技術系の板は、なぜか平均より低い人が
集まりがち。
なぜならリアルで認めてもらえない人がストレスのはけ口のようにして
書いてくる率が高いから。
その意味でSourceForgeは一般人より馬鹿が集まり易く、redditは一般人と
同程度のレベルがある。
2ch/5chもニュース意が見たいなのは一般人と同じくらいの知的水準だが
プログラム技術板は一般人よりも何故か劣っている。
482デフォルトの名無しさん
2020/12/25(金) 02:59:57.47ID:M0TXsabA githubも負け犬や雑魚が集まり易い。
有名な凄腕シェアウェア作家などはそんなとこに投稿せずに稼いでいる。
自分の腕ひとつでは稼げない人が、最後の手段としてなんとか名声を得てサラリーマン
として雇ってもらうためにgithubに投稿する傾向がある。
SourceForgeも同様。
有名な凄腕シェアウェア作家などはそんなとこに投稿せずに稼いでいる。
自分の腕ひとつでは稼げない人が、最後の手段としてなんとか名声を得てサラリーマン
として雇ってもらうためにgithubに投稿する傾向がある。
SourceForgeも同様。
483デフォルトの名無しさん
2020/12/25(金) 03:33:01.51ID:0bOU3lsT なんかそういデータあるんですか?
484デフォルトの名無しさん
2020/12/25(金) 04:00:24.23ID:wGSzow97 糖質に構ってはいけません
485デフォルトの名無しさん
2020/12/25(金) 07:45:07.16ID:0J2Xi2Rb >>483
サンプル数1(自分自身)で100%という調査結果があるんだろう
サンプル数1(自分自身)で100%という調査結果があるんだろう
486デフォルトの名無しさん
2020/12/25(金) 13:26:59.56ID:8LlCCPCm >>485
なんかそういうデータがあるんですか?
なんかそういうデータがあるんですか?
487デフォルトの名無しさん
2020/12/25(金) 19:42:11.03ID:mWI3ilc1 >>486
サンプル数1(自分自身)で100%という調査結果があるんだろう
サンプル数1(自分自身)で100%という調査結果があるんだろう
488デフォルトの名無しさん
2020/12/26(土) 02:24:44.32ID:xFdgYNcK489デフォルトの名無しさん
2020/12/26(土) 09:20:22.55ID:QvgSObSy >>488
D言語でいう契約を静的に検証できるみたいな感じかな? いいね
D言語でいう契約を静的に検証できるみたいな感じかな? いいね
490デフォルトの名無しさん
2020/12/26(土) 10:09:44.78ID:q2RopqqH いいね
盛り上がりはしないとは思うけど…
盛り上がりはしないとは思うけど…
491デフォルトの名無しさん
2020/12/26(土) 11:37:01.29ID:Gj+PzIiF OSS界隈で盛り上がる感じはしないけど
自動車とかはそっちのほうが見込みありそう
自動車とかはそっちのほうが見込みありそう
492デフォルトの名無しさん
2020/12/26(土) 13:21:33.22ID:qrKCtheG Vecのget()メソッドがi32とかも受け取ってくれればよかったのにとよく思う
結局、負方面については自分でインデックス内か検証しないといけないし
結局、負方面については自分でインデックス内か検証しないといけないし
493デフォルトの名無しさん
2020/12/26(土) 15:29:03.87ID:PUwCvC/R extension traitとかnewtypeで拡張すればいいんでは?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1b575c52e97e24c3ae345e945ec7dbbd
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=1b575c52e97e24c3ae345e945ec7dbbd
494デフォルトの名無しさん
2020/12/26(土) 16:18:17.43ID:qrKCtheG はえ〜ありがとうございます!
これ標準ライブラリに採用してほしい(我儘)
これ標準ライブラリに採用してほしい(我儘)
495デフォルトの名無しさん
2020/12/26(土) 20:14:31.56ID:q2RopqqH 貴様だってnewtypeだろうに!
496デフォルトの名無しさん
2020/12/27(日) 03:56:05.63ID:iVarltSe 小賢しいことを少年が言うのか!
497デフォルトの名無しさん
2020/12/27(日) 04:20:16.63ID:a9FVrfkC ガンダムハラスメントはやめてください
498デフォルトの名無しさん
2020/12/27(日) 13:57:50.83ID:gMdNxh6H たとえばこのように書いたときに
fn zero_bytes<T :Sized>() -> [u8; std::mem::size_of::<T>()] {
[0u8; std::mem::size_of::<T>()]
}
エラーとして
the size for values of type `T` cannot be known at compilation time
となってしまいます。
型の大きさに依存した配列を生成するには (実際にはコンパイル時に確定するはずでも)
Vec などを利用するしか仕方がないのでしょうか?
fn zero_bytes<T :Sized>() -> [u8; std::mem::size_of::<T>()] {
[0u8; std::mem::size_of::<T>()]
}
エラーとして
the size for values of type `T` cannot be known at compilation time
となってしまいます。
型の大きさに依存した配列を生成するには (実際にはコンパイル時に確定するはずでも)
Vec などを利用するしか仕方がないのでしょうか?
499デフォルトの名無しさん
2020/12/27(日) 16:28:27.67ID:VS6+Jx70 >>498
配列の要素数はconstじゃないとだめだからジェネリックには今のところできないみたい
どこかで型を書かないと
const SIZE: usize = std::mem::size_of::<i32>();
let foo = [0u8; SIZE];
https://github.com/rust-lang/rust/issues/43408
配列の要素数はconstじゃないとだめだからジェネリックには今のところできないみたい
どこかで型を書かないと
const SIZE: usize = std::mem::size_of::<i32>();
let foo = [0u8; SIZE];
https://github.com/rust-lang/rust/issues/43408
500デフォルトの名無しさん
2020/12/27(日) 19:25:21.46ID:UNA5PysG const fn, lazy_static のあたりは他の言語やってた人にはわかりづらいよな
501デフォルトの名無しさん
2020/12/27(日) 20:30:38.54ID:iVarltSe コンパイル時計算は最近の言語じゃ普通だけどな。
コンパイル時リフレクション使える言語も増えたし。
>>498
ttps://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=e09bdfe4323f597481eae11421777cc3
ttps://rust-lang.github.io/rfcs/2000-const-generics.html
ttps://github.com/rust-lang/rust/issues/44580
一時間前にマージされたばかりで1.51.0のマイルストーン完了したからそのうちnightlyに来る。
ttps://github.com/rust-lang/rust/pull/79135
edition 2021には間に合うんじゃないの?
コンパイル時リフレクション使える言語も増えたし。
>>498
ttps://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=e09bdfe4323f597481eae11421777cc3
ttps://rust-lang.github.io/rfcs/2000-const-generics.html
ttps://github.com/rust-lang/rust/issues/44580
一時間前にマージされたばかりで1.51.0のマイルストーン完了したからそのうちnightlyに来る。
ttps://github.com/rust-lang/rust/pull/79135
edition 2021には間に合うんじゃないの?
502デフォルトの名無しさん
2020/12/28(月) 02:45:21.79ID:UcUcH/pf Java では、class Foo{ Bar bar; } で済むところが、Rustでは以下の様な選択肢に悩まされる。
struct Foo { bar: Bar }
struct Foo<'a> { bar: &'a Bar }
struct Foo<'a> { bar: &'a mut Bar }
struct Foo { bar: Box<Bar> }
struct Foo { bar: Rc<Bar> }
struct Foo { bar: Arc<Bar> }
そして特に、'aの部分やBox, Rc, Arcの取り扱いやRcとArcの違いなどに悩まされる
ことになる。
これに加えて実践的にはOption, RefCellなどを何重にも組み合わせて使うことが必要となり
正しく理解するのはC++より遙かに難しい。
struct Foo { bar: Bar }
struct Foo<'a> { bar: &'a Bar }
struct Foo<'a> { bar: &'a mut Bar }
struct Foo { bar: Box<Bar> }
struct Foo { bar: Rc<Bar> }
struct Foo { bar: Arc<Bar> }
そして特に、'aの部分やBox, Rc, Arcの取り扱いやRcとArcの違いなどに悩まされる
ことになる。
これに加えて実践的にはOption, RefCellなどを何重にも組み合わせて使うことが必要となり
正しく理解するのはC++より遙かに難しい。
503デフォルトの名無しさん
2020/12/28(月) 02:52:18.54ID:UcUcH/pf >>502
ちなみに、plain Cの場合、
struct Foo { struct Bar *bar; }; // (1)
で済む。C++の場合、もちろんこれでもいけるが、
class Foo { Bar *bar; }; // (2)
1つでも特に問題ない。
uniqu_ptr<Bar>やshared_ptr<Bar>
も使えるが (2)で出来ないことは特に無いし、難しくも無く
Javaのclass Foo{ Bar bar; }
と使い勝手も余り変わらない。
違うのはbarが不要になった時に自分で deleteするだけで、
多くの場合、
class Foo {
Bar *bar;
Foo() { bar = NULL; }
~Foo() { delete bar; }
};
と書けばよいだけで、これはパターンなので丸覚えでも良いし、意味の理解も
難しくも無く、悩むことも無い。
それに比べればRustが如何に複雑なことか。
ちなみに、plain Cの場合、
struct Foo { struct Bar *bar; }; // (1)
で済む。C++の場合、もちろんこれでもいけるが、
class Foo { Bar *bar; }; // (2)
1つでも特に問題ない。
uniqu_ptr<Bar>やshared_ptr<Bar>
も使えるが (2)で出来ないことは特に無いし、難しくも無く
Javaのclass Foo{ Bar bar; }
と使い勝手も余り変わらない。
違うのはbarが不要になった時に自分で deleteするだけで、
多くの場合、
class Foo {
Bar *bar;
Foo() { bar = NULL; }
~Foo() { delete bar; }
};
と書けばよいだけで、これはパターンなので丸覚えでも良いし、意味の理解も
難しくも無く、悩むことも無い。
それに比べればRustが如何に複雑なことか。
504デフォルトの名無しさん
2020/12/28(月) 02:57:07.20ID:UcUcH/pf [補足]
C++の場合も、
class Foo { Bar *bar; }; // (1)
class Foo { unique_ptr<Bar> bar; }; // (2)
class Foo { shared_ptr<Bar> bar; }; // (3)
の選択肢は有るには有るが、常に(1)を使ってもコンパイルエラーに悩まされる
事はないし、できないこともなく、特に危険でもない。
ところがRustの場合、状況に応じて>>502のどれか一つしか選択できない
ことが多く、柔軟性に乏しい。
プログラムに僅かな変更があったときに、C++の場合、(1)なら修正が全く
必要がないが、Rustの場合は>>502のうちのどれかからどれかに修正しなくては
ならないことが多い。
C++の場合も、
class Foo { Bar *bar; }; // (1)
class Foo { unique_ptr<Bar> bar; }; // (2)
class Foo { shared_ptr<Bar> bar; }; // (3)
の選択肢は有るには有るが、常に(1)を使ってもコンパイルエラーに悩まされる
事はないし、できないこともなく、特に危険でもない。
ところがRustの場合、状況に応じて>>502のどれか一つしか選択できない
ことが多く、柔軟性に乏しい。
プログラムに僅かな変更があったときに、C++の場合、(1)なら修正が全く
必要がないが、Rustの場合は>>502のうちのどれかからどれかに修正しなくては
ならないことが多い。
505デフォルトの名無しさん
2020/12/28(月) 03:21:57.08ID:UcUcH/pf https://matklad.github.io/2020/09/20/why-not-rust.html
「Rust lacks an official specification. The reference is a work in progress,
and does not yet document all the fine implementation details.」
Rustは公式の使用が欠如している。
リファレンスマニュアルの作成は発展途上中(作成中、作業中、進展中)で、
しっかりした実装の詳細を全てドキュメント化してはいない。
Rustのコンパイル時間がとても長いことを直後に指摘した上で、
「A program written in a slower to run but faster to compile programming
language can be faster to run because the programmer
will have more time to optimize!」
実行速度が遅いがコンパイルが速い言語で書かれたプログラムは、
実際には速く実行できるようになる。
なぜなら、プログラマが最適化する時間をより沢山得ることが出来るためだ。
「Rust lacks an official specification. The reference is a work in progress,
and does not yet document all the fine implementation details.」
Rustは公式の使用が欠如している。
リファレンスマニュアルの作成は発展途上中(作成中、作業中、進展中)で、
しっかりした実装の詳細を全てドキュメント化してはいない。
Rustのコンパイル時間がとても長いことを直後に指摘した上で、
「A program written in a slower to run but faster to compile programming
language can be faster to run because the programmer
will have more time to optimize!」
実行速度が遅いがコンパイルが速い言語で書かれたプログラムは、
実際には速く実行できるようになる。
なぜなら、プログラマが最適化する時間をより沢山得ることが出来るためだ。
506デフォルトの名無しさん
2020/12/28(月) 03:37:08.29ID:UcUcH/pf 現実のプログラムでは、CやC++とRustのプログラムを連携しなければならない
ということと指摘した上で、Cargoがそれを難しくしているかも知れないことを
指摘している:
「One specific gotcha is that Cargo’s opinionated world view
(which is a blessing for pure Rust projects) might make
it harder to integrate with a bigger build system.」
具体的には、Cargo主張する世界観(これは純粋なRustプロジェクトにとっては
幸いなことです)が、より大きなビルドシステムとの統合を
難しくしているかもしれないということです。
ということと指摘した上で、Cargoがそれを難しくしているかも知れないことを
指摘している:
「One specific gotcha is that Cargo’s opinionated world view
(which is a blessing for pure Rust projects) might make
it harder to integrate with a bigger build system.」
具体的には、Cargo主張する世界観(これは純粋なRustプロジェクトにとっては
幸いなことです)が、より大きなビルドシステムとの統合を
難しくしているかもしれないということです。
507デフォルトの名無しさん
2020/12/28(月) 03:48:47.51ID:UcUcH/pf 「First, there’s no definition of Rust memory model, so it is impossible to
formally check if a given unsafe block is valid or not. There’s informal
definition of “things rustc does or might rely on” and in in-progress
runtime verifier, but the actual model is in flux. So there might be some
unsafe code somewhere which works OK in practice today, might be
declared invalid tomorrow, and broken by a new compiler optimization
next year.」
第一に、Rustのメモリモデルの定義がないので、与えられた安全でないブロック
が有効かどうかを正式にチェックすることができません。非公式な定義として、
"rustc が行う、または依存しているかもしれないこと "と、進行中のランタイム
ベリファイアがありますが、実際のモデルは流動的です。つまり、どこかに安全
でないコードがあるかもしれませんが、今日は問題なく動作していても、明日
には無効と宣言され、来年の新しいコンパイラの最適化で壊れてしまうかも
しれません。
formally check if a given unsafe block is valid or not. There’s informal
definition of “things rustc does or might rely on” and in in-progress
runtime verifier, but the actual model is in flux. So there might be some
unsafe code somewhere which works OK in practice today, might be
declared invalid tomorrow, and broken by a new compiler optimization
next year.」
第一に、Rustのメモリモデルの定義がないので、与えられた安全でないブロック
が有効かどうかを正式にチェックすることができません。非公式な定義として、
"rustc が行う、または依存しているかもしれないこと "と、進行中のランタイム
ベリファイアがありますが、実際のモデルは流動的です。つまり、どこかに安全
でないコードがあるかもしれませんが、今日は問題なく動作していても、明日
には無効と宣言され、来年の新しいコンパイラの最適化で壊れてしまうかも
しれません。
508デフォルトの名無しさん
2020/12/28(月) 03:52:06.86ID:UcUcH/pf Second, there’s also an observation that unsafe blocks are not, in fact, modular.
Sufficiently powerful unsafe blocks can, in effect, extend the language. Two such
extensions might be fine in isolation, but lead to undefined behavior if used
simultaneously: Observational equivalence and unsafe code.
第二に、安全でないブロックは実際にはモジュール化されていないという観察もあります。
十分に強力な安全でないブロックは、事実上、言語を拡張することができます。
そのような2つの拡張は単独では問題ないかもしれませんが、同時に使用されると定義
されていない動作になります。観測的等価性と安全でないコードです。
Finally, there are outright bugs in the compiler.
最後に、コンパイラには明らかなバグがあります。
https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3A%22I-unsound+%F0%9F%92%A5%22
Sufficiently powerful unsafe blocks can, in effect, extend the language. Two such
extensions might be fine in isolation, but lead to undefined behavior if used
simultaneously: Observational equivalence and unsafe code.
第二に、安全でないブロックは実際にはモジュール化されていないという観察もあります。
十分に強力な安全でないブロックは、事実上、言語を拡張することができます。
そのような2つの拡張は単独では問題ないかもしれませんが、同時に使用されると定義
されていない動作になります。観測的等価性と安全でないコードです。
Finally, there are outright bugs in the compiler.
最後に、コンパイラには明らかなバグがあります。
https://github.com/rust-lang/rust/issues?q=is%3Aopen+is%3Aissue+label%3A%22I-unsound+%F0%9F%92%A5%22
509デフォルトの名無しさん
2020/12/28(月) 08:35:49.12ID:1wnarVmc まあ大体その通りだわな。matkladはわかりやすい文章書くわ。
510デフォルトの名無しさん
2020/12/28(月) 11:36:31.94ID:OYitjU6y スマートポインタ絶対に使いたくない理由はよくわからんが
rustでも生ポインタ使えばよいのでは
コンパイル時間についてはcraneliftと差分コンパイルの進化に期待かな
その他の議論については影響は限定的だし
影響を受けない領域でrustを使えば良いのでは
議論の俎上には挙がっているし徐々に改善されていくでしょう
rustでも生ポインタ使えばよいのでは
コンパイル時間についてはcraneliftと差分コンパイルの進化に期待かな
その他の議論については影響は限定的だし
影響を受けない領域でrustを使えば良いのでは
議論の俎上には挙がっているし徐々に改善されていくでしょう
511デフォルトの名無しさん
2020/12/28(月) 12:53:26.99ID:UcUcH/pf >>510
>その他の議論については影響は限定的だし
ところがC/C++が担ってきた領域ではそれが大問題になることが多いので
RustはC/C++の代替には成りえない。
>議論の俎上には挙がっているし徐々に改善されていくでしょう
少子化も日本の経済衰退も非常に何十年間も議論の俎上に上がっている
のに改善されていく気配は全く無いことからも分かる様に、
そんなことは一般的には成り立たない。
>その他の議論については影響は限定的だし
ところがC/C++が担ってきた領域ではそれが大問題になることが多いので
RustはC/C++の代替には成りえない。
>議論の俎上には挙がっているし徐々に改善されていくでしょう
少子化も日本の経済衰退も非常に何十年間も議論の俎上に上がっている
のに改善されていく気配は全く無いことからも分かる様に、
そんなことは一般的には成り立たない。
512デフォルトの名無しさん
2020/12/28(月) 12:58:19.94ID:UcUcH/pf513デフォルトの名無しさん
2020/12/28(月) 13:13:50.09ID:N6A7dpOQ514デフォルトの名無しさん
2020/12/28(月) 13:15:56.66ID:UcUcH/pf515デフォルトの名無しさん
2020/12/28(月) 18:08:21.04ID:1npJXF9+ >実行速度が遅いがコンパイルが速い言語で書かれたプログラムは、
>実際には速く実行できるようになる。
最近この苦情よく聞くんだけどどんなもんなの
コンパイル時間のボトルネックなんて
考える時間に比べたらたいしたことなくない
何十分もかからんだろ
>実際には速く実行できるようになる。
最近この苦情よく聞くんだけどどんなもんなの
コンパイル時間のボトルネックなんて
考える時間に比べたらたいしたことなくない
何十分もかからんだろ
516デフォルトの名無しさん
2020/12/28(月) 18:22:47.18ID:1wnarVmc お前が弄る小さいプログラムではそうなんだろうね。
517デフォルトの名無しさん
2020/12/28(月) 18:27:17.21ID:1npJXF9+ どんなん
518デフォルトの名無しさん
2020/12/28(月) 18:58:25.81ID:9g/X/cXA CIとかでめちゃくちゃ時間かかるのはRustの醍醐味
519デフォルトの名無しさん
2020/12/28(月) 19:03:06.03ID:yEfXJ2Ei >>515
今のRustコンパイラはコア数で良くスケールするので
開発用の32コアマシンなら快適だけど、古いノートPCだと辛い、みたいなことはあるな
Actixみたいに大量の依存関係を要求するやつ+しょぼいシングルコアなら数十分かかるかもね
今のRustコンパイラはコア数で良くスケールするので
開発用の32コアマシンなら快適だけど、古いノートPCだと辛い、みたいなことはあるな
Actixみたいに大量の依存関係を要求するやつ+しょぼいシングルコアなら数十分かかるかもね
520デフォルトの名無しさん
2020/12/28(月) 19:27:10.85ID:yEfXJ2Ei 個人的にはクレート単体で遅いと思ったことはなくて、体感では数万行のコードでもgccより速いかな、という感じ
なので遅い要因はほぼ依存関係の多さだと思っている
C++とかだと特定のディストリビューションの特定のバージョンでコンパイルエラー、みたいな地獄のデバッグが待っているので、それを回避するコストとしては十分安いと思うけど
なので遅い要因はほぼ依存関係の多さだと思っている
C++とかだと特定のディストリビューションの特定のバージョンでコンパイルエラー、みたいな地獄のデバッグが待っているので、それを回避するコストとしては十分安いと思うけど
521デフォルトの名無しさん
2020/12/28(月) 22:08:45.00ID:mQPXLAV2 今の方法だとまだ依存crateのコンパイル待ちになるのにスケールする?
>>518に尽きる
>>518に尽きる
522デフォルトの名無しさん
2020/12/28(月) 22:37:04.04ID:yEfXJ2Ei523デフォルトの名無しさん
2020/12/29(火) 01:19:43.87ID:k23+wtCh >>520
>個人的にはクレート単体で遅いと思ったことはなくて、体感では数万行のコードでもgccより速いかな、という感じ
C言語のコンパイル意が遅くなるのは、Win32のヘッダファイルの巨大さが原因
であることが多い。
それが50MB位有ったりして、ヘッダファイルだけで数万行から数10万行くらいあったりする。
そのパースが遅い。
なので、VC++では precompiled header を使っている。
>個人的にはクレート単体で遅いと思ったことはなくて、体感では数万行のコードでもgccより速いかな、という感じ
C言語のコンパイル意が遅くなるのは、Win32のヘッダファイルの巨大さが原因
であることが多い。
それが50MB位有ったりして、ヘッダファイルだけで数万行から数10万行くらいあったりする。
そのパースが遅い。
なので、VC++では precompiled header を使っている。
524デフォルトの名無しさん
2020/12/29(火) 08:29:57.63ID:+jeJmMuS cとc++じゃコンパイル速度は桁違いだけどな。
525デフォルトの名無しさん
2020/12/29(火) 10:56:10.54ID:2ROJabla ライブラリの依存関係を自動で解決するエコシステムがあると
依存関係が巨大になりがちっていうのは
Haskell や JavaScript でもよく聞くけどな。
まあ自分でそのライブラリ群を書く手間、
既存のものを使うにしても導入の仕方を調べる手間に比べたら
多少の時間はかかっても自動でやってくれるほうがマシではあるし、
度を越したときは個別に改善するしか仕方がないんだろう。
依存関係が巨大になりがちっていうのは
Haskell や JavaScript でもよく聞くけどな。
まあ自分でそのライブラリ群を書く手間、
既存のものを使うにしても導入の仕方を調べる手間に比べたら
多少の時間はかかっても自動でやってくれるほうがマシではあるし、
度を越したときは個別に改善するしか仕方がないんだろう。
526デフォルトの名無しさん
2020/12/29(火) 15:03:36.81ID:FJxczyqV 依存関係のコンパイルは初回しかやらないんだから多少遅くても気にはならない
CIの場合はtargetディレクトリキャッシュすれば良いし
rust-analyzerの起動時間がちょっと気になるくらい
CIの場合はtargetディレクトリキャッシュすれば良いし
rust-analyzerの起動時間がちょっと気になるくらい
527デフォルトの名無しさん
2020/12/29(火) 23:35:14.28ID:1sbIl3YX >>522
昔より増えたapiとimplを分離したクレートは
自分のプロジェクト->api->impl->implが依存するcrate(s)->...
と直列に依存してる。log,slog,serde,thiserror,webrender(etc.)
それに直列に依存するかどうかよりcargoもrustcのフロントエンドもまだ並列化対応が部分的でコンパイル単位の粒度が大きいのが並列ビルドの妨げになるでしょ。
>>526
CIはたしかにキャッシュが効けばいいけど、アナライザの話なら初回しかやらないことはないよ。
アナライザの場合は解析結果が無効になるたびに起きる。
intellij rustはプロジェクト開くたびにやってるし。
JDTみたいにon the fly analyzeするとソースコード変更するたびに解析するから依存グラフは使い回せても他は都度、解析する必要がある。
昔より増えたapiとimplを分離したクレートは
自分のプロジェクト->api->impl->implが依存するcrate(s)->...
と直列に依存してる。log,slog,serde,thiserror,webrender(etc.)
それに直列に依存するかどうかよりcargoもrustcのフロントエンドもまだ並列化対応が部分的でコンパイル単位の粒度が大きいのが並列ビルドの妨げになるでしょ。
>>526
CIはたしかにキャッシュが効けばいいけど、アナライザの話なら初回しかやらないことはないよ。
アナライザの場合は解析結果が無効になるたびに起きる。
intellij rustはプロジェクト開くたびにやってるし。
JDTみたいにon the fly analyzeするとソースコード変更するたびに解析するから依存グラフは使い回せても他は都度、解析する必要がある。
528デフォルトの名無しさん
2020/12/30(水) 00:32:35.13ID:5c2z0B/k >>527
言葉足らずですまん
(解析結果をメモリ上にしか持たない設計だから起動時に解析を全部やり直す)rust-analyzerの起動時間が気になるくらい(がコンパイル時間に関して気になる点)
と言いたかった
言葉足らずですまん
(解析結果をメモリ上にしか持たない設計だから起動時に解析を全部やり直す)rust-analyzerの起動時間が気になるくらい(がコンパイル時間に関して気になる点)
と言いたかった
529デフォルトの名無しさん
2021/01/01(金) 09:10:16.97ID:WB+Ueidc #![feature(min_const_generics)]だけじゃなく#![feature(const_generics)]も2021に入って欲しいな
530デフォルトの名無しさん
2021/01/01(金) 12:06:39.72ID:y/yrEKhd 全く話は変わるけど、メモリ不足で Box::new に失敗したら、panicが起きて
プログラムがそこで停止するだけ?
プログラムがそこで停止するだけ?
531デフォルトの名無しさん
2021/01/01(金) 12:08:13.77ID:y/yrEKhd >>530
仮にそうだとすると、Cのmalloc()やC++のnew TYPEに比べるとエラー処理は
省ける反面、エラー処理を書きたくてもかけないね。
まあ、滅多に起きないので書いてもしょうがないけれども。
仮にそうだとすると、Cのmalloc()やC++のnew TYPEに比べるとエラー処理は
省ける反面、エラー処理を書きたくてもかけないね。
まあ、滅多に起きないので書いてもしょうがないけれども。
532デフォルトの名無しさん
2021/01/01(金) 12:36:28.83ID:y/yrEKhd *C++
TYPE *ptr = new TYPE; //メモリ不足の場合ptrにはNULLが返される。
*Java
TYPE obj = new TYPE; //メモリ不足の場合例外がthrowされる。
*Rust
Box<T> obj = Box<T>::new(T()); //メモリ不足の場合panicが生じアプリがダウンする。
Rustは、高度な安全性を要する分野や組み込みでは困るかも。
それに記述が長い。
TYPE *ptr = new TYPE; //メモリ不足の場合ptrにはNULLが返される。
*Java
TYPE obj = new TYPE; //メモリ不足の場合例外がthrowされる。
*Rust
Box<T> obj = Box<T>::new(T()); //メモリ不足の場合panicが生じアプリがダウンする。
Rustは、高度な安全性を要する分野や組み込みでは困るかも。
それに記述が長い。
533デフォルトの名無しさん
2021/01/01(金) 12:40:33.89ID:mLxH8qq6 C++のnewはメモリ不足のとき通常は例外が送出されるぞ
メモリ不足でnullptrを返すにはnew(nothrow)にしないといけない
メモリ不足でnullptrを返すにはnew(nothrow)にしないといけない
534デフォルトの名無しさん
2021/01/01(金) 12:54:35.66ID:y/yrEKhd >>533
昔、
TYPE *ptr;
if ( (ptr = new TYPE) == NULL ) {
printf( "Memory allocation erro has occured.\n" );
}
みたいに書いていたことがあるけど、これは昔のC++でも間違っていたのだろうか?
昔、
TYPE *ptr;
if ( (ptr = new TYPE) == NULL ) {
printf( "Memory allocation erro has occured.\n" );
}
みたいに書いていたことがあるけど、これは昔のC++でも間違っていたのだろうか?
535デフォルトの名無しさん
2021/01/01(金) 12:57:46.63ID:y/yrEKhd Javaは、例外をthrowする関数を呼び出した場合、必ずtryブロックで囲むか、
または、呼び出しもとの関数の宣言の最後にthrow/throws属性をつけるかしないと
いけないんだけど、なぜかnew演算子の場合だけはこの規則の例外で、
tryブロックで囲むこともthrow/throws属性を付ける必要も無いらしい。
ただし、tryブロックで囲んでcatch文でOutOfMemoryErrorという例外を
捉えることは出来るらしい。
意外と良く考えられていて、便利そう。
または、呼び出しもとの関数の宣言の最後にthrow/throws属性をつけるかしないと
いけないんだけど、なぜかnew演算子の場合だけはこの規則の例外で、
tryブロックで囲むこともthrow/throws属性を付ける必要も無いらしい。
ただし、tryブロックで囲んでcatch文でOutOfMemoryErrorという例外を
捉えることは出来るらしい。
意外と良く考えられていて、便利そう。
536デフォルトの名無しさん
2021/01/01(金) 17:48:44.20ID:tSM4l1tY 検査例外等も知らない人が言語仕様にケチつけるなよ
537デフォルトの名無しさん
2021/01/01(金) 18:19:22.53ID:y/yrEKhd 知識が無くてもそれが使いにくいことが分かる人もいれば、
知識があってもそれが使いにくいことが分からない人もいる。
その差はイマジネーションや経験や頭の良さの差。
知識があってもそれが使いにくいことが分からない人もいる。
その差はイマジネーションや経験や頭の良さの差。
538デフォルトの名無しさん
2021/01/01(金) 19:06:09.23ID:tSM4l1tY 知識も経験もイマジネーションも頭の良さもない
お前さんどうすんの?
お前さんどうすんの?
539デフォルトの名無しさん
2021/01/01(金) 19:06:27.88ID:kK2SMYXF 20年以上前?のC++だとNULLが返ってきてたみたいだな
C++98の頃には例外が投げられてる
C++98の頃には例外が投げられてる
540デフォルトの名無しさん
2021/01/01(金) 19:07:24.81ID:Vr3i+dZB 出た、”地頭”信者w
541デフォルトの名無しさん
2021/01/01(金) 19:20:38.81ID:roXbFcsK Rustのpanicはスレッド単位ですよ
542デフォルトの名無しさん
2021/01/01(金) 19:55:37.74ID:BepzsDBS プラットフォームにもよるのでは
panic=abort
しかない環境もある
panic=abort
しかない環境もある
543デフォルトの名無しさん
2021/01/01(金) 22:11:27.78ID:CysAMwpt かなり初歩的な質問で申し訳ないんだけど、例えばHashMapをイテレータで舐めてるときに内部でそのHashMapを更新したいときはどうするのがベストなの?
例えば次のようなケースではどうすれば……
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f6c554ab761450881f28e48faa55bf8c
use std::collections::HashMap;
fn main() {
let mut map: HashMap<_, _> = HashMap::new();
for i in -5..=5 {
map.insert(i, i);
}
for (key, value) in map.iter() {
if *value == 0 {
continue;
}
if let Some(another_value) = map.get_mut(&(-key)) {
// keyの絶対値が同じものを処理して、処理済みにする気持ち
*another_value = 0;
}
}
}
例えば次のようなケースではどうすれば……
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=f6c554ab761450881f28e48faa55bf8c
use std::collections::HashMap;
fn main() {
let mut map: HashMap<_, _> = HashMap::new();
for i in -5..=5 {
map.insert(i, i);
}
for (key, value) in map.iter() {
if *value == 0 {
continue;
}
if let Some(another_value) = map.get_mut(&(-key)) {
// keyの絶対値が同じものを処理して、処理済みにする気持ち
*another_value = 0;
}
}
}
544デフォルトの名無しさん
2021/01/02(土) 00:25:45.81ID:z4o0QpSV >>543
map.iter() を map.iter().cloned().collect::<Vec<_>>() にする
map.iter() を map.iter().cloned().collect::<Vec<_>>() にする
545デフォルトの名無しさん
2021/01/02(土) 00:53:14.75ID:aqs6ioY6 keyの絶対値が同じものでgroupingしてからイテレート
546デフォルトの名無しさん
2021/01/02(土) 02:08:00.06ID:S8wF2Q3x rust的にはそういうことしないのがベストじゃない
俺だったらキーだけ取り出してループさせる
俺だったらキーだけ取り出してループさせる
547デフォルトの名無しさん
2021/01/02(土) 09:20:56.29ID:ZeOmz+/p548デフォルトの名無しさん
2021/01/02(土) 14:15:48.62ID:RXFdEIXY 逆に-keyで絶対値にする言語とかあんの?
Rustではkey.abs()だぞ
> keyの絶対値が同じものでgroupingしてからイテレート
ソース見る限り元キーはそのままで{-1: 0, 1: 0}みたいにしたそうだからグルーピングでは絶対値にキー統一されるからダメだね
Rustではkey.abs()だぞ
> keyの絶対値が同じものでgroupingしてからイテレート
ソース見る限り元キーはそのままで{-1: 0, 1: 0}みたいにしたそうだからグルーピングでは絶対値にキー統一されるからダメだね
549デフォルトの名無しさん
2021/01/02(土) 15:20:56.88ID:NIm/iweY >>543
イテレータを回してるときに内部でそのcollectionをいじくる一般的な方法を聞きたかっただけで、そのコードはただ説明のためのモックなのでコードの妥当性とかはどうか気にしないでください……
イテレータを回してるときに内部でそのcollectionをいじくる一般的な方法を聞きたかっただけで、そのコードはただ説明のためのモックなのでコードの妥当性とかはどうか気にしないでください……
550デフォルトの名無しさん
2021/01/02(土) 16:10:45.39ID:S8wF2Q3x これは個人的な解釈だけど、ループ中にコレクションをイジるのを許可すると要素の追加削除も許可されるので、動作が想定しにくいから言語に関わらずやるべきじゃないと思う
551デフォルトの名無しさん
2021/01/02(土) 17:40:37.90ID:QD9HT9ch 有名なアルゴリズムでも破壊的に処理を進める物は少なくないから
それらをリソースを押さえたままより安全に実装するかという問題はある
それらをリソースを押さえたままより安全に実装するかという問題はある
552デフォルトの名無しさん
2021/01/02(土) 20:33:28.09ID:1irTnsdt 単純に破壊的操作とイテレータの組み合わせが良くないんだと思うけどね
基本的なアルゴリズムの実装でならC++でも大抵インデックスアクセスするし
基本的なアルゴリズムの実装でならC++でも大抵インデックスアクセスするし
553デフォルトの名無しさん
2021/01/03(日) 01:40:10.34ID:qKjMqlyr 絶対値で比較されるようなkeyの型を用意してBtreeMapにぶちこんでiter_mut()すれば
絶対値が同じキー同士は連続して現れるからうまいことやればやりたいことはできるのでは
コード複雑になりそうだけど
絶対値が同じキー同士は連続して現れるからうまいことやればやりたいことはできるのでは
コード複雑になりそうだけど
554デフォルトの名無しさん
2021/01/03(日) 02:42:58.53ID:ez188GTZ >>550
C++狂い「安全性よりも論理的、数学的に正しいかが重要」
C++狂い「安全性よりも論理的、数学的に正しいかが重要」
555デフォルトの名無しさん
2021/01/03(日) 15:16:13.09ID:vPi839cG Rustで大量の敵が同時に出現する2Dゲームを作ろうと考えています。
Amethyst、ggez、Bevyの中で最もおすすめのゲームエンジンはどれでしょうか?
Amethyst、ggez、Bevyの中で最もおすすめのゲームエンジンはどれでしょうか?
556デフォルトの名無しさん
2021/01/03(日) 15:58:43.30ID:NLnLDzaH イニダン亡き後の移住先か…!
557デフォルトの名無しさん
2021/01/03(日) 17:51:55.22ID:CkWAgifP スライムが5000匹現れた!
558デフォルトの名無しさん
2021/01/03(日) 20:23:57.03ID:ixJIhJjK559デフォルトの名無しさん
2021/01/03(日) 21:45:20.19ID:hFPMmBD/ single writer or multiple readerのモデルに沿うようなロジックに変換するか
interior mutabilityを使うかのどちらか
interior mutabilityを使うかのどちらか
560デフォルトの名無しさん
2021/01/05(火) 22:41:10.79ID:fwCCjwkT561デフォルトの名無しさん
2021/01/05(火) 23:32:43.62ID:rno8zcnm RustでTDみたいなブラウザゲー作った猛者おりゅ?
562デフォルトの名無しさん
2021/01/08(金) 08:35:58.68ID:WNrzsb9T なんでこんなゴミを100M単位でボコボコダウンロードせなならんのや
ゴミ
ゴミ
563デフォルトの名無しさん
2021/01/09(土) 00:36:27.01ID:ntvhJtwv >>562
それって回線がゴミなだけじゃ...
それって回線がゴミなだけじゃ...
564デフォルトの名無しさん
2021/01/10(日) 12:11:15.45ID:smlN1G6e 評価順序のルールがよくわからないんですが、
タプル生成のときの呼出し順序って保証がありますか?
つまり
(foo(), bar())
みたいに書いたときに foo が常に先に呼ばれることは保証されますか?
タプル生成のときの呼出し順序って保証がありますか?
つまり
(foo(), bar())
みたいに書いたときに foo が常に先に呼ばれることは保証されますか?
565デフォルトの名無しさん
2021/01/10(日) 13:02:46.89ID:fqhi9u3I 保証されてるんじゃない?
でも呼び出し順が重要なら行を分けて書いてからtupleに入れたほうがいいような気もする
The meaning of each kind of expression dictates several things:
・Whether or not to evaluate the sub-expressions when evaluating the expression
・The order in which to evaluate the sub-expressions
・How to combine the sub-expressions' values to obtain the value of the expression
https://doc.rust-lang.org/reference/expressions.html
でも呼び出し順が重要なら行を分けて書いてからtupleに入れたほうがいいような気もする
The meaning of each kind of expression dictates several things:
・Whether or not to evaluate the sub-expressions when evaluating the expression
・The order in which to evaluate the sub-expressions
・How to combine the sub-expressions' values to obtain the value of the expression
https://doc.rust-lang.org/reference/expressions.html
566デフォルトの名無しさん
2021/01/10(日) 15:22:53.59ID:fqhi9u3I567デフォルトの名無しさん
2021/01/10(日) 15:34:43.17ID:smlN1G6e568デフォルトの名無しさん
2021/01/11(月) 14:09:54.51ID:MiJ5pxpq ファイル (またはネットワーク) から得られる所定の書式のレコードの繰り返しを
イテレータとして抽象化したいと考えました。
(ちなみにレコードの繰り返しの前にレコードの個数を含むヘッダもあります。)
しかし IO はエラーの可能性があります。
書式の仕様に違反する入力になっている可能性もあります。
イテレータが返す型を Option<Result<要素の型,エラーの型>> としてしまうと
エラーの時点で終端という扱いにならないので様々なメソッドと組み合わせ難いですし、
Result を挟まないとエラーの内容を返せないのでハンドリングしづらいです。
何か綺麗にやれるイディオムのようなものがあったりしませんか?
イテレータとして抽象化したいと考えました。
(ちなみにレコードの繰り返しの前にレコードの個数を含むヘッダもあります。)
しかし IO はエラーの可能性があります。
書式の仕様に違反する入力になっている可能性もあります。
イテレータが返す型を Option<Result<要素の型,エラーの型>> としてしまうと
エラーの時点で終端という扱いにならないので様々なメソッドと組み合わせ難いですし、
Result を挟まないとエラーの内容を返せないのでハンドリングしづらいです。
何か綺麗にやれるイディオムのようなものがあったりしませんか?
569デフォルトの名無しさん
2021/01/11(月) 15:21:23.54ID:8i1ZTkbL エラーの時点で終端にするかどうかは呼び出し側が決めることじゃない?
Option<Result<T, E>>もResult<Option<T>, E>もイディオムとしてよく使われてる
Option<Result<T, E>>もResult<Option<T>, E>もイディオムとしてよく使われてる
570デフォルトの名無しさん
2021/01/11(月) 15:47:03.74ID:MiJ5pxpq >>569
出来るか出来ないかで言えば出来るし好きにすれば良い話ではあるんですが、
標準で良いされている様々なメソッド (たとえば map のような基本的なメソッドさえ!)
と「組み合わせ難い」ということが綺麗じゃないなぁという気持ちなんですが、
そこらへんの不格好さは許容するしかない雰囲気ということでしょうか?
(通常の終端に到達するのとは別に) 中断を表現する方法があって
中断の理由を伝播するのに便利な語彙を詰め込んだクレートがあったりすると
助かるんですが。
出来るか出来ないかで言えば出来るし好きにすれば良い話ではあるんですが、
標準で良いされている様々なメソッド (たとえば map のような基本的なメソッドさえ!)
と「組み合わせ難い」ということが綺麗じゃないなぁという気持ちなんですが、
そこらへんの不格好さは許容するしかない雰囲気ということでしょうか?
(通常の終端に到達するのとは別に) 中断を表現する方法があって
中断の理由を伝播するのに便利な語彙を詰め込んだクレートがあったりすると
助かるんですが。
571デフォルトの名無しさん
2021/01/11(月) 16:05:22.66ID:cgTcg0uf >>570
公式にあるイディオムっぽいのはこれとか。
https://doc.rust-lang.org/rust-by-example/error/iter_result.html
クレートは探すと色々見つかるけど、結局「便利な」ってのが人それぞれだし、あまり流行ってる感じはしないな。
むしろその中断表現をうまくやるアイデアがあるなら自分で作ったほうがいいのでは。
公式にあるイディオムっぽいのはこれとか。
https://doc.rust-lang.org/rust-by-example/error/iter_result.html
クレートは探すと色々見つかるけど、結局「便利な」ってのが人それぞれだし、あまり流行ってる感じはしないな。
むしろその中断表現をうまくやるアイデアがあるなら自分で作ったほうがいいのでは。
572デフォルトの名無しさん
2021/01/11(月) 16:41:17.67ID:8i1ZTkbL >>570
組み合わせ難いと言ってる内容をコードで示してくれないとなんとも
組み合わせ難いと言ってる内容をコードで示してくれないとなんとも
573デフォルトの名無しさん
2021/01/11(月) 20:34:05.33ID:D6pgjuRM イテレータとして抽象化したいってどういう意味なの
Iteratorをimplするってことなのかしら
Iteratorをimplするってことなのかしら
574デフォルトの名無しさん
2021/01/11(月) 23:06:51.09ID:MiJ5pxpq >>573
ここでいう「イテレータとして」というのは std::iter::Iterator に限るわけではなく、
繰り返しを表現する何らかの型定義と思ってください。
適当なクレートがあるならそれでいいですし、考え方だけでもいいです。
欲しい機能をあらためてまとめると
・ 繰り返しに (終端に到達する以外の) 中断の方法が用意されている
・ 中断したときに中断の理由 (エラー型の値) を伝える方法がある
なのですが、
std::iter::Iterator だと next が返す Option<Result<T, E>> でエラーのときに
「中断」しようとすると for 文の中で break する書き方くらいしか思いつかず、
自分で便利なものを作ろうにもどう作れば便利になるのかも
想像がつかないのです。
ここでいう「イテレータとして」というのは std::iter::Iterator に限るわけではなく、
繰り返しを表現する何らかの型定義と思ってください。
適当なクレートがあるならそれでいいですし、考え方だけでもいいです。
欲しい機能をあらためてまとめると
・ 繰り返しに (終端に到達する以外の) 中断の方法が用意されている
・ 中断したときに中断の理由 (エラー型の値) を伝える方法がある
なのですが、
std::iter::Iterator だと next が返す Option<Result<T, E>> でエラーのときに
「中断」しようとすると for 文の中で break する書き方くらいしか思いつかず、
自分で便利なものを作ろうにもどう作れば便利になるのかも
想像がつかないのです。
575デフォルトの名無しさん
2021/01/12(火) 02:11:34.65ID:yVKQhIbd >>574
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=aaf882f54a7b6330ee6ad2106be92717
こんな感じでscan使えばNoneを返したところで
イテレーションを中断できるしErrの値も列挙できる
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=aaf882f54a7b6330ee6ad2106be92717
こんな感じでscan使えばNoneを返したところで
イテレーションを中断できるしErrの値も列挙できる
576デフォルトの名無しさん
2021/01/12(火) 02:12:25.76ID:yVKQhIbd 中断するだけなら take_while 使うという手もある
577デフォルトの名無しさん
2021/01/12(火) 08:20:11.60ID:tB/XA0DN 俺もtake_whileを思い浮かべたけど関数を作るわけじゃないんでしょ
ゴールがいまいちみえないからイメージでいいのでコードで用件を示してほしい
ゴールがいまいちみえないからイメージでいいのでコードで用件を示してほしい
578デフォルトの名無しさん
2021/01/12(火) 11:44:28.63ID:d2vxqIR1 単にエラー返して中断したいだけならResultにcollectしたりtry_for_eachで消費すればいいよ
イテレータアダプターとしてエラーも含めて列挙しつつ次につなげたいなら>>575が書いてるscanやtake_while系
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=113dcf689b4d941c89e714ebb1414958
イテレータアダプターとしてエラーも含めて列挙しつつ次につなげたいなら>>575が書いてるscanやtake_while系
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=113dcf689b4d941c89e714ebb1414958
579デフォルトの名無しさん
2021/01/12(火) 20:39:12.01ID:jo+wjg9+ AsRefトレイト使ってenumから&str返すのっておかしい?
Display実装で文字返してたらアロケートされるからAsRef使おうと思ってるんだけど
Display実装で文字返してたらアロケートされるからAsRef使おうと思ってるんだけど
580デフォルトの名無しさん
2021/01/12(火) 20:51:33.48ID:yLoNqPBg Rustの利用状況調査、ビジネス利用が進む一方で習得の難しさなどが依然課題
https://www.atmarkit.co.jp/ait/articles/2101/12/news046.html
https://www.atmarkit.co.jp/ait/articles/2101/12/news046.html
581デフォルトの名無しさん
2021/01/12(火) 21:41:00.77ID:yVKQhIbd >>579
AsRef に拘らず独立した as_str 用意した方が良いと思う
AsRef に拘らず独立した as_str 用意した方が良いと思う
582デフォルトの名無しさん
2021/01/12(火) 22:42:54.02ID:jo+wjg9+ AsPath が AsRef<Path> になった過去もあるから汎用性持たしてas_str実装するよりAsRefで実装する方がいいといいと思うけど他の人はどう思う?
583デフォルトの名無しさん
2021/01/12(火) 23:59:44.33ID:d2vxqIR1 as_strに一票
584デフォルトの名無しさん
2021/01/13(水) 08:49:31.39ID:u6YyMdJS 自分で使う、as_str
ライブラリとして他で使われる、AsRef
ライブラリとして他で使われる、AsRef
585デフォルトの名無しさん
2021/01/13(水) 09:22:05.24ID:C+q6Ee0+586デフォルトの名無しさん
2021/01/13(水) 10:55:46.25ID:vprvOgCy 単に学習難易度が高いだけでなく、学習が済んだ後もこの言語はめんどくさいが、
C++よりもむしろ。
C++よりもむしろ。
587デフォルトの名無しさん
2021/01/13(水) 12:45:22.11ID:jEgTYBOk >>582
AsRefはIntoOwnedと対になっていて str<->String Path<->PathBuf みたいな ref/owned 関係にあるもの同士の変換に使うものだと思う
enum -> &str はそういう関係にはないので微妙に思う
AsRefはIntoOwnedと対になっていて str<->String Path<->PathBuf みたいな ref/owned 関係にあるもの同士の変換に使うものだと思う
enum -> &str はそういう関係にはないので微妙に思う
588デフォルトの名無しさん
2021/01/13(水) 13:36:01.48ID:h3xJeFVZ >>586
風俗で事が済んだ後で説教始めるオッサンみたい
風俗で事が済んだ後で説教始めるオッサンみたい
589デフォルトの名無しさん
2021/01/13(水) 13:53:35.67ID:p3ZUleCk C++とRustで難しさめんどくささの方向性違うしな
好みの範疇だと思ってる
好みの範疇だと思ってる
590デフォルトの名無しさん
2021/01/13(水) 21:18:34.66ID:LRQMEOBI Rustのめんどくさいところはダントツでクレート関係だよな
標準で入ってないかつ、細かすぎるからコンパイル糞長いし、APIの仕様が統一されてないからドキュメント見ないと話にならんとこ
しかもクレートによっちゃライフタイム絡ませてきてめちゃくちゃになるし
C++はとにかく言語仕様のいらない豊富さが嫌気さす
標準で入ってないかつ、細かすぎるからコンパイル糞長いし、APIの仕様が統一されてないからドキュメント見ないと話にならんとこ
しかもクレートによっちゃライフタイム絡ませてきてめちゃくちゃになるし
C++はとにかく言語仕様のいらない豊富さが嫌気さす
591デフォルトの名無しさん
2021/01/13(水) 21:41:40.93ID:T6eZMBRK D言語かDelphiやれ
592デフォルトの名無しさん
2021/01/13(水) 23:05:33.49ID:q0SQNCdx もう.net5とC#でいいやん
593デフォルトの名無しさん
2021/01/14(木) 01:15:26.66ID:KFRMmKoU >>590
traitのおかげで他と比べるとAPIの統一性は達成されてるようにおもう
traitのおかげで他と比べるとAPIの統一性は達成されてるようにおもう
594デフォルトの名無しさん
2021/01/14(木) 01:57:39.37ID:vEkmKZjk クレートいいと思うけどな
標準ライブラリに入れると破壊的変更できなくなるけどクレートなら古いバージョン使うことも出来るから
気兼ねなくライブラリを進化させることが出来る
標準ライブラリに入れると破壊的変更できなくなるけどクレートなら古いバージョン使うことも出来るから
気兼ねなくライブラリを進化させることが出来る
595デフォルトの名無しさん
2021/01/14(木) 08:51:13.78ID:2AI/maqn pure-Rustのクレートなら今のところ確実にコンパイルは通るしな。
C++だとGitHubから拾ってきたライブラリが手元でコンパイル通るかどうか半々って感じで厳しい。
マイナーなディストリビューションのせいではあるけど、全部Ubuntuに統一というわけにもいかんしなぁ。
C++だとGitHubから拾ってきたライブラリが手元でコンパイル通るかどうか半々って感じで厳しい。
マイナーなディストリビューションのせいではあるけど、全部Ubuntuに統一というわけにもいかんしなぁ。
596デフォルトの名無しさん
2021/01/15(金) 20:23:33.58ID:nexKBT6E struct A;
struct A();
これとこれが定義できる理由ってなんかある?
struct A {};
だけで済むし、記述バラバラになるから統一したいんだけど
struct A();
これとこれが定義できる理由ってなんかある?
struct A {};
だけで済むし、記述バラバラになるから統一したいんだけど
597デフォルトの名無しさん
2021/01/16(土) 00:28:37.68ID:eM3BiVBC Rustが一番めんどくさいのはメモリ管理だな。
というよりメモリ管理の事ばかり気にしてプログラムしなくてはならない。
plain CやC++ではそこまで気にしなくて良い。
というよりメモリ管理の事ばかり気にしてプログラムしなくてはならない。
plain CやC++ではそこまで気にしなくて良い。
598デフォルトの名無しさん
2021/01/16(土) 01:28:58.93ID:/D0gGWRu ?????????
599デフォルトの名無しさん
2021/01/16(土) 11:40:00.74ID:IRkE9de+ いつものやつだ気にするな
600デフォルトの名無しさん
2021/01/16(土) 14:07:27.84ID:WupidWsu 結局メモリを気にする言語にへんな暗黙性を入れるのは失敗ってことだな。
601デフォルトの名無しさん
2021/01/21(木) 02:51:30.26ID:ooF1treM Rust で書いたツールにドキュメントを付けようとしています。
ライブラリのドキュメントではなくツールとしての使い方の詳細で、
readme に書くには大きすぎるような文章です。
cargo.toml では package.documentation でドキュメントの場所を URL で
示すことは出来るようですが、パッケージ内にドキュメントを一緒に入れておいて
cargo install で適当なところにインストールするようなことは出来ないのでしょうか?
あるいは cargo の直接の管理下には入れられないにしても
なんらかの習慣があったりしますか?
ライブラリのドキュメントではなくツールとしての使い方の詳細で、
readme に書くには大きすぎるような文章です。
cargo.toml では package.documentation でドキュメントの場所を URL で
示すことは出来るようですが、パッケージ内にドキュメントを一緒に入れておいて
cargo install で適当なところにインストールするようなことは出来ないのでしょうか?
あるいは cargo の直接の管理下には入れられないにしても
なんらかの習慣があったりしますか?
602デフォルトの名無しさん
2021/01/21(木) 07:00:10.04ID:OA0ITDHD ゴミ言語
603デフォルトの名無しさん
2021/01/21(木) 14:31:58.28ID:3s9o6nSW manみたいにドキュメントインストールする方法は知らないな。
ローカルにインストールしなくてもリポジトリのwikiあたりに使い方書いておいてそれ見てねでいいんじゃないかとおもうけど。
ローカルにインストールしなくてもリポジトリのwikiあたりに使い方書いておいてそれ見てねでいいんじゃないかとおもうけど。
604デフォルトの名無しさん
2021/01/21(木) 21:40:35.33ID:e05IQa93 ビルドスクリプト使ってenv::var("OUT_DIR”)で取得できるパスにファイル出力してるのが多いみたい
605601
2021/01/21(木) 22:18:23.22ID:ooF1treM なるほど。 そういうやり方もあるんですね。
でもドキュメントを各環境で適切な場所に
インストールするのは結局は手作業ということになりそうですね。
そういうことなら無理に自動化するのは諦めて
必要ならこのディレクトリで mdbook コマンドを実行してねみたいな感じにした方がかえって楽かな……
でもドキュメントを各環境で適切な場所に
インストールするのは結局は手作業ということになりそうですね。
そういうことなら無理に自動化するのは諦めて
必要ならこのディレクトリで mdbook コマンドを実行してねみたいな感じにした方がかえって楽かな……
606デフォルトの名無しさん
2021/01/21(木) 22:42:45.36ID:RNEMaupk cargo installでrustバイナリ以外をインストールするオフィシャルの方法は長年用意されてないから別の手段で頑張るしかない
https://github.com/rust-lang/cargo/issues/2729
https://github.com/rust-lang/cargo/issues/2729
607デフォルトの名無しさん
2021/01/24(日) 00:35:05.68ID:sFJWsyrt fn num() -> usize {
10.pow(9)
}
この定数はなぜ推論でusizeにならないんですか?
10.pow(9)
}
この定数はなぜ推論でusizeにならないんですか?
608デフォルトの名無しさん
2021/01/24(日) 19:33:54.83ID:tQo0lqIt もういい加減にしてクレート
609デフォルトの名無しさん
2021/02/03(水) 05:50:55.51ID:0f68sTlM なんでいちいちゴミをワサワサDLしなきゃならねーんだよゴミ言語
610デフォルトの名無しさん
2021/02/03(水) 21:58:38.43ID:eBd9v7fI どしたのわさわさ
611デフォルトの名無しさん
2021/02/03(水) 22:30:52.82ID:9t+fhzYK DustじゃなくRustだからゴミじゃなくてサビ言語だよ
612デフォルトの名無しさん
2021/02/04(木) 19:02:46.18ID:kqT/5NjJ &strってなんで&Stringじゃないの?
613デフォルトの名無しさん
2021/02/04(木) 20:19:37.24ID:qhstqCrC その2つは別のもの
どっちも存在する
&strはstring sliceのborrow
&StringはStringのborrow
どっちも存在する
&strはstring sliceのborrow
&StringはStringのborrow
614デフォルトの名無しさん
2021/02/04(木) 20:39:25.16ID:kqT/5NjJ615デフォルトの名無しさん
2021/02/04(木) 20:54:06.40ID:/mf7s98M それはDerefの効能
616デフォルトの名無しさん
2021/02/04(木) 21:06:19.09ID:/mf7s98M &strはStringの一部か全部へ参照 rust的にはスライスへの参照
&string[1..3] こういうこと
引数を&StringにするのStringの参照しか渡せないが、&strにすればStringの一部や””で囲った&strも渡せる
&string[1..3] こういうこと
引数を&StringにするのStringの参照しか渡せないが、&strにすればStringの一部や””で囲った&strも渡せる
617デフォルトの名無しさん
2021/02/05(金) 01:36:04.17ID:cqRcw5h6618デフォルトの名無しさん
2021/02/05(金) 01:46:13.57ID:ywW/HyXt >>617
StringはDeref<Target=str>を実装してるから&strをとる関数に&String渡せる
https://doc.rust-lang.org/std/string/struct.String.html#deref
StringはDeref<Target=str>を実装してるから&strをとる関数に&String渡せる
https://doc.rust-lang.org/std/string/struct.String.html#deref
619デフォルトの名無しさん
2021/02/05(金) 13:26:40.93ID:ou/gU5gH こういう暗黙変換て混乱を生むだけだと思う。
620デフォルトの名無しさん
2021/02/05(金) 15:35:15.48ID:cqRcw5h6621デフォルトの名無しさん
2021/02/06(土) 16:00:13.52ID:n3CNI52+ Option::filterのResult版って無いのかな?
622デフォルトの名無しさん
2021/02/06(土) 20:10:46.18ID:YrYkvgk0 >>621
条件に合致しない場合は何を返して欲しいの?
条件に合致しない場合は何を返して欲しいの?
623デフォルトの名無しさん
2021/02/06(土) 21:49:40.07ID:b3bDWNzR >>621
and_thenでErr返せば?
and_thenでErr返せば?
624デフォルトの名無しさん
2021/02/06(土) 21:55:40.99ID:n3CNI52+ >>622
引数で渡したエラー値をErrにくるんで返してほしい
引数で渡したエラー値をErrにくるんで返してほしい
625621
2021/02/07(日) 10:23:42.94ID:ik9tpY93 >>623
うん、それが最適でしたね
もともとTと&T -> boolからOption<T>を構築してたコードがあってSome(t).filter(|t| !t.is_hoge())ってしてたんだけど
それをResultに変えようとしたらif式で数行増えちゃって
ちょうど対応するようなのって無いのかな?って思って質問した次第でした
うん、それが最適でしたね
もともとTと&T -> boolからOption<T>を構築してたコードがあってSome(t).filter(|t| !t.is_hoge())ってしてたんだけど
それをResultに変えようとしたらif式で数行増えちゃって
ちょうど対応するようなのって無いのかな?って思って質問した次第でした
626デフォルトの名無しさん
2021/02/07(日) 11:40:55.51ID:NCHwUWPY それはok_orかok_or_elseで変換すればいいだけじゃなくて?
627デフォルトの名無しさん
2021/02/08(月) 19:14:38.32ID:g+sV++N4 Rustの良さが実感できるのは長大なコードをチーム開発するときなのかな
小さいプロジェクトならRustは
・生ポインタ使わない
・できる限りSTLを使う
・const、moveをデフォルトで使う
ことにしたC++に敵わないような
C++の方が柔軟だしず〜っと短く書けるし
小さいプロジェクトならRustは
・生ポインタ使わない
・できる限りSTLを使う
・const、moveをデフォルトで使う
ことにしたC++に敵わないような
C++の方が柔軟だしず〜っと短く書けるし
628デフォルトの名無しさん
2021/02/08(月) 19:48:24.23ID:g+sV++N4 あ、標準の機能とかイディオムを巧みに使えばC++並みに短く書けるよ、というのがあったら教えてください
629デフォルトの名無しさん
2021/02/08(月) 20:52:33.63ID:tj1CufyM どちらかというとC++の方が長くない?
ヘッダとソースの重複とかイテレータが冗長とかshared_ptrが長いとか。
あと小さいプロジェクトだとビルド環境構築の手間が
相対的に大きくなるからC++はつらいな。
ヘッダとソースの重複とかイテレータが冗長とかshared_ptrが長いとか。
あと小さいプロジェクトだとビルド環境構築の手間が
相対的に大きくなるからC++はつらいな。
630デフォルトの名無しさん
2021/02/08(月) 20:54:12.55ID:tj1CufyM あとなるべくconstにしたいのに多用すると結構長い
631デフォルトの名無しさん
2021/02/08(月) 21:36:53.51ID:UsSsiWeS RustスレなのでRustの味方をすれば良いと思うが、>>629はあまりにも言いがかりだろう
> ヘッダとソースの重複
重複するコードを書かなければならないことなどない
> イテレータが冗長
今どきautoせずにイテレータを書くことはない
> shared_ptrが長いとか
これは確かに
> ヘッダとソースの重複
重複するコードを書かなければならないことなどない
> イテレータが冗長
今どきautoせずにイテレータを書くことはない
> shared_ptrが長いとか
これは確かに
632デフォルトの名無しさん
2021/02/08(月) 22:14:40.49ID:tj1CufyM633デフォルトの名無しさん
2021/02/08(月) 22:48:07.53ID:UsSsiWeS >>632
特殊化が必要なら当然特殊化するし、プロトタイプしか与えられてない関数は当然中身を他の場所で実装しなければならない
が、いずれもヘッダその他で書いてあるのと同じことを繰り返し書くという意味ではない
「引数と返り値をプロトタイプと実装で二度書くじゃないか」と主張してるのか?
だとしたら、「Rustのtraitとimplは同じことの繰り返しだ」と同レベルのデタラメだ
> あとイテレータはbegin/endのこと
範囲for文はあるので、コンテナを走査する時にはbegin()もend()も書く必要はない
が、begin()やend()の指すイテレータが必要なら当然書く必要がある
しかしこれより簡潔な表現方法があるか?
特殊化が必要なら当然特殊化するし、プロトタイプしか与えられてない関数は当然中身を他の場所で実装しなければならない
が、いずれもヘッダその他で書いてあるのと同じことを繰り返し書くという意味ではない
「引数と返り値をプロトタイプと実装で二度書くじゃないか」と主張してるのか?
だとしたら、「Rustのtraitとimplは同じことの繰り返しだ」と同レベルのデタラメだ
> あとイテレータはbegin/endのこと
範囲for文はあるので、コンテナを走査する時にはbegin()もend()も書く必要はない
が、begin()やend()の指すイテレータが必要なら当然書く必要がある
しかしこれより簡潔な表現方法があるか?
634デフォルトの名無しさん
2021/02/08(月) 22:59:07.96ID:tj1CufyM >>633
いや、Rustのtraitとimplも同じことの繰り返しだと思うが。
もちろんそれぞれに意味があるのは分かるが、今話題になってるのは長いかどうかなので、単に長いのでは?ということ。
begin/endは言われてみれば確かにそんなに長くもないな。
いや、Rustのtraitとimplも同じことの繰り返しだと思うが。
もちろんそれぞれに意味があるのは分かるが、今話題になってるのは長いかどうかなので、単に長いのでは?ということ。
begin/endは言われてみれば確かにそんなに長くもないな。
635デフォルトの名無しさん
2021/02/08(月) 23:04:02.74ID:tj1CufyM そういえばRustだとderiveで導出できるようなのを
手で書かないといけないのも面倒だと思ってたけど
それも最近のC++だと便利になってるのかな?
手で書かないといけないのも面倒だと思ってたけど
それも最近のC++だと便利になってるのかな?
636デフォルトの名無しさん
2021/02/08(月) 23:09:22.70ID:UsSsiWeS >>634
〜〜〜〜〜ッッ!!?!!????
型を示すだけぞ???
どういう理屈で「どちらかというとC++の方が長い」???
「プロトタイプ」なる仕様が冗長だと思ってるということか?
だとしてもどこがどうRustより長い?
traitとimplが同じことの繰り返しに見えるなら尚更
〜〜〜〜〜ッッ!!?!!????
型を示すだけぞ???
どういう理屈で「どちらかというとC++の方が長い」???
「プロトタイプ」なる仕様が冗長だと思ってるということか?
だとしてもどこがどうRustより長い?
traitとimplが同じことの繰り返しに見えるなら尚更
637デフォルトの名無しさん
2021/02/08(月) 23:20:22.89ID:34Jom8HU 刃牙みてぇな驚き方
638デフォルトの名無しさん
2021/02/09(火) 00:25:25.36ID:HbSSO5iG >>636
気持ち悪いなお前……
気持ち悪いなお前……
639デフォルトの名無しさん
2021/02/09(火) 00:34:18.83ID:wDpL+x9E ゆうてID:tj1CufyMがもの知らん過ぎるよ
刃牙クンが正しい
刃牙クンが正しい
640デフォルトの名無しさん
2021/02/09(火) 00:49:55.66ID:M+MJQwFs >>627 がどういうところでrustを冗長に感じたのかが分からないと身のある議論にならないのではないか
641デフォルトの名無しさん
2021/02/09(火) 01:06:11.87ID:iu64Jkj8 let v2 = v.iter().take_while(pred).collect::<Vec<_>>();
auto iter_end = std::find_if_not(v.cbegin(), v.cend(), pred);
auto v2 = std::vector<Hoge>(v.cbegin(), iter_end);
auto iter_end = std::find_if_not(v.cbegin(), v.cend(), pred);
auto v2 = std::vector<Hoge>(v.cbegin(), iter_end);
642デフォルトの名無しさん
2021/02/09(火) 14:34:18.07ID:u94zqiaA Rust言語を推進する「Rust Foundation」設立。AWS、Google、マイクロソフト、モジラ、ファーウェイらが設立メンバー
https://www.publickey1.jp/blog/21/rustrust_foundationawsgoogle.html
https://www.publickey1.jp/blog/21/rustrust_foundationawsgoogle.html
643デフォルトの名無しさん
2021/02/09(火) 15:30:38.01ID:kPdoOyk6644デフォルトの名無しさん
2021/02/09(火) 15:37:53.29ID:hLMZgkSi ファーwww
ウェーイwww
ウェーイwww
645デフォルトの名無しさん
2021/02/09(火) 15:48:29.20ID:Pj9Pa3V5 >>642
GoogleもMSも節操ないな。
GoogleもMSも節操ないな。
646デフォルトの名無しさん
2021/02/09(火) 16:43:44.21ID:gWi0ogeT 非同期って結局のところtokio使えばいいの?
647デフォルトの名無しさん
2021/02/09(火) 17:12:10.08ID:hLMZgkSi648デフォルトの名無しさん
2021/02/09(火) 18:32:36.30ID:nK2/UuNc traitとimplが同じことの繰り返しは流石にキテレツ過ぎてワロタ
こういう基本的な言語仕様も分かってない人にとってRust使うメリットってあるのかな
「どっちが短く書けるか」については、流石にC++じゃないかな
良くも悪くも自由だし、短さだけを追求したクソコードも作れる
一方でRustも一応エルゴノミクスを掲げてはいるし、冗長さは感じない
C++が短くでき過ぎる、って言い方が正しいとおも
こういう基本的な言語仕様も分かってない人にとってRust使うメリットってあるのかな
「どっちが短く書けるか」については、流石にC++じゃないかな
良くも悪くも自由だし、短さだけを追求したクソコードも作れる
一方でRustも一応エルゴノミクスを掲げてはいるし、冗長さは感じない
C++が短くでき過ぎる、って言い方が正しいとおも
649デフォルトの名無しさん
2021/02/09(火) 19:12:15.97ID:tpC3waGh >>642
林檎やfacebookの参入、ゲームやスマホでの導入例が出てくればこれはかなりの地位を占めるな
林檎やfacebookの参入、ゲームやスマホでの導入例が出てくればこれはかなりの地位を占めるな
650デフォルトの名無しさん
2021/02/09(火) 20:13:22.59ID:G8as3nFu コードを短くできるなんてどうでもいいことに囚われて半端になってる印象。
651デフォルトの名無しさん
2021/02/09(火) 21:03:00.62ID:9cByPiIZ >>650
rustが?
rustが?
652デフォルトの名無しさん
2021/02/09(火) 22:20:32.26ID:tpC3waGh どうでもいいことか?
653デフォルトの名無しさん
2021/02/09(火) 23:19:34.12ID:iu64Jkj8 程度問題
654デフォルトの名無しさん
2021/02/10(水) 00:30:31.60ID:KzEq3JVg 具体的なコードの話も出さずに議論されても困る
655デフォルトの名無しさん
2021/02/10(水) 02:24:50.74ID:E/DLe6HD Firefoxでは160,000行のC ++コードを85,000行のRustコードに置き換えたと言ってる
656デフォルトの名無しさん
2021/02/10(水) 06:12:58.16ID:IJdnUleO いやーRust難しくないっすか…
3回くらい入門したけどrustlingsのiterあたりでつらくなってくる
アホは他の優しい最新言語やったほうがいいんですかねぇ
3回くらい入門したけどrustlingsのiterあたりでつらくなってくる
アホは他の優しい最新言語やったほうがいいんですかねぇ
657デフォルトの名無しさん
2021/02/10(水) 08:20:43.62ID:Y3LDlcI4 でもRustのコンパイル基盤のLLVMはいつまで経ってもC++製のまんまだよね
書き直さなきゃC++の牙城は壊せんで
書き直さなきゃC++の牙城は壊せんで
658デフォルトの名無しさん
2021/02/10(水) 08:39:46.46ID:KAhsYwl/ それAppleに言えよ…
659デフォルトの名無しさん
2021/02/10(水) 09:32:21.19ID:KzEq3JVg craneliftがあるじゃん
デバッグビルド向けだけど
デバッグビルド向けだけど
660デフォルトの名無しさん
2021/02/10(水) 09:36:57.75ID:+cBPKBOz コンパイラはrust自身で作られてるからそのうちそうなるんじゃね?
661デフォルトの名無しさん
2021/02/10(水) 23:59:35.72ID:ToMnnTm0662デフォルトの名無しさん
2021/02/11(木) 01:31:10.60ID:9tQEVdS2663デフォルトの名無しさん
2021/02/11(木) 02:06:38.13ID:Bko8L/Zl664デフォルトの名無しさん
2021/02/11(木) 02:10:08.49ID:9tQEVdS2665デフォルトの名無しさん
2021/02/11(木) 02:23:45.58ID:Bko8L/Zl >>664
「使いこなす」がレベチ過ぎてワロシ
コンテナとアルゴに関しては俺もSTL使う方が良いと思ってたわ
vector<bool>とか、難のある仕様があるのは理解してたがそういうのに個別に対処すれば十分だろうと
リーナスとかもSTLが大ッ嫌いだという記事をよく見るが、具体的にどこを毛嫌いしてるのか俺は理解していない
「使いこなす」がレベチ過ぎてワロシ
コンテナとアルゴに関しては俺もSTL使う方が良いと思ってたわ
vector<bool>とか、難のある仕様があるのは理解してたがそういうのに個別に対処すれば十分だろうと
リーナスとかもSTLが大ッ嫌いだという記事をよく見るが、具体的にどこを毛嫌いしてるのか俺は理解していない
666デフォルトの名無しさん
2021/02/11(木) 03:22:28.69ID:veopzNW6 いつもの爺だよ
667デフォルトの名無しさん
2021/02/11(木) 10:32:11.70ID:uGNpwdY5 そりゃOSレベルで見たらメモリの使い方がラップされるようなライブラリは使わんだろ。
馬鹿でもわかる話だと思ってたがそうでもないのか。
馬鹿でもわかる話だと思ってたがそうでもないのか。
668デフォルトの名無しさん
2021/02/11(木) 10:55:34.35ID:681aVeVl むしろ C++ のつらさを知ってないと Rust の良さは (悪さもだが) わからんだろ。
669デフォルトの名無しさん
2021/02/11(木) 12:17:58.13ID:tLNN1WhF >>667
それ言ったらC++のCじゃない部分は全部ダメじゃね
それ言ったらC++のCじゃない部分は全部ダメじゃね
670デフォルトの名無しさん
2021/02/11(木) 12:18:18.96ID:tLNN1WhF STLに限らず
671デフォルトの名無しさん
2021/02/11(木) 12:38:34.69ID:veopzNW6672デフォルトの名無しさん
2021/02/11(木) 15:13:11.82ID:9tQEVdS2673デフォルトの名無しさん
2021/02/11(木) 15:46:32.06ID:LFj6F75s >>672
> STLはCの良さを台無しにするような傾向がある。
これは観念的な話?
パフォーマンス的には、もちろん不要なコピー等は避けるという前提のもとで、同じなのかなって思ってたんだけど
> C++の言語仕様自体は適切に使えばそのようなことはない。
適切というのは、C with class として使えば、ということ?
> STLはCの良さを台無しにするような傾向がある。
これは観念的な話?
パフォーマンス的には、もちろん不要なコピー等は避けるという前提のもとで、同じなのかなって思ってたんだけど
> C++の言語仕様自体は適切に使えばそのようなことはない。
適切というのは、C with class として使えば、ということ?
674デフォルトの名無しさん
2021/02/11(木) 16:26:39.58ID:681aVeVl >>672
STL というものは C++ の中にはない。
STL というものは C++ の中にはない。
675デフォルトの名無しさん
2021/02/11(木) 16:31:10.44ID:681aVeVl C++ の標準ライブラリは C 的な良さを殺さないように配慮しまくってるから
抽象化層で抽象化しきれずにイビツになってるんで、
出来が良いとは思わんが C の良さを台無しにしてるとは思わんな。
抽象化層で抽象化しきれずにイビツになってるんで、
出来が良いとは思わんが C の良さを台無しにしてるとは思わんな。
676デフォルトの名無しさん
2021/02/11(木) 16:32:15.96ID:9tQEVdS2 >>675
そう思ってるならあなたも設計者の頭の出来も馬鹿。
そう思ってるならあなたも設計者の頭の出来も馬鹿。
677デフォルトの名無しさん
2021/02/11(木) 17:01:42.79ID:/o5Cctlu 他所でやれ
678デフォルトの名無しさん
2021/02/11(木) 17:04:12.74ID:BUYxyJ+C >>662
MozillaもGoogleもMSもC++を使いこなせないからRustを支援してるって主張か?
MozillaもGoogleもMSもC++を使いこなせないからRustを支援してるって主張か?
679デフォルトの名無しさん
2021/02/11(木) 17:27:06.59ID:9tQEVdS2 >>678
Mozillaなんか独占禁止法違反を誤魔化すためのGoogleの下請けに過ぎないので
レベルの高いプログラマはもはやいないし、MSやGoogleは巨大すぎるので
できそこないのプログラマも多い。
Mozillaなんか独占禁止法違反を誤魔化すためのGoogleの下請けに過ぎないので
レベルの高いプログラマはもはやいないし、MSやGoogleは巨大すぎるので
できそこないのプログラマも多い。
680デフォルトの名無しさん
2021/02/11(木) 17:42:02.28ID:7PiE9zQt おじいちゃんの想像力が凄すぎる
681デフォルトの名無しさん
2021/02/11(木) 19:00:14.15ID:yn2eFMfP トランプ好きそう
682デフォルトの名無しさん
2021/02/11(木) 19:04:26.47ID:BUYxyJ+C >>679
なるほど、Mozillaのプログラマは全員レベル低いしGoogleやMSでrustに関わってる人も全員出来損ないという主張なのね
なるほど、Mozillaのプログラマは全員レベル低いしGoogleやMSでrustに関わってる人も全員出来損ないという主張なのね
683デフォルトの名無しさん
2021/02/11(木) 19:17:51.67ID:du0efLq8 ダニング=クルーガー効果
ダニング=クルーガー効果とは、能力の低い人物が自らの容姿や発言・行動などについて、
実際よりも高い評価を行ってしまう優越の錯覚(英語版)を生み出す認知バイアス。
この現象は、人間が自分自身の不適格性を認識すること(メタ認知)ができないことによって生じる。
1999年にこの効果を定義したコーネル大学のデイヴィッド・ダニング(英語版)とジャスティン・クルーガー(英語版)は、
「優越の錯覚を生み出す認知バイアスは、能力の高い人物の場合は外部(=他人)に対する過小評価に起因している。
一方で、能力の低い人物の場合は内部(=自身)に対する過大評価に起因している。」と述べている。
ダニング=クルーガー効果とは、能力の低い人物が自らの容姿や発言・行動などについて、
実際よりも高い評価を行ってしまう優越の錯覚(英語版)を生み出す認知バイアス。
この現象は、人間が自分自身の不適格性を認識すること(メタ認知)ができないことによって生じる。
1999年にこの効果を定義したコーネル大学のデイヴィッド・ダニング(英語版)とジャスティン・クルーガー(英語版)は、
「優越の錯覚を生み出す認知バイアスは、能力の高い人物の場合は外部(=他人)に対する過小評価に起因している。
一方で、能力の低い人物の場合は内部(=自身)に対する過大評価に起因している。」と述べている。
684デフォルトの名無しさん
2021/02/11(木) 19:50:13.66ID:veopzNW6 いつもの爺だって言ってんのに
685デフォルトの名無しさん
2021/02/11(木) 20:05:54.55ID:LFj6F75s686デフォルトの名無しさん
2021/02/11(木) 20:11:37.99ID:ntK2cQ4K ここはC++のスレじゃないので他所に行ってね
687デフォルトの名無しさん
2021/02/11(木) 20:55:43.37ID:681aVeVl >>685
インターフェイス (仕様) の話だけど実装の話でもある。
たとえば C++ では vector の大きさが変わったら (それの要素を指す) イテレータは一斉に無効になって
コンパイル時にも実行時にも捕捉されない (捕捉することを保証しない) のは
明らかに vector の実装の都合を想定していて、
仕様を満たす範囲で効率的に実装すれば (vector の) イテレータの実体はポインタ一個になる。
C++ の標準ライブラリは C で出来ること、 C の習慣の見栄えを変えているに過ぎないし、
そうなるようにデザインされている。
実装がどうなっているかが透けて見えるような仕様になっているという意味で抽象化がしきれていないと書いた。
インターフェイス (仕様) の話だけど実装の話でもある。
たとえば C++ では vector の大きさが変わったら (それの要素を指す) イテレータは一斉に無効になって
コンパイル時にも実行時にも捕捉されない (捕捉することを保証しない) のは
明らかに vector の実装の都合を想定していて、
仕様を満たす範囲で効率的に実装すれば (vector の) イテレータの実体はポインタ一個になる。
C++ の標準ライブラリは C で出来ること、 C の習慣の見栄えを変えているに過ぎないし、
そうなるようにデザインされている。
実装がどうなっているかが透けて見えるような仕様になっているという意味で抽象化がしきれていないと書いた。
688デフォルトの名無しさん
2021/02/11(木) 21:35:06.01ID:qccRsQET >>676はクソか馬鹿。理由は説明しない。
689デフォルトの名無しさん
2021/02/11(木) 23:40:49.80ID:zsmCiXPn690デフォルトの名無しさん
2021/02/12(金) 00:55:03.10ID:rREL60wB691デフォルトの名無しさん
2021/02/12(金) 01:08:51.70ID:2OOQ6m86 >>689
完全に成功していると言い切れない部分はあるかもしれないけど、
実行時に処理すべきことが同じならクラスやらテンプレートやらでラップしても
C と C++ でほとんど差は付かないよ。
少なくとも現代的な処理系で最適化を有効にして比較した場合には。
完全に成功していると言い切れない部分はあるかもしれないけど、
実行時に処理すべきことが同じならクラスやらテンプレートやらでラップしても
C と C++ でほとんど差は付かないよ。
少なくとも現代的な処理系で最適化を有効にして比較した場合には。
692デフォルトの名無しさん
2021/02/12(金) 01:20:11.09ID:2OOQ6m86 >>690
それはどうだろう。
俺はアマチュアだがそれでも C++ を二十年以上触ってきた感覚で言えば
Rust はかなり良いという印象なので、 C++ のグダグダさに
うんざりしてる人は結構いるんじゃないか?
C++ の自由さを楽に感じている部分もあるんだが、結局はツギハギだからなぁ。
理念的な良し悪しを置くとしても長期にわたって機能を増やしていれば
一貫性のないところだっていっぱい出てくるのは仕方がないことで、
どこかで時代をリセットしてやり直す必要はあるんじゃないかと思う。
俺にとってはそれが Rust って感じ。
それはどうだろう。
俺はアマチュアだがそれでも C++ を二十年以上触ってきた感覚で言えば
Rust はかなり良いという印象なので、 C++ のグダグダさに
うんざりしてる人は結構いるんじゃないか?
C++ の自由さを楽に感じている部分もあるんだが、結局はツギハギだからなぁ。
理念的な良し悪しを置くとしても長期にわたって機能を増やしていれば
一貫性のないところだっていっぱい出てくるのは仕方がないことで、
どこかで時代をリセットしてやり直す必要はあるんじゃないかと思う。
俺にとってはそれが Rust って感じ。
693デフォルトの名無しさん
2021/02/12(金) 07:21:37.77ID:dfrGT/mn test
694デフォルトの名無しさん
2021/02/12(金) 15:00:39.40ID:Icv/F37w rustももう十分一貫性ないだろ。c++リセットしたい割に同じ道行ってるのがどうしようもねーなという印象。
695デフォルトの名無しさん
2021/02/12(金) 15:46:07.19ID:Sqde6WAi だからお気持ちはいいから具体例を挙げろよ
696デフォルトの名無しさん
2021/02/12(金) 16:25:53.42ID:2OOQ6m86 >>694
一貫性が壊れてきてるというのはわかるよ。
でも、それを繰り返すもんだという諦めがあるから、
Rust がグダグダになりきったらまた新しい何かが登場するだろうと期待して今は Rust ってこと。
C++ の状況をなぞるならこれから 15 年か 20 年くらいはなんとかなるだろ。 それで十分だ。
>>695
以前のスレでも書いたような気がするが、
is_alphabetic の引数は self なのに is_ascii_alphabetic は &self だったりするとかみたいな
微妙な歴史的経緯がちょろちょろと見え隠れする。
個別に見れば重要ではないんだけど、
そういうどうでもいいことの積み重ねが全体としてのいびつさになる。
かといってそこらへんを綺麗に整理しつづけるために互換性を失うようでも
受け入れられなかっただろうというのもあるので、
そこらへんは本当にしゃーないんだわ。
一貫性が壊れてきてるというのはわかるよ。
でも、それを繰り返すもんだという諦めがあるから、
Rust がグダグダになりきったらまた新しい何かが登場するだろうと期待して今は Rust ってこと。
C++ の状況をなぞるならこれから 15 年か 20 年くらいはなんとかなるだろ。 それで十分だ。
>>695
以前のスレでも書いたような気がするが、
is_alphabetic の引数は self なのに is_ascii_alphabetic は &self だったりするとかみたいな
微妙な歴史的経緯がちょろちょろと見え隠れする。
個別に見れば重要ではないんだけど、
そういうどうでもいいことの積み重ねが全体としてのいびつさになる。
かといってそこらへんを綺麗に整理しつづけるために互換性を失うようでも
受け入れられなかっただろうというのもあるので、
そこらへんは本当にしゃーないんだわ。
697デフォルトの名無しさん
2021/02/12(金) 18:51:43.73ID:HD0w64Tf エディションで定期的にリセットする仕組みが機能するかどうかは興味あるな
Rustで初めて挑戦する感じだから、良い感じに機能するのはさらに次世代の言語になるだろうけど
Rustで初めて挑戦する感じだから、良い感じに機能するのはさらに次世代の言語になるだろうけど
>>687
>実装がどうなっているかが透けて見えるような仕様
私はむしろ、実装が透けて見えるのが王道だとおもっていたのですが、あなたのいう「抽象性」というのが私の感覚とは違うのかもしれませんね
抽象性を徹底して理解するためには、どんな勉強をすればいいのでしょうか?
>実装がどうなっているかが透けて見えるような仕様
私はむしろ、実装が透けて見えるのが王道だとおもっていたのですが、あなたのいう「抽象性」というのが私の感覚とは違うのかもしれませんね
抽象性を徹底して理解するためには、どんな勉強をすればいいのでしょうか?
>>692
>C++ のグダグダさにうんざりしてる人は結構いるんじゃないか?
私はまだ経験が浅いのかもしれませんが、そんなに C++ がグダグダだとは思っていません
どういうところがグダグダなのか例示していただけるとありがたいです‥‥
>C++ のグダグダさにうんざりしてる人は結構いるんじゃないか?
私はまだ経験が浅いのかもしれませんが、そんなに C++ がグダグダだとは思っていません
どういうところがグダグダなのか例示していただけるとありがたいです‥‥
700はちみつ餃子 ◆8X2XSCHEME
2021/02/13(土) 11:09:55.70ID:sNJoTpmN >>698
抽象というのは、要は余計な要素をそぎ落とすという話なので考え方によっては
どこが余計なのかというのは変わりうるけども、仮に vector の本質を
「縮小・伸長可能な配列」であると考えるならば
・ 要素が隣り合う
・ 要素アクセスのコストのオーダーは O(1) である
といった性質は本質に付随する性質として受け入れられる。 でも、
・ 配列を伸ばしたらイテレータが無効になる
という仕様は
・ 配列の大きさを変えるのをメモリの確保しなおしで実現する
・ イテレータの実体はポインタ一個である
という実装上の理由 (を想定している) なので、抽象化の漏れだと思う。
イテレータをコンテナ (の参照) とインデックスの組で実装すれば回避可能なわけだし。
でも C++ の標準ライブラリでは C の価値観を以て抽象化よりも実行効率を優先するという選択をした。
繰り返すけど、これは何を本質とみなすかという見方によって変わりうるので、
考え方によって詳細は変わるかもしれないということには注意。
・ 対象は何である (ように見せている) か?
・ 対象がそう見せようとしている通りに使えるか?
・ その上で対象がそう見せかけようとする以外の部分 (実装の都合) を「忘れられる」か?
というのがライブラリが持つ抽象性。
カプセル化で大事なのは情報隠蔽だというのをどっかで読んだことくらいあるでしょ。
余計なことは見せないほうがいい。
んで、私 (>>687) にとっては vector のメモリ管理の都合は (少なくとも必要になるまでは)
忘れていたい余計なことだと思えるということ。
抽象というのは、要は余計な要素をそぎ落とすという話なので考え方によっては
どこが余計なのかというのは変わりうるけども、仮に vector の本質を
「縮小・伸長可能な配列」であると考えるならば
・ 要素が隣り合う
・ 要素アクセスのコストのオーダーは O(1) である
といった性質は本質に付随する性質として受け入れられる。 でも、
・ 配列を伸ばしたらイテレータが無効になる
という仕様は
・ 配列の大きさを変えるのをメモリの確保しなおしで実現する
・ イテレータの実体はポインタ一個である
という実装上の理由 (を想定している) なので、抽象化の漏れだと思う。
イテレータをコンテナ (の参照) とインデックスの組で実装すれば回避可能なわけだし。
でも C++ の標準ライブラリでは C の価値観を以て抽象化よりも実行効率を優先するという選択をした。
繰り返すけど、これは何を本質とみなすかという見方によって変わりうるので、
考え方によって詳細は変わるかもしれないということには注意。
・ 対象は何である (ように見せている) か?
・ 対象がそう見せようとしている通りに使えるか?
・ その上で対象がそう見せかけようとする以外の部分 (実装の都合) を「忘れられる」か?
というのがライブラリが持つ抽象性。
カプセル化で大事なのは情報隠蔽だというのをどっかで読んだことくらいあるでしょ。
余計なことは見せないほうがいい。
んで、私 (>>687) にとっては vector のメモリ管理の都合は (少なくとも必要になるまでは)
忘れていたい余計なことだと思えるということ。
701はちみつ餃子 ◆8X2XSCHEME
2021/02/13(土) 11:21:51.89ID:sNJoTpmN >>699
特にいびつさを生み出している例はヘッダファイルかな。
ソースファイル (.c) がひとつのモジュールとして機能して
ヘッダファイルがモジュールの外に向けたインターフェイスとして機能する
というのは C の世界ではまあまあ上手くいっているのだけど、
ヘッダファイルに定義を書くようになってから役割の境界が破綻してきた。
従来の C の世界では「定義はどこかのコンパイル単位に属す」という前提があったが、
ヘッダ内での実装 (テンプレートやインライン関数) ははっきりした所属がない。
テンプレートαがテンプレートβを使っていてソースファイルγでαを使いたければ
γ内からβも見えてしまうので隠蔽しきれない。 (カプセル化の破綻)
C++er にとってモジュール機能の導入が悲願のひとつと言われ続けていたのは、
ヘッダファイルという仕組みが理由になっている色々なグダグダの解消につながることが
期待されていたからだよ。
C++20 でとりあえずモジュールが導入されたけど色々な機能をモジュールを前提
にしたものに置き換えて古い仕組みがフェードアウトするまではまだまだグダグダする
だろうけどな。
ところでこれ以上は Rust スレで C++ の話を続けるとうっとうしがられるので、
質問があればこれ以降は C++ スレで。
特にいびつさを生み出している例はヘッダファイルかな。
ソースファイル (.c) がひとつのモジュールとして機能して
ヘッダファイルがモジュールの外に向けたインターフェイスとして機能する
というのは C の世界ではまあまあ上手くいっているのだけど、
ヘッダファイルに定義を書くようになってから役割の境界が破綻してきた。
従来の C の世界では「定義はどこかのコンパイル単位に属す」という前提があったが、
ヘッダ内での実装 (テンプレートやインライン関数) ははっきりした所属がない。
テンプレートαがテンプレートβを使っていてソースファイルγでαを使いたければ
γ内からβも見えてしまうので隠蔽しきれない。 (カプセル化の破綻)
C++er にとってモジュール機能の導入が悲願のひとつと言われ続けていたのは、
ヘッダファイルという仕組みが理由になっている色々なグダグダの解消につながることが
期待されていたからだよ。
C++20 でとりあえずモジュールが導入されたけど色々な機能をモジュールを前提
にしたものに置き換えて古い仕組みがフェードアウトするまではまだまだグダグダする
だろうけどな。
ところでこれ以上は Rust スレで C++ の話を続けるとうっとうしがられるので、
質問があればこれ以降は C++ スレで。
702デフォルトの名無しさん
2021/02/13(土) 12:33:21.13ID:WXR7/a5A 板違いでしたらすみません。
カスタムSMGでリロードしても
弾が装填されません。
弾はピストル弾であってますよね?
バグですかね
よろしくお願いします
カスタムSMGでリロードしても
弾が装填されません。
弾はピストル弾であってますよね?
バグですかね
よろしくお願いします
703デフォルトの名無しさん
2021/02/13(土) 12:36:25.47ID:WXR7/a5A 板違いでしたらすみません。
カスタムSMGでリロードしても弾が装填されません。
ちなみにピストル弾です。
バグですかね
よろしくお願いします。
カスタムSMGでリロードしても弾が装填されません。
ちなみにピストル弾です。
バグですかね
よろしくお願いします。
704デフォルトの名無しさん
2021/02/13(土) 12:37:34.81ID:36lE3GzA わかりにくいボケ
705はちみつ餃子 ◆8X2XSCHEME
2021/02/13(土) 12:45:41.52ID:sNJoTpmN たぶんこれとひっかけたネタ
https://store.steampowered.com/app/252490/Rust/
https://store.steampowered.com/app/252490/Rust/
706デフォルトの名無しさん
2021/02/13(土) 13:05:51.12ID:w+5Lz0+D 鉄道やデジカメ、プログラム、ゲームの板のスレって
いつも無関係な話題で罵りあってるよね
これらの板って何か変な物を吸引するのだろうか
いつも無関係な話題で罵りあってるよね
これらの板って何か変な物を吸引するのだろうか
707デフォルトの名無しさん
2021/02/13(土) 13:33:02.22ID:WXR7/a5A →704
ボケ言うなカス
ボケ言うなカス
708デフォルトの名無しさん
2021/02/13(土) 14:06:11.02ID:jbR8Qrt4 ▷707
なんじゃワレやるんかコラ
なんじゃワレやるんかコラ
709デフォルトの名無しさん
2021/02/13(土) 14:49:42.47ID:pbGXUc6m pythonのモジュール作成者にもっとrustの利用が促進されればいい感じになりそうな気がする
710デフォルトの名無しさん
2021/02/13(土) 19:30:22.42ID:cu3O8Dcb はっきり言って邪魔でしかない
711デフォルトの名無しさん
2021/02/13(土) 19:58:39.56ID:3pvm/7w/ >>709
Rust 使えるなら Python 要らないだろ。
Rust 使えるなら Python 要らないだろ。
712デフォルトの名無しさん
2021/02/13(土) 20:30:02.97ID:iTD0ef09 プラグインとしてのwasmは流行りますか?
713デフォルトの名無しさん
2021/02/13(土) 21:46:14.79ID:sNJoTpmN >>712
可能性は十分にあると思う。
可能性は十分にあると思う。
714デフォルトの名無しさん
2021/02/13(土) 23:21:08.34ID:ahglb0ed wasmはWebブラウザだけでなく、令和のJavaアプレットのように Write once, run anywhere を標語に
あらゆる目的で使われるようになるよ
あらゆる目的で使われるようになるよ
715デフォルトの名無しさん
2021/02/13(土) 23:57:58.78ID:qgbbzUT6 ちょっとしたやつでもファイル容量大きくなるからまだ無理
さらにいえばjsでもgpu使えるから並列計算ならそれ使えばいいし、wasmの用途は限られる
将来的に5gとかで通信速度上がったら使われるようになると思う
さらにいえばjsでもgpu使えるから並列計算ならそれ使えばいいし、wasmの用途は限られる
将来的に5gとかで通信速度上がったら使われるようになると思う
716デフォルトの名無しさん
2021/02/14(日) 00:05:54.10ID:FhxBluZZ 今、5GのEdge Computingがwasmの適用範囲として最も注目されている領域
717デフォルトの名無しさん
2021/02/14(日) 10:45:44.60ID:ICgnupj6 wasmバブルってのはちょっと考えにくい
718デフォルトの名無しさん
2021/02/14(日) 11:17:05.02ID:fVniJNpS 泡沫の夢という意味かもw
>>700
>・ 配列を伸ばしたらイテレータが無効になる
>という仕様は
> ・ 配列の大きさを変えるのをメモリの確保しなおしで実現する
> ・ イテレータの実体はポインタ一個である
>という実装上の理由 (を想定している) なので、抽象化の漏れだと思う。
ふむふむ‥‥抽象化といってもいろいろあるんですね‥‥
>イテレータをコンテナ (の参照) とインデックスの組で実装すれば回避可能なわけだし。
私はイテレータはポインタの読み替えだと決め付けていたので、こういうイテレータの実装はちょっと抵抗がありますね
コンテナへの参照とインデックスを組みするとなると、これはスレッドセーフのことを考えないといけないな、と、どうしても思ってしまいます
そういうこと、すなわち必要に応じて重たいけれどもスレッドセーフにするか、それとも単一スレッド内の話だから軽く書きとばすか、というのはアプリケーション側の裁量だと思っています
言語標準で最初から「スレッドセーフにしました!」というのは、C/C++ 的にはイマイチではないかな、と
>・ 配列を伸ばしたらイテレータが無効になる
>という仕様は
> ・ 配列の大きさを変えるのをメモリの確保しなおしで実現する
> ・ イテレータの実体はポインタ一個である
>という実装上の理由 (を想定している) なので、抽象化の漏れだと思う。
ふむふむ‥‥抽象化といってもいろいろあるんですね‥‥
>イテレータをコンテナ (の参照) とインデックスの組で実装すれば回避可能なわけだし。
私はイテレータはポインタの読み替えだと決め付けていたので、こういうイテレータの実装はちょっと抵抗がありますね
コンテナへの参照とインデックスを組みするとなると、これはスレッドセーフのことを考えないといけないな、と、どうしても思ってしまいます
そういうこと、すなわち必要に応じて重たいけれどもスレッドセーフにするか、それとも単一スレッド内の話だから軽く書きとばすか、というのはアプリケーション側の裁量だと思っています
言語標準で最初から「スレッドセーフにしました!」というのは、C/C++ 的にはイマイチではないかな、と
720はちみつ餃子 ◆8X2XSCHEME
2021/02/15(月) 01:57:36.14ID:GNSRFiac >>719
> C/C++ 的にはイマイチではないかな、と
そうだよ。
C++ が C 的な考え方から離れなかった (他の方針も取れたのに) という話をしてる。
C/C++ 的にイマイチになる例を出したんだからイマイチだよ。
> C/C++ 的にはイマイチではないかな、と
そうだよ。
C++ が C 的な考え方から離れなかった (他の方針も取れたのに) という話をしてる。
C/C++ 的にイマイチになる例を出したんだからイマイチだよ。
721デフォルトの名無しさん
2021/02/15(月) 02:16:06.50ID:dmuMtjqZ WebAssemblyで書かれたアプリはあるんですか?
722デフォルトの名無しさん
2021/02/15(月) 03:28:26.27ID:QPKY0Zj9 喧嘩売りたいわけじゃないんですけど、Rustって明示性を重視してますよね、mutとか、所有権とか
でもそのくせ式としてreturnを省略できたり、でも例外はないからOptionやResultが普通でunwrap
しなくちゃならなかったり、でも>>505-508のようにメモリモデルの(まだ)定義がなく?、>>333
みたいな暗黙の再借用が出来たり色々ちぐはぐな気がするんですが、1.5、2.0辺りになったら大幅に
変わったりしますか?足を撃ち抜かないCPPとしては「良い」出来だと思うんですが、、正直、ほんの
ちょっと触ってみてCargoコンパイルが重くて、特徴の明示的など非常にめんどくさいんですがそういうもの?
C++20やC++23なんてありますが正直、もう時代の役目を終えたと感じます。いくら色々な機能を追加しても
能力次第で足を撃ち抜く事には変わりなく、そのような用途であるカーネルさえ古典的な安定したC、C++を
使いますよね。RustがWebkitを倒せたらほとんど使いどころがないような?
それと恐らく借用があるのでGCは搭載・あるいはON/OFFされないとほぼ確実に思いますが、async
awaitな非同期ではくGoのようなライトウェイトなGoroutineみたいなのが搭載される計画はありますか?
余談ですがLinux-kernelやドライバに使われると聞いているので、(標準的・言語的にはランタイムに入る事は)
無いんだと思ってますが、Goも例外は無いけど、なんであの界隈はブロック例外がアンナにも、お嫌い
なんでしょうかね?ちなみに最近、Nimというのを触ってとても感銘を受けました。
でもそのくせ式としてreturnを省略できたり、でも例外はないからOptionやResultが普通でunwrap
しなくちゃならなかったり、でも>>505-508のようにメモリモデルの(まだ)定義がなく?、>>333
みたいな暗黙の再借用が出来たり色々ちぐはぐな気がするんですが、1.5、2.0辺りになったら大幅に
変わったりしますか?足を撃ち抜かないCPPとしては「良い」出来だと思うんですが、、正直、ほんの
ちょっと触ってみてCargoコンパイルが重くて、特徴の明示的など非常にめんどくさいんですがそういうもの?
C++20やC++23なんてありますが正直、もう時代の役目を終えたと感じます。いくら色々な機能を追加しても
能力次第で足を撃ち抜く事には変わりなく、そのような用途であるカーネルさえ古典的な安定したC、C++を
使いますよね。RustがWebkitを倒せたらほとんど使いどころがないような?
それと恐らく借用があるのでGCは搭載・あるいはON/OFFされないとほぼ確実に思いますが、async
awaitな非同期ではくGoのようなライトウェイトなGoroutineみたいなのが搭載される計画はありますか?
余談ですがLinux-kernelやドライバに使われると聞いているので、(標準的・言語的にはランタイムに入る事は)
無いんだと思ってますが、Goも例外は無いけど、なんであの界隈はブロック例外がアンナにも、お嫌い
なんでしょうかね?ちなみに最近、Nimというのを触ってとても感銘を受けました。
723はちみつ餃子 ◆8X2XSCHEME
2021/02/15(月) 04:42:37.54ID:GNSRFiac >>722
これはきちんと議論を追っているわけではなく私なりの理解だということを事前に断っておくけど、
(unsafe を除いて) メモリ管理のチェックが自動化できることが最重要の指針だと思う。
チェックするにあたって必要な情報が多いから結果的にたくさんのことを明示する必要があるけど、
曖昧さがないなら明示する必要はないし、
実際の利用でほとんど常に同じような指定をしているならそれをデフォルトにして違うときだけ指定するのでも問題にならない。
これはきちんと議論を追っているわけではなく私なりの理解だということを事前に断っておくけど、
(unsafe を除いて) メモリ管理のチェックが自動化できることが最重要の指針だと思う。
チェックするにあたって必要な情報が多いから結果的にたくさんのことを明示する必要があるけど、
曖昧さがないなら明示する必要はないし、
実際の利用でほとんど常に同じような指定をしているならそれをデフォルトにして違うときだけ指定するのでも問題にならない。
724デフォルトの名無しさん
2021/02/15(月) 09:10:14.02ID:Rhj6q0xj >>722
単に明示性を重視してるというよりは、分かりにくいとか非推奨とか高コストなとこは明示して
そうでないとこは省略させたいように見えるな。
例えば関数の型なんかは技術的には省略して推論できるけど
分かりにくくなるからあえて書かせるとか。
なのでreturnは自明だけどResultはちゃんと処理させたい、
という考え方かと。
goroutineみたいなのはまず入らないだろうね。
そもそもなるべく標準ライブラリは小さくする方針だし、
現状でもrayonみたいな並列処理ライブラリ使えばいいし。
単に明示性を重視してるというよりは、分かりにくいとか非推奨とか高コストなとこは明示して
そうでないとこは省略させたいように見えるな。
例えば関数の型なんかは技術的には省略して推論できるけど
分かりにくくなるからあえて書かせるとか。
なのでreturnは自明だけどResultはちゃんと処理させたい、
という考え方かと。
goroutineみたいなのはまず入らないだろうね。
そもそもなるべく標準ライブラリは小さくする方針だし、
現状でもrayonみたいな並列処理ライブラリ使えばいいし。
725デフォルトの名無しさん
2021/02/15(月) 14:18:13.02ID:QPKY0Zj9726デフォルトの名無しさん
2021/02/15(月) 18:15:16.43ID:Y11JAZ1I goroutineの代替ならtokioとかasync-stdみたいな非同期IO系のランタイムも外せないのでは
goroutineの並列と並行のどっちの側面について言ってるのか次第ではあるけど
goroutineの並列と並行のどっちの側面について言ってるのか次第ではあるけど
727デフォルトの名無しさん
2021/02/15(月) 18:57:38.65ID:Rhj6q0xj asyncではなく、って言ってるのでrayonとかの方が近いかな、と。
まぁどっちにしてもgoroutineそのものなモデルを提供するライブラリは多分ないので
各自必要な並列並行性に応じたライブラリを選ぶ必要はある。
まぁどっちにしてもgoroutineそのものなモデルを提供するライブラリは多分ないので
各自必要な並列並行性に応じたライブラリを選ぶ必要はある。
728デフォルトの名無しさん
2021/02/15(月) 22:30:19.90ID:LbvG7Uo/ RustにあってC++にない機能はありますか?
729デフォルトの名無しさん
2021/02/15(月) 23:16:52.31ID:Yv9X0Du7 >>728
memory safety
memory safety
730デフォルトの名無しさん
2021/02/15(月) 23:34:00.74ID:FO8OS1Ro リージョン推論とアフィン型
731デフォルトの名無しさん
2021/02/15(月) 23:35:54.84ID:jLBVKIGa 勢い
732デフォルトの名無しさん
2021/02/16(火) 00:39:31.16ID:uH9KCelr 若者
733デフォルトの名無しさん
2021/02/16(火) 01:35:01.04ID:birNKbej hygenicなマクロやproc macro
734デフォルトの名無しさん
2021/02/16(火) 14:47:28.42ID:0SiibFTk 初心者
735デフォルトの名無しさん
2021/02/16(火) 19:09:01.10ID:zfzmKwUo LinuxカーネルをRustで書こうとかいう話が去年出てたけど、
社会のインフラにもなってるようなカーネルの開発者が考えてることと
プログラミング言語で遊びたい人の考えてることが違いすぎて萎えた
しょせん、プログラミング言語なんてアセンブラとC以外は全部遊びだよね
安かろう悪かろうの遊びレベルの仕事に金払う会社があるから勘違いされやすいけど
社会のインフラにもなってるようなカーネルの開発者が考えてることと
プログラミング言語で遊びたい人の考えてることが違いすぎて萎えた
しょせん、プログラミング言語なんてアセンブラとC以外は全部遊びだよね
安かろう悪かろうの遊びレベルの仕事に金払う会社があるから勘違いされやすいけど
736デフォルトの名無しさん
2021/02/16(火) 19:18:56.90ID:ckHFYEhB JAVAも遊びってマジ!?
737デフォルトの名無しさん
2021/02/16(火) 19:36:38.83ID:KZAm4Q8q COBOLも遊びだそうです
738デフォルトの名無しさん
2021/02/16(火) 19:47:40.11ID:6a7fxa+u 遊びで生まれた子供がなんか言ってらw
739デフォルトの名無しさん
2021/02/16(火) 20:07:29.86ID:6oy5nTaC 今はカーネルモジュールを対象にRustをサポートする予定みたい
ABIとかメモリ管理まわりの差異の吸収をどうするか一番熱いところをやってるね
https://lwn.net/Articles/829858/
ABIとかメモリ管理まわりの差異の吸収をどうするか一番熱いところをやってるね
https://lwn.net/Articles/829858/
740デフォルトの名無しさん
2021/02/16(火) 20:25:37.08ID:F9q4wvox C/Ruby 併用のmruby の本が出た。
文字列処理などは、GC のあるRuby側で書く
Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11
宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。
Ubuntu 18.04, C99 対応
人工衛星イザナギ・イザナミでも、使っている
文字列処理などは、GC のあるRuby側で書く
Webで使えるmrubyシステムプログラミング入門、近藤宇智朗、2020/11
宇宙開発などの組み込み用、MicroPython, Lua, Squirrel の代替になる。
Ubuntu 18.04, C99 対応
人工衛星イザナギ・イザナミでも、使っている
741デフォルトの名無しさん
2021/02/16(火) 21:11:02.07ID:mcPcmZQC なぜここで宣伝?
742デフォルトの名無しさん
2021/02/16(火) 22:20:14.90ID:VGyCnBhh そいつただのキチガイだから聞いても無駄だぞ
743デフォルトの名無しさん
2021/02/16(火) 22:40:03.47ID:/P278iHx >>735
LinuxもC言語ももとはと言えばスペーストラベルってゲームで遊びたくてLinuxの前身のUNIXが作られたし、そのゲームを移植するためにB言語がつくられて、
さらにそれを改良したのがC言語だ。
LinuxもC言語ももとはと言えばスペーストラベルってゲームで遊びたくてLinuxの前身のUNIXが作られたし、そのゲームを移植するためにB言語がつくられて、
さらにそれを改良したのがC言語だ。
744デフォルトの名無しさん
2021/02/17(水) 00:07:57.00ID:NXsZKPRa ここにも出没するのか…
745デフォルトの名無しさん
2021/02/17(水) 00:30:02.75ID:5fjXtzC9 なるほど。いろんなスレで同じこと書きまくってんのな
746デフォルトの名無しさん
2021/02/17(水) 02:18:16.85ID:JbW6f0lc >>743
Cが遊びにも使えることを主張しても反論になってないぞ
Cが遊びにも使えることを主張しても反論になってないぞ
747デフォルトの名無しさん
2021/02/17(水) 03:00:38.28ID:0wQZl1Sa 推奨NGワード: ruby
748デフォルトの名無しさん
2021/02/17(水) 11:52:49.70ID:SnS/pdJc RUSTはウェブとかAI分野でのバブルは考えにくい
あるとすればIOTやら組み込み向けだろう
あるとすればIOTやら組み込み向けだろう
749デフォルトの名無しさん
2021/02/17(水) 13:28:23.14ID:JbW6f0lc 金融でHaskell流行ったみたいな感じでrust流行ったりしないかね
750デフォルトの名無しさん
2021/02/17(水) 13:40:51.06ID:9AH/BrCU そもそもそんなに流行ってほしいか?
インフラとかライブラリとか地味なところで
ひっそりと使われるのが適してると思うけど。
インフラとかライブラリとか地味なところで
ひっそりと使われるのが適してると思うけど。
751デフォルトの名無しさん
2021/02/17(水) 18:07:12.21ID:JbW6f0lc 利用者増えた方が投資も増えて進歩が速くなるから
752デフォルトの名無しさん
2021/02/17(水) 20:57:43.14ID:JskNfOx3 今の様子じゃ10年経ってもなんも変わらんだろ。先のある言語じゃない。
753デフォルトの名無しさん
2021/02/17(水) 21:22:18.90ID:CcjHMdPi システムプログラミング分野ではC++からRustに変わっていくんじゃないの?
754デフォルトの名無しさん
2021/02/17(水) 21:34:22.05ID:HqSggkAC GAHUMが採用し出して団体まで作ったのに先がないなんてどんな世界観なんじゃ
755デフォルトの名無しさん
2021/02/17(水) 22:03:18.40ID:Pg4t51og Rustが流行らなくてもRustの考え方を取り入れた言語が広まってくれればいいな
756はちみつ餃子 ◆8X2XSCHEME
2021/02/17(水) 23:46:21.75ID:bnMjXKAr やりたいことが出来るライブラリ (クレート) があるなら
言語の詳細がどうでもよくなりがちってのはあると思う。
言語の詳細がどうでもよくなりがちってのはあると思う。
757デフォルトの名無しさん
2021/02/18(木) 00:18:21.59ID:ldFX1qZV コンストラクタ、構造体のめんどくささ考えても絶対流行らんわ。
根本的におかしい言語機能なんだよ。
根本的におかしい言語機能なんだよ。
758デフォルトの名無しさん
2021/02/18(木) 01:33:00.72ID:3wQQElw6 プログラマーって人と違った事が好きな尖った奴のイメージがあるけど、実際は
寄らば大樹の陰で巨人が採用したプログラミング言語に従うのが吉なのだ。
寄らば大樹の陰で巨人が採用したプログラミング言語に従うのが吉なのだ。
759デフォルトの名無しさん
2021/02/18(木) 02:01:34.78ID:n4kSgdMy rustにはコンストラクタなんていうげんごきのうはないが
760デフォルトの名無しさん
2021/02/18(木) 02:22:20.29ID:17ht1voR 型コンストラクタはあるのでは
761デフォルトの名無しさん
2021/02/18(木) 02:35:11.90ID:aOnYkWOR ボカァ、今後はC++がRustのパラダイムを吸収して (saferな書き方を提供して) Rustの役割は終わると思うね
762デフォルトの名無しさん
2021/02/18(木) 05:45:24.92ID:rijSrz3Z それならそれでもいいけどそうなるためにはある程度Rustの取り組みが成果を上げる必要があるわけで
C++の建て増し感も気になる
C++の建て増し感も気になる
763デフォルトの名無しさん
2021/02/18(木) 05:57:46.70ID:g5HFTB9g C++の建て増し感はもはや長所と思うしかない
仮に今後「Rustのパラダイムを吸収する」方向に進むとしたらそれはまさに建て増しだ
個人的にはマルチパラダイムを体現してるようで結構だと思うが、建て増し感が受け入れられない人にとってはやはりクソ言語なのだろうね。C++は
仮に今後「Rustのパラダイムを吸収する」方向に進むとしたらそれはまさに建て増しだ
個人的にはマルチパラダイムを体現してるようで結構だと思うが、建て増し感が受け入れられない人にとってはやはりクソ言語なのだろうね。C++は
764デフォルトの名無しさん
2021/02/18(木) 07:19:44.62ID:hiVMRxyD >>758
それ日本というかプログラマを使い捨てられる文化圏だけじゃね
それ日本というかプログラマを使い捨てられる文化圏だけじゃね
765デフォルトの名無しさん
2021/02/18(木) 14:50:08.00ID:rijSrz3Z リナスやストールマンやヘルスバーグが興味持てばまた違って来るだろう
766デフォルトの名無しさん
2021/02/18(木) 19:42:22.85ID:1bJLI/ST どこかでRocketで非同期処理できるようになるって見た気がするんだけど、
ググってもそれらしき情報が見つからない。
俺の勘違い?
ググってもそれらしき情報が見つからない。
俺の勘違い?
767デフォルトの名無しさん
2021/02/18(木) 20:20:01.72ID:SByJzFqI768デフォルトの名無しさん
2021/02/19(金) 01:45:21.75ID:C4/TpWTT >>761
それを何年も何十年も待ってる人が沢山いるけど、やらないでしょ
それを何年も何十年も待ってる人が沢山いるけど、やらないでしょ
769デフォルトの名無しさん
2021/02/19(金) 06:37:54.65ID:ytqZaYub コンパイラスイッチなりプラグマなり必要になるからそれなら新言語で、ってなっちゃうわな
770デフォルトの名無しさん
2021/02/19(金) 08:59:27.98ID:2/3+b4qC >>768
やらないやつはrustで書くのも無理だよ
やらないやつはrustで書くのも無理だよ
771はちみつ餃子 ◆8X2XSCHEME
2021/02/19(金) 12:37:09.63ID:EWSghxXn >>761
Rust が依存関係をチェックする仕組みはそういう機能があるというだけではなくて、
それで全体が統一されていることが大事でしょ。 (一部には unsafe もあるけど。)
C++ の上に Rust 的なパラダイムを建て増しして便利になることもあるかもしれないけど、
統率されていることの有用さとは別物だよ。
Rust が依存関係をチェックする仕組みはそういう機能があるというだけではなくて、
それで全体が統一されていることが大事でしょ。 (一部には unsafe もあるけど。)
C++ の上に Rust 的なパラダイムを建て増しして便利になることもあるかもしれないけど、
統率されていることの有用さとは別物だよ。
772デフォルトの名無しさん
2021/02/19(金) 12:59:22.09ID:5rOBR4Oa 原理的には従来のunsafe C++にsafe C++を建て増して
既存のコードを徐々にsafeにうつしていくというのは出来そうかな。
しかし実際やるとなるとRustへの移行と同じくらい手間がかかりそう。
safe/unsafe間がFFIでなくなるのは多少楽かもだけど、
境界でsafeなことを保証するのは人間が考えないといけないし。
既存のコードを徐々にsafeにうつしていくというのは出来そうかな。
しかし実際やるとなるとRustへの移行と同じくらい手間がかかりそう。
safe/unsafe間がFFIでなくなるのは多少楽かもだけど、
境界でsafeなことを保証するのは人間が考えないといけないし。
773デフォルトの名無しさん
2021/02/19(金) 13:00:29.26ID:HAYVHwal 基本的saferで特例でunsafeとその逆じゃ全然違うからなあ
774デフォルトの名無しさん
2021/02/19(金) 13:44:19.68ID:h/t0+GoU ぼく丘safer
775デフォルトの名無しさん
2021/02/19(金) 13:54:40.33ID:jb9MooDY 実際の機能がCのライブラリにリンクしてるだけとか、丘saferだな
776デフォルトの名無しさん
2021/02/19(金) 15:45:22.92ID:ytqZaYub 上手いことsafetyにラップしてくれてればそれでいいよ
777デフォルトの名無しさん
2021/02/19(金) 20:14:37.43ID:2/3+b4qC safetyだと思い込めればええんやろ。単純な連中だわ。
778デフォルトの名無しさん
2021/02/20(土) 01:02:31.59ID:MdDLRkGY こいつめっちゃウザい
779デフォルトの名無しさん
2021/02/20(土) 12:53:25.44ID:TL3BSHJV 誰だよ
780デフォルトの名無しさん
2021/02/28(日) 14:52:22.32ID:JEl8UZRv アクセスを強要する言語はダメだよ
781デフォルトの名無しさん
2021/03/05(金) 19:00:28.35ID:aSqkecBn Iterator周りのconst fn化って目処立ってたりするのかな
782デフォルトの名無しさん
2021/03/09(火) 11:54:18.25ID:e2HkPLHr Rustで作られた有名なものを教えてください
Rubyだったらrails、homebrewとか
Rubyだったらrails、homebrewとか
783デフォルトの名無しさん
2021/03/09(火) 12:47:03.15ID:R5GGXoEM784デフォルトの名無しさん
2021/03/09(火) 13:27:01.38ID:uSJY4o8s >>782
Servo(Firefoxのレンダリングエンジン)
Servo(Firefoxのレンダリングエンジン)
785デフォルトの名無しさん
2021/03/09(火) 13:44:11.22ID:R5GGXoEM tauriが伸びて来るかはまだ未知数
786デフォルトの名無しさん
2021/03/09(火) 19:29:25.88ID:wHDXlDgC Haskellで言うxmonadみたいな?
787デフォルトの名無しさん
2021/03/09(火) 19:53:58.75ID:eVxnhZwi >>782
dropbox
dropbox
788デフォルトの名無しさん
2021/03/09(火) 20:01:24.82ID:zonUHFVg789デフォルトの名無しさん
2021/03/09(火) 20:04:31.04ID:zonUHFVg firecracker >>783 のところに書かれてたか・・・。
790デフォルトの名無しさん
2021/03/09(火) 20:10:47.51ID:xbBrvliS Tock/OpenTitan/OpenSKみたいなセキュリティ系のファームウェアとか
こういうのは特にアナウンスもなく採用されていくから
気づいたらみんな使ってたということになるかも。
こういうのは特にアナウンスもなく採用されていくから
気づいたらみんな使ってたということになるかも。
791デフォルトの名無しさん
2021/03/09(火) 23:06:36.57ID:E3PmhGqz rustで書かれた有名なもの…rustかな?
792デフォルトの名無しさん
2021/03/11(木) 12:01:52.44ID:Y/wb0v0V Rustが使ってるLLVMってC++製なんだ
793デフォルトの名無しさん
2021/03/11(木) 12:11:40.89ID:88YcySCa ダメじゃん
根幹がC++
C++にタマタマ握られてる
根幹がC++
C++にタマタマ握られてる
794はちみつ餃子 ◆8X2XSCHEME
2021/03/11(木) 14:41:42.94ID:L0vKEaLv C++ の資産を (ほぼ) 一方的に利用しているのもそれはそれで気分いいじゃん?
795デフォルトの名無しさん
2021/03/11(木) 14:49:39.38ID:wgd6SgIa 同じ目的のために作られた道具として既存のものに取って替われないのは不名誉しかない
796デフォルトの名無しさん
2021/03/11(木) 15:10:09.87ID:UCScJ1K4 >>782
ripgrep
ripgrep
797デフォルトの名無しさん
2021/03/11(木) 15:32:57.89ID:dn2xUnIJ アホな人相手にしてると自分もだんだんアホになるよ
798デフォルトの名無しさん
2021/03/11(木) 16:11:55.93ID:ndX1jvez 新紙幣発行したその日にすべての旧紙幣を使えなくすべきって主張する人?
799デフォルトの名無しさん
2021/03/11(木) 16:44:26.00ID:uvX65qSE LLVMをrustで書き換えた日こそ天下か?いやいやOSのカーネルこそ
800デフォルトの名無しさん
2021/03/11(木) 19:03:39.84ID:21294wFC Runuxはよ
801デフォルトの名無しさん
2021/03/11(木) 19:19:34.73ID:aZ7HXs2o 相変わらずしょーもない妄想にふけるやつしかおらんな
802デフォルトの名無しさん
2021/03/11(木) 23:57:00.49ID:ZRdHs705 Rustにいわゆるクラス変数みたいなものってないんですか?
803デフォルトの名無しさん
2021/03/12(金) 00:04:34.96ID:0cefU6Fx リーナス「オブジェクト指向のたわごとを持ち込むならRustの評価見直すぞ」
804デフォルトの名無しさん
2021/03/12(金) 01:07:04.26ID:1OUd5zSC >>802
ありますけど、mutable static変数なんて扱いづらいだけですよ?
ありますけど、mutable static変数なんて扱いづらいだけですよ?
805デフォルトの名無しさん
2021/03/12(金) 01:23:52.52ID:U+iRPjP4 staticはクラス変数とは違うような
806はちみつ餃子 ◆8X2XSCHEME
2021/03/12(金) 03:18:16.54ID:ByeOJ4Y7 Rust は色んなものをモジュール単位にしているような印象がある。
構造体のフィールドへのアクセスもモジュール内では制限がなくて、
モジュールの外に対して可視性を制御する仕組みになってるわけだし。
型の単位ではプライベートとパブリックを分ける気がない。
考え方次第ではあるけどスコープ管理の「雰囲気」からすると
C++ のクラスが Rust で言うところのモジュールに近いと言えなくもないんじゃね?
まあ前提が違うものについて無理やり共通点を見つけることにどれほど意味があるかわからんけど。
構造体のフィールドへのアクセスもモジュール内では制限がなくて、
モジュールの外に対して可視性を制御する仕組みになってるわけだし。
型の単位ではプライベートとパブリックを分ける気がない。
考え方次第ではあるけどスコープ管理の「雰囲気」からすると
C++ のクラスが Rust で言うところのモジュールに近いと言えなくもないんじゃね?
まあ前提が違うものについて無理やり共通点を見つけることにどれほど意味があるかわからんけど。
807デフォルトの名無しさん
2021/03/12(金) 10:21:25.50ID:3fdjVE8p808デフォルトの名無しさん
2021/03/12(金) 12:26:55.76ID:J+ar7EHR Dropboxは何のGUIライブラリで作られているのかわかりますか?
809デフォルトの名無しさん
2021/03/12(金) 16:33:37.37ID:qQge26zC >>808
rustで書き直したのはサービス側と同期エンジンじゃないかな?
rustで書き直したのはサービス側と同期エンジンじゃないかな?
810デフォルトの名無しさん
2021/03/12(金) 18:45:06.86ID:kTC1PKHO Rustって何で構造体のメモリーレイアウトをデフォルトでは勝手に並び替えるんだ?まじやめて欲しい
サイズを小さくする為?それとの他の理由があんのか?明示的だと言いながら余計な事ばかりすんなや
サイズを小さくする為?それとの他の理由があんのか?明示的だと言いながら余計な事ばかりすんなや
811デフォルトの名無しさん
2021/03/12(金) 20:33:09.00ID:jgkfYeWQ 老害乙
812デフォルトの名無しさん
2021/03/12(金) 20:59:59.44ID:Y+hYjm0T 構造体の並び順はメモリーアライメントで苦労したこと無い人の意見だな。
813デフォルトの名無しさん
2021/03/12(金) 21:41:21.91ID:1OUd5zSC >>810
#[repr(C)]付けないで文句言ってるならお前のせいやで?
#[repr(C)]付けないで文句言ってるならお前のせいやで?
814デフォルトの名無しさん
2021/03/12(金) 22:08:58.65ID:TCjnSuLT815デフォルトの名無しさん
2021/03/12(金) 23:34:08.62ID:9XEGWpCC 今時プラットフォームに依存する構造体のメモリーレイアウトを前提としたコードは書いちゃダメよ
816デフォルトの名無しさん
2021/03/13(土) 00:40:30.95ID:PGOVIZdP >>814
クラス変数って要はグローバル変数だから濫用すべきではないよ
クラス変数って要はグローバル変数だから濫用すべきではないよ
817デフォルトの名無しさん
2021/03/13(土) 15:49:02.94ID:GoEo1qHE818デフォルトの名無しさん
2021/03/13(土) 16:03:49.74ID:DC1SOqVQ819デフォルトの名無しさん
2021/03/13(土) 17:29:01.78ID:eNr110Cx820デフォルトの名無しさん
2021/03/13(土) 18:01:56.32ID:JM8M9JoF 選択可能なんだからどうでもいい
https://doc.rust-lang.org/nomicon/repr-rust.html
https://doc.rust-lang.org/nomicon/repr-rust.html
821デフォルトの名無しさん
2021/03/13(土) 20:55:02.47ID:yJisos8z >>817
コンパイラが十分賢くなったときに様々な最適化を自動で出来るようにする余地を残すため
デフォルトでメモリレイアウトを保証しないって設計になってるんだけど
自分で最適化する場合はコンパイラの最適化を抑止するってのはrustに限らずよくある話だしなにが不満なのかよくわからない
コンパイラが十分賢くなったときに様々な最適化を自動で出来るようにする余地を残すため
デフォルトでメモリレイアウトを保証しないって設計になってるんだけど
自分で最適化する場合はコンパイラの最適化を抑止するってのはrustに限らずよくある話だしなにが不満なのかよくわからない
822はちみつ餃子 ◆8X2XSCHEME
2021/03/13(土) 22:01:36.30ID:aUdFS8U8 >>810
明示的じゃん。
明示的に並べ替えを禁止する指定があるじゃん。
ほとんどの場合に順序はどうでもいいんだから、
どちらがデフォルトであるべきなのかなんて自明だろ。
条件付きだが C++ もデータメンバの順序を並び替えることは (言語仕様上は) 有りうるし、
並べ替えて良いと規定されているときに並べ替えを抑止するような指定方法はない。
(処理系の拡張としては有ったりするかもしれんが。)
Rust のほうがマシ。
現在の Rust は言語仕様と処理系の仕様の区別が曖昧なので repr が
(今後現れるかもしれない) 他の処理系でも使えるポータブルな機能なのかわからんけど。
明示的じゃん。
明示的に並べ替えを禁止する指定があるじゃん。
ほとんどの場合に順序はどうでもいいんだから、
どちらがデフォルトであるべきなのかなんて自明だろ。
条件付きだが C++ もデータメンバの順序を並び替えることは (言語仕様上は) 有りうるし、
並べ替えて良いと規定されているときに並べ替えを抑止するような指定方法はない。
(処理系の拡張としては有ったりするかもしれんが。)
Rust のほうがマシ。
現在の Rust は言語仕様と処理系の仕様の区別が曖昧なので repr が
(今後現れるかもしれない) 他の処理系でも使えるポータブルな機能なのかわからんけど。
823デフォルトの名無しさん
2021/03/13(土) 23:34:45.90ID:+sWre9Lj フランスのデータセンターの火災で『Rust』はデータの大規模なロストが発生
824デフォルトの名無しさん
2021/03/13(土) 23:53:02.21ID:+sWre9Lj なんか
struct Foo {
int m_a;
bool m_b;
int m_c;
bool m_d;
};
とかあったら
struct Foo {
int m_a;
int m_c;
bool m_b;
bool m_d;
};
にしたい衝動に駆られてストレスmaxなのでどうでもいい話ではない
struct Foo {
int m_a;
bool m_b;
int m_c;
bool m_d;
};
とかあったら
struct Foo {
int m_a;
int m_c;
bool m_b;
bool m_d;
};
にしたい衝動に駆られてストレスmaxなのでどうでもいい話ではない
825デフォルトの名無しさん
2021/03/14(日) 00:49:22.71ID:Atf6A86o >>824
LP64ならどっちもサイズ同じじゃん
LP64ならどっちもサイズ同じじゃん
826デフォルトの名無しさん
2021/03/14(日) 04:01:46.70ID:n3ZlR2nQ 構造体定義するときc++だとアライメントずれないように手作業でダミーのデーター詰めたりしてたけど、途中で型変えると並び替えメンドクサイ。自動で最適化してくれる方がいいし、どっちも選択出来るのだからRustの方が正しいわ。
827デフォルトの名無しさん
2021/03/14(日) 05:38:07.85ID:oMOPVtdk828デフォルトの名無しさん
2021/03/14(日) 08:27:15.60ID:8bm6cw7M >>826
ビット単位で詰めるからな。
ビット単位で詰めるからな。
829デフォルトの名無しさん
2021/03/14(日) 09:39:13.15ID:fDAcQow7 >>823
rustはrustで書かれたの?
rustはrustで書かれたの?
830デフォルトの名無しさん
2021/03/14(日) 13:13:21.06ID:5DzsH1LF ポケモンGOはGoで書かれた
831デフォルトの名無しさん
2021/03/14(日) 13:44:08.22ID:flEVf/TW マジかよ…
rustで書かれたゲームエンジンってのもちらほらあるんだな
rustで書かれたゲームエンジンってのもちらほらあるんだな
832デフォルトの名無しさん
2021/03/14(日) 14:08:02.49ID:eta5h4cX アライメント合わせとかコンパイラに任せたら良いし
最悪でもunionを使って型を並べたら最もアライメント条件が強い方の型に合うから
アライメント合わせの目的で手作業でダミーのデーター詰めを行うというのは都市伝説、
コンパイラがアライメントを合わせた結果としてできたPADDING部分のデータを
どうしても不定値にしたくないがmemset()で構造体全体をゼロクリアするわけにもいかないという
きわめてレアなケースでしか行わない
最悪でもunionを使って型を並べたら最もアライメント条件が強い方の型に合うから
アライメント合わせの目的で手作業でダミーのデーター詰めを行うというのは都市伝説、
コンパイラがアライメントを合わせた結果としてできたPADDING部分のデータを
どうしても不定値にしたくないがmemset()で構造体全体をゼロクリアするわけにもいかないという
きわめてレアなケースでしか行わない
833デフォルトの名無しさん
2021/03/14(日) 18:04:27.92ID:pLOBnReb 非同期のランタイムはtokioとasync-stdどどっちが標準になりそう?
834デフォルトの名無しさん
2021/03/14(日) 19:05:56.64ID:8bm6cw7M >>830
ポケモンRustじゃカッコ悪いしな。
ポケモンRustじゃカッコ悪いしな。
835デフォルトの名無しさん
2021/03/14(日) 21:20:59.71ID:T+7gBLoD Rustの悪口言いたい訳じゃないけど、デフォルトで並び替えるのは正しく思えないわ
#[repr(C)]つけろってのはその通りだけど、組み込み用途でつけ忘れてリリースして
しまったら考えるだけで恐ろしい
#[repr(C)]つけろってのはその通りだけど、組み込み用途でつけ忘れてリリースして
しまったら考えるだけで恐ろしい
836デフォルトの名無しさん
2021/03/14(日) 22:04:54.76ID:JBU2DMkD >>835
その程度も出来ない馬鹿だとCでやったら大惨事じゃね?
その程度も出来ない馬鹿だとCでやったら大惨事じゃね?
837デフォルトの名無しさん
2021/03/14(日) 22:31:41.33ID:pQGk05s+ デフォルトで余計なことやる設計が好きな人にはいいんじゃないの?
結局どっちに寄せるかだし。
結局どっちに寄せるかだし。
838デフォルトの名無しさん
2021/03/14(日) 23:37:14.51ID:n3ZlR2nQ >>835
自動ったって最適化の挙動はごく単純なルールだし、結果も解る範囲なのだからやはり問題ないとおもうけど。
自動ったって最適化の挙動はごく単純なルールだし、結果も解る範囲なのだからやはり問題ないとおもうけど。
839デフォルトの名無しさん
2021/03/14(日) 23:48:28.09ID:n3ZlR2nQ メモリレイアウトのパターンを何種類か決められて、それぞれの最適化パターンに名前が付けられていくと考えれば、概念的な意思の統一がしやすくなるわけでしよ。今まで皆がバラバラにやってた方がおかしいわけで。構造体の隙間にあちこちゴミ入ってるのどれほど見たことか。
840デフォルトの名無しさん
2021/03/15(月) 01:33:05.21ID:c4Lf5m0s >>835
clippy の improper-ctypes-definition とかで検出できるのでは
clippy の improper-ctypes-definition とかで検出できるのでは
841デフォルトの名無しさん
2021/03/15(月) 01:42:14.94ID:Nwz504CC Cはコンパイラによりけりで最適化の度合いによるけど、無茶な事をしなければ基本は
書いた通りにしか動かないよ。C++のクラスは継承を使うとよう分からんレイアウトを
しくさるけど。Rustのやり方でも問題は確かにないし、結局どっちに寄せるかと言うのも
その通り。むしろゴミと言うか他人がレイアウトを整理しようとして事故るパターンの方が
多いが、まあ確かに些細な事だろう
書いた通りにしか動かないよ。C++のクラスは継承を使うとよう分からんレイアウトを
しくさるけど。Rustのやり方でも問題は確かにないし、結局どっちに寄せるかと言うのも
その通り。むしろゴミと言うか他人がレイアウトを整理しようとして事故るパターンの方が
多いが、まあ確かに些細な事だろう
842デフォルトの名無しさん
2021/03/15(月) 01:45:53.32ID:uFpZBB9k C言語でも非標準とはいえ呼び出し規約の指定とかあったなあ
843デフォルトの名無しさん
2021/03/15(月) 02:24:54.25ID:8Jf2QlAa 付け忘れでリリースってテストもせずにリリースってこと?
確かにデフォルトで安全側に振るのはRustの基本方針だとは思うけど
全ての型をFFIする前提というのはやりすぎだと思うが。
確かにデフォルトで安全側に振るのはRustの基本方針だとは思うけど
全ての型をFFIする前提というのはやりすぎだと思うが。
844デフォルトの名無しさん
2021/03/15(月) 02:38:04.29ID:c4Lf5m0s Cは書いたとおりにしか動かないってのは単にCに対する理解度が高いだけでは
例えばアセンブリしか知らない人から見たら自動変数の振る舞いなんかは暗黙的な動作ばかりだと思うが
例えばアセンブリしか知らない人から見たら自動変数の振る舞いなんかは暗黙的な動作ばかりだと思うが
845デフォルトの名無しさん
2021/03/15(月) 13:54:57.20ID:faH0kxEk まったくその通り
Cでは書いたとおりにしか動かない、と思うのはCにあまりにペッタリ入り込みすぎて
もはやC脳になってしまっている(なので考えずに自動でなされる変換が頭のなかでできてしまう)か
またはじつは思いこみで理解が足りてないかのどっちか
Cでは書いたとおりにしか動かない、と思うのはCにあまりにペッタリ入り込みすぎて
もはやC脳になってしまっている(なので考えずに自動でなされる変換が頭のなかでできてしまう)か
またはじつは思いこみで理解が足りてないかのどっちか
846はちみつ餃子 ◆8X2XSCHEME
2021/03/15(月) 14:00:05.56ID:GOWRyYdB 更に言えば最適化を有効にしたらかなりアクロバティックなコードを生成してくることもあるので人間には予測不能。
847デフォルトの名無しさん
2021/03/15(月) 19:06:12.98ID:tiOBROfx たいしてメモリ削減できない言語のくせに変な最適化かけんなよって話だわ
848デフォルトの名無しさん
2021/03/15(月) 19:34:49.20ID:13DwLIrw Rustではunsafe使わない限りは構造体のフィールドレイアウトを変更しても問題無いので、最適化の余地を残す仕様になってるのは良い事なんでは
849デフォルトの名無しさん
2021/03/15(月) 19:54:56.71ID:nJdAJo9y >>845
書いた通りに動かないのはバグでは?
書いた通りに動かないのはバグでは?
850デフォルトの名無しさん
2021/03/15(月) 20:16:17.39ID:c4Lf5m0s Cが書いたとおりにしか動かないのと同様にRustも書いたとおりにしか動かないということ
構造体メンバの順序の話はrepr(C)つけたりclippy使えというのが結論で
デフォルトの挙動に違和感を覚えるか否かという話はbikeshed
構造体メンバの順序の話はrepr(C)つけたりclippy使えというのが結論で
デフォルトの挙動に違和感を覚えるか否かという話はbikeshed
851デフォルトの名無しさん
2021/03/15(月) 23:27:42.36ID:HGmaHoUI メンバの配置が固定だと移植性も下がるよね
パフォーマンスの低下くらいだったらかわいいけど
下手すればバスエラーで落ちる
パフォーマンスの低下くらいだったらかわいいけど
下手すればバスエラーで落ちる
852デフォルトの名無しさん
2021/03/16(火) 00:53:01.99ID:GTaecVmm 勝手に最適化する方が移植性落ちるわ。
853デフォルトの名無しさん
2021/03/16(火) 00:56:51.74ID:5nPZFfnW Cの常識がどこでも通用すると思ってると別の言語でも怪我しそう
854デフォルトの名無しさん
2021/03/16(火) 00:59:01.44ID:GTaecVmm コンパイラに全て任せればいいって考えのやつのが実際は事故ってるがな。
855デフォルトの名無しさん
2021/03/16(火) 01:07:50.71ID:5nPZFfnW 何に怒ってるのかよく分からないけどコンパイラによる構造体レイアウトの最適化がデフォルトオンになってるのがそんなに気に入らないの?
856デフォルトの名無しさん
2021/03/16(火) 05:37:04.29ID:0EC0D1BB >>854
それは言語の問題なのか、コンパイラの問題なのか、何が事故ってるの?
それは言語の問題なのか、コンパイラの問題なのか、何が事故ってるの?
857デフォルトの名無しさん
2021/03/16(火) 07:17:52.07ID:oighJobp ていうかCコンパイラのアラインメントだって最適化の一種じゃ?
858デフォルトの名無しさん
2021/03/16(火) 08:01:04.42ID:pXLX1cSG そんなに気になるなら、フォークして、
デフォルトの挙動が違うrustを作れば済む話じゃないの?
デフォルトの挙動が違うrustを作れば済む話じゃないの?
859デフォルトの名無しさん
2021/03/16(火) 08:39:27.88ID:SlLiGo1E 最適化でunalignedになって落ちるならコンパイラのバグなんだから直せばいいし、
手動であらゆるアーキ向けにパディングを調整するよりよっぽどいいと思うけどな。
手動であらゆるアーキ向けにパディングを調整するよりよっぽどいいと思うけどな。
860デフォルトの名無しさん
2021/03/17(水) 04:59:36.34ID:F/MTmTZA メモリレイアウトの話まだ続いてるの?
C++でダメなところ潰して制約強めでバグ出にくくしようって言語で、コンパイラが信じられないと言われてもコンセプトが違うとしか
C++でダメなところ潰して制約強めでバグ出にくくしようって言語で、コンパイラが信じられないと言われてもコンセプトが違うとしか
861デフォルトの名無しさん
2021/03/17(水) 20:44:00.69ID:hH82Uf3P C++でダメなところ潰して制約強めでバグ出にくくしようってのと、
コンパイラが信じられないからコンパイラ設計を楽にしようってのは別に矛盾しないがな。
頭悪すぎ。
コンパイラが信じられないからコンパイラ設計を楽にしようってのは別に矛盾しないがな。
頭悪すぎ。
862デフォルトの名無しさん
2021/03/17(水) 22:43:22.09ID:8cWw5z32 コンパイラ設計を楽にするって、例えばどういうこと?
863デフォルトの名無しさん
2021/03/18(木) 03:06:39.25ID:YG5QY/Fi ここまでの流れでコンパイラがバグるほど難しい事してないと思うけど。何を心配してるの?
864デフォルトの名無しさん
2021/03/18(木) 06:33:11.45ID:teFQO94z 何が問題なのかiefoneか何かで実例出して欲しいな
865デフォルトの名無しさん
2021/03/18(木) 06:33:40.91ID:teFQO94z ideoneでした
866デフォルトの名無しさん
2021/03/18(木) 08:04:15.94ID:VY1V7baX 問題になるのは外部リンゲージな関数で構造体を渡すときだと思うが
コンパイルした後リンクするみたいな本番行為ってiefoneできるんでしたっけ
コンパイルした後リンクするみたいな本番行為ってiefoneできるんでしたっけ
867デフォルトの名無しさん
2021/03/18(木) 08:37:15.10ID:teFQO94z テストの段階でわかるじゃないか
868デフォルトの名無しさん
2021/03/18(木) 09:11:26.74ID:7Uj1c/fU 本番行為大好きです
869デフォルトの名無しさん
2021/03/18(木) 22:11:22.58ID:j2TrRshi イデオンの本番?
870デフォルトの名無しさん
2021/03/18(木) 22:46:55.62ID:4SeQ/rCs iefone って中華スマホっぽいな。
871デフォルトの名無しさん
2021/03/19(金) 01:15:52.96ID:jSzcAIKb ウィンドーズのAPIの構造体みたいにメンバの数が異なる構造体のシリーズで
先頭部分は同じレイアウトであって欲しい、みたいな要請がある場合は
いかに自動レイアウトの規則が厳格に決まっていても問題を生じるし、
テストで見つけろといっても限界がある
メンバ数3、4、5はOKだった!→56億年後に弥勒菩薩が6番目のメンバをboolにしたらすべて崩れ去った、みたいな
先頭部分は同じレイアウトであって欲しい、みたいな要請がある場合は
いかに自動レイアウトの規則が厳格に決まっていても問題を生じるし、
テストで見つけろといっても限界がある
メンバ数3、4、5はOKだった!→56億年後に弥勒菩薩が6番目のメンバをboolにしたらすべて崩れ去った、みたいな
872デフォルトの名無しさん
2021/03/19(金) 01:18:45.07ID:jSzcAIKb それとも何かねここで言うテストというのはコンパイラの
自動レイアウトするロジックを見通したホワイトボックステストで
カバレッジ100%を目指せというのかね?
自動レイアウトするロジックを見通したホワイトボックステストで
カバレッジ100%を目指せというのかね?
873デフォルトの名無しさん
2021/03/19(金) 01:32:38.19ID:ZwQV5hpU で、どれだけメモリ量減らせてるの?
874デフォルトの名無しさん
2021/03/19(金) 01:46:10.43ID:jSzcAIKb かなり減る64 bit整数m個とbool m+1個の構造体で#pragma pack(〜)とかしない場合
順序依存で8*m + 8*(m+1)バイトになるか8*m + ceil((m+1)/8)バイトで済むかの違いがある
引いたらどれだけ減ったかワカル
順序依存で8*m + 8*(m+1)バイトになるか8*m + ceil((m+1)/8)バイトで済むかの違いがある
引いたらどれだけ減ったかワカル
875デフォルトの名無しさん
2021/03/19(金) 01:48:07.52ID:QYoHC3cJ この人何と戦ってるの
876デフォルトの名無しさん
2021/03/19(金) 02:08:13.91ID:qP05xHwq 日本語不自由なの多すぎか
877デフォルトの名無しさん
2021/03/19(金) 08:05:42.69ID:elmSSYEz C++だって処理系によってABI違って互換性無いのになに寝ぼけた事言ってんだ状態
878デフォルトの名無しさん
2021/03/19(金) 08:22:46.12ID:jSzcAIKb879デフォルトの名無しさん
2021/03/19(金) 08:52:24.84ID:6TNOQqr9 メーリングリストでそれらを主張してみてはどうか?ここで言ってもrust下げとしか見られない
880デフォルトの名無しさん
2021/03/19(金) 10:06:03.26ID:S4bW7+Mw さっぱりわかんねえんだが、
>先頭部分は同じレイアウトであって欲しい、みたいな要請がある場合は
こんなクソみたいな要請がある案件の場合はrepr(c)でいいんちゃうん?
>先頭部分は同じレイアウトであって欲しい、みたいな要請がある場合は
こんなクソみたいな要請がある案件の場合はrepr(c)でいいんちゃうん?
881デフォルトの名無しさん
2021/03/19(金) 10:57:59.03ID:jSzcAIKb スマン>>878はstdcallを念頭に言ったがcdeclはC言語処理系によって決まったと言ってよいかもしれませんねーorz
stdcallの発祥がWindowsとPascalのどちらが先なのかは知りま栓、
>880
>こんなクソみたいな要請がある案件の場合はrepr(c)でいいんちゃうん?
禿げしく同意
stdcallの発祥がWindowsとPascalのどちらが先なのかは知りま栓、
>880
>こんなクソみたいな要請がある案件の場合はrepr(c)でいいんちゃうん?
禿げしく同意
882デフォルトの名無しさん
2021/03/19(金) 11:33:49.63ID:qP05xHwq なにこいつ……
883デフォルトの名無しさん
2021/03/19(金) 14:44:53.99ID:ZYq4u5st884デフォルトの名無しさん
2021/03/19(金) 15:07:57.84ID:x8qTxIkr repr(C)をつけるのでは駄目な理由は誰も言えないのか
885デフォルトの名無しさん
2021/03/19(金) 15:11:24.58ID:gR5Gr2WA おじいちゃんが今際の際に「repr(C)は使うな…ガクッ」って言ってたんよ…
886デフォルトの名無しさん
2021/03/19(金) 17:24:40.30ID:t8rUWn4Q 不満があっても使い続ける必要があるなら、
フォークしちゃえばいいじゃん。
もやもやしつつ使い続けるのは、良くないよ。
フォークしちゃえばいいじゃん。
もやもやしつつ使い続けるのは、良くないよ。
887デフォルトの名無しさん
2021/03/19(金) 17:49:26.38ID:6tRZIbsl C/C++をいまさらフォークしたところで誰も見向きもせず
個人で使うだけで消えていくだけだろうが
rustなら「おっ、おれもこういうのが欲しかった!」
ってやつがむらがってきてワンチャン有名なれる・・かも?
個人で使うだけで消えていくだけだろうが
rustなら「おっ、おれもこういうのが欲しかった!」
ってやつがむらがってきてワンチャン有名なれる・・かも?
888デフォルトの名無しさん
2021/03/19(金) 18:09:28.62ID:UA/QoJ1s ナイナイ(ヾノ・∀・`)
889デフォルトの名無しさん
2021/03/19(金) 18:46:02.05ID:3FXWvrKo >>887
一貫性のあるc--ができたら可能性あるよ。
一貫性のあるc--ができたら可能性あるよ。
890デフォルトの名無しさん
2021/03/19(金) 19:57:51.38ID:gCuAqma+ >>885
同じおじいちゃんが原理主義者になるなってのも言ってただろうに。
同じおじいちゃんが原理主義者になるなってのも言ってただろうに。
891デフォルトの名無しさん
2021/03/19(金) 22:01:04.37ID:CjYMRRBz Cargo.tomlかなんかでデフォルトのreprを設定できればいいんすか?
俺は要らんけど
俺は要らんけど
892デフォルトの名無しさん
2021/03/19(金) 23:27:54.25ID:u/twtFDQ repr(C)がついてないデータ型に警告出すようなlint書いてclippyにpullreq出せば良いのでは
893デフォルトの名無しさん
2021/03/20(土) 05:48:46.20ID:7iIk7Cl9 別に
構造体XのメモリレイアウトをRustのデフォルトとすべきなのかrepr(C)で扱ってほしいのか(あるいはその他か)は
構造体Xを定義したときに定義した人の意向で決まるから何の問題も無い
別の人が構造体Xを間違ったメモリレイアウトで解釈するプログラムを書く危険性は
(わざとそうするのでもない限り)無い
構造体XのメモリレイアウトをRustのデフォルトとすべきなのかrepr(C)で扱ってほしいのか(あるいはその他か)は
構造体Xを定義したときに定義した人の意向で決まるから何の問題も無い
別の人が構造体Xを間違ったメモリレイアウトで解釈するプログラムを書く危険性は
(わざとそうするのでもない限り)無い
894デフォルトの名無しさん
2021/03/20(土) 05:53:57.90ID:7iIk7Cl9 、と思うんだけどrepr指定が異なる構造体はちゃんと別の型とみなされるの?
つまりrepr(C)のメモリレイアウトな構造体を、(例えば)repr(PACKED)なメモリレイアウトな構造体を引数にとる関数に
渡せてしまうとかあると悲劇なわけだが
Rust使ったことないからよくわからないので教えてくだちい、
つまりrepr(C)のメモリレイアウトな構造体を、(例えば)repr(PACKED)なメモリレイアウトな構造体を引数にとる関数に
渡せてしまうとかあると悲劇なわけだが
Rust使ったことないからよくわからないので教えてくだちい、
895デフォルトの名無しさん
2021/03/20(土) 11:19:17.36ID:ZBpm47pR896デフォルトの名無しさん
2021/03/20(土) 11:59:39.96ID:ARQDcx4T897デフォルトの名無しさん
2021/03/20(土) 12:09:06.74ID:JFutrdJQ Rustにランタイムなどないが
898デフォルトの名無しさん
2021/03/20(土) 12:20:42.44ID:Yqrg6wwp 実行ファイルの大きさの事かな?
899デフォルトの名無しさん
2021/03/20(土) 12:34:10.54ID:N5mfveDq stdがでかいって話かな?
なんかそれも問題になって対応策はあった気がするけど
なんかそれも問題になって対応策はあった気がするけど
900デフォルトの名無しさん
2021/03/20(土) 12:46:24.31ID:ZBpm47pR デフォルトでは利便性やリンクの高速化のために大きくなってるけど
組み込み用途ならちゃんと最小化する方法はあるし
Cと同程度まで縮むよ
組み込み用途ならちゃんと最小化する方法はあるし
Cと同程度まで縮むよ
901デフォルトの名無しさん
2021/03/20(土) 13:08:56.08ID:OmO/62/g >>896
下記の記事の Executable sizes の節で実行ファイルのサイズについてCとの比較を考察してた
サイズ削減する方法も書いてあったよ
https://kornel.ski/rust-c-speed
下記の記事の Executable sizes の節で実行ファイルのサイズについてCとの比較を考察してた
サイズ削減する方法も書いてあったよ
https://kornel.ski/rust-c-speed
902デフォルトの名無しさん
2021/03/20(土) 13:44:30.39ID:0Kyl0nNZ ちょびっとだけどついにlinux-nextにrustで書かれたコードが入ったか
903デフォルトの名無しさん
2021/03/20(土) 15:24:30.80ID:mHStnoHo >>896
組み込みデバイスでrustを使いやすくしようとしてるワーキンググループあるから
どういうところで不便に思っているのかコメント寄せてあげたら良いのでは
https://github.com/rust-embedded/wg
issueでコメント募集してるよ
組み込みデバイスでrustを使いやすくしようとしてるワーキンググループあるから
どういうところで不便に思っているのかコメント寄せてあげたら良いのでは
https://github.com/rust-embedded/wg
issueでコメント募集してるよ
904デフォルトの名無しさん
2021/03/21(日) 22:19:00.80ID:k7ifup1R 依存しているクレートが多いとビルドが長い、いい加減にしろ。なんじゃこりゃ
905デフォルトの名無しさん
2021/03/21(日) 22:47:11.34ID:ut0JDDIv >>901
だから考えてるスケールが全然違うっつーの
だから考えてるスケールが全然違うっつーの
906デフォルトの名無しさん
2021/03/22(月) 01:13:43.80ID:04BxTma4 具体的な話を出さないでキレられても困るよ
907デフォルトの名無しさん
2021/03/22(月) 01:39:21.20ID:g4YfSh3E Rust の実行ファイルが大きくなりがちなのは何でもかんでもスタティックリンクする文化であって、
そうしてでもうんざりするような (実行時の) 依存関係に悩まされたくないという話なので、
不要なもので肥大化しているわけじゃないよ。 本来必要なものがあるだけ。
もちろん制約の大きい組み込み環境でごく基本的なライブラリすら制約してまで
大きさを削ったら使い勝手は悪いだろうけど、
それは Rust に限った話でもない当たり前のことだし。
メモリが数キロバイトとかいうレベルだったら (少なくとも現時点では) Rust が不向きというのはそうかもしれない。
そんで特に Rust を使いたいというケースでもない。
そうしてでもうんざりするような (実行時の) 依存関係に悩まされたくないという話なので、
不要なもので肥大化しているわけじゃないよ。 本来必要なものがあるだけ。
もちろん制約の大きい組み込み環境でごく基本的なライブラリすら制約してまで
大きさを削ったら使い勝手は悪いだろうけど、
それは Rust に限った話でもない当たり前のことだし。
メモリが数キロバイトとかいうレベルだったら (少なくとも現時点では) Rust が不向きというのはそうかもしれない。
そんで特に Rust を使いたいというケースでもない。
908デフォルトの名無しさん
2021/03/22(月) 02:21:57.65ID:gSVpx604 >>906
具体的に言語化できる能力あったらこんなとこで愚痴垂れてないでしょう
具体的に言語化できる能力あったらこんなとこで愚痴垂れてないでしょう
909デフォルトの名無しさん
2021/03/22(月) 03:18:48.61ID:4PFilboR Linuxのディストロだとなるべくダイナミックリンクにするようにしてると思うんだけど
Rust製ツールとその方針の相性悪い気がする
Rust製ツールとその方針の相性悪い気がする
910デフォルトの名無しさん
2021/03/22(月) 13:19:06.90ID:TItJ887g Q. Rustの倒し方を教えて下さい
A. まずデータセンターを燃やします
フランスのデータセンターで火災…『Rust』に復元不可能なデータロストが発生するなど大規模被害に発展 | エンタメウィーク
https://ent.smt.docomo.ne.jp/article/8989583
A. まずデータセンターを燃やします
フランスのデータセンターで火災…『Rust』に復元不可能なデータロストが発生するなど大規模被害に発展 | エンタメウィーク
https://ent.smt.docomo.ne.jp/article/8989583
911デフォルトの名無しさん
2021/03/22(月) 14:05:31.64ID:b6jSgIhJ Rustってなんか日本人的にわびさびっぽい名前でいいよな
912デフォルトの名無しさん
2021/03/22(月) 14:14:36.76ID:TQ1DOP8h ググラビリティがGoより低いと思ってる元凶な
913デフォルトの名無しさん
2021/03/22(月) 14:52:55.38ID:g4YfSh3E そこんところは golang とか rustlang とか書く風習が出来てるから
たいした問題ではないんだが、 C のことを clang とか書き始めるやつが出てきてクソッタレという感じ。
よそでどんな習慣が出来てもいいけど変な汚染するなよな〜〜という。
たいした問題ではないんだが、 C のことを clang とか書き始めるやつが出てきてクソッタレという感じ。
よそでどんな習慣が出来てもいいけど変な汚染するなよな〜〜という。
914デフォルトの名無しさん
2021/03/22(月) 16:00:21.60ID:g8se3Ggw LLVM ClangはふつうClangて書かない?
915デフォルトの名無しさん
2021/03/22(月) 16:55:21.38ID:Y0cj97US Clang は Clang のことなので
C のことを Clang っていわれると困るって話
C のことを Clang っていわれると困るって話
916デフォルトの名無しさん
2021/03/22(月) 17:14:35.17ID:g8se3Ggw あ,なる.
917デフォルトの名無しさん
2021/03/22(月) 18:00:28.80ID:RaSrXyKY918デフォルトの名無しさん
2021/03/22(月) 18:02:24.77ID:PWQX5uRW GCCもClangだし
919デフォルトの名無しさん
2021/03/22(月) 20:15:31.61ID:gSVpx604920デフォルトの名無しさん
2021/03/22(月) 21:30:42.61ID:G3nK37aG >>919
そもそも最近はディストロのパッケージ管理システムに乗りたくなくなっているのでは?いろいろなディストロのいろいろなバージョンに対してバイナリを提供すること自体が大変で。
Gentooやってると依存関係ミスっててコンパイルこけるとかよくある。
(そういう意味でもGoやRustはかなりコンパイルに失敗しづらくて安心感はある)
退化している感もあるけど、GitHubで全ディストロ対応のシングルバイナリ配るのが結局楽だった、という感じなのかも。
そもそも最近はディストロのパッケージ管理システムに乗りたくなくなっているのでは?いろいろなディストロのいろいろなバージョンに対してバイナリを提供すること自体が大変で。
Gentooやってると依存関係ミスっててコンパイルこけるとかよくある。
(そういう意味でもGoやRustはかなりコンパイルに失敗しづらくて安心感はある)
退化している感もあるけど、GitHubで全ディストロ対応のシングルバイナリ配るのが結局楽だった、という感じなのかも。
921デフォルトの名無しさん
2021/03/22(月) 22:38:58.65ID:0BePobhO >>918
え?
え?
922デフォルトの名無しさん
2021/03/22(月) 22:40:19.34ID:qQVVw1tm 場合によっては違うバージョンのライブラリが共存することもあるし
ファイル名のルールでどうにかしたりはすごく面倒
近頃はコンテナにまるごと突っ込むとか言った解決法も取れるが、
それなら全部スタティックリンクしたらええやんというのは
順当な方針だよな
ファイル名のルールでどうにかしたりはすごく面倒
近頃はコンテナにまるごと突っ込むとか言った解決法も取れるが、
それなら全部スタティックリンクしたらええやんというのは
順当な方針だよな
923デフォルトの名無しさん
2021/03/22(月) 22:41:18.91ID:iFQHROzx パッケージのバージョン管理とかRustは最近のnpmばりによくできてるんじゃないの
知らんけど
知らんけど
924デフォルトの名無しさん
2021/03/22(月) 22:42:28.95ID:qQVVw1tm925デフォルトの名無しさん
2021/03/22(月) 23:22:40.71ID:4PFilboR Ruby, Python, Rとか言語独自のパッケージ管理システムもありつつ
同時にディストロのパッケージ管理システムにも有名ライブラリだけは乗ってたりして
なんか二重管理みたいな変な事になってる
同時にディストロのパッケージ管理システムにも有名ライブラリだけは乗ってたりして
なんか二重管理みたいな変な事になってる
926はちみつ餃子 ◆8X2XSCHEME
2021/03/23(火) 01:05:05.52ID:G0iN/IIq 開発環境が用意するパッケージ管理は開発環境の管理だし
ディストリビューションの管理は実行環境の管理なんだけど、
ライブラリが実行環境なのか開発環境なのかは不可分な部分もあって単純に二分できんのよ。
C/C++ のライブラリのパッケージ管理が発展してないのは伝統的に
ディストリビューションのパッケージ管理に全力で乗っかる文化があったからで、
モダンな開発環境は分けようとしてかえってややこしくしているような気もする。
元々あった問題があぶりだされただけかもしれんけど。
ディストリビューションの管理は実行環境の管理なんだけど、
ライブラリが実行環境なのか開発環境なのかは不可分な部分もあって単純に二分できんのよ。
C/C++ のライブラリのパッケージ管理が発展してないのは伝統的に
ディストリビューションのパッケージ管理に全力で乗っかる文化があったからで、
モダンな開発環境は分けようとしてかえってややこしくしているような気もする。
元々あった問題があぶりだされただけかもしれんけど。
927デフォルトの名無しさん
2021/03/23(火) 01:20:30.89ID:27d1w4K5 まあlibcのバージョン違いで困った経験あると、スタティックリンクはやむ無しって思うけど。
928デフォルトの名無しさん
2021/03/23(火) 02:36:10.01ID:yC2dAiwP929デフォルトの名無しさん
2021/03/23(火) 09:53:23.27ID:KOWk2YN0 >>926
C/C++全盛の頃はコードを書く人と使う人が一致してることが多かったから問題なかった気がする。
自分の環境さえ正しくセットアップすればそれで問題ないという。
今みたいにGitHubでコード共有するのが当然って世界だと違う環境でビルドするのが困難ってのはきつい。
OSSのC++ライブラリを使おうとしたときに、作者と違うディストリビューション使ってる場合、ほぼ確実になんらかのトラブルにはまる印象だなぁ。
C/C++全盛の頃はコードを書く人と使う人が一致してることが多かったから問題なかった気がする。
自分の環境さえ正しくセットアップすればそれで問題ないという。
今みたいにGitHubでコード共有するのが当然って世界だと違う環境でビルドするのが困難ってのはきつい。
OSSのC++ライブラリを使おうとしたときに、作者と違うディストリビューション使ってる場合、ほぼ確実になんらかのトラブルにはまる印象だなぁ。
930デフォルトの名無しさん
2021/03/23(火) 12:53:42.65ID:71b8io/J てか低レイヤー依存のパッケージは言語パッケージ管理じゃ扱いづらいだろ。
931はちみつ餃子 ◆8X2XSCHEME
2021/03/23(火) 15:23:13.29ID:G0iN/IIq932デフォルトの名無しさん
2021/03/23(火) 16:03:34.41ID:p4kRzxCA Rustと関係ない雑談はそろそろよそでやって下さいね
933デフォルトの名無しさん
2021/03/23(火) 16:25:13.28ID:rdqm0ni7 次世代言語21 Go Nim Rust Swift Kotlin TypeScript
https://mevius.5ch.net/test/read.cgi/tech/1587276362/
あっちのスレの流れの中に投下するものがこっちに誤爆して話題が続いてるだけだぞ
https://mevius.5ch.net/test/read.cgi/tech/1587276362/
あっちのスレの流れの中に投下するものがこっちに誤爆して話題が続いてるだけだぞ
>>918
???
???
935デフォルトの名無しさん
2021/03/23(火) 22:26:53.30ID:97s02znq936デフォルトの名無しさん
2021/03/26(金) 17:08:58.51ID:JtXGrnUt Rust 1.51 replaced
https://mag.osdn.jp/21/03/27/103000
https://mag.osdn.jp/21/03/27/103000
937デフォルトの名無しさん
2021/03/26(金) 17:18:42.33ID:JtXGrnUt X replaced
O released
O released
938デフォルトの名無しさん
2021/03/26(金) 17:25:28.62ID:4e/BtnZ7 親善試合のプレー中でもないのにパンチを繰り出し、歯を折る韓国人の本質
939デフォルトの名無しさん
2021/03/28(日) 01:28:47.05ID:JTpxnMQC940デフォルトの名無しさん
2021/03/28(日) 01:44:52.75ID:AdvYUXyR >>939
証明論関係はプロトコル検証なんかには使えるかもね。
証明論関係はプロトコル検証なんかには使えるかもね。
941デフォルトの名無しさん
2021/03/28(日) 12:03:39.58ID:d7aJoNDz PDA以上の機械はどうやって機械的に証明したらいいんじゃ……
942デフォルトの名無しさん
2021/03/30(火) 10:38:53.80ID:D/DvGGEJ >>2
日本語版ねーの?
日本語版ねーの?
943デフォルトの名無しさん
2021/03/30(火) 12:16:47.56ID:+ozT2766944デフォルトの名無しさん
2021/03/31(水) 07:40:52.59ID:7yIFZkAA なんなのこのゴミ言語
早く消えろよゴミ
早く消えろよゴミ
945デフォルトの名無しさん
2021/03/31(水) 07:59:36.54ID:/8+Nd/ls 使わなきゃいいだけだろ?
946デフォルトの名無しさん
2021/03/31(水) 15:12:27.84ID:xy2Yhoz1 やってることはアフィカスと同じクズ言語
947デフォルトの名無しさん
2021/03/31(水) 15:45:22.05ID:/8+Nd/ls ZDNet Japan: トーバルズ氏が考える、LinuxにおけるRustの居場所とは.
https://japan.zdnet.com/article/35168533/
https://japan.zdnet.com/article/35168533/
948デフォルトの名無しさん
2021/03/31(水) 17:49:52.55ID:xl4s4pnz git も浪費が激しいゴミ
949デフォルトの名無しさん
2021/03/31(水) 22:41:28.27ID:HIJdwtTD >要するに、Linuxの記述言語がCからRustへと変わる日は当面の間やってこないだろう。その一方で、Rustベースのプログラムやドライバーをユーザー空間で実行するということに対する関心は高く、それに向けた動きは数多くあるため、いつの日にかLinuxというOSでRustベースのカーネルが採用されるだろう。
まあ当たり前の結論だわな。
まあ当たり前の結論だわな。
950デフォルトの名無しさん
2021/04/01(木) 09:50:04.35ID:Vom62NTk Javaやpythonのようなバブルは無いだろうが一定の需要はあるだろう
951デフォルトの名無しさん
2021/04/01(木) 10:21:51.12ID:+GSHkYwn 競技プログラミング分野で謎の注目を集めてるよRust
短時間とか早解きが重要なコンテストでは雑に書けないので使いづらいが、長期間のコンテストでは重宝されてる
強い人たちが使ってるのもあって
短時間とか早解きが重要なコンテストでは雑に書けないので使いづらいが、長期間のコンテストでは重宝されてる
強い人たちが使ってるのもあって
952デフォルトの名無しさん
2021/04/01(木) 10:53:00.87ID:DPgukaDD AndroidのBluetoothスタックがRustで書き直されたっぽい
https://android.googlesource.com/platform/system/bt/+/master/gd/rust/
Hacker NewsでAndroidのBluetoothの接続性やバグの多さが叩かれまくってて笑った
https://news.ycombinator.com/item?id=26647981
https://android.googlesource.com/platform/system/bt/+/master/gd/rust/
Hacker NewsでAndroidのBluetoothの接続性やバグの多さが叩かれまくってて笑った
https://news.ycombinator.com/item?id=26647981
953デフォルトの名無しさん
2021/04/01(木) 11:55:32.05ID:/m7p4qXu まあ9割は単なるファッションだろ。
実際使ってみるとc++で気をつけるのとほぼ変わらんしそれができる輩しかまともに使いこなせん。
実際使ってみるとc++で気をつけるのとほぼ変わらんしそれができる輩しかまともに使いこなせん。
954デフォルトの名無しさん
2021/04/01(木) 12:46:37.61ID:RDEfu8S8 そもそもデバドラならC++でもいいんちゃうん?
Linusが問答無用で許さない感じ?
Linusが問答無用で許さない感じ?
955デフォルトの名無しさん
2021/04/01(木) 13:00:07.82ID:Gl2KF2SW956デフォルトの名無しさん
2021/04/01(木) 13:04:33.77ID:4931ON8O C++は罵詈雑言で二度とそんなこと言うな
ぐらいで叩いてた
ぐらいで叩いてた
957デフォルトの名無しさん
2021/04/01(木) 13:36:29.59ID:3AhSZiXW 思いっきり皮肉だけど「C++独自の機能を使わないならC++でも構わない」みたいなこと言ってなかったっけ
958デフォルトの名無しさん
2021/04/01(木) 13:53:28.54ID:Gl2KF2SW オブジェクト指向はクソみたいなのも言ってた気がするし、
当時Linusが文句言ってたポイントをRustはうまく回避してるかも。
当時Linusが文句言ってたポイントをRustはうまく回避してるかも。
959デフォルトの名無しさん
2021/04/01(木) 14:57:07.23ID:/m7p4qXu linusはオブジェクト指向はファイルシステム周りでは有効って昔から言ってる。
流石にこの辺りの感覚は鋭いわ。
流石にこの辺りの感覚は鋭いわ。
960デフォルトの名無しさん
2021/04/01(木) 15:03:37.19ID:Gl2KF2SW あぁ確かにオブジェクト指向というよりC++のそれにまつわる機能がクソって話だったね。
961デフォルトの名無しさん
2021/04/01(木) 15:42:58.54ID:Vom62NTk そうは言ってもリナス自身が言語処理系に手を出す事は無いんだろうな
962デフォルトの名無しさん
2021/04/01(木) 15:48:42.19ID:/m7p4qXu >https://japan.zdnet.com/article/35168533/
これも年取ったからだいぶ穏やかに答えてるけど内心は
「とりあえずデバイスドライバーで実装してみろやwやれるもんならなw」って感じだと思うぞ。
これも年取ったからだいぶ穏やかに答えてるけど内心は
「とりあえずデバイスドライバーで実装してみろやwやれるもんならなw」って感じだと思うぞ。
963デフォルトの名無しさん
2021/04/01(木) 16:12:38.28ID:4931ON8O >>962
さすかに読み方ひねくれすぎ
さすかに読み方ひねくれすぎ
964デフォルトの名無しさん
2021/04/01(木) 19:45:16.51ID:0NPo8NNW >>955
https://tabesugi.net/memo/2009/1a.html
Date: Thu, 6 Sep 2007 18:50:28 +0100 (BST)
Message-ID: <alpine.LFD.0.999.0709061839510.5626@evo.linux-foundation.org>
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:
- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)
- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。
言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
https://tabesugi.net/memo/2009/1a.html
Date: Thu, 6 Sep 2007 18:50:28 +0100 (BST)
Message-ID: <alpine.LFD.0.999.0709061839510.5626@evo.linux-foundation.org>
C++ はひどい言語だ。これは、多くの平均以下のプログラマーが使ってるために
さらに輪をかけてゲロゲロになっていて、どうしようもないゴミが
簡単に生産されるようになってる。正直いって、C を選ぶ理由が C++ プログラマーを
追っぱらうため *だけ* だったとしても、それ自体、C を使う強力な理由になりうる。
C++ はトンでもなく悪い設計の元になりうる。どうせこの言語ではいつも STL やら
Boost やら、その他ゲロゲロベロベロの「素敵な」ライブラリの機能を使って、
それがあんたのプログラムに「役立つ」んだろうが、以下のことが起きる:
- うまく動かないときにもたらされる際限のない苦痛 (あと STL とか、特に Boost が
安定してるとか移植性があるとかいう奴は、どいつもこいつも大ウソつきで、
もはや笑えるレベルを超えている)
- 非効率な抽象プログラミングモデルで、2年たった後にこれらが実はそんなに
効率的じゃなかったことに気づくケース。でもそのときにはすでに全部の
コードがその素晴らしいオブジェクトモデルに依存していて、直すためには
アプリ全体を書き直さなきゃなんない。
言いかえれば、唯一まともで、効率がよくて、システムレベルで使えて、移植性がある
C++ ってのは、基本的に C で使える機能だけに限ったときなんだ。そして C だけに
限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
ついでに沢山のプログラマが実際に低水準の問題を理解することができて、アホらしい
「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
965デフォルトの名無しさん
2021/04/01(木) 19:48:28.85ID:0NPo8NNW >>958
>オブジェクト指向はクソみたいなのも言ってた気がするし、
>>964
>C だけに限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
>ついでに沢山のプログラマが実際に低水準の問題を理解することができて、
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>オブジェクト指向はクソみたいなのも言ってた気がするし、
>>964
>C だけに限定するってことは、他の人がそれをめちゃくちゃにしないってことで、
>ついでに沢山のプログラマが実際に低水準の問題を理解することができて、
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
>アホらしい「オブジェクト・モデル」のたわごとを持ちこまないってことだ。
968デフォルトの名無しさん
2021/04/01(木) 20:34:15.03ID:Kccm814S しかしこの話ももう15年近く前だし、C++20についてどう思ってるのかは気になるな。
相変わらずボロクソなのか、もう少し丸くなってるのか。
相変わらずボロクソなのか、もう少し丸くなってるのか。
969デフォルトの名無しさん
2021/04/01(木) 20:47:29.36ID:/m7p4qXu >>963
残念ながらlinusは俺の10倍はひねくれてるよ
残念ながらlinusは俺の10倍はひねくれてるよ
970デフォルトの名無しさん
2021/04/01(木) 20:49:11.47ID:uABybhUU 色々な言語を扱ってみればどんな言語でも"トンでもなく悪い設計の元になりうる"のは
Linusも気がついてるんだろうが、こういう手合いは
単に自分の好みで気にいらない事を否定するのに「一般的に良くないものだ」という
主張を持ちだすから始末がわるい
またこの手の攻撃的な人物は自分の周囲の人間が一般的であると思い込む傾向もあり
たしかにLinuxとオープンソース界隈の人間がC++を使いまくると"トンでもなく悪い設計"に
なりやすいだろうなというのもわかる(そういう界隈の人間は基本的に自由であり
自由にできる幅があるときは自分の思いついた"カッコイイやりかた"をすぐ人におしつけたがる)
Linusも気がついてるんだろうが、こういう手合いは
単に自分の好みで気にいらない事を否定するのに「一般的に良くないものだ」という
主張を持ちだすから始末がわるい
またこの手の攻撃的な人物は自分の周囲の人間が一般的であると思い込む傾向もあり
たしかにLinuxとオープンソース界隈の人間がC++を使いまくると"トンでもなく悪い設計"に
なりやすいだろうなというのもわかる(そういう界隈の人間は基本的に自由であり
自由にできる幅があるときは自分の思いついた"カッコイイやりかた"をすぐ人におしつけたがる)
971デフォルトの名無しさん
2021/04/01(木) 21:18:43.80ID:gCHls20K C++ネタになると書き込みするやつが急に増えるんだからwww
いい加減C++スレでやってね
いい加減C++スレでやってね
972デフォルトの名無しさん
2021/04/02(金) 02:22:20.02ID:6+Rf0OKV C++に勝てるっていう宣伝文句に惹かれて興味を持った人が多いのだから、本当にC++より良いのかっていうところに焦点が当たるのは宿命
973はちみつ餃子 ◆8X2XSCHEME
2021/04/02(金) 02:45:25.02ID:kyD8ajyX >>953
C++ の仕様に違反せずに書くために「気を付ける」程度で本当に足りるのか?
足りないからそこそこの規模のプロジェクトになったら valgrind とかのツールを導入するはめになるんだろ。
十分に知識を持っていても隅から隅まで 100% に配慮するのは無理ってのがわかってるから、
C++ で気を付けるのとほぼ変わらんなら Rust を導入する意義はある。
C++ の仕様に違反せずに書くために「気を付ける」程度で本当に足りるのか?
足りないからそこそこの規模のプロジェクトになったら valgrind とかのツールを導入するはめになるんだろ。
十分に知識を持っていても隅から隅まで 100% に配慮するのは無理ってのがわかってるから、
C++ で気を付けるのとほぼ変わらんなら Rust を導入する意義はある。
974デフォルトの名無しさん
2021/04/02(金) 07:23:26.60ID:fjFXuKAx 規模が大きくなって関わる人数も増えれば気を付けるのもかなりのストレスだしなあ
975デフォルトの名無しさん
2021/04/02(金) 07:39:02.80ID:YWxTGAu5 C++より安全という声は多いが誰がC++に勝てるなんて言っているんだ?
976デフォルトの名無しさん
2021/04/02(金) 08:29:19.74ID:2Zgm1hES c++でもuniqueptrなりconstなりmoveなりはあるわけで、かける人は同じように書けるだろ。
結局かける奴は書けるしかけない奴は書けないってのはどっち使っても一緒だわ
結局かける奴は書けるしかけない奴は書けないってのはどっち使っても一緒だわ
977デフォルトの名無しさん
2021/04/02(金) 08:54:38.43ID:WBadj+NS 昔は隅々まで配慮できる集中力があった気がするけど
歳とともに無理になってくるからコンパイラに指摘してもらったほうが楽。
いつまでも完璧なC++が書けるならそれはそれで羨ましい。
歳とともに無理になってくるからコンパイラに指摘してもらったほうが楽。
いつまでも完璧なC++が書けるならそれはそれで羨ましい。
978デフォルトの名無しさん
2021/04/02(金) 11:07:52.95ID:cCsMiK9D C++はおもんない、Rustはおもろい
979デフォルトの名無しさん
2021/04/02(金) 11:21:45.65ID:QB4/beuH 高度な技術と集中力でミスなく実行すれば
バグは発生しないという妄想に付き合うほど
みんな暇じゃないんだなあ
バグは発生しないという妄想に付き合うほど
みんな暇じゃないんだなあ
980デフォルトの名無しさん
2021/04/02(金) 11:43:52.67ID:2Zgm1hES だから問題あれば自然にコンパイラで引っ掛かるような書き方してるって話なのに全く通じてねーなこのバカ。
982デフォルトの名無しさん
2021/04/02(金) 12:21:03.20ID:OROAZ6WR 気をつければ大丈夫の域出てなくて笑う
コンピュータの仕事してるとは思えない、
コンピュータの仕事してるとは思えない、
983デフォルトの名無しさん
2021/04/02(金) 12:28:25.47ID:G+2KJI7R >>980
C++ってmoveされた後のオブジェクトに触って警告とか出ましたっけ??
C++ってmoveされた後のオブジェクトに触って警告とか出ましたっけ??
984デフォルトの名無しさん
2021/04/02(金) 15:25:20.76ID:2Zgm1hES そんなところでミスしてなぜかテストも書かない輩みたいな馬鹿を想定する意味がわからん。。
とことん自分の都合のいい馬鹿ユーザーしか想定してないってのが丸わかりだわ。
とことん自分の都合のいい馬鹿ユーザーしか想定してないってのが丸わかりだわ。
985デフォルトの名無しさん
2021/04/02(金) 15:53:38.70ID:fjFXuKAx そうだぞC++が使いこなせないのはお前らがバカだからだ
根性で頑張れや
根性で頑張れや
986デフォルトの名無しさん
2021/04/02(金) 17:30:11.49ID:6+Rf0OKV C++はやっぱ雑に書けるのが良いとこでしょう
987デフォルトの名無しさん
2021/04/02(金) 17:59:10.30ID:OPUpoa1U C++で問題起こすような間抜けはrust使ってろ
988デフォルトの名無しさん
2021/04/02(金) 18:03:13.36ID:fjFXuKAx そうだぞC++で出るバグや脆弱性はテストで全て回避出来るからな
死ぬ気でテスト書かないと駄目だぞ
コンパイラの警告なんかに頼るのは負けだと思え
死ぬ気でテスト書かないと駄目だぞ
コンパイラの警告なんかに頼るのは負けだと思え
989デフォルトの名無しさん
2021/04/02(金) 19:47:58.19ID:8x9LcGAm この話何度目だよ
990デフォルトの名無しさん
2021/04/02(金) 20:46:37.44ID:maklZ3nY C++はメモリへのアクセスの回数やパターンが見た目からはわかりにくいコード
(コードからメモリが透けて見えないコード)にすぐなるから
カーネル製作者としては許容し難い、というのが主要な反対理由のはず
(コードからメモリが透けて見えないコード)にすぐなるから
カーネル製作者としては許容し難い、というのが主要な反対理由のはず
991デフォルトの名無しさん
2021/04/02(金) 20:48:00.19ID:maklZ3nY 言語がRustであってもC++的な書き方をしているのを見たら怒り狂うことは必定
992デフォルトの名無しさん
2021/04/02(金) 20:53:37.95ID:fsPcAc13 指差し確認しながらコード書くべしとか言ってる馬鹿と変わらんな
993デフォルトの名無しさん
2021/04/02(金) 21:02:46.07ID:fsPcAc13 c++でまともに書けない奴がなぜかrustを使うと書けるようになるとかいうファンタジーを信じるバカの多さよ。。
994デフォルトの名無しさん
2021/04/02(金) 21:16:34.19ID:OG1TUjqd 「気をつければ大丈夫」みたいな根拠無き精神論って日本の生産性が低い一因だよな
995デフォルトの名無しさん
2021/04/02(金) 21:21:46.71ID:fsPcAc13 関数粒度を揃えるとかも根性論だとか思っちゃうバカなんだろうな。。
997デフォルトの名無しさん
2021/04/02(金) 21:28:46.33ID:QB4/beuH せやせやまずc++でテスト100万行書いてから文句言え
998デフォルトの名無しさん
2021/04/02(金) 21:31:30.66ID:G+2KJI7R C++のテストフレームワークって基本的にクソマクロ触らされるからやだ
999sage
2021/04/02(金) 21:35:18.69ID:fsPcAc13 はいはい、まともにrustでc++並の開発速度で製品作ってから言えや。
1000デフォルトの名無しさん
2021/04/02(金) 21:41:08.41ID:L7IeSfpL10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 222日 20時間 33分 33秒
新しいスレッドを立ててください。
life time: 222日 20時間 33分 33秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【結婚の壁】結婚どころか今まで恋愛経験は一切ない人も…「年収500万の壁」を突破できない中間層の苦しい現実 [ぐれ★]
- 【速報】高市首相 青森震度6強地震で負傷者30人 [蚤の市★]
- こんぺこ!こんぺこ!こんぺこ!🐰🏡
- 【動画】ママチャリまんさん「わたし女ですけど!」シャコシャコシャコシャコ 🚴‍♀❗🚛 [329329848]
- 声優・矢尾一樹の妻「治療の影響で思う様に話せない彼に、近くで仕事をしてきた人が、かっこ悪い!もう辞めなよと言った。私は許さない」 [594040874]
- 【画像】TOKIO山口達也に「いいべ」された当時のJK、性加害の反動であたしこグラドルにwww [779857986]
- おまえらスキンケアしてる?
- ぼくくん、昨年PCを組んだため値上げ回避 ちなスペック [794961135]
