公式
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/
探検
Rust part27
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2024/12/02(月) 22:32:50.31ID:D+1pIyvG122デフォルトの名無しさん
2024/12/17(火) 15:54:52.82ID:8t1OBzHL123デフォルトの名無しさん
2024/12/17(火) 16:01:39.84ID:k3aNgl34 >>122
それは大変によくわかる。
自分で書いたものすら意味わからんようになるのは普通のことだからな……。
だから意図を表現することが大事で、小さなロジックの断片にでも名前を付ける。
その状況を表すための名前 (専門用語) こそが大事。
訓練されていない人にとって平易であることとは違う。
それは大変によくわかる。
自分で書いたものすら意味わからんようになるのは普通のことだからな……。
だから意図を表現することが大事で、小さなロジックの断片にでも名前を付ける。
その状況を表すための名前 (専門用語) こそが大事。
訓練されていない人にとって平易であることとは違う。
124デフォルトの名無しさん
2024/12/17(火) 16:33:22.09ID:bLYSKCYG >>116
現状追認主義なのに推奨されてる用量・用法は守らず動くだけのコードを披露したがるのは理解できないんだが
現状追認主義なのに推奨されてる用量・用法は守らず動くだけのコードを披露したがるのは理解できないんだが
125デフォルトの名無しさん
2024/12/17(火) 17:43:30.54ID:SHc5Q5Oi ママに褒めてもらいたい幼児の心理だよ
わかりやすいだろ
わかりやすいだろ
126デフォルトの名無しさん
2024/12/17(火) 20:27:48.43ID:QsDK8zUE >>117
「ごっちゃに書いて見通しの悪いコードにはせずに、
高階関数のメソッドチェーンにして、
各々のメソッドで個別に関数またはクロージャで処理を指定する。」
ここまでは共通認識でいいんだよね?
万が一これにも反対の人がいるならばまずは代案を明示的に出してほしい
以上の共通認識の上で
語彙の問題という話が出ているからメソッド名の付け方に問題があるということなのか?
それともメソッドが多すぎる(機能が多すぎる)またはメソッドの分別の仕方に問題があるということなのか?
まさか高階関数がわかりにくいという話ではないと思うが
「ごっちゃに書いて見通しの悪いコードにはせずに、
高階関数のメソッドチェーンにして、
各々のメソッドで個別に関数またはクロージャで処理を指定する。」
ここまでは共通認識でいいんだよね?
万が一これにも反対の人がいるならばまずは代案を明示的に出してほしい
以上の共通認識の上で
語彙の問題という話が出ているからメソッド名の付け方に問題があるということなのか?
それともメソッドが多すぎる(機能が多すぎる)またはメソッドの分別の仕方に問題があるということなのか?
まさか高階関数がわかりにくいという話ではないと思うが
127デフォルトの名無しさん
2024/12/17(火) 21:50:43.67ID:dgkTZZrK128デフォルトの名無しさん
2024/12/17(火) 22:05:47.16ID:ecWnwmom129デフォルトの名無しさん
2024/12/17(火) 22:08:10.40ID:e6YSkvhC >>127
また自分勝手な慣習や思い込みの暗黙の了解かよ
また自分勝手な慣習や思い込みの暗黙の了解かよ
130デフォルトの名無しさん
2024/12/17(火) 22:18:10.64ID:zSkWZLKX vecs.iter().map(|x| x.iter()).flatten().filter(...)
みたいなのは書いてて気持ち良いけど、全員が賛同するわけではないよな
Rustの公式のドキュメントだって関数型スタイルの書き方と手続き型スタイルの書き方の両方を紹介してるわけだし
そういう「高度な書き方」をバッサリ切り捨ててるGO言語が人気というのもそう
みたいなのは書いてて気持ち良いけど、全員が賛同するわけではないよな
Rustの公式のドキュメントだって関数型スタイルの書き方と手続き型スタイルの書き方の両方を紹介してるわけだし
そういう「高度な書き方」をバッサリ切り捨ててるGO言語が人気というのもそう
131デフォルトの名無しさん
2024/12/17(火) 22:20:51.38ID:QsDK8zUE132デフォルトの名無しさん
2024/12/17(火) 22:42:34.79ID:e6YSkvhC133デフォルトの名無しさん
2024/12/17(火) 23:29:57.24ID:zSkWZLKX134デフォルトの名無しさん
2024/12/18(水) 09:42:19.11ID:w442kBzm まあ存在する以上はユースケースがあるってことだからな。
135デフォルトの名無しさん
2024/12/18(水) 12:59:18.01ID:RrhqiCIc コードゴルファーのために存在してるわけじゃないからな
136デフォルトの名無しさん
2024/12/18(水) 13:17:46.53ID:3HdOm/G7 そろそろitertoolsを標準ライブラリ化する話はないのか?
137デフォルトの名無しさん
2024/12/18(水) 18:37:10.88ID:C5X2cUVY 個別に取り入れられてる
まとめて標準化はない
棲み分け
まとめて標準化はない
棲み分け
138デフォルトの名無しさん
2024/12/18(水) 19:09:54.98ID:MW322kuv >>127
そのマルチスレッド対応コードに
指摘の「慣習や暗黙の了解を無視したコード」とやらが見当たらないのだが
そもそも慣習や暗黙の了解とはどういう意味で使ってる?
>> マルチスレッド対応するなら
>> まず初心者入門向け版としてはCellをMutexに変更で動く
>>
>> fn new_id() -> Option<usize> {
>> static ID: Mutex<usize> = Mutex::new(0);
>>
>> let mut id = ID.lock().unwrap();
>> id.checked_add(1).inspect(|&new_id| *id = new_id)
>> }
そのマルチスレッド対応コードに
指摘の「慣習や暗黙の了解を無視したコード」とやらが見当たらないのだが
そもそも慣習や暗黙の了解とはどういう意味で使ってる?
>> マルチスレッド対応するなら
>> まず初心者入門向け版としてはCellをMutexに変更で動く
>>
>> fn new_id() -> Option<usize> {
>> static ID: Mutex<usize> = Mutex::new(0);
>>
>> let mut id = ID.lock().unwrap();
>> id.checked_add(1).inspect(|&new_id| *id = new_id)
>> }
139デフォルトの名無しさん
2024/12/19(木) 11:45:17.60ID:p9TYuGiM140デフォルトの名無しさん
2024/12/19(木) 11:55:22.77ID:953TTIIh 型のキャストは
std::mem::transmute
std::mem::transmute
141デフォルトの名無しさん
2024/12/19(木) 12:16:13.05ID:H/9JfOm9 assert_eq!((3.14_f32).to_bits(), 0b1000000010010001111010111000011_u32);
assert_eq!(f32::from_bits(0b1000000010010001111010111000011_u32), 3.14_f32);
assert_eq!(f32::from_bits(0b1000000010010001111010111000011_u32), 3.14_f32);
142デフォルトの名無しさん
2024/12/20(金) 15:29:01.33ID:raronLtC JAIST、「並行量子通信プロトコル」の完全な自動形式検証を実現
http://news.mynavi.jp/techplus/article/20241220-3090485/
http://news.mynavi.jp/techplus/article/20241220-3090485/
143デフォルトの名無しさん
2024/12/22(日) 22:27:16.01ID:K7zRdssG >>138
中級者向けにはこれでええんかね
fn new_id() -> Option<usize> {
static ID: AtomicUsize = AtomicUsize::new(0);
let mut old_id = ID.load(Relaxed);
while let Some(new_id) = old_id.checked_add(1) {
match ID.compare_exchange_weak(old_id, new_id, Relaxed, Relaxed) {
Ok(_) => return Some(new_id),
Err(updated_old_id) => old_id = updated_old_id,
}
}
None
}
中級者向けにはこれでええんかね
fn new_id() -> Option<usize> {
static ID: AtomicUsize = AtomicUsize::new(0);
let mut old_id = ID.load(Relaxed);
while let Some(new_id) = old_id.checked_add(1) {
match ID.compare_exchange_weak(old_id, new_id, Relaxed, Relaxed) {
Ok(_) => return Some(new_id),
Err(updated_old_id) => old_id = updated_old_id,
}
}
None
}
144デフォルトの名無しさん
2024/12/23(月) 22:20:47.40ID:GhTcJSaR Rustに興味出てきたからとりあえず、とほほさんのサイトに目を通してみたんだけど
…もしかしてあの方、非同期処理と並列処理をごっちゃに理解している?
https://www.tohoho-web.com/ex/rust.html#async-await
…もしかしてあの方、非同期処理と並列処理をごっちゃに理解している?
https://www.tohoho-web.com/ex/rust.html#async-await
145デフォルトの名無しさん
2024/12/23(月) 22:54:25.61ID:OG1FFUyc146デフォルトの名無しさん
2024/12/28(土) 15:51:05.67ID:SGU/9qSb Rustしか勝たん
147デフォルトの名無しさん
2024/12/28(土) 17:09:23.73ID:IXmLUnxX こういうアホが湧いてきたときがピークだな
148デフォルトの名無しさん
2024/12/28(土) 17:20:50.92ID:T6F1mfjg WebAssemblyはRustが主流なイメージだけど実際どんなもんだろ
149デフォルトの名無しさん
2024/12/28(土) 18:28:20.06ID:wm6lCJnC linuxカーネルがシェルスクリプトの付属品にならなかったのはシェルを変更できるから
だがjsは、変更不可能にすればjsが永久に主流だというのを意図的にやっている
だがjsは、変更不可能にすればjsが永久に主流だというのを意図的にやっている
150デフォルトの名無しさん
2025/01/01(水) 12:59:04.47ID:emEmRiID >>149
何いってんだお前?
何いってんだお前?
151デフォルトの名無しさん
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だがアプリの特性によって安全性なんぞどうでもいいことが多い
開発生産性が一番重要
それだけで安全と言い切れるわけないだろ
そもそも安全性ってお前が作るアプリで必要なの?
Linuxカーネルや組み込みだったらわかるけどそんな高度なプログラム作ってんの?
飛行機のシステム作ってて命がかかってるとかならわかるが、その辺のアプリで安全性とかどうでもいいよね
Rust馬鹿信者は開発生産性を軽視しすぎだ、開発生産性を犠牲に安全性に振ってるのがRustだがアプリの特性によって安全性なんぞどうでもいいことが多い
開発生産性が一番重要
154デフォルトの名無しさん
2025/01/04(土) 11:56:56.49ID:Z095809L 難しさによる障壁はあるけど、慣れれば生産性自体は高い言語だと思う
ライブラリ多いし、ちょっとしたツールを作る程度ならエラーハンドリングもそんなに頑張らなくて良いし (anyhow を使えば割と雑に書ける)
流石にPythonのような手軽さは無いけど、C++よりは遥かに書きやすいし、個人的にはC#やJavaよりも楽だと思うくらい
これは言語仕様でなくツールの話だけど、プロジェクトを作ったり、ライブラリを追加したりするのが楽
学習コストが高いのはその通りで、誰かが書いたツールを他の人が保守しづらいみたいな問題はどうしようもないけど…
(そういう用途ならGoが良さそう)
ライブラリ多いし、ちょっとしたツールを作る程度ならエラーハンドリングもそんなに頑張らなくて良いし (anyhow を使えば割と雑に書ける)
流石にPythonのような手軽さは無いけど、C++よりは遥かに書きやすいし、個人的にはC#やJavaよりも楽だと思うくらい
これは言語仕様でなくツールの話だけど、プロジェクトを作ったり、ライブラリを追加したりするのが楽
学習コストが高いのはその通りで、誰かが書いたツールを他の人が保守しづらいみたいな問題はどうしようもないけど…
(そういう用途ならGoが良さそう)
155デフォルトの名無しさん
2025/01/04(土) 12:23:29.13ID:5PJMX9Ru156デフォルトの名無しさん
2025/01/04(土) 12:59:21.10ID:OzBQvYrX >>155
「自分がRustに慣れてるなら」それは自分も同意
自分の意見は
・Rustは分かるようになるまでが大変
・理解できれば開発者にとって強力な言語
で、「Goの方が向く」というのはとっつきやすさを含めた話のつもりで書いた
他言語の経験者から見たら、たぶんRustは型やトレイトの意味を理解するのが難しいし、参照などのルールを理解しないとコンパイルすら通らないから、Goの方が触りやすいんじゃないかと思う
Arc, Rc, Cell, Mutex とかの型は分かる人にとってはmeaningfulだけど、初学者がすぐに分かるものではないと思う
「自分がRustに慣れてるなら」それは自分も同意
自分の意見は
・Rustは分かるようになるまでが大変
・理解できれば開発者にとって強力な言語
で、「Goの方が向く」というのはとっつきやすさを含めた話のつもりで書いた
他言語の経験者から見たら、たぶんRustは型やトレイトの意味を理解するのが難しいし、参照などのルールを理解しないとコンパイルすら通らないから、Goの方が触りやすいんじゃないかと思う
Arc, Rc, Cell, Mutex とかの型は分かる人にとってはmeaningfulだけど、初学者がすぐに分かるものではないと思う
157デフォルトの名無しさん
2025/01/04(土) 13:59:36.84ID:5PJMX9Ru >>156
単純にメンテする人員を確保しづらいという意味ならそれはそう
単純にメンテする人員を確保しづらいという意味ならそれはそう
158デフォルトの名無しさん
2025/01/04(土) 22:40:45.82ID:xBPs09Kz rustのいい所はresultやoption.その他色々な型について文脈が大体決まっていること。なので慣れると人が書いたコードでも読みやすい。c#やjavaとの比較であれば開発効率は大体同じか、勝っているぐらい。nullや例外がある言語はプログラムがどうしても汚くなる。
rustはaiにコード生成させた時の品質も割といい。コンパイルエラーでても対応方法が具体的なのでそのままメッセージをaiに渡すだけで直る。
rustはaiにコード生成させた時の品質も割といい。コンパイルエラーでても対応方法が具体的なのでそのままメッセージをaiに渡すだけで直る。
159デフォルトの名無しさん
2025/01/04(土) 22:49:58.13ID:xBPs09Kz AIが当たり前の時代においてはコードの記述量そのものは開発効率に直結するものではなくなる。どの言語でも似たような事は出来る。でも作られたコードが、正しいかどうかは別の問題。
AIはたまに嘘を付くので、それをコンパイラで厳密にチエックする必要がある。そういう意味では関数型言語へのシフトは進むし、rustはいい位置にいると思う。
AIはたまに嘘を付くので、それをコンパイラで厳密にチエックする必要がある。そういう意味では関数型言語へのシフトは進むし、rustはいい位置にいると思う。
160デフォルトの名無しさん
2025/01/04(土) 23:01:31.53ID:tP/ja7AQ 関数型関係ないから
161デフォルトの名無しさん
2025/01/04(土) 23:15:15.09ID:FAAvXSOV >>159
関数型である部分ではなく
Rustが安全性にも役立つ史上最強の型システムを構築したことが決め手かな
特にトレイトそしてトレイト境界
さらに例えばSendやSyncといった概念的なトレイトなど
関数型である部分ではなく
Rustが安全性にも役立つ史上最強の型システムを構築したことが決め手かな
特にトレイトそしてトレイト境界
さらに例えばSendやSyncといった概念的なトレイトなど
162デフォルトの名無しさん
2025/01/05(日) 00:44:18.92ID:TOCT7c8i そうなんだ、Rustってすごいんだね!
163デフォルトの名無しさん
2025/01/05(日) 11:01:38.28ID:8kdOFrcZ 関数型関係ないから
164デフォルトの名無しさん
2025/01/05(日) 13:34:15.55ID:4B4hqpXY お前ら9連休はちゃんと楽しめたか?
165デフォルトの名無しさん
2025/01/05(日) 16:19:33.22ID:mRHgcQU5 九連休に一回もコード書いてない陽キャはこのスレ書き込み禁止な
166デフォルトの名無しさん
2025/01/05(日) 18:30:14.16ID:Rb8d6mKE 体力落ちないように散歩しまくってたら脚の裏に豆出来たよ
167デフォルトの名無しさん
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()の型アノテーション外せないの?
fn main() {
println!("{}年", (0..10u64).map(|i| i.pow(3)).sum::<u64>());
println!("{}年", (0..10u64).sum::<u64>().pow(2));
}
sum()の型アノテーション外せないの?
168デフォルトの名無しさん
2025/01/06(月) 00:22:47.46ID:criPfDaa169デフォルトの名無しさん
2025/01/06(月) 00:30:50.77ID:wyPVXQtD その論理は明らかにおかしい
170デフォルトの名無しさん
2025/01/06(月) 03:11:05.95ID:AJFRd04v 0..10がu64なんだからsumの結果も当然u64だろうという気持ちにはなる
171デフォルトの名無しさん
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);
}
このように必ず型を指定して使い分けをする
例えば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);
}
このように必ず型を指定して使い分けをする
172デフォルトの名無しさん
2025/01/06(月) 16:43:43.88ID:lN8qCLjL Monoidを先に整備すればこんなことにはならずに済んだろうに
173デフォルトの名無しさん
2025/01/06(月) 17:02:00.56ID:jpfBkgv0 >>171
そういうのは本来sumの役割じゃなくないかという気持ち
そういうのは本来sumの役割じゃなくないかという気持ち
174デフォルトの名無しさん
2025/01/06(月) 18:43:17.81ID:tSs1WAlu オーバーフローとかは関係なくて型システムの制約と標準ライブラリの実装方法の問題だよ
175デフォルトの名無しさん
2025/01/06(月) 19:00:20.90ID:9m9l0GJF sum()の戻り値の型をIterator::Itemに固定するとItemが参照型の場合に対応できないな
176デフォルトの名無しさん
2025/01/06(月) 21:13:46.20ID:CO3hUR7m そら固定したらダメだよ
177デフォルトの名無しさん
2025/01/06(月) 21:49:35.38ID:4hhkOX4f ジェネリクスで良いとは思うけど、デフォルトの型として元の型になってくれると便利な気はする
参照の場合とかは、数値型なら .copied() で値にできるし
参照の場合とかは、数値型なら .copied() で値にできるし
178デフォルトの名無しさん
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>
copy可かつcopyでコスト増にならないのはプリミティブな数値型だけだよ
巨大な整数値やタプルや行列などもありうる
例えば std::simd::Simd のimpl Sumでも参照を扱ってるね
impl<'a, const N: usize> Sum<&'a Simd<u32, N>> for Simd<u32, N>
179デフォルトの名無しさん
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の導出からだとだるい
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の導出からだとだるい
180デフォルトの名無しさん
2025/01/08(水) 23:11:07.72ID:SlaqrUqV そのSimdのSum実装のこれを見てそこに落ち着いたのか
iter.fold(Simd::splat(0 as $type), Add::add)
iter.fold(Simd::splat(0 as $type), Add::add)
181デフォルトの名無しさん
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/
GoogleとLinux FoundationがChromiumの開発と維持を支援する基金「Supporters of Chromium-Based Browsers」を設立、MetaやMicrosoftなども参加 - GIGAZINE
https://gigazine.net/news/20250110-supporters-of-chromium-based-browsers/
182デフォルトの名無しさん
2025/01/11(土) 10:01:12.58ID:dWpFaXpi Chromium プロジェクトが Rust の利用をサポート
https://developers-jp.googleblog.com/2023/02/supporting-use-of-rust-in-chromium.html
https://developers-jp.googleblog.com/2023/02/supporting-use-of-rust-in-chromium.html
183デフォルトの名無しさん
2025/01/11(土) 10:03:06.03ID:dWpFaXpi Rust を導入する目的は、シンプルで(IPC を使わない)安全な(全般的に C++ よりも複雑でなく、サンドボックスでメモリの安全性に関するバグは発生しない)形で 2 の法則を満たすことにより、
184デフォルトの名無しさん
2025/01/11(土) 10:08:09.58ID:dWpFaXpi Rust は、Mozilla がブラウザを書くために特別に開発したものなので、このテクノロジーが Chromium でようやく使われ始めるようになるのは、理にかなったことです。
システム ソフトウェア業界に莫大な貢献をしてくださっている Mozilla に感謝いたします。
Rust は、安全性とパフォーマンスの両方を言語に期待できることを見事に証明しています。
システム ソフトウェア業界に莫大な貢献をしてくださっている Mozilla に感謝いたします。
Rust は、安全性とパフォーマンスの両方を言語に期待できることを見事に証明しています。
185デフォルトの名無しさん
2025/01/11(土) 10:21:28.46ID:UwKGG2Q8 むむっ
186デフォルトの名無しさん
2025/01/11(土) 11:00:56.87ID:rJtu07B+ そもそもMozillaはRust開発者の大半をリストラしてしまったし
すでに単なる1ユーザ企業に過ぎなくて、Rustの発展にはあんまり関係なくなってる
どちらかというとMDNを維持できるかとかの方が重要そう
すでに単なる1ユーザ企業に過ぎなくて、Rustの発展にはあんまり関係なくなってる
どちらかというとMDNを維持できるかとかの方が重要そう
187デフォルトの名無しさん
2025/01/11(土) 11:44:47.56ID:3LDhx22M GoogleはChromeが独占禁止法違反にならないようにFirefox支援しててMozillaは生きててもらわなきゃならん
デフォルトの検索エンジンに採用する見返りにGoogle社から受け取ってる金がMozillaの収益の90%を占めるから潰すのはその金を絞るだけでいい
デフォルトの検索エンジンに採用する見返りにGoogle社から受け取ってる金がMozillaの収益の90%を占めるから潰すのはその金を絞るだけでいい
188デフォルトの名無しさん
2025/01/11(土) 12:13:12.32ID:RVo7o+pP >>187
おまえ日本語不自由なら無理に書き込まなくてもいいんだよ?
おまえ日本語不自由なら無理に書き込まなくてもいいんだよ?
189デフォルトの名無しさん
2025/01/11(土) 12:35:47.49ID:3LDhx22M190デフォルトの名無しさん
2025/01/11(土) 12:37:03.90ID:6FujqKQM 添削してあげる
GoogleのChromeが独占禁止法違反にならないように対抗馬のFirefoxにある程度台頭してもらう必要がある
そのためGoogleはMozillaを投資している
投資の一例としてMozillaはデフォルトの検索エンジンに採用する見返りにGoogleからMozillaの収益の90%を占める投資を受け取ってる
仮にGoogleがMozillaを潰すのならその投資を絞るだけでいい
GoogleのChromeが独占禁止法違反にならないように対抗馬のFirefoxにある程度台頭してもらう必要がある
そのためGoogleはMozillaを投資している
投資の一例としてMozillaはデフォルトの検索エンジンに採用する見返りにGoogleからMozillaの収益の90%を占める投資を受け取ってる
仮にGoogleがMozillaを潰すのならその投資を絞るだけでいい
191デフォルトの名無しさん
2025/01/11(土) 12:38:54.31ID:6FujqKQM 訂正
誤 そのためGoogleはMozillaを投資している
正 そのためGoogleはMozillaに投資している
誤 そのためGoogleはMozillaを投資している
正 そのためGoogleはMozillaに投資している
192デフォルトの名無しさん
2025/01/11(土) 12:49:21.17ID:dWpFaXpi いずれも着実にRust化
193デフォルトの名無しさん
2025/01/11(土) 12:57:56.78ID:3LDhx22M194デフォルトの名無しさん
2025/01/11(土) 16:20:18.17ID:Vz6os9Zc ところがMozillaに資金援助してるのが
独禁法違反ともめてるわけだ
独禁法違反ともめてるわけだ
195デフォルトの名無しさん
2025/01/12(日) 23:53:09.91ID:DJe+xzuK ChromeもMozillaも各々Rust化へ向かってるなら
今後はここでもう揉めなくて済むな
今後はここでもう揉めなくて済むな
196デフォルトの名無しさん
2025/01/13(月) 05:20:11.26ID:i8wWMTup197デフォルトの名無しさん
2025/01/13(月) 13:52:02.59ID:g4/CTboD >>188
あなたは頭が不自由なのですね判ります
あなたは頭が不自由なのですね判ります
198デフォルトの名無しさん
2025/01/13(月) 16:13:11.82ID://H6HHHW Rust 1.84.0でprovenance関係が安定化されてるね
199デフォルトの名無しさん
2025/01/18(土) 10:00:11.55ID:7Jaib8zo Rustで描かれてるMozillaがめっちゃ不安定なんすけど
200デフォルトの名無しさん
2025/01/18(土) 10:07:56.33ID:CvcZ6tuy >>199
Mozillaのメモリ管理や中核部分はC++で書かれている
Mozillaのメモリ管理や中核部分はC++で書かれている
201デフォルトの名無しさん
2025/01/19(日) 17:48:38.01ID:IALgBqxE >2016/07/20 まとめ:Firefox 48 には、Rust で書かれたコードが初めて含まれます。以降のバージョンにも Rust での実装が予定されている部分があります。
10年掛けてまだ置き換わってないってどういう事なの
10年掛けてまだ置き換わってないってどういう事なの
202デフォルトの名無しさん
2025/01/19(日) 18:43:58.99ID:9UIKz8U/ 現場を動かすほどの言語じゃなかったってこと
いずれ忘れ去られていくだろうねw
必死で宣伝するやつはしばらく残るだろうけど
いずれ忘れ去られていくだろうねw
必死で宣伝するやつはしばらく残るだろうけど
203デフォルトの名無しさん
2025/01/19(日) 18:56:23.31ID:9gpOiSYw204デフォルトの名無しさん
2025/01/19(日) 21:30:19.41ID:w17+kMts >>201
単純に考えてその時点で約20年積み上がってからね
単純に考えてその時点で約20年積み上がってからね
205デフォルトの名無しさん
2025/01/19(日) 21:49:11.92ID:9gpOiSYw firefoxシェアほとんど無くなって自立収入ではやっていけなくて
独占禁止法を逃れるためのGoogleからの資金で開発やってるから
基本部分は変えずに独自機能の強化の方に力を入れてるんじゃないかな
独占禁止法を逃れるためのGoogleからの資金で開発やってるから
基本部分は変えずに独自機能の強化の方に力を入れてるんじゃないかな
206デフォルトの名無しさん
2025/01/19(日) 21:58:50.96ID:CccJ4y+9 GoogleはRustでXilemやってるね
207デフォルトの名無しさん
2025/01/25(土) 15:49:13.35ID:6/VZHgMn WindowsのOsStringってなんでUTF-16直接保持しないであんな面倒なことやってるんだろ
208デフォルトの名無しさん
2025/01/25(土) 20:21:28.98ID:X7sHiUyB >>207
Rustは時代に応じて文字列をUTF-8で扱っていてString型には必ず正規なUTF-8が入ることが保証される
しかし外の世界は魑魅魍魎でUnicodeですらないものを扱えないといけない
ファイル内容やネット通信でUTF-8以外が定められてるならencoding_rsを使って明示的に変換しながら読み書きする
Rustは時代に応じて文字列をUTF-8で扱っていてString型には必ず正規なUTF-8が入ることが保証される
しかし外の世界は魑魅魍魎でUnicodeですらないものを扱えないといけない
ファイル内容やネット通信でUTF-8以外が定められてるならencoding_rsを使って明示的に変換しながら読み書きする
209デフォルトの名無しさん
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+α)として区別して扱う
一方で問題となるのはファイルシステムのパス等だ
OS環境毎に異なるプログラムは書きたくないからコード上はString型つまりUTF-8で統一して扱いたい
パスがUTF-8自体もしくはUTF-8に1対1で対応するUTF-16等ならプログラム中はString型(=UTF-8)で扱えてうれしい
しかしパス内にはUTF-8に変換できないものも含まれている可能性があるためOsString型(=UTF-8+α)として区別して扱う
210デフォルトの名無しさん
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でない場合も読み書きしての同一性が保証される
これらを満たせば内部の構造は自由でありユーザープログラムがその構造に依存することはなく構造を知る必要もない
OsString型は以下の2つを満たす抽象的な型となっている
正規UTF-8のみを含むならばコスト無しでString型に変換できて逆にString型からは常にOsString型にコスト無しで変換できる
各OS環境で扱える全ての表現と1対1に対応できる(特に正規なUnicodeならばUTF-8に対応する)
この1対1が重要でありUnicodeでない場合も読み書きしての同一性が保証される
これらを満たせば内部の構造は自由でありユーザープログラムがその構造に依存することはなく構造を知る必要もない
211デフォルトの名無しさん
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+αを上手く定義してやれば前述の性質を満たす内部構造が完成する
以上おわり
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+αを上手く定義してやれば前述の性質を満たす内部構造が完成する
以上おわり
212デフォルトの名無しさん
2025/01/25(土) 22:15:52.59ID:6/VZHgMn > Windows OSのUTF-16環境であってもユーザープログラムは環境の違いを気にせず統一して扱えるようにString(=UTF-8)とOsString(=UTF-8+α)で扱う
OsStringの内部エンコーディングがWTF-16だと統一的に扱えないと言いたいの?
OsStringの内部エンコーディングがWTF-16だと統一的に扱えないと言いたいの?
213デフォルトの名無しさん
2025/01/25(土) 22:25:37.00ID:6/VZHgMn どうなっているか、ではなく、なぜそうなっているか
214デフォルトの名無しさん
2025/01/25(土) 23:56:53.55ID:I/LFBEOt String <-> OSString <-> System Native String
右の変換コストよりも左の変換コストを下げることを優先してる
そのほうが標準ライブラリ内部で共通の実装や似通った実装を使いやすい
右の変換コストよりも左の変換コストを下げることを優先してる
そのほうが標準ライブラリ内部で共通の実装や似通った実装を使いやすい
215デフォルトの名無しさん
2025/01/26(日) 00:33:00.73ID:pBUmpNYA System Native Stringは直接取り扱わず、OsStringでラップして扱うのが原則なら
ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
左の変換は必ず行うとは限らないのだから
ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
左の変換は必ず行うとは限らないのだから
216デフォルトの名無しさん
2025/01/26(日) 00:38:12.14ID:pBUmpNYA というか、Windows以外なら実際右の変換が実行時チェック無しのゼロコストになってて、左の変換時にチェックしてるんだから、その説明には合わないじゃないか
どこにそんな説明が書いてあるんだ
どこにそんな説明が書いてあるんだ
217デフォルトの名無しさん
2025/01/26(日) 01:11:13.56ID:cI9cwCw6 >System Native Stringは直接取り扱わず、OsStringでラップして扱うのが原則なら
別にそんな原則ない
OsStringで楽できないなら使わなくてもいいよ
>ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
それは君がマルチプラットフォーム対応のライブラリを維持管理する立場で考えず
Windows中心でしか物事を見てないからだよ
>というか、Windows以外なら実際右の変換が実行時チェック無しのゼロコストになってて、左の変換時にチェックしてるんだから
間違って理解してるね
>どこにそんな説明が書いてあるんだ
公式ドキュメント
別にそんな原則ない
OsStringで楽できないなら使わなくてもいいよ
>ゼロコスト抽象化の観点から言えば右の変換コストをゼロにするべきでは?
それは君がマルチプラットフォーム対応のライブラリを維持管理する立場で考えず
Windows中心でしか物事を見てないからだよ
>というか、Windows以外なら実際右の変換が実行時チェック無しのゼロコストになってて、左の変換時にチェックしてるんだから
間違って理解してるね
>どこにそんな説明が書いてあるんだ
公式ドキュメント
218デフォルトの名無しさん
2025/01/26(日) 13:21:14.47ID:pBUmpNYA ? ちょっと調べたらバレるくだらない嘘つくんだったらもう相手してあげないよ
219デフォルトの名無しさん
2025/01/26(日) 18:31:50.46ID:4FlbzXxO 外部と内部でデータの表現形式が異なる場合
外部に従属するソフトウェアを作ってるのでなければ
可能な限り境界に近いところで変換を行うのは当然の選択
外部に従属するソフトウェアを作ってるのでなければ
可能な限り境界に近いところで変換を行うのは当然の選択
220デフォルトの名無しさん
2025/01/26(日) 19:05:06.86ID:o76t42ts 外部とUTF-8変換する微々たるコストが深刻になる用途があるならば標準ライブラリを使わずに独自に実装すればよいだけの話
標準ライブラリはAsRef<OsStr>やAsRef<Path>でそのままstrやStringが使えるように設計されている
File::openなどでのパス指定の引数もこのAsRef<Path>がトレイト境界となっている
as_で扱える設計が望ましい
標準ライブラリはAsRef<OsStr>やAsRef<Path>でそのままstrやStringが使えるように設計されている
File::openなどでのパス指定の引数もこのAsRef<Path>がトレイト境界となっている
as_で扱える設計が望ましい
221デフォルトの名無しさん
2025/01/26(日) 20:54:35.44ID:aE8oqgD4 >>220
後半の話は全然関係ないじゃん
後半の話は全然関係ないじゃん
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★5 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」★2 [ぐれ★]
- 【速報】 高市政権、「日本版DOGE」を立ち上げ 米国で歳出削減をした「政府効率化省(DOGE)」になぞらえたもの [お断り★]
- 【速報】 日経平均の下落率3%超す、財政懸念で長期金利上昇 [お断り★]
- 台湾声明 「台湾は独立した主権国家、中国は台湾を統治したことがなく、中国は口出しする権利ない」 中国が高市首相に抗議で ★7 [お断り★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で ★2 [ぐれ★]
- 日経平均、49000円割れ 国賊高市を許すな ★2 [402859164]
- 高市政権「中国さん、日本はいつでも対話に応じるで」 [834922174]
- 【悲報】安倍晋三、弟子である高市早苗の暴走を止めずにひたすら静観。一体なぜ‥‥ [153736977]
- 日経平均、49000円割れ 国賊高市を許すな [402859164]
- 中国「高市が謝罪撤回しないとこれ全部なくなるけどどうする?」 [931948549]
- 吉村はん「高市さんは発言を撤回する必要ないですよ。中国の大阪総領事が謝罪すべき」 [256556981]
