プログラミング言語 Rust 3 [無断転載禁止]©2ch.net

レス数が900を超えています。1000を超えると表示できなくなるよ。
1デフォルトの名無しさん
垢版 |
2017/05/21(日) 14:04:29.55ID:9L9dm7b/
Mozillaがリリースした、プログラミング言語「Rust」について語るスレです。

http://www.rust-lang.org/
https://github.com/rust-lang/rust

Servo
https://servo.org/
https://github.com/servo/servo

◆前スレ
プログラミング言語 Rust 2
http://echo.2ch.net/test/read.cgi/tech/1478023960
2017/09/14(木) 12:55:00.43ID:NnJxH7VV
RustやSwiftとかの次世代言語ってOracle製品やSAPみたいな所あるよな。
無駄に抽象化して変な専門用語作って、プリミティブなエンジニアを寄せ付けない感じとか。

コマンドラインで一発で出来るようなことを、独自用語だらけのGUIでポチポチ操作させてんの。
こういう文化は本当に良くない。優秀なエンジニアはみんな逃げてしまう。
2017/09/14(木) 13:54:06.68ID:1DVuzpHn
>>810
コンパイル時に全部解決しなきゃいかん
てな話のがよっぽど根性論だと思うが。
2017/09/14(木) 17:19:47.64ID:n0wq55dM
人間が気をつけてコードを書けばバグが出ないはずというのは根性論では
2017/09/14(木) 18:36:21.42ID:DdS4QLGS
人に依存するC/C++は日本的
システムが面倒を見てくれるRustはアメリカ的
2017/09/14(木) 19:05:26.17ID:1DVuzpHn
バグが出ないことよりも手法に熱中しちゃう方が日本的だなとか思っちゃうけど。
2017/09/14(木) 19:14:58.28ID:NxItWvHk
形容詞化する国名
2017/09/14(木) 20:08:31.29ID:wsl9UgI1
〜的ってつければなんだって形容詞になるの?

人に依存するC/C++はC/C++的
システムが面倒を見てくれるRustはRust的
2017/09/14(木) 21:28:39.91ID:ekPhWBa7
C/C++でもバグが出ないほど規模が小さい or 言語への習熟度が高いならC/C++使えばよいし
そうじゃないならRust使えば良いとしか言ってないのだが
2017/09/14(木) 21:51:38.65ID:egb+Ths/
単純に「巡回グラフを始めとした自己再帰型のデータ構造を書き下せない(コンパイラが通してくれない)」って時点で、書けないプログラムの存在を認めてしまってるんだよなRustは

その上C言語にはValgrindやらcppcheckやら、金かかっていいならCoverityやら、いくらでもその手のツールはあるわけで、
Rustならではの点ってどこにもない割に欠点だけ目立つ訳よ

肝心の抽象化も機能足りてないしな。Nightly使えばなんぼかマシだが
2017/09/15(金) 00:12:38.69ID:znUIhbu+
どうしても全部Rustだけで実装したいのか
2017/09/15(金) 00:29:00.00ID:tkwXjMs/
△全部Rustだけ
◯全部safe Rustだけ
Escape hatchの類は使いたくないというsafe Rust信仰の裏返しというツンデレなのでは
2017/09/15(金) 01:05:02.21ID:QM7YGf64
How can I implement a graph or other data structure that contains cycles?
https://www.rust-lang.org/en-US/faq.html#how-can-i-implement-a-data-structure-that-contains-cycles
2017/09/15(金) 13:00:11.59ID:3YdKOJD0
できるできないレベルの話をしているのか、やりやすいやりにくいレベルの話をしているのかどっち
2017/09/15(金) 13:25:48.45ID:5eAkzQwm
できない => できるよ => やりにくい => そうねー => 応答終了, 最初に戻る

