Rust Part7
■ このスレッドは過去ログ倉庫に格納されています
>>242
こういう輩が一番何もわかってないタイプ。
そりゃとりあえず違う言う解けば違うところは一つくらいは見つかるだろうよ。
どこが違ってどこが同じか話さずに用語を使ってけんかにしかならん。
少なくともこれくらいの説明は必要。
https://qiita.com/matarillo/items/4870bb974f7a1900ef7c 俺は一流のエンジニアだぞ
なんてったって毎日Qiitaを見てるし足りてない知識はQiitaで検索して補ってる こないだ秋葉原で「まれいたそーまれいたそー」ってうつむきながら呟いてた黒髪ロン毛のデブがいたんだけど、
この「マレイ多相」とは何ですか? m array 多相といってモナディックな扱いの配列における多相性である(民明書房「世界の多相」より) パラメタ多相とテンプレートを並べるのはおかしい
多相は性質 じゃあ >>242 に言及するけどC++のテンプレートも本来はパラメトリック多相としての役割を元々は期待して導入された
パラメトリック多相は >>246 のリンクでもあるように元々の型記述に追加パラメータとなるトークンを渡す事で多相性、誤解を恐れずに言えば型の制約を緩くして記述量を減らすものである
よって多相性によって単一の記述から複数の型に対する実装の様に見えるものを生成できる
この単一の記述から複数の実装を生成できるというのが本質的にメタプログラミング的で、C++のテンプレートはそのレイヤーがハードウェアに近いが故にコンパイル時に展開される事
また再帰が可能である事と幽霊型のような型を作れる事とSFINAEに加えて非型テンプレートパラメタにより複数の実装を生成するメタプログラミング的な運用が特別目立った
これのコンパイルエラーの煩雑さや理解の難しさからC++以降のパラメトリック多相用言語機能は敢えてメタプログラミングがしにくいようにRustでは非型パラメタは与えられなかったり(そうする提案も現在あるが)
多相性の側面を強調して利便性を上げるために部分型や構造的部分型(これまた >>246 のサブタイピング多相の一種で、同等のメソッド(関数)やフィールドがある場合にそれらを派生型と見做す)の記述構文を導入したりしている
最後の型パラメタに対する部分型記述に関してはC++もConceptとして導入するとのことだがそれはまた別の話だろう
長文失礼 https://doc.rust-lang.org/std/pin/index.html
このページのExample: self-referential structの構造体Unmovableのフィールドslice: NonNull<String>を、
Stringの実装してるトレイトのトレイトオブジェクト(slice: NoneNull<Box<Display>> みたいに)とすることって出来ないでしょうか >>260
Rust の const generics はすでに提案段階を過ぎてて短期的目標に入ってるゾ >>262
これは失礼、間違った情報を語ってしまった
指摘ありがとう Python歴半年(=プログラミング歴)とかの人がいきなりRustに手を出すのって無謀でしょうか? いいんじゃないの
ただなんでわざわざこんな事すんだよやりずれぇわ死ね
と思う回数が経験積んだ人より増えそうだけど いろんな言語やったあげくC++に不満がある人にとっての解がRust
この両方を満たしていない人にとってはピンとこねえのがRust 謎のメモリリークで徹夜するハメになった人向け
俺か Rust使うよりメモリモジュール買い換えた方が良くない? rustは安全に開発できるというのは本当か??何故バッファエラーは起きた?
https://jvndb.jvn.jp/ja/contents/2019/JVNDB-2019-008825.html
JVNDB-2019-008825
Rust 用 slice-deque crate におけるバッファエラーの脆弱性 crates.ioでunsafe何ヶ所使ってるか表示して欲しいわ スライスみたいなことをしようとしたら本質的にはどうにもならんだろ。
安全性か効率化か結局選ぶことになる。 モナドって、、もすかすてRustってHaskell並に面倒なん? 21世紀の現代では何を作っても一週間程度で複雑さはMAXに達する
プログラミング言語のRustでもそれは同じ 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>`
というエラーメッセージがわかりません
どういう流れでこのメッセージが出るのでしょうか >>279
StringがCopy traitを実装してないからコピーできない いやそれはわかる
エラーメッセージの意味がわからない
どこがどうだからこのメッセージになるのか具体的に理解したい なんというかメッセージのindexがよくわからない感じ
メッセージを日本語にするとどうなるんでしょう >>281
逆に考えて v[1] をまんまとムーブ出来たら、その跡地はどうなるの? out of indexっていうけど、index内なんじゃないの?って疑問じゃないの?
俺はわからない out of indexではなくてmove out ofで出ていくって意味。
move out of borrowed contentとかと同じ。 なんか move out of 〜で引っ越すとか出ていくという意味があるらしいんだけど
それでも index がよくわからなくて悩んでます indexは[]演算子を提供してるIndexトレイトのindexメソッドかな。 v[0]使うからindexの意味がややこしいんでは
let x = v[1]; でも同じエラーになるのを見たら、indexアクセス経由で値をmoveする(=引き剥がす)のはまかりならんと分かる
でコピーできるなら値が残るので問題にならない Vec<String>のindex (メソッドの戻り値) はmoveできない
と言ってるわけね。理解した。ありがとう。 ん? こっちかも。
Vec<String>のindex (メソッドの) 戻り値はmoveできない ……エラーメッセージの検討と解釈が必要なところまで真似なくてもいいのに 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. まず move out of を一塊にして、index は添え字と考えてわけがわからなく・・・。
out of index を indexの戻り値 とはまったく思いつきませんでした。
わかってしまうともう他の読み方はできません。
最初から日本語に訳して欲しいとお願いすべきだったかも。
お騒がせしました。 rustの日本語ブック、ドキュメントはかなり前からプルリクがマージされてないから期待薄いかも 思い付きなんだけど
Box を &!、 Rc を &# で書けるシンタックスシュガーがあったらどうだろう
Box<T>を&!Tと書いたり、Rc::new(data)を&#dataと書けたりしたら? プログラマがコストを払うことに罪悪感を抱くようにあえて冗長にしてるんじゃなかったかな そういう記法実装するような思想の言語なら真っ先に mut が簡略化されてると思う 環境毎のクレートのバージョン違いでコンパイル通らないようなことがないようにバージョン指定させるくせにコンパイラのバージョン違いのせいでコンパイル通らないとかクソ過ぎひん? 無知な煽りカスにまで親切に教えてくれてありがとうおかげで無事通った(`;ω;´) オレオレ糖衣構文が欲しければ一対一変換するトランスパイラでも書けばいいだろ 俺は逆にlifetimeパラメータ省略をやめるべきだと思ってる。 ちゃんと勉強しようと思ったらオライリー本を読むべき? 日本の場合オライリー本買ったら原著はマニングだった、なんてことも。 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のビルドと実行は出来てます use std;
use std::io;
と先頭に追加しても
error[E0432]: unresolved import `std`
と言われる…
stdすら簡単に使わせてくれないとか恐ろしく敷居が高い言語なのは分かったけど、>>311のprintln!だけは何とか動かしたいので、
よろしくお願いしますm(_ _)m >>313
何が?
完全にRust初心者なんだからしょうがない
多分外部ファイルに依存してるだろう事は何となく分かってきたけど、まだ解決には至らず 正直釣りにしか見えないが…。
なぜ初心者がいきなりcoreライブラリいじろうとしてるの?
あとcoreはmallocとかもない環境で動く必要があるから
とてもprintlnなんて無理だと思うけど。 (V) (V)
ヽ∧∧∧ 丿
┌<┌ ゚ ∀ ゚>┐ ラスタシアーン!! ヌルポチェック境界チェックしてたら遅くなるに決まってるやん
Cはそんなことしなくて済むから爆速な訳で 絶対にめくれないからパンツいらないスカートで
アスレチックでもスカイダイビングだもなんでもするのがCだわな 風呂でもセックスでもパンツ脱がないのがRustだわな Rust勉強し始めたんだけど、公式ドキュメント読み終わったら何しよう 何をするにも貞操帯外したり付けたりガチャガチャして複雑になるんだよなあ そんなふうに考えていた時期が俺にもありました
でも今はderef coercionでハッピーな毎日です Tのままでチェックするからこうなるんでu32にしてチェックしていいならそうする
TもCopy + Into<u32>でトレイト拘束するだけですむ 単にv1.0相当のコードをマクロで生成するのでいい気がするが。 数年後、Rustの世間的な評価はマクロが濫用されてるからクソ
になってる気がする そりゃ言語拡張性からいったらマクロは最強だよ。
そんなことは30前にlispが示してる。 ✗ Rustのマクロが汎用されているからクソ
○ プリプロセッサで単純に置換する不健全なマクロを汎用するからクソ
Rustはまだましなほう ライブラリで定義するのはいいがプロジェクト内ではレビューの時に面倒だからなるべく書きたくないな 頻出パターンならマクロになってる方がレビューしやすい Cのマクロと違って見た目からマクロであることが明らかだし害は少ない ■ このスレッドは過去ログ倉庫に格納されています