Rust Part7

■ このスレッドは過去ログ倉庫に格納されています
2019/07/14(日) 23:31:47.54ID:PySyhRf9
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 Part6
http://mevius.5ch.net/test/read.cgi/tech/1532714678/
230デフォルトの名無しさん
垢版 |
2019/09/02(月) 22:48:02.88ID:+zTucd5y
なるほど
Derefが必要ない場合は直接書いちゃえばいけるのか
ありがとうございます
2019/09/02(月) 23:19:28.73ID:IDvyRsTF
>>229
curry化と部分束縛が欲しくなる
232デフォルトの名無しさん
垢版 |
2019/09/02(月) 23:39:57.31ID:c28qQK2V
え、こんな短いコードで?
2019/09/03(火) 00:05:15.13ID:i5o7yZzz
なんでもかんでもメソッドチェーンにしないで適当なところで束縛した方がRustのコードは読みやすくなる
2019/09/03(火) 00:26:49.25ID:vCzpmz3O
それはあるな。シャドーイングできるから変数名に悩まないし、
単に長くなったところで再束縛すればいい。
2019/09/03(火) 11:07:53.94ID:CeNKL5mb
界隈の潮流では「部分的なc++化」というものがあり、Javaですらジェネリクス/テンプレートを取り入れた
rustもそうなる
2019/09/03(火) 12:43:41.50ID:JzHlK+VD
あれ?もうあるもんかと思ってた
237デフォルトの名無しさん
垢版 |
2019/09/03(火) 16:01:22.65ID:BrE32zWk
ジェネリクスはあるよね
2019/09/03(火) 16:30:08.77ID:9SeNEnhh
関数型言語で優雅にやってたことを
マクロの延長みたいな形で泥臭く実装するのがC++化
2019/09/03(火) 18:15:35.61ID:sT1C29Io
そもそもC++化の潮流なんてあるか?
各言語それぞれ取り入れあってるとは思うが。
2019/09/03(火) 18:21:34.78ID:kwJMCUaG
仕様がごちゃごちゃすることをC++化と呼んでるだけでしょ
2019/09/03(火) 19:54:14.07ID:66Dg9oep
ランタイム速度は落ちない?じゃいれるべ。
がc++の潮流
2019/09/03(火) 22:37:59.52ID:++bLAvti
いや、javaのジェネリックスとC++のテンプレートの区別が付かないやつの言うことがそもそもおかしい。
パラメタ多相とメタプログラミングは別もんだぞ。むしろ最近のテンプレートがパラメタ多相に寄ってきたんだろ。
243デフォルトの名無しさん
垢版 |
2019/09/03(火) 22:50:06.30ID:BrE32zWk
なんだか難しい言葉がいっぱいあるんだね
rustのが簡単でいいや
2019/09/03(火) 22:52:35.24ID:k5ZNWOhV
Rustむずい😭
2019/09/04(水) 07:28:03.17ID:YY7F2+PA
Rustは難しくないよ
ただコンパイラがいけずなだけ
2019/09/04(水) 08:42:51.41ID:PFx+vIBX
>>242
こういう輩が一番何もわかってないタイプ。
そりゃとりあえず違う言う解けば違うところは一つくらいは見つかるだろうよ。
どこが違ってどこが同じか話さずに用語を使ってけんかにしかならん。
少なくともこれくらいの説明は必要。
https://qiita.com/matarillo/items/4870bb974f7a1900ef7c
2019/09/04(水) 11:39:08.73ID:IWibi2Vo
>>246
結局人の文章引用してる()
2019/09/04(水) 11:39:12.24ID:IWibi2Vo
>>246
結局人の文章引用してる()
2019/09/04(水) 11:53:42.64ID:2WEW3nlz
本人の可能性
2019/09/04(水) 12:02:33.30ID:rDpqFBPU
俺は一流のエンジニアだぞ
なんてったって毎日Qiitaを見てるし足りてない知識はQiitaで検索して補ってる
2019/09/04(水) 13:07:39.19ID:OPoewtpz
そんなもんちょっと調べりゃすぐわかるのに
252デフォルトの名無しさん
垢版 |
2019/09/04(水) 18:49:08.58ID:U5+bjz/t
俺はなんとか多相なんて調べない
どうでもいいし
253デフォルトの名無しさん
垢版 |
2019/09/04(水) 19:02:15.65ID:2Txd6K3L
こないだ秋葉原で「まれいたそーまれいたそー」ってうつむきながら呟いてた黒髪ロン毛のデブがいたんだけど、
この「マレイ多相」とは何ですか?
2019/09/04(水) 19:57:18.15ID:IIaKpyB5
???「黙れ多相!」
2019/09/04(水) 21:12:03.63ID:QzZNrHDq
m array 多相といってモナディックな扱いの配列における多相性である(民明書房「世界の多相」より)
2019/09/05(木) 00:15:36.96ID:QWLCfgVe
袖すり合うも多相の縁
257デフォルトの名無しさん
垢版 |
2019/09/05(木) 00:56:25.25ID:FxCb5fYw
では中世においてしばしば見られた介錯い多相とは?
2019/09/05(木) 08:01:29.13ID:3AoluiiY
結局誰も理解してないっていうw
2019/09/05(木) 09:14:01.74ID:z5gxm4PC
パラメタ多相とテンプレートを並べるのはおかしい
多相は性質
2019/09/05(木) 09:14:42.45ID:Y6QHjuf9
じゃあ >>242 に言及するけどC++のテンプレートも本来はパラメトリック多相としての役割を元々は期待して導入された
パラメトリック多相は >>246 のリンクでもあるように元々の型記述に追加パラメータとなるトークンを渡す事で多相性、誤解を恐れずに言えば型の制約を緩くして記述量を減らすものである
よって多相性によって単一の記述から複数の型に対する実装の様に見えるものを生成できる