こんなのをずっと繰り返してるイメージだ
モジラ/Rustネガキャン君とRustのコンパイルが通るならCを使えば良い君の二人なのかな
二人とも長いこといるし、コンパイル通せないRustが相当憎いんだろうなぁと思ってる
2017/09/15(金) 23:54:50.13ID:mfxKdXka
Cだって肝になるところをアセンブリで書くのはまれによくあることだし、
Rustで書きにくいところをCで書いたっていいよな
2017/09/16(土) 02:17:34.76ID:lHsVDIMy
Rustのコンパイルが通るならCを使えば良い君は、暗黙のうちにCで完全なメモリ管理を行うことの困難さを訴えているんだよきっと
2017/09/16(土) 06:49:34.00ID:bgl6NL4A
変な人がわくほどメジャーな言語になったんだなぁ
2017/09/16(土) 12:21:42.89ID:CDKitgfC
てか細かいとこ C で書いてあとは軽い言語から呼ぶとか普通してるじゃん。
一つの言語で無理やりやろうとするからどっちつかずになるんじゃないのかね。
2017/09/16(土) 12:23:12.97ID:FR19qSmR
>>828
RustがC(++)の後継目指してるとか言わなきゃこんなに言わんよ
2017/09/16(土) 17:33:19.57ID:hyq1PMdM
C(++)の座が奪われると危機感を感じて
「Rustのコンパイルが通るならCを使えば良い」と必死なのかw
置き換わるにはまだまだ先が長いから安心して自分の巣にお帰りに
2017/09/16(土) 17:34:53.66ID:lHsVDIMy
Rustのコンパイルが通るならCを使えば良い(自分はできるとは言っていない)
2017/09/16(土) 20:08:37.91ID:OnGiRDkA
実際に使ってる人たちは本当にいつかRustがC(++)に置き換わると思ってるの?
2017/09/17(日) 00:38:06.21ID:NXS5TlTy
RustがC/C++の後継目指してるなんて公言してるのか
2017/09/17(日) 09:53:24.02ID:2FAjS2AD
一応Goもc++の置き換えを想定した言語らしい。もっともgoogle社内の話だが
2017/09/17(日) 12:44:11.46ID:7diltdBj
>>830
×まだまだ先が長い ○先にモジカスが世界から消滅する
先が長いとか言ってる時点でモジカスのステマに荷担してると理解しろ

Rustがプログラミング言語を名乗ってるのはモジラが自由をお題目にしてるのと同じレベルの害悪だ
836デフォルトの名無しさん
垢版 |
2017/09/17(日) 15:13:14.19ID:9f3JHXln
複数のResultのNGをXORでまとめて(途中match分岐入れず)処理するのてどうすればいい?
超極稀に失敗する変な返り値を格納しても副作用の無い処理の連なりをゴソっと捨てる方法
2017/09/17(日) 16:26:31.76ID:IHBqIXQE
>>833
少なくとも firefox の c/c++ 部分の書き換えを想定してるだろう。
まあ c/c++ と一口に言っても結構レイヤーは広いように思う。
てきとうなサーバープロセスなら確かに go は書きやすいよ。
rust にそういうエリアがあると思えんというところが問題の焦点じゃないかね。
2017/09/17(日) 17:40:27.30ID:aqlfcEMy
>>836
求めてるものかどうかわからんが、Iterator<Item=Result<t, E>>はcollectでResult<Vec<T> , E>などにできる
2017/09/17(日) 19:45:22.12ID:0mVr+JRg
相当雑いけど>>838の実装例はこんな感じかな
ttps://play.rust-lang.org/?gist=c87421997c42f0dfa8aa6ecabbb7ba3b&version=stable

