プログラミング言語 Rust 4

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2017/10/14(土) 17:38:14.04ID:uWD69LeP
Mozilla発のプログラミング言語「Rust」のスレです

公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

前スレ
プログラミング言語 Rust 3
https://mevius.5ch.net/test/read.cgi/tech/1495343069/
2017/11/28(火) 06:59:54.84ID:bNHGW3XK
コピーってmut並みに最適化してくれんの?
2017/11/28(火) 07:35:10.58ID:oe1VgQrD
あ、そういうこと。むりやりイミュータブルにする人たちがいるのか
2017/11/28(火) 09:28:24.80ID:L9vMnZgT
静的型付け初めてなんだけどいきなりRustは敷居高いだろうか
2017/11/28(火) 10:02:32.22ID:hv4LFVGU
>>300
> イミュータブルに拘ると、コピーだらけになる
> コピーを恐れてるとイミュータブルを徹底できない

例出してみ
2017/11/28(火) 12:38:41.40ID:Q+QzpY2X
イミュータブルとかメモリを富豪的に使うだけで性能はなんら上がらない、いかにもお偉いさんが机の上だけで考えたクソ手法だろ
なんでFortranやCが現役なのか考えたこともないやつがイミュータブルをもてはやす
2017/11/28(火) 12:59:41.96ID:ZfJDlsQ3
メモリが富豪的って、それお前の設計が悪いだけやで
2017/11/28(火) 13:02:27.70ID:318e3gj2
それは言い過ぎだろ

なんでもイミュータブルにするべきとは思ってないが、
並列性が必要なプログラムではイミュータブルは重要視しているよ

並列性が性能に直結しない(難しい)のは残念な話だけど……
2017/11/28(火) 13:47:27.77ID:Q+QzpY2X
>>306
値変えないならコピーするしかないだろ。それが富豪的でなくてなんなんだ?

>>307
並列計算で必要なのはイミュータビリティじゃなくて、変数スコープ分離と外部依存性の無いアルゴリズムだ

大方MPIすら使ったことないんだろうが、
共有リソースにアクセスしなきゃいけない並列プログラム組んでる時点で
設計が破綻してるとみなせると思うがそこんとこどう考える?
2017/11/28(火) 14:14:02.57ID:hv4LFVGU
このバカ、コンパイラが良きに計らうってことを知らんのか?
2017/11/28(火) 14:26:19.19ID:GpBjXyhn
>>292
thx
なるほど、コンパイル途中でエラーすると一部の推論に失敗してしまうのか
2017/11/28(火) 14:42:06.12ID:LCKhcLzq
const に異常にこだわるくせに異常に長い関数書く馬鹿は見たことあるな。
その前に関数切り出せと。
たぶん Rust が一般に広まるとボローイングルールをまともに理解できなくて
コンパイルできないから関数に切り出さないバカが増えると思われる。
2017/11/28(火) 15:17:40.57
イミュータブルにすることでコンパイラによる最適化の余地が増えるんでないの?

ミュータブル派とイミュータブル派の宗教戦争勃発なの?
2017/11/28(火) 15:25:32.16ID:Q+QzpY2X
コンパイラが善きに計らうって、
つまりconstついてた(mut非指定の)変数がレジスタ割り当ての結果変更され得る最適化が起こるってことか?
さすかにそんな最適化は聞いたこと無いがソースあるのか?
即値展開ならわからんでもないが、それと並列は関係ないし
2017/11/28(火) 16:00:32.21ID:lii/QdBe
アマゾンでオライリーのProgramming Rust出てるのな
アーリー版じゃ無い完全版かな?

どうでも良いけど蟹座の俺が心惹かれる表紙
2017/11/28(火) 16:21:14.75ID:318e3gj2
>>308
「使ったことない」って人を判断したがるのは使ったことを自慢したいから?
ある数学上の問題を高速に解くために 2000年ぐらいにMPI を数ヶ月触ったことある程度で
以降は関わってないけど、それはなんか関係あるのか?

