プログラミング言語 Rust 4【ワッチョイ】 (302レス)
1-

1
(1): (ワッチョイ 83b3-KDL3) 2017/12/24(日)18:27 ID:EGydBhQv0(1)調 AAS
Mozilla発のプログラミング言語「Rust」のスレです

■公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

■ワッチョイ
スレ建て時、一行目に
!extend:on:vvvvv:1000:512
を入れること

■派生元スレ
プログラミング言語 Rust 4
2chスレ:tech VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2: (アウアウカー Sac7-FEJ7) 2017/12/24(日)22:11 ID:Ye7s35LEa(1)調 AAS
>>1
3
(3): (ワッチョイ 337f-G8t+) 2017/12/26(火)19:52 ID:2mEdN5M00(1)調 AAS
皆知ってるかもしれないけど、https://github.com/rust-unofficial/too-many-lists は良いね
公式のbookには無かった「自分で書いてみた時にハマる箇所と解決法」が丁寧に書いてあるんで、
特にプログラミング経験者でRust初学者には自信を持ってお勧めできる
4: (ワッチョイ cfe8-V2ES) 2017/12/27(水)07:28 ID:UvJKqKam0(1)調 AAS
>>3
しらんかた
webのやつはみれなくなってるね
5: (ワッチョイ 337f-G8t+) 2017/12/27(水)10:23 ID:TP7XdM/O0(1)調 AAS
製本?したものを上げてるサーバーが結構長いこと落ちてるね
1. cargo install mdbookでmdbookをインストール
2. git cloneで>>3のリポジトリを取ってくる
3. 取ってきたディレクトリでmdbookを実行
4. book/ にhtmlで製本されたものが出力される
ので、是非読んで欲しい。may not live longとかcannot moveとかで怒られまくってる人なら共感しながら読めるはず
6: (ドコグロ MM3f-Ur+I) 2018/01/09(火)09:45 ID:9pH3pf0PM(1)調 AAS
アンチスレのほうが伸びてるやん
枯れ木も山の賑わい
7: (ワッチョイ 9f9f-SaK+) 2018/01/09(火)11:34 ID:mVHM72Ck0(1)調 AAS
>>3
http://cglab.ca/%7Eabeinges/blah/too-many-lists/book/
読めるようになってるな。
8: (ワッチョイ 392d-FSib) 2018/01/12(金)20:30 ID:r1exnGKH0(1/4)調 AAS
教えてください

VecのDisplay::fmtをカスタマイズしたくて
type MyType<T> = (Vec<T>);

impl std::fmt::Display for MyType {

}
9
(3): (ワッチョイ 392d-FSib) 2018/01/12(金)20:43 ID:r1exnGKH0(2/4)調 AAS
申し訳ありません 途中送信してしまいました
コードをplaygroundに移しました

https://play.rust-lang.org/?gist=10bd65d0bfaf8b5117399b18bd8eb0d2

VecのDisplay::fmtをカスタマイズしたくて上の様にMyTypeを作成したのですが
Vecのメソッド委譲するためのコードを手書きする作業が煩雑になって困っています

何か上手い回避策は無いでしょうか?
10
(1): (ワッチョイ 66e8-AMuz) 2018/01/12(金)21:23 ID:B4BnwQ220(1/2)調 AAS
>>9
私も初心者で分からないですが最終的に何がしたいんでしょうか?
11
(1): 9 (ワッチョイ 392d-FSib) 2018/01/12(金)21:44 ID:r1exnGKH0(3/4)調 AAS
>>10
レスどうもです
Vec(他標準 struct)のDisplay::fmt出力をカスタマイズしたいんです 例えば
・要素数が多い場合、最初の数個を出力して残りを省略するとか
・要素の出力が長くなる場合、適当なところで改行するとか
・インデントを受け付けてネストしてる場合は改行とインデントで整形するとか