性能を突き詰めるならcollectしないでfilterの戻りをnextで回すべきだけど適当に
確か100万回くらい回したら数秒の差が出るくらいのはず
2017/09/17(日) 23:03:20.12ID:xQI4uTVr
>>839
そういや、こうやって変数のシャドウイングを積極的に使っていくのってどうなんだろうな?
俺はよくやってるけど、スタイルにうるさい人から怒られるかもとか思ったり
2017/09/17(日) 23:17:40.08ID:tCD9jFlM
>>839
https://play.rust-lang.org/?gist=4f2e38dd8570a14eb1801137a183e40d&;version=stable
こういう途中Errがいたら戻り値もErr、全部OkならOk<colletion>な意図だった
2017/09/17(日) 23:18:40.79ID:tCD9jFlM
collectも#inlineついてるなら手でfor書くのと同じになりそうだけど遅くなるのか
ExactSizeIteratorとただのIteratorで違うとかならわかるんだが
2017/09/17(日) 23:25:16.47ID:ks3Dkyyp
OCamlだと普通なんで読みにくさを感じたことは無いなあ
むしろその変数はそこで終わりです、もう頭に入れとかなくても良いよってことだから脳にやさしいとまで感じる
2017/09/18(月) 08:30:10.39ID:KEjrNeQk
>>842
collectの関数コールは最適化されて消えるけど、collect内でVectorを作る分があるからな
メモリ確保して、要素をコピーしてって誤差程度だけどコストが乗っかる

filterまでだとFilterは作るけど要素のコピーはしてない感じだったから
他言語, 他ライブラリのfilterメソッドの戻りで配列/リストを作り直すIF/実装に比べて比較的早そうだと思った
2017/09/18(月) 11:26:55.19ID:/3RzmXHq
なるほど、Vec作るコストという意味なら確かにcollectはコスト掛かるね

まとめて処理というのがIteratorの要素からなる配列などのデータ構造を作って何かすると理解していたけど、
そうでないならば
f.map(¦x¦ {do_something(); }).collect::<Result<Vec<()>, _>>()
とすれば作られるのはVec<()>で、要素サイズ0だからヒープからはメモリ割り当てられないはず

これやるぐらいならfor使った方が
2017/09/18(月) 14:28:43.98ID:nF8z8OFK
一方C言語ならそんな面倒なこと考えずにallocしてforでいい
学習コスト高くて性能も低い言語Rust
2017/09/18(月) 16:37:25.22ID:JVxZ+5NP
alloc?
2017/09/18(月) 17:16:35.57ID:nF8z8OFK
>>847
mallocとcallocのことをまとめてallocって言うんだがまさかRust民そんなことも知らない?
2017/09/18(月) 17:40:00.45ID:2cmO/IBQ
俺たち、ついさっきまでzero-allocationな実装方針について話してなかったっけ……?
2017/09/18(月) 17:48:40.40ID:/3RzmXHq
せんせーallocaはallocに含まれますか
2017/09/18(月) 18:07:06.15ID:/S27bRBH
定義による
スタックから確保するものと
ヒープから確保するものを
どちらもallocと呼ぶなら含んでる
2017/09/18(月) 18:11:47.24ID:iR2mDVT9
>>849
ゼロアロケーションつっても最初の一回はallocするだろ?
その後forでナメながら変換すれば単純で早くてコンパイルも通ってモジカス涙目みんな幸せって言ってんの
無駄に難しく考えるモジカスシンパらしい話だな

>>850
非標準関数はNG
2017/09/18(月) 18:15:30.06ID:2aiOt6ta
基地外って同じ言葉を連呼するからNGし易くて助かる。
2017/09/18(月) 19:17:59.90ID:ndBW2Q0n
要素サイズ0のVecはヒープからメモリ獲得しないと明言したはずなのですが
2017/09/18(月) 19:24:02.49ID:JVxZ+5NP
>>846の書くヒープアロケートするCコードはスタックアロケーションのみのRustコードより高性能なんだよきっと
2017/09/18(月) 19:39:48.02ID:K4Qo/KNH
>>853
造語症っていうんだっけか?

それはそうとRustでCのmallocやcallocと同じ操作ってBoxであってVecではないよなあ。
2017/09/18(月) 19:56:01.80ID:2cmO/IBQ
低級言語で書けばそれだけで性能が良くなるって勘違いはよくあるよな

