公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
Web上の実行環境
https://play.rust-lang.org
日本語の情報
https://rust-jp.rs/
※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/
※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust
※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※次スレは原則>>980が立てること
前スレ
Rust part15
https://mevius.5ch.net/test/read.cgi/tech/1652347700/
探検
Rust part16
■ このスレッドは過去ログ倉庫に格納されています
2022/06/27(月) 08:17:03.45ID:gDlfKP6u
592デフォルトの名無しさん
2022/08/31(水) 10:04:18.55ID:RT2RvDVv Amazonがプログラミング言語「Rust」を使っている理由
https://japan.zdnet.com/article/35183866/
Amazon Web Services(AWS)は、同社のエンジニアたちがプログラミング言語「Rust」を
使っている大きな理由として、エネルギー効率の高さを挙げる。
AWSは早くからRustを採用し、GoogleやMicrosoftとともにRust Foundationの創設にも携わった。
現在もRustの普及に熱心に取り組んでいる。
AWSのソフトウェアエンジニアで、Rustの普及に取り組む、
Shane Miller氏と主任エンジニアのCarl Lerche氏の投稿によれば、
Rustはメモリー安全性を高め、セキュリティ関連の不具合を減らす役に立つだけでなく、
PythonやJavaよりもはるかに「エネルギー効率に優れている」という。
Amazonは、2025年までにデータセンターの100%を再生エネルギーでまかなうという目標を掲げ、
データセンターの環境負荷の軽減に取り組んでいる。
Rustの採用はその一翼を担うという。
Rustで構築されたAWSサービスの例としては、
コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
「Amazon Simple Storage Service(S3)」「Amazon Elastic Compute Cloud(EC2)」、
コンテンツ配信ネットワーク「Amazon CloudFront」、
LinuxベースのコンテナーOS「Bottlerocket」がある。
「CやRustが他の言語よりもエネルギー効率に優れていることに驚きはない。
衝撃的なのは、その違いの大きさだ。CとRustを広範に採用すれば、
控えめに見積もってもコンピュートに使用されるエネルギーの量を50%削減できる可能性がある」と
Miller氏は述べ、その根拠として、C、GoogleのGo、Lua、Python、Ruby、Fortranなどをはじめとする
複数の言語のエネルギー効率を相対的に示した研究結果を紹介している。
https://japan.zdnet.com/article/35183866/
Amazon Web Services(AWS)は、同社のエンジニアたちがプログラミング言語「Rust」を
使っている大きな理由として、エネルギー効率の高さを挙げる。
AWSは早くからRustを採用し、GoogleやMicrosoftとともにRust Foundationの創設にも携わった。
現在もRustの普及に熱心に取り組んでいる。
AWSのソフトウェアエンジニアで、Rustの普及に取り組む、
Shane Miller氏と主任エンジニアのCarl Lerche氏の投稿によれば、
Rustはメモリー安全性を高め、セキュリティ関連の不具合を減らす役に立つだけでなく、
PythonやJavaよりもはるかに「エネルギー効率に優れている」という。
Amazonは、2025年までにデータセンターの100%を再生エネルギーでまかなうという目標を掲げ、
データセンターの環境負荷の軽減に取り組んでいる。
Rustの採用はその一翼を担うという。
Rustで構築されたAWSサービスの例としては、
コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
「Amazon Simple Storage Service(S3)」「Amazon Elastic Compute Cloud(EC2)」、
コンテンツ配信ネットワーク「Amazon CloudFront」、
LinuxベースのコンテナーOS「Bottlerocket」がある。
「CやRustが他の言語よりもエネルギー効率に優れていることに驚きはない。
衝撃的なのは、その違いの大きさだ。CとRustを広範に採用すれば、
控えめに見積もってもコンピュートに使用されるエネルギーの量を50%削減できる可能性がある」と
Miller氏は述べ、その根拠として、C、GoogleのGo、Lua、Python、Ruby、Fortranなどをはじめとする
複数の言語のエネルギー効率を相対的に示した研究結果を紹介している。
593デフォルトの名無しさん
2022/08/31(水) 10:44:22.32ID:nTGfEW2M >>590
そういう基本的なのはチュートリアルに書いてあるんだから何をあらためて検索する必要があるっていうんだ?
そういう基本的なのはチュートリアルに書いてあるんだから何をあらためて検索する必要があるっていうんだ?
594デフォルトの名無しさん
2022/08/31(水) 12:13:30.34ID:Fgf/9Zy6 >>590
文法は場当たり的に学ばないで初学者向けドキュメント読んだ方が良いと思うけどそれは置いておいて、
rust operatorでググって出てくるこれ参照して演算子の意味調べてもう一度ググれば良いのでは
それすらめんどくさい?
https://doc.rust-lang.org/book/appendix-02-operators.html
文法は場当たり的に学ばないで初学者向けドキュメント読んだ方が良いと思うけどそれは置いておいて、
rust operatorでググって出てくるこれ参照して演算子の意味調べてもう一度ググれば良いのでは
それすらめんどくさい?
https://doc.rust-lang.org/book/appendix-02-operators.html
595デフォルトの名無しさん
2022/08/31(水) 12:30:09.46ID:836P0mbg question markとかsemicolonで調べればいいんだよ
596デフォルトの名無しさん
2022/08/31(水) 12:34:08.26ID:J/OAC0EF 例えば
question mark site:doc.rust-lang.org
で検索すれば必要な解説がすぐ見つかる
question mark site:doc.rust-lang.org
で検索すれば必要な解説がすぐ見つかる
597デフォルトの名無しさん
2022/08/31(水) 12:53:27.03ID:+Igep1U8598デフォルトの名無しさん
2022/08/31(水) 13:07:27.93ID:+Igep1U8 >>596
おお、ここまで指定すれば見つかりますな。公式トップに検索窓ぐらい欲しいところだけど。
おお、ここまで指定すれば見つかりますな。公式トップに検索窓ぐらい欲しいところだけど。
599デフォルトの名無しさん
2022/08/31(水) 13:18:26.51ID:Fgf/9Zy6600デフォルトの名無しさん
2022/08/31(水) 13:39:17.87ID:lcZ+Kyy5 所有権チェックはありがたいけど、lintみたいにビルドと分けた方が使い勝手よかったと思うがな。
601はちみつ餃子 ◆8X2XSCHEME
2022/08/31(水) 13:42:22.79ID:nTGfEW2M >>597
> THE Book読めということかしら
せやで。
まあそれに限らなくてもいいけどどんな入門書でも ? の説明がないなんてことはないでしょ。
常識的な手順通りに学習してれば ? が大まかに何をする演算子なのかくらいは知っているはずだし、
エラー処理にかかわるものだと知ってればもっと細かいドキュメントを探すのにも苦労するってことはない。
なるべく一発で検索できたほうが便利というのはわからんでもないが、
演算子であると同時に制御構文の類でもあり、周辺の機能と連携するのできちんとした理解をしようとすれば
どうせ色々と見るはめになる。
> THE Book読めということかしら
せやで。
まあそれに限らなくてもいいけどどんな入門書でも ? の説明がないなんてことはないでしょ。
常識的な手順通りに学習してれば ? が大まかに何をする演算子なのかくらいは知っているはずだし、
エラー処理にかかわるものだと知ってればもっと細かいドキュメントを探すのにも苦労するってことはない。
なるべく一発で検索できたほうが便利というのはわからんでもないが、
演算子であると同時に制御構文の類でもあり、周辺の機能と連携するのできちんとした理解をしようとすれば
どうせ色々と見るはめになる。
602デフォルトの名無しさん
2022/08/31(水) 15:08:14.60ID:Fgf/9Zy6603デフォルトの名無しさん
2022/08/31(水) 16:15:20.37ID:bi3oBo/Y コンパイル(ビルド)時に所有権チェックの結果を使ってメモリの解放処理を挿入してるんだから分けるのは無理
604デフォルトの名無しさん
2022/08/31(水) 16:22:04.68ID:UXqUoG+N ビルドしなくてももっと気軽にわかるようにしろってことか?
linterの領域外れてる気もするが
linterの領域外れてる気もするが
605はちみつ餃子 ◆8X2XSCHEME
2022/08/31(水) 16:50:31.19ID:nTGfEW2M 細かな所有権の整合性を後回しにしてとりあえず動く (ように見える) ところまでもっていきたいという気持ちはわからんもでない。
でもなー、そういうことすると整合性がとれてないままの未定義コードが世に溢れてしまうのは確実だろう。
でもなー、そういうことすると整合性がとれてないままの未定義コードが世に溢れてしまうのは確実だろう。
606デフォルトの名無しさん
2022/08/31(水) 16:56:11.73ID:LCT5ihCl 所有権周りのエラーって基本的なデータ構造に起因することが多いからなぁ
後から直そうとか思うと結局全部作り直すはめになるから
一度チェックなしモードとかで作っちゃうと永遠にそのままだろうね
後から直そうとか思うと結局全部作り直すはめになるから
一度チェックなしモードとかで作っちゃうと永遠にそのままだろうね
607デフォルトの名無しさん
2022/08/31(水) 17:04:46.18ID:BdHQqSBt マンホールって卑猥な単語じゃね?
608デフォルトの名無しさん
2022/08/31(水) 19:07:16.13ID:th8cAM8K >>592
そのうち、他の分野のライフサイクルみたいに、製造時、利用時といった感じで電力効率が語られるようになるんかね。
そのうち、他の分野のライフサイクルみたいに、製造時、利用時といった感じで電力効率が語られるようになるんかね。
609デフォルトの名無しさん
2022/08/31(水) 20:09:18.42ID:iogMBVhq610デフォルトの名無しさん
2022/08/31(水) 20:22:19.87ID:3b0JioqE 学習曲線をどうにかしようという気合はめちゃめちゃあるが、バカを賢くしようというつもりはないだろう
611はちみつ餃子 ◆8X2XSCHEME
2022/08/31(水) 20:35:16.89ID:nTGfEW2M >>609
えっ、なじみのない所有権システムとかも含めてめっちゃわかりやすく解説した the book を
用意してくれるなんてスゲー親切だと思うが、何が不満なんだ?
(俺自身は英語あんまりわからんので日本語訳を読んだ。)
えっ、なじみのない所有権システムとかも含めてめっちゃわかりやすく解説した the book を
用意してくれるなんてスゲー親切だと思うが、何が不満なんだ?
(俺自身は英語あんまりわからんので日本語訳を読んだ。)
612デフォルトの名無しさん
2022/08/31(水) 20:38:24.92ID:SRFkQuBk >>609
the bookは初心者のためのもの
Rustを全く知らなくてもちゃんと順を追って理解できるように書かれている
?は自分でエラー処理を書くようになり、
さらに自分の関数でResultなどを返すようになり、
そこでErr(e) => return Err(e)などを書くようになり、
そこでのショートカット表現として必要になるものだから
the bookでも同じ順で学べる
?をいきなり調べたい時や詳細を知りたい時は
the Rust referenceを開いて🔍をクリックして
question markと打てば該当ページに辿り着く
the bookは初心者のためのもの
Rustを全く知らなくてもちゃんと順を追って理解できるように書かれている
?は自分でエラー処理を書くようになり、
さらに自分の関数でResultなどを返すようになり、
そこでErr(e) => return Err(e)などを書くようになり、
そこでのショートカット表現として必要になるものだから
the bookでも同じ順で学べる
?をいきなり調べたい時や詳細を知りたい時は
the Rust referenceを開いて🔍をクリックして
question markと打てば該当ページに辿り着く
614デフォルトの名無しさん
2022/08/31(水) 21:03:24.41ID:p14sgl1j すべてがunsafeな世界になる
615デフォルトの名無しさん
2022/08/31(水) 21:22:41.70ID:rT6IO02J 生きている限り安全なんてない
616デフォルトの名無しさん
2022/08/31(水) 23:52:36.28ID:X48LRlQ+ ポエムはいいです
617デフォルトの名無しさん
2022/09/01(木) 00:17:11.56ID:gQhEx8vQ そうそうポエムいいよなぁ
みつヲ
みつヲ
618デフォルトの名無しさん
2022/09/01(木) 01:28:45.35ID:v92yFclD 今時、ネイティブ吐く必要なんて全くない
tsでもvscのようなソフトが作れるんだし。
ユーザーランドではネイティブはもはや不要だろ
tsでもvscのようなソフトが作れるんだし。
ユーザーランドではネイティブはもはや不要だろ
619デフォルトの名無しさん
2022/09/01(木) 02:19:44.48ID:UU16wx/t もしかしてelectron知らないのかしら
620デフォルトの名無しさん
2022/09/01(木) 08:30:45.73ID:+imQtRK+ スクリプトって知らないのかしらん?
621デフォルトの名無しさん
2022/09/01(木) 09:29:49.86ID:WQm7Gv/J vscはコア部は全部C++だけど。
そのうえに薄くjs乗ってるだけやがな。
そのうえに薄くjs乗ってるだけやがな。
622デフォルトの名無しさん
2022/09/01(木) 09:46:54.90ID:NH2cx+n6 Tauri (Rust) vs. Electron (C++)の戦いの結果…
> Electronの代替を目指す軽量なRust製フレームワーク「Tauri」
> https://www.publickey1.jp/blog/22/electronrusttauri.html
>
> Electronはフロントエンドの基盤としてChromiumを組み込んでいますが、
> Tauriでは代わりに各OSが備えているWebViewの機能を、抽象化レイヤのwry経由で呼び出すことで、
> クロスプラットフォームを実現しつつChromiumを不要にしています。
> フレームワーク内にChromiumを組み込まないことでセキュリティも向上すると、Tauri開発チームは説明しています。
↓ 「マジ?!」と思っていたらマジだった!!
>開発フレームワーク「Electron」に複数の脆弱性
>https://news.mynavi.jp/techplus/article/20220818-2426640/
>
>Electronは、HTML5やCSS、JavaScriptといったWeb技術を用いてデスクトップアプリケーションを開発することができるフレームワークで、
>Microsoft TeamsやVisual Studio Code(VSCode)、Discordなどの人気アプリケーションでも利用されている。
>今回のElectronの脆弱性に関する発表は、米国で開催されたサイバーセキュリティカンファレンス「Black Hat USA 2022」の次のセッションで行われたもの。
>研究チームがElectronを使用して開発された20のアプリケーションを調査し、そこで発見された複数の脆弱性について報告した。
>発見された脆弱性の一例としては、以下が挙げられている。
>・VS Codeにおけるリモートコード実行の脆弱性
>・Discordにおけるリモートコード実行の脆弱性
>・Microsoft Teamsにおけるクロスサイトスクリプティング脆弱性
>・ChromeのCSP(Content Security Policy)バイパスの脆弱性
>・V8のリモートコード実行の脆弱性
> Electronの代替を目指す軽量なRust製フレームワーク「Tauri」
> https://www.publickey1.jp/blog/22/electronrusttauri.html
>
> Electronはフロントエンドの基盤としてChromiumを組み込んでいますが、
> Tauriでは代わりに各OSが備えているWebViewの機能を、抽象化レイヤのwry経由で呼び出すことで、
> クロスプラットフォームを実現しつつChromiumを不要にしています。
> フレームワーク内にChromiumを組み込まないことでセキュリティも向上すると、Tauri開発チームは説明しています。
↓ 「マジ?!」と思っていたらマジだった!!
>開発フレームワーク「Electron」に複数の脆弱性
>https://news.mynavi.jp/techplus/article/20220818-2426640/
>
>Electronは、HTML5やCSS、JavaScriptといったWeb技術を用いてデスクトップアプリケーションを開発することができるフレームワークで、
>Microsoft TeamsやVisual Studio Code(VSCode)、Discordなどの人気アプリケーションでも利用されている。
>今回のElectronの脆弱性に関する発表は、米国で開催されたサイバーセキュリティカンファレンス「Black Hat USA 2022」の次のセッションで行われたもの。
>研究チームがElectronを使用して開発された20のアプリケーションを調査し、そこで発見された複数の脆弱性について報告した。
>発見された脆弱性の一例としては、以下が挙げられている。
>・VS Codeにおけるリモートコード実行の脆弱性
>・Discordにおけるリモートコード実行の脆弱性
>・Microsoft Teamsにおけるクロスサイトスクリプティング脆弱性
>・ChromeのCSP(Content Security Policy)バイパスの脆弱性
>・V8のリモートコード実行の脆弱性
623デフォルトの名無しさん
2022/09/01(木) 12:18:02.95ID:Wlby5VAy >>621
そうなん?わりとネイティブが薄くてTSが主体だと思ってた。
そうなん?わりとネイティブが薄くてTSが主体だと思ってた。
624デフォルトの名無しさん
2022/09/02(金) 12:29:12.76ID:EMfEx7SW GUIがtsの時点でお察し
やたらとモッサリしてんじゃん
やたらとモッサリしてんじゃん
625デフォルトの名無しさん
2022/09/02(金) 22:13:08.24ID:06QeBluE --emit asmで吐かれるアセンブラリストのフォーマットの資料ってどっかにある?
gas系っぽく見えるけどちょいちょい判らないのが・・・
gas系っぽく見えるけどちょいちょい判らないのが・・・
626デフォルトの名無しさん
2022/09/02(金) 22:55:35.95ID:TRifMPKk --emit=asm -C "llvm-args=-x86-asm-syntax=intel”とかで指定できるみたいよ
627デフォルトの名無しさん
2022/09/04(日) 14:45:48.94ID:c9grlmUi VScodeがもっさりは感じたことないな
ネイティブのVSのほうが重すぎ
ネイティブのVSのほうが重すぎ
628デフォルトの名無しさん
2022/09/05(月) 15:09:06.52ID:LmWvGk9l 関数の入出力はu8だけど関数内の計算はi32で行いたい場合って普通どんな感じで書くの?
629デフォルトの名無しさん
2022/09/05(月) 15:19:35.29ID:TAlRHagA そんなユースケースあるの?
630デフォルトの名無しさん
2022/09/05(月) 15:31:51.51ID:TaR2CBOa >>629
隔離スレでドヤりたいというユースケース
隔離スレでドヤりたいというユースケース
631デフォルトの名無しさん
2022/09/05(月) 15:54:23.38ID:vyOP5LW0 いつも隔離スレのここが機能してくれて助かってます
633628
2022/09/05(月) 17:50:42.31ID:Y4+oTyIj 例えばこんなの
fn func(x: u8, y: u8) -> u8 {
let x32 = x as i32;
let y32 = y as i32;
let z32 = (((x32 - y32) * 170) >> 16) + y32;
return z32 as u8;
}
4行使うのは冗長かなーと思わなくもなく・・・
テンポラリ変数の名前を考えるのもちょっと面倒だし
fn func(x: u8, y: u8) -> u8 {
let x32 = x as i32;
let y32 = y as i32;
let z32 = (((x32 - y32) * 170) >> 16) + y32;
return z32 as u8;
}
4行使うのは冗長かなーと思わなくもなく・・・
テンポラリ変数の名前を考えるのもちょっと面倒だし
634デフォルトの名無しさん
2022/09/05(月) 17:54:10.85ID:vXwuqGKm635デフォルトの名無しさん
2022/09/05(月) 19:20:47.36ID:g3RfqaIY >>633
行数短くしたいだけなら
fn func(x: u8, y: u8) -> u8 {
let (x, y) = (x as u8, y as u8);
(((x - y) * 170) >> 16) + y) as u8
}
とは書けるけどやってることは全く同じだしこれで期待に応えられてるかは分からん
行数短くしたいだけなら
fn func(x: u8, y: u8) -> u8 {
let (x, y) = (x as u8, y as u8);
(((x - y) * 170) >> 16) + y) as u8
}
とは書けるけどやってることは全く同じだしこれで期待に応えられてるかは分からん
636デフォルトの名無しさん
2022/09/05(月) 19:21:35.07ID:g3RfqaIY637デフォルトの名無しさん
2022/09/05(月) 21:29:56.32ID:wI2HBmBd638デフォルトの名無しさん
2022/09/05(月) 21:38:39.53ID:F/g4kaon x < y の場合考慮してなさそう
639デフォルトの名無しさん
2022/09/05(月) 21:53:26.61ID:wI2HBmBd ホントだごめん訂正
fn func(x: u8, y: u8) -> u8 {
y - (x < y) as u8
}
fn func(x: u8, y: u8) -> u8 {
y - (x < y) as u8
}
640デフォルトの名無しさん
2022/09/06(火) 00:31:42.49ID:EiVnVIDc 結局u8で返すなら
途中でi32使わずとも
工夫するとu8のままだけで算出できちゃったりするわけか
途中でi32使わずとも
工夫するとu8のままだけで算出できちゃったりするわけか
641デフォルトの名無しさん
2022/09/06(火) 00:52:56.28ID:uJFa29+7 逆方向にシフトした場合は?
そんな用途があるのか知らんけど
そんな用途があるのか知らんけど
642デフォルトの名無しさん
2022/09/06(火) 01:12:27.41ID:EiVnVIDc643628
2022/09/06(火) 11:02:40.94ID:xGSGq1SQ644デフォルトの名無しさん
2022/09/07(水) 08:11:56.26ID:8saglJYc Rustのバイトオーダーってそのターゲットのネイティブ(x64ならリトルエンディアン)で良いの?
645デフォルトの名無しさん
2022/09/07(水) 08:24:04.31ID:41cUJGIp もちろん
そして依存しないよう3種類用意されてる
assert_eq!(0x01020304, u32::from_be_bytes([1, 2, 3, 4])); // big endian
assert_eq!(0x04030201, u32::from_le_bytes([1, 2, 3, 4])); // little endian
assert_eq!(XXX, u32::from_ne_bytes([1, 2, 3, 4])); // native endian
そして依存しないよう3種類用意されてる
assert_eq!(0x01020304, u32::from_be_bytes([1, 2, 3, 4])); // big endian
assert_eq!(0x04030201, u32::from_le_bytes([1, 2, 3, 4])); // little endian
assert_eq!(XXX, u32::from_ne_bytes([1, 2, 3, 4])); // native endian
646デフォルトの名無しさん
2022/09/07(水) 23:31:51.68ID:qqHULq33 native endianというのは初めて聞いたのですが、これはどういうものなのですか?
647デフォルトの名無しさん
2022/09/07(水) 23:54:21.35ID:En8I5Kb5 この場合 >>644も書いているようにコンパイルターゲット環境のエンディアンのこと
特にターゲット指定がなければ自分の使っているPC環境で通常はx64などlittle endianになりますが
そこでleと指定してはダメで環境に応じて適切に対応させるためにneを使います
一方でAPIなどでエンディアンが指定されてる時は指定通りbeかleを使います
特にターゲット指定がなければ自分の使っているPC環境で通常はx64などlittle endianになりますが
そこでleと指定してはダメで環境に応じて適切に対応させるためにneを使います
一方でAPIなどでエンディアンが指定されてる時は指定通りbeかleを使います
648デフォルトの名無しさん
2022/09/08(木) 00:04:41.95ID:nmwPOGZ0 >>645
サンクス。u32とかにはfrom_leとかあるみたいですね。こっちの方が使う機会は多そう
デフォルトのバイトオーダーを変更したり、変数やフィールド単位でバイトオーダーを設定する
みたいな芸当は流石に無理なのかな・・・ググったけどそれっぽい情報は見つけられなかった
サンクス。u32とかにはfrom_leとかあるみたいですね。こっちの方が使う機会は多そう
デフォルトのバイトオーダーを変更したり、変数やフィールド単位でバイトオーダーを設定する
みたいな芸当は流石に無理なのかな・・・ググったけどそれっぽい情報は見つけられなかった
649デフォルトの名無しさん
2022/09/08(木) 00:19:17.65ID:8UoQH6yi >>648
操作に最適なバイトオーダーは使用CPUで決まるネイティブエンディアン
だから原則としてネイティブエンディアンのみでプログラミングする
例外として外部とのやりとりなどエンディアン指定がある時はその境界で変換
操作に最適なバイトオーダーは使用CPUで決まるネイティブエンディアン
だから原則としてネイティブエンディアンのみでプログラミングする
例外として外部とのやりとりなどエンディアン指定がある時はその境界で変換
650はちみつ餃子 ◆8X2XSCHEME
2022/09/08(木) 00:23:28.76ID:MG9wnc1h >>648
内部的に色々な表現を有りということにするならやりたい操作を個別に定義するしかないよ。
でも普通はそんな煩雑なことをしたくないから
内部的には一環した表現を使って必要な変換は入出力のみというのが一般的な構成だし、
言語やライブラリも基本的には一般的な構成に倣っている。
内部的に色々な表現を有りということにするならやりたい操作を個別に定義するしかないよ。
でも普通はそんな煩雑なことをしたくないから
内部的には一環した表現を使って必要な変換は入出力のみというのが一般的な構成だし、
言語やライブラリも基本的には一般的な構成に倣っている。
651デフォルトの名無しさん
2022/09/08(木) 01:11:28.44ID:U6/gufpm >>648
変数やフィールドのメモリ上の表現が特定のエンディアンにしたいのであれば、
#[repr(C)]
struct BeU32([u8; 4]);
みたいな構造体を用意して
impl Be32 {
fn get(&self) -> u32 { u32::from_be_bytes(self.0) }
fn ser (&mut self, v: u32) { self.0 = v.to_be_bytes(); }
}
こういうアクセサを実装すれば良いかと
何の役に立つのかはよくわからないけど、特定のエンディアンでシリアライズされたデータにそのままアクセスしたい場合とかに便利なのかな
変数やフィールドのメモリ上の表現が特定のエンディアンにしたいのであれば、
#[repr(C)]
struct BeU32([u8; 4]);
みたいな構造体を用意して
impl Be32 {
fn get(&self) -> u32 { u32::from_be_bytes(self.0) }
fn ser (&mut self, v: u32) { self.0 = v.to_be_bytes(); }
}
こういうアクセサを実装すれば良いかと
何の役に立つのかはよくわからないけど、特定のエンディアンでシリアライズされたデータにそのままアクセスしたい場合とかに便利なのかな
652デフォルトの名無しさん
2022/09/08(木) 01:21:33.97ID:5HeI/FQK mansplainers
653デフォルトの名無しさん
2022/09/08(木) 15:55:57.30ID:Vswe11EN RustをOpenMPIに対応させるようなプロジェクトってありますか?
654デフォルトの名無しさん
2022/09/08(木) 16:49:24.48ID:mLv3aAxt 「Rust OpenMPI」でGoogle検索
655デフォルトの名無しさん
2022/09/08(木) 18:02:42.70ID:U6/gufpm OpenMP なのか Open MPI なのかどっち
656デフォルトの名無しさん
2022/09/08(木) 20:45:38.87ID:Vswe11EN 知りたいのはOpenMPIの方です
ググるとOpenMPIとOpenMPを勘違いしたと思われるRayonを紹介する記事が出てきたり、OpenMPがらみのサイトが出てきたり、なかなか状況が分かりません・・・・
ググるとOpenMPIとOpenMPを勘違いしたと思われるRayonを紹介する記事が出てきたり、OpenMPがらみのサイトが出てきたり、なかなか状況が分かりません・・・・
657デフォルトの名無しさん
2022/09/08(木) 20:53:50.25ID:RwfCQI7B 一番上のrsmpiは違うの
658デフォルトの名無しさん
2022/09/08(木) 21:56:17.41ID:fa0yFdt8 MPIはHPC以外では使う必要ないです
機械学習でも有用だとは思いますが
そもそもフレームワークが対応していないから
全部自前で作ってるような人以外は必要ないです
機械学習でも有用だとは思いますが
そもそもフレームワークが対応していないから
全部自前で作ってるような人以外は必要ないです
659デフォルトの名無しさん
2022/09/09(金) 01:14:31.51ID:4b4Wyf25 Open MPIに限らずMPIはアプリから見たらただのライブラリだからRust側で特別な対応は不要で単にCの関数を呼び出せばよいだけでは
660デフォルトの名無しさん
2022/09/09(金) 08:12:49.36ID:auDHI5c1 良くありがちな奴だと思うけど
struct ARGB32 {A: u8, R: u8, G: u8, B: u8,}
みたいに書くとスネークケースじゃないと警告が出るけどどう書くのがRust流なの?
これ小文字にしちゃったら少なからず可読性が落ちるよね
struct ARGB32 {A: u8, R: u8, G: u8, B: u8,}
みたいに書くとスネークケースじゃないと警告が出るけどどう書くのがRust流なの?
これ小文字にしちゃったら少なからず可読性が落ちるよね
661デフォルトの名無しさん
2022/09/09(金) 08:31:41.27ID:WeF8ASv0 #[allow(non_snake_case)]
しかしフィールド名だけ小文字にすれば不要
struct ARGB32 {a: u8, r: u8, g: u8, b: u8,}
そして可読性が落ちると思わない
しかしフィールド名だけ小文字にすれば不要
struct ARGB32 {a: u8, r: u8, g: u8, b: u8,}
そして可読性が落ちると思わない
662デフォルトの名無しさん
2022/09/09(金) 09:24:21.25ID:4b4Wyf25 構造体名もCamelCaseでArgb32とすべきかな
663デフォルトの名無しさん
2022/09/09(金) 12:29:38.55ID:6YdHvwwi 識別子を極端に省略するのは良くないという現代のプログラミングの流儀と業界の略語でコンフリクトしてるよね。
略語を使わずに書くとこうかね?
Color<T>{alpha: T, red: T, green: T, blue: T}
CMYはどうなるとか言い出すやつがいると面倒そうだけど。
略語を使わずに書くとこうかね?
Color<T>{alpha: T, red: T, green: T, blue: T}
CMYはどうなるとか言い出すやつがいると面倒そうだけど。
664デフォルトの名無しさん
2022/09/09(金) 12:42:45.67ID:VsTRsG1f enum Color {
Red,
Blue,
Green,
RGB(u32, u32, u32),
HSV(u32, u32, u32),
HSL(u32, u32, u32),
CMY(u32, u32, u32),
CMYK(u32, u32, u32, u32),
}
Red,
Blue,
Green,
RGB(u32, u32, u32),
HSV(u32, u32, u32),
HSL(u32, u32, u32),
CMY(u32, u32, u32),
CMYK(u32, u32, u32, u32),
}
665デフォルトの名無しさん
2022/09/09(金) 13:41:22.02ID:4b4Wyf25 最低限ガイドには従った方が良いと思う
https://rust-lang.github.io/api-guidelines/naming.html
acronymはひとつ単語として扱うとあるから Rgb とか Argb とすべき
あとは適当なグラフィック系ライブラリの実装を見て真似してみたら良いのでは
規約に従ってないライブラリも多いけど
そもそも既存crate使えば独自にArgb型定義する必要もなくなるかもしれない
https://rust-lang.github.io/api-guidelines/naming.html
acronymはひとつ単語として扱うとあるから Rgb とか Argb とすべき
あとは適当なグラフィック系ライブラリの実装を見て真似してみたら良いのでは
規約に従ってないライブラリも多いけど
そもそも既存crate使えば独自にArgb型定義する必要もなくなるかもしれない
666はちみつ餃子 ◆8X2XSCHEME
2022/09/09(金) 14:02:11.22ID:gp9Eay33 API ガイドラインってことは、 API として公開しない (内部的な) 名前は雑でいいってことだよね。
667デフォルトの名無しさん
2022/09/09(金) 14:15:33.61ID:+r9uXbjm668デフォルトの名無しさん
2022/09/09(金) 14:42:45.26ID:4b4Wyf25 >>666
非公開部分を将来公開APIにする可能性や、自分以外の誰かがソース読んでパッチ作ってくれる可能性考えると、
最初から内部も規約に従ったものにしておいた方が良いと思う
そもそもひとつのプロジェクトの中で公開部分と非公開部分で異なる規約混在するのも嫌では
非公開部分を将来公開APIにする可能性や、自分以外の誰かがソース読んでパッチ作ってくれる可能性考えると、
最初から内部も規約に従ったものにしておいた方が良いと思う
そもそもひとつのプロジェクトの中で公開部分と非公開部分で異なる規約混在するのも嫌では
669デフォルトの名無しさん
2022/09/09(金) 15:18:27.40ID:QLGZdL8Z mozillaは公開できない関数名を使ってオープンソース化が数年遅れた過去があったなぁ。
670デフォルトの名無しさん
2022/09/09(金) 15:35:09.62ID:7NqN1r1N gameraとか?
671デフォルトの名無しさん
2022/09/09(金) 16:00:26.66ID:wraz5iEP672デフォルトの名無しさん
2022/09/09(金) 17:53:00.11ID:rfSAUeXI CreateFileW in windows::Win32::Storage::FileSystem - Rust
ttps://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Storage/FileSystem/fn.CreateFileW.html
とかAPIガイドラインもクソもないけど名前だけRustに寄せたところでリファレンスドキュメント(MSDN)との差異が
拡大するだけでメリットはほとんど無いような
ttps://microsoft.github.io/windows-docs-rs/doc/windows/Win32/Storage/FileSystem/fn.CreateFileW.html
とかAPIガイドラインもクソもないけど名前だけRustに寄せたところでリファレンスドキュメント(MSDN)との差異が
拡大するだけでメリットはほとんど無いような
673デフォルトの名無しさん
2022/09/09(金) 21:16:36.10ID:pyHRaXAz JPEG、MPEG、PNG、HEVC・・・すでに略されている物をありがちな命名規則で書くと判りにくくなる
674デフォルトの名無しさん
2022/09/09(金) 22:46:34.35ID:B0h43lqZ >>673
同意
同意
675デフォルトの名無しさん
2022/09/10(土) 00:32:32.71ID:qBfKxAEz >>663
その方向でやってみます
というかこの構造体をArrayに沢山詰めようとすると初期化が難しいのか。どうしようか悩んだ結果こうしてみた
#![no_std]
const LEN: u32 = 640*480;
let mut bitmap:[u32; LEN] = [0; LEN];
let mut bitmap:[ARGB32; LEN] = unsafe {core::intrinsics::transmute::<_, [ARGB32; LEN]>(bitmap)};
bitmap[0].red = 0xFF;
アセンブラリストを見る限りは問題なさそう
その方向でやってみます
というかこの構造体をArrayに沢山詰めようとすると初期化が難しいのか。どうしようか悩んだ結果こうしてみた
#![no_std]
const LEN: u32 = 640*480;
let mut bitmap:[u32; LEN] = [0; LEN];
let mut bitmap:[ARGB32; LEN] = unsafe {core::intrinsics::transmute::<_, [ARGB32; LEN]>(bitmap)};
bitmap[0].red = 0xFF;
アセンブラリストを見る限りは問題なさそう
676デフォルトの名無しさん
2022/09/10(土) 01:19:16.36ID:BhJh8aSd acronymを全部大文字にするか先頭だけ大文字にするかってそんなに大きな問題かな
一貫性のあるルールに従っていれば書き手や読み手として混乱することもないと思うんだが
一貫性のあるルールに従っていれば書き手や読み手として混乱することもないと思うんだが
677デフォルトの名無しさん
2022/09/10(土) 03:00:06.93ID:Rsh0NV07 Ipv4なんて一瞬なんのことか分からんかったな
結局慣れで、一貫性以上に価値のある好みなんてのはない
結局慣れで、一貫性以上に価値のある好みなんてのはない
678デフォルトの名無しさん
2022/09/10(土) 07:09:44.43ID:2MfL7Eat >>676
その一貫性が崩れるのがいやなんだろ。
ドキュメント・コメントでは全部大文字なのにコードでは先頭だけ大文字とか。
慣れの問題だが、今まで/一般的 に全部大文字で慣れてるものをこの時だけ先頭大文字に慣らせというのは抵抗感あって当たり前。
その一貫性が崩れるのがいやなんだろ。
ドキュメント・コメントでは全部大文字なのにコードでは先頭だけ大文字とか。
慣れの問題だが、今まで/一般的 に全部大文字で慣れてるものをこの時だけ先頭大文字に慣らせというのは抵抗感あって当たり前。
679デフォルトの名無しさん
2022/09/10(土) 07:12:21.94ID:2MfL7Eat680デフォルトの名無しさん
2022/09/10(土) 12:37:11.73ID:GXRB1/O5 命名規則を利用する目的は可読性や開発効率の向上などのはず
一般的な表記から外れるのであればそれなりの理由が必要であろう
「命名規則に従ったから」では「目的より手段を優先している、合理性がない」などと
突っ込まれてもしょうがない
一般的な表記から外れるのであればそれなりの理由が必要であろう
「命名規則に従ったから」では「目的より手段を優先している、合理性がない」などと
突っ込まれてもしょうがない
681デフォルトの名無しさん
2022/09/10(土) 13:03:13.98ID:jQKLnU5m JavaScriptのアイツは
XmlHttpRequestと命名されるべきだったのか?
XMLHTTPRequestと命名されるべきだったのか?
XmlHttpRequestと命名されるべきだったのか?
XMLHTTPRequestと命名されるべきだったのか?
682デフォルトの名無しさん
2022/09/10(土) 13:20:38.77ID:AMhmGX9g eXtend Markup Language Hyper Text Transfer Protocol Request
683デフォルトの名無しさん
2022/09/10(土) 13:38:53.61ID:D1Nb21qC 完全に好みの問題と思うから何らかのルールで統一されてればどっちでも良いと思うけど、
LCD TV、nVidia、iOS IoT Hubなんかをどう表記するかとか変数名ならどうしようとか考えるのめんどいから
表記の慣例とか無視して全部キャメルケースにしちゃうな
LCD TV、nVidia、iOS IoT Hubなんかをどう表記するかとか変数名ならどうしようとか考えるのめんどいから
表記の慣例とか無視して全部キャメルケースにしちゃうな
684デフォルトの名無しさん
2022/09/10(土) 13:50:29.86ID:TnGNUz3W ルールから逸脱させるかどうか悩むならルールに合わせておくおじさんになった
685デフォルトの名無しさん
2022/09/10(土) 14:31:16.93ID:/uHulLcW Rustすれのレベルの低さにガッカリ
Python質問すれとかみたいに和気あいあいとしてない殺伐にドッキリ
Python質問すれとかみたいに和気あいあいとしてない殺伐にドッキリ
686デフォルトの名無しさん
2022/09/10(土) 14:56:40.59ID:qBfKxAEz >>675みたいに書いた場合
>let mut bitmap:[u32; LEN] = [0; LEN];
のmutが余計だと警告が出る。この場合実際に確保されるメモリ領域は書き込みも出来るスタックフレームだろうし
mutを取っても動作上は問題ないと思うけど、mutがない領域に書き込むことになりプログラムの意味としては誤っている
参照先を強制的に書き換えるようなコードを書くと、とコードと警告と動作のミスマッチが起きる気がするけど
なんか上手い書き方はないのだろうか
この辺の低レイヤーの用途で参照先を書き換える話ってBookのReferenceやUnsafeあたりにもそれっぽい事書いてないし
どこを見たらいいのか判らない
>let mut bitmap:[u32; LEN] = [0; LEN];
のmutが余計だと警告が出る。この場合実際に確保されるメモリ領域は書き込みも出来るスタックフレームだろうし
mutを取っても動作上は問題ないと思うけど、mutがない領域に書き込むことになりプログラムの意味としては誤っている
参照先を強制的に書き換えるようなコードを書くと、とコードと警告と動作のミスマッチが起きる気がするけど
なんか上手い書き方はないのだろうか
この辺の低レイヤーの用途で参照先を書き換える話ってBookのReferenceやUnsafeあたりにもそれっぽい事書いてないし
どこを見たらいいのか判らない
687デフォルトの名無しさん
2022/09/10(土) 15:47:06.47ID:BhJh8aSd >>675
ARGB32にDefault実装して
let mut bitmap : [ARGB32; LEN] = Default::default();
とするのが良いかと
repr(C)がついてない構造体のメモリ上での表現がどうなるかは保証されてないから元のコードが意図通り動作する保証はないと思う
ARGB32にDefault実装して
let mut bitmap : [ARGB32; LEN] = Default::default();
とするのが良いかと
repr(C)がついてない構造体のメモリ上での表現がどうなるかは保証されてないから元のコードが意図通り動作する保証はないと思う
688デフォルトの名無しさん
2022/09/10(土) 15:48:16.32ID:vDnMZIxl689デフォルトの名無しさん
2022/09/10(土) 15:54:53.07ID:BhJh8aSd >>687
[T; N] は N <= 27 までしかDefault実装されてなかったからこのコードじゃダメだった
こっちならOK
let mut bitmap: [ARGB32; LEN] = std::array::from_fn(|_i| Default::default());
[T; N] は N <= 27 までしかDefault実装されてなかったからこのコードじゃダメだった
こっちならOK
let mut bitmap: [ARGB32; LEN] = std::array::from_fn(|_i| Default::default());
690デフォルトの名無しさん
2022/09/10(土) 16:11:30.59ID:sOVkY8n5 最後の手段のtransmuteは安易に使うものじゃないと思う
691デフォルトの名無しさん
2022/09/10(土) 16:39:14.44ID:qBfKxAEz692デフォルトの名無しさん
2022/09/10(土) 18:12:40.24ID:n3Y/KVD/ >>686
最初に定義した変数bitmapはmoveしてるだけだからmutは余計でいいと思うけど?
最初に定義した変数bitmapはmoveしてるだけだからmutは余計でいいと思うけど?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【いちご高騰】ヤマザキのクリスマスケーキ、いちご無し販売 [おっさん友の会★]
- ネット殺到「高市総理の責任」「完全に高市リスク」「負けるな」中国が水産物輸入停止→流石に総理批判の声も「どう責任取る?」 ★10 [樽悶★]
- 【日中対立】 朝日新聞のタイトル修正が中国逆ギレの火種か SNSで批判相次ぐ [♪♪♪★]
- 「ドラゴンボール」初の全世界キャラクター人気投票が開幕!212キャラからナンバーワンが決まる!! [ひかり★]
- 【音楽】『日本レコード大賞』各賞発表! 大賞候補にILLIT、M!LK、ふるっぱー、幾田りら、アイナ、ミセスら… 作詩賞は指原莉乃 [冬月記者★]
- 映画史上もっとも“スカッとする”結末の作品5選 [muffin★]
- 【悲報】秋元康「女性アイドルグループはもうオワコン。会いにいける男性アイドルグループを作る」 [455031798]
- ダイエット始めたんだけど500mすら泳ぐの辛い
- 【すべてが】𝗮𝗺͜𝗮͉𝘇𝗼𝗻ブラックフライデーSALE総合【いいだろ!】 [194819832]
- 【高市速報】日本人の3割「中国への武力行使に踏み切る必要がある」ANN世論調査 [931948549]
- ワイ刀オタ、欲しい刀が中々ネットで見つからず咽び泣く
- 【訃報】日経平均先物逝く、円安株安債券安 [943688309]
