プログラミング言語 Rust 4【ワッチョイ】

1デフォルトの名無しさん (ワッチョイ 83b3-KDL3)2017/12/24(日) 18:27:01.98ID:EGydBhQv0
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
https://mevius.5ch.net/test/read.cgi/tech/1507970294/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured

189 (ワッチョイ 392d-FSib)2018/01/13(土) 20:15:02.44ID:5hbvxbkG0
>>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:07.14ID:oPMCDJ2h0
>>17
このスレを読んでる人に情報共有してるだけだよ

20デフォルトの名無しさん (ワッチョイ 66e8-AMuz)2018/01/14(日) 15:21:10.36ID:oPMCDJ2h0
元スレやばいね

21デフォルトの名無しさん (ワッチョイ 0be8-udNJ)2018/01/18(木) 23:48:10.50ID:HIA6V+PM0
オライリー届いた。
分厚すぎてわろたわ。読むの大変そう。

22デフォルトの名無しさん (ワッチョイ b7eb-URfH)2018/01/29(月) 13:41:23.22ID:P6u1lvxj0
dyn Traitが入ってしばらくしたらBox<Trait>はdisconになるの?

deprecated扱いになって警告を出し次のepochで削除とかだったと思う

24デフォルトの名無しさん (ワッチョイ b7eb-URfH)2018/01/29(月) 17:30:10.02ID:P6u1lvxj0
impl Trait入ったらそもそもほとんど使わなくなるから気にしなくていいのか。

使うケース減るのもそうだけどepochで機能削除する場合はソースコードの変換ツールが提供されるらしい
あと古いepochのソースはそのままコンパイルできるらしいから特に対応不要らしい
だから新しいepochにしか入っていない機能を使いたいcrateとかでなければ何もしなくても困らないはずだし
その場合でも変換ツール通せば簡単に対応できるはず

26デフォルトの名無しさん (ワッチョイ aee8-URfH)2018/01/29(月) 21:18:10.28ID:ltX/HOsy0
なるほど

2018年のロードマップのRFC出てる
https://github.com/rust-lang/rfcs/pull/2314
impl Traitついに安定化されるのか

epoch releaseってのはどういうことなんだってばよ?

29デフォルトの名無しさん (ワッチョイ 57b3-skLA)2018/02/04(日) 00:05:25.67ID:VmMujkXk0
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:26.32ID:qOX3lZ+s0
and_modify() ?

31デフォルトの名無しさん (ワッチョイ f72d-MPJM)2018/02/06(火) 16:05:20.14ID:95WYpRcW0
https://webassembly.studio/

CやRustでWebAssemblyできるOnlineIDEだそうな

32デフォルトの名無しさん (ワッチョイ 1723-pvQ8)2018/02/07(水) 00:06:02.34ID:z0wRGtUY0
Rust Never Sleeps: Community Grows, Eclipse-Based IDE Planned
https://adtmag.com/articles/2018/02/01/rust-grows.aspx

>>31
ええやん

>>32
eclipseはいらんなあ

35デフォルトの名無しさん (ワッチョイ ffe8-ytvT)2018/02/07(水) 21:39:04.86ID:HRWlDALX0
オライリー本読んだ?

36デフォルトの名無しさん (ワッチョイ 2ee8-dBQf)2018/02/10(土) 17:28:13.69ID:EA1ZzrT70
wasmってまだプリミティブすぎて使い物にならないのかと思ってたけど wasm-bindgen すげえな
もうここまでできるのか

37デフォルトの名無しさん (ワッチョイ 42d2-Q8dp)2018/02/10(土) 18:48:11.24ID:YRtNT72/0
Rustすごい!

takahito takabayashiさんのツイート: "ファミコンのエミュレータをRust / WebAssembly で書き直した
https://twitter.com/tatakaba/status/961532612723511296

38デフォルトの名無しさん (エムゾネ FF62-W92t)2018/02/12(月) 12:24:11.46ID:4ugd2bUvF
梅手伝い

