Rust part27

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2024/12/02(月) 22:32:50.31ID:D+1pIyvG
公式
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 part26
https://mevius.5ch.net/test/read.cgi/tech/1726838318/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2024/12/23(月) 22:20:47.40ID:GhTcJSaR
Rustに興味出てきたからとりあえず、とほほさんのサイトに目を通してみたんだけど
…もしかしてあの方、非同期処理と並列処理をごっちゃに理解している?

https://www.tohoho-web.com/ex/rust.html#async-await
2024/12/23(月) 22:54:25.61ID:OG1FFUyc
>>143
lock freeはそう
今回のアルゴリズムはRelaxedでも大丈夫だがmemory orderingに注意を要する

>>144
executor (runtime) とそこでの使い方次第
single thread で並列(parallel)なく並行(concurrent)のみも可能であるし
それをmulti threadで並行並列も可能であるし
blockさせて並行なく専属並列も可能
2024/12/28(土) 15:51:05.67ID:SGU/9qSb
Rustしか勝たん
2024/12/28(土) 17:09:23.73ID:IXmLUnxX
こういうアホが湧いてきたときがピークだな
2024/12/28(土) 17:20:50.92ID:T6F1mfjg
WebAssemblyはRustが主流なイメージだけど実際どんなもんだろ
2024/12/28(土) 18:28:20.06ID:wm6lCJnC
linuxカーネルがシェルスクリプトの付属品にならなかったのはシェルを変更できるから
だがjsは、変更不可能にすればjsが永久に主流だというのを意図的にやっている
2025/01/01(水) 12:59:04.47ID:emEmRiID
>>149
何いってんだお前?
2025/01/01(水) 18:48:34.00ID:0dTGHEt/
触るな触るな
152デフォルトの名無しさん
垢版 |
2025/01/03(金) 23:49:31.66ID:hQWrSYwJ
ひといないねこのすれ
153デフォルトの名無しさん
垢版 |
2025/01/04(土) 10:08:52.56ID:9AJmtK0P
だからマルチスレッドで発生しうる競合はその2つだけじゃないから

それだけで安全と言い切れるわけないだろ

そもそも安全性ってお前が作るアプリで必要なの?
Linuxカーネルや組み込みだったらわかるけどそんな高度なプログラム作ってんの?
飛行機のシステム作ってて命がかかってるとかならわかるが、その辺のアプリで安全性とかどうでもいいよね

Rust馬鹿信者は開発生産性を軽視しすぎだ、開発生産性を犠牲に安全性に振ってるのがRustだがアプリの特性によって安全性なんぞどうでもいいことが多い

開発生産性が一番重要
154デフォルトの名無しさん
垢版 |
2025/01/04(土) 11:56:56.49ID:Z095809L
難しさによる障壁はあるけど、慣れれば生産性自体は高い言語だと思う
ライブラリ多いし、ちょっとしたツールを作る程度ならエラーハンドリングもそんなに頑張らなくて良いし (anyhow を使えば割と雑に書ける)

流石にPythonのような手軽さは無いけど、C++よりは遥かに書きやすいし、個人的にはC#やJavaよりも楽だと思うくらい
これは言語仕様でなくツールの話だけど、プロジェクトを作ったり、ライブラリを追加したりするのが楽

学習コストが高いのはその通りで、誰かが書いたツールを他の人が保守しづらいみたいな問題はどうしようもないけど…
(そういう用途ならGoが良さそう)
2025/01/04(土) 12:23:29.13ID:5PJMX9Ru
>>154
他人が書いたコードの保守しやすさはGoより上だと感じてるけどな
型含めてコード上に情報が豊富で作者の意図を取りやすいから
かなり巨大なOSSでも割と楽にプルリクとか出せる
156デフォルトの名無しさん
垢版 |
2025/01/04(土) 12:59:21.10ID:OzBQvYrX
>>155
「自分がRustに慣れてるなら」それは自分も同意
自分の意見は
・Rustは分かるようになるまでが大変
・理解できれば開発者にとって強力な言語
で、「Goの方が向く」というのはとっつきやすさを含めた話のつもりで書いた
他言語の経験者から見たら、たぶんRustは型やトレイトの意味を理解するのが難しいし、参照などのルールを理解しないとコンパイルすら通らないから、Goの方が触りやすいんじゃないかと思う