>>856
どっちもヒープを使ってるから同じでええやろ
2017/09/19(火) 01:46:56.36ID:EmWEVfWy
話が明後日の方向に行ってるけど
>>844の主点はVecを作るコストではなくVecに要素コピーするコストの方だぞ
filterで除外した要素をcollect内でVecにせっせとコピーするからちょっち時間かかる

ちなみにC(++)でベタに実装するとこんな感じでリスト作成、要素コピーするからドングリの背比べ
std::list<char*> filter_collect(std::list<char*> v) {
std::list<char*> new_v;
for (auto i = v.begin(); i != v.end(); i++) {
if (*i != NULL) {
new_v.push_back(*i);
}
}
return new_v;
}
std::list<char*> v{"Hello", NULL, "World"};
auto new_v = filter_collect(v);

モジラ/Rustネガキャン君とRustのコンパイルが通るならCを使えば良い君が
よりよいCコードを挙げてくれるのをちょっと待ってみようか, 流石にこれは汚すぎる
2017/09/19(火) 01:57:29.08ID:yqqf+3Rr
(そもそもの>>836が何をしたいのかいまいち分かっていないなんて言えない)
2017/09/19(火) 09:23:52.82ID:b711gf7K
これをCというか
いやまあC++としても酷いが
2017/09/19(火) 09:49:54.63ID:EmWEVfWy
(大丈夫、俺も分かってない...多分>>841さんの実装例が期待コードだったんだろうと匙投げた)
2017/09/19(火) 11:20:24.23ID:yHWjYg1H
仕様分からないのに実装しようとするRustの文化すげー
2017/09/19(火) 18:29:28.71ID:zYSzUAzu
そういえばRustってそもそもまだ言語仕様がなかったっけな(RFCが通ってない)

そんな言語を良しとするモジカスとそのお友達
2017/09/20(水) 07:39:00.40ID:D+wOfrtb
RubyやLua等も商用でも使われているけど公式な言語仕様って存在しなかった気がする
2017/09/20(水) 08:58:49.24ID:q1jVsKYV
RFCが通るとはどういう意味だろう
まさかIETFの話ではないだろうな
2017/09/20(水) 17:20:54.79ID:8IyKZYzR
https://github.com/rust-lang/rfcs
2017/09/20(水) 17:30:21.92ID:KkNJUG2l
https://github.com/rust-lang/rfcs/blob/master/text/2113-dyn-trait-syntax.md
さすがにこのSyntaxはダサいぞ?
2017/09/20(水) 18:24:29.42ID:8IyKZYzR
どうせならいっそ新しいepochでbare Traitのシンタックスでimpl Traitのセマンティクスを表すように変えて欲しくもあるけれど、motivationでも言われている通り互換性の観点からしてまあ無理だわな
理念には同意できるけど、うーむ……ダサい
2017/09/20(水) 18:24:58.43ID:SerGpeBo
じゃあ討論してるIssueに行って、ダセェからこうしようぜって具体例を提案してこい
良さげだったら(y)押してやんよ
2017/09/20(水) 18:39:23.24ID:Yecv0E+U
これがダサいとかいうならimplとかpubなんてクソの山だろ

>>868
impl Traitのセマンティックスに置き換えたところで例えばVec<Display>にi32とStringを両方突っ込もうとしてエラーになるようなへまをする連中は消えないだろ

>>869
もうFCP過ぎてマージされてるんだよなあ
2017/09/20(水) 18:42:43.35ID:DfdXTJVQ
誰か3行で
2017/09/23(土) 12:28:08.72ID:47xDJ4SG
rustの三文字文化好き
mut, str, len, vec, rev
2017/09/23(土) 13:46:38.85ID:Cgi1rfOq
変数名にしたかったのを予約しやがって!でもある
2017/09/23(土) 14:49:56.77ID:ebiRk4qs
Contextual keywordって書いてある
2017/09/23(土) 15:11:25.15ID:aCorn/qh
let str = "Hello";
let str: &str = str;

