Rust part9

■ このスレッドは過去ログ倉庫に格納されています
2020/08/23(日) 01:07:35.52ID:MgEpWwVh
Mozilla発のRust言語のスレ

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

Web上の実行環境
https://play.rust-lang.org

前スレ
Rust part8
https://mevius.5ch.net/test/read.cgi/tech/1579834072/
2021/02/18(木) 02:01:34.78ID:n4kSgdMy
rustにはコンストラクタなんていうげんごきのうはないが
2021/02/18(木) 02:22:20.29ID:17ht1voR
型コンストラクタはあるのでは
2021/02/18(木) 02:35:11.90ID:aOnYkWOR
ボカァ、今後はC++がRustのパラダイムを吸収して (saferな書き方を提供して) Rustの役割は終わると思うね
2021/02/18(木) 05:45:24.92ID:rijSrz3Z
それならそれでもいいけどそうなるためにはある程度Rustの取り組みが成果を上げる必要があるわけで

C++の建て増し感も気になる
2021/02/18(木) 05:57:46.70ID:g5HFTB9g
C++の建て増し感はもはや長所と思うしかない
仮に今後「Rustのパラダイムを吸収する」方向に進むとしたらそれはまさに建て増しだ

個人的にはマルチパラダイムを体現してるようで結構だと思うが、建て増し感が受け入れられない人にとってはやはりクソ言語なのだろうね。C++は
2021/02/18(木) 07:19:44.62ID:hiVMRxyD
>>758
それ日本というかプログラマを使い捨てられる文化圏だけじゃね
2021/02/18(木) 14:50:08.00ID:rijSrz3Z
リナスやストールマンやヘルスバーグが興味持てばまた違って来るだろう
766デフォルトの名無しさん
垢版 |
2021/02/18(木) 19:42:22.85ID:1bJLI/ST
どこかでRocketで非同期処理できるようになるって見た気がするんだけど、
ググってもそれらしき情報が見つからない。
俺の勘違い?
2021/02/18(木) 20:20:01.72ID:SByJzFqI
>>766
たしか次の0.5でできるようになるはず。
gitのmasterなら試せるんじゃないかな。
768デフォルトの名無しさん
垢版 |
2021/02/19(金) 01:45:21.75ID:C4/TpWTT
>>761
それを何年も何十年も待ってる人が沢山いるけど、やらないでしょ
2021/02/19(金) 06:37:54.65ID:ytqZaYub
コンパイラスイッチなりプラグマなり必要になるからそれなら新言語で、ってなっちゃうわな
2021/02/19(金) 08:59:27.98ID:2/3+b4qC
>>768
やらないやつはrustで書くのも無理だよ
2021/02/19(金) 12:37:09.63ID:EWSghxXn
>>761
Rust が依存関係をチェックする仕組みはそういう機能があるというだけではなくて、
それで全体が統一されていることが大事でしょ。 (一部には unsafe もあるけど。)

C++ の上に Rust 的なパラダイムを建て増しして便利になることもあるかもしれないけど、
統率されていることの有用さとは別物だよ。
2021/02/19(金) 12:59:22.09ID:5rOBR4Oa
原理的には従来のunsafe C++にsafe C++を建て増して
既存のコードを徐々にsafeにうつしていくというのは出来そうかな。
しかし実際やるとなるとRustへの移行と同じくらい手間がかかりそう。
safe/unsafe間がFFIでなくなるのは多少楽かもだけど、
境界でsafeなことを保証するのは人間が考えないといけないし。
2021/02/19(金) 13:00:29.26ID:HAYVHwal
基本的saferで特例でunsafeとその逆じゃ全然違うからなあ
2021/02/19(金) 13:44:19.68ID:h/t0+GoU
ぼく丘safer
2021/02/19(金) 13:54:40.33ID:jb9MooDY
実際の機能がCのライブラリにリンクしてるだけとか、丘saferだな
2021/02/19(金) 15:45:22.92ID:ytqZaYub
上手いことsafetyにラップしてくれてればそれでいいよ
2021/02/19(金) 20:14:37.43ID:2/3+b4qC
safetyだと思い込めればええんやろ。単純な連中だわ。
778デフォルトの名無しさん
垢版 |
2021/02/20(土) 01:02:31.59ID:MdDLRkGY
こいつめっちゃウザい
2021/02/20(土) 12:53:25.44ID:TL3BSHJV
誰だよ
2021/02/28(日) 14:52:22.32ID:JEl8UZRv
アクセスを強要する言語はダメだよ
2021/03/05(金) 19:00:28.35ID:aSqkecBn
Iterator周りのconst fn化って目処立ってたりするのかな
2021/03/09(火) 11:54:18.25ID:e2HkPLHr
Rustで作られた有名なものを教えてください

