1 名前:デフォルトの名無しさん [2012/01/25(水) 20:05:49.96 .net] Mozillaがリリースした、プログラミング言語「Rust」について語るスレです。 www.rust-lang.org/
159 名前:デフォルトの名無しさん mailto:sage [2015/01/13(火) 22:27:52.83 ID:QfRKSulC.net] 関数からIteratorを返す方法が分かりません 具体的には型に何書いて良いか分からない
160 名前:デフォルトの名無しさん mailto:sage [2015/01/14(水) 00:27:11.46 ID:e9uoW40m.net] >>158 Rustの良さの一つではあると思う メモリモデルの問題で普通の関数型プログラミング言語と全く同じようには出来ない中で、なるべく関数型の良さを取り入れようという結果なんだろうな
161 名前:デフォルトの名無しさん mailto:sage [2015/01/14(水) 00:48:27.71 ID:MazRL5ri.net] >>159 関数の中身によるけど、 戻り値書かなかった場合のコンパイルエラーで出てる型名コピペすればたぶんいけると思う
162 名前:デフォルトの名無しさん mailto:sage [2015/01/15(木) 20:50:25.52 ID:b84/qUeG.net] 言語が固まったらREPLの開発も再開するよね
163 名前:デフォルトの名無しさん mailto:sage [2015/01/15(木) 21:34:03.91 ID:E2BgZv7k.net] RustでREPLはめんどくさそうだな 寿命とか でっかいひとつのスコープって考えたら別にむずかしくはないのな
164 名前:デフォルトの名無しさん mailto:sage [2015/01/16(金) 14:15:52.84 ID:9+9TOoEF.net] 1.0.0-alpha をビルドしてるんだけど configure に --libdir=/usr/lib64 を指定すると lib.rs がコンパイルエラーになってしまう 前からこんなんだったっけ・・・
165 名前:デフォルトの名無しさん mailto:sage [2015/01/16(金) 22:33:39.21 ID:KEq1J0ex.net] ここ最近の怒涛の変更はヤバい
166 名前:デフォルトの名無しさん mailto:sage [2015/01/17(土) 00:15:44.35 ID:Wxv5Etsa.net] clayもそうだったけど、llvm使った言語のビルドってすげー時間かかるのな。ナイトリービルド落とした方がええわ。
167 名前:デフォルトの名無しさん mailto:sage [2015/01/17(土) 02:06:27.12 ID:CWvWtJ6X.net] クロージャ周りが変更されまくってて全然わからん
168 名前:デフォルトの名無しさん mailto:sage [2015/01/17(土) 18:17:59.12 ID:H+D/soOr.net] そろそろ試してみようと思ったらまだそんな感じなの?
169 名前:デフォルトの名無しさん mailto:sage [2015/01/17(土) 18:38:22.05 ID:rzZFM78t.net] これから構文の変更は極力減らすらしいし、1.0がリリースされるまでのあと2〜3ヶ月は詰めの時期だろう ドキュメント周りは絶賛崩壊中。Rust by Exampleとか全然動かん(Issueは立ってるけど) まあ検索しても古いブログとか引っかかりまくるからな― なんかあったらGitHub該当レポをいちいち見に行くくらいのことをしないと勉強するのは厳しい
170 名前:デフォルトの名無しさん mailto:sage [2015/01/17(土) 18:40:22.92 ID:CWvWtJ6X.net] 構文の変更はなくてもAPIの変更はあったりするんだろうか
171 名前:デフォルトの名無しさん mailto:sage [2015/01/17(土) 19:02:31.26 ID:P4fG3Fn9.net] このスレ立ったときから安定したら使ってみようと思ってたけど もう少しらしいね
172 名前:デフォルトの名無しさん mailto:sage [2015/01/17(土) 19:41:57.99 ID:Om8PoyqQ.net] ベータのリリースサイクルでライブラリの安定化やるから、 APIはまだまだ変更されるはず
173 名前:デフォルトの名無しさん mailto:sage [2015/01/17(土) 20:40:08.53 ID:H+D/soOr.net] ベータ出てからも長そうだな...
174 名前:デフォルトの名無しさん mailto:sage [2015/01/19(月) 03:43:45.49 ID:b8H1tohZ.net] 1. 全ての値、変数はそれが定義されたスコープ内で死ぬ(読み書きできなくなる) 2. ある値を殺さずスコープの外に出すには、死ぬ前に外の変数に入れるしかない 3. ただし、参照を外に出すことはできない lifetimeの原則ってこんなもんだよね?これはまだ分かるけど、ownershipはも少し理解が必要。 マルチスレッドを学ぶときにきっと理解できると信じてる。
175 名前:デフォルトの名無しさん mailto:sage [2015/01/20(火) 02:47:53.78 ID:CAQhwwqz.net] fnで定義される関数とクロージャって区別されてるのか。fnで定義できる関数は環境を持たないクロージャとして扱うことができるけど、逆は無理なのな。 fn map<S,T> (x:Vec<S>, f:fn(S) -> T) -> Vec<T> { ... } っていう高階関数はfnで定義される関数しか受け付けないが、 fn map<S,T,F:Fn(&S) -> T> (x:Vec<S>, f:F) -> Vec<T> { ... } は関数もクロージャも通す。 クロージャの定義を見ればコンパイル時に環境を持たないで済むか分かると思うんだけどなあ 関数 ∈ クロージャみたいな関係なんだから、関数で済むなら関数にして欲しい
176 名前:デフォルトの名無しさん mailto:sage [2015/01/20(火) 07:57:01.37 ID:WTvBD7gs.net] unboxed closureならほぼ関数みたいに使えると思うけど。やりたいことは、boxingが必要なケース?
177 名前:デフォルトの名無しさん mailto:sage [2015/01/20(火) 08:02:49.45 ID:WTvBD7gs.net] よくわからん事を言ってしまった。 そもそも、クロージャとして扱うってどういう意味で言っている? rustではクロージャ「型」というものは最近なくなってしまって、 ただFnを実装した型が関数のように呼び出すことが出来るだけという認識。 Fnを実装したある型が関数として定義されているか、 クロージャの構文を使って定義されているかは、 渡される側からは意識する必要がない。
178 名前:デフォルトの名無しさん mailto:sage [2015/01/20(火) 14:02:52.06 ID:CAQhwwqz.net] >>177 クロージャとして扱うってのは>>175 の二番目のmap<S,T,F:Fn(&S)->T>っていう高階関数は、 fn foo(...)で定義された関数を渡すことができるし、let baz = |&:| { ... }とかやって定義したクロージャを渡すこともできる。 >>175 の一番目のmap<S,T>はfnで定義した関数は渡せるけど|&:| {...}は渡せない。 つまり、関数とクロージャは別物なんだけど、クロージャを受け取る高階関数は関数も受け取れる。 それを指して「クロージャを受け取れる高階関数は、普通の関数もクロージャとして扱う」っていう意味で言った。 referenceのfunction typeの項 doc.rust-lang.org/reference.html#function-types にもあるとおり、関数の型はfn(args) -> retと書けるもので、traitの実装とかではない。 一方でクロージャはFnトレイトの実装。違いは環境を持つか否か。
179 名前:デフォルトの名無しさん mailto:sage [2015/01/20(火) 18:02:24.49 ID:5OYX7sX+.net] >>178 おそらくだけど、Rustの言語仕様で閉じる範囲に関しては、すべて区別せず Fn traitに統一したい意図があると思う。 関数型が残されているのはFFIの都合かと
180 名前:デフォルトの名無しさん mailto:sage [2015/01/20(火) 20:43:45.16 ID:CAQhwwqz.net] そうなの?関数内で関数を定義できるからある程度は使えるんだけどな。 ついでに質問なんだけど、Fn traitの記法Fn(s) -> tってのはこれ専用の記法なの? それとも一般的な記法の一例?
181 名前:デフォルトの名無しさん mailto:sage [2015/01/21(水) 01:12:38.06 ID:YXeDnvLj.net] Fn みたいな () -> を使う記法はいまのところFnとFnMutとFnOnce専用だったはず。 他にこの記法使えるとうれしい場面があるならば提案すれば使えるようになるかも。 そもそもこの記法採用されたきっかけというのが、 Fn(A. B) -> C を desugar した形式の Fn<(A, B), C> が書きにくいというのもあるけど、 Fn のdesugarした形式自体がまだfixできていないから、 ひとまずsugarだけ使えるようにして実体の表記は使えなくしようというものだったはず。 実際、Fnの戻り値型はAssociated typeで与えるようにしようとか、 Foo()-> Aの記法は Foo<Output=A> の意味にしようとか、いろいろ議論があるらしい。 当面は、RFCウォッチすると議論が追えると思う。
182 名前:デフォルトの名無しさん [2015/01/21(水) 09:15:31.70 ID:mE4mMlsp.net] トップレベルで型注釈を強制するのはひとつの見識だとは思うんだが、 型の表記がもう少しスッキリしたマトモなものじゃないと面倒臭すぎる。 なんでそういうところはMLやHaskellを見習わなかったのか……
183 名前:デフォルトの名無しさん mailto:sage [2015/01/21(水) 11:29:22.51 ID:4FCeMM5/.net] >>182 本当だねえ。関数引数リストの中がゴミゴミしい
184 名前:デフォルトの名無しさん mailto:sage [2015/01/22(木) 01:22:08.93 ID:KmZyTX6h.net] ttps://github.com/rust-lang/rust/issues/20797?#issuecomment-69947098 associated typesを使っているtraitが拡張できん…
185 名前:デフォルトの名無しさん mailto:sage [2015/01/25(日) 05:05:02.45 ID:47J/10kQ.net] >>184 の問題の再現コードは、 trait DeclaredTrait { type Type; } impl DeclaredTrait for i32 { type Type = i32; } struct Struct<B: DeclaredTrait> { b: B, b1: B::Type, } とあり、 Struct { b: 0, b1: 0}などとするとICEになるが、色々試した結果、Structを少し弄って struct Struct<T, B: DeclaredTrait<Type=T>> { ... とすれば回避できることが分かった。やったと小躍りしていたらfixされた。Oh...
186 名前:デフォルトの名無しさん mailto:sage [2015/01/29(木) 19:53:46.66 ID:zNgdEinm.net] arthurtw.github.io/2014/11/30/rust-borrow-lifetimes.html borrowingについてはbookより良い説明になってる。 stackoverflow.com/questions/22188088/what-does-a-scoped-lifetime-in-rust-actually-mean この解答はかなりlifetimeについて分かりやすかった。 lifetimeとsubtypingの類似性をまとめようと思ったが力尽きた。 1つの事柄を説明しようとすると別の関連項目も入れた方がいいなとかやってると膨大になる。
187 名前:デフォルトの名無しさん mailto:sage [2015/02/04(水) 22:01:24.98 ID:TC60WqWu.net] rustはじめました バカなんですけど教えてください fn main() { let mut a = &1is; let mut b = &2is; a = b; } b = a だと平気なのに a = b だと叱られます。なぜですか
188 名前:デフォルトの名無しさん mailto:sage [2015/02/05(木) 01:26:26.56 ID:dGetvNcg.net] 先に宣言した方がlifetimeが長くなるルールだから?
189 名前:デフォルトの名無しさん mailto:sage [2015/02/05(木) 01:47:21.88 ID:u4P5BLYw.net] nightlyなら通るよ>>187
190 名前:デフォルトの名無しさん mailto:sage [2015/02/05(木) 20:57:01.65 ID:xsa081YG.net] お二方どうも >>188 どこで寿命尽きるのかlifetimeムズカシイです >>189 通るのですか しかしエラー出ます rustc 1.0.0-nightly (eaf4c5c78 2015-02-02 15:04:54 +0000) githubのをビルドしないとダメでしょうか 面倒なのでブック読みながらバイナリの更新待ちます
191 名前:デフォルトの名無しさん mailto:sage [2015/02/06(金) 00:07:57.08 ID:ZZvCiYpX.net] 今なら2015-02-04のバイナリ落ちてくるよ
192 名前:デフォルトの名無しさん mailto:sage [2015/02/06(金) 01:45:16.44 ID:f5aiPF8n.net] うーん。変わらずエラーが出ます rustc 1.0.0-nightly (ba2f13ef0 2015-02-04 20:03:55 +0000) 本来>187はコンパイル通るものですか
193 名前:192 mailto:sage [2015/02/06(金) 01:49:34.64 ID:f5aiPF8n.net] エラーこんな感じで src/main.rs:3:14: 3:17 error: borrowed value does not live long enough src/main.rs:3 let mut b = &2is; ^~~ src/main.rs:2:17: 5:2 note: reference must be valid for the block suffix following statement 0 at 2:16... src/main.rs:2 let mut a = &1is; src/main.rs:3 let mut b = &2is; src/main.rs:4 a = b; src/main.rs:5 } src/main.rs:3:17: 5:2 note: ...but borrowed value is only valid for the block suffix following statement 1 at 3:16 src/main.rs:3 let mut b = &2is; src/main.rs:4 a = b; src/main.rs:5 }
194 名前:デフォルトの名無しさん mailto:sage [2015/02/06(金) 02:10:23.34 ID:9alBoo2L.net] playpenでも転けるし駄目っぽい
195 名前:デフォルトの名無しさん mailto:sage [2015/02/06(金) 17:39:55.66 ID:uj3RHvbm.net] nightlyで通ると言ってた者だが、1月24日のは通ったが、今日2月6日では通らなくなってた。
196 名前:デフォルトの名無しさん mailto:sage [2015/02/06(金) 23:25:09.25 ID:gZSM6axtP] やっぱりlifetimeの長い短いとちゃうかなぁ。 >let mut a = &1is; >let mut b = &2is; aの型は&'i isize bの型は&'j isize だとするとlifetimeの長さはi > jであるからaはlifetime i以上のisizeへの参照を要求する。 bのlifetimeはjであるからnot live long enoughなんじゃないかなぁ。
197 名前:デフォルトの名無しさん mailto:sage [2015/02/06(金) 23:36:12.02 ID:gZSM6axtP] うーん、でも fn print_type_of<T>(_: &T) -> () { let type_name = unsafe { (*std::intrinsics::get_tydesc::<T>()).name }; println!("{}", type_name); } fn main() { let mut a = &1is; let mut b = &2is; print_type_of(&a); print_type_of(&b); } の出力は &'static isize &'static isize やなぁ。
198 名前:デフォルトの名無しさん mailto:sage [2015/02/07(土) 01:46:20.54 ID:Gp97gMW3.net] やっぱりlifetimeの長い短いとちゃうかなぁ。 >let mut a = &1is; >let mut b = &2is; aの型は&'i isize bの型は&'j isize だとするとlifetimeの長さはi > jであるからaはlifetime i以上のisizeへの参照を要求する。 bのlifetimeはjであるからnot live long enoughなんじゃないかなぁ。
199 名前:デフォルトの名無しさん mailto:sage [2015/02/07(土) 01:46:51.82 ID:Gp97gMW3.net] うーん、でも fn print_type_of<T>(_: &T) -> () { let type_name = unsafe { (*std::intrinsics::get_tydesc::<T>()).name }; println!("{}", type_name); } fn main() { let mut a = &1is; let mut b = &2is; print_type_of(&a); print_type_of(&b); } の出力は &'static isize &'static isize やなぁ。
200 名前:デフォルトの名無しさん mailto:sage [2015/02/07(土) 08:13:43.05 ID:iwrmCGgo.net] print_type_of ってデバッグでしょっちゅう使うから、標準ライブラリに入ってると良いのに
201 名前:デフォルトの名無しさん mailto:sage [2015/02/07(土) 11:09:20.93 ID:cThHTNUW.net] get_tydescでlifetimeってstatic以外も出せるの? fn main() { let x = &1; print_type_of(&x); // &'static i32 { let k = &3; print_type_of(&k); // &'static i32 } }
202 名前:デフォルトの名無しさん mailto:sage [2015/02/07(土) 13:33:02.38 ID:cThHTNUW.net] https://github.com/rust-lang/rust/pull/21657 https://github.com/rust-lang/rust/pull/21022 何言ってるか分からん。誰か解説してください。
203 名前:デフォルトの名無しさん [2015/02/21(土) 07:04:27.61 ID:Olg1CcTP.net] 1.0.0 あるふぁ2 来た We’ve managed to land almost all of the features previously expected for this cycle. The big headline here is that all major API revisions are finished: path and IO reform have landed. At this point, all modules shipping for 1.0 are in what we expect to be their final form, modulo minor tweaks during the alpha2 cycle. See the previous post for more details. blog.rust-lang.org/2015/02/20/Rust-1.0-alpha2.html ってことは主な標準ライブラリのAPIも安定するってことか? 安定バージョン出たら使おうと思ってたからそろそろ本格的に勉強しよう
204 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 07:08:43.49 ID:Olg1CcTP.net] rust 日本で人気ないのなんでだろ hackernews とかでは話題になるのに
205 名前:デフォルトの名無しさん [2015/02/21(土) 07:54:16.64 ID:r4ISt4ZW.net] なってねーよ Rustユーザーの声がでかいだけ Githubのトレンド見ろよ てかいつ1.0になるんだよ コンパイルクソ遅せーよ
206 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 08:28:43.29 ID:R5TBrCid.net] 今見たらハッカーニュースで話題になっててワロタ
207 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 11:27:04.19 ID:Fus77TES.net] 日本人なんでいつも出遅れじゃん 半島人や大陸人ではないので念のためw
208 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 11:37:56.64 ID:Fus77TES.net] RELEASES.md Version 1.0.0-alpha.2 (February 2015) ttps://github.com/rust-lang/rust/blob/master/RELEASES.md#version-100-alpha2-february-2015 本題と離れたこの辺が好き→Rust is tested against a LALR grammar
209 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 18:56:18.12 ID:NoRQyCne.net] 日本はシステム寄り言語はあまり盛り上がらない印象 フレームワークでこんなんできた、とかそういうのばっか
210 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 19:05:24.66 ID:XLU71/kI.net] そのフレームワークにも乗り遅れてるけどな
211 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 20:18:51.42 ID:4tV2h1eL.net] 今のペースだと1.0は早くても5月の半ば GWあたりから勉強すればいいや
212 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 22:16:25.60 ID:u58zLpzB.net] ttps://github.com/uutils/coreutils Cross-platform Rust rewrite of the GNU coreutils 面白そうだから時々覗いてるけど、作る宣言してやりかけか音沙汰なしが多い
213 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 22:19:24.18 ID:SweHsfSk.net] 1.0が出てからが本番
214 名前:デフォルトの名無しさん mailto:sage [2015/02/21(土) 22:47:20.72 ID:24QmOmn3.net] 最近Nimとの比較記事よく見る 試したことないが速いんか
215 名前:デフォルトの名無しさん [2015/02/22(日) 05:47:39.50 ID:XKjiDtco.net] 試せよ 馬鹿なの?
216 名前:デフォルトの名無しさん mailto:sage [2015/02/22(日) 08:13:00.52 ID:NjIsBkYB.net] やだね
217 名前:デフォルトの名無しさん mailto:sage [2015/02/22(日) 10:43:53.32 ID:x4NvaSP0.net] "「Unix in Rust」の作者がRustを捨ててNimに移行" ttp://developers.slashdot.jp/story/15/02/20/2132207/ Nimの詳しいところは見てないけど、ソースぱっと見で括弧や大文字小文字のめりはり無くて散り散りした感じは嫌だな その点はこっちの方がいい
218 名前:デフォルトの名無しさん mailto:sage [2015/02/22(日) 20:28:37.40 ID:0ELzUNxg.net] NimはRustよりかなり前からあったでしょ。少なくともぽっと出の新人じゃない。 Nimは高速化、拡張の手段が多い(テンプレート&マクロ, コンパイル時計算, 最適化処理)にもかかわらず、 それらを作るときに変態的な見慣れぬ処理をしているようには見えない。 この、LispのマクロがPythonの文法でやれているのがおそらく一番凄いところ。 Python人口は多いから間口は広いと思うよ。Pythonと違ってまともなスコープだし。 型システムはRustの方が見通しが立っている。Nimはちょっと独特。 そして何より、Rustは低レベルもターゲットだけど、Nimはそうじゃない。 高速 -> 低レベルってのは昨今じゃ成り立ってない。
219 名前:デフォルトの名無しさん mailto:sage [2015/02/22(日) 20:59:13.82 ID:LRANqcPT.net] あっちはGC、こっちは全手動
220 名前:デフォルトの名無しさん mailto:sage [2015/02/22(日) 22:12:46.57 ID:7JvXqGjL.net] >>219 全手動って、ほぼRAIIとレファレンスカウンタで足りてるように思うけど。 別にmalloc,freeを一々手で書いてるわけではない。
221 名前:デフォルトの名無しさん mailto:sage [2015/02/23(月) 00:57:37.90 ID:AFp5DLmZ.net] NimのGCがスレッドセーフになるのと、RustにGCが搭載されるのと、どっちが先か
222 名前:デフォルトの名無しさん mailto:sage [2015/02/23(月) 08:07:08.31 ID:5h1ypUSf.net] RustはGC搭載だったのを取り除いたんじゃなかったか
223 名前:デフォルトの名無しさん mailto:sage [2015/02/23(月) 19:40:30.09 ID:eyhGdPbs.net] RustでもDでもNimでもなんでもいいよ 俺は勝ち馬に乗りたいだけだ 共倒れになるのが一番困るんだよ
224 名前:デフォルトの名無しさん mailto:sage [2015/02/23(月) 21:48:25.71 ID:hrwL6DMU.net] 勝ち馬おじさんは適当なほにゃららbindingsでも作ってオポを得てください
225 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 00:16:34.89 ID:Xk/EueOy.net] >>222 RustのあれはGCじゃなくて今で言うところのRcだったはず GCの一種といえば一種だけど、実装は異なるから区別したい
226 名前:デフォルトの名無しさん mailto:sage [2015/02/24(火) 02:31:58.07 ID:F5ABen3P.net] 参照カウンタもオブジェクトマップも両方GCで最近の参照カウンタは実行時じゃなくてコンパイル時にやるGCじゃないやつがあるんだよ。
227 名前:デフォルトの名無しさん mailto:sage [2015/02/27(金) 03:23:46.29 ID:SOolYU16.net] Boxはownership付きのポインタだ!と気付き、ヒープに限定しなくてもいいんじゃないかと思ったんだが、 move semanticsがあるので、そんなに便利にはならないことが分かった。 うまくできているなと思う。
228 名前:デフォルトの名無しさん mailto:sage [2015/02/28(土) 17:38:52.88 ID:zVTmyizc.net] RustでC++のコードを呼び出せるようにならないかな
229 名前:デフォルトの名無しさん mailto:sage [2015/02/28(土) 17:40:37.54 ID:ODdhY4Z/.net] 呼べるんじゃね
230 名前:デフォルトの名無しさん mailto:sage [2015/03/01(日) 14:43:26.72 ID:GK+mth0P.net] FFIくらいあるじゃろ
231 名前:デフォルトの名無しさん mailto:sage [2015/03/02(月) 19:48:54.98 ID:jKoObBcz.net] ServoではCのラッパー関数作ってるって書いてあった ただそれだと関数呼び出し増えた分のオーバーヘッドがあるから、 言語を跨がった最適化を検討中だとか
232 名前:デフォルトの名無しさん mailto:sage [2015/03/02(月) 21:38:37.91 ID:r8lAZceI.net] rust自身も自分用llvmを使っていて、ビルドに超時間がかかる。 Servoは自分用rustを使っているのでもっと時間がかかるので、面倒でしょうがない。
233 名前:デフォルトの名無しさん mailto:sage [2015/03/02(月) 22:35:12.26 ID:jKoObBcz.net] 同じくrustcのバージョン固定してるcargoはnightlybuildのバイナリ使ってるけど、 servoはソースからコンパイルしてるの?
234 名前:デフォルトの名無しさん mailto:sage [2015/03/12(木) 17:19:15.80 ID:RfbJhqVK.net] してた。ゴ食わず嫌いだったゴメンよ
235 名前:デフォルトの名無しさん mailto:sage [2015/03/16(月) 00:17:19.80 ID:eDQflfth.net] rustは配列内包無いん?
236 名前:デフォルトの名無しさん mailto:sage [2015/03/20(金) 18:24:48.01 ID:+SAQAguo.net] 今は動かない&配列じゃなくてイテレータを返すやつだが、 https://github.com/bsteinb/rust-iteratorcomprehensions を自分で修正したらいいんじゃないかな。うまくいったら使い心地とか教えてほしい ところで、マクロに名前空間とか欲しくない?vec!じゃなくてVec::new!みたいにできたら、 長い名前を付けないでも衝突の心配が無くなっていいと思うんだけど
237 名前:デフォルトの名無しさん mailto:sage [2015/04/01(水) 20:39:05.61 ID:cmpu1vG2.net] ちょっと見ないでいると新しい構文ができてたり、前の構文が禁止になったりと変遷がまだ激しい 関数定義にも型推論が効くようになったらありがたいんだけど、lifetimeパラメータがあるから当分は無理だろうな
238 名前:デフォルトの名無しさん [2015/04/04(土) 10:44:07.36 ID:3u9gfu59.net] ttp://blog.rust-lang.org/2015/04/03/Rust-1.0-beta.html ベータきた
239 名前:デフォルトの名無しさん mailto:sage [2015/04/04(土) 17:25:52.34 ID:tHhrzAt2.net] これで他所様のcrateがコンパイルできないって事態が減るのか。ありがたや。
240 名前:デフォルトの名無しさん mailto:sage [2015/04/06(月) 02:32:19.13 ID:h+YQESxX.net] std::fsのPathExt使いたいんだけどどうすりゃいいの? #![feature(PathExt)]追加してけど今度はこれに対して文句言われるし
241 名前:デフォルトの名無しさん mailto:sage [2015/04/06(月) 07:54:14.20 ID:TRGNibS3.net] >>240 使ってるrustはbetaとnightlyのどっち? unstableな機能はbetaじゃ使えないから、nightlyを使う必要がある
242 名前:デフォルトの名無しさん mailto:sage [2015/04/06(月) 09:14:39.34 ID:SQyZe7Rp.net] >>240 #![feature(path_ext)]としたら動かない?あと1.0.0-betaじゃなくてnightly buildだったらunstableがエラーにならない、はず。
243 名前:デフォルトの名無しさん mailto:sage [2015/04/07(火) 17:58:26.92 ID:sYJ921on.net] nightly buildにして#![feature(path_ext)]にしたら動きました
244 名前:デフォルトの名無しさん [2015/04/19(日) 19:52:26.06 ID:KK4Vp0dw.net] rust-lang.orgのトップにあるコード、あれでRustに魅力を感じることはないよね……
245 名前:デフォルトの名無しさん mailto:sage [2015/04/19(日) 22:55:50.22 ID:Pae6mGZb.net] どんなコードなら魅力を感じる?
246 名前:デフォルトの名無しさん mailto:sage [2015/04/20(月) 20:41:29.82 ID:SBrGan7W.net] パターンマッチはRustくらい低レベルな分野では珍しいから悪くはない。 だけど色くらい付けた方がいいのは確か。
247 名前:デフォルトの名無しさん [2015/04/21(火) 12:34:26.69 ID:DovQc0Av.net] その程度の輩を入口でフィルタアウトできてちょうどいい
248 名前:デフォルトの名無しさん mailto:sage [2015/04/21(火) 20:58:23.87 ID:8SfamI7q.net] 完成度高いけど読みづらい 色々詰め込みましたって感じであまりセンスを感じないかな
249 名前:デフォルトの名無しさん mailto:sage [2015/04/21(火) 21:13:43.96 ID:t5rHangx.net] syntaxにケチつけてセンスとか言ってるのも片腹ポンポンペイン感がある 見た目はC言語ユーザーに合わせてsemanticsは全然違ようにしてあるのに
250 名前:デフォルトの名無しさん mailto:sage [2015/04/21(火) 22:17:14.88 ID:p6Hmsc0c.net] 構文のC言語風な部分に文句を言ってる訳じゃなさそうだが……
251 名前:デフォルトの名無しさん [2015/04/21(火) 22:35:19.48 ID:wBLqiLA1.net] 実際、読みづらいし書きづらいだろ。 関数型の感覚で書こうとするといたるところで引っかかる。 直和型に対するenumっていう命名のセンスも シンタクスの話だが、無視できない筋の悪さを感じる。
252 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 00:19:44.26 ID:G0rTsYMJ.net] Mozilla自体、将来性怪しい
253 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 01:52:28.56 ID:8x+/Tpq3.net] GNUもそうだけどだいたいのユーザーは結局利便性>>>思想だから その思想に属するソフトが最も良い時はその理念を支持してくれるけど そうじゃなくなったら...ねえ
254 名前:デフォルトの名無しさん mailto:sage [2015/04/22(水) 03:13:38.70 ID:Itj79n5U.net] 泥臭いレベルで考えれば直和型はenumでいいと思う。 以前は、例えばOption型のand_thenとかor_elseがクロージャを取らなかったから繋げるのが面倒だったけど、 今はそうでもないよ。 ただ、プロトタイピングとか手探りでモックアップ的なものを書きながら試すのは相変わらずしんどい。 慣れたら型エラーlifetimeエラー出さずにガリガリ書けるのかもしれんが、「誰が資源の所有者であるか」を意識し続けるのはまだ難しい
255 名前:デフォルトの名無しさん mailto:sage [2015/04/23(木) 23:36:44.51 ID:wT/D2HMU.net] javaのenumも定数クラスをフィールドと見なせば直和型だがセンス悪いですか・・・。 定義もEnum<E extends Enum<E>>だし クラス使ったオブジェクト指向っぽくやるとそうなるんじゃないかな。
256 名前:デフォルトの名無しさん [2015/04/24(金) 12:44:05.34 ID:/IU9j/kd.net] enumは直和型の特殊事例として表現できるが、 逆に直和型をenumの拡張とみなしているうちは面白い使い方はできないだろ。
257 名前:デフォルトの名無しさん mailto:sage [2015/04/24(金) 22:34:58.83 ID:w/TzYGT8.net] 特殊事例じゃなくて表現方法の1つじゃないの? 例えばhaskellの直和型で可能でenumじゃ無理なことって何がある? 面白い使い方って色々とサポートが必要でしょ?特にメモリ周りで。 例えばリストだったらenum List<T> { Nil, Cons(T, Box<List<T>>)}って面倒だったり、 コンストラクタを関数として扱おうとするなら部分評価時のクロージャを誰が保持するのか利用者が注意しなくちゃならない。 そういう細々としたことをGCや遅延評価で隠せない、隠さないのがいいところでもあるんだから。 オーバーヘッド無しにもっと便利にできるよ!っていうなら取り入れられるよ多分。 低レベルな分野で型推論とか自動メモリ管理とか入れようとしたらどうなるの?っていう実験やってるようなもんだし。
258 名前:デフォルトの名無しさん [2015/04/25(土) 09:17:20.05 ID:YZfn/g4I.net] ServoみたいなRustの大きいプロジェクトでは ファントム型がよく使われてるが、これが普通に定着するといいな。 ただ、型はすぐ濫用されるからなあ。 Rustで型レベルプログラミングとか見たくないわ……
259 名前:デフォルトの名無しさん [2015/04/28(火) 14:45:42.12 ID:TsKA4yAm.net] Reenix: Implementing a Unix-Like Operating System in Rust ttps://twitter.com/rustlang/status/592743898692321280 早速OS作ってる人いたか