これで普通にコンパイル通るしな。
変数名に出来ないのは>>872の中じゃ mut だけだろう。
2017/09/23(土) 19:15:33.07ID:nrpIGIl5
str, len, rev
あたりは変数名として結構使うかな。
str , vec あたりは s, v くらい短くすることもある。
2017/09/24(日) 17:44:10.64ID:VL5Szw+L
比較演算子 ==, <, > 等って、同じ型同士でしか定義できないのか
2017/09/24(日) 20:16:16.24ID:dG0lqnCY
それはEqとOrdの話でしょ
PartialEqとPartialOrdは別の型同士でも定義できる
2017/09/24(日) 20:38:52.59ID:VL5Szw+L
あ、ホントだ。出来たわありがとう。

use std::cmp::PartialEq;

struct Foo(i32);

impl PartialEq<i32> for Foo {
fn eq(&self, other: &i32) -> bool {
self.0 == *other
}
}
880デフォルトの名無しさん
垢版 |
2017/09/27(水) 15:23:55.91ID:ENHC296h
Firefox Quantumリリースだってよ
2017/09/27(水) 23:11:15.94ID:r8V8UQwO
Rust 1.20、関連定数などを追加
https://www.infoq.com/jp/news/2017/09/rust-1-20-released
2017/09/28(木) 00:21:45.83ID:FngsmGBk
時報が壊れたと思ってたら、常時一ヶ月遅れの情報サイトをソースに時刻通知がきたよ
本人じゃなく模倣者だろうけど次回からは一次ソースのサイトをトリガーにしような!
2017/09/28(木) 00:30:16.29ID:fGSoqmif
何でこの人こんなに怒ってるんだろ?
2017/09/28(木) 00:53:16.99ID:FngsmGBk
1. 時報が壊れたことに怒っている
2. 一ヶ月遅れのinfoqをソースにしたことを怒っている
3. 模倣者であることに怒っている
4. その他

どれだと思う?
2017/09/28(木) 02:25:57.30ID:uh95Bh7/
一ヶ月入院でもしてたんだろ
許してやれ
2017/09/29(金) 10:21:58.71ID:YdXqj+6X
CもObjCもここ数年は仕様変更がないから、コンパイルはそのまま通る。
変なコード書いてなければ動作確認も問題なくパスする。
メンテナンスフリーって言われれば確かにそうかもな。

あとはフレームワークで非推奨にになったメソッド書き換える程度だけど、
これはSwiftと共通の作業だし、そもそもやらなくても動く。
とにかくSwift移行していない俺は毎年高みの見物してる。
2017/09/29(金) 10:22:21.88ID:YdXqj+6X
すまん誤爆した
2017/09/29(金) 11:26:40.22ID:YA9Keehz
これが小学生のおっぱいかよ・・・
12歳の乳とは思えんな・・・
2017/09/29(金) 11:51:24.12ID:2cPiFSeP
誤爆しすぎだろ。
2017/09/29(金) 22:06:45.55ID:7WUGaaf4
rustの前にc++とhaskellぐらいはやっておくべき?
2017/09/29(金) 23:43:36.68ID:w5CvkGV8
C++なんてやらんでいい。haskellよりOCaml寄りじゃね?

C++よりメモリ周りが「javaからgcとロック付きオブジェクトとモニタと
並列ライブラリがなくなった」代わりに低レベルなマルチスレッドコード書けば
型システムが守ってくれるモノが近い。
2017/09/30(土) 00:20:49.42ID:BhtSjkD0
所有権の概念はC++のmove semantics回りが近いと思うけどな
まあゲーム作るとかじゃなければわざわざC++やらなくてもいいと思うけど
2017/09/30(土) 22:05:33.32ID:uuI0Lqz4
Rust言語による第一プロダクトのFirefox Quantumですが
ベータ版リリースの時点でアドオンがお亡くなりになったとか、不安定でどうしようもないとか、メモリ食い潰して落ちるとか
様々なお声が聞こえてきますね