39デフォルトの名無しさん (ワッチョイ 457b-Zo0L)2018/02/12(月) 19:13:38.83ID:g6Vhygc80
苦労して書き直しても全然パフォーマンス上がらないのな…
ぐうの音もでないほど効果があるユースケースってなんなんだ

40デフォルトの名無しさん (ワッチョイ 99b3-bLbK)2018/02/12(月) 21:38:29.65ID:tHO1NU6P0
アルゴリズムが変わらないならそう変わらんのじゃないか
他人のひどいコードならともかく、同じ人が小規模なプログラムを書き直す程度だと特に

C/C++からRustへ書き直して速度が上がったって話はあんま聞いたことが無い
速いネイティブライブラリを言語に組み込んでるJuliaとかなら、書き直すだけで速度上がったって話はちらほら
pythonだったらnumpy使った方が楽でいいとかも

41デフォルトの名無しさん (ワッチョイ 457b-Zo0L)2018/02/12(月) 22:31:51.98ID:g6Vhygc80
いやだってjavascriptだぜ?アルゴリズムの問題か?

42デフォルトの名無しさん (ワッチョイ 429f-hB4z)2018/02/13(火) 11:38:21.89ID:L9OfLhwQ0
リリースビルドしてないとか

結局本スレどこ?

44デフォルトの名無しさん (ワッチョイ 429f-hB4z)2018/02/13(火) 14:01:02.73ID:L9OfLhwQ0
ここ

45デフォルトの名無しさん (ワッチョイ 469f-WY3D)2018/02/14(水) 10:32:44.85ID:Sny1AUMZ0
c++もそうだがコンパイラに機能を詰め込むってのがそもそも筋が悪い

46デフォルトの名無しさん (ワッチョイ 2e98-BYkA)2018/02/14(水) 16:35:43.73ID:wToAct7f0
>>45
どういうこと?じゃあどうすればいいの?

47デフォルトの名無しさん (ワッチョイ e1b3-CEXn)2018/02/14(水) 18:27:22.03ID:KakS2s960
asm!だよ

48デフォルトの名無しさん (ワッチョイ 469f-WY3D)2018/02/14(水) 19:14:50.70ID:Sny1AUMZ0
>>46
ライブラリ、もしくはツールに任せる。

49デフォルトの名無しさん (ワッチョイ ff98-znvk)2018/02/15(木) 02:06:38.25ID:mcN0VL7z0
>>48
やっぱりちょっと分からないな。
RustやC++のどの辺がコンパイラに機能を詰め込んでると思うの?
ライブラリorツールに任せるってのもどの辺を任せたいのかな?
話がザックリし過ぎて言いたいことがよく分からないんだが。

プリプロセッサマクロのことかな?あとは型システムとかGCのことかな?ライブラリに任せるの意味がよくわからんが…

51デフォルトの名無しさん (スップ Sd3f-swnP)2018/02/15(木) 17:01:00.96ID:OS8rqPvzd
C++はコンパイラの方もだけど標準ライブラリでの機能実現も相応に多くて結果ソースの記述が煩雑になっているのは既知の事実でしょう
ライブラリや実装に任せた結果APIの統一が取れなくなって結局細かな仕様策定を余儀なくされたSchemeを見ても銀の弾丸でない事は明らかだよね
それに出来る事を増やすという点においてライブラリは有用だけど変数の不変性や型システムのような制限をする事に関してはコンパイラによしなにしてもらうより他ないよ

52デフォルトの名無しさん (ワッチョイ f7e0-T3WU)2018/02/16(金) 01:22:14.41ID:W1XJdyx10
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆

53デフォルトの名無しさん (ワッチョイ ffe8-vS7N)2018/02/16(金) 07:39:34.93ID:455TYoTb0
やっとstableでrustfmtできるようになったな

どうせ明日にはまたnightly限定になってるよ