Arc, Rc, Cell, Mutex とかの型は分かる人にとってはmeaningfulだけど、初学者がすぐに分かるものではないと思う
2025/01/04(土) 13:59:36.84ID:5PJMX9Ru
>>156
単純にメンテする人員を確保しづらいという意味ならそれはそう
2025/01/04(土) 22:40:45.82ID:xBPs09Kz
rustのいい所はresultやoption.その他色々な型について文脈が大体決まっていること。なので慣れると人が書いたコードでも読みやすい。c#やjavaとの比較であれば開発効率は大体同じか、勝っているぐらい。nullや例外がある言語はプログラムがどうしても汚くなる。
rustはaiにコード生成させた時の品質も割といい。コンパイルエラーでても対応方法が具体的なのでそのままメッセージをaiに渡すだけで直る。
2025/01/04(土) 22:49:58.13ID:xBPs09Kz
AIが当たり前の時代においてはコードの記述量そのものは開発効率に直結するものではなくなる。どの言語でも似たような事は出来る。でも作られたコードが、正しいかどうかは別の問題。
AIはたまに嘘を付くので、それをコンパイラで厳密にチエックする必要がある。そういう意味では関数型言語へのシフトは進むし、rustはいい位置にいると思う。
2025/01/04(土) 23:01:31.53ID:tP/ja7AQ
関数型関係ないから
2025/01/04(土) 23:15:15.09ID:FAAvXSOV
>>159
関数型である部分ではなく
Rustが安全性にも役立つ史上最強の型システムを構築したことが決め手かな
特にトレイトそしてトレイト境界
さらに例えばSendやSyncといった概念的なトレイトなど
2025/01/05(日) 00:44:18.92ID:TOCT7c8i
そうなんだ、Rustってすごいんだね!
163デフォルトの名無しさん
垢版 |
2025/01/05(日) 11:01:38.28ID:8kdOFrcZ
関数型関係ないから
2025/01/05(日) 13:34:15.55ID:4B4hqpXY
お前ら9連休はちゃんと楽しめたか?
165デフォルトの名無しさん
垢版 |
2025/01/05(日) 16:19:33.22ID:mRHgcQU5
九連休に一回もコード書いてない陽キャはこのスレ書き込み禁止な
2025/01/05(日) 18:30:14.16ID:Rb8d6mKE
体力落ちないように散歩しまくってたら脚の裏に豆出来たよ
2025/01/05(日) 18:46:31.56ID:7ZREq1Cz
陰キャなのに今年のコード書いてなかった

fn main() {
println!("{}年", (0..10u64).map(|i| i.pow(3)).sum::<u64>());
println!("{}年", (0..10u64).sum::<u64>().pow(2));
}

sum()の型アノテーション外せないの?
2025/01/06(月) 00:22:47.46ID:criPfDaa
>>167
型アノテーションは必要。
オーバーフローしない十分に大きな型を選定しなきゃならないから。
浮動小数点ならオーバーフローはしないが必要な精度を推論しようがないことにかわりない。
2025/01/06(月) 00:30:50.77ID:wyPVXQtD
その論理は明らかにおかしい
170デフォルトの名無しさん
垢版 |
2025/01/06(月) 03:11:05.95ID:AJFRd04v
0..10がu64なんだからsumの結果も当然u64だろうという気持ちにはなる
2025/01/06(月) 08:35:26.36ID:wMDzRwfr
そこは指定必須
例えばu64の和をu128で求める型を以下のように増やせるから無指定を許すとコードが曖昧になる

struct MySum(u128);

impl std::iter::Sum<u64> for MySum {
fn sum<I: Iterator<Item = u64>>(iter: I) -> Self {
iter.fold(MySum(0), |sum, n| MySum(sum.0 + n as u128))
}
}

fn main() {
// u64の和をu128で計算できる
let x = [u64::MAX, u64::MAX].into_iter().sum::<MySum>().0;
assert_eq!(x, u64::MAX as u128 * 2);

// このコードはデバッグモード時にoverflowして悪手
let x = [u64::MAX, u64::MAX].into_iter().sum::<u64>();
assert_eq!(x, u64::MAX - 1);

// ラップアラウンドさせたいならこうする
use std::num::Wrapping;
let x = [u64::MAX, u64::MAX].into_iter().map(|n| Wrapping(n)).sum::<Wrapping<u64>>().0;
assert_eq!(x, u64::MAX - 1);
}