Rubyだったらrails、homebrewとか
2021/03/09(火) 12:47:03.15ID:R5GGXoEM
https://qiita.com/hadashiA/items/3dec1713bd999b38e848

あとdenoもC++からrustで書き換えられたらしいし今後増えてくると思う
2021/03/09(火) 13:27:01.38ID:uSJY4o8s
>>782
Servo(Firefoxのレンダリングエンジン)
2021/03/09(火) 13:44:11.22ID:R5GGXoEM
tauriが伸びて来るかはまだ未知数
2021/03/09(火) 19:29:25.88ID:wHDXlDgC
Haskellで言うxmonadみたいな?
787デフォルトの名無しさん
垢版 |
2021/03/09(火) 19:53:58.75ID:eVxnhZwi
>>782
dropbox
2021/03/09(火) 20:01:24.82ID:zonUHFVg
firecrackerもRust製だっけか

https://github.com/firecracker-microvm/firecracker
2021/03/09(火) 20:04:31.04ID:zonUHFVg
firecracker >>783 のところに書かれてたか・・・。
2021/03/09(火) 20:10:47.51ID:xbBrvliS
Tock/OpenTitan/OpenSKみたいなセキュリティ系のファームウェアとか
こういうのは特にアナウンスもなく採用されていくから
気づいたらみんな使ってたということになるかも。
2021/03/09(火) 23:06:36.57ID:E3PmhGqz
rustで書かれた有名なもの…rustかな?
792デフォルトの名無しさん
垢版 |
2021/03/11(木) 12:01:52.44ID:Y/wb0v0V
Rustが使ってるLLVMってC++製なんだ
2021/03/11(木) 12:11:40.89ID:88YcySCa
ダメじゃん
根幹がC++
C++にタマタマ握られてる
2021/03/11(木) 14:41:42.94ID:L0vKEaLv
C++ の資産を (ほぼ) 一方的に利用しているのもそれはそれで気分いいじゃん?
2021/03/11(木) 14:49:39.38ID:wgd6SgIa
同じ目的のために作られた道具として既存のものに取って替われないのは不名誉しかない
2021/03/11(木) 15:10:09.87ID:UCScJ1K4
>>782
ripgrep
2021/03/11(木) 15:32:57.89ID:dn2xUnIJ
アホな人相手にしてると自分もだんだんアホになるよ
2021/03/11(木) 16:11:55.93ID:ndX1jvez
新紙幣発行したその日にすべての旧紙幣を使えなくすべきって主張する人?
2021/03/11(木) 16:44:26.00ID:uvX65qSE
LLVMをrustで書き換えた日こそ天下か?いやいやOSのカーネルこそ
800デフォルトの名無しさん
垢版 |
2021/03/11(木) 19:03:39.84ID:21294wFC
Runuxはよ
2021/03/11(木) 19:19:34.73ID:aZ7HXs2o
相変わらずしょーもない妄想にふけるやつしかおらんな
2021/03/11(木) 23:57:00.49ID:ZRdHs705
Rustにいわゆるクラス変数みたいなものってないんですか?
2021/03/12(金) 00:04:34.96ID:0cefU6Fx
リーナス「オブジェクト指向のたわごとを持ち込むならRustの評価見直すぞ」
2021/03/12(金) 01:07:04.26ID:1OUd5zSC
>>802
ありますけど、mutable static変数なんて扱いづらいだけですよ?
2021/03/12(金) 01:23:52.52ID:U+iRPjP4
staticはクラス変数とは違うような
2021/03/12(金) 03:18:16.54ID:ByeOJ4Y7
Rust は色んなものをモジュール単位にしているような印象がある。
構造体のフィールドへのアクセスもモジュール内では制限がなくて、
モジュールの外に対して可視性を制御する仕組みになってるわけだし。
型の単位ではプライベートとパブリックを分ける気がない。