その上でVecのインターフェースをそのまま使いたいんですが
>>9のように新規の構造体を作る場合 手書きで委譲せねばならず
どうにか上手く出来ないもんかな……と
12
(1): (ワッチョイ 66e8-AMuz) 2018/01/12(金)22:44 ID:B4BnwQ220(2/2)調 AAS
>>11
その用途ならVecに別な名前のメソッドを直接implしちゃってそっち呼び出せばいいような気がしたんですが

println!("{}", v.my_fmt());

みたいに
13
(1): (アークセー Sxbd-YNmt) 2018/01/12(金)23:39 ID:XT/5sCZ8x(1)調 AAS
>>9 https://play.rust-lang.org/?gist=eec6671ba201493eb61891447824b92f&version=stable

DerefとDerefMutを実装するといい。
↓にあるDeref Coarcionっていうコンパイラの機能で、x: MyType<T>に対し、&xが&MyType<T>とも&Vec<T>ともみなしてくれるようになる
https://doc.rust-lang.org/book/second-edition/ch15-02-deref.html#implicit-deref-coercions-with-functions-and-methods

更に追加でIntoとFromも簡単に実装できるから不自由は無くなるはず
14: 9 (ワッチョイ 392d-FSib) 2018/01/12(金)23:49 ID:r1exnGKH0(4/4)調 AAS
>>12
ごもっともです
self.0に委譲するマクロが上手く書けなかった経験があり
それに引きずられて本質を見失ってました
コードを整理していったらいけそうな感じになりました
https://play.rust-lang.org/?gist=960819f1fb1b5f9988a1c58cab2b1b9e&version=stable
ありがとうございます

>>13
ああ、なるほど
Derefは思い至ってませんでした メソッド委譲の解決になりそうで助かります
こちらもありがとうございます
15: (ワッチョイ 66e8-AMuz) 2018/01/13(土)07:02 ID:PvY+igkm0(1/2)調 AAS
なるほど
16
(2): (ワッチョイ 66e8-AMuz) 2018/01/13(土)10:23 ID:PvY+igkm0(2/2)調 AAS
https://stackoverflow.com/questions/45086595/is-it-considered-a-bad-practice-to-implement-deref-for-newtypes

ぐぐったらこんな議論も。
17
(2): (アークセー Sxbd-YNmt) 2018/01/13(土)19:09 ID:zJNsIIn8x(1)調 AAS
>>16の論旨は「MyType<T>は常にVec<T>として扱われても問題ないか?あるならDerefはおすすめしない」だと思うけど、
今回の場合はむしろMyType<T>は特別なことが無い限りVec<T>として使いたいんじゃないの?
18: 9 (ワッチョイ 392d-FSib) 2018/01/13(土)20:15 ID:5hbvxbkG0(1)調 AAS
>>16 読みました
見覚えのあるピンク玉はrust playgroundの中の人でした

「smart_ptrぐらいの同一性がある場合にはDerefが必要だけど
strにDeref<Taget = [u8]>が無いように
Derefだとやりすぎな場合もあるからdelegate構文欲しいよね」
ってなとこでしょうか
strの例は「替わりにas_bytesがあるよ」ということかなと

strとsliceとか他のライブラリを眺めた個人的な結論としては
has_aならAsRef、is_aならBorrowをimplして受ける関数で使い易くしておくのが
Rust的な落とし所なのかなーといった印象です
AsRef, Borrow, Derefの使い分けは宣言的にプログラマの裁量に任されてる感じ

よくよく考えれば自分のコードにもas_xxx, as_xxx_mutが散見されている現状なので
Mytypeにもas_vecを書けばそれでも良かったような気がします

