公式
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
352デフォルトの名無しさん
2024/08/22(木) 20:23:18.57ID:bSiaItqF353デフォルトの名無しさん
2024/08/22(木) 22:43:10.37ID:0OofYQEx Firefoxはおっさんしか使っていない
354デフォルトの名無しさん
2024/08/22(木) 22:46:45.14ID:RW7BB5aO chrome 系一色になるのも良くはないからね。
355デフォルトの名無しさん
2024/08/22(木) 22:47:07.99ID:Vc+ybjuc Rust信者からするとこの期に及んでC++でブラウザの再実装なんて始めやがったLadybirdのことは全力で呪ってる感じ?
356デフォルトの名無しさん
2024/08/22(木) 22:57:32.73ID:0cYmGRHf chromiumがC++のメモリ管理ミスでセキュリティ脆弱性を毎回出し続けているように
ブラウザのような新機能を常に加えていく大規模ソフトウェアでC++の使用は無理がある
だからchromiumはRustを採用し始めた
ブラウザのような新機能を常に加えていく大規模ソフトウェアでC++の使用は無理がある
だからchromiumはRustを採用し始めた
357デフォルトの名無しさん
2024/08/22(木) 23:59:43.53ID:cneVZgKz >>355
Ladybirdは作者が慣れてるから初期実装をC++でやっただけでSwift6.0が出たら移行みたいだよ
まぁRustのエコシステムに貢献してくれたほうが良かったとは思うけど、Swiftならいいんじゃないかな
Ladybirdは作者が慣れてるから初期実装をC++でやっただけでSwift6.0が出たら移行みたいだよ
まぁRustのエコシステムに貢献してくれたほうが良かったとは思うけど、Swiftならいいんじゃないかな
358デフォルトの名無しさん
2024/08/23(金) 00:10:40.25ID:P1vs0moa Swiftが遅い原因は
Rustで例えるとArc<Mutex<T>>を常用することでメモリ管理問題から逃げているため
という理解でいいのかな
Rustで例えるとArc<Mutex<T>>を常用することでメモリ管理問題から逃げているため
という理解でいいのかな
359デフォルトの名無しさん
2024/08/23(金) 00:24:23.39ID:4TKwTCLB Chromeは生ポインタ使ってるところを
一気にスマートポインタ等に置き換えたという
話を何年か前に聞いたけどそれじゃダメなんだな
一気にスマートポインタ等に置き換えたという
話を何年か前に聞いたけどそれじゃダメなんだな
360デフォルトの名無しさん
2024/08/23(金) 09:32:17.32ID:1xE8ro2C &strはlowercaseプルプル
361デフォルトの名無しさん
2024/08/23(金) 09:59:59.89ID:cja0xMPs primitive type は小文字ってのは Java あたりを踏襲した感じなのかね?
362デフォルトの名無しさん
2024/08/23(金) 10:07:13.27ID:cja0xMPs >>359
スマートポインタだけでは駄目で、 Rust で言うスライスみたいなものがないと安全に管理できない。
近年の C++ にはそういうライブラリも追加されたけどまだちょっと整備が不足している。
C++ は標準ライブラリには過剰なほど高い抽象度・汎用性を求めるので多次元のコンテナとの辻褄合わせでずっと議論してる……
スマートポインタだけでは駄目で、 Rust で言うスライスみたいなものがないと安全に管理できない。
近年の C++ にはそういうライブラリも追加されたけどまだちょっと整備が不足している。
C++ は標準ライブラリには過剰なほど高い抽象度・汎用性を求めるので多次元のコンテナとの辻褄合わせでずっと議論してる……
363デフォルトの名無しさん
2024/08/23(金) 10:12:11.46ID:UhIA8/Kr364デフォルトの名無しさん
2024/08/23(金) 10:29:44.46ID:cja0xMPs >>363
いや、暗黙の前提として「標準ライブラリの型名は camel case なのに」ってのを含んでる。
つまり「primitive とライブラリを違えている」ということを話題にしたくて、それを原則にしている言語の例として Java を挙げた。
いや、暗黙の前提として「標準ライブラリの型名は camel case なのに」ってのを含んでる。
つまり「primitive とライブラリを違えている」ということを話題にしたくて、それを原則にしている言語の例として Java を挙げた。
365デフォルトの名無しさん
2024/08/23(金) 12:43:06.00ID:HH2aHznt RustでcamelCaseは用いない
基本型は小文字
structやenumで作る型および別名はUpperCamelCaseを用いる
例えばstrは基本型だから小文字
StringはstructだからUpperCamelCase
基本型は小文字
structやenumで作る型および別名はUpperCamelCaseを用いる
例えばstrは基本型だから小文字
StringはstructだからUpperCamelCase
366デフォルトの名無しさん
2024/08/23(金) 14:34:53.94ID:gM6UWsJN strって言うほど基本型か? 問題
367デフォルトの名無しさん
2024/08/23(金) 15:29:42.74ID:gM6UWsJN https://users.rust-lang.org/t/why-is-str-a-primitive-type/36551
ふーん
Javaとは違ってprimitiveかそうでないかによる重要な違いはなくて、別に区別する必要性はそこまでないし、気にするだけ無駄そう
名前持ちのprimitive型の中でstrだけがDSTなのが違和感の正体かも
ふーん
Javaとは違ってprimitiveかそうでないかによる重要な違いはなくて、別に区別する必要性はそこまでないし、気にするだけ無駄そう
名前持ちのprimitive型の中でstrだけがDSTなのが違和感の正体かも
368デフォルトの名無しさん
2024/08/23(金) 15:49:44.63ID:HH2aHznt array(記述は[T; N])やslice(記述は[T])やstrはもちろん基本型
そしてヒープを必要としない
だからcoreにありno_stdでも使える
一方でBoxやVecやStringはヒープを必要とする
だからcoreにはなくallocにある
そしてヒープを必要としない
だからcoreにありno_stdでも使える
一方でBoxやVecやStringはヒープを必要とする
だからcoreにはなくallocにある
369デフォルトの名無しさん
2024/08/23(金) 20:34:48.59ID:7RGZdp5c https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=d8fa7bff7e61accb6f6bf7f0d4075dae
要素への不変参照を保ちつつ追加できるコレクションが欲しくて試しに書いてみたけど、どうすりゃいいんだ
UnsafeCell使うしかない?
要素への不変参照を保ちつつ追加できるコレクションが欲しくて試しに書いてみたけど、どうすりゃいいんだ
UnsafeCell使うしかない?
370デフォルトの名無しさん
2024/08/23(金) 21:33:21.24ID:IFprRKq6 >>367
スライスとstrとdynはDSTだからこそprimitiveだよ
参照が他と異なりfatポインタになるからね
"あいうえお" を正規UTF8と定めた点もRustの良いところ
それをprimitiveな型strとしたのも良い判断だね
スライスとstrとdynはDSTだからこそprimitiveだよ
参照が他と異なりfatポインタになるからね
"あいうえお" を正規UTF8と定めた点もRustの良いところ
それをprimitiveな型strとしたのも良い判断だね
371デフォルトの名無しさん
2024/08/23(金) 21:41:42.80ID:IFprRKq6 >>369
それは単純に参照を借りっぱなしになってるエラー
どこまで何をしたいのかによるけど
そのコンパイルエラーを解消したいだけなら
Cons(T, Box<List<T>>)を
Cons(Rc<T>, Box<List<T>>)にして
Some(t)をSome(t.clone())すればよい
ちなみにUnsafeCellは内部可変性の源泉なので
そういう新たな汎用型を作る時に使うものでunsafeだよ
一般プログラマーは使ってはいけない
それは単純に参照を借りっぱなしになってるエラー
どこまで何をしたいのかによるけど
そのコンパイルエラーを解消したいだけなら
Cons(T, Box<List<T>>)を
Cons(Rc<T>, Box<List<T>>)にして
Some(t)をSome(t.clone())すればよい
ちなみにUnsafeCellは内部可変性の源泉なので
そういう新たな汎用型を作る時に使うものでunsafeだよ
一般プログラマーは使ってはいけない
372デフォルトの名無しさん
2024/08/23(金) 21:46:56.38ID:cja0xMPs 名前に露骨に Unsafe って付いてるんだから十分な理解なしに使うのはやめておけという意図は感じるよな。
373デフォルトの名無しさん
2024/08/23(金) 21:47:30.17ID:3P3xaQHb >>370
UTF-32の方が単純で良かったんじゃないか?
UTF-32の方が単純で良かったんじゃないか?
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
既に貰ってる
既に貰ってる
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 【映画】『クレヨンしんちゃん』 中国で公開延期 対日報復、エンタメに波及 [冬月記者★]
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- サロピン💗行って来たらさWWWWWWWWWWWWWWWWWWWWWWWW
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- ウッドデッキで調子こいてたやついたじゃん
- 🦉エッホエッホ アンパンマンは猫舌って伝えなきゃ
- えんやすー