考え方次第ではあるけどスコープ管理の「雰囲気」からすると
C++ のクラスが Rust で言うところのモジュールに近いと言えなくもないんじゃね?
まあ前提が違うものについて無理やり共通点を見つけることにどれほど意味があるかわからんけど。
2021/03/12(金) 10:21:25.50ID:3fdjVE8p
>>802
定数でよければ associated constant が使える
変数にしたいなら >>804 の言うように static 使うしかなさそう
2021/03/12(金) 12:26:55.76ID:J+ar7EHR
Dropboxは何のGUIライブラリで作られているのかわかりますか?
2021/03/12(金) 16:33:37.37ID:qQge26zC
>>808
rustで書き直したのはサービス側と同期エンジンじゃないかな?
810デフォルトの名無しさん
垢版 |
2021/03/12(金) 18:45:06.86ID:kTC1PKHO
Rustって何で構造体のメモリーレイアウトをデフォルトでは勝手に並び替えるんだ?まじやめて欲しい
サイズを小さくする為?それとの他の理由があんのか?明示的だと言いながら余計な事ばかりすんなや
2021/03/12(金) 20:33:09.00ID:jgkfYeWQ
老害乙
2021/03/12(金) 20:59:59.44ID:Y+hYjm0T
構造体の並び順はメモリーアライメントで苦労したこと無い人の意見だな。
2021/03/12(金) 21:41:21.91ID:1OUd5zSC
>>810
#[repr(C)]付けないで文句言ってるならお前のせいやで?
2021/03/12(金) 22:08:58.65ID:TCjnSuLT
>>807
>>804

サンクス
あんまり使わない方が良さげだなあ
設計変えた方が良さそうだ
815デフォルトの名無しさん
垢版 |
2021/03/12(金) 23:34:08.62ID:9XEGWpCC
今時プラットフォームに依存する構造体のメモリーレイアウトを前提としたコードは書いちゃダメよ
2021/03/13(土) 00:40:30.95ID:PGOVIZdP
>>814
クラス変数って要はグローバル変数だから濫用すべきではないよ
2021/03/13(土) 15:49:02.94ID:GoEo1qHE
>>815
アセンブラと連携したい時には問題となりそう。
また、順序が書いたとおりの方が、色々と効率よいコードが書ける場合がある。
2021/03/13(土) 16:03:49.74ID:DC1SOqVQ
>>817
>>813
2021/03/13(土) 17:29:01.78ID:eNr110Cx
>>817
具体例は?
Ord::cmpがmemcmpだけでできるとか?
2021/03/13(土) 18:01:56.32ID:JM8M9JoF
選択可能なんだからどうでもいい
https://doc.rust-lang.org/nomicon/repr-rust.html
2021/03/13(土) 20:55:02.47ID:yJisos8z
>>817
コンパイラが十分賢くなったときに様々な最適化を自動で出来るようにする余地を残すため
デフォルトでメモリレイアウトを保証しないって設計になってるんだけど
自分で最適化する場合はコンパイラの最適化を抑止するってのはrustに限らずよくある話だしなにが不満なのかよくわからない
2021/03/13(土) 22:01:36.30ID:aUdFS8U8
>>810
明示的じゃん。
明示的に並べ替えを禁止する指定があるじゃん。
ほとんどの場合に順序はどうでもいいんだから、
どちらがデフォルトであるべきなのかなんて自明だろ。

条件付きだが C++ もデータメンバの順序を並び替えることは (言語仕様上は) 有りうるし、
並べ替えて良いと規定されているときに並べ替えを抑止するような指定方法はない。
(処理系の拡張としては有ったりするかもしれんが。)

Rust のほうがマシ。