>>17
自分のケースの場合はそもそもMyTypeがいらなくなってしまったもので
Derefはオーバーパワーかなと思ってます
とはいえ smart_ptrのように扱うならDerefが有用ということが
知見として学べたので 大変ありがたかったです
19: (ワッチョイ 66e8-AMuz) 2018/01/14(日)07:18 ID:oPMCDJ2h0(1/2)調 AAS
>>17
このスレを読んでる人に情報共有してるだけだよ
20: (ワッチョイ 66e8-AMuz) 2018/01/14(日)15:21 ID:oPMCDJ2h0(2/2)調 AAS
元スレやばいね
21: (ワッチョイ 0be8-udNJ) 2018/01/18(木)23:48 ID:HIA6V+PM0(1)調 AAS
オライリー届いた。
分厚すぎてわろたわ。読むの大変そう。
22: (ワッチョイ b7eb-URfH) 2018/01/29(月)13:41 ID:P6u1lvxj0(1/2)調 AAS
dyn Traitが入ってしばらくしたらBox<Trait>はdisconになるの?
23: (アウアウカー Sa33-jWYD) 2018/01/29(月)14:45 ID:gyvOdhISa(1/2)調 AAS
deprecated扱いになって警告を出し次のepochで削除とかだったと思う
24: (ワッチョイ b7eb-URfH) 2018/01/29(月)17:30 ID:P6u1lvxj0(2/2)調 AAS
impl Trait入ったらそもそもほとんど使わなくなるから気にしなくていいのか。
25: (アウアウカー Sa33-jWYD) 2018/01/29(月)17:48 ID:gyvOdhISa(2/2)調 AAS
使うケース減るのもそうだけどepochで機能削除する場合はソースコードの変換ツールが提供されるらしい
あと古いepochのソースはそのままコンパイルできるらしいから特に対応不要らしい
だから新しいepochにしか入っていない機能を使いたいcrateとかでなければ何もしなくても困らないはずだし
その場合でも変換ツール通せば簡単に対応できるはず
26: (ワッチョイ aee8-URfH) 2018/01/29(月)21:18 ID:ltX/HOsy0(1)調 AAS
なるほど
27: (アウアウカー Sa33-jWYD) 2018/01/31(水)12:10 ID:/dPh0x6ka(1)調 AAS
2018年のロードマップのRFC出てる
https://github.com/rust-lang/rfcs/pull/2314
impl Traitついに安定化されるのか
28: (ドコグロ MM32-URfH) 2018/01/31(水)19:12 ID:hEoUgsMbM(1)調 AAS
epoch releaseってのはどういうことなんだってばよ?
29: (ワッチョイ 57b3-skLA) 2018/02/04(日)00:05 ID:VmMujkXk0(1)調 AAS
map: BTreeMap<K,V>で、keyが無かったら挿入、あったら格納されてる値vに応じて新しい値new_vに更新するか決めるってやりたいんだけど、
let v = map.entry(key).or_insert(new_v);
if ... {
*v = new_v;
}
よりもっと綺麗な書き方ある?
30: (ワッチョイ 9f9f-hXWc) 2018/02/04(日)01:05 ID:qOX3lZ+s0(1)調 AAS
and_modify() ?
31
(1): (ワッチョイ f72d-MPJM) 2018/02/06(火)16:05 ID:95WYpRcW0(1)調 AAS
https://webassembly.studio/

CやRustでWebAssemblyできるOnlineIDEだそうな
32
(1): (ワッチョイ 1723-pvQ8) 2018/02/07(水)00:06 ID:z0wRGtUY0(1)調 AAS
Rust Never Sleeps: Community Grows, Eclipse-Based IDE Planned
https://adtmag.com/articles/2018/02/01/rust-grows.aspx
33: (ドコグロ MMdf-ytvT) 2018/02/07(水)10:02 ID:tqZIcWxZM(1/2)調 AAS
>>31
ええやん
34: (ドコグロ MMdf-ytvT) 2018/02/07(水)10:05 ID:tqZIcWxZM(2/2)調 AAS
>>32
eclipseはいらんなあ
35: (ワッチョイ ffe8-ytvT) 2018/02/07(水)21:39 ID:HRWlDALX0(1)調 AAS
オライリー本読んだ?
36: (ワッチョイ 2ee8-dBQf) 2018/02/10(土)17:28 ID:EA1ZzrT70(1)調 AAS
wasmってまだプリミティブすぎて使い物にならないのかと思ってたけど wasm-bindgen すげえな
もうここまでできるのか
37: (ワッチョイ 42d2-Q8dp) 2018/02/10(土)18:48 ID:YRtNT72/0(1)調 AAS
Rustすごい!

