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

レス数が950を超えています。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/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になるくらい言語仕様が不安定

実に参考になる
2017/10/05(木) 02:42:46.62ID:e0oopfTd
>>909
mem順にしてもgz順にしてもcpu順にしてもD言語出てこないの悲しいな
2017/10/05(木) 04:56:45.53ID:ovcMkddr
d言語のメリットって何?
2017/10/05(木) 06:07:45.62ID:eC/9GoxN
C++ではないこと
2017/10/05(木) 09:06:46.27ID:NTKdykpp
>>910
人間が頑張って最適化した結果、C gccが上回ったんじゃないのかね

D言語はプログラミング人口少ないから・・・
2000年代の流行った頃ならもうちょっとスコアが出てたんじゃないかな
2017/10/05(木) 10:18:07.23ID:KYi0aOcC
RustもJavaも血反吐吐くほど最適化してるんじゃないの?
ポインタ扱いにくい言語でそれやると逆にコードが汚くなるから、
C言語よりも酷いコードになってるかもしれんよ。
2017/10/05(木) 10:41:40.98ID:j9fazbko
unsafe使ったらRustは更に早くなるのか・・・胸熱
取り敢えず、各コードを読んでから批評してはどうか

本家Rust Teamが改修して今のスコアだけど
彼らが直したのはI/Oにバッファ使おうぜってだけでそこまで変態的じゃないのよね
matchやmap, iterでクロージャー多用してるけど最適化コンパイルしたらif, forで書くのと同じ処理になるし

Option.mapは関数コールがあるから重たいかなと以前調べたら
LLVM中間コードの時点でインラインのif分岐(goto文)に展開されてベタコードと同じになるのかよと考えるのやめた
2017/10/05(木) 11:26:31.98ID:291DnPVM
>>909
C gcc 5.38
Rust #7 5.56
C++ g++ #3 7.18
Java 8.38

↑この並びでみると、Rustの速さよりもむしろJavaの意外な速さに驚く
2017/10/05(木) 12:31:31.21ID:mvbuHBBx
ぼくも同じこと思った…
2017/10/05(木) 12:49:03.43ID:i3OOJkl5
Javaは実行時最適化がはまれば速い感じ
でも、カリカリにチューニングされたJavaコードは、クラスをあまり使わずArrayだらけだっりしてつらい
2017/10/05(木) 17:58:39.05ID:DY6JRVMF
rlsもっと頑張って
replも提供して😭
2017/10/05(木) 18:51:45.79ID:BHTkAY6s
C言語の __func__ みたいなの無いのかよ〜
2017/10/05(木) 23:04:07.77ID:arvYOnSy
Javaやら.NET等のJIT系言語は速い速い言われるけど実際のアプリケーションでその速さを体感できたことは一度もないや・・・
2017/10/05(木) 23:35:19.66ID:AzAoa99L
>>909
rust#7はrayon使ってるから中身はcocoとfutureか。
ライブラリが頑張ってzero cost抽象化が効いてる感じかね。

javaはもうちょっと早くなるんだけどなぁ。
これ以上やるとjitとライブラリに丸投げして素直なコード書くことに
専念できなくなるからやりたくない感じ。
将来的にはconst arrayと、勝手にSIMD使ってもうちょっとマシになるかな。

>>919
連続してることが保証されないからカリカリにチューニングする時は配列には頼らないよ。
nio buffer使うことはあるけど。unsafe使わずに配列確保すると0クリアされて無駄に遅いし。
仮想関数テーブルなくしたほうが速いからメソッド検索>invokestaticのコストの時staticに変えるとか、
動的ディスパッチ自分で実装するときにconstant specific class bodyとtable switch組み合わせるとか。

>>921
ないけどrpすればすぐに入りそう。
2017/10/06(金) 00:32:27.39ID:ckjydJIo
>>923
>連続してることが保証されないから