現在の Rust は言語仕様と処理系の仕様の区別が曖昧なので repr が
(今後現れるかもしれない) 他の処理系でも使えるポータブルな機能なのかわからんけど。
2021/03/13(土) 23:34:45.90ID:+sWre9Lj
フランスのデータセンターの火災で『Rust』はデータの大規模なロストが発生
2021/03/13(土) 23:53:02.21ID:+sWre9Lj
なんか
struct Foo {
  int m_a;
  bool m_b;
  int m_c;
  bool m_d;
};
とかあったら
struct Foo {
  int m_a;
  int m_c;
  bool m_b;
  bool m_d;
};
にしたい衝動に駆られてストレスmaxなのでどうでもいい話ではない
2021/03/14(日) 00:49:22.71ID:Atf6A86o
>>824
LP64ならどっちもサイズ同じじゃん
2021/03/14(日) 04:01:46.70ID:n3ZlR2nQ
構造体定義するときc++だとアライメントずれないように手作業でダミーのデーター詰めたりしてたけど、途中で型変えると並び替えメンドクサイ。自動で最適化してくれる方がいいし、どっちも選択出来るのだからRustの方が正しいわ。
2021/03/14(日) 05:38:07.85ID:oMOPVtdk
>>825
https://ideone.com/7DbqpX
2021/03/14(日) 08:27:15.60ID:8bm6cw7M
>>826
ビット単位で詰めるからな。
2021/03/14(日) 09:39:13.15ID:fDAcQow7
>>823
rustはrustで書かれたの?
2021/03/14(日) 13:13:21.06ID:5DzsH1LF
ポケモンGOはGoで書かれた
2021/03/14(日) 13:44:08.22ID:flEVf/TW
マジかよ…