設計が破綻しているかどうかは問題によるだろ
どんなに考えても共有リソースにアクセスしなきゃいけない並列プログラムなんて山ほどある

共有リソースへのアクセス削減なんてみんな取り組んでる
そのための一ツールとしてイミュータビリティは重要な概念だろJK

> 並列計算で必要なのはイミュータビリティじゃなくて、変数スコープ分離と外部依存性の無いアルゴリズムだ
「重要視」と言ってるのに「必要」と解釈するのか……
変数スコープ分離という用語は知らん
2017/11/28(火) 18:02:39.24ID:wSmX/jVF
>>314
kindle版の話か

紙版を注文しちゃってるんだが
2017/11/28(火) 18:17:27.07ID:oL6iYiK7
ガーガー言うほど文句が出るもんでも、全力擁護すべきもんでもないと思うがね>デフォルトでimmutable
Haskellほどやり方が変わるわけでもない、C/C++のconstより明快、letとvarで分けるほど使い心地が違うものにはならない、
https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/box-syntax-and-patterns.html
↑にあるようなBoxを使って大きい構造体を関数に渡すのはRustじゃ悪手ってとこだけ知ってればいい
2017/11/28(火) 18:18:12.38ID:Q+QzpY2X
>>315
MPIは不変性は並列化に必ずしも必要じゃないって話の例に出しただけだから、
さわった上で不変性が必要って主張するならまあそうなんだろう

データを不変にして触るノードの分だけコピーすりゃそりゃデータ競合は起きないだろうが、
その分ノードへの転送量だってかかるし、メモリも食う
だから富豪的で、額面上の並列度は上がっても性能には寄与しないと言ってる