このように必ず型を指定して使い分けをする
2025/01/06(月) 16:43:43.88ID:lN8qCLjL
Monoidを先に整備すればこんなことにはならずに済んだろうに
173デフォルトの名無しさん
垢版 |
2025/01/06(月) 17:02:00.56ID:jpfBkgv0
>>171
そういうのは本来sumの役割じゃなくないかという気持ち
2025/01/06(月) 18:43:17.81ID:tSs1WAlu
オーバーフローとかは関係なくて型システムの制約と標準ライブラリの実装方法の問題だよ
2025/01/06(月) 19:00:20.90ID:9m9l0GJF
sum()の戻り値の型をIterator::Itemに固定するとItemが参照型の場合に対応できないな
2025/01/06(月) 21:13:46.20ID:CO3hUR7m
そら固定したらダメだよ
177デフォルトの名無しさん
垢版 |
2025/01/06(月) 21:49:35.38ID:4hhkOX4f
ジェネリクスで良いとは思うけど、デフォルトの型として元の型になってくれると便利な気はする
参照の場合とかは、数値型なら .copied() で値にできるし
2025/01/07(火) 23:41:33.61ID:tWQ6EHho
>>177
copy可かつcopyでコスト増にならないのはプリミティブな数値型だけだよ
巨大な整数値やタプルや行列などもありうる
例えば std::simd::Simd のimpl Sumでも参照を扱ってるね
impl<'a, const N: usize> Sum<&'a Simd<u32, N>> for Simd<u32, N>
2025/01/08(水) 00:21:31.60ID:tEqXW2Dh
もうfoldでいい気がしてきた

fn main() {
use std::ops::Add;
println!("{}年", (0..10u64).map(|i| i.pow(3)).fold(0, u64::add));
println!("{}年", (0..10u64).fold(0, u64::add).pow(2));
}

3乗の総和=総和の2乗の証明は今年の入試で狙われそうだな
帰納法使えば簡単だけどn(n+1)/2の導出からだとだるい
2025/01/08(水) 23:11:07.72ID:SlaqrUqV
そのSimdのSum実装のこれを見てそこに落ち着いたのか
iter.fold(Simd::splat(0 as $type), Add::add)
2025/01/11(土) 08:43:38.04ID:UwKGG2Q8
Rust排除のためのMozilla潰しが始まったか?

GoogleとLinux FoundationがChromiumの開発と維持を支援する基金「Supporters of Chromium-Based Browsers」を設立、MetaやMicrosoftなども参加 - GIGAZINE
https://gigazine.net/news/20250110-supporters-of-chromium-based-browsers/
2025/01/11(土) 10:01:12.58ID:dWpFaXpi
Chromium プロジェクトが Rust の利用をサポート
https://developers-jp.googleblog.com/2023/02/supporting-use-of-rust-in-chromium.html
2025/01/11(土) 10:03:06.03ID:dWpFaXpi
Rust を導入する目的は、シンプルで(IPC を使わない)安全な(全般的に C++ よりも複雑でなく、サンドボックスでメモリの安全性に関するバグは発生しない)形で 2 の法則を満たすことにより、
2025/01/11(土) 10:08:09.58ID:dWpFaXpi
Rust は、Mozilla がブラウザを書くために特別に開発したものなので、このテクノロジーが Chromium でようやく使われ始めるようになるのは、理にかなったことです。
システム ソフトウェア業界に莫大な貢献をしてくださっている Mozilla に感謝いたします。
Rust は、安全性とパフォーマンスの両方を言語に期待できることを見事に証明しています。
2025/01/11(土) 10:21:28.46ID:UwKGG2Q8
むむっ
2025/01/11(土) 11:00:56.87ID:rJtu07B+
そもそもMozillaはRust開発者の大半をリストラしてしまったし
すでに単なる1ユーザ企業に過ぎなくて、Rustの発展にはあんまり関係なくなってる
どちらかというとMDNを維持できるかとかの方が重要そう
2025/01/11(土) 11:44:47.56ID:3LDhx22M
GoogleはChromeが独占禁止法違反にならないようにFirefox支援しててMozillaは生きててもらわなきゃならん
デフォルトの検索エンジンに採用する見返りにGoogle社から受け取ってる金がMozillaの収益の90%を占めるから潰すのはその金を絞るだけでいい
2025/01/11(土) 12:13:12.32ID:RVo7o+pP
>>187
おまえ日本語不自由なら無理に書き込まなくてもいいんだよ?
2025/01/11(土) 12:35:47.49ID:3LDhx22M
>>188
お前には難しかったか
すまんな
2025/01/11(土) 12:37:03.90ID:6FujqKQM
添削してあげる

