公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust
公式ドキュメント
https://www.rust-lang.org/learn
Web上の実行環境
https://play.rust-lang.org
※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 part24
https://mevius.5ch.net/test/read.cgi/tech/1716759686/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
探検
Rust part25
■ このスレッドは過去ログ倉庫に格納されています
2024/07/31(水) 00:46:26.17ID:DBMWY2QT
374デフォルトの名無しさん
2024/08/23(金) 22:02:55.80ID:IFprRKq6375デフォルトの名無しさん
2024/08/23(金) 22:05:42.82ID:cja0xMPs UTF-8 はランダムアクセスに難があるが文字列のランダムアクセスってそんなに要らんだろという割りきりだな。
やりたければ UTF-32 用の型を使えるし、あくまでも言語の基本には UTF-8 を据えるってだけ。
やりたければ UTF-32 用の型を使えるし、あくまでも言語の基本には UTF-8 を据えるってだけ。
376デフォルトの名無しさん
2024/08/23(金) 22:07:14.75ID:7RGZdp5c >>371
そこは一般プログラマーじゃないと仮定して、UnsafeCell使うならこんな感じでいいんですかね?
RustのUBにちょっと詳しくなくて
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=509935956fa3b81133414a9e19920557
そこは一般プログラマーじゃないと仮定して、UnsafeCell使うならこんな感じでいいんですかね?
RustのUBにちょっと詳しくなくて
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=509935956fa3b81133414a9e19920557
377デフォルトの名無しさん
2024/08/23(金) 22:26:58.16ID:IFprRKq6 UnsafeCellは内部可変性を持つ安全な型を作るためのunsafeな部品として存在している
目的外に使う人に対しては今後は他の質問についても答えない
目的外に使う人に対しては今後は他の質問についても答えない
378デフォルトの名無しさん
2024/08/23(金) 22:27:06.29ID:TPfx6yeo >>376
値が数値だから今のところ問題ないけどこの実装だとListを新しいConsに突っ込んだ瞬間に
先頭の値の参照先が無効になりそうだな
自作にこだわらないならtyped-arenaを使うといい
https://docs.rs/typed-arena/latest/typed_arena/
小さいライブラリだから自作の参考にもなると思う
ライブラリ使わないならどこかでunsafeは必要になる
値が数値だから今のところ問題ないけどこの実装だとListを新しいConsに突っ込んだ瞬間に
先頭の値の参照先が無効になりそうだな
自作にこだわらないならtyped-arenaを使うといい
https://docs.rs/typed-arena/latest/typed_arena/
小さいライブラリだから自作の参考にもなると思う
ライブラリ使わないならどこかでunsafeは必要になる
379デフォルトの名無しさん
2024/08/23(金) 22:50:35.38ID:7RGZdp5c ちょっとuser-friendlyに整理してみた
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=509935956fa3b81133414a9e19920557
>>378
ListNode<T>は絶対にBoxに包むようにして、itemはヒープ上のTを指してるので
unsafeの中で間違ってBoxをdropしなければ無効な参照は発生しないと思うんですが、どうなんでしょう
typed-arena!
存在は知ってたけど、RefCellと組み合わせてグラフをなんかいい感じに扱えるやつくらいの認識だったので完全に盲点でした
これでいけそうです、ありがとうございます
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=509935956fa3b81133414a9e19920557
>>378
ListNode<T>は絶対にBoxに包むようにして、itemはヒープ上のTを指してるので
unsafeの中で間違ってBoxをdropしなければ無効な参照は発生しないと思うんですが、どうなんでしょう
typed-arena!
存在は知ってたけど、RefCellと組み合わせてグラフをなんかいい感じに扱えるやつくらいの認識だったので完全に盲点でした
これでいけそうです、ありがとうございます
380デフォルトの名無しさん
2024/08/23(金) 22:55:03.65ID:7RGZdp5c おっとリンク再生成してなかった
ちょっとuser-friendlyに整理してみた版
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=b0ca47dce14c07da2936f1964bc54485
ちょっとuser-friendlyに整理してみた版
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=b0ca47dce14c07da2936f1964bc54485
381デフォルトの名無しさん
2024/08/23(金) 23:21:46.23ID:HH2aHznt 安全だと思い込んでunsafeを使うやつはCでも使っとけ
382デフォルトの名無しさん
2024/08/23(金) 23:29:15.36ID:3P3xaQHb 依存クレートの中からunsafeを検索して一覧表示するようなツールある?
383デフォルトの名無しさん
2024/08/24(土) 00:11:50.62ID:7iJIMzJC 数えるだけならcargo-geiger
ナンセンスすぎて使ったことないけど
ナンセンスすぎて使ったことないけど
384デフォルトの名無しさん
2024/08/24(土) 05:53:44.99ID:4DIR6G6I >>382
あまり意味がない気もする
actix-webの作者は「unsafe使うな」「それはRustのやり方ではない」という沢山の声にうんざりして開発停止する事件が起きた
unsafeは危険というよりも「このコードの安全性はコンパイラでは検証しないので実装者が責任を持つ」ブロックと考えて、よくテストされたライブラリについてならある程度信用して良いと思う
あまり意味がない気もする
actix-webの作者は「unsafe使うな」「それはRustのやり方ではない」という沢山の声にうんざりして開発停止する事件が起きた
unsafeは危険というよりも「このコードの安全性はコンパイラでは検証しないので実装者が責任を持つ」ブロックと考えて、よくテストされたライブラリについてならある程度信用して良いと思う
385デフォルトの名無しさん
2024/08/24(土) 07:54:28.69ID:hn86gB+V unsafeは人間が安全性を保証しなければいけないため、必ず多くの監視者がいなければいけない。
そして不必要なコードと必要で安全なコードを皆で選別しなければならない。
パフォーマンスにほぼ影響なく無くせるケースは無くすべきというのが第一原則。
そして不必要なコードと必要で安全なコードを皆で選別しなければならない。
パフォーマンスにほぼ影響なく無くせるケースは無くすべきというのが第一原則。
386デフォルトの名無しさん
2024/08/24(土) 07:56:32.18ID:hn86gB+V 一方でRustの標準ライブラリには何千ものunsafeが存在していて、安全なインターフェースを提供してくれている。
このおかげで我々はunsafeを使わずにパフォーマンスの高いコードを書くことができる。
標準ライブラリと同様に他のクレートでも下支えをしてくれるものは同じ立ち位置として認められているものが多い。
つまり必要不可欠なものである。
いずれにしてもライブラリ内に隔離して外向けに安全なインターフェースを提供してくれることが第一原則。
このおかげで我々はunsafeを使わずにパフォーマンスの高いコードを書くことができる。
標準ライブラリと同様に他のクレートでも下支えをしてくれるものは同じ立ち位置として認められているものが多い。
つまり必要不可欠なものである。
いずれにしてもライブラリ内に隔離して外向けに安全なインターフェースを提供してくれることが第一原則。
387デフォルトの名無しさん
2024/08/24(土) 08:06:32.30ID:4K3Bdck4 Rust の参照についている様々な制約は機械的に解析可能なように制限したのであって
人間的な感覚での適切な抽象やデザインパターンと両立不可能な場合がある。
機械的検証可能性を維持するために不自然なデザインを持ち込むのが健全とは言い難いよ。
unsafe はなるべく低レイヤの小さな範囲に押し込めたほうが良いのは確かだが、
プロジェクトの性質によってはそれがもうちょっと高レイヤまではみ出してくることだってあるだろ。
人間的な感覚での適切な抽象やデザインパターンと両立不可能な場合がある。
機械的検証可能性を維持するために不自然なデザインを持ち込むのが健全とは言い難いよ。
unsafe はなるべく低レイヤの小さな範囲に押し込めたほうが良いのは確かだが、
プロジェクトの性質によってはそれがもうちょっと高レイヤまではみ出してくることだってあるだろ。
388デフォルトの名無しさん
2024/08/24(土) 08:21:40.08ID:oc2+bqUo >>382
grep
grep
389デフォルトの名無しさん
2024/08/24(土) 08:22:12.74ID:zb5PQrw4390デフォルトの名無しさん
2024/08/24(土) 09:00:02.66ID:p6ioLyHc391デフォルトの名無しさん
2024/08/24(土) 10:45:01.27ID:ddJ1kwEW servoが最低限まともに動くようになるには、あと軽く5年はかかる
今のバージョン動かしてみ?
夢見すぎ
今のバージョン動かしてみ?
夢見すぎ
392デフォルトの名無しさん
2024/08/24(土) 11:01:21.63ID:YypCtLY/ >>384
>unsafeは危険というよりも「このコードの安全性はコンパイラでは検証しないので実装者が責任を持つ」ブロックと考えて、よくテストされたライブラリについてならある程度信用して良いと思う
こういうスタンスはダメだよな
作ってるアプリによっては許される場合もあるんだろうけど
>unsafeは危険というよりも「このコードの安全性はコンパイラでは検証しないので実装者が責任を持つ」ブロックと考えて、よくテストされたライブラリについてならある程度信用して良いと思う
こういうスタンスはダメだよな
作ってるアプリによっては許される場合もあるんだろうけど
393デフォルトの名無しさん
2024/08/24(土) 11:31:23.33ID:yTiOx0eZ >>390
俺はtauriのコアコンセプトはOSが提供するブラウザエンジンを使い、バイナリサイズやセキュリティアップデートの問題を解決することだと俺は思ってるんだ。
だからRust使ってるからservo使うってのは門外漢には自然に見えてもコアコンセプトを忘れてもともとの問題を解決しないOSSになっていってる感じがするんだよな。
俺はtauriのコアコンセプトはOSが提供するブラウザエンジンを使い、バイナリサイズやセキュリティアップデートの問題を解決することだと俺は思ってるんだ。
だからRust使ってるからservo使うってのは門外漢には自然に見えてもコアコンセプトを忘れてもともとの問題を解決しないOSSになっていってる感じがするんだよな。
394デフォルトの名無しさん
2024/08/24(土) 11:47:25.22ID:7iJIMzJC ブラウザエンジンの選択肢が増えるだけでしょ
wryの中のfeatureが増えるのかwryごとservoに差し替えるfeatureになるのかは知らんけど
wryの中のfeatureが増えるのかwryごとservoに差し替えるfeatureになるのかは知らんけど
395デフォルトの名無しさん
2024/08/24(土) 12:27:15.89ID:7lrMjW7E .NET 9の新機能としてC#版Tauriが来るらしい
Go版Tauriもあるらしいし、流行ってるのかな
Go版Tauriもあるらしいし、流行ってるのかな
396デフォルトの名無しさん
2024/08/24(土) 12:33:53.63ID:4K3Bdck4 疎結合でブラウザを GUI として使うには接続部分を上手く標準化する必要がある。
参加が多いほど標準化の圧力が生まれるし、良いことだと思う。
参加が多いほど標準化の圧力が生まれるし、良いことだと思う。
397デフォルトの名無しさん
2024/08/24(土) 13:14:00.45ID:Ou5o/VfJ いまどき疎結合とか意味のないこだわりだな
398デフォルトの名無しさん
2024/08/24(土) 13:30:29.34ID:7lrMjW7E 疎結合とかそういうかっこいい話じゃなくて
今どき新規にGUIツールキット作ってもウィジェット開発してくれる人が集まらないから
Web技術転用してしのぐかって話でしょ?
当のMicrosoftは3連続ぐらいで新GUIツールキットの開発に失敗しバグ残したまま撤退を繰り返してるし
今どき新規にGUIツールキット作ってもウィジェット開発してくれる人が集まらないから
Web技術転用してしのぐかって話でしょ?
当のMicrosoftは3連続ぐらいで新GUIツールキットの開発に失敗しバグ残したまま撤退を繰り返してるし
399デフォルトの名無しさん
2024/08/24(土) 13:38:09.55ID:4K3Bdck4 unicode の表示からしてウェブブラウザ以外は規格に追い付いてない感触はあるなあ……
400デフォルトの名無しさん
2024/08/24(土) 13:46:07.91ID:6hMOShrr401デフォルトの名無しさん
2024/08/24(土) 13:46:41.99ID:Ou5o/VfJ いまはネットワークが高速で繋がっている前提なのなw
402デフォルトの名無しさん
2024/08/24(土) 13:54:50.23ID:62s/s0Ka >>395
仕組みは組み込みWebViewをネイティブの上で起動してるだけだから作るのが大して手間じゃないし実装してみたって感じでしょ
仕組みは組み込みWebViewをネイティブの上で起動してるだけだから作るのが大して手間じゃないし実装してみたって感じでしょ
403デフォルトの名無しさん
2024/08/24(土) 14:58:54.54ID:Jkp0q3NQ >>382
github
github
404デフォルトの名無しさん
2024/08/24(土) 15:01:04.10ID:Jkp0q3NQ >>387
+1
+1
405デフォルトの名無しさん
2024/08/24(土) 15:03:55.41ID:Jkp0q3NQ >>401
これホント困るわ
これホント困るわ
406デフォルトの名無しさん
2024/08/24(土) 16:36:29.92ID:yTiOx0eZ407デフォルトの名無しさん
2024/08/24(土) 16:50:25.05ID:tVyuBhwz unsafeブロックってどこからどこまで囲えば良いんだろう
408デフォルトの名無しさん
2024/08/24(土) 18:11:39.50ID:YypCtLY/ >>407
「可能な限り小さく」が原則
「可能な限り小さく」が原則
409デフォルトの名無しさん
2024/08/24(土) 18:18:35.56ID:oEJCcg2t Rustでunsafeは使ってはいけない
例外的にunsafeの使用が認められるのは以下2点のみ
ベテランが基盤クレートを提供する時
ベテランがFFI部分を記述する時
例外的にunsafeの使用が認められるのは以下2点のみ
ベテランが基盤クレートを提供する時
ベテランがFFI部分を記述する時
410デフォルトの名無しさん
2024/08/24(土) 18:20:35.25ID:4K3Bdck4 unsafe なことをやっている箇所をなるべく小さい範囲で囲むべきだがお互いに関係のある複数の unsafe がごく近くにあるならまとめて囲むほうが分かりやすいということはあるかもね。
411デフォルトの名無しさん
2024/08/24(土) 18:29:15.33ID:L19e2eSE そういうケースを除くとunsafeを使ってる者は技術力がないだけのバカと
パフォーマンスにほとんど変化しないのに高速化してるつもりで保守性を下げてるアホだからな
パフォーマンスにほとんど変化しないのに高速化してるつもりで保守性を下げてるアホだからな
412デフォルトの名無しさん
2024/08/24(土) 18:32:37.91ID:wRPlPCuY Rustでどう書くのか分かりませんが、C言語で書けば、
BYTE *ConvertUintToPtr( Uint32 u ) {
unsafe {
return (BYTE*)u;
}
}
のような関数をRustで作ることは出来ますかね?
BYTE *ConvertUintToPtr( Uint32 u ) {
unsafe {
return (BYTE*)u;
}
}
のような関数をRustで作ることは出来ますかね?
413デフォルトの名無しさん
2024/08/24(土) 18:33:08.29ID:tVyuBhwz >>408
最小限にするなら、>>380はこうしたほうがいいってことかね
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=f27cd2a3b6b850770a839c17d6fe3ec4
unsafeブロックもブロックではあるから、通常のブロックと同様にdropが働くから、それに注意して無効な参照をsafe内に持ち出さないようにすればいいってことかね?
最小限にするなら、>>380はこうしたほうがいいってことかね
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=f27cd2a3b6b850770a839c17d6fe3ec4
unsafeブロックもブロックではあるから、通常のブロックと同様にdropが働くから、それに注意して無効な参照をsafe内に持ち出さないようにすればいいってことかね?
414デフォルトの名無しさん
2024/08/24(土) 18:43:12.73ID:HUq12b/T >>406
現状だと
servo「うちの鰻丼を置かせてください!」
tauri「まぁ客に出せる味になったらメニューに加えてもいいよ」
くらいの温度感に見えるけどなぁ。これまでの発表はservo側からだし、tauriチームとしてservoに全面移行するなんて話は出てないと思うけど
現状だと
servo「うちの鰻丼を置かせてください!」
tauri「まぁ客に出せる味になったらメニューに加えてもいいよ」
くらいの温度感に見えるけどなぁ。これまでの発表はservo側からだし、tauriチームとしてservoに全面移行するなんて話は出てないと思うけど
415デフォルトの名無しさん
2024/08/24(土) 18:46:57.91ID:u5pZaQPK416デフォルトの名無しさん
2024/08/24(土) 18:51:25.05ID:0FPuuX3m unsafe Rust使うくらいならCでよくない?
反対意見あったら言ってくれ
反対意見あったら言ってくれ
417デフォルトの名無しさん
2024/08/24(土) 18:52:59.44ID:73Xik/Zr418デフォルトの名無しさん
2024/08/24(土) 18:53:02.17ID:tVyuBhwz >>415
一応Referenceのunsafe blockの部分は読んだけど、nomiconも全部読まなきゃだめ?
具体的にどこが間違っている/作法に反しているのか指摘してくれるとありがたいんですが……
一応Referenceのunsafe blockの部分は読んだけど、nomiconも全部読まなきゃだめ?
具体的にどこが間違っている/作法に反しているのか指摘してくれるとありがたいんですが……
419デフォルトの名無しさん
2024/08/24(土) 18:55:23.20ID:wRPlPCuY >>417
参考のため、どう書けばいいのか教えていただければ幸いです。
参考のため、どう書けばいいのか教えていただければ幸いです。
420デフォルトの名無しさん
2024/08/24(土) 18:55:51.72ID:NdtpJtS7421デフォルトの名無しさん
2024/08/24(土) 18:57:28.86ID:73Xik/Zr422デフォルトの名無しさん
2024/08/24(土) 19:07:44.35ID:tVyuBhwz >>412
変換するだけならunsafeも特に要らなくて、ただのasキャストでいいみたいね
fn convert_uint_to_ptr(u: usize) -> *mut u8 {
u as *mut u8
}
これをやるだけの関数なら、まだstableじゃないけど標準ライブラリにもあるようで
安全にするためにstrict provenance rulesなる仕様を検討中な様子
https://doc.rust-lang.org/std/primitive.pointer.html#method.from_bits-1
https://doc.rust-lang.org/std/ptr/fn.with_exposed_provenance_mut.html
変換するだけならunsafeも特に要らなくて、ただのasキャストでいいみたいね
fn convert_uint_to_ptr(u: usize) -> *mut u8 {
u as *mut u8
}
これをやるだけの関数なら、まだstableじゃないけど標準ライブラリにもあるようで
安全にするためにstrict provenance rulesなる仕様を検討中な様子
https://doc.rust-lang.org/std/primitive.pointer.html#method.from_bits-1
https://doc.rust-lang.org/std/ptr/fn.with_exposed_provenance_mut.html
423デフォルトの名無しさん
2024/08/24(土) 19:24:20.93ID:7iJIMzJC ポインタは観測するまで安全
424デフォルトの名無しさん
2024/08/24(土) 20:06:41.28ID:Rv8eKBYx 逆参照しなきゃ安全
だけど大体はアドレスがわかってるならそれを指すポインタや参照もわかってるはずなのでアドレスをポインタにする機会はそんなにない
だけど大体はアドレスがわかってるならそれを指すポインタや参照もわかってるはずなのでアドレスをポインタにする機会はそんなにない
425デフォルトの名無しさん
2024/08/24(土) 20:08:48.83ID:puH13oDz >>392
そらそうやけど、それでうまく行くならC++でええやんいう話になるわな
そらそうやけど、それでうまく行くならC++でええやんいう話になるわな
426デフォルトの名無しさん
2024/08/24(土) 20:22:17.51ID:ZYhP4fGD Rustに不慣れで技術力の低い人がunsafeを使う傾向が高い
ほとんどのケースは既存の安全なパーツを組み合わせるだけで安全に実装できる
ほとんどのケースは既存の安全なパーツを組み合わせるだけで安全に実装できる
427デフォルトの名無しさん
2024/08/24(土) 21:14:33.88ID:tVyuBhwz >>426
単発君
自分でunsafeを書く必要性がない書く気がないならそれでいいと思うし、その立場は理解したから、どうか他人の足を引っ張らないでくれ
unsafeの書き方を学ぼうという同志がいないのならそのうち去るから、すまないがそれまで待ってくれないか
単発君
自分でunsafeを書く必要性がない書く気がないならそれでいいと思うし、その立場は理解したから、どうか他人の足を引っ張らないでくれ
unsafeの書き方を学ぼうという同志がいないのならそのうち去るから、すまないがそれまで待ってくれないか
428デフォルトの名無しさん
2024/08/24(土) 21:26:04.07ID:4K3Bdck4 unsafe で UB になる場合を知りたい場合にはどこに仕様が書いてあるのかがそもそもわからん。
429デフォルトの名無しさん
2024/08/24(土) 21:26:45.92ID:Fuip7Jnb UnsafeCellを使ってる頭のおかしな人のコードはborrow checkerに引っかかってコンパイルを通せないところから始まってるよね
unsafeの使い方を学ぶのではなくsafe Rustの使い方を学ぶべきかと
unsafeの使い方を学ぶのではなくsafe Rustの使い方を学ぶべきかと
430デフォルトの名無しさん
2024/08/24(土) 22:11:07.05ID:tVyuBhwz >>428
現状のベストエフォートのまとめはこれですかねえ
LLVMのマニュアルなんて参照しちゃってるから、LLVM IRまでのloweringの詳細を完璧に把握でもしていない限りこれを一次資料として参考にするってのは無理そうですが……
https://doc.rust-lang.org/reference/behavior-considered-undefined.html
あとは呼んでいるunsafe fn/実装しているunsafe traitのドキュメント(当たり前)と、the Referenceをundefinedで検索した結果とかでいいんでしょうか
現状のベストエフォートのまとめはこれですかねえ
LLVMのマニュアルなんて参照しちゃってるから、LLVM IRまでのloweringの詳細を完璧に把握でもしていない限りこれを一次資料として参考にするってのは無理そうですが……
https://doc.rust-lang.org/reference/behavior-considered-undefined.html
あとは呼んでいるunsafe fn/実装しているunsafe traitのドキュメント(当たり前)と、the Referenceをundefinedで検索した結果とかでいいんでしょうか
431デフォルトの名無しさん
2024/08/24(土) 22:14:58.07ID:cfGbu5GL 既存の安全なパーツを使いこなせる熟練者であることがunsafeを書くための最低限の資格だ
これができないとunsafeを使うべきか否かという入口すら判断できない
これができないとunsafeを使うべきか否かという入口すら判断できない
432デフォルトの名無しさん
2024/08/24(土) 22:53:26.45ID:4K3Bdck4 Rust のメモリまわりの動作モデルは結局は C/C++ に合わせることにしたみたいな話をどこかで見たようなおぼろげな記憶がちょっとある。
LLVM がなんだかんだで C/C++ を想定した形になってしまっているのとその辺の低レイヤの部分がちゃんとモデル化されている言語が C/C++ くらいしかないから Rust のためにあらためて検討するくらいならもう合わせちゃって良くない? みたいなニュアンスだったと思うんだけどどこで見たのかも思い出せないから違ってたらごめんね。
LLVM がなんだかんだで C/C++ を想定した形になってしまっているのとその辺の低レイヤの部分がちゃんとモデル化されている言語が C/C++ くらいしかないから Rust のためにあらためて検討するくらいならもう合わせちゃって良くない? みたいなニュアンスだったと思うんだけどどこで見たのかも思い出せないから違ってたらごめんね。
433デフォルトの名無しさん
2024/08/24(土) 23:22:54.73ID:2MnTl83M >>422
有難うございます。
ところで、Rustでは、unsafe 以外では、専ら参照型が使われると思っていたのですが、
unsafe を使わない部分でも、ポインタ型 * が使えるようですね。
Rustにおけるポインタ型を参照型のアドレスに採用する方法も教えていただければ幸いです。
C++ であれば、
T x; //xは、T型の変数。
T *p = &x; //pは、T型へのポインタ型。アドレスは変数xのアドレス。
T &r = *p; //rは、T型の参照型。
で、参照型rのアドレスがpの指すアドレスに一致しますね。
有難うございます。
ところで、Rustでは、unsafe 以外では、専ら参照型が使われると思っていたのですが、
unsafe を使わない部分でも、ポインタ型 * が使えるようですね。
Rustにおけるポインタ型を参照型のアドレスに採用する方法も教えていただければ幸いです。
C++ であれば、
T x; //xは、T型の変数。
T *p = &x; //pは、T型へのポインタ型。アドレスは変数xのアドレス。
T &r = *p; //rは、T型の参照型。
で、参照型rのアドレスがpの指すアドレスに一致しますね。
434デフォルトの名無しさん
2024/08/24(土) 23:31:10.68ID:BmB2eUS9435デフォルトの名無しさん
2024/08/24(土) 23:50:29.93ID:2MnTl83M >>434
では、C++であるならば、以下の様に書けそうなコードをRustで書くとすると
どうなるでしょうか。
BYTE &ConvertPtrToRef( BYTE *p ) {
unsafe {
return *p;
}
}
では、C++であるならば、以下の様に書けそうなコードをRustで書くとすると
どうなるでしょうか。
BYTE &ConvertPtrToRef( BYTE *p ) {
unsafe {
return *p;
}
}
436デフォルトの名無しさん
2024/08/25(日) 00:56:39.20ID:al6llTVI unsafe { p.as_ref().expect("p is not null") }
unsafe { p.as_mut().expect("p is not null") }
unsafe { &*p }
unsafe { &mut *p }
unsafe { p.as_mut().expect("p is not null") }
unsafe { &*p }
unsafe { &mut *p }
437デフォルトの名無しさん
2024/08/25(日) 01:28:05.04ID:dkRsAaY3 そもそもRustの参照とC++の参照が1対1に対応しないので、そこを無視してもどうなんだという問題
438あぼーん
NGNGあぼーん
439デフォルトの名無しさん
2024/08/25(日) 06:34:29.42ID:5GOytbIs >>438
まじか
まじか
440デフォルトの名無しさん
2024/08/25(日) 15:06:59.24ID:ftonnHt3441デフォルトの名無しさん
2024/08/25(日) 16:07:14.33ID:+NmqKH/G unsafe大好き
442デフォルトの名無しさん
2024/08/26(月) 07:21:14.48ID:HvObP+1c unsafe rustよりzig
443デフォルトの名無しさん
2024/08/26(月) 07:32:17.72ID:EZDOC4zz zigは未完成
444デフォルトの名無しさん
2024/08/26(月) 11:03:43.55ID:3+7ACU+U zigよりNim
445デフォルトの名無しさん
2024/08/26(月) 12:45:51.89ID:6drfVC9J Rustでunsafeを迂闊に使っていると信用失墜リスクがある
例えば安全に書けるシーンでunsafeを使っていればRustに疎くレベルが低いと客観的に判定されてしまう
そして書いたコードは信頼されなくなるため要注意だ
例えば安全に書けるシーンでunsafeを使っていればRustに疎くレベルが低いと客観的に判定されてしまう
そして書いたコードは信頼されなくなるため要注意だ
446デフォルトの名無しさん
2024/08/26(月) 13:27:24.67ID:/RxTrZ/p んでNimよりCってわけ
447デフォルトの名無しさん
2024/08/26(月) 23:59:19.70ID:TniAJlSa unsafeなしに拘るならそもそもunsafeという仕様のない言語を使えば良いのでは
448デフォルトの名無しさん
2024/08/27(火) 00:09:57.79ID:ft2/OuFA unsafeはFFI部分と基盤ライブラリで必須
そのためにある
そのためにある
449デフォルトの名無しさん
2024/08/27(火) 01:18:15.13ID:meLOHly2 あんまり必死になると>>307が図星なのがバレるぞ
450あぼーん
NGNGあぼーん
451デフォルトの名無しさん
2024/08/27(火) 05:12:31.56ID:SWsi92BQ >>450
既に貰ってる
既に貰ってる
452デフォルトの名無しさん
2024/08/27(火) 14:18:24.38ID:oHcafaf7 unsafeって危険だから描くんじゃなくて
unsafeを描くことで危険を回避出来るんだ
だからunsafeが使われてるからって危険なコードじゃないんだ
unsafeを観たら危険だと脊髄反射する方が馬鹿の誤解
unsafeを描くことで危険を回避出来るんだ
だからunsafeが使われてるからって危険なコードじゃないんだ
unsafeを観たら危険だと脊髄反射する方が馬鹿の誤解
453デフォルトの名無しさん
2024/08/27(火) 14:18:59.31ID:oHcafaf7 だから >>445 はピンぼけ的外れ
454デフォルトの名無しさん
2024/08/27(火) 14:29:34.76ID:rXlpHGM8 RustかC++のどちらかなのかはRustで落ち着いたけど
unsafe RustかCかは結局どっちがいいんだい?
unsafe RustかCかは結局どっちがいいんだい?
455デフォルトの名無しさん
2024/08/27(火) 14:38:55.67ID:f/nerXJl >>454
え?いつの間に落ち着いたの?
え?いつの間に落ち着いたの?
456デフォルトの名無しさん
2024/08/27(火) 14:47:28.58ID:fKaZ1hCT457デフォルトの名無しさん
2024/08/27(火) 15:35:17.48ID:VmCaZkt1 >>452
おまえは何を言ってるんだw
おまえは何を言ってるんだw
458デフォルトの名無しさん
2024/08/27(火) 15:36:49.68ID:i930s1KJ >>456
1.0になってから来てくれ
1.0になってから来てくれ
459デフォルトの名無しさん
2024/08/27(火) 16:13:13.47ID:kbqekxQE460デフォルトの名無しさん
2024/08/28(水) 04:07:55.29ID:2ujtxZGB 最大サイズのマインスイーパーだと
プログラムに解かせるのに30分くらいかかるのか
それはメモリを積むと速くなったり
コア数を積むと速くなったり
未知のアルゴリズムで速くなったりする?
プログラムに解かせるのに30分くらいかかるのか
それはメモリを積むと速くなったり
コア数を積むと速くなったり
未知のアルゴリズムで速くなったりする?
461デフォルトの名無しさん
2024/08/28(水) 09:07:31.11ID:o9WnFihZ まあそうなるよなw
頭悪いたとえ話だから仕方がない
頭悪いたとえ話だから仕方がない
462デフォルトの名無しさん
2024/08/28(水) 09:16:54.18ID:YkYaTCgW でもプログラムに解かせるのに30分もかからないだろくらいの感覚は常識として持っておいて欲しいところ
463デフォルトの名無しさん
2024/08/28(水) 10:32:38.93ID:Uwy2gXCW マインスイーパーはNP完全であると証明されていてかなり難問
さらにそもそも常に論理的に解けるわけではないためリゾルバーは勝率100%ではなく問題難易度別に平均勝率が示される
具体的には論理的推論で開けられる場所がなくなった時に人間は運ゲーとなるが機雷のある場所の確率計算により勝率を高められる
その手法ならびに巨大サイズによっては計算時間30分はありうるのではないか
さらにそもそも常に論理的に解けるわけではないためリゾルバーは勝率100%ではなく問題難易度別に平均勝率が示される
具体的には論理的推論で開けられる場所がなくなった時に人間は運ゲーとなるが機雷のある場所の確率計算により勝率を高められる
その手法ならびに巨大サイズによっては計算時間30分はありうるのではないか
464デフォルトの名無しさん
2024/08/28(水) 11:57:33.04ID:t9eW5UMl465デフォルトの名無しさん
2024/08/28(水) 12:03:45.27ID:HLZOwn4a 例えば話悪すぎるのは理解するけど、プログラムにマインスイーパー解かせる話だっけ
466デフォルトの名無しさん
2024/08/28(水) 12:21:33.97ID:Bl8r2+HB >>464
なぜ0.1秒ではなく1秒ではなく100秒ではなく10秒なのか?
なぜ0.1秒ではなく1秒ではなく100秒ではなく10秒なのか?
467デフォルトの名無しさん
2024/08/28(水) 12:23:32.67ID:Bl8r2+HB >>465
プログラム板のプログラミング言語スレでそれ以外にどんな可能性があるか?
プログラム板のプログラミング言語スレでそれ以外にどんな可能性があるか?
468デフォルトの名無しさん
2024/08/28(水) 13:59:37.19ID:APdn6MV3 誤魔化せれば何でもいいから意味の無いレスを拾ってごちゃごちゃ書き込んでるんだろう
469デフォルトの名無しさん
2024/08/28(水) 16:33:13.07ID:iRpE4/QL いつのまにかAndroid公式ドキュメントにRustの章ができてた
470デフォルトの名無しさん
2024/08/28(水) 17:22:14.56ID:kssH4dJX AndroidはJNIをJavaとバイナリとの間に噛ませないといけないからほんとに面倒くさい
471デフォルトの名無しさん
2024/08/28(水) 19:34:23.32ID:njVvvVc1 >>459
君頭悪いのに無理に例えなんか使わないほうがいいよ
君頭悪いのに無理に例えなんか使わないほうがいいよ
472デフォルトの名無しさん
2024/08/28(水) 21:16:27.54ID:qM6sg2ID まさかマインスイーパーの例え自体が地雷になるとはw
Rustスレなのにunsafeだな
Rustスレなのにunsafeだな
473デフォルトの名無しさん
2024/08/28(水) 22:54:19.83ID:kssH4dJX さあみなさま、脱unsafeを心がけていきましょう!
■ このスレッドは過去ログ倉庫に格納されています