この単一の記述から複数の実装を生成できるというのが本質的にメタプログラミング的で、C++のテンプレートはそのレイヤーがハードウェアに近いが故にコンパイル時に展開される事
また再帰が可能である事と幽霊型のような型を作れる事とSFINAEに加えて非型テンプレートパラメタにより複数の実装を生成するメタプログラミング的な運用が特別目立った

これのコンパイルエラーの煩雑さや理解の難しさからC++以降のパラメトリック多相用言語機能は敢えてメタプログラミングがしにくいようにRustでは非型パラメタは与えられなかったり(そうする提案も現在あるが)
多相性の側面を強調して利便性を上げるために部分型や構造的部分型(これまた >>246 のサブタイピング多相の一種で、同等のメソッド(関数)やフィールドがある場合にそれらを派生型と見做す)の記述構文を導入したりしている
最後の型パラメタに対する部分型記述に関してはC++もConceptとして導入するとのことだがそれはまた別の話だろう

長文失礼
2019/09/05(木) 13:08:36.58ID:aevPv9ig
https://doc.rust-lang.org/std/pin/index.html
このページのExample: self-referential structの構造体Unmovableのフィールドslice: NonNull<String>を、
Stringの実装してるトレイトのトレイトオブジェクト(slice: NoneNull<Box<Display>> みたいに)とすることって出来ないでしょうか
2019/09/05(木) 18:33:11.32ID:FLvFWYrW
>>260
Rust の const generics はすでに提案段階を過ぎてて短期的目標に入ってるゾ
2019/09/05(木) 21:06:15.78ID:Y6QHjuf9
>>262
これは失礼、間違った情報を語ってしまった
指摘ありがとう
2019/09/05(木) 21:34:25.18ID:B6sVqyux
Python歴半年(=プログラミング歴)とかの人がいきなりRustに手を出すのって無謀でしょうか?
2019/09/05(木) 22:31:27.10ID:O7Dd9aK6
いいんじゃないの
ただなんでわざわざこんな事すんだよやりずれぇわ死ね
と思う回数が経験積んだ人より増えそうだけど
2019/09/05(木) 23:11:49.08ID:KiRcB+KC
それはすらいね
2019/09/06(金) 19:19:12.72ID:d+J9jL2b
いろんな言語やったあげくC++に不満がある人にとっての解がRust
この両方を満たしていない人にとってはピンとこねえのがRust
2019/09/06(金) 19:40:53.97ID:1QpLZiiB
メモリをぶっ壊して涙目になったことがある人向け
2019/09/06(金) 23:45:30.10ID:f24aCaox
謎のメモリリークで徹夜するハメになった人向け