それはもはやデータ構造として「配列」と呼ばれるものではないのでは……
2017/10/06(金) 00:59:19.34ID:PVLgxPLf
Dは仕様変更が多すぎた
926デフォルトの名無しさん
垢版 |
2017/10/06(金) 01:12:44.86ID:aJzo16CX
>>923
javaの配列って連続領域の保証されてないの?
2017/10/06(金) 11:58:56.15ID:R7tcOQE1
スレチだけど、JVMの実装仕様なんてベンダー依存でしょ, OracleとGoogleでも当然違うわ
928デフォルトの名無しさん
垢版 |
2017/10/06(金) 22:14:03.16ID:aJzo16CX
だから言語として仕様化されてないの?ってことだろ。
c++だって実装バラバラだけど連続領域な仕様だろ。
2017/10/06(金) 22:51:58.93ID:R7tcOQE1
Cはポインタ I/F仕様に引きづられて配列仕様も必然として明確にせざる得ないからでしょ
JVMはbyte codeの解釈さえあってれば良くて、データ操作の実装仕様は知るかよって話だよ
VM上では連続領域に見せかけても、実態は数チャンクに分けた配列の持ち方だってあろうよ
2017/10/07(土) 00:56:21.68ID:OPYXFct1
いやだから、データ構造としての「配列」のデータ操作の時間空間コストと
実装がズレてたらそれはもう「配列」じゃないから
2017/10/07(土) 02:30:16.92ID:tD6GhHlF
一般的に配列と呼ばれるオブジェクトがメモリアドレス上でも断片化しないことを保証される処理系ってほとんど無いのでは?
ミュータブルオブジェクトへ要素を継ぎ足していったらコードからは連続的に見えてもメモリ配置は断片化するだろう
2017/10/07(土) 04:32:31.86ID:OPYXFct1
「要素を継ぎ足していったら」がそもそもオカシイ
要素継ぎ足せるのはそもそも配列じゃなくてロープかなんかだから
2017/10/07(土) 08:20:38.57ID:PzpAWNqF
配列の要件ってインデックスで要素にアクセスすることくらいじゃないの?
要素のポインタをとって操作できる言語以外は実際の記憶領域が連続かそうでないか
判断する術はないと思うが。
2017/10/07(土) 08:39:14.98ID:rgSj2Elc
ポインタ操作だって処理系依存でどんな変態実装も理論上はあり得ると思うけど
C/C++の仕様を調べる気力がない
935デフォルトの名無しさん
垢版 |
2017/10/07(土) 09:54:16.89ID:h9TjUWM8
>>933
> 配列の要件ってインデックスで要素にアクセスすることくらいじゃないの?

じゃリンクリストでもいいってわけ?
インデックス操作は内部でポインタたどってさ。
2017/10/07(土) 12:18:14.74ID:bipqd+gM
配列だとインデックスのアクセスにO(1)を期待してるが
それが保証できるのかという話じゃないの
2017/10/07(土) 12:27:49.68ID:FDovMcEa
>>936
お前は話の最初から読みなおせw
オーダーのことなんか誰も気にしてないよ
2017/10/07(土) 12:40:30.10ID:efrwvuZ0
チューニングで気にするのはメモリ配置よりCPUキャッシュに乗るかどうかでは
そのとき配列のサイズが気にされるというだけで
2017/10/07(土) 12:44:02.10ID:bipqd+gM
>>937
>>930
これの解釈は?
2017/10/07(土) 12:59:08.16ID:PzpAWNqF
データ構造としての「配列」と言語機能としての配列は別の話だから。
2017/10/07(土) 14:30:31.33ID:bipqd+gM
O(1)でもO(n)でも a[i]と書けるなら配列だって感覚?
そう考えるのは自由だがまともな話はできなさそうだな。
2017/10/07(土) 15:00:19.40ID:FL3S/Goc
Rustの話はないんでしょうか
943デフォルトの名無しさん
垢版 |
2017/10/07(土) 16:04:55.47ID:+/+oWVUp
そんなの処理系によるわ
動作は変わらないからどうでもいい
2017/10/07(土) 17:48:20.09ID:M+fCWBh9
JavaScriptのArrayを配列と呼ぶのは間違いだ!
と吠えている人がいますね
2017/10/07(土) 19:34:14.94ID:efrwvuZ0
そんなに気になるならソース見に行けで終わり
2017/10/07(土) 20:58:38.51ID:PTRnmd1t
>>941
逆にちゃんとした定義ってあるの?
2017/10/08(日) 00:52:44.13ID:riNh/ezn
>>943
>そんなの処理系によるわ
>動作は変わらないからどうでもいい

オーダーの違いはまさに動作の違い

> JavaScriptのArrayを配列と呼ぶのは間違いだ!
> と吠えている人がいますね

データ構造としての配列じゃないのはそうだろ
配列じゃなくてハッシュマップですよねー
というのがマトモなCS出身者の反応
2017/10/08(日) 07:38:16.10ID:whyFhQ9X
引き続きオーダー厨がフィーバーしてんなw

>>946
>>926, >>928曰く、C言語には仕様として配列は連続領域であることが決まってるらしいよ
んで、Javaでは特に連続領域で実装することを仕様と定めてないよねーって話をしてんだろ
2017/10/08(日) 08:29:08.64ID:Eg4i3QFB
>データ構造としての配列じゃないのはそうだろ
>配列じゃなくてハッシュマップですよねー

結局、それまで展開していたオーダー云々の論理はどっかにやって
「配列じゃないものは配列じゃない」ってかw
2017/10/08(日) 09:02:22.19ID:p8wkQapI
ポインタの値が連続でも実メモリ空間のアドレスは連続とは限らないし
そのあたりのアドレスの連続性の抽象化をOSでやるか言語の処理系でやるかの違いと思えば
配列の要素の仮想メモリ空間でのアドレスが必ずしも連続ではない言語処理系があっても良いと思う
2017/10/08(日) 09:38:42.04ID:whyFhQ9X
>>949
配列とは、連続領域で確保されO(1)でアクセス可能なものと(俺の中で)定義する
それ以外の仕様、実装による配列は配列とは認めない

という論理で一応オーダー云々も彼の中では含まれてるんじゃないかな
ポインタのポインタで配列を設計したら、それはもうハッシュであり配列ではない的なことも言ってるし
多数の言語仕様, 言語処理系で配列ではないものが配列として扱われてて大変そうだなって思うね:D
952デフォルトの名無しさん
垢版 |
2017/10/08(日) 10:03:07.61ID:W71T9805
JSのArrayは配列じゃなくてリスト
TypedArrayが配列

