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 Part7
http://mevius.5ch.net/test/read.cgi/tech/1563114707/
探検
Rust part8
■ このスレッドは過去ログ倉庫に格納されています
2020/01/24(金) 11:47:52.41ID:9oO1hUHl
765デフォルトの名無しさん
2020/06/10(水) 10:10:31.54ID:XLjKTHkb そもそもdropについて言えば既存の言語でも
free, delete, dispose, finalizeとバラバラなので
浸透もクソもない。
free, delete, dispose, finalizeとバラバラなので
浸透もクソもない。
766デフォルトの名無しさん
2020/06/10(水) 10:24:08.29ID:2ezYpnf+ それぞれの用語の大まかな使い分けはあるけども、
じゃあ drop がそのどれかに当てはまるかといえば当てはまらないし。
じゃあ drop がそのどれかに当てはまるかといえば当てはまらないし。
767デフォルトの名無しさん
2020/06/10(水) 12:27:01.09ID:wKk8b9p0 qiitaの記事数は、Rustに対し、Goが8倍、Kotlinが1.5倍、C++が50倍、Javaが16倍。
唯一、Haskelに対しては、Rustは、100倍以上の記事数がある。
唯一、Haskelに対しては、Rustは、100倍以上の記事数がある。
768デフォルトの名無しさん
2020/06/10(水) 18:15:57.47ID:2ezYpnf+ >>767
それがどしたんや
それがどしたんや
769デフォルトの名無しさん
2020/06/10(水) 18:22:57.35ID:eINpUyJE Haskelは触ったことのある人数で言えばRustよりずっと多いだろうけど、マサカリが怖くて記事書きづらいんだろう
770デフォルトの名無しさん
2020/06/10(水) 23:07:45.91ID:7cbxIbSc まず FireFox 表記をやめろ
771デフォルトの名無しさん
2020/06/11(木) 05:09:15.88ID:LlBqG++A 宣言型マクロでRustの処理書けない理由ってある?
今のパターンマッチ風構文で作ったから処理文入れるところがない的な?
今のパターンマッチ風構文で作ったから処理文入れるところがない的な?
772デフォルトの名無しさん
2020/06/11(木) 14:25:13.16ID:5qmGy9Sy 「Rust」はなぜ人気があるのか、Stack Overflowがユーザーのコメントを紹介
https://www.atmarkit.co.jp/ait/articles/2006/11/news051.html
https://www.atmarkit.co.jp/ait/articles/2006/11/news051.html
773デフォルトの名無しさん
2020/06/11(木) 15:19:33.86ID:EKtCO5aX ガチ関数型と違って難しいポイントはただ複雑なだけなので、頭悪くても慣れさえすればマウンティングしやすいのが人気の理由だと思ってる
774デフォルトの名無しさん
2020/06/11(木) 17:27:55.76ID:Th6rh/3U 「一番愛する言語」と聞かれたら、C++もC#もJSもPythonも全面的に好きで
使ってるわけではないから、消去法でRustを選ぶしかない。
そもそも愛すべき言語なんて一般人にはあるわけ無いし。
Rustだったら「愛すべき」と公表しても馬鹿にされないで済むみたいな。
他のどの言語を選んでも、白い目で見られそうだから。
使ってるわけではないから、消去法でRustを選ぶしかない。
そもそも愛すべき言語なんて一般人にはあるわけ無いし。
Rustだったら「愛すべき」と公表しても馬鹿にされないで済むみたいな。
他のどの言語を選んでも、白い目で見られそうだから。
775587
2020/06/11(木) 17:33:10.59ID:7wv0rqaB ドキュメントを眺めてたら >>587 は Nightly ではこんな感じで書けるかなって思った。
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=75b0cca2f785445e707b113c1bce3b55
https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=75b0cca2f785445e707b113c1bce3b55
776デフォルトの名無しさん
2020/06/11(木) 17:43:19.49ID:VpmD2Oc5 >>774
SOのサーベイのことをいってるなら、あれは別に「愛する言語は何ですか?」というアンケートではないので「愛する」と日本語で考えてもあまり意味ないぞ。
いまRustを使っていて今後も使い続けたいですか?という質問の集計結果をmost loved languageと表現してるだけ。
だから仕事で(嫌々でも)使わざるを得ない言語は低く出るし、Rustみたいに趣味で選んでる言語は高く出るのだろう。
SOのサーベイのことをいってるなら、あれは別に「愛する言語は何ですか?」というアンケートではないので「愛する」と日本語で考えてもあまり意味ないぞ。
いまRustを使っていて今後も使い続けたいですか?という質問の集計結果をmost loved languageと表現してるだけ。
だから仕事で(嫌々でも)使わざるを得ない言語は低く出るし、Rustみたいに趣味で選んでる言語は高く出るのだろう。
777デフォルトの名無しさん
2020/06/11(木) 22:59:22.90ID:Th6rh/3U >>776
Rustを愛すると答えた人でも、 使っている人は5%程度しかいないと書いてあったから、
「いまRustを使っていて今後も使い続けたいですか?という質問の集計結果」
とは違うはずだ。
使って無い人も「好き」と言えた訳だから。
Rustを愛すると答えた人でも、 使っている人は5%程度しかいないと書いてあったから、
「いまRustを使っていて今後も使い続けたいですか?という質問の集計結果」
とは違うはずだ。
使って無い人も「好き」と言えた訳だから。
778デフォルトの名無しさん
2020/06/11(木) 23:08:36.19ID:lDcKCiP3 >>777
ちょっと正確な質問は忘れたけど、
問1 最近よく使う言語はなんですか?
問2 その言語を今後も使い続けたいですか?
みたいな質問で、1でRustと答えた人の86%が2でyesと答えたって話。
(で、その86%ってのが全言語で1位だった)
なので5%の人しか使ってないというのとは別に矛盾しないし、
Rustを使ってない人の意見はそもそも反映されない。
ちょっと正確な質問は忘れたけど、
問1 最近よく使う言語はなんですか?
問2 その言語を今後も使い続けたいですか?
みたいな質問で、1でRustと答えた人の86%が2でyesと答えたって話。
(で、その86%ってのが全言語で1位だった)
なので5%の人しか使ってないというのとは別に矛盾しないし、
Rustを使ってない人の意見はそもそも反映されない。
779デフォルトの名無しさん
2020/06/11(木) 23:14:58.90ID:lDcKCiP3 このあたり元のアンケートに答えた人や
SOのレポートを隅々まで読んだ人なら分かるんだけど
ニュースサイトの伝言ゲームで「最も人気のある言語」とかになってしまうと
ものすごく語弊があるんだよな。
SOのレポートを隅々まで読んだ人なら分かるんだけど
ニュースサイトの伝言ゲームで「最も人気のある言語」とかになってしまうと
ものすごく語弊があるんだよな。
780デフォルトの名無しさん
2020/06/11(木) 23:41:02.95ID:Th6rh/3U781デフォルトの名無しさん
2020/06/11(木) 23:47:20.09ID:lDcKCiP3 >>780
使ってる人が5%というのは合ってて、
その5%のうちの86%が今後も使いたいってこと。
だからRustを好きな人が多いんじゃなくて、好きな人の割合が高いというだけ。
実際に好きな人の絶対数でいけば、ユーザーの多いPythonとかが圧勝だと思う。
使ってる人が5%というのは合ってて、
その5%のうちの86%が今後も使いたいってこと。
だからRustを好きな人が多いんじゃなくて、好きな人の割合が高いというだけ。
実際に好きな人の絶対数でいけば、ユーザーの多いPythonとかが圧勝だと思う。
782デフォルトの名無しさん
2020/06/11(木) 23:51:33.67ID:Th6rh/3U >>781
あなたはもしかして数学苦手ですか?
あなたはもしかして数学苦手ですか?
783デフォルトの名無しさん
2020/06/12(金) 02:00:09.52ID:3QRVSzSK >>775
Default::default() が panic したときに drop で未初期化領域アクセスして UB になりそう
Default::default() が panic したときに drop で未初期化領域アクセスして UB になりそう
785デフォルトの名無しさん
2020/06/12(金) 20:41:45.45ID:3QRVSzSK786デフォルトの名無しさん
2020/06/12(金) 22:06:49.25ID:ROT3upn7 要素がMaybeUninitなので未初期化領域にアクセスすることはないだろうけど、逆に初期化済みの領域が解放されずに残るような?
787587
2020/06/12(金) 22:21:06.94ID:Du26dNpG >>786
panic したときのことなので UB でさえなければメモリが解放されないのは問題にならないと思いますが。
panic したときのことなので UB でさえなければメモリが解放されないのは問題にならないと思いますが。
788デフォルトの名無しさん
2020/06/12(金) 22:37:53.36ID:dTuswZtd copylessっつうcrateがあるからそれ使うか参考にするといいかもよ
789デフォルトの名無しさん
2020/06/13(土) 09:06:43.07ID:4a9xUc1f >>783
Default::default() が panic起こす実装してるからUB以前にそこを直すべきだと思うけど違う?
Default::default() が panic起こす実装してるからUB以前にそこを直すべきだと思うけど違う?
790デフォルトの名無しさん
2020/06/14(日) 08:51:59.74ID:GVwShxqI playgroundで手続きマクロ書きたいんだけど
#![crate_type="proc-macro"]
で出来なくてCargo.tomlも触れないから変更出来ないんだけどどうやっても触れない??
#![crate_type="proc-macro"]
で出来なくてCargo.tomlも触れないから変更出来ないんだけどどうやっても触れない??
791デフォルトの名無しさん
2020/06/16(火) 19:24:13.66ID:BP9MVREP 弱参照を多用する人っていないの?unsafeが基本?
792デフォルトの名無しさん
2020/06/18(木) 05:25:57.31ID:K1rCi1si793デフォルトの名無しさん
2020/06/21(日) 01:44:24.45ID:KswBNjV4 こういうコードを書いててどこを直せばいいかわかんないので教えてーー
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4ce583191e5b07279b8ec65ef5198456
AddAssign の型引数のところに与えてるライフタイムがおかしいとは思うんだけど、
どう直せばいいかわかんない。
この書き方だと += の左辺以上の寿命を右辺が持ってるという意味になるの?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4ce583191e5b07279b8ec65ef5198456
AddAssign の型引数のところに与えてるライフタイムがおかしいとは思うんだけど、
どう直せばいいかわかんない。
この書き方だと += の左辺以上の寿命を右辺が持ってるという意味になるの?
794デフォルトの名無しさん
2020/06/21(日) 20:32:40.47ID:pHqBLLSo あんまり詳しくないけど、ライフタイムのその書き方でエラーなるってバグじゃない?(推論力の問題?)
個人的に気になるから詳しい人教えて欲しいな
一応これで治るけど
impl<T: AddAssign<T> + From<usize> + Clone> Iterator for Fibonacci<T> {
type Item = T;
fn next(&mut self) -> Option<T> {
swap(&mut self.f0, &mut self.f1);
self.f1 += self.f0.clone();
Some(self.f0.clone())
}
}
個人的に気になるから詳しい人教えて欲しいな
一応これで治るけど
impl<T: AddAssign<T> + From<usize> + Clone> Iterator for Fibonacci<T> {
type Item = T;
fn next(&mut self) -> Option<T> {
swap(&mut self.f0, &mut self.f1);
self.f1 += self.f0.clone();
Some(self.f0.clone())
}
}
795793
2020/06/21(日) 21:05:29.71ID:KswBNjV4 デフォルトで usize を基礎に据えているんですが、 BigUint なども効率的に扱いたいので
clone はなるべく少なくしたいという意図で参照で受け取る AddAssign を前提にしたいんですよね……。
clone はなるべく少なくしたいという意図で参照で受け取る AddAssign を前提にしたいんですよね……。
796デフォルトの名無しさん
2020/06/21(日) 22:00:26.97ID:T8Yrab8u >>793
これでどう?
impl<T> Iterator for Fibonacci<T>
where
T: From<usize> + Clone,
T: for<'a> AddAssign<&'a T>
これでどう?
impl<T> Iterator for Fibonacci<T>
where
T: From<usize> + Clone,
T: for<'a> AddAssign<&'a T>
797793
2020/06/21(日) 22:48:41.52ID:KswBNjV4 >>796
期待通り動きました!
for の使い方について調べたところこのへんにあるのを見つけたのですが、
どうにもはっきりとは理解できてないです。
https://doc.rust-lang.org/nomicon/hrtb.html
AddAssign が必要とされる個別の場面まで寿命の推測を遅らせるみたいな感じですかね?
期待通り動きました!
for の使い方について調べたところこのへんにあるのを見つけたのですが、
どうにもはっきりとは理解できてないです。
https://doc.rust-lang.org/nomicon/hrtb.html
AddAssign が必要とされる個別の場面まで寿命の推測を遅らせるみたいな感じですかね?
799793
2020/06/22(月) 00:26:04.06ID:H8+bL0cM なんか見覚えある気がすると思って考えてたんだけど、
Haskell の forall と似てるんだな。
>>793 だと Fibonacci<T> の T の制約として解釈されてしまうから、
'a は Fibonacci<T> と同じ寿命ってことになっちゃうわけか。
Haskell の forall と似てるんだな。
>>793 だと Fibonacci<T> の T の制約として解釈されてしまうから、
'a は Fibonacci<T> と同じ寿命ってことになっちゃうわけか。
800デフォルトの名無しさん
2020/06/23(火) 23:09:33.48ID:ImTRmBX4 あるフォルダーに入っているファイルをWeb経由で見れるようにしたいのだがそういったことができるクレートあったりしますか?
現在Actix+teraで実装しようと考えていますがなかなかうまくいかないので・・・
現在Actix+teraで実装しようと考えていますがなかなかうまくいかないので・・・
801デフォルトの名無しさん
2020/06/24(水) 02:24:42.93ID:ak6DHXg2 python3 -m http.server 8000
802デフォルトの名無しさん
2020/06/24(水) 03:07:05.31ID:tDxYjRXk actix-webとactix-filesではだめなの
803デフォルトの名無しさん
2020/06/24(水) 03:37:50.70ID:rM4tv+8j Ruby なら、コマンドプロンプト・PowerShell から、1-liner で、
Rubyで作られた遅いウェブサーバー、WEBrick が起動する
ruby -run -e httpd . -p 8080
そのフォルダに、index.html があれば、これでブラウザからアクセスできる
http://localhost:8080
Rubyで作られた遅いウェブサーバー、WEBrick が起動する
ruby -run -e httpd . -p 8080
そのフォルダに、index.html があれば、これでブラウザからアクセスできる
http://localhost:8080
804デフォルトの名無しさん
2020/06/24(水) 10:36:40.30ID:l/oN1z1j >>803
rustのスレまで出張ってくるなよジジイ
rustのスレまで出張ってくるなよジジイ
805デフォルトの名無しさん
2020/06/24(水) 12:04:47.26ID:4T6/LA8J なぜrustでactix+tera を使いたいのか
学習目的?
学習目的?
806デフォルトの名無しさん
2020/06/24(水) 13:42:57.67ID:zkd3Aeky そういや、actixの作者がやる気なくしてた問題は解決したの?
807デフォルトの名無しさん
2020/06/24(水) 14:34:48.81ID:rnWT6W+j あの「とほほのWWW入門」に「Rust」と「Go言語」の入門コンテンツ追加へ【やじうまWatch】 - INTERNET Watch
https://internet.watch.impress.co.jp/docs/yajiuma/1260986.html
このサイトまだあったんだな
https://internet.watch.impress.co.jp/docs/yajiuma/1260986.html
このサイトまだあったんだな
808デフォルトの名無しさん
2020/06/24(水) 19:37:44.39ID:hh4NKeEg809デフォルトの名無しさん
2020/06/25(木) 18:06:43.52ID:8MiElZj2 warpがおすすめ
810デフォルトの名無しさん
2020/06/26(金) 04:24:36.46ID:rzSuBmAQ この前作ったツールではrouilleを使った
CLIツールにおまけのWeb UIを付けるため
シンプルで良かった
CLIツールにおまけのWeb UIを付けるため
シンプルで良かった
811デフォルトの名無しさん
2020/06/29(月) 22:50:20.59ID:1itP0QVJ アプリケーションの設定を管理するようなライブラリで変更時に知らせてくれるような機能があるのってgioクレートのSettings以外になんかありませんか?
812デフォルトの名無しさん
2020/06/30(火) 15:14:43.19ID:oMNW4x3G const fn b(s: &'static str) -> usize {
s.len()
}
fn a(s: &'static str) -> usize {
b(s)
}
a("c");
const fn のこの例ってこの下に置き換えられる?
それともaがconstじゃないから置き換わらない?
fn a(s: &'static str) -> usize {
1
}
s.len()
}
fn a(s: &'static str) -> usize {
b(s)
}
a("c");
const fn のこの例ってこの下に置き換えられる?
それともaがconstじゃないから置き換わらない?
fn a(s: &'static str) -> usize {
1
}
813デフォルトの名無しさん
2020/06/30(火) 17:20:04.74ID:SQ1ey2jp814デフォルトの名無しさん
2020/06/30(火) 20:47:08.92ID:oMNW4x3G >>813
じゃあハッシュテーブルとかのキー定数とかもコンパイル時にハッシュになってるの?
じゃあハッシュテーブルとかのキー定数とかもコンパイル時にハッシュになってるの?
815デフォルトの名無しさん
2020/07/01(水) 01:46:25.16ID:0X9xkDpt ハッシュ値の生成に乱数使ってるからコンパイル時には決定できないはず
const fn な hasher が仮に存在するならハッシュ値まで生成されるかもしれなち
const fn な hasher が仮に存在するならハッシュ値まで生成されるかもしれなち
816デフォルトの名無しさん
2020/07/01(水) 01:50:31.70ID:lPEzgDRr >>815
乱数使ったらハッシュにならんだろ…
乱数使ったらハッシュにならんだろ…
817はちみつ餃子 ◆8X2XSCHEME
2020/07/01(水) 02:44:47.36ID:GH5MkCrA818デフォルトの名無しさん
2020/07/01(水) 09:56:23.65ID:QVn8MqAi 普通に、はなくね?
素数のマジックナンバーと比較してデメリットしかない
汎用性が下がる
コードが煩雑になる
テーブルサイズの整数倍になって効率低下する確率が上がる
素数のマジックナンバーと比較してデメリットしかない
汎用性が下がる
コードが煩雑になる
テーブルサイズの整数倍になって効率低下する確率が上がる
819デフォルトの名無しさん
2020/07/01(水) 10:24:41.03ID:dg6nNgDG >>817
>ハッシュテーブルの寿命の間は一貫した値を使うけど。
キーの値から、ハッシュ値を計算する際、乱数を使っていて、
一貫した値をどうやって取得するの。
// pszKey = キーの0終端文字列
// 戻り値 = キーに対応した Hash値
DWORD CalcHash( const char *pszKey )
{
DWORD hash;
・・・
hash += 乱数; // こんな風にして、どうやって一貫性を確保する??
・・・
return hash;
}
>ハッシュテーブルの寿命の間は一貫した値を使うけど。
キーの値から、ハッシュ値を計算する際、乱数を使っていて、
一貫した値をどうやって取得するの。
// pszKey = キーの0終端文字列
// 戻り値 = キーに対応した Hash値
DWORD CalcHash( const char *pszKey )
{
DWORD hash;
・・・
hash += 乱数; // こんな風にして、どうやって一貫性を確保する??
・・・
return hash;
}
820デフォルトの名無しさん
2020/07/01(水) 10:30:07.77ID:0X9xkDpt hasherの初期化に乱数使う
ハッシュ値の生成のされ方が決定的だと
ユーザーが悪意のある入力列を与えることでハッシュ値の衝突を起こしてシステム負荷を高めるような攻撃ができちゃうのよ
それを避けるために多くの処理系では hasher の初期化に乱数を使ってハッシュ値の生成のされ方を予測しにくいようにしている
ハッシュ値の生成のされ方が決定的だと
ユーザーが悪意のある入力列を与えることでハッシュ値の衝突を起こしてシステム負荷を高めるような攻撃ができちゃうのよ
それを避けるために多くの処理系では hasher の初期化に乱数を使ってハッシュ値の生成のされ方を予測しにくいようにしている
821デフォルトの名無しさん
2020/07/01(水) 10:31:35.11ID:0X9xkDpt 乱数使うのは hasher の初期化だけで、
その後のハッシュ値計算は当然乱数は使わない
その後のハッシュ値計算は当然乱数は使わない
822デフォルトの名無しさん
2020/07/01(水) 10:34:05.17ID:v1S9dNm/ なるほど
823デフォルトの名無しさん
2020/07/01(水) 13:21:11.84ID:gL8G43CT >>820
正直すまんかった
正直すまんかった
824デフォルトの名無しさん
2020/07/01(水) 20:39:53.77ID:LmVeoJWH システム負荷を高めるような攻撃を回避するのって初期化に乱数使うとかじゃなくて、ハッシュテーブルの実装次第じゃね?
システム再起動の時に乱数で変わってたら保存してるハッシュと違くなるって整合性ぐちゃぐちゃすぎる
ちなみにRustは初期化に乱数使ってないけどどの言語がそれに当たるの?
悪いけどホラ吹いてるようにしてみえない
システム再起動の時に乱数で変わってたら保存してるハッシュと違くなるって整合性ぐちゃぐちゃすぎる
ちなみにRustは初期化に乱数使ってないけどどの言語がそれに当たるの?
悪いけどホラ吹いてるようにしてみえない
825デフォルトの名無しさん
2020/07/01(水) 21:21:04.78ID:V2OaFanu ソルト
826デフォルトの名無しさん
2020/07/01(水) 21:27:38.74ID:JqIYLyXt >>824
By default, HashMap uses a hashing algorithm selected to provide resistance against HashDoS attacks. The algorithm is randomly seeded and …
https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html
By default, HashMap uses a hashing algorithm selected to provide resistance against HashDoS attacks. The algorithm is randomly seeded and …
https://doc.rust-lang.org/std/collections/hash_map/struct.HashMap.html
827デフォルトの名無しさん
2020/07/01(水) 21:35:15.59ID:JRtBzTKp ハッシュの生成はアルゴリズムに対して決定的なんだからハッシャーがどうのなんて馬鹿げてる
828デフォルトの名無しさん
2020/07/02(木) 00:00:35.12ID:53deMRLD Result<T,E> を要素とするイテレータを Result<Vec<T>,E> にしたくて、
よくありそうなパターンだと思うんだけどさらっと上手くやる方法ってないもんかな?
よくありそうなパターンだと思うんだけどさらっと上手くやる方法ってないもんかな?
829デフォルトの名無しさん
2020/07/02(木) 00:03:26.32ID:/WjV7J8q >>828
collectがいい感じにやってくれるよ。
collectがいい感じにやってくれるよ。
830デフォルトの名無しさん
2020/07/02(木) 01:46:12.20ID:T8l/o3UF collect::<Result<Vec<_>, _>>()
831デフォルトの名無しさん
2020/07/02(木) 10:10:47.16ID:O6Sxhm4J 毎回乱数使ってるなら画面更新するたびにハッシュ変わるはずだよね?
https://play.rust-lang.org/?code=%23!%5Ballow(unused)%5D%0Afn%20main()%20%7B%0Ause%20std%3A%3Acollections%3A%3Ahash_map%3A%3ADefaultHasher%3B%0Ause%20std%3A%3Ahash%3A%3AHasher%3B%0A%0Alet%20mut%20hasher%20%3D%20DefaultHasher%3A%3Anew()%3B%0Alet%20data%20%3D%20%5B0x01%2C%200x23%2C%200x45%2C%200x67%2C%200x89%2C%200xab%2C%200xcd%2C%200xef%5D%3B%0A%0Ahasher.write(%26data)%3B%0A%0Aprintln!(%22Hash%20is%20%7B%3Ax%7D!%22%2C%20hasher.finish())%3B%0A%7D&edition=2018
変わらないよ?
https://play.rust-lang.org/?code=%23!%5Ballow(unused)%5D%0Afn%20main()%20%7B%0Ause%20std%3A%3Acollections%3A%3Ahash_map%3A%3ADefaultHasher%3B%0Ause%20std%3A%3Ahash%3A%3AHasher%3B%0A%0Alet%20mut%20hasher%20%3D%20DefaultHasher%3A%3Anew()%3B%0Alet%20data%20%3D%20%5B0x01%2C%200x23%2C%200x45%2C%200x67%2C%200x89%2C%200xab%2C%200xcd%2C%200xef%5D%3B%0A%0Ahasher.write(%26data)%3B%0A%0Aprintln!(%22Hash%20is%20%7B%3Ax%7D!%22%2C%20hasher.finish())%3B%0A%7D&edition=2018
変わらないよ?
832デフォルトの名無しさん
2020/07/02(木) 10:42:54.83ID:NJoiTLER >>831
HashMapと同じことをしたいなら、RandomStateからbuild_hasherでhasherを得ればよい。別に画面更新しなくてもRUN押す度に変わるよ。
HashMapと同じことをしたいなら、RandomStateからbuild_hasherでhasherを得ればよい。別に画面更新しなくてもRUN押す度に変わるよ。
833デフォルトの名無しさん
2020/07/02(木) 10:47:40.50ID:NJoiTLER ちなみにDefaultHasher::newで変わらないのは、単に内部的にSipHasher13::new_with_keys(0,0)を呼んでるから。
RandomStateがその0,0をランダムに変えている。
RandomStateがその0,0をランダムに変えている。
834デフォルトの名無しさん
2020/07/02(木) 12:36:00.56ID:2uT/XA4a Hash値の計算そのものも、本当はかなり速度が求められるものなので、それを
自在に変えるというのはどうやっているのか興味が有る。
Hash値そのものの計算は、遅いわけではないが、それでも膨大なデータを処理する
場合には、その問題になることがある。
自在に変えるというのはどうやっているのか興味が有る。
Hash値そのものの計算は、遅いわけではないが、それでも膨大なデータを処理する
場合には、その問題になることがある。
835デフォルトの名無しさん
2020/07/02(木) 14:34:38.77ID:O6Sxhm4J SipHasher13::new_with_keys(0,0)はソルト?シード?
836デフォルトの名無しさん
2020/07/02(木) 18:18:58.79ID:53deMRLD837デフォルトの名無しさん
2020/07/02(木) 20:30:51.40ID:Smy47/2H collect() があれば何でも出来る
838デフォルトの名無しさん
2020/07/02(木) 21:18:08.94ID:16GApxSC839デフォルトの名無しさん
2020/07/02(木) 22:08:07.26ID:Er9yjZwy collectが中でやってる事って std::convert::from か?
840デフォルトの名無しさん
2020/07/03(金) 01:32:48.51ID:A3vf6ary >>839
FromIterator::from_iter呼んでる
From呼ばれるかどうかはFromIteratorの実相次第だけど
普通はIterator::Itemがそのままコレクションのデータ型になるから呼ばれないと思う
FromIterator::from_iter呼んでる
From呼ばれるかどうかはFromIteratorの実相次第だけど
普通はIterator::Itemがそのままコレクションのデータ型になるから呼ばれないと思う
841デフォルトの名無しさん
2020/07/04(土) 01:28:15.59ID:MbDjr1Zt これがコンパイルエラーになる(sum::<i64>()としないといけない)のってなんでですか?
let s: i64 = (0i64..10).sum() + 10i64;
推論できる材料は十分に見えるんですけども
ちなみにこれなら通ります
let s: i64 = (0..10).sum();
let s: i64 = (0i64..10).sum() + 10i64;
推論できる材料は十分に見えるんですけども
ちなみにこれなら通ります
let s: i64 = (0..10).sum();
842デフォルトの名無しさん
2020/07/04(土) 07:36:29.64ID:mye4TJ7/ rangeはusizeだから
843デフォルトの名無しさん
2020/07/04(土) 15:11:36.89ID:O/jhkl6h >>841
ここに理由書いてるけど、詳しくはわからん
At the moment, we always refuse to guess the "self" type, so we just stop there.
For other type parameters, if Self is known, we will sometimes infer them based on Self
https://github.com/rust-lang/rust/issues/25094#issuecomment-304079316
ここに理由書いてるけど、詳しくはわからん
At the moment, we always refuse to guess the "self" type, so we just stop there.
For other type parameters, if Self is known, we will sometimes infer them based on Self
https://github.com/rust-lang/rust/issues/25094#issuecomment-304079316
844デフォルトの名無しさん
2020/07/04(土) 22:58:43.94ID:6lRd4tzg845デフォルトの名無しさん
2020/07/05(日) 01:30:45.53ID:SD7XkwQZ 今までターボフィッシュで型指定しなくても動いてたものが
新しいimpl追加によって型指定がないと動かなくなるケースがあるというのは理解できる
ただ(0i64..10).sum()のケースはiter::Iterator::sumやiter::Sumの定義から
各要素がi64だと決まってる限り新しいimplが追加されても結果の型もi64にしかならないと思うんだよね
//iter::Iterator::sum
fn sum<S>(self) -> S where Self: Sized, S: Sum<Self::Item>
{
Sum::sum(self)
}
//iter::Sum
pub trait Sum<A = Self>: Sized {
fn sum<I: Iterator<Item = A>>(iter: I) -> Self;
}
新しいimpl追加によって型指定がないと動かなくなるケースがあるというのは理解できる
ただ(0i64..10).sum()のケースはiter::Iterator::sumやiter::Sumの定義から
各要素がi64だと決まってる限り新しいimplが追加されても結果の型もi64にしかならないと思うんだよね
//iter::Iterator::sum
fn sum<S>(self) -> S where Self: Sized, S: Sum<Self::Item>
{
Sum::sum(self)
}
//iter::Sum
pub trait Sum<A = Self>: Sized {
fn sum<I: Iterator<Item = A>>(iter: I) -> Self;
}
846デフォルトの名無しさん
2020/07/05(日) 23:04:09.03ID:HzchPVMd >>845
まず、
1) inference type(推論された型)と宣言時や実行時の型は別なんで、実行時の型はあくまで推論された型の外延でしかない。
すると、別の型互換のルール(たとえば、部分多相とか)がないと互換の型とみなせない。
2) 公開された部分を推論すると将来の変更で1)から互換性を失う場合がある。
最近型推論導入した言語が公開関数のシグネチャ等を推論しないのはこの問題が理由だと思う。
>ただ(0i64..10).sum()のケースはiter::Iterator::sumやiter::Sumの定義から
>各要素がi64だと決まってる限り新しいimplが追加されても結果の型もi64にしかならないと思うんだよね
これは単にメソッド呼び出しの生成規則: expr0 ". " expr2 [Turbofish] "()" のexpr0から推論しないルールが既にあるからできないだけじゃないの?
これを拡張すると2)から互換性を失う可能性がある。公開された型と関数のシグネチャに依存してるんで。
まず、
1) inference type(推論された型)と宣言時や実行時の型は別なんで、実行時の型はあくまで推論された型の外延でしかない。
すると、別の型互換のルール(たとえば、部分多相とか)がないと互換の型とみなせない。
2) 公開された部分を推論すると将来の変更で1)から互換性を失う場合がある。
最近型推論導入した言語が公開関数のシグネチャ等を推論しないのはこの問題が理由だと思う。
>ただ(0i64..10).sum()のケースはiter::Iterator::sumやiter::Sumの定義から
>各要素がi64だと決まってる限り新しいimplが追加されても結果の型もi64にしかならないと思うんだよね
これは単にメソッド呼び出しの生成規則: expr0 ". " expr2 [Turbofish] "()" のexpr0から推論しないルールが既にあるからできないだけじゃないの?
これを拡張すると2)から互換性を失う可能性がある。公開された型と関数のシグネチャに依存してるんで。
847デフォルトの名無しさん
2020/07/06(月) 00:48:42.43ID:v1x+2Pdq ぶぶんたそー
まれいたそー
まれいたそー
848デフォルトの名無しさん
2020/07/09(木) 06:01:23.92ID:OnQC9Em2 Rustの構文を自分でPython風にしてるんだけど、このwhereのとこの構文がどうも末尾:と相性悪くてどうしたら綺麗になるか教えて欲しい。
問題点
* Self: Sizedの型指定の:と被る(引数の型はかっこに埋まってるからいい)
* 一行目の関数宣言の:があるのに二行目でもwhere使うために:がある(二行続くのは英文法的にもおかしい)
* whereの構文ルールが曖昧(改行入れたりできる) -> だから統一したい
fn sum<S>(self) -> S:
where Self: Sized, S: Sum<Self::Item>:
Sum::sum(self)
問題点
* Self: Sizedの型指定の:と被る(引数の型はかっこに埋まってるからいい)
* 一行目の関数宣言の:があるのに二行目でもwhere使うために:がある(二行続くのは英文法的にもおかしい)
* whereの構文ルールが曖昧(改行入れたりできる) -> だから統一したい
fn sum<S>(self) -> S:
where Self: Sized, S: Sum<Self::Item>:
Sum::sum(self)
849デフォルトの名無しさん
2020/07/09(木) 19:57:31.40ID:/c0BYhMm Rust にトランスパイルされる Python 風構文の言語を作っているということかな?
fn sum<S>(self) -> S
where Self(Sized), S(Sum<Self::Item>):
Sum::sum(self)
こんな感じで class の継承っぽく書くのはいかが
fn sum<S>(self) -> S
where Self(Sized), S(Sum<Self::Item>):
Sum::sum(self)
こんな感じで class の継承っぽく書くのはいかが
850デフォルトの名無しさん
2020/07/09(木) 20:52:03.73ID:OnQC9Em2 そう、そういう言語作ってる最中。
たしかにその構文もいいね!でもstruct S(i32);に見た目上だけど被るのと、トレイトのfn name<T: Num>とかも構文変える必要でてくるなぁ
個人的にはトレイトベースの言語だからT: Numは変えたくないだよね
こういうのもいいかも
fn sum<S>(self) -> S,
(Self: Sized, S: Sum<Self::Item>):
whereと同じような機能でしっくりくる構文持ってる他言語とかないのかなぁ
たしかにその構文もいいね!でもstruct S(i32);に見た目上だけど被るのと、トレイトのfn name<T: Num>とかも構文変える必要でてくるなぁ
個人的にはトレイトベースの言語だからT: Numは変えたくないだよね
こういうのもいいかも
fn sum<S>(self) -> S,
(Self: Sized, S: Sum<Self::Item>):
whereと同じような機能でしっくりくる構文持ってる他言語とかないのかなぁ
851デフォルトの名無しさん
2020/07/11(土) 09:57:59.11ID:4UmqnUG/ Haskell 風にするとかどうよ
852デフォルトの名無しさん
2020/07/11(土) 19:10:01.60ID:F8ozXmMr Winrtよく知らないんだけどWindows環境でGUI簡単にいじれるようになったの?
853デフォルトの名無しさん
2020/07/11(土) 19:28:45.72ID:9BHbJ5O9 どうせマクロ地獄だろ
854デフォルトの名無しさん
2020/07/14(火) 15:40:35.77ID:GDMj7Uve let delta = input[0] - input[1];
println!("{}{}", if delta == 0 { "" } else if delta > 0 { "-" } else { "+" }, delta.abs());
このif delta == 0 { "" } else if delta > 0 { "-" } else { "+" }の綺麗な順番とかの定石の書き方ってある?
println!("{}{}", if delta == 0 { "" } else if delta > 0 { "-" } else { "+" }, delta.abs());
このif delta == 0 { "" } else if delta > 0 { "-" } else { "+" }の綺麗な順番とかの定石の書き方ってある?
855デフォルトの名無しさん
2020/07/14(火) 16:21:46.36ID:0FZUPBc1 match delta.cmp(&0) {
std::cmp::Ordering::Equal => "",
std::cmp::Ordering::Greater => "-",
std::cmp::Ordering::Less => "+",
}
std::cmp::Ordering::Equal => "",
std::cmp::Ordering::Greater => "-",
std::cmp::Ordering::Less => "+",
}
856デフォルトの名無しさん
2020/07/14(火) 18:24:58.52ID:Ott4Q6kl n == 0の時だけ記号なしにしてそれ以外は{:+}でフォーマット
(n > 0の時だけ{:+}にするのでも結果は同じ)
(n > 0の時だけ{:+}にするのでも結果は同じ)
858デフォルトの名無しさん
2020/07/15(水) 17:09:04.17ID:xmMpR3Y8 msvcとgnuってどっちにすべきなん?
859デフォルトの名無しさん
2020/07/15(水) 20:29:35.32ID:hr2ndtrb 両方有るってことはどっちにでも出来るってこった。
どちらかが良いなんてことはない。
どちらかが良いなんてことはない。
860デフォルトの名無しさん
2020/07/15(水) 21:20:40.13ID:a3wypoik rustコンパイルできないけどな
861デフォルトの名無しさん
2020/07/16(木) 01:35:03.21ID:ky3/glay 以下のコードでクロージャclの引数に型推論が効かないのってなんでですか?
fn main() {
let vv = vec![vec![1, 2, 3]; 4];
let cl = |a, b, c, d| vv[a][b] + vv[c][d];
//error[E0282]: type annotations needed
println!("{}", cl(3usize, 1usize, 2usize, 2usize))
}
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a49b194930fcdfd894c2be4fc078be80
クロージャclの引数のところを |a: usize, b, c: usize, d| とすればコンパイルは通るのですが、aとcだけ型注釈が必要になるのも意味がわからないです
fn main() {
let vv = vec![vec![1, 2, 3]; 4];
let cl = |a, b, c, d| vv[a][b] + vv[c][d];
//error[E0282]: type annotations needed
println!("{}", cl(3usize, 1usize, 2usize, 2usize))
}
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=a49b194930fcdfd894c2be4fc078be80
クロージャclの引数のところを |a: usize, b, c: usize, d| とすればコンパイルは通るのですが、aとcだけ型注釈が必要になるのも意味がわからないです
862デフォルトの名無しさん
2020/07/16(木) 23:09:40.63ID:NQlI+enB jsonをパースして、その中身に対して更に値を追加し
最後にはまたjsonでシリアライズということをやりたいのですが、
serdeだと事前に入力と出力の型を定義していないと難しいですか?
from_stringでValue型に入れて、mapのようにキー名で値を取れることは分かったのですが
そこに新たに値を追加する方法がわからないです
最後にはまたjsonでシリアライズということをやりたいのですが、
serdeだと事前に入力と出力の型を定義していないと難しいですか?
from_stringでValue型に入れて、mapのようにキー名で値を取れることは分かったのですが
そこに新たに値を追加する方法がわからないです
863デフォルトの名無しさん
2020/07/16(木) 23:23:19.49ID:iYXNZZst as_object_mut
あたりかな
あたりかな
864デフォルトの名無しさん
2020/07/17(金) 00:05:43.64ID:wlvhc7i8■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】 中国国営新聞社 「日本はすでに代価を支払った」 中国SNSで1位に 高市総理の発言めぐり [お断り★]
- 【相撲】大の里が千秋楽を休場 [9999★]
- 高市首相、G20初日に18人と会話しメローニ氏と抱き合う 中国首相と接触実現せず 一瞬目が合ったような場面も [ぐれ★]
- 中国国連大使「日本が中国に武力行使すると脅しをかけたのは初めて」 国連事務総長に書簡★7 [♪♪♪★]
- 【公園】「タコ山」「箱型ブランコ」の次はジャングルジム? 姿消す“公園遊具” [煮卵★]
- 【芸能】「普通のホテルが12万て…どうなってんの」 嵐のラストツアー、幕開けの札幌で早くもホテル高騰 ファンから相次ぐ悲鳴 [冬月記者★]
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap601
- 他サポ 2025-262
- 東京競馬5回4日目3
- 京都競馬4回6日目エリザベス女王杯★4
- こいせん 全レス転載禁止
- 競輪実況★1606
- 【実況】博衣こよりのえちえちゼルダの伝説 ムジュラの仮面🧪 ★3
- 高市早苗、G20遅刻、夕食会欠席 🦎「アタシ絶ッッッ対中国に謝らないから!😡」 [165981677]
- 三谷幸喜「高市早苗ってシンメトリーなんです、字が」 [309323212]
- 金ほしすぎて発狂してる
- 中国「高市はすでに代価を支払った」急に弱腰になる [931948549]
- 【画像】嘘ぺこでしょ… [974680522]