takahito takabayashiさんのツイート: "ファミコンのエミュレータをRust / WebAssembly で書き直した
https://twitter.com/tatakaba/status/961532612723511296
38: (エムゾネ FF62-W92t) 2018/02/12(月)12:24 ID:4ugd2bUvF(1)調 AAS
梅手伝い
39: (ワッチョイ 457b-Zo0L) 2018/02/12(月)19:13 ID:g6Vhygc80(1/2)調 AAS
苦労して書き直しても全然パフォーマンス上がらないのな…
ぐうの音もでないほど効果があるユースケースってなんなんだ
40: (ワッチョイ 99b3-bLbK) 2018/02/12(月)21:38 ID:tHO1NU6P0(1)調 AAS
アルゴリズムが変わらないならそう変わらんのじゃないか
他人のひどいコードならともかく、同じ人が小規模なプログラムを書き直す程度だと特に

C/C++からRustへ書き直して速度が上がったって話はあんま聞いたことが無い
速いネイティブライブラリを言語に組み込んでるJuliaとかなら、書き直すだけで速度上がったって話はちらほら
pythonだったらnumpy使った方が楽でいいとかも
41: (ワッチョイ 457b-Zo0L) 2018/02/12(月)22:31 ID:g6Vhygc80(2/2)調 AAS
いやだってjavascriptだぜ?アルゴリズムの問題か?
42: (ワッチョイ 429f-hB4z) 2018/02/13(火)11:38 ID:L9OfLhwQ0(1/2)調 AAS
リリースビルドしてないとか
43: (アウアウカー Sa69-JNhP) 2018/02/13(火)13:55 ID:U6RMU7ria(1)調 AAS
結局本スレどこ?
44: (ワッチョイ 429f-hB4z) 2018/02/13(火)14:01 ID:L9OfLhwQ0(2/2)調 AAS
ここ
45
(2): (ワッチョイ 469f-WY3D) 2018/02/14(水)10:32 ID:Sny1AUMZ0(1/2)調 AAS
c++もそうだがコンパイラに機能を詰め込むってのがそもそも筋が悪い
46
(1): (ワッチョイ 2e98-BYkA) 2018/02/14(水)16:35 ID:wToAct7f0(1)調 AAS
>>45
どういうこと?じゃあどうすればいいの?
47: (ワッチョイ e1b3-CEXn) 2018/02/14(水)18:27 ID:KakS2s960(1)調 AAS
asm!だよ
48
(1): (ワッチョイ 469f-WY3D) 2018/02/14(水)19:14 ID:Sny1AUMZ0(2/2)調 AAS
>>46
ライブラリ、もしくはツールに任せる。
49: (ワッチョイ ff98-znvk) 2018/02/15(木)02:06 ID:mcN0VL7z0(1)調 AAS
>>48
やっぱりちょっと分からないな。
RustやC++のどの辺がコンパイラに機能を詰め込んでると思うの?
ライブラリorツールに任せるってのもどの辺を任せたいのかな?
話がザックリし過ぎて言いたいことがよく分からないんだが。
50: (ワントンキン MM7f-yNWa) 2018/02/15(木)14:13 ID:exgu/6oKM(1)調 AAS
プリプロセッサマクロのことかな?あとは型システムとかGCのことかな?ライブラリに任せるの意味がよくわからんが…
51: (スップ Sd3f-swnP) 2018/02/15(木)17:01 ID:OS8rqPvzd(1)調 AAS
C++はコンパイラの方もだけど標準ライブラリでの機能実現も相応に多くて結果ソースの記述が煩雑になっているのは既知の事実でしょう
ライブラリや実装に任せた結果APIの統一が取れなくなって結局細かな仕様策定を余儀なくされたSchemeを見ても銀の弾丸でない事は明らかだよね
それに出来る事を増やすという点においてライブラリは有用だけど変数の不変性や型システムのような制限をする事に関してはコンパイラによしなにしてもらうより他ないよ
52: (ワッチョイ f7e0-T3WU) 2018/02/16(金)01:22 ID:W1XJdyx10(1)調 AAS
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
53: (ワッチョイ ffe8-vS7N) 2018/02/16(金)07:39 ID:455TYoTb0(1)調 AAS
やっとstableでrustfmtできるようになったな
54: (アウアウカー Sa6b-caOl) 2018/02/16(金)11:54 ID:sOKjApWVa(1)調 AAS
どうせ明日にはまたnightly限定になってるよ
55: (ワッチョイ 9f9f-RCVW) 2018/02/16(金)14:44 ID:o2oszjec0(1/2)調 AAS
最近のアップデートつまんねえなあ
56
(1): (ワッチョイ 17eb-moIH) 2018/02/16(金)15:41 ID:xYOe+Cvi0(1)調 AAS
>>45は言語仕様の追加、更新が気に入らないんじゃないかな
try!の代わりに?なんて以ての外だ、みたいな?それ以外に思い付かなかったけど
1.0以前に@や~を削除してライブラリにぶん投げた辺りは希望通りな気がする

