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/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を作れば済む話じゃないの?
2021/03/16(火) 08:39:27.88ID:SlLiGo1E
最適化でunalignedになって落ちるならコンパイラのバグなんだから直せばいいし、
手動であらゆるアーキ向けにパディングを調整するよりよっぽどいいと思うけどな。
2021/03/17(水) 04:59:36.34ID:F/MTmTZA
メモリレイアウトの話まだ続いてるの?
C++でダメなところ潰して制約強めでバグ出にくくしようって言語で、コンパイラが信じられないと言われてもコンセプトが違うとしか
2021/03/17(水) 20:44:00.69ID:hH82Uf3P
C++でダメなところ潰して制約強めでバグ出にくくしようってのと、
コンパイラが信じられないからコンパイラ設計を楽にしようってのは別に矛盾しないがな。
頭悪すぎ。
2021/03/17(水) 22:43:22.09ID:8cWw5z32
コンパイラ設計を楽にするって、例えばどういうこと?
2021/03/18(木) 03:06:39.25ID:YG5QY/Fi
ここまでの流れでコンパイラがバグるほど難しい事してないと思うけど。何を心配してるの?
2021/03/18(木) 06:33:11.45ID:teFQO94z
何が問題なのかiefoneか何かで実例出して欲しいな
2021/03/18(木) 06:33:40.91ID:teFQO94z
ideoneでした
2021/03/18(木) 08:04:15.94ID:VY1V7baX
問題になるのは外部リンゲージな関数で構造体を渡すときだと思うが
コンパイルした後リンクするみたいな本番行為ってiefoneできるんでしたっけ
2021/03/18(木) 08:37:15.10ID:teFQO94z
テストの段階でわかるじゃないか
2021/03/18(木) 09:11:26.74ID:7Uj1c/fU
本番行為大好きです
2021/03/18(木) 22:11:22.58ID:j2TrRshi
イデオンの本番?
2021/03/18(木) 22:46:55.62ID:4SeQ/rCs
iefone って中華スマホっぽいな。
2021/03/19(金) 01:15:52.96ID:jSzcAIKb
ウィンドーズのAPIの構造体みたいにメンバの数が異なる構造体のシリーズで
先頭部分は同じレイアウトであって欲しい、みたいな要請がある場合は
いかに自動レイアウトの規則が厳格に決まっていても問題を生じるし、
テストで見つけろといっても限界がある
メンバ数3、4、5はOKだった!→56億年後に弥勒菩薩が6番目のメンバをboolにしたらすべて崩れ去った、みたいな
2021/03/19(金) 01:18:45.07ID:jSzcAIKb
それとも何かねここで言うテストというのはコンパイラの
自動レイアウトするロジックを見通したホワイトボックステストで
カバレッジ100%を目指せというのかね?
2021/03/19(金) 01:32:38.19ID:ZwQV5hpU
で、どれだけメモリ量減らせてるの?
2021/03/19(金) 01:46:10.43ID:jSzcAIKb
かなり減る64 bit整数m個とbool m+1個の構造体で#pragma pack(〜)とかしない場合
順序依存で8*m + 8*(m+1)バイトになるか8*m + ceil((m+1)/8)バイトで済むかの違いがある
引いたらどれだけ減ったかワカル
2021/03/19(金) 01:48:07.52ID:QYoHC3cJ
この人何と戦ってるの
2021/03/19(金) 02:08:13.91ID:qP05xHwq
日本語不自由なの多すぎか
2021/03/19(金) 08:05:42.69ID:elmSSYEz
C++だって処理系によってABI違って互換性無いのになに寝ぼけた事言ってんだ状態
2021/03/19(金) 08:22:46.12ID:jSzcAIKb
ヒエッ…日本語でどづぞ

>>877
処理系がABIを決めるケースはまれ
宇宙誕生以来一桁あるかどうか
2021/03/19(金) 08:52:24.84ID:6TNOQqr9
メーリングリストでそれらを主張してみてはどうか?ここで言ってもrust下げとしか見られない
2021/03/19(金) 10:06:03.26ID:S4bW7+Mw
さっぱりわかんねえんだが、
>先頭部分は同じレイアウトであって欲しい、みたいな要請がある場合は
こんなクソみたいな要請がある案件の場合はrepr(c)でいいんちゃうん?
2021/03/19(金) 10:57:59.03ID:jSzcAIKb
スマン>>878はstdcallを念頭に言ったがcdeclはC言語処理系によって決まったと言ってよいかもしれませんねーorz
stdcallの発祥がWindowsとPascalのどちらが先なのかは知りま栓、

>880
>こんなクソみたいな要請がある案件の場合はrepr(c)でいいんちゃうん?
禿げしく同意
2021/03/19(金) 11:33:49.63ID:qP05xHwq
なにこいつ……
2021/03/19(金) 14:44:53.99ID:ZYq4u5st
>>871
言われてみれば確かに。
alignmentはCPUのBIT数が同じであれば大体同じなので、自動でやってくれもよい
場合も有るが、順序まで変えたのでは困るな。
2021/03/19(金) 15:07:57.84ID:x8qTxIkr
repr(C)をつけるのでは駄目な理由は誰も言えないのか
2021/03/19(金) 15:11:24.58ID:gR5Gr2WA
おじいちゃんが今際の際に「repr(C)は使うな…ガクッ」って言ってたんよ…
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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