GoogleのChromeが独占禁止法違反にならないように対抗馬のFirefoxにある程度台頭してもらう必要がある
そのためGoogleはMozillaを投資している
投資の一例としてMozillaはデフォルトの検索エンジンに採用する見返りにGoogleからMozillaの収益の90%を占める投資を受け取ってる
仮にGoogleがMozillaを潰すのならその投資を絞るだけでいい
2025/01/11(土) 12:38:54.31ID:6FujqKQM
訂正

誤 そのためGoogleはMozillaを投資している
正 そのためGoogleはMozillaに投資している
2025/01/11(土) 12:49:21.17ID:dWpFaXpi
いずれも着実にRust化
2025/01/11(土) 12:57:56.78ID:3LDhx22M
>>190
俺より頭が良さそう
尻拭いしてもらってすまんな
2025/01/11(土) 16:20:18.17ID:Vz6os9Zc
ところがMozillaに資金援助してるのが
独禁法違反ともめてるわけだ
2025/01/12(日) 23:53:09.91ID:DJe+xzuK
ChromeもMozillaも各々Rust化へ向かってるなら
今後はここでもう揉めなくて済むな
2025/01/13(月) 05:20:11.26ID:i8wWMTup
>>189
結局添削されてるな
ガイジ乙
197デフォルトの名無しさん
垢版 |
2025/01/13(月) 13:52:02.59ID:g4/CTboD
>>188
あなたは頭が不自由なのですね判ります
2025/01/13(月) 16:13:11.82ID://H6HHHW
Rust 1.84.0でprovenance関係が安定化されてるね
2025/01/18(土) 10:00:11.55ID:7Jaib8zo
Rustで描かれてるMozillaがめっちゃ不安定なんすけど
2025/01/18(土) 10:07:56.33ID:CvcZ6tuy
>>199
Mozillaのメモリ管理や中核部分はC++で書かれている
2025/01/19(日) 17:48:38.01ID:IALgBqxE
>2016/07/20 まとめ:Firefox 48 には、Rust で書かれたコードが初めて含まれます。以降のバージョンにも Rust での実装が予定されている部分があります。
10年掛けてまだ置き換わってないってどういう事なの
2025/01/19(日) 18:43:58.99ID:9UIKz8U/
現場を動かすほどの言語じゃなかったってこと
いずれ忘れ去られていくだろうねw
必死で宣伝するやつはしばらく残るだろうけど
2025/01/19(日) 18:56:23.31ID:9gpOiSYw
Rust化を進めようとしているのはChromeの方だよ
ソース >>182 >>184
2025/01/19(日) 21:30:19.41ID:w17+kMts
>>201
単純に考えてその時点で約20年積み上がってからね
2025/01/19(日) 21:49:11.92ID:9gpOiSYw
firefoxシェアほとんど無くなって自立収入ではやっていけなくて
独占禁止法を逃れるためのGoogleからの資金で開発やってるから
基本部分は変えずに独自機能の強化の方に力を入れてるんじゃないかな
2025/01/19(日) 21:58:50.96ID:CccJ4y+9
GoogleはRustでXilemやってるね
2025/01/25(土) 15:49:13.35ID:6/VZHgMn
WindowsのOsStringってなんでUTF-16直接保持しないであんな面倒なことやってるんだろ
2025/01/25(土) 20:21:28.98ID:X7sHiUyB
>>207
Rustは時代に応じて文字列をUTF-8で扱っていてString型には必ず正規なUTF-8が入ることが保証される
しかし外の世界は魑魅魍魎でUnicodeですらないものを扱えないといけない
ファイル内容やネット通信でUTF-8以外が定められてるならencoding_rsを使って明示的に変換しながら読み書きする
2025/01/25(土) 20:22:51.37ID:X7sHiUyB
>>207
一方で問題となるのはファイルシステムのパス等だ
OS環境毎に異なるプログラムは書きたくないからコード上はString型つまりUTF-8で統一して扱いたい
パスがUTF-8自体もしくはUTF-8に1対1で対応するUTF-16等ならプログラム中はString型(=UTF-8)で扱えてうれしい
しかしパス内にはUTF-8に変換できないものも含まれている可能性があるためOsString型(=UTF-8+α)として区別して扱う
2025/01/25(土) 20:30:47.77ID:X7sHiUyB
>>207
OsString型は以下の2つを満たす抽象的な型となっている
正規UTF-8のみを含むならばコスト無しでString型に変換できて逆にString型からは常にOsString型にコスト無しで変換できる
各OS環境で扱える全ての表現と1対1に対応できる(特に正規なUnicodeならばUTF-8に対応する)
この1対1が重要でありUnicodeでない場合も読み書きしての同一性が保証される
これらを満たせば内部の構造は自由でありユーザープログラムがその構造に依存することはなく構造を知る必要もない
2025/01/25(土) 20:42:28.32ID:X7sHiUyB
>>207
Windows OSのUTF-16環境であってもユーザープログラムは環境の違いを気にせず統一して扱えるようにString(=UTF-8)とOsString(=UTF-8+α)で扱う
そのため正規なUTF-16はUTF-8に変換して内部で扱うことになる
しかし実際には任意の16bit列がパス等に現れることも可能なのでUTF-16以外の場合も1対1にOsStringに変換できなければならない
この任意の16bit列にはUTF-16のみの場合も含まれるため区別してWTF-16と呼ぶ
つまりWTF-16=UTF-16+αの関係になっている
あとはそれと1対1に対応するWTF-8=UTF-8+αを上手く定義してやれば前述の性質を満たす内部構造が完成する
以上おわり
2025/01/25(土) 22:15:52.59ID:6/VZHgMn
> Windows OSのUTF-16環境であってもユーザープログラムは環境の違いを気にせず統一して扱えるようにString(=UTF-8)とOsString(=UTF-8+α)で扱う