基本的に電池入りじゃないRustはライブラリやマクロの代わりの言語仕様の追加じゃなく
より効率的なバイナリを吐くための言語仕様の追加が多いイメージだけどなぁ、impl Traitとか
57: (ワッチョイ ff98-znvk) 2018/02/16(金)17:59 ID:ItA0QsEV0(1)調 AAS
>>56
あー、そういうこと。?記法は確かに若干違和感あったかもな。
でも実際、あれは便利なんだよなぁ。
File::open(path)?.read_to_string(&mut buf)?みたいに繋げられるから。
try!(try!(File::open(path)).read_to_string(&mut buf))は読みづらい。
かといって、
let mut file = try!(File::open(path));
try!(file.read_to_string(&mut buf))
みたいに2行に分けるのも面倒だし、無駄なローカル変数も出来れば避けたい。
結局、あれが妥当な判断だったと思うけど。
まぁ、stableにする必要あったのか?ってところで賛否両論あるかもね。
58: (ワッチョイ 9f9f-RCVW) 2018/02/16(金)19:47 ID:o2oszjec0(2/2)調 AAS
box キーワードは何時 stable になるんだ?
59
(1): (ワッチョイ bf8a-LkcG) 2018/02/17(土)11:13 ID:J1S1NncJ0(1)調 AAS
boxキーワードはどういう時にうれしいのかがわからん
60
(1): (ワッチョイ bf9f-Xz8k) 2018/02/17(土)11:16 ID:kwPbHgTn0(1)調 AAS
明らかに二行に分けた方が読みやすいわけだが。
新しい機能マンセー厨ってそういう感覚の狂いについて無自覚過ぎんだよね。
61: (ワッチョイ ffeb-moIH) 2018/02/17(土)13:27 ID:Nh87YVhF0(1)調 AAS
俺も違和感はあるけど、多くの人が賛意を出して採用されたんだから
>>60や俺の感覚が狂ってるんじゃね?自身の感覚の狂いって当然ながら無自覚過ぎんよ

boxは在り様の総意を取るの面倒だし、目下はBoxで運用できてるしで、いつまでもstableに来なさそう
ヒープを多用したい人には文法にあればありがたいんだろうけど、そもそもヒープが好まれんしのう
62: (ワッチョイ ffe8-vS7N) 2018/02/17(土)14:16 ID:+W6LcK0d0(1)調 AAS
boxっていきなりヒープにメモリ確保されるのが保証されたりするんじゃないの?
今はコンパイラ次第じゃん
63: (ワッチョイ bfe4-Ql/f) 2018/02/17(土)14:41 ID:IpKTSZVJ0(1)調 AAS
ironって今メンテされてないのか
最近のweb FWはrocketの方が人気なんかな
nightly専用だからまだ手を付けてないんだけど
64: (ワッチョイ 9f9f-RCVW) 2018/02/17(土)20:32 ID:QFQHB0DO0(1)調 AAS
>>59
https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/box-syntax-and-patterns.html
> このように書くことでパフォーマンスを犠牲にすることなく、柔軟性を確保することができます。

知らないの?
1-
あと 238 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.021s