俺か
2019/09/07(土) 02:53:55.86ID:VkB2thai
メモリぶっ壊して(物理)涙目
2019/09/07(土) 10:51:27.79ID:rn3Y4CEm
Rust使うよりメモリモジュール買い換えた方が良くない?
2019/09/07(土) 20:04:48.19ID:KiJcQcmB
rustは安全に開発できるというのは本当か??何故バッファエラーは起きた?

https://jvndb.jvn.jp/ja/contents/2019/JVNDB-2019-008825.html
JVNDB-2019-008825
Rust 用 slice-deque crate におけるバッファエラーの脆弱性
2019/09/07(土) 20:58:29.50ID:6BNVy7tp
(´-`).。oO(なんでだろう?)
2019/09/07(土) 22:06:13.68ID:914xKiQ0
crates.ioでunsafe何ヶ所使ってるか表示して欲しいわ
2019/09/07(土) 22:19:57.54ID:fv/Y0QyY
そしてunsafeがモナドで包まれるように…
2019/09/08(日) 00:03:54.78ID:KXmQOAwm
スライスみたいなことをしようとしたら本質的にはどうにもならんだろ。
安全性か効率化か結局選ぶことになる。
2019/09/08(日) 01:39:50.98ID:D+CIKcq7
モナドって、、もすかすてRustってHaskell並に面倒なん?
2019/09/08(日) 09:53:10.07ID:46Wp6heU
21世紀の現代では何を作っても一週間程度で複雑さはMAXに達する
プログラミング言語のRustでもそれは同じ
2019/09/09(月) 09:56:40.65ID:950wQDvR
let mut v = vec!["zero".to_string(), "one".to_string()];
v[0] = v[1];

これがダメなのも対処も、まあわかるようになったのですが
error[E0507]: cannot move out of index of `std::vec::Vec<std::string::String>`
というエラーメッセージがわかりません
どういう流れでこのメッセージが出るのでしょうか
2019/09/09(月) 10:08:00.36ID:elDbcwTD
>>279
StringがCopy traitを実装してないからコピーできない
2019/09/09(月) 10:16:14.57ID:950wQDvR
いやそれはわかる
エラーメッセージの意味がわからない
どこがどうだからこのメッセージになるのか具体的に理解したい
2019/09/09(月) 10:51:58.70ID:950wQDvR
なんというかメッセージのindexがよくわからない感じ
メッセージを日本語にするとどうなるんでしょう
2019/09/09(月) 11:06:00.37ID:elDbcwTD
>>281
逆に考えて v[1] をまんまとムーブ出来たら、その跡地はどうなるの?
2019/09/09(月) 11:12:50.90ID:01u4b8kP
out of indexっていうけど、index内なんじゃないの?って疑問じゃないの?

俺はわからない
2019/09/09(月) 11:16:35.82ID:8pEaV4bB
out of indexではなくてmove out ofで出ていくって意味。
move out of borrowed contentとかと同じ。
2019/09/09(月) 11:17:42.46ID:950wQDvR
なんか move out of 〜で引っ越すとか出ていくという意味があるらしいんだけど
それでも index がよくわからなくて悩んでます
2019/09/09(月) 11:32:45.67ID:8pEaV4bB
indexは[]演算子を提供してるIndexトレイトのindexメソッドかな。
2019/09/09(月) 11:39:50.47ID:xIOozne9
v[0]使うからindexの意味がややこしいんでは
let x = v[1]; でも同じエラーになるのを見たら、indexアクセス経由で値をmoveする(=引き剥がす)のはまかりならんと分かる
でコピーできるなら値が残るので問題にならない
289デフォルトの名無しさん
垢版 |
2019/09/09(月) 11:43:51.77ID:950wQDvR
Vec<String>のindex (メソッドの戻り値) はmoveできない
と言ってるわけね。理解した。ありがとう。
2019/09/09(月) 11:45:42.52ID:950wQDvR
ん? こっちかも。
Vec<String>のindex (メソッドの) 戻り値はmoveできない
2019/09/09(月) 11:46:37.64ID:xIOozne9
279 と 284 別人だった。ゴメン
2019/09/09(月) 11:47:06.05ID:+2RtkJJ5
……エラーメッセージの検討と解釈が必要なところまで真似なくてもいいのに
2019/09/09(月) 11:53:41.02ID:elDbcwTD
Trait std::ops::Index

container[index] is actually syntactic sugar for *container.index(index), but only when used as an immutable value. If a mutable value is requested, IndexMut is used instead.
This allows nice things such as let value = v[index] if the type of value implements Copy.
2019/09/09(月) 12:50:41.27ID:950wQDvR
まず move out of を一塊にして、index は添え字と考えてわけがわからなく・・・。
out of index を indexの戻り値 とはまったく思いつきませんでした。
わかってしまうともう他の読み方はできません。
最初から日本語に訳して欲しいとお願いすべきだったかも。
お騒がせしました。
2019/09/09(月) 18:32:42.49ID:SJyzIZeS
rustの日本語ブック、ドキュメントはかなり前からプルリクがマージされてないから期待薄いかも
2019/09/10(火) 19:31:44.26ID:q6JhvtCo
>>295
どこのリポジトリの話?
297デフォルトの名無しさん
垢版 |
2019/09/12(木) 10:55:58.45ID:LoRkJG5F
思い付きなんだけど
Box を &!、 Rc を &# で書けるシンタックスシュガーがあったらどうだろう
Box<T>を&!Tと書いたり、Rc::new(data)を&#dataと書けたりしたら?
298デフォルトの名無しさん
垢版 |
2019/09/12(木) 12:01:05.66ID:oxTdK/zC
プログラマがコストを払うことに罪悪感を抱くようにあえて冗長にしてるんじゃなかったかな
2019/09/12(木) 12:42:23.02ID:nmIq/oGm
ゴルファーは来んな
2019/09/12(木) 13:22:56.79ID:+G4RGhf3
そういう記法実装するような思想の言語なら真っ先に mut が簡略化されてると思う
2019/09/12(木) 18:15:04.09ID:Meniefv0
環境毎のクレートのバージョン違いでコンパイル通らないようなことがないようにバージョン指定させるくせにコンパイラのバージョン違いのせいでコンパイル通らないとかクソ過ぎひん?
302デフォルトの名無しさん
垢版 |
2019/09/12(木) 18:20:44.52ID:oxTdK/zC
rust-toolchainを作りなされ
2019/09/12(木) 19:29:03.99ID:hoEtlcNn
無知な煽りカスにまで親切に教えてくれてありがとうおかげで無事通った(`;ω;´)
2019/09/12(木) 21:04:34.30ID:jNKjrGpq
オレオレ糖衣構文が欲しければ一対一変換するトランスパイラでも書けばいいだろ
2019/09/13(金) 00:04:32.53ID:hO7OHJyv
昔は Box が ~ で Rc が @ だった
2019/09/13(金) 00:19:06.54ID:17Jpcv+R
俺は逆にlifetimeパラメータ省略をやめるべきだと思ってる。
2019/09/13(金) 09:11:20.49ID:ccyj1bAE
ちゃんと勉強しようと思ったらオライリー本を読むべき?
308デフォルトの名無しさん
垢版 |
2019/09/13(金) 09:57:21.64ID:LrhujYjR
日本の場合オライリー本買ったら原著はマニングだった、なんてことも。
2019/09/13(金) 14:13:51.27ID:ohNILJsT
公式リファレンスで良いやん
2019/09/13(金) 14:57:59.88ID:R+lGpgh7
俺は物理本の方がやるぞという気になるから買った
2019/09/13(金) 15:01:06.58ID:8tLP3I45
test.rs:
fn main() {
println!("{}", "hoge");
}
でコンパイル出来るのに、rust/src/libcore/num/dec2flt/algorithm.rsの関数内にprintln!を書いても
error: cannot find macro `println!` in this scope
となるのは何でなん?
コンパイル出来る用に教えてください
ちなみに、rustc自体はちゃんとコンパイル出来てtest.rsのビルドと実行は出来てます
2019/09/13(金) 15:13:08.13ID:8tLP3I45
use std;
use std::io;
と先頭に追加しても
error[E0432]: unresolved import `std`
と言われる…
stdすら簡単に使わせてくれないとか恐ろしく敷居が高い言語なのは分かったけど、>>311のprintln!だけは何とか動かしたいので、
よろしくお願いしますm(_ _)m
2019/09/13(金) 16:13:13.40ID:FZa6ZvSI
釣れますか?
2019/09/13(金) 16:22:57.80ID:8tLP3I45
>>313
何が?
完全にRust初心者なんだからしょうがない
多分外部ファイルに依存してるだろう事は何となく分かってきたけど、まだ解決には至らず
2019/09/13(金) 17:00:45.98ID:ucGTEY8O
正直釣りにしか見えないが…。
なぜ初心者がいきなりcoreライブラリいじろうとしてるの?
あとcoreはmallocとかもない環境で動く必要があるから
とてもprintlnなんて無理だと思うけど。
2019/09/14(土) 18:11:14.79ID:vJ0EfuKq
 (V)     (V)
  ヽ∧∧∧ 丿
