- 1 名前:デフォルトの名無しさん [2012/01/25(水) 20:05:49.96 .net]
- Mozillaがリリースした、プログラミング言語「Rust」について語るスレです。
www.rust-lang.org/
- 83 名前:デフォルトの名無しさん mailto:sage [2013/07/12(金) NY:AN:NY.AN .net]
- stackoverflow.com/questions/17514598/building-a-cross-platform-application-using-rust
https://github.com/mozilla/rust/wiki/Note-getting-started-developing-Rust https://groups.google.com/forum/#!msg/haxelang/WKAWQK4WGa8/wZxViCsLzOYJ 年末にはだいぶモノになるとかいってるけど だいぶ先は長そうだなこれ…
- 84 名前:デフォルトの名無しさん [2013/07/14(日) NY:AN:NY.AN .net]
- もう諦めて寝るわ。1.0になったら起こしてくれ
- 85 名前:デフォルトの名無しさん mailto:sage [2013/07/14(日) NY:AN:NY.AN .net]
- 一目ゴミっすね。
- 86 名前:デフォルトの名無しさん mailto:sage [2013/07/15(月) NY:AN:NY.AN .net]
- 土方にはゴミにしか見えんだろうな
- 87 名前:デフォルトの名無しさん [2013/07/18(木) NY:AN:NY.AN .net]
- わかりやすい日本語解説きたで
gifnksm.hatenablog.jp/entry/2013/07/15/170736
- 88 名前:デフォルトの名無しさん [2013/07/20(土) NY:AN:NY.AN .net]
- 早く1.0になってクレヨン
- 89 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN .net]
- mut 周りがよく分からんな。 C++ でいう
int* const int const* みたいな区別はない(0.2 くらいのときはあった気がするけど)んだよね。
- 90 名前:デフォルトの名無しさん mailto:sage [2013/07/22(月) NY:AN:NY.AN .net]
- >>89
昔は構造体のフィールドに mut をつけて、そこだけミュータブルにすることはできたね。 今は、データの所有者のミュータビリティが継承されるという仕様だから、 データの一部だけがミュータブルということはなくて、 全部ミュータブルかイミュータブルの2つしかない。 ただし、例外が @ で表されるマネージドボックス。 これは所有者が複数いるので、所有者のミュータビリティを継承するのでは無く、 ボックス自体がミュータブルかイミュータブルかの属性をもっている (@ と @mut)。 なので、@ を使えば C++ でいう例のようなことは一応できる。 Rust では @ の使用をできるだけ避けようという風潮があるから、 C++ と同じ事をやる目的で @ を使うのはあまり推奨されないとは思う。
- 91 名前:デフォルトの名無しさん mailto:sage [2013/07/23(火) NY:AN:NY.AN .net]
- >>90
分かりやすい説明ありがとう。 @-ptr が mutability を継承しないという点が分かってなくて コード書いていて混乱した。って Tutorial にも書いてあるね。最近読み返してなかった。すまん。
- 92 名前:デフォルトの名無しさん mailto:sage [2013/07/23(火) NY:AN:NY.AN .net]
- あと、
(~[0]).push(1); // OK (@mut [0]).push(1); // NG メモリの再配置が行われる可能性のある操作が @mut [T] で不可能なのは 考えてみればそうなのだけど、ちょっとびっくりする。
- 93 名前:デフォルトの名無しさん [2013/09/27(金) 21:30:47.89 .net]
- v0.8 is coming.
https://github.com/mozilla/rust/blob/0.8/RELEASES.txt www.rust-lang.org/
- 94 名前:デフォルトの名無しさん mailto:sage [2013/10/25(金) 06:37:23.40 .net]
- C++でいいような気がしてきた
- 95 名前:デフォルトの名無しさん [2013/10/25(金) 23:47:33.48 .net]
- いつなったら1.0になるのよ?
- 96 名前:デフォルトの名無しさん mailto:sage [2013/10/27(日) 14:59:23.36 .net]
- あまりに大きな変更は2.0に持ち越すとか言ってる1.0はそう遠くないと思う、半年とか1年以内には
>>94 GCを言語コアからライブラリに追い出すことが決まったあたりから、 競合のDやGoよりもシステム寄りの、ちょうど今C++が占めてるニッチを奪おうぜって流れになった pcwalton.github.io/blog/2013/06/02/removing-garbage-collection-from-the-rust-language/
- 97 名前:デフォルトの名無しさん [2013/11/28(木) 00:01:30.48 .net]
- 死ねバカwwwwwwwwwwwwwwwwwwwwwwww
死ねwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww 死ねwwwwwwwwwwwwwwwwwwwwwwww ゴミwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww ゴミゴミゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwww ゴミwwwwwwwwwwwwゴミゴミゴミwwwwwwwwwwwwwwwwww 死ねゴミwwwwwwwwwwwwwwwwwwwwwwwwコラwwwwwwwwwwww 死ねコラゴミwwwwwwwwwwwwwwwwww
- 98 名前:デフォルトの名無しさん mailto:sage [2014/01/04(土) 23:59:41.80 .net]
- ゴミではない
錆だ
- 99 名前:デフォルトの名無しさん mailto:sage [2014/01/06(月) 06:20:11.18 .net]
- C4のレシピってゾンビからドロップしますか?
- 100 名前:デフォルトの名無しさん mailto:sage [2014/01/10(金) 22:48:46.46 .net]
- 0.9来たか
- 101 名前:デフォルトの名無しさん [2014/01/17(金) 11:19:41.93 .net]
- https://github.com/mozilla/rust/blob/0.9/RELEASES.txt
www.rust-lang.org/ sourceforge.jp/magazine/14/01/15/203000 0.9になっても結構変更あるな。Managed boxes (@) が非推奨てw
- 102 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 11:37:16.72 .net]
- 1.0は2014年末の予定とか cmr.github.io/blog/2014/01/12/the-state-of-rust-0-dot-9/
- 103 名前:デフォルトの名無しさん [2014/01/17(金) 12:00:54.65 .net]
- Rust on rails、トップシェアになる
- 104 名前:デフォルトの名無しさん mailto:sage [2014/01/17(金) 12:01:44.79 .net]
- 「レール上の錆」か……
- 105 名前:デフォルトの名無しさん mailto:sage [2014/01/18(土) 20:24:08.48 .net]
- あと1年もこの調子で変更すんの?
とっとと1.0出してよ
- 106 名前:デフォルトの名無しさん mailto:sage [2014/01/19(日) 13:30:19.84 .net]
- おい、台本ちゃんと読めよ そこの台詞は
「けっノロマめ、俺がフォークして先に1.0を立ち上げちまったぜ」 だろ
- 107 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 22:35:01.51 .net]
- どちらかというと v1.0 以降の破壊的変更の方に期待してしまう(マゾ)。
- 108 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 22:46:55.05 .net]
- 良く訓練されたD言語erのような性癖だな
- 109 名前:デフォルトの名無しさん mailto:sage [2014/01/26(日) 22:49:10.16 .net]
- Feature gate なんて大義名分があるんだからいくらでも破壊的変更してきそうだよな
ワクワクする
- 110 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 19:40:13.77 .net]
- rust速いらしいけどgoに比べて並列化し辛いから結局goのが速いって聞いてんですけどそんな感じなの?
- 111 名前:デフォルトの名無しさん mailto:sage [2014/02/21(金) 22:04:36.27 .net]
- シングルスレッド遅い言語はどんなに並列化しても無駄
- 112 名前:デフォルトの名無しさん mailto:sage [2014/02/22(土) 04:50:05.65 .net]
- >>110
その手の、Erlangっぽい並列処理は、ライブラリレベルで実装可能。 Scala/JavaのAkkaがその実例。
- 113 名前:デフォルトの名無しさん mailto:sage [2014/03/17(月) 11:54:37.97 ID:JigeyuIH.net]
- 破壊的変更が毎週たくさんあるね
- 114 名前:デフォルトの名無しさん mailto:sage [2014/03/30(日) 07:00:36.43 ID:aNkl6/ok.net]
- 次期バージョンは0.10かね
- 115 名前:デフォルトの名無しさん [2014/04/14(月) 02:41:46.21 ID:AgBD4gFn.net]
- v0.10 is coming.
www.rust-lang.org/ https://github.com/mozilla/rust/blob/master/RELEASES.txt ・@ ポインタを remove ・do キーワードを remove ・etc...
- 116 名前:デフォルトの名無しさん mailto:sage [2014/05/21(水) 09:58:53.67 ID:Fj6ednoX.net]
- なんで1.0が出てから始めないん
- 117 名前:デフォルトの名無しさん mailto:sage [2014/06/09(月) 22:39:55.58 ID:nLviVS/4.net]
- DとかGoとかポストC気取ってるくせにCを駆逐する気がない言語より頑張って欲しい
- 118 名前:デフォルトの名無しさん mailto:sage [2014/06/12(木) 00:32:07.72 ID:e6x9cJlC.net]
- 頑張って欲しいけど、1.0 が遅いから Swift に浮気しちゃうぜ
- 119 名前:デフォルトの名無しさん mailto:sage [2014/07/06(日) 20:45:53.22 ID:8W/9eoDc.net]
- rustでRAIIはどう実現したら良いのでしょうか
- 120 名前:デフォルトの名無しさん [2014/07/09(水) 09:47:39.31 ID:ICY9ltLE.net]
- v0.11 is coming.
www.rust-lang.org/ https://github.com/mozilla/rust/blob/master/RELEASES.txt ・構造体のフィールドがデフォルトで private に ・private enum 変数が不許可に ・priv キーワードを remove ・`use foo, bar, baz;` シンタックスが remove ・……
- 121 名前:デフォルトの名無しさん mailto:sage [2014/07/26(土) 21:14:51.31 ID:fwCKMr/Y.net]
- Rust言語の明日は何処だ
- 122 名前:デフォルトの名無しさん mailto:sage [2014/08/08(金) 02:51:15.07 ID:lSQPAJbI.net]
- C++を駆逐するなら大歓迎だ
- 123 名前:デフォルトの名無しさん [2014/08/10(日) 14:07:48.02 ID:FUhgKhzg.net]
- >>122
俺も同意。 Rust頑張れ。
- 124 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 15:13:03.34 ID:rgbQez8I.net]
- それならDとGoに勝たないといけない
おれはRustに頑張って欲しいから早く1.0だして欲しいけど、もう手遅れな気はしてる
- 125 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 15:30:16.69 ID:AMGvL8Wx.net]
- DはともかくGoは厳しかろうなあ
- 126 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 16:15:08.44 ID:559thib6.net]
- GoではC++の駆逐はできないと思う。
たとえば、goでOSを作れるかというとそうではない
- 127 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 18:47:02.34 ID:mPHamUGI.net]
- C++の代わりになるのはCで作られたlibやDLLを直接呼べなくてはならないが
Dはヘッダーファイル作ればできるけど Goは問題外だった。 rustってどうやんの?
- 128 名前:デフォルトの名無しさん mailto:sage [2014/08/10(日) 20:21:22.22 ID:7WLKXo+Z.net]
- extern "C" とかつけて関数宣言すると、Cの関数が呼び出せる。
呼び出し時の余計なオーバーヘッドとかは今はなくなってるはず
- 129 名前:デフォルトの名無しさん mailto:sage [2014/08/12(火) 23:54:09.61 ID:pueQuLPm.net]
- 次のC++17までに実用になってなかったら逆に駆逐されるな
- 130 名前:デフォルトの名無しさん mailto:sage [2014/08/13(水) 16:43:46.11 ID:450ISMpY.net]
- >>128
おお、良いぞ。そんな感じで十分だ。 C++は規格化に関わってる連中が(ここだけの話)キモいので駆逐してほしい
- 131 名前:デフォルトの名無しさん mailto:sage [2014/08/20(水) 17:02:00.56 ID:cYiGvIKn.net]
- C++で中間コード吐き出すコンパイラ作ったほうが喜ばれる
- 132 名前:デフォルトの名無しさん mailto:sage [2014/09/17(水) 09:15:58.87 ID:y1+4ScdQ.net]
- Road to Rust 1.0 blog.rust-lang.org/2014/09/15/Rust-1.0.html
- 133 名前:デフォルトの名無しさん mailto:sage [2014/09/19(金) 01:19:00.42 ID:oDXr8xMe.net]
- はよ 1.0 になれ
- 134 名前:デフォルトの名無しさん [2014/09/25(木) 22:01:45.45 ID:/UWIY2F4.net]
- Mozillaは永遠にベータ版しか出さん連中だから無理
- 135 名前:デフォルトの名無しさん [2014/10/02(木) 23:11:57.53 ID:C3h6KQmN6]
- これ、C風の見かけのために curly braces { } 使ってるだけで、中身は露骨にML系言語だよね。
もっとML寄りの記法で書けるようにしてほしいなあ。
- 136 名前:デフォルトの名無しさん mailto:sage [2014/10/10(金) 08:24:39.99 ID:iwp7TUt6.net]
- [rust-dev] Rust 0.12.0 released
https://mail.mozilla.org/pipermail/rust-dev/2014-October/011267.html
- 137 名前:デフォルトの名無しさん mailto:sage [2014/10/10(金) 12:32:52.94 ID:tQ87SuYa.net]
- 1.0コネー
- 138 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 00:12:55.83 ID:wVymFFZ9.net]
- だいぶ見ないうちにもはや別言語になっとる。
es6みたいにどうせ新機能使ったら互換性なくなるのにbreak the webとか抜かして右往左往し続けて 仕様がコロコロ変更されるより元から破壊的変更上等だけどバージョンが安定しないな。
- 139 名前:デフォルトの名無しさん mailto:sage [2014/10/12(日) 23:09:08.17 ID:fD2p7D4P.net]
- moveって名前の関数つくれないんだ?
- 140 名前:デフォルトの名無しさん mailto:sage [2014/10/13(月) 01:56:12.89 ID:NYVg+AhM.net]
- moveはキーワードだから、使えない
- 141 名前:デフォルトの名無しさん [2014/10/21(火) 13:03:52.26 ID:4Y1dgKOT.net]
- 仕様が安定するのはいつですか
- 142 名前:デフォルトの名無しさん mailto:sage [2014/10/29(水) 00:30:10.05 ID:uvk5/wlk.net]
- &strとstringやっぱめんどくさい。
せめてリテラルの中に変数値埋め込むような書式が欲しいけどそれだとそもそも&strにならない。 もう文字列リテラルはstringにしてくれよ
- 143 名前:デフォルトの名無しさん mailto:sage [2014/10/29(水) 08:02:03.12 ID:PJ7XKhhs.net]
- 文字列リテラル書く度にメモリの動的確保するのは、
さすがに発狂ものだろ slicing_syntax使えば、.as_slice()が[]になるし、それで我慢してくれ
- 144 名前:デフォルトの名無しさん mailto:sage [2014/10/29(水) 08:43:24.44 ID:Seh2VPHk.net]
- stringといえばcoreutilsのコード読んでて思ったんですが
https://github.com/uutils/coreutils/blob/master/src/cat/cat.rs > let show_nonprint = matches.opts_present(["A".to_string(), "e".to_string(), "t".to_string(), "v".to_string()]); こういういちいちto_string()してるコードもうちょっと上手く書けませんかね
- 145 名前:デフォルトの名無しさん mailto:sage [2014/10/29(水) 21:06:45.55 ID:GrpYtfpz.net]
- これの解決方法を教えてください
melpon.org/wandbox/permlink/Ce549z8Z26NYtfpj
- 146 名前:デフォルトの名無しさん mailto:sage [2014/12/13(土) 09:03:40.20 ID:BbKnnj5O.net]
- Rust 1.0: Scheduling the trains
blog.rust-lang.org/2014/12/12/1.0-Timeline.html はよ
- 147 名前:デフォルトの名無しさん mailto:sage [2015/01/05(月) 00:17:31.79 ID:62ndYAiq.net]
- 公式のGuideに従って Hello, world! コンパイルしたら600kBくらいのができたんだけど、これ何が入ってるの?
たしかGoもこんなだったっけw
- 148 名前:デフォルトの名無しさん mailto:sage [2015/01/05(月) 23:04:03.12 ID:XrgG4/ce.net]
- >>147
標準ライブラリが静的リンクされてる。 jemallocとかサイズでかいらしい。 -C lto つけてリンク時最適化有効にすると若干サイズ縮むはず
- 149 名前:デフォルトの名無しさん mailto:sage [2015/01/09(金) 16:50:57.81 ID:1ny7jOif.net]
- ガイドページの右下に出てる
Rust 1.0.0-nightly ea6f65c5f って何?
- 150 名前:デフォルトの名無しさん mailto:sage [2015/01/09(金) 21:31:25.08 ID:ecLcmkaN.net]
- ドキュメントのバージョンだよ。
- 151 名前:デフォルトの名無しさん mailto:sage [2015/01/10(土) 09:03:15.68 ID:qZSZ4EVX.net]
- 1.0のalpha来てた
もうすぐ安定するんだと思うとなんだか感動する
- 152 名前:デフォルトの名無しさん mailto:sage [2015/01/10(土) 09:25:29.41 ID:aqSa96PR.net]
- 楽しみだね。
- 153 名前:デフォルトの名無しさん mailto:sage [2015/01/10(土) 10:50:52.48 ID:VYrUioRX.net]
- Guessing Gameまで来たら
↓が変な感じがする。値を返すかcontinueで離脱。例外みたいなノリなんだろうか let num = match input_num { Some(num) => num, None => { println!("Please input a number!"); continue; } };
- 154 名前:デフォルトの名無しさん mailto:sage [2015/01/12(月) 07:44:13.71 ID:V9nd0xt7.net]
- 見てきたけど
uint に変換できない場合 None が返って来て、 もう一度 loop の最初からやり直し なだけじゃないか? Option で返って来るのに慣れてないのかな? 例外については下記が日本語訳(ただし、前のverなので文法が違うかもしれない) ttp://qiita.com/kondei/items/c7175ed278bb4fbd4d16
- 155 名前:153 mailto:sage [2015/01/12(月) 14:05:00.11 ID:uQy2oTpW.net]
- ああなるほど、None(と言うか() のことかな?)を返してからcontinue動作したと考えればいいのか
- 156 名前:デフォルトの名無しさん mailto:sage [2015/01/12(月) 14:14:00.52 ID:smRTP4TA.net]
- そこ俺も違和感あった
HaskellやOCamlにおけるパターンマッチは条件分岐というよりも値の分解の意味合いがつよいと思うのだけど, Rustでは条件分岐としての側面が強いのかなと感じた 要するにif文ってことだよね
- 157 名前:デフォルトの名無しさん mailto:sage [2015/01/13(火) 00:20:23.58 ID:iAaaaZAE.net]
- 大域脱出と見ればそんなに違和感ないと思う
bookに記載はされてないけど縦棒で複数のパターンに対応させることもできるのな match foo { Bar | Baz => do_X, Huga => do_Y _ => do_Other } みたいなのもいけた。無かったら嫌だなと思ってたがreferenceにはあった
- 158 名前:デフォルトの名無しさん mailto:sage [2015/01/13(火) 21:46:02.73 ID:oe8+YAa0.net]
- >>156
ガチの関数型とはなんか違うfeelingと言うか空気感を感じる
- 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
本当だねえ。関数引数リストの中がゴミゴミしい
|

|