俺が知らないだけでもっと良い最適化が不変変数にかかるなら完全に俺が無知晒したでめでたしなんだが
2017/11/28(火) 20:36:19.23ID:nHLuJ5vk
業務のDBとかででっかいBeanやテーブルさわってるとImmutableこだわると死ぬ気がする
ライブラリレベルだとImmutableすごいよさそうなんだが
2017/11/28(火) 20:40:51.18ID:7DSslbhb
immutableがいいのはソースの可読性が高まるのと、マルチスレッド化したときにリソースアクセスに問題ないのが保証できることでしょう。バグらなない自信があるなら効率を求めてmutableにするがよろし。
2017/11/28(火) 21:07:28.65ID:LCKhcLzq
mut にするのもそこまで困難な言語設定ってわけでもないし、
デフォルトが immutable でもいいんじゃねとは思う。
まあ大規模に作ったことはないからその際の困難はわからんけど、そこまで問題にならんのでは?
322デフォルトの名無しさん
垢版 |
2017/11/28(火) 21:37:26.40ID:RsLfLMGU
let mutって書くのめんどくせーしvar
323デフォルトの名無しさん
垢版 |
2017/11/28(火) 21:37:34.07ID:RsLfLMGU
追加してほしい
2017/11/28(火) 22:58:48.40ID:91xy27Pm
mutにするのをめんどくさくするというのが
let mut構文を採用した理由なので
varはよっぽど何かない限り入らないと思う
325デフォルトの名無しさん
垢版 |
2017/11/29(水) 00:16:55.36ID:ZRmpNQ2i
Haskellのイミュータブルは永続データ構造?参照の使いまわし?
Rustのイミュータブルは?コピーしないと使いまわせない?
2017/11/29(水) 00:58:38.85ID:RLTBNHC0
wasmに出力するのって、依存ライブラリも全部pure Rustじゃないとダメなの?
2017/11/29(水) 03:28:58.51ID:wq9Dycsx
1.22でOptionにも?使えるようになって、haskellのMaybeモナドっぽく使えて捗るわ
ブロック内だけでも使えたら良いんだけど仕組み的に無理そうか
2017/11/29(水) 12:04:01.36ID:TbD0G3jq
try catchみたいな構文検討されていたような
2017/11/29(水) 19:35:23.16ID:PZaIONIl
Rustを叩いている奴ってミラーレスカメラを叩いている一眼レフカメラ信奉者と同類に見える
大抵の場合は合理的な方が最終的に選択されるけどな
2017/11/29(水) 20:42:06.07ID:FCGUeU3g
mutable変数扱うなバーカ、というメッセージだと思ってる
必要なら再宣言させるようにして人為バグを減らそうという魂胆は分かるぞ(Javaのfinal教徒感
2017/11/29(水) 20:50:40.91ID:wq9Dycsx
BufReaderとかReadするStringとかにもmut必要何だからmut禁止とか無理じゃね?

不要なmutだったらワーニング出るでし、必要だったらコンパイルエラーになるでしょ

必要な形で使えば良いだけなのに一体何を議論してるんだ?
ミュータブルが気に入らないならhaskellおすすめ
2017/11/29(水) 22:01:09.26ID:pXSSowmn
Readした結果はmutableでいいのにlet mutと書かなければならんの面倒
人によってはletで再宣言するのかな
2017/11/30(木) 01:36:34.69ID:zpCxrqzF
例えばさ
mutな変数1つ宣言してそこに足し上げていくのと、
非mutな計算結果同士を足して新しい非mutな計算結果を作るのと

素朴に考えれば前者の方が省リソースだよな

別にその程度コンパイラの最適化やレジスタ割り当てでどうとでもなるだろうとも思うが
2017/11/30(木) 02:16:29.28ID:ypA28Khv
https://qiita.com/koji_mats/items/62e85a87cc580e225796
これ見たんだけど、なんでwinがlet mut winじゃないんだろうって不思議に思った。

let win = gtk::ApplicationWindow::new(&app);
win.set_title("Vanilla Text");

で、コードを調べてみたら、こんな感じにFFIを呼んでるだけだから、
概念的にはオブジェクトを変更してるけどRust的にはmutが要らないという仕組みらしい。
ちょっと違和感無い?

fn set_title(&self, title: &str) {
unsafe {
ffi::gtk_window_set_title(self.to_glib_none().0, title.to_glib_none().0);
}
}
2017/11/30(木) 02:51:13.41ID:AHSKxIeg
ポインタの先がどう変更されようが、ポインタを持ってるだけの側は不変。
2017/11/30(木) 03:27:18.42ID:NyMSxVXi
gtkはgoのほうが簡単
2017/11/30(木) 07:37:17.88ID:YOUdxrbO
Cellもしらんのか
2017/11/30(木) 13:33:26.57ID:2d5TEUTF
Rust的な設計の指針というかコツみたいのって無いですかね…

勉強のつもりで外部のCのライブラリとの間に入るちっちゃなFFIのラッパーを書いてみたんですが、Cの感覚で書く->コンパイラに怒られてあーなるほど修正ってのを繰り返してとりあえずは動くようになったんだけど
何をするにも

let foo = xxx ;
{
let bar = foo.xxx() ;
bar.yyy() ;
}
{
let baz = foo.zzz() ;
baz.www() ;
}
{
let bar = foo.xxx() ;
bar.yyy() ;
}

みたいに書かないといけなくて書いた本人でも「何やねんこのウンコ!」ってなってる(´・ω・`)
(Rustがって意味じゃなくて自分の書いたものがって意味で)
2017/11/30(木) 15:21:22.37ID:AHSKxIeg
どんなエラー出してそんな醜いコード書いてるのかを説明してくれないと。
340デフォルトの名無しさん
垢版 |
2017/11/30(木) 19:20:57.05ID:dqSyxXgg
>>338
RustがRustで書かれてるのだからRustのリポジトリのコードを読んで参考にすれば勉強になるのでは?

https://github.com/rust-lang/rust/search?l=rust
2017/11/30(木) 19:27:22.21ID:uu2PxLG/
>>338
cと触れる部分はしょうがないんじゃないの?
その何回も触ってる部分をcで書いてインターフェイスを最小化した後で
rust から呼び出す方が正解なんじゃないかね。
2017/12/01(金) 00:02:21.38ID:9zBEgLMI
Rustに限らず他言語で書かれたライブラリを利用するときは呼び出し元言語の作法に適合するように改修しないと使いにくいことが多いような
2017/12/01(金) 00:53:10.98ID:+mBQRpP6
>>338
> Rust的な設計の指針というかコツみたいのって無いですかね…

私も知りたいです!
2017/12/01(金) 18:20:32.47ID:MEq6f57k
>>338 見た感じFoo::xxx : &mut Self -> BarとかFoo::zzz: &mut Self -> bazとなっているのでbarやbazが生きてるとfooにアクセスできないのが直近の原因だと思うけど、
xxxやzzzが本当にFooの変更を伴わないといけないのかを考えないといけない
CellやRefCellを使ってinterior mutabilityを導入したらFoo::xxx: &Self -> Barというメソッドにできる可能性がある
まあ実際のソースがどんなもんなのか知らないから適当だけど
2017/12/02(土) 18:50:17.68ID:LUcOy7p3
https://doc.rust-lang.org/book/first-edition/crates-and-modules.html

japaneseってrust作成者らって日本語好きなの?
2017/12/02(土) 19:17:25.64ID:XMmE+FVV
トーキョー、サムライ、ハラキリ、ゲイシャ!
2017/12/02(土) 21:21:37.22ID:nhUA9ni6
>>345
公式Twitterアカウントをフォローしてみれば、リツイートに含まれるアニメ画像の多さで分かるだろ
2017/12/02(土) 21:26:24.08
ジャパニメーション
2017/12/02(土) 23:06:36.11ID:LUcOy7p3
プログラマ=アニメオタクの構図は海外でもデフォか
2017/12/02(土) 23:25:28.54ID:IvGxcnlE
アニメに限らずエンジニアのオタク率は高い
2017/12/03(日) 02:23:51.05ID:o8sHMMD+
そもそもエンジニアの時点でPCオタみたいなもんだろ
2017/12/03(日) 15:14:02.84ID:nF9LHZwo
標準ライブラリAPIリファレンス見てるけど難しいなぁ。
2017/12/04(月) 20:49:12.68ID:Guj0xD4V
map: HashMap<String, usize>をメンバーに持つ構造体Fooを作りHashMap::getをラップするメソッドを定義したいんだけど、
型表記をどう書けばStringとstrの両方を受け取れるようになれるの?
2017/12/04(月) 20:51:25.15ID:Guj0xD4V
自己解決。AsRef<str>を使えば良かった
2017/12/05(火) 00:26:24.15ID:9T1+J47W
panic!で終わらすのでなくErr()を返してエラー時の挙動は呼び出し側に任せる・・・?
2017/12/05(火) 01:46:51.82ID:Z65eXqg0
get で使うなら AsRef じゃなくて Borrow
2017/12/05(火) 08:09:29.16ID:qtUVw02h
>>356 こういうことかhttps://play.rust-lang.org/?gist=2b7d7c7aa544cc2dde43c2aa06533c87&;version=stable
こんなの行けるんだな。doc見てもよう分からんかったありがとう
2017/12/05(火) 09:27:16.18ID:hHacdpPt
Mercurialも、Python/CからRust/Pythonに切り替えるのか

> Python is also hindering us because it is a dynamic programming language.
2017/12/05(火) 18:20:02.95ID:zRXsR4tV
>>358
ソースどこだよデマ乙
歴史あるVCSがRustみたいなゴミつかうわけねえだろ
2017/12/05(火) 18:38:54.65ID:lkNfeWcr
>>358
なんでそれでpython残すんだ?
2017/12/05(火) 19:47:27.34ID:qtUVw02h
https://www.reddit.com/r/programming/comments/7hesom/mercurial_oxidation_plan/
・hg本体がpythonなんで起動時のラグが気になる、特にスクリプトからhg呼び出す場合に重いからネイティブにしたい
・python2.7のGILのおかげで高速化のための並列化が面倒
・メモリ安全と並列化をCや古めのC++でやるのはキツい

何故まずpython3に移行しないのかは分からんかった。Rustで書き直すより先にやった方がいいんじゃないかと
2017/12/05(火) 20:16:52.30ID:Z65eXqg0
> For Mercurial, Rust is all around a better C.
> It is much safer, about the same speed, and has a usable standard library and modules system for easily pulling in 3rd party code.

>>359みたいな基地外君発狂しそう。
2017/12/05(火) 21:03:22.04ID:zRXsR4tV
ソースはRedditwwwwwwwww
ソースは2chよりひでえwwwwwwwwwwww
2017/12/05(火) 21:16:31.60ID:qtUVw02h
一次情報はmercurial oxideなんだけどこれが公式mercurialとどんな関係があるかがRedditのスレで言及されてるんだが
モジカス連呼基地外君は発狂中だとurlしか読めないのね
2017/12/05(火) 21:18:53.28ID:gT8tzSz1
>>360
mercurialにpythonで書かれた拡張機能がいっぱいあるからだろうかね
2017/12/05(火) 21:42:01.40ID:4Jhqan/B
HN見ないんだ?https://www.mercurial-scm.org/wiki/OxidationPlan#
ていうかモジカス君固定ハンドルつけてくれない?名声もつくよ
2017/12/05(火) 22:45:09.30ID:H7tXCLyD
言語が錆でプロダクト名が水銀だから、プロジェクト名が酸化ってのもうまいことつけたな
Python3化を優先しないのは、斜め読みした感じだと「hgコマンドをPythonスクリプトから(必要に応じてPythonインタプリタを埋め込んだ)バイナリにしたい」ってあったから、順番的には確かにそっちは後だな
2017/12/05(火) 22:52:10.21ID:H7tXCLyD
あとは、GILの性能自体はPython3で向上したとはいえ、GILそのものがなくなった訳ではないから、
それで得られる速度向上は並列化と比べてたいしたことないってのもあるんじゃね?

あとPython3はそもそも単純なベンチでは2より遅かった気がする
369デフォルトの名無しさん
垢版 |
2017/12/06(水) 00:11:41.11ID:aEHwTVhz
なるほどね。
個人的にはgitよりmercurialに頑張ってほしい
2017/12/06(水) 01:15:02.87ID:6LacDPiL
VCSは自身の機能や性能も大事だけどそれを使った開発プロセスの整備と提示が大切なんだなあとgithub見て思う
pijulにはちょっと期待してる
2017/12/06(水) 03:56:18.90ID:sNDBG4Pk
公式がマジで言ってんのかこれ。多分gitに負け続けて資金調達のためにモジラに泣きついた感じか。そこまで落ちぶれてたんか
けどまあwikiの他のNewFeature見てみた限り放置も多いみたいだし、これもそのまま忘れ去られる系だな
2017/12/06(水) 08:49:40.91ID:7Z4PG9ak
資金調達のためにモジラに泣きついた感じかキリッ
2017/12/06(水) 09:15:41.98ID:o9r2lFwR
Rustで大きなプログラムは書けない
→Firefoxにしか使われない
→Mozilla以外はまともなプロダクトでは使われない
→負け組プロジェクトしか使われない

進化を楽しみにしてるぞ
2017/12/06(水) 09:25:54.43ID:J6ceqlJH
>>373
上から目線で言ってるけど無能そう
2017/12/06(水) 09:28:53.95ID:dVNrL5aP
効いてるやん
2017/12/06(水) 11:24:37.38ID:g4tVD/U6
374 自体も上から目線でワロタ
2017/12/06(水) 11:48:39.53ID:F7bxA/jW
5chでマウント取りは当たり前だからな
2017/12/06(水) 13:03:02.39ID:C/GcjX4C
コンパイル通せない事がそこまで彼のプライドを傷つけるとは……

コンパイルエラーが発生したときに、自動で「大変申し訳ありませんが、」の文字列を追加表示する
コンパイラプラグインを誰か開発すべき
2017/12/06(水) 17:33:11.66ID:Zd+Z66A3
Rustつかって書き直すなんて、言うだけはタダだし、言ったことでモジラから金がもらえるなら言うだろうね、落ち目のプロジェクトなら
個人的にはgitより好みだったけどな

そもそも言語変えて書き直すとか非現実的なことできると思ってんのお前ら
チャットワークは記憶に新しいぞ
2017/12/06(水) 17:35:26.67ID:mFCLg4Qg
モジラから金がもらえる(キリッ
381デフォルトの名無しさん
垢版 |
2017/12/06(水) 18:02:57.09ID:CoVGsVpS
いい加減コテつけろガイジ
2017/12/06(水) 19:19:06.35ID:enrVe2xz
rust ならこういう問題は解決できんの?
https://qiita.com/i_yudai/items/3336a503079ac5749c35
2017/12/06(水) 19:34:24.15ID:LlbO+WJR
それを解決できるのはスレッドの類をGC対象にできる言語のみだろう
Ponyはできたような気がする
2017/12/07(木) 11:46:55.50ID:4fQhnjSw
ponyってあれか。スポンサー企業が一抜けしたやつか
385デフォルトの名無しさん
垢版 |
2017/12/07(木) 16:49:06.35ID:e6grhN6X
これからやるのにGUIでいいプログラム言語教えてください。Microsoftは無しで。
2017/12/07(木) 17:14:54.82ID:3Pu9MQ/V
なんでこのスレで聞く?
Java
2017/12/07(木) 18:42:24.96ID:wb2m4Sd2
>>385
おじいちゃん、GUIはブラウザってきまったでしょ?
2017/12/07(木) 18:57:24.40ID:DAqiucIC
実際マジで綺麗なGUI作ろうと思ったらブラウザ使った方が良かったりするからなあ
wasm/WebGLのみターゲットにしたGUIツールキットcrateを作る人も出てくるんじゃないかね
389デフォルトの名無しさん
垢版 |
2017/12/07(木) 19:10:54.37ID:aNywij93
VueとかReactが便利すぎる
2017/12/07(木) 20:40:39.18ID:hv/QEVwp
簡易なもんつくるなら react をてきとうにいじるのが一番覚えること少ない気がする。
2017/12/07(木) 20:40:53.05ID:Hyaivhp0
wasmって使えるのcoreライブラリだけ?
2017/12/07(木) 21:20:46.84ID:7uR0ShQv
しばらくreact+reduxやってから久しぶりにC#に触ったらやっぱり.NET楽だと思ったわ。
Webアプリ前提ならReact一択でいいけど、スタンドアロンでいいならわざわざ選ばんなぁ。
2017/12/07(木) 22:04:12.67ID:hv/QEVwp
.NET は何がどう依存してるかわかりずらくてデプロイするのが面倒じゃん。
2017/12/08(金) 18:13:41.90ID:wmniiGfA
Rustは何がどう依存してるかわかりずらくてプログラミングするのが不可能じゃん。
395デフォルトの名無しさん
垢版 |
2017/12/08(金) 19:09:50.20ID:eb9UBXrx
>>394
よ、クソモジラ君
2017/12/08(金) 21:32:53.09ID:Zo2thUux
>>394
> ずらく

お前はまず日本語を学ぼうな。
2017/12/08(金) 22:30:24.09ID:4nIOqmyr
>>393
>ずらく
ついでにお前もな
2017/12/08(金) 23:14:50.34ID:tq7RAj6Q
rust使う前に日本語を正しく習得しないとな
2017/12/09(土) 00:27:43.89
英語やった方がいいと思う
400デフォルトの名無しさん
垢版 |
2017/12/09(土) 05:14:49.50ID:GA23pAhd
https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/dining-philosophers.html

このArcってやつはマルチスレッド以外でも使ったりします?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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