┌<┌ ゚ ∀ ゚>┐ ラスタシアーン!!
2019/09/14(土) 18:17:32.07ID:wDFkwEGw
https://www.atmarkit.co.jp/ait/spv/1909/13/news133.html
318デフォルトの名無しさん
垢版 |
2019/09/15(日) 00:25:56.87ID:84ndTw+e
ヌルポチェック境界チェックしてたら遅くなるに決まってるやん
Cはそんなことしなくて済むから爆速な訳で
2019/09/15(日) 11:32:00.80ID:iFCAy1qK
絶対にめくれないからパンツいらないスカートで
アスレチックでもスカイダイビングだもなんでもするのがCだわな
2019/09/15(日) 11:37:40.55ID:Ms2MnLBB
素晴らしい例えだ
感動した
321デフォルトの名無しさん
垢版 |
2019/09/15(日) 12:03:39.49ID:IVfbaIvY
いいねw
2019/09/15(日) 12:40:15.54ID:RmuGhz/Y
そして落っこちて死ぬと
http://peaceman.jugem.jp/?eid=2290
2019/09/15(日) 12:41:41.15ID:p6YweuI4
何だこのストレートに脳天に突き刺さる説明!?
324デフォルトの名無しさん
垢版 |
2019/09/15(日) 14:06:50.28ID:JVfSd4XU
風呂でもセックスでもパンツ脱がないのがRustだわな
325デフォルトの名無しさん
垢版 |
2019/09/15(日) 14:41:05.29ID:CYqvBFjr
スカートも不要なのがC
2019/09/15(日) 15:51:33.74ID:+SG+NzSN
デバッガー「見えたぁ!!!」
2019/09/15(日) 17:00:20.75ID:kg331Dv1
パンツ履かないC言語
鉄壁のパンツRust
328デフォルトの名無しさん
垢版 |
2019/09/15(日) 22:55:46.82ID:IVfbaIvY
Rustはむしろ貞操帯
2019/09/16(月) 01:53:49.38ID:6Bt41uEu
Rust勉強し始めたんだけど、公式ドキュメント読み終わったら何しよう
■ このスレッドは過去ログ倉庫に格納されています