メモリが連続化を気にするとかどれだけ低レベルな言語使ってるんだ
インターフェイスが同じなら実装とかどうでもいい
老害かよ
2017/10/08(日) 10:54:24.49ID:T4FplNPL
データ構造の読み書きのオーダーも仕様の内だけど、メモリ上のレイアウトまで仕様という考えはマイナーじゃない?
アドレスを当然のように明示的に扱う言語だと当然の範疇かもしれんし情報として提供して欲しいけど、そうでない言語ならn番目の要素へのアクセスがO(1)であれば配列でいい
で、Rustはアドレス直触りは可能だけど普通はやらない。Cみたいに構造体のメモリ上の表現がはっきり決まってるわけでもないし
2017/10/08(日) 15:41:19.83ID:EDHW4lpZ
>>951
> 配列とは、連続領域で確保されO(1)でアクセス可能なものと(俺の中で)定義する

そう思うのは勝手だけどそれに基づいて他人を批判するってどんだけ独善的なんだ
2017/10/08(日) 18:42:51.40ID:4PvrPlQX
そろそろRustの話に戻してくれ
2017/10/08(日) 18:57:23.11ID:riNh/ezn
array data structure でググるさま
2017/10/08(日) 20:18:32.63ID:whyFhQ9X
>>952
(配列の定義を)お前がそう思うんならそうなんだろう お前ん中ではな
ちなみに、Rustスレ住民はRust言語を使ってるゾ

>>953
Rustのstructメンバは連続を保証してるんでなかったかいな
repr((C)で宣言した時に限ってるんだっけ、unsafe多用してる変態がいたら教えてくれ
2017/10/09(月) 00:25:52.32ID:KLfOKOYK
>>933
それって、(一次元)コンテナでは。
で、コンテナの実装方法として配列やらリンクドリストやらが存在する。
2017/10/09(月) 00:29:02.79ID:KLfOKOYK
>>952
> インターフェイスが同じなら実装とかどうでもいい
そういう目的にはrust使う必要なくね?
2017/10/09(月) 00:30:54.57ID:KLfOKOYK
>>953
Rustがそういう態度だと言うのなら、C/C++の代わりには使えないなぁ
2017/10/09(月) 01:24:12.13ID:EU3MdReC
>>953
システムレベル言語でそれは無い
2017/10/09(月) 07:09:58.47ID:HQb3QT54
https://play.rust-lang.org/?gist=9e8a69e064b98d48c48e237d87d005a1&;version=nightly

これ、少し前の nightly-2017-09-15-x86_64-apple-darwin だと通るのに、
最新の nightly だと conflicting implementations を起こすな。
rustup update したら急にビルドに失敗して驚いた。
2017/10/09(月) 08:32:46.93ID:/FMCjJgs
nightlyが仕様変更したりバグったりするのを逐一驚いてたら大変じゃない?
2017/10/09(月) 09:00:12.81ID:CsWYGxTc
>>958
もともと配列やその他のデータ構造からインターフェースのみ抽出したものがコンテナなんで、
それを言語仕様の側からは単に配列と称していることはあるだろう。
仮にそれを認めないとしても、元の質問の「JVMの配列は連続しているか」が「JVMのコンテナ(?)は
連続しているか」になるだけ。
2017/10/09(月) 10:26:26.16ID:EKQlpQJF
いるなぁC++のプロジェクトでarrayで十分なところに無駄にmap使いまくるやつ
おっさんプログラマとしては看過できないんだが(少なくとも仕事では)
これが時代なんだろうか
2017/10/09(月) 11:43:46.40ID:iPiyLv0T
なにか問題でも?
2017/10/09(月) 14:35:43.67ID:y6Coq1tU
メモリコスト、CPUコストについて定量的に説明できるかな
2017/10/09(月) 14:47:42.14ID:5Wk6yJf6
自分もどちらかと言えば効率厨のつもりだけど
実行コストと可読性が大差ないなら好きな方を使えばいいと思う
2017/10/09(月) 15:19:06.41ID:ICZ1WqoM
コンテナ使うとコストが見えにくくてよく分からん
2017/10/09(月) 17:24:05.08ID:65lUV9pA
さすがに array と map ではアルゴリズム自体違うわけだしそれはなしだろ。
2017/10/09(月) 18:49:17.20ID:GUc1DOLO
Vec<f32> を Vec<f64>に変換したいのですがどうしたらいいでしょうか?
やりたいのは
&[f64]を引数として受け取る関数にVec<f32>の内容を渡したいのですが。
2017/10/09(月) 20:31:04.63ID:2SZ05bPF
https://play.rust-lang.org/?gist=0cd6e0b3f8c028d720b6936505df6c9b&;version=undefined

受け取る関数がTraitでf32, f64を受けろと思うけど、外部ライブラリで作ってるなら仕方ないんだろうよ
レス数が950を超えています。1000を超えると書き込みができなくなります。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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