X



Rust Part7

■ このスレッドは過去ログ倉庫に格納されています
0250デフォルトの名無しさん
垢版 |
2019/09/04(水) 12:02:33.30ID:rDpqFBPU
俺は一流のエンジニアだぞ
なんてったって毎日Qiitaを見てるし足りてない知識はQiitaで検索して補ってる
0252デフォルトの名無しさん
垢版 |
2019/09/04(水) 18:49:08.58ID:U5+bjz/t
俺はなんとか多相なんて調べない
どうでもいいし
0253デフォルトの名無しさん
垢版 |
2019/09/04(水) 19:02:15.65ID:2Txd6K3L
こないだ秋葉原で「まれいたそーまれいたそー」ってうつむきながら呟いてた黒髪ロン毛のデブがいたんだけど、
この「マレイ多相」とは何ですか?
0255デフォルトの名無しさん
垢版 |
2019/09/04(水) 21:12:03.63ID:QzZNrHDq
m array 多相といってモナディックな扱いの配列における多相性である(民明書房「世界の多相」より)
0257デフォルトの名無しさん
垢版 |
2019/09/05(木) 00:56:25.25ID:FxCb5fYw
では中世においてしばしば見られた介錯い多相とは?
0260デフォルトの名無しさん
垢版 |
2019/09/05(木) 09:14:42.45ID:Y6QHjuf9
じゃあ >>242 に言及するけどC++のテンプレートも本来はパラメトリック多相としての役割を元々は期待して導入された
パラメトリック多相は >>246 のリンクでもあるように元々の型記述に追加パラメータとなるトークンを渡す事で多相性、誤解を恐れずに言えば型の制約を緩くして記述量を減らすものである
よって多相性によって単一の記述から複数の型に対する実装の様に見えるものを生成できる

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

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