OsStringの内部エンコーディングがWTF-16だと統一的に扱えないと言いたいの?
2025/01/25(土) 22:25:37.00ID:6/VZHgMn
どうなっているか、ではなく、なぜそうなっているか
2025/01/25(土) 23:56:53.55ID:I/LFBEOt
String <-> OSString <-> System Native String

右の変換コストよりも左の変換コストを下げることを優先してる
そのほうが標準ライブラリ内部で共通の実装や似通った実装を使いやすい
2025/01/26(日) 00:33:00.73ID:pBUmpNYA
System Native Stringは直接取り扱わず、OsStringでラップして扱うのが原則なら
ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
左の変換は必ず行うとは限らないのだから
2025/01/26(日) 00:38:12.14ID:pBUmpNYA
というか、Windows以外なら実際右の変換が実行時チェック無しのゼロコストになってて、左の変換時にチェックしてるんだから、その説明には合わないじゃないか
どこにそんな説明が書いてあるんだ
2025/01/26(日) 01:11:13.56ID:cI9cwCw6
>System Native Stringは直接取り扱わず、OsStringでラップして扱うのが原則なら
別にそんな原則ない
OsStringで楽できないなら使わなくてもいいよ

>ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
それは君がマルチプラットフォーム対応のライブラリを維持管理する立場で考えず
Windows中心でしか物事を見てないからだよ

>というか、Windows以外なら実際右の変換が実行時チェック無しのゼロコストになってて、左の変換時にチェックしてるんだから
間違って理解してるね

>どこにそんな説明が書いてあるんだ
公式ドキュメント
2025/01/26(日) 13:21:14.47ID:pBUmpNYA
? ちょっと調べたらバレるくだらない嘘つくんだったらもう相手してあげないよ
2025/01/26(日) 18:31:50.46ID:4FlbzXxO
外部と内部でデータの表現形式が異なる場合
外部に従属するソフトウェアを作ってるのでなければ
可能な限り境界に近いところで変換を行うのは当然の選択
2025/01/26(日) 19:05:06.86ID:o76t42ts
外部とUTF-8変換する微々たるコストが深刻になる用途があるならば標準ライブラリを使わずに独自に実装すればよいだけの話
標準ライブラリはAsRef<OsStr>やAsRef<Path>でそのままstrやStringが使えるように設計されている
File::openなどでのパス指定の引数もこのAsRef<Path>がトレイト境界となっている
as_で扱える設計が望ましい
2025/01/26(日) 20:54:35.44ID:aE8oqgD4
>>220
後半の話は全然関係ないじゃん
2025/01/26(日) 21:10:37.51ID:o76t42ts
>>221
後半ためにはOsStringがStringを含む拡張になっていなければならない
そうなっていれば型の読み替えだけでas_refできる
2025/01/26(日) 22:23:21.64ID:b7sQng67
>>222
それは>>213が書いてるようにどうなってるかの話で
なぜそうなってるかの理由ではないよね

File::openはAsRef<Path>を受け取るけど
windowsならすぐにVec<u16>に変換されてる

