公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
公式ドキュメント
https://www.rust-lang.org/learn
Web上の実行環境
https://play.rust-lang.org
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※次スレは原則>>980が立てること
前スレ
Rust part25
https://mevius.5ch.net/test/read.cgi/tech/1722354386/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
探検
Rust part26
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2024/09/20(金) 22:18:38.38ID:c48cFuZJ436デフォルトの名無しさん
2024/10/23(水) 15:08:29.40ID:XMcvf1I0437デフォルトの名無しさん
2024/10/23(水) 15:49:07.30ID:CetgrrtL お前らなんか作ってんの?
438デフォルトの名無しさん
2024/10/23(水) 18:08:14.82ID:XMcvf1I0 身バレするから詳しいことは言えないんだ。
匿名前提のコミュニティの制約だからしょうがない
匿名前提のコミュニティの制約だからしょうがない
439デフォルトの名無しさん
2024/10/23(水) 20:22:42.34ID:cjlpqfP+440デフォルトの名無しさん
2024/10/23(水) 22:12:20.50ID:IFkNXH06441デフォルトの名無しさん
2024/10/24(木) 07:52:11.99ID:ZozkKVrc442デフォルトの名無しさん
2024/10/24(木) 10:38:00.79ID:nzvp2PCa443デフォルトの名無しさん
2024/10/24(木) 10:45:57.96ID:EC4ipT+P Rustは、ASTを使ったマクロが書けるということみたいですが、
それについて詳しい書籍は有りませんか?
それについて詳しい書籍は有りませんか?
444デフォルトの名無しさん
2024/10/24(木) 11:20:06.71ID:Izj+Eszj AST操作ができるという意味では、Lispマクロと同等の能力を持つマクロを持つ言語は他にもあれど
AST自体がS式で非常に簡潔だからマクロを書くために追加で学習する事項はほとんどないし、言語実装側もかんたん、というのがLispマクロの特色と言えるかもね
AST自体がS式で非常に簡潔だからマクロを書くために追加で学習する事項はほとんどないし、言語実装側もかんたん、というのがLispマクロの特色と言えるかもね
445デフォルトの名無しさん
2024/10/24(木) 11:46:01.90ID:oHvtQW/4 >>443
本は知らんけどネットの情報だけで充分に学習出来た(経験談)
本は知らんけどネットの情報だけで充分に学習出来た(経験談)
446デフォルトの名無しさん
2024/10/24(木) 12:02:07.13ID:nzvp2PCa447デフォルトの名無しさん
2024/10/24(木) 14:32:18.09ID:dQJ9Pscb >>442
だからそういうことでしょ。
マクロは関数型言語・関数型プログラミングと直接関係無いし、Lispマクロが強力なのはASTを直接操作するメタプログラミングだからであって関数~~と直接関係無い。
だからそういうことでしょ。
マクロは関数型言語・関数型プログラミングと直接関係無いし、Lispマクロが強力なのはASTを直接操作するメタプログラミングだからであって関数~~と直接関係無い。
448デフォルトの名無しさん
2024/10/24(木) 16:46:48.00ID:zniBHQh+ 昔CommonLispでゲームサーバーとか作ってたけどね。マクロ書くのが楽なのは良かったね。
どちらかというと稼働中なサーバー止めずに関数単位でビルドできるとか型を指定して最適化しやすいってのがいい所だったけど真っ当なlispはAllegro Commom Lisp ぐらいしかないし、高くて勧められない。
今はもうrustの方が圧倒的に便利だし、マクロも必要十分と思ってる。s式だけに拘る理由はないよ。
どちらかというと稼働中なサーバー止めずに関数単位でビルドできるとか型を指定して最適化しやすいってのがいい所だったけど真っ当なlispはAllegro Commom Lisp ぐらいしかないし、高くて勧められない。
今はもうrustの方が圧倒的に便利だし、マクロも必要十分と思ってる。s式だけに拘る理由はないよ。
449デフォルトの名無しさん
2024/10/24(木) 17:02:46.99ID:zniBHQh+ マクロで抽象度高めるのはいいけど、やりすぎると自分以外に分からないDSLになる。程々でいいのよ。
Rustは頑張ればなんでも書けるマクロがあるけど、クレート分けたりちょっと面倒なんで程々で収まる。素人が手を出さない。ライブラリ作るような人だけ頑張ればいいの。
Rustは頑張ればなんでも書けるマクロがあるけど、クレート分けたりちょっと面倒なんで程々で収まる。素人が手を出さない。ライブラリ作るような人だけ頑張ればいいの。
450デフォルトの名無しさん
2024/10/24(木) 17:49:54.17ID:H1OVOnXq 乱数が標準ライブラリーで使えないなんて言語ある?
451デフォルトの名無しさん
2024/10/24(木) 18:03:21.93ID:Vyb04yis >>450
RandomStateが標準ライブラリにある
用途が極少数ならそのまま使ってもよい
用途が多数なら枯渇するためシードとして用いる
シードからの生成アルゴリズムはその性質に応じて無数にあるため標準ライブラリの対象外
RandomStateが標準ライブラリにある
用途が極少数ならそのまま使ってもよい
用途が多数なら枯渇するためシードとして用いる
シードからの生成アルゴリズムはその性質に応じて無数にあるため標準ライブラリの対象外
452デフォルトの名無しさん
2024/10/24(木) 19:26:04.63ID:Izj+Eszj >>451
RandomStateで乱数生成やったことないんだけど具体的にどうやるの?
RandomStateで乱数生成やったことないんだけど具体的にどうやるの?
453デフォルトの名無しさん
2024/10/24(木) 19:51:11.78ID:Vyb04yis use std::hash::{BuildHasher, RandomState};
let random_seed: u64 = RandomState::new().hash_one(0_u64);
あとはこのシードからお好みのアルゴリズムで生成
let random_seed: u64 = RandomState::new().hash_one(0_u64);
あとはこのシードからお好みのアルゴリズムで生成
454デフォルトの名無しさん
2024/10/24(木) 20:30:14.64ID:Izj+Eszj >>453
結局標準ライブラリでは乱数生成できないってことね、OK
結局標準ライブラリでは乱数生成できないってことね、OK
455デフォルトの名無しさん
2024/10/24(木) 20:46:28.29ID:Vyb04yis456デフォルトの名無しさん
2024/10/24(木) 21:26:15.04ID:AJVkLJ3Q いやシードと乱数は違うでしょ
「テスト用の適当な数値が欲しい」くらいの用途には使えないこともないけど
「テスト用の適当な数値が欲しい」くらいの用途には使えないこともないけど
457デフォルトの名無しさん
2024/10/24(木) 21:35:49.51ID:Vyb04yis 理解できない人向けにどうぞ
use std::hash::{BuildHasher, RandomState};
let random_value: u64 = RandomState::new().hash_one(0_u64);
ここで得られる値は乱数値
(シード値としても使えることを書いただけで混乱して理解できなくなる人がいるとは想定できずにごめんね)
use std::hash::{BuildHasher, RandomState};
let random_value: u64 = RandomState::new().hash_one(0_u64);
ここで得られる値は乱数値
(シード値としても使えることを書いただけで混乱して理解できなくなる人がいるとは想定できずにごめんね)
458デフォルトの名無しさん
2024/10/24(木) 22:02:47.28ID:2EUVLZAU459デフォルトの名無しさん
2024/10/24(木) 22:11:35.63ID:wLVwsEMS そんなんでごまかせるわけないだろw
ワロタ
ワロタ
460デフォルトの名無しさん
2024/10/24(木) 22:18:39.07ID:g+5KBp/6 >>457で得られる値はgetrandomシステムコールや/dev/urandomから得ているので正真正銘の乱数値
461デフォルトの名無しさん
2024/10/24(木) 22:40:22.29ID:BfhK7+JQ なんでこの程度の内容で議論が発生して第三者の解説が必要になるんだよ
462デフォルトの名無しさん
2024/10/24(木) 22:41:20.63ID:wLVwsEMS なんかnightlyにあったわ、つい最近のやつじゃん
そのゴミ生成器片付けとけよ
https://doc.rust-lang.org/nightly/std/random/index.html
https://github.com/rust-lang/rust/issues/130703
そのゴミ生成器片付けとけよ
https://doc.rust-lang.org/nightly/std/random/index.html
https://github.com/rust-lang/rust/issues/130703
463デフォルトの名無しさん
2024/10/24(木) 22:52:15.99ID:g+5KBp/6 Rustの標準ライブラリはHashMapなどで使われる安全なハッシュをサポートするために各OS環境から正真正銘の乱数を得ていてそれが>>457
464デフォルトの名無しさん
2024/10/25(金) 01:03:47.43ID:Y++YkFSY >>462
これまで、標準ライブラリで乱数をサポートしないのがRustらしさだと擁護してきた信者の気持ちを踏みにじるような機能追加だな
これまで、標準ライブラリで乱数をサポートしないのがRustらしさだと擁護してきた信者の気持ちを踏みにじるような機能追加だな
465デフォルトの名無しさん
2024/10/25(金) 01:53:32.00ID:xvw9KCma466デフォルトの名無しさん
2024/10/25(金) 02:10:41.48ID:SHu6FAIt それが複オジクオリティw
467デフォルトの名無しさん
2024/10/25(金) 11:31:42.20ID:fr1AC94B Rust信者はRustが素晴らしいという前提から出発しているから、どんな現状でも追認するしかないんだよね
468デフォルトの名無しさん
2024/10/25(金) 11:40:01.29ID:1Wl1tm3d 信者てここには一人しかおらんやん
乱数とハッシュ値の違いも分からん信者wだけど
乱数とハッシュ値の違いも分からん信者wだけど
469デフォルトの名無しさん
2024/10/25(金) 20:43:07.49ID:Mvi3fEJ3 iOS/Androidに対応した「Tauri 2.0」が公開 ~「Rust」が使えるアプリフレームワーク
https://forest.watch.impress.co.jp/docs/news/1628498.html
https://forest.watch.impress.co.jp/docs/news/1628498.html
470デフォルトの名無しさん
2024/10/25(金) 21:10:43.49ID:jlqDauPO くやしいのうwくやしいのうw
471デフォルトの名無しさん
2024/10/25(金) 22:12:28.52ID:HbwYxM+j 話題を変えて無かったことにして欲しいらしいw
追い裏金の話を闇バイト強盗の話で誤魔化そうとしてもダメだろ〜
追い裏金の話を闇バイト強盗の話で誤魔化そうとしてもダメだろ〜
472デフォルトの名無しさん
2024/10/25(金) 22:52:21.52ID:JoNG8t7V473デフォルトの名無しさん
2024/10/25(金) 23:39:25.27ID:wDVIpXT3 乱数は用途によって必要な性質が違うのであまり標準に入れて欲しくないが
インターフェイスは標準で決めて欲しいとは思う。
インターフェイスは標準で決めて欲しいとは思う。
474デフォルトの名無しさん
2024/10/25(金) 23:45:41.75ID:7THBsPfL 乱数を標準ライブラリに入れてない頭おかしい言語って他にもあるの?
475デフォルトの名無しさん
2024/10/26(土) 00:10:22.27ID:zGz4kG9y あっても使い物にならないのとかあるしなぁ。
ECMAScript (JavaScript) とか C とかの乱数は使いものにならないから実質的に無いのと同じだし、意味のないものを入れるくらいなら入れないほうがマシ。
ECMAScript (JavaScript) とか C とかの乱数は使いものにならないから実質的に無いのと同じだし、意味のないものを入れるくらいなら入れないほうがマシ。
476デフォルトの名無しさん
2024/10/26(土) 00:22:27.42ID:zGz4kG9y 本当に頭のいい人たちが検証を重ねて世に送り出したモノが使い物にならないとはどういうところを言うのですか?
478デフォルトの名無しさん
2024/10/26(土) 00:44:55.37ID:IoqxjKuL 本当に頭のいい人たちが検証を重ねて世に送り出したモノではないというところですね……
そう言う自分も、無批判には使わずに一様性を検定するなどしてから使うけど、信頼してないからではなく
480デフォルトの名無しさん
2024/10/26(土) 02:13:26.68ID:w49K9FL/ >>473
同意
同意
481デフォルトの名無しさん
2024/10/26(土) 08:44:00.93ID:jdoQvLux482デフォルトの名無しさん
2024/10/26(土) 10:04:40.94ID:zGz4kG9y >>481
標準ライブラリは言語仕様と不可分だ。
規格に書いてあるか、公式に standard library という用語で呼んでいるのが標準ライブラリだと考えている。
ただ、変な経緯を持つものや事実上の標準のように扱われるものはあるから……。
C++ では STL (Standard Template Library) は言語仕様に取り入れられる前から STL と名乗ってた。
Haskell や Ruby のように特定の処理系が一強の場合は規格を論じるのがあまり意味ない場合もあるし。
標準ライブラリは言語仕様と不可分だ。
規格に書いてあるか、公式に standard library という用語で呼んでいるのが標準ライブラリだと考えている。
ただ、変な経緯を持つものや事実上の標準のように扱われるものはあるから……。
C++ では STL (Standard Template Library) は言語仕様に取り入れられる前から STL と名乗ってた。
Haskell や Ruby のように特定の処理系が一強の場合は規格を論じるのがあまり意味ない場合もあるし。
483デフォルトの名無しさん
2024/10/26(土) 10:53:28.94ID:hjzg/CzG >>469
Tauriはゴミ
Tauriはゴミ
484デフォルトの名無しさん
2024/10/26(土) 11:44:59.52ID:OlAES+Uo Rustはライブラリをあまり取り込まない方針じゃなかったっけ?
変わったの?
変わったの?
485デフォルトの名無しさん
2024/10/26(土) 12:24:14.18ID:+FwZ39pi >>482
言語仕様と標準ライブラリ仕様の区別がついてないだけでなく規格と言語仕様の区別もついてないんだな
言語仕様と標準ライブラリ仕様の区別がついてないだけでなく規格と言語仕様の区別もついてないんだな
486デフォルトの名無しさん
2024/10/26(土) 12:27:05.83ID:Q0mTv4/1 >>473
物凄い支離滅裂な主張に感じるのは俺だけか?
物凄い支離滅裂な主張に感じるのは俺だけか?
487デフォルトの名無しさん
2024/10/26(土) 12:34:35.45ID:zGz4kG9y >>484
Rust の標準ライブラの基礎理念はエコシステムの基盤として最小限かつ実践的であること。
肥大化させるのは良くないが、だからといって有用なものまで避けたりはしない。
常識的に考えて主要なデータ構造は標準ライブラリに入れるし、
ハッシュテーブルのハッシュには乱数を使う (いわゆるソルト) のでどうせならそれをユーザ向けに公開したってよかろうという感じ。
RandomState が std::hash の下にあるのはそういうこと。
ハッシュをかき乱す要素を入れないと意図的にハッシュが衝突するデータを入力する攻撃が成立する可能性があるので、
それを避けるために乱数を混ぜ込むものなんだよ。
Rust の標準ライブラの基礎理念はエコシステムの基盤として最小限かつ実践的であること。
肥大化させるのは良くないが、だからといって有用なものまで避けたりはしない。
常識的に考えて主要なデータ構造は標準ライブラリに入れるし、
ハッシュテーブルのハッシュには乱数を使う (いわゆるソルト) のでどうせならそれをユーザ向けに公開したってよかろうという感じ。
RandomState が std::hash の下にあるのはそういうこと。
ハッシュをかき乱す要素を入れないと意図的にハッシュが衝突するデータを入力する攻撃が成立する可能性があるので、
それを避けるために乱数を混ぜ込むものなんだよ。
488デフォルトの名無しさん
2024/10/26(土) 12:36:36.70ID:zGz4kG9y >>485
区別を付けてるから言葉を使い分けてる。
区別を付けてるから言葉を使い分けてる。
489デフォルトの名無しさん
2024/10/26(土) 12:43:45.54ID:zGz4kG9y >>486
Rust ならライブラリのインターフェイスはトレイトの形で決められるだろ。
トレイトを標準ライブラリとして用意して実装は外部のクレートに任せればよいという意味だが、なんか不自然なところある?
スレッド関係とかはそうなってるのもあると思うが。
Rust ならライブラリのインターフェイスはトレイトの形で決められるだろ。
トレイトを標準ライブラリとして用意して実装は外部のクレートに任せればよいという意味だが、なんか不自然なところある?
スレッド関係とかはそうなってるのもあると思うが。
490デフォルトの名無しさん
2024/10/26(土) 12:58:01.15ID:IoqxjKuL491デフォルトの名無しさん
2024/10/26(土) 14:44:24.24ID:82EWlGrQ >>487
ハッシュテーブルのハッシュにソルト必要か?
ハッシュテーブルのハッシュにソルト必要か?
492デフォルトの名無しさん
2024/10/26(土) 15:08:22.43ID:hjzg/CzG saltは乱数ではないよ
493デフォルトの名無しさん
2024/10/26(土) 21:33:32.55ID:QHYclvz0 乱数は2種類ある
1つは擬似乱数で与えられたシード(初期値)から出発して各アルゴリズムで順に生成していく
同じシードなら同じ生成列になってしまい時刻情報などをシードとして用いても推測されると生成列がバレてしまう
そこでもう1つの自然乱数をシードとして用いることで問題を解決できる
この自然乱数は計算ではなく外部のエントロピーなどから得る
これは各OS環境などでバラバラに提供されている
1つは擬似乱数で与えられたシード(初期値)から出発して各アルゴリズムで順に生成していく
同じシードなら同じ生成列になってしまい時刻情報などをシードとして用いても推測されると生成列がバレてしまう
そこでもう1つの自然乱数をシードとして用いることで問題を解決できる
この自然乱数は計算ではなく外部のエントロピーなどから得る
これは各OS環境などでバラバラに提供されている
494デフォルトの名無しさん
2024/10/26(土) 21:36:01.18ID:QHYclvz0 Rustがstd::randomで提供しようとしているのは擬似乱数ではなく自然乱数の方
もちろん自然乱数も様々なものが使える環境もあるためtrait RandomSourceを用意している
そして各環境毎に標準的に使えそうな実装をDefaultRandomSourceとして提供している
もちろん自然乱数も様々なものが使える環境もあるためtrait RandomSourceを用意している
そして各環境毎に標準的に使えそうな実装をDefaultRandomSourceとして提供している
495デフォルトの名無しさん
2024/10/26(土) 21:40:12.79ID:QHYclvz0 つまり擬似乱数の各アルゴリズムを実装しているクレートなどの本体部分はこれまで通り
それらの中でシードのために利用する自然乱数の取得を各環境別に書いていた部分がstd::randomを利用できるようになる
このために自然乱数の提供を標準ライブラリに入れようとしている
それらの中でシードのために利用する自然乱数の取得を各環境別に書いていた部分がstd::randomを利用できるようになる
このために自然乱数の提供を標準ライブラリに入れようとしている
496デフォルトの名無しさん
2024/10/26(土) 21:43:58.25ID:QHYclvz0 ちなみにHashDos攻撃を避けるために標準ライブラリのHashMapは以前から自然乱数を利用するコードとなっている
そのため我々は以前から>>457のコードの形で現行の標準ライブラリでも自然乱数を間接的に得ることができる
いずれstd::randomが安定化すると自然乱数を直接的に得られるようになる
そのため我々は以前から>>457のコードの形で現行の標準ライブラリでも自然乱数を間接的に得ることができる
いずれstd::randomが安定化すると自然乱数を直接的に得られるようになる
497デフォルトの名無しさん
2024/10/26(土) 22:18:58.17ID:j2ddNQEF 今日一日勉強した成果がこれかぁ
>>493
前半の話はPRNG(deterministic)とCSPRNG(unpredictable and non-deterministic)の違いで
PRNGのシードもほとんどのケースは自然乱数(真の乱数)ではなくCSPRNGを使った疑似乱数
>>494
std::randomが提供しようとしているのはCSPRNGだけでなくPRNGも検討されている
https://github.com/rust-lang/rust/issues/131606
つまり…
>>495の結論は間違いだらけ
がんばれ〜
>>493
前半の話はPRNG(deterministic)とCSPRNG(unpredictable and non-deterministic)の違いで
PRNGのシードもほとんどのケースは自然乱数(真の乱数)ではなくCSPRNGを使った疑似乱数
>>494
std::randomが提供しようとしているのはCSPRNGだけでなくPRNGも検討されている
https://github.com/rust-lang/rust/issues/131606
つまり…
>>495の結論は間違いだらけ
がんばれ〜
498デフォルトの名無しさん
2024/10/26(土) 22:23:14.55ID:IoqxjKuL 長々と書いてるがやっぱりまだ「シード=乱数値」と思っていそうな、それを再確認するためにチェリーピッキングしたフシがあるように読めるな……
>>496
https://doc.rust-lang.org/src/std/hash/random.rs.html#67
RandomState::newで「自然乱数」を読むのはTLSにあるKEYSを初期化するときただ1回きりなのだが、それは特に問題だと思っていないという認識で良いか
>>496
https://doc.rust-lang.org/src/std/hash/random.rs.html#67
RandomState::newで「自然乱数」を読むのはTLSにあるKEYSを初期化するときただ1回きりなのだが、それは特に問題だと思っていないという認識で良いか
499デフォルトの名無しさん
2024/10/26(土) 22:37:43.22ID:j2ddNQEF500デフォルトの名無しさん
2024/10/26(土) 22:46:16.13ID:IoqxjKuL501デフォルトの名無しさん
2024/10/26(土) 22:56:45.07ID:sdYu6ROK >>497
その決めつけはおかしいな
自然環境ノイズに基づく自然乱数が得られる環境では自然乱数が使われているよ
例えばLinuxやMac含めてUnix系ならば/dev/randomと/dev/urandomやシステムコール化したgetrandomがあり
Rustでも用いているよ
その決めつけはおかしいな
自然環境ノイズに基づく自然乱数が得られる環境では自然乱数が使われているよ
例えばLinuxやMac含めてUnix系ならば/dev/randomと/dev/urandomやシステムコール化したgetrandomがあり
Rustでも用いているよ
502デフォルトの名無しさん
2024/10/27(日) 02:58:36.94ID:ovJMtE5q503デフォルトの名無しさん
2024/10/27(日) 09:03:06.72ID:b1uLb42O そもそも外部のエントロピーで自然乱数列を生成出来るなら
わざわざそれをシードにして別の自然乱数列を造る必要無くね?
わざわざそれをシードにして別の自然乱数列を造る必要無くね?
504デフォルトの名無しさん
2024/10/27(日) 11:20:29.17ID:0ovc+IwP crates古いのしか無いと不安になるなω
sfmt 3年前
mersenne_twister (github dcrewi) 7年前
mersenne-twister (github mztikk) 1年前
rand_mt 数ヶ月
sfmt 3年前
mersenne_twister (github dcrewi) 7年前
mersenne-twister (github mztikk) 1年前
rand_mt 数ヶ月
505デフォルトの名無しさん
2024/10/27(日) 12:31:48.22ID:Den/VAK2 >>503
randomあたりのman
randomあたりのman
506デフォルトの名無しさん
2024/10/27(日) 14:02:01.43ID:j7g6Rtfs 自然乱数はランダムになるまで時間がかかるからな
短い間に何度も乱数が欲しいような時には使えない
短い間に何度も乱数が欲しいような時には使えない
507デフォルトの名無しさん
2024/10/27(日) 16:44:26.48ID:mkB59Ft+ 酷いスレだなあ
508デフォルトの名無しさん
2024/10/27(日) 17:40:01.62ID:wWZS6c6H 嘘800系おじさん達のスレだから
509デフォルトの名無しさん
2024/10/27(日) 19:13:29.29ID:xAbk2B9K510デフォルトの名無しさん
2024/10/27(日) 21:33:13.60ID:e6AmFL8t enum Data{
Id(usize),
}
fn main() {
let data = &Data::Id(1);
match data {
Data::Id(i) => println!("{}",i)
}
}
これでなんでData::Id(i)で参照型であるはずの値にマッチできてしかもiの型が&usizeになるのか理解できない
誰か教えて
Id(usize),
}
fn main() {
let data = &Data::Id(1);
match data {
Data::Id(i) => println!("{}",i)
}
}
これでなんでData::Id(i)で参照型であるはずの値にマッチできてしかもiの型が&usizeになるのか理解できない
誰か教えて
511デフォルトの名無しさん
2024/10/27(日) 21:47:12.93ID:rfQndDpU match ergonomicsってやつ
https://github.com/rust-lang/rfcs/blob/master/text/2005-match-ergonomics.md
https://github.com/rust-lang/rfcs/blob/master/text/2005-match-ergonomics.md
512デフォルトの名無しさん
2024/10/27(日) 22:08:05.31ID:e6AmFL8t513デフォルトの名無しさん
2024/10/27(日) 23:41:52.09ID:Tg9DDiAK >>497
>> std::randomが提供しようとしているのはCSPRNGだけでなくPRNGも検討されている
>> https://github.com/rust-lang/rust/issues/131606
そこ見るとChaCha8を用いようとしているから十分に強力なCSPRNG(暗号論的擬似乱数生成器)だ
>>502
擬似乱数といってもピンキリで
getrandomはまずハードウェアから十分なエントロピーを生成取得した上で
それをシードとしてChaCha20という暗号論的擬似乱数生成している
これはハードウェアからの自然乱数と同等レベルになる
>> std::randomが提供しようとしているのはCSPRNGだけでなくPRNGも検討されている
>> https://github.com/rust-lang/rust/issues/131606
そこ見るとChaCha8を用いようとしているから十分に強力なCSPRNG(暗号論的擬似乱数生成器)だ
>>502
擬似乱数といってもピンキリで
getrandomはまずハードウェアから十分なエントロピーを生成取得した上で
それをシードとしてChaCha20という暗号論的擬似乱数生成している
これはハードウェアからの自然乱数と同等レベルになる
514デフォルトの名無しさん
2024/10/27(日) 23:46:47.80ID:9kUvwHn+ 自分は 512 じゃないけど関連する質問をさせてください
>>511 のリンク先を見て初めて ref というキーワードを知ったんだけど、これってどういう場面で使うの?
自分がこれまで書いた範囲では & だけで済んでて、ref が必要になったケースが多分無いんだけど、ref で無いと解決できない場面としてどういう例があるのか知りたい
(あるいは、言語のアップデートの中で必要性が薄れていったという感じ?)
>>511 のリンク先を見て初めて ref というキーワードを知ったんだけど、これってどういう場面で使うの?
自分がこれまで書いた範囲では & だけで済んでて、ref が必要になったケースが多分無いんだけど、ref で無いと解決できない場面としてどういう例があるのか知りたい
(あるいは、言語のアップデートの中で必要性が薄れていったという感じ?)
515デフォルトの名無しさん
2024/10/28(月) 14:20:37.64ID:ehQdeP61 >>510
こうすれば理由が判る
enum Data{
Id(usize),
Hoge(f64)
}
fn main() {
let data = [&Data::Id(1), &Data::Hoge(2.5)];
for datum in data {
match datum {
Data::Id(i) => println!("{}", i),
Data::Hoge(i) => println!("{}", i)
}
}
}
https://paiza.io/projects/BeHrG-AymCq-pMnm8S4C7g
こうすれば理由が判る
enum Data{
Id(usize),
Hoge(f64)
}
fn main() {
let data = [&Data::Id(1), &Data::Hoge(2.5)];
for datum in data {
match datum {
Data::Id(i) => println!("{}", i),
Data::Hoge(i) => println!("{}", i)
}
}
}
https://paiza.io/projects/BeHrG-AymCq-pMnm8S4C7g
516デフォルトの名無しさん
2024/10/28(月) 15:36:29.99ID:F96bVlEH >>513
内部で利用しているストリーム暗号方式が暗号学的に安全とされているものだからといって
それを使った乱数生成器が自動的に暗号学的に安全となるわけではないんだよ
>ハードウェアからの自然乱数と同等レベルになる
この同等レベルという意味が真の乱数と計算量的に区別不可能(computationally indistinguishable)という意味ならそれはCSPRNGの定義なのでその通り
本当に同等レベルかというともちろん違う
内部で利用しているストリーム暗号方式が暗号学的に安全とされているものだからといって
それを使った乱数生成器が自動的に暗号学的に安全となるわけではないんだよ
>ハードウェアからの自然乱数と同等レベルになる
この同等レベルという意味が真の乱数と計算量的に区別不可能(computationally indistinguishable)という意味ならそれはCSPRNGの定義なのでその通り
本当に同等レベルかというともちろん違う
517デフォルトの名無しさん
2024/10/28(月) 15:44:53.20ID:F96bVlEH >>514
>(あるいは、言語のアップデートの中で必要性が薄れていったという感じ?)
↑これ
昔はThe Bookでも解説されてた
https://doc.rust-lang.org/1.33.0/book/ch18-03-pattern-syntax.html#legacy-patterns-ref-and-ref-mut
構造体の一部をborrowして一部をmoveしたいというときに必要って言われてるけど
個人的にそうしたいと思ったことがないので基本的に使ってない
>(あるいは、言語のアップデートの中で必要性が薄れていったという感じ?)
↑これ
昔はThe Bookでも解説されてた
https://doc.rust-lang.org/1.33.0/book/ch18-03-pattern-syntax.html#legacy-patterns-ref-and-ref-mut
構造体の一部をborrowして一部をmoveしたいというときに必要って言われてるけど
個人的にそうしたいと思ったことがないので基本的に使ってない
518デフォルトの名無しさん
2024/10/28(月) 15:56:42.93ID:F96bVlEH 非公式日本語訳にはまだ残ってた
丸6年以上も更新されてなのかぁ
https://doc.rust-jp.rs/book-ja/ch18-03-pattern-syntax.html#refとref-mutでパターンに参照を生成する
丸6年以上も更新されてなのかぁ
https://doc.rust-jp.rs/book-ja/ch18-03-pattern-syntax.html#refとref-mutでパターンに参照を生成する
519デフォルトの名無しさん
2024/10/28(月) 21:38:31.01ID:duvMwVsG520デフォルトの名無しさん
2024/10/28(月) 23:57:53.34ID:wC5Gxvqx >>510
それはパターンマッチングのバインディングモードという機能
Rust公式リファレンス
https://doc.rust-lang.org/reference/patterns.html#binding-modes
状況に応じてデフォルトのバインディングモードが変わる
例えば同じ型同士だとデフォルトはムーブが適用される
片方だけ参照をマッチさせると(記述しなくても)refが自動適用される
可変参照ならref mutが自動適用される
>>514
フィールド毎に指定を変えたい時にrefを使う
例えばref自動適用は全てのフィールドに適用される
それはパターンマッチングのバインディングモードという機能
Rust公式リファレンス
https://doc.rust-lang.org/reference/patterns.html#binding-modes
状況に応じてデフォルトのバインディングモードが変わる
例えば同じ型同士だとデフォルトはムーブが適用される
片方だけ参照をマッチさせると(記述しなくても)refが自動適用される
可変参照ならref mutが自動適用される
>>514
フィールド毎に指定を変えたい時にrefを使う
例えばref自動適用は全てのフィールドに適用される
521デフォルトの名無しさん
2024/10/28(月) 23:59:12.24ID:wC5Gxvqx 例えばよくあるこんな構造体を値とするHashMapがあったとして
struct Person { name: String, age: u32, }
このvalues()が返すのは&Person型なのでこう書く必要がある
for &Person { ref name, age } in hashmap.values() {
println!("{name}: {age}");
}
ところが片方だけ参照にするとrefを記述しなくてもよくなる
for Person { name, age } in hashmap.values() {
ただしageも参照&u32になる
同様に片方だけ可変参照にするとmut refを記述しなくてもよくなる
for Person { name, age } in hashmap.values_mut() {
struct Person { name: String, age: u32, }
このvalues()が返すのは&Person型なのでこう書く必要がある
for &Person { ref name, age } in hashmap.values() {
println!("{name}: {age}");
}
ところが片方だけ参照にするとrefを記述しなくてもよくなる
for Person { name, age } in hashmap.values() {
ただしageも参照&u32になる
同様に片方だけ可変参照にするとmut refを記述しなくてもよくなる
for Person { name, age } in hashmap.values_mut() {
rustはOSやデバイスドライバなどを作る人が使うもので、ふつうに業務アプリなどを書くには敷居が高すぎるというか、習熟のためのコストが高すぎるというか、勿体無いというか
凡人には無用(無理)なのかな
学んでいて得るものは多いけど、そういった点でHaskellに似ていると思いました
凡人には無用(無理)なのかな
学んでいて得るものは多いけど、そういった点でHaskellに似ていると思いました
523デフォルトの名無しさん
2024/10/29(火) 07:09:02.81ID:LPWWq4s4 OSやデバイスドライバよりも上位の、例えばCLIアプリやバックエンドの開発にも役立つ言語だよ
Rustの利点は「低レイヤで必要なメモリ周りの管理ができる」ことだけでなくて、型による表現力の高さや、借用のなどのルールによるバグの防ぎやすさなどの強みもある
マルチスレッドだと、デッドロックは防げないけど、データレースなどの問題はコンパイル時の検査でほぼ防ぐことができる (個人的にはこれがすごく助かる)
業務アプリだと割に合わないというのは同意
Rustを理解してる人がチームに1人はいて、他の人に教えられる体制になってないと難しいと思う
習得時間をかけられなかったり、あまりレベルの高くない人もアサインするようなプロジェクトだとたぶん厳しい
簡単な言語ではないけど、Haskellほど難しくはないし、凡人には無理ってこともない (自分はRustを書いてるけど、自分だって凡人だし)
個人的に勉強しつつ、使えそうな機会があれば試しにRustで書いてみるというのはアリだと思う
Rustの利点は「低レイヤで必要なメモリ周りの管理ができる」ことだけでなくて、型による表現力の高さや、借用のなどのルールによるバグの防ぎやすさなどの強みもある
マルチスレッドだと、デッドロックは防げないけど、データレースなどの問題はコンパイル時の検査でほぼ防ぐことができる (個人的にはこれがすごく助かる)
業務アプリだと割に合わないというのは同意
Rustを理解してる人がチームに1人はいて、他の人に教えられる体制になってないと難しいと思う
習得時間をかけられなかったり、あまりレベルの高くない人もアサインするようなプロジェクトだとたぶん厳しい
簡単な言語ではないけど、Haskellほど難しくはないし、凡人には無理ってこともない (自分はRustを書いてるけど、自分だって凡人だし)
個人的に勉強しつつ、使えそうな機会があれば試しにRustで書いてみるというのはアリだと思う
524デフォルトの名無しさん
2024/10/29(火) 09:24:33.94ID:G3xxa4mJ 習熟が難しいのは確かだけど、どこでコストを考えるかだと思う。開発期間が増えてもバグ取りの工数は減るとか、サーバー負荷の削減で運営費が安くなるとか。今はAIでコード生成も出来るし、難しさが必ずしもデメリットとは思わない。
525デフォルトの名無しさん
2024/10/29(火) 10:26:21.77ID:2QinlXet Rust は清書用
526デフォルトの名無しさん
2024/10/29(火) 12:21:21.00ID:dZcxKFDp 清書とかいう概念、実際やってるのみんな
527デフォルトの名無しさん
2024/10/29(火) 12:25:27.38ID:7GiGHo3I 早くfirefoxを清書してほしい
528デフォルトの名無しさん
2024/10/29(火) 12:27:45.80ID:o5unV1rL Servo落ちまくりなんだけど、Rustの品質が低いせい?
529デフォルトの名無しさん
2024/10/29(火) 13:11:11.67ID:Swi66pRZ530デフォルトの名無しさん
2024/10/29(火) 14:12:45.77ID:i62m9hCf Rustを関数型扱いするやつは
Rustも関数型もまるで理解してない
だから誰も真面目には相手してくれない
Rustも関数型もまるで理解してない
だから誰も真面目には相手してくれない
531デフォルトの名無しさん
2024/10/29(火) 14:14:12.62ID:i62m9hCf Rustほどリファクタリングに向いてない言語は無いな
532デフォルトの名無しさん
2024/10/29(火) 14:45:53.32ID:IsdOq2r9 >>522
Haskell は言語自体は普段使いしやすいと思うが……。
しんどいのは副作用が存在しない (一般的に副作用とされるものが作用としてやりとりされる) という純粋関数型の部分で、このパラダイムの違いが外のシステムとの接続をやりづらくしてる。
いろんなライブラリやフレームワークの支えなしに業務システムを書くのは割に合わないし、辻褄合わせのラッパーライブラリを自分で書くのも面倒くさい。
(既にラッパーがある状況ならそんなにしんどくないけど。)
それと副作用のない世界でチューニングするのもしんどい。
必要なら仕方ないが他の言語ならしなくてよい苦労をする感じがするのがつらい。
Rust は C に ML 風の型システムを付けたくらいのごく普通のパラダイムなので、今まで業務アプリを作っていたくらいのスキルがある人にとってそんなにハードルは高いとは思わないな。
初心者が最初に手を付けるのはやめといたほうが良いとは思うが。
Haskell は言語自体は普段使いしやすいと思うが……。
しんどいのは副作用が存在しない (一般的に副作用とされるものが作用としてやりとりされる) という純粋関数型の部分で、このパラダイムの違いが外のシステムとの接続をやりづらくしてる。
いろんなライブラリやフレームワークの支えなしに業務システムを書くのは割に合わないし、辻褄合わせのラッパーライブラリを自分で書くのも面倒くさい。
(既にラッパーがある状況ならそんなにしんどくないけど。)
それと副作用のない世界でチューニングするのもしんどい。
必要なら仕方ないが他の言語ならしなくてよい苦労をする感じがするのがつらい。
Rust は C に ML 風の型システムを付けたくらいのごく普通のパラダイムなので、今まで業務アプリを作っていたくらいのスキルがある人にとってそんなにハードルは高いとは思わないな。
初心者が最初に手を付けるのはやめといたほうが良いとは思うが。
533デフォルトの名無しさん
2024/10/29(火) 15:33:28.84ID:XrFhUcNT >>528
コードの品質が低いんだろ
RefCellとかでちょっとしたメモリ競合リスクを検知してすぐに落ちるRustと
多少のメモリ競合リスクは無視して動き続けるC++の比較は品質というより好みの問題
コードの品質が低いんだろ
RefCellとかでちょっとしたメモリ競合リスクを検知してすぐに落ちるRustと
多少のメモリ競合リスクは無視して動き続けるC++の比較は品質というより好みの問題
534デフォルトの名無しさん
2024/10/29(火) 17:51:59.87ID:sGMbaaCI 多くの人がOCaml選ばずRust選ぶ理由を知りたい
Rustより明らかに簡単
Rustより明らかに簡単
535デフォルトの名無しさん
2024/10/29(火) 18:39:05.10ID:g6F4huNS >>532
>このパラダイムの違いが外のシステムとの接続をやりづらくしてる。
あんまり関係なくね?
パラダイムの違いはHaskell自体の習得には大きく関係あるけど
そこを超えてる人ならFFIでCのコードを呼ぶのは
C#やSwiftからCのコードを呼び出すのと大差ない
Rustの場合はFFIでもコンパイラがメモリ安全性を
保証できるように注意深くAPIを設計する必要があるから
FFI書くのはHaskellよりもややハードル高い
>このパラダイムの違いが外のシステムとの接続をやりづらくしてる。
あんまり関係なくね?
パラダイムの違いはHaskell自体の習得には大きく関係あるけど
そこを超えてる人ならFFIでCのコードを呼ぶのは
C#やSwiftからCのコードを呼び出すのと大差ない
Rustの場合はFFIでもコンパイラがメモリ安全性を
保証できるように注意深くAPIを設計する必要があるから
FFI書くのはHaskellよりもややハードル高い
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… [BFU★]
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… ★2 [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 小野田紀美・経済安保担当相「何か気に入らないことがあればすぐに経済的威圧をする国への依存はリスク」 [Hitzeschleier★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 【悲報】日本人「俺以外の日本人が中国と戦ってくれるぞ!」 [616817505]
- 中国高官と話す外務省局長の表情、やばい [175344491]
- 中国外務省「日中関係の悪化は高市早苗首相が原因」と名指しで強く非難。キタ━(゚∀゚)━! [153490809]
- 維新の吉村代表「高市総理に中国総領事の国外退去を要請した。今後、知事として中国イベントには出席しない」 [359572271]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 【悲報】あまりにも高市早苗の頭が悪過ぎて「これは確かに野党が配慮して質問するべきだったのでは」と結論が出てしまう [517791167]