これがRustという安全な言語で作ったプロダクトなんですってね
おめでとうございますモジラ信者と工作員の皆様
2017/09/30(土) 22:25:31.06ID:BhW5NZCu
アドオンが不安定ってのはRust関係なくね?
895デフォルトの名無しさん
垢版 |
2017/09/30(土) 22:38:45.63ID:ATIH6GBG
ベータ版の意味も知らないガイジやんけ
ガガイのガイw
896デフォルトの名無しさん
垢版 |
2017/09/30(土) 22:39:37.33ID:ATIH6GBG
あそれあそれガイジが出た出たよよいのよいw
2017/10/01(日) 00:00:05.60ID:HKOr6Xa1
>>894
API鞍替えのせいだから全く関係ない。
メモリも関係ないし、むしろ最近はバージョン上がるたびに消費メモリ減ってる。
というかパフォーマンス良くなったのは設計が変わったからで言語は関係ない。
言語関係する部分はC++よりマシだから書きやすくなったこと。
2017/10/01(日) 00:42:35.99ID:5jXWEgsq
>>897
設計の変更って具体的に何を変えたの?マルチスレッドに強いとか?gpuぜんていとか?
2017/10/01(日) 23:58:38.97ID:HtGiOKW4
>>898
HTMLの描画周りがマルチスレッド前提になっただけよ。
シングル前提でやるとHTML/CSSパース、DOM構築で同期取りまくりが減っただけ。
うちのmem 4g, 2core環境だとハードが足引っ張ってたから多分mem 8g, 4coreくらい要ると思う。
ここ数年のロースペックマシン以上が恩恵受けるんじゃ?
gpu前提はwebrenderだからまだ入ってないんじゃない。
2017/10/02(月) 00:20:10.84ID:cuHSEpt/
あ、悪い。webrenderもう入ってるわ。
webrenderとstyloが入ってるからもうマルチスレッドにgpu前提。
2017/10/02(月) 11:21:20.04ID:pqkzvat0
Firefox爆速化件だけど、あのタイミングでRust化してればRustにも一気に注目集まったのにな。
もったいないな。
2017/10/02(月) 14:16:58.24ID:5q9eN7RZ
w3mの代替になるコンソールブラウザがほしいところ
2017/10/04(水) 00:06:33.86ID:eeE5kOTG
lynks、links、EWW(Emacs)ではいかんかった?
2017/10/04(水) 01:21:42.46ID:Eb49UXKr
それよりAmayaの後継をwhatwgに作って欲しい
2017/10/04(水) 09:33:38.58ID:xy+7bXnG
>>901
cssはrustになったんだよね?
906デフォルトの名無しさん
垢版 |
2017/10/04(水) 17:45:04.59ID:U/p5CYqb
FizzBuzz を無駄にベンチマークしてみた By Nim、golang、Rust、Crystal、その他
http://wolfbash.hateblo.jp/entry/2017/07/25/232027
2017/10/04(水) 19:54:27.21ID:eSRFZM0D
なんというか、、参考にならないベンチマークだな。
908デフォルトの名無しさん
垢版 |
2017/10/04(水) 23:17:46.14ID:aUT+fN/H
参考になるベンチマーク教えてくれ
2017/10/05(木) 00:04:55.49ID:NTKdykpp
http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=knucleotide
ここの諸々

久しぶりに見たらC gccがついに抜き返しててワロタ
C言語、頑張ったじゃん
2017/10/05(木) 01:11:32.12ID:froF/tdj
>>909
6パターンだった頃は全部実行出来てたけど速度はバラバラでたしか#5が最速でC言語より速かった
きっと最適化を人間が制御するのは難しくて頑張らないとJavaやC#にも勝てない
現在7パターンあるけど4つがmake errorになるくらい言語仕様が不安定

実に参考になる
レス数が900を超えています。1000を超えると表示できなくなるよ。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況