55デフォルトの名無しさん (ワッチョイ 9f9f-RCVW)2018/02/16(金) 14:44:20.68ID:o2oszjec0
最近のアップデートつまんねえなあ

56デフォルトの名無しさん (ワッチョイ 17eb-moIH)2018/02/16(金) 15:41:33.96ID:xYOe+Cvi0
>>45は言語仕様の追加、更新が気に入らないんじゃないかな
try!の代わりに?なんて以ての外だ、みたいな?それ以外に思い付かなかったけど
1.0以前に@や~を削除してライブラリにぶん投げた辺りは希望通りな気がする

基本的に電池入りじゃないRustはライブラリやマクロの代わりの言語仕様の追加じゃなく
より効率的なバイナリを吐くための言語仕様の追加が多いイメージだけどなぁ、impl Traitとか

57デフォルトの名無しさん (ワッチョイ ff98-znvk)2018/02/16(金) 17:59:54.40ID:ItA0QsEV0
>>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:30.32ID:o2oszjec0
box キーワードは何時 stable になるんだ?

59デフォルトの名無しさん (ワッチョイ bf8a-LkcG)2018/02/17(土) 11:13:34.80ID:J1S1NncJ0
boxキーワードはどういう時にうれしいのかがわからん

60デフォルトの名無しさん (ワッチョイ bf9f-Xz8k)2018/02/17(土) 11:16:00.80ID:kwPbHgTn0
明らかに二行に分けた方が読みやすいわけだが。
新しい機能マンセー厨ってそういう感覚の狂いについて無自覚過ぎんだよね。

61デフォルトの名無しさん (ワッチョイ ffeb-moIH)2018/02/17(土) 13:27:59.06ID:Nh87YVhF0
俺も違和感はあるけど、多くの人が賛意を出して採用されたんだから
>>60や俺の感覚が狂ってるんじゃね?自身の感覚の狂いって当然ながら無自覚過ぎんよ

boxは在り様の総意を取るの面倒だし、目下はBoxで運用できてるしで、いつまでもstableに来なさそう
ヒープを多用したい人には文法にあればありがたいんだろうけど、そもそもヒープが好まれんしのう

62デフォルトの名無しさん (ワッチョイ ffe8-vS7N)2018/02/17(土) 14:16:54.60ID:+W6LcK0d0
boxっていきなりヒープにメモリ確保されるのが保証されたりするんじゃないの?
今はコンパイラ次第じゃん

63デフォルトの名無しさん (ワッチョイ bfe4-Ql/f)2018/02/17(土) 14:41:36.65ID:IpKTSZVJ0
ironって今メンテされてないのか
最近のweb FWはrocketの方が人気なんかな
nightly専用だからまだ手を付けてないんだけど

64デフォルトの名無しさん (ワッチョイ 9f9f-RCVW)2018/02/17(土) 20:32:28.58ID:QFQHB0DO0
>>59
https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/box-syntax-and-patterns.html
> このように書くことでパフォーマンスを犠牲にすることなく、柔軟性を確保することができます。

知らないの?

65デフォルトの名無しさん (アウウィフ FF9b-LkcG)2018/02/17(土) 23:42:00.44ID:9NiO1PZdF
それはInPlaceとかPlacerがあればよくてbox inはただのsyntax sugarでは

66デフォルトの名無しさん (ワッチョイ ffe8-vS7N)2018/02/18(日) 08:04:09.95ID:SMMCMA600
分解のほうは新しいの?

67デフォルトの名無しさん (ワッチョイ ffeb-moIH)2018/02/18(日) 08:27:52.42ID:5lvSpjte0
分解の方がよほどsyntax sugarじゃないのかいな
NightlyのInPlace, Placer使わなくても、Stableの環境でmacro使って実現出来そう

68デフォルトの名無しさん (ワッチョイ 97b3-28Ds)2018/02/18(日) 10:49:08.55ID:/vdt0GUK0
boxって名前はBox<T>以外に使う場面で綺麗に見えない
place <- exprは代入みたい

新着レスの表示
レスを投稿する