仮にwindows向けOsStrの内部がu16ベースで
File::openがInto<Path>を受け取る実装だったとしても
処理内容は変わらない
2025/01/27(月) 20:17:02.44ID:cd9tX+Hd
>>223
それは違うな
str.as_ref()と参照を読み替えるだけでOsStrになることが重要
そのためOsStrとstrのPartialEqも用意されていてコストなく比較可能
UTF-8のみであればOsStrとstrは一致することが本質
2025/01/27(月) 23:21:32.51ID:4GlaXCk5
>>224
どれも結果であって原因ではないね

>str.as_ref()と参照を読み替えるだけでOsStrになることが重要
なんで重要なの?

>そのためOsStrとstrのPartialEqも用意されていてコストなく比較可能
OsStrとstrをコストなく比較可能にするために
System Native StringをOsStrにするタイミングでコストがかかってる
コストをかけるタイミングだけの違い
OsStrとstrがコストなく比較可能でなければならない必然性は全くない
2025/01/28(火) 15:31:40.54ID:Wlj2eClg
ファイル操作なんてI/O負荷の方が高いんだからファイルパスの変換コスト気にする必要あるか?
文字コードが違う環境はwindows以外にも色々あるだろうし。
2025/01/28(火) 16:58:57.81ID:bBapgORx
直交する話を持ち出しても元の議論には一切影響しませんが
2025/01/28(火) 20:40:46.87ID:BsfM3c6P
一般的な話として
アスキー非互換かつサロゲートペア問題を抱えるUTF-16は欠陥品なので使用は好ましくない
UTF-16や16bitで扱うシステムはユニコードが16bit時代に決めた古いシステムがほとんどで稀に後に無知者が導入したものがある程度

Rustで文字charは正しく32bitとなっており
文字列strはネット上やファイル内でも推奨されアスキー上位互換のUTF-8になっている
さらにOsStrはそのUTF-8の上位互換となり集合的にはOsStr⊃str⊃アスキーとなっている
それさえ満たせば細かい内部実装は各OS毎に異なってよい
欠陥品のUTF-16は何も満たせずそこでも排除で正しい
2025/01/28(火) 22:01:50.93ID:GfuGIG8x
また意味のない話を始める
さすが複オジ
2025/01/29(水) 00:32:12.48ID:g0VOlyym
OsStringの用途はファイルパスに限られたものではないけど主たる用途で性能が問題にならないというのは今の実装方法が選ばれた理由の一部ではある
2025/01/29(水) 00:58:47.06ID:0dekUNSK
UTF16はメモリとパフォーマンスのバランスが良い
オンメモリの内部形式としては悪くないチョイス
2025/01/29(水) 02:25:08.58ID:j23j/EVS
別に理由が無いなら無いと言えばいいのに、変にこじつけようとするから
2025/01/29(水) 07:54:01.03ID:hKDzv5Fb
スレを荒し続けているUTF16信者は何がしたいの?
本気でUTF16がいいと信じているならそういうcrateを作って布教すればいい
そんな需要はないと思うが
2025/01/29(水) 08:41:13.10ID:UbIZehjy
>>225
それは >>219 が述べるように「変換は境界で」という基本思想による。
このやり方が複雑さを避ける良い方法だというのは歴史の積み重ねで皆が実感してきたことなので今さらどうこう言っても「その話はもう終わった。蒸し返すな」という気持ちなんだよ。
2025/01/29(水) 10:10:29.66ID:j23j/EVS
じゃあせめて「その話」がどのissueでされたかでも貼ってくれないかな
2025/01/29(水) 10:45:41.27ID:kksSyPk2
甘え過ぎw
2025/01/29(水) 11:52:20.85ID:j23j/EVS
ソース無しの妄想だからそう返すしかないか
2025/01/29(水) 11:54:18.78ID:LdIOcSwO
複オジはともかく質問者もまだ分かってなかったのか
2025/01/29(水) 21:48:50.26ID:1MMCze3E
わかった
少なくともこうして容易に使えることが最低必要条件
fn OsStr::to_str(&self) -> Option<&str>
したがってOsStrはstrを含む拡張集合
それ以外に制約はなく各OS毎に内部実装は自由
2025/01/29(水) 22:07:32.91ID:mZdkrOxi
それがお前の妄想でないという根拠は?
2025/01/29(水) 23:10:55.15ID:LNP2TJDd
impl AsRef<OsStr> for str
2025/01/29(水) 23:12:05.86ID:1MMCze3E
issueで内部が16ビットではそれが機能しないと
2025/01/29(水) 23:17:05.07ID:1MMCze3E
機能しないと議論されて決定してる
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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