長文失礼
0261デフォルトの名無しさん
垢版 |
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>> みたいに)とすることって出来ないでしょうか
0264デフォルトの名無しさん
垢版 |
2019/09/05(木) 21:34:25.18ID:B6sVqyux
Python歴半年(=プログラミング歴)とかの人がいきなりRustに手を出すのって無謀でしょうか?
0265デフォルトの名無しさん
垢版 |
2019/09/05(木) 22:31:27.10ID:O7Dd9aK6
いいんじゃないの
ただなんでわざわざこんな事すんだよやりずれぇわ死ね
と思う回数が経験積んだ人より増えそうだけど
0267デフォルトの名無しさん
垢版 |
2019/09/06(金) 19:19:12.72ID:d+J9jL2b
いろんな言語やったあげくC++に不満がある人にとっての解がRust
この両方を満たしていない人にとってはピンとこねえのがRust
0276デフォルトの名無しさん
垢版 |
2019/09/08(日) 00:03:54.78ID:KXmQOAwm
スライスみたいなことをしようとしたら本質的にはどうにもならんだろ。
安全性か効率化か結局選ぶことになる。
0278デフォルトの名無しさん
垢版 |
2019/09/08(日) 09:53:10.07ID:46Wp6heU
21世紀の現代では何を作っても一週間程度で複雑さはMAXに達する
プログラミング言語のRustでもそれは同じ
0279デフォルトの名無しさん
垢版 |
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>`
というエラーメッセージがわかりません
どういう流れでこのメッセージが出るのでしょうか
0281デフォルトの名無しさん
垢版 |
2019/09/09(月) 10:16:14.57ID:950wQDvR
いやそれはわかる
エラーメッセージの意味がわからない
どこがどうだからこのメッセージになるのか具体的に理解したい
0282デフォルトの名無しさん
垢版 |
2019/09/09(月) 10:51:58.70ID:950wQDvR
なんというかメッセージのindexがよくわからない感じ
メッセージを日本語にするとどうなるんでしょう
0284デフォルトの名無しさん
垢版 |
2019/09/09(月) 11:12:50.90ID:01u4b8kP
out of indexっていうけど、index内なんじゃないの?って疑問じゃないの?

俺はわからない
0285デフォルトの名無しさん
垢版 |
2019/09/09(月) 11:16:35.82ID:8pEaV4bB
out of indexではなくてmove out ofで出ていくって意味。
move out of borrowed contentとかと同じ。
0286デフォルトの名無しさん
垢版 |
2019/09/09(月) 11:17:42.46ID:950wQDvR
なんか move out of 〜で引っ越すとか出ていくという意味があるらしいんだけど
それでも index がよくわからなくて悩んでます
0288デフォルトの名無しさん
垢版 |
2019/09/09(月) 11:39:50.47ID:xIOozne9
v[0]使うからindexの意味がややこしいんでは
let x = v[1]; でも同じエラーになるのを見たら、indexアクセス経由で値をmoveする(=引き剥がす)のはまかりならんと分かる
でコピーできるなら値が残るので問題にならない
0289デフォルトの名無しさん
垢版 |
2019/09/09(月) 11:43:51.77ID:950wQDvR
Vec<String>のindex (メソッドの戻り値) はmoveできない
と言ってるわけね。理解した。ありがとう。
0292デフォルトの名無しさん
垢版 |
2019/09/09(月) 11:47:06.05ID:+2RtkJJ5
……エラーメッセージの検討と解釈が必要なところまで真似なくてもいいのに
0293デフォルトの名無しさん
垢版 |
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.
0294デフォルトの名無しさん
垢版 |
2019/09/09(月) 12:50:41.27ID:950wQDvR
まず move out of を一塊にして、index は添え字と考えてわけがわからなく・・・。
out of index を indexの戻り値 とはまったく思いつきませんでした。
わかってしまうともう他の読み方はできません。
最初から日本語に訳して欲しいとお願いすべきだったかも。
お騒がせしました。
0295デフォルトの名無しさん
垢版 |
2019/09/09(月) 18:32:42.49ID:SJyzIZeS
rustの日本語ブック、ドキュメントはかなり前からプルリクがマージされてないから期待薄いかも
0297デフォルトの名無しさん
垢版 |
2019/09/12(木) 10:55:58.45ID:LoRkJG5F
思い付きなんだけど
Box を &!、 Rc を &# で書けるシンタックスシュガーがあったらどうだろう
Box<T>を&!Tと書いたり、Rc::new(data)を&#dataと書けたりしたら?
0298デフォルトの名無しさん
垢版 |
2019/09/12(木) 12:01:05.66ID:oxTdK/zC
プログラマがコストを払うことに罪悪感を抱くようにあえて冗長にしてるんじゃなかったかな
0300デフォルトの名無しさん
垢版 |
2019/09/12(木) 13:22:56.79ID:+G4RGhf3
そういう記法実装するような思想の言語なら真っ先に mut が簡略化されてると思う
0301デフォルトの名無しさん
垢版 |
2019/09/12(木) 18:15:04.09ID:Meniefv0
環境毎のクレートのバージョン違いでコンパイル通らないようなことがないようにバージョン指定させるくせにコンパイラのバージョン違いのせいでコンパイル通らないとかクソ過ぎひん?
0302デフォルトの名無しさん
垢版 |
2019/09/12(木) 18:20:44.52ID:oxTdK/zC
rust-toolchainを作りなされ
0303デフォルトの名無しさん
垢版 |
2019/09/12(木) 19:29:03.99ID:hoEtlcNn
無知な煽りカスにまで親切に教えてくれてありがとうおかげで無事通った(`;ω;´)
0304デフォルトの名無しさん
垢版 |
2019/09/12(木) 21:04:34.30ID:jNKjrGpq
オレオレ糖衣構文が欲しければ一対一変換するトランスパイラでも書けばいいだろ
0308デフォルトの名無しさん
垢版 |
2019/09/13(金) 09:57:21.64ID:LrhujYjR
日本の場合オライリー本買ったら原著はマニングだった、なんてことも。
0311デフォルトの名無しさん
垢版 |
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のビルドと実行は出来てます
0312デフォルトの名無しさん
垢版 |
2019/09/13(金) 15:13:08.13ID:8tLP3I45
use std;
use std::io;
と先頭に追加しても
error[E0432]: unresolved import `std`
と言われる…
stdすら簡単に使わせてくれないとか恐ろしく敷居が高い言語なのは分かったけど、>>311のprintln!だけは何とか動かしたいので、
よろしくお願いしますm(_ _)m
0314デフォルトの名無しさん
垢版 |
2019/09/13(金) 16:22:57.80ID:8tLP3I45
>>313
何が?
完全にRust初心者なんだからしょうがない
多分外部ファイルに依存してるだろう事は何となく分かってきたけど、まだ解決には至らず
0315デフォルトの名無しさん
垢版 |
2019/09/13(金) 17:00:45.98ID:ucGTEY8O
正直釣りにしか見えないが…。
なぜ初心者がいきなりcoreライブラリいじろうとしてるの?
あとcoreはmallocとかもない環境で動く必要があるから
とてもprintlnなんて無理だと思うけど。
0318デフォルトの名無しさん
垢版 |
2019/09/15(日) 00:25:56.87ID:84ndTw+e
ヌルポチェック境界チェックしてたら遅くなるに決まってるやん
Cはそんなことしなくて済むから爆速な訳で
0319デフォルトの名無しさん
垢版 |
2019/09/15(日) 11:32:00.80ID:iFCAy1qK
絶対にめくれないからパンツいらないスカートで
アスレチックでもスカイダイビングだもなんでもするのがCだわな
0321デフォルトの名無しさん
垢版 |
2019/09/15(日) 12:03:39.49ID:IVfbaIvY
いいねw
0324デフォルトの名無しさん
垢版 |
2019/09/15(日) 14:06:50.28ID:JVfSd4XU
風呂でもセックスでもパンツ脱がないのがRustだわな
0325デフォルトの名無しさん
垢版 |
2019/09/15(日) 14:41:05.29ID:CYqvBFjr
スカートも不要なのがC
0328デフォルトの名無しさん
垢版 |
2019/09/15(日) 22:55:46.82ID:IVfbaIvY
Rustはむしろ貞操帯
0331デフォルトの名無しさん
垢版 |
2019/09/16(月) 08:18:42.11ID:jUyoTXTl
何をするにも貞操帯外したり付けたりガチャガチャして複雑になるんだよなあ
0333デフォルトの名無しさん
垢版 |
2019/09/16(月) 08:38:49.73ID:5uT5V90s
そんなふうに考えていた時期が俺にもありました
でも今はderef coercionでハッピーな毎日です
0335デフォルトの名無しさん
垢版 |
2019/09/17(火) 08:51:01.90ID:/BOEHyZy
Tのままでチェックするからこうなるんでu32にしてチェックしていいならそうする
TもCopy + Into<u32>でトレイト拘束するだけですむ
0338デフォルトの名無しさん
垢版 |
2019/09/18(水) 00:07:56.14ID:H2DpgLxy
数年後、Rustの世間的な評価はマクロが濫用されてるからクソ
になってる気がする
0339デフォルトの名無しさん
垢版 |
2019/09/18(水) 08:28:44.98ID:no1kSscq
そりゃ言語拡張性からいったらマクロは最強だよ。
そんなことは30前にlispが示してる。
0342デフォルトの名無しさん
垢版 |
2019/09/18(水) 10:47:59.35ID:pbP4krHb
✗ Rustのマクロが汎用されているからクソ
○ プリプロセッサで単純に置換する不健全なマクロを汎用するからクソ
Rustはまだましなほう
0343デフォルトの名無しさん
垢版 |
2019/09/18(水) 11:34:11.09ID:RM25JK7K
ライブラリで定義するのはいいがプロジェクト内ではレビューの時に面倒だからなるべく書きたくないな
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況