rustで書かれたゲームエンジンってのもちらほらあるんだな
2021/03/14(日) 14:08:02.49ID:eta5h4cX
アライメント合わせとかコンパイラに任せたら良いし
最悪でもunionを使って型を並べたら最もアライメント条件が強い方の型に合うから
アライメント合わせの目的で手作業でダミーのデーター詰めを行うというのは都市伝説、
コンパイラがアライメントを合わせた結果としてできたPADDING部分のデータを
どうしても不定値にしたくないがmemset()で構造体全体をゼロクリアするわけにもいかないという
きわめてレアなケースでしか行わない
833デフォルトの名無しさん
垢版 |
2021/03/14(日) 18:04:27.92ID:pLOBnReb
非同期のランタイムはtokioとasync-stdどどっちが標準になりそう?
2021/03/14(日) 19:05:56.64ID:8bm6cw7M
>>830
ポケモンRustじゃカッコ悪いしな。
835デフォルトの名無しさん
垢版 |
2021/03/14(日) 21:20:59.71ID:T+7gBLoD
Rustの悪口言いたい訳じゃないけど、デフォルトで並び替えるのは正しく思えないわ
#[repr(C)]つけろってのはその通りだけど、組み込み用途でつけ忘れてリリースして
しまったら考えるだけで恐ろしい
2021/03/14(日) 22:04:54.76ID:JBU2DMkD
>>835
その程度も出来ない馬鹿だとCでやったら大惨事じゃね?
2021/03/14(日) 22:31:41.33ID:pQGk05s+
デフォルトで余計なことやる設計が好きな人にはいいんじゃないの?
結局どっちに寄せるかだし。
2021/03/14(日) 23:37:14.51ID:n3ZlR2nQ
>>835
自動ったって最適化の挙動はごく単純なルールだし、結果も解る範囲なのだからやはり問題ないとおもうけど。
2021/03/14(日) 23:48:28.09ID:n3ZlR2nQ
メモリレイアウトのパターンを何種類か決められて、それぞれの最適化パターンに名前が付けられていくと考えれば、概念的な意思の統一がしやすくなるわけでしよ。今まで皆がバラバラにやってた方がおかしいわけで。構造体の隙間にあちこちゴミ入ってるのどれほど見たことか。
2021/03/15(月) 01:33:05.21ID:c4Lf5m0s
>>835
clippy の improper-ctypes-definition とかで検出できるのでは
841デフォルトの名無しさん
垢版 |
2021/03/15(月) 01:42:14.94ID:Nwz504CC
Cはコンパイラによりけりで最適化の度合いによるけど、無茶な事をしなければ基本は
書いた通りにしか動かないよ。C++のクラスは継承を使うとよう分からんレイアウトを
しくさるけど。Rustのやり方でも問題は確かにないし、結局どっちに寄せるかと言うのも
その通り。むしろゴミと言うか他人がレイアウトを整理しようとして事故るパターンの方が
多いが、まあ確かに些細な事だろう
2021/03/15(月) 01:45:53.32ID:uFpZBB9k
C言語でも非標準とはいえ呼び出し規約の指定とかあったなあ
2021/03/15(月) 02:24:54.25ID:8Jf2QlAa
付け忘れでリリースってテストもせずにリリースってこと?
確かにデフォルトで安全側に振るのはRustの基本方針だとは思うけど
全ての型をFFIする前提というのはやりすぎだと思うが。
2021/03/15(月) 02:38:04.29ID:c4Lf5m0s
Cは書いたとおりにしか動かないってのは単にCに対する理解度が高いだけでは
例えばアセンブリしか知らない人から見たら自動変数の振る舞いなんかは暗黙的な動作ばかりだと思うが
2021/03/15(月) 13:54:57.20ID:faH0kxEk
まったくその通り
Cでは書いたとおりにしか動かない、と思うのはCにあまりにペッタリ入り込みすぎて
もはやC脳になってしまっている(なので考えずに自動でなされる変換が頭のなかでできてしまう)か
またはじつは思いこみで理解が足りてないかのどっちか
2021/03/15(月) 14:00:05.56ID:GOWRyYdB
更に言えば最適化を有効にしたらかなりアクロバティックなコードを生成してくることもあるので人間には予測不能。
2021/03/15(月) 19:06:12.98ID:tiOBROfx
たいしてメモリ削減できない言語のくせに変な最適化かけんなよって話だわ
2021/03/15(月) 19:34:49.20ID:13DwLIrw
Rustではunsafe使わない限りは構造体のフィールドレイアウトを変更しても問題無いので、最適化の余地を残す仕様になってるのは良い事なんでは
2021/03/15(月) 19:54:56.71ID:nJdAJo9y
>>845
書いた通りに動かないのはバグでは?
2021/03/15(月) 20:16:17.39ID:c4Lf5m0s
Cが書いたとおりにしか動かないのと同様にRustも書いたとおりにしか動かないということ

構造体メンバの順序の話はrepr(C)つけたりclippy使えというのが結論で
デフォルトの挙動に違和感を覚えるか否かという話はbikeshed
2021/03/15(月) 23:27:42.36ID:HGmaHoUI
メンバの配置が固定だと移植性も下がるよね
パフォーマンスの低下くらいだったらかわいいけど
下手すればバスエラーで落ちる
2021/03/16(火) 00:53:01.99ID:GTaecVmm
勝手に最適化する方が移植性落ちるわ。
2021/03/16(火) 00:56:51.74ID:5nPZFfnW
Cの常識がどこでも通用すると思ってると別の言語でも怪我しそう
2021/03/16(火) 00:59:01.44ID:GTaecVmm
コンパイラに全て任せればいいって考えのやつのが実際は事故ってるがな。
2021/03/16(火) 01:07:50.71ID:5nPZFfnW
何に怒ってるのかよく分からないけどコンパイラによる構造体レイアウトの最適化がデフォルトオンになってるのがそんなに気に入らないの?
2021/03/16(火) 05:37:04.29ID:0EC0D1BB
>>854
それは言語の問題なのか、コンパイラの問題なのか、何が事故ってるの?
2021/03/16(火) 07:17:52.07ID:oighJobp
ていうかCコンパイラのアラインメントだって最適化の一種じゃ?
2021/03/16(火) 08:01:04.42ID:pXLX1cSG
そんなに気になるなら、フォークして、
デフォルトの挙動が違うrustを作れば済む話じゃないの?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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