公式
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/
※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
※次スレは原則>>980が立てること
前スレ
Rust part14
https://mevius.5ch.net/test/read.cgi/tech/1644596656/
探検
Rust part15
レス数が1000を超えています。これ以上書き込みはできません。
2022/05/12(木) 18:28:20.99ID:cuIcFT6k
2022/05/12(木) 18:30:00.00ID:cuIcFT6k
Rust The Book (日本語版)
https://doc.rust-jp.rs/book-ja/
Rust edition guide (日本語版)
https://doc.rust-jp.rs/edition-guide/
Rust by example (日本語版)
https://doc.rust-jp.rs/rust-by-example-ja/
Rust cookbook (日本語版)
https://uma0317.github.io/rust-cookbook-ja/
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust nomicon book (日本語版)
https://doc.rust-jp.rs/rust-nomicon-ja/
Rust WASM book (日本語版)
https://moshg.github.io/rustwasm-book-ja/
Rust embeded book (日本語版)
https://tomoyuki-nakabayashi.github.io/book/
Rust enbeded discovery (日本語版)
https://tomoyuki-nakabayashi.github.io/discovery/
https://doc.rust-jp.rs/book-ja/
Rust edition guide (日本語版)
https://doc.rust-jp.rs/edition-guide/
Rust by example (日本語版)
https://doc.rust-jp.rs/rust-by-example-ja/
Rust cookbook (日本語版)
https://uma0317.github.io/rust-cookbook-ja/
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust nomicon book (日本語版)
https://doc.rust-jp.rs/rust-nomicon-ja/
Rust WASM book (日本語版)
https://moshg.github.io/rustwasm-book-ja/
Rust embeded book (日本語版)
https://tomoyuki-nakabayashi.github.io/book/
Rust enbeded discovery (日本語版)
https://tomoyuki-nakabayashi.github.io/discovery/
2022/05/12(木) 18:30:13.50ID:cuIcFT6k
Rust CLI (Command Line Interface) apps Book
https://rust-cli.github.io/book/
Rust async-std Book
https://book.async.rs/
Rust The Unstable Book
https://doc.rust-lang.org/nightly/unstable-book/
Rust rustc Book
https://doc.rust-lang.org/rustc/
Rust Cargo Book
https://doc.rust-lang.org/cargo/
The Rust Reference
https://doc.rust-lang.org/reference/
The Rust Standard Library
https://doc.rust-lang.org/std/
https://rust-cli.github.io/book/
Rust async-std Book
https://book.async.rs/
Rust The Unstable Book
https://doc.rust-lang.org/nightly/unstable-book/
Rust rustc Book
https://doc.rust-lang.org/rustc/
Rust Cargo Book
https://doc.rust-lang.org/cargo/
The Rust Reference
https://doc.rust-lang.org/reference/
The Rust Standard Library
https://doc.rust-lang.org/std/
2022/05/12(木) 18:33:42.89ID:q5adbU17
c++スレやHaskelスレでああでもないこうでもないと実用性無視してごちゃごちゃ言ってたのがRustスレに移って来て
ああでもないこうでもないと不毛な話を繰り返してるだけなんだろうな…
ああでもないこうでもないと不毛な話を繰り返してるだけなんだろうな…
2022/05/12(木) 21:06:22.42ID:EFEW+xd3
let mut >>1乙
6デフォルトの名無しさん
2022/05/12(木) 23:07:25.38ID:13HXXMDq ごちゃごちゃ戻り値の型さえ理解してないで書いてる
2022/05/13(金) 01:13:09.90ID:ufl1G9JB
またワッチョイなしですか
2022/05/13(金) 04:12:30.14ID:7BsdLj8J
>>6
ちゃんと理解しましょう
ちゃんと理解しましょう
2022/05/13(金) 06:02:56.68ID:6rmlfzdI
乙
もっとRustが普及しますように☆彡
もっとRustが普及しますように☆彡
2022/05/13(金) 18:17:33.08ID:9chxx07M
>>7
ワッチョイなんて飾りです
ワッチョイなんて飾りです
2022/05/13(金) 21:57:27.44ID:bn7J0pQ3
>>7
ワッチョイスレはすでにあるだろ
ワッチョイスレはすでにあるだろ
2022/05/13(金) 22:24:15.76ID:UR4E+9N6
>>8
正直言うと、俺たちは若い奴らが何やらワイワイさわいでCOBOLおじさんJAVAおじさん、C#おじさん扱いされないよう
カッコよさげだから、なんとなく雰囲気でRustを書いてるんだ。
でも、うまく言えないけど理解する必要性を全く感じない、下請けにおまえRustも分らんの?とマウントするのが夢なんだ
とやかく言われる筋合いは無い
正直言うと、俺たちは若い奴らが何やらワイワイさわいでCOBOLおじさんJAVAおじさん、C#おじさん扱いされないよう
カッコよさげだから、なんとなく雰囲気でRustを書いてるんだ。
でも、うまく言えないけど理解する必要性を全く感じない、下請けにおまえRustも分らんの?とマウントするのが夢なんだ
とやかく言われる筋合いは無い
2022/05/13(金) 23:48:07.30ID:uiqUB4xh
再帰的なmacroはaliasしても展開時に
元の名前のマクロを使おうとしてエラーになるんだがこれって避けられない?
use foo_crate::foo as bar;
bar!(…)
cannot find macro `foo` in this scope
this error originates in the macro `bar`
元の名前のマクロを使おうとしてエラーになるんだがこれって避けられない?
use foo_crate::foo as bar;
bar!(…)
cannot find macro `foo` in this scope
this error originates in the macro `bar`
2022/05/14(土) 00:13:13.84ID:BgvoYA7m
>>13
foo! の定義中の foo! 呼び出しを $crate::foo!() みたいにすればいけるんじゃないかな
foo! の定義中の foo! 呼び出しを $crate::foo!() みたいにすればいけるんじゃないかな
2022/05/14(土) 03:12:50.47ID:J3IrN4Ey
>>14
それだ、ありがとう
それだ、ありがとう
16デフォルトの名無しさん
2022/05/14(土) 23:50:01.31ID:7gZW+FH0 前スレで出ていたこの上限チェックRangeFromだけど
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold((start, true), move |(n, is_first)| {
if *is_first {
*is_first = false;
Some(n.clone())
} else {
n.checked_add(&one)
.map(|new| { *n = new.clone(); new })
}
})
}
フラグ持たずにOptionで持ったほうがわかりやすくない?
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold(Some(start), move |n| {
let ret = n.clone();
if let &mut Some(ref m) = n {
*n = m.checked_add(&one);
}
ret
})
}
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold((start, true), move |(n, is_first)| {
if *is_first {
*is_first = false;
Some(n.clone())
} else {
n.checked_add(&one)
.map(|new| { *n = new.clone(); new })
}
})
}
フラグ持たずにOptionで持ったほうがわかりやすくない?
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: Clone + TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold(Some(start), move |n| {
let ret = n.clone();
if let &mut Some(ref m) = n {
*n = m.checked_add(&one);
}
ret
})
}
2022/05/15(日) 00:14:36.59ID:AindqZB4
複オジに毒されてるな
successors(Some(start), move |n| n.checked_add(&one))
successors(Some(start), move |n| n.checked_add(&one))
2022/05/15(日) 02:25:52.10ID:/oKjcqbB
>>16
そのclone()は不要
トレイト境界からCloneを外せる
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold(Some(start), move |n| {
if let &mut Some(ref m) = n {
let mut next = m.checked_add(&one);
std::mem::swap(n, &mut next);
next
} else {
None
}
})
}
そのclone()は不要
トレイト境界からCloneを外せる
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold(Some(start), move |n| {
if let &mut Some(ref m) = n {
let mut next = m.checked_add(&one);
std::mem::swap(n, &mut next);
next
} else {
None
}
})
}
2022/05/15(日) 03:11:19.26ID:gyw6bZ1I
unfoldでなんでもできるからunfoldしか使わなくなってしまった人
いろいろな人
いろいろな人
2022/05/15(日) 07:53:49.50ID:SgXGf86o
>>18
take()?でもっと簡潔に書ける
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold(Some(start), move |n| {
let cur = n.take()?;
*n = cur.checked_add(&one);
Some(cur)
})
}
take()?でもっと簡潔に書ける
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
itertools::unfold(Some(start), move |n| {
let cur = n.take()?;
*n = cur.checked_add(&one);
Some(cur)
})
}
2022/05/15(日) 08:07:10.15ID:SgXGf86o
>>19
unfoldは要点に絞って見やすい短縮記法として使われている
そのままunfoldを使わずに普通に構造体にimpl Iteratorする形へ置き換え可能なところがメリット
例えば>>20はそのまま機械的に以下へ展開できて同じく動作する
struct Countup<T> {
one: T,
n: Option<T>,
}
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
Countup {
one: T::try_from(1).ok().unwrap(),
n: Some(start),
}
}
impl<T> Iterator for Countup<T>
where T: num::CheckedAdd,
{
type Item = T;
fn next(&mut self) -> Option<T> {
let cur = self.n.take()?;
self.n = cur.checked_add(&self.one);
Some(cur)
}
}
これだと長く冗長なので敢えてunfold利用版を記述することで要点のみに絞ることができる
unfoldは要点に絞って見やすい短縮記法として使われている
そのままunfoldを使わずに普通に構造体にimpl Iteratorする形へ置き換え可能なところがメリット
例えば>>20はそのまま機械的に以下へ展開できて同じく動作する
struct Countup<T> {
one: T,
n: Option<T>,
}
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
Countup {
one: T::try_from(1).ok().unwrap(),
n: Some(start),
}
}
impl<T> Iterator for Countup<T>
where T: num::CheckedAdd,
{
type Item = T;
fn next(&mut self) -> Option<T> {
let cur = self.n.take()?;
self.n = cur.checked_add(&self.one);
Some(cur)
}
}
これだと長く冗長なので敢えてunfold利用版を記述することで要点のみに絞ることができる
2022/05/15(日) 10:14:06.42ID:2aUGzSw0
2022/05/15(日) 10:54:06.34ID:+6kSxcdv
unfoldより関係が分かりにくくなるけど
キャプチャした変数を使うfrom_fnという手もある
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
let mut n = Some(start);
let one = T::try_from(1).ok().unwrap();
std::iter::from_fn(move || {
let cur = n.take()?;
n = cur.checked_add(&one);
Some(cur)
})
}
キャプチャした変数を使うfrom_fnという手もある
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
let mut n = Some(start);
let one = T::try_from(1).ok().unwrap();
std::iter::from_fn(move || {
let cur = n.take()?;
n = cur.checked_add(&one);
Some(cur)
})
}
2022/05/15(日) 10:54:14.40ID:duXfvT8B
大人が集まってくつろいでるところに
子供がガラッと入ってきて九九の暗唱しはじめたら
頑張ってるのがほほえましくて応援しちゃうでしょ
でも
大人がガラッと入ってきて九九の暗唱しはじめたら
ギョッとするし不安になってくるやろ
なぜそんなもんをお披露目しちゃうのか
なぜ得意げになって頑張ってるのかわからない
もういいよ!と単に言えばいいのか
続きはカーチャンに見えもらってね!と言えば良いのか
言って分かってもらえる気配もないので怖い
子供がガラッと入ってきて九九の暗唱しはじめたら
頑張ってるのがほほえましくて応援しちゃうでしょ
でも
大人がガラッと入ってきて九九の暗唱しはじめたら
ギョッとするし不安になってくるやろ
なぜそんなもんをお披露目しちゃうのか
なぜ得意げになって頑張ってるのかわからない
もういいよ!と単に言えばいいのか
続きはカーチャンに見えもらってね!と言えば良いのか
言って分かってもらえる気配もないので怖い
2022/05/15(日) 11:10:33.42ID:+6kSxcdv
今回はこれでもいい
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
std::iter::successors(Some(start), move |n| n.checked_add(&one))
}
fn countup<T>(start: T) -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
let one = T::try_from(1).ok().unwrap();
std::iter::successors(Some(start), move |n| n.checked_add(&one))
}
2022/05/15(日) 11:16:38.61ID:yna4qlqc
はちみつおじさん悔しそうwww
2022/05/15(日) 12:24:43.22ID:Q7/PweS0
九九と違って子供用のおもちゃプログラムでしか使えないコードなんだよなぁ
2022/05/15(日) 12:39:00.79ID:+mKsOYSe
代案出さずに文句だけつける万年野党みたいなやつがいるな
2022/05/15(日) 13:13:50.62ID:gyw6bZ1I
2022/05/15(日) 14:22:42.46ID:Cy+Jf1ha
九九のように簡単だという皆さま方に質問です
countup()が7通り(?)も色んな書き方が出てきて驚いたのですが
フィボナッチ数列だとどんな華麗なコードになりますか?
fn fibonacci<T>() -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
// ここを記述
}
出力仕様は一番ベーシックな0スタートとします
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
countup()が7通り(?)も色んな書き方が出てきて驚いたのですが
フィボナッチ数列だとどんな華麗なコードになりますか?
fn fibonacci<T>() -> impl Iterator<Item=T>
where T: TryFrom<usize> + num::CheckedAdd,
{
// ここを記述
}
出力仕様は一番ベーシックな0スタートとします
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
2022/05/15(日) 15:13:51.95ID:4TECkVdc
>>30
「Rustのお題スレ」でも立ててそっちでやってくれ
「Rustのお題スレ」でも立ててそっちでやってくれ
2022/05/15(日) 15:27:49.70ID:Cy+Jf1ha
2022/05/15(日) 15:40:51.12ID:hZXiQ87C
2022/05/15(日) 15:49:35.48ID:AAncJnA8
2022/05/15(日) 16:09:35.61ID:Cy+Jf1ha
>>33
ぜひそれを披露してやり方を教えてください
ぜひそれを披露してやり方を教えてください
2022/05/15(日) 16:27:05.61ID:KYkY1Akn
フィボナッチ数列イテレータ前スレでだれかが書いてたでしょ
それじゃいかんの
それじゃいかんの
2022/05/16(月) 07:04:42.44ID:nGMMRLLq
>>36
CopyやCloneを使っているから別問題だろう。
一般的にRustのプログラミングでは、
Copy(暗黙的な自動コピー)やClone(clone()による明示的な手動コピー)を使うと楽になるが、コストは高くなる。
そのため不要なclone()を見極めてそれを回避するプログラミングが出来るかどうか、というRustにおける根源的な話だろう。
CopyやCloneを使っているから別問題だろう。
一般的にRustのプログラミングでは、
Copy(暗黙的な自動コピー)やClone(clone()による明示的な手動コピー)を使うと楽になるが、コストは高くなる。
そのため不要なclone()を見極めてそれを回避するプログラミングが出来るかどうか、というRustにおける根源的な話だろう。
2022/05/16(月) 07:28:24.60ID:JrfUQrzl
Copyのコストが高い?
2022/05/16(月) 08:00:50.97ID:nGMMRLLq
2022/05/16(月) 08:58:48.98ID:tFcB4vDN
複製おじさんはいつも自分勝手な妄想を「一般的には~」とか「皆は~」と言って自分を正当化しようとするよね
2022/05/16(月) 10:03:10.22ID:0DWo1Xps
2022/05/16(月) 11:11:33.48ID:02kk6/+P
おじさん使いの人の自演がいつもよくわからん
唐突に妄想(?)を攻撃し出すが幻覚か何か見えてるのか
唐突に妄想(?)を攻撃し出すが幻覚か何か見えてるのか
2022/05/16(月) 16:19:03.24ID:NE3SiQoq
>>39
Cloneのコストが高い型にCopyを実装するな
Cloneのコストが高い型にCopyを実装するな
2022/05/16(月) 16:30:48.20ID:JLeK8lGd
Copyはコストが一番高いから出来る限り避けるべきだな
特にヒープを使うならCloneまでにしておくべき
可能ならばCloneも避けるべきだが
特にヒープを使うならCloneまでにしておくべき
可能ならばCloneも避けるべきだが
2022/05/16(月) 18:08:42.72ID:ThGcWJJo
Copyは所有権を複製するから最も高コスト(キリッ!!
2022/05/16(月) 18:10:04.46ID:ThGcWJJo
もはやどのレスもギャグにしか見えん
俺のしってるCopyとは確実に違う
俺のしってるCopyとは確実に違う
2022/05/16(月) 18:38:28.59ID:qW5+0T97
今までで一番意味不明なこと言ってるな
Copyのコストが高いならmoveのコストはどうなるのよ
Copyのコストが高いならmoveのコストはどうなるのよ
2022/05/16(月) 18:44:18.84ID:Mb2xQVjt
2022/05/16(月) 18:47:50.19ID:/5k6Bg80
Rust のムーブはビットパターンのコピーだもんな。
低レイヤの視点で見たらコピーと何の差も無い。
なるべく参照を使う場合にしても間接参照の実行コストとコピーの実行コストを天秤にかけてどちらが有利かは場合による。
低レイヤの視点で見たらコピーと何の差も無い。
なるべく参照を使う場合にしても間接参照の実行コストとコピーの実行コストを天秤にかけてどちらが有利かは場合による。
2022/05/16(月) 18:55:12.38ID:W7mPHnnh
>>47
それは理解不足すぎるぜ
大文字のCopyはCopyトレイトを意味しCopyトレイトを実装するか否かの話だろ
moveは別方向の話であり比較対象にすらならない
比較するならば「Copy実装(必然的にClone)も実装」「Cloneのみ実装」「どちらも実装なし」の3つだな
それは理解不足すぎるぜ
大文字のCopyはCopyトレイトを意味しCopyトレイトを実装するか否かの話だろ
moveは別方向の話であり比較対象にすらならない
比較するならば「Copy実装(必然的にClone)も実装」「Cloneのみ実装」「どちらも実装なし」の3つだな
2022/05/16(月) 19:00:08.16ID:GLqKLCqS
2022/05/16(月) 19:06:18.85ID:78bNbDCr
>>49
デタラメすぎ
ムーブでビットパターンのコピーは発生しない
ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない
さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる
Copyのコピーはディープであって高コスト
デタラメすぎ
ムーブでビットパターンのコピーは発生しない
ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない
さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる
Copyのコピーはディープであって高コスト
2022/05/16(月) 19:08:38.74ID:NE3SiQoq
そもそもフィボナッチ数列イテレータなんて誰も求めてないので
前スレのだれかさんの実装に問題があると思うなら自分で勝手に改善してなさい
そしてその結果はここに貼らなくていいぞ
前スレのだれかさんの実装に問題があると思うなら自分で勝手に改善してなさい
そしてその結果はここに貼らなくていいぞ
2022/05/16(月) 19:11:06.58ID:zgsMMZOB
「ヒープ使うならCloneまでにしとけ」
このセリフが一番刺さった
このセリフが一番刺さった
2022/05/16(月) 19:11:50.62ID:rHnqcaqs
>>52
おじさんマジかよwww
おじさんマジかよwww
2022/05/16(月) 19:22:59.76ID:NE3SiQoq
>>54
Dropを実装する型はCopyを実装できないよ
BoxもRcもStringもVecもそもそもCopyを実装できないので、するかしないか考えること自体が無意味
どういう型にCopyを実装できるか、できないか、すべきかはdocsに書いてあるので
なんのかんの言う前にまずはこれを読もうね
https://doc.rust-lang.org/std/marker/trait.Copy.html
Dropを実装する型はCopyを実装できないよ
BoxもRcもStringもVecもそもそもCopyを実装できないので、するかしないか考えること自体が無意味
どういう型にCopyを実装できるか、できないか、すべきかはdocsに書いてあるので
なんのかんの言う前にまずはこれを読もうね
https://doc.rust-lang.org/std/marker/trait.Copy.html
2022/05/16(月) 19:37:56.79ID:tTdd7GU5
2022/05/16(月) 19:45:37.77ID:/5k6Bg80
>>52
じゃあムーブでなにが起こるとおもってんの?
じゃあムーブでなにが起こるとおもってんの?
2022/05/16(月) 19:54:25.89ID:SHnkjBGX
2022/05/16(月) 20:38:11.38ID:NE3SiQoq
フィボナッチがどうでもいいならこの話は終わりです
2022/05/16(月) 20:45:13.08ID:Mz4z3EAu
関数の深いところから順に構造体をムーブで返していって
各関数で渡ってきた構造体のアドレスを表示させてみた
#[derive(Debug)]
struct S([i32; 100]);
fn main() {
let mut s1 = sub1(100);
s1.0[1] = 111;
println!("s1: {:p}", &s1);
println!("{s1:?}");
}
fn sub1(p: i32) -> S {
let q = p + 3;
let mut s2 = sub2(q);
s2.0[2] = p - 300;
println!("s2: {:p}", &s2);
s2
}
fn sub2(s: i32) -> S {
let t = s * 2;
let mut s3 = S([123; 100]);
s3.0[3] = t;
println!("s3: {:p}", &s3);
s3
}
s1もs2もs3もアドレスが一致
ムーブではアドレスそのままであり
ビットパターンのコピーが為されないという結論
各関数で渡ってきた構造体のアドレスを表示させてみた
#[derive(Debug)]
struct S([i32; 100]);
fn main() {
let mut s1 = sub1(100);
s1.0[1] = 111;
println!("s1: {:p}", &s1);
println!("{s1:?}");
}
fn sub1(p: i32) -> S {
let q = p + 3;
let mut s2 = sub2(q);
s2.0[2] = p - 300;
println!("s2: {:p}", &s2);
s2
}
fn sub2(s: i32) -> S {
let t = s * 2;
let mut s3 = S([123; 100]);
s3.0[3] = t;
println!("s3: {:p}", &s3);
s3
}
s1もs2もs3もアドレスが一致
ムーブではアドレスそのままであり
ビットパターンのコピーが為されないという結論
2022/05/16(月) 20:58:36.88ID:qW5+0T97
>>50
"Copyのコストが高い" は Copy を実装する行為そのもののコストが高いと解釈すべきということ?
そんなばかな
>>52
ドキュメント読みましょうねー
https://doc.rust-lang.org/stable/std/marker/trait.Copy.html
> It’s important to note that in these two examples, the only difference is whether you are allowed to access x after the assignment.
> Under the hood, both a copy and a move can result in bits being copied in memory, although this is sometimes optimized away.
...
> The behavior of Copy is not overloadable; it is always a simple bit-wise copy.
...
> The implementation of Clone can provide any type-specific behavior necessary to duplicate values safely.
> For example, the implementation of Clone for String needs to copy the pointed-to string buffer in the heap.
"Copyのコストが高い" は Copy を実装する行為そのもののコストが高いと解釈すべきということ?
そんなばかな
>>52
ドキュメント読みましょうねー
https://doc.rust-lang.org/stable/std/marker/trait.Copy.html
> It’s important to note that in these two examples, the only difference is whether you are allowed to access x after the assignment.
> Under the hood, both a copy and a move can result in bits being copied in memory, although this is sometimes optimized away.
...
> The behavior of Copy is not overloadable; it is always a simple bit-wise copy.
...
> The implementation of Clone can provide any type-specific behavior necessary to duplicate values safely.
> For example, the implementation of Clone for String needs to copy the pointed-to string buffer in the heap.
2022/05/16(月) 21:06:43.52ID:qW5+0T97
>>61
アドレスが同じか否かでコピーの有無を判断する意味はよくわからんが
その理屈だとこのコードだと違うアドレスが表示されるからビットパターンのコピーがされてるって結論になるのか?
#[derive(Debug)]
struct S([i32; 100]);
fn main() {
let mut s1 = S([0; 100]);
println!("s1: {:p}", &s1);
let s2 = s1;
println!("s2: {:p}", &s2);
}
アドレスが同じか否かでコピーの有無を判断する意味はよくわからんが
その理屈だとこのコードだと違うアドレスが表示されるからビットパターンのコピーがされてるって結論になるのか?
#[derive(Debug)]
struct S([i32; 100]);
fn main() {
let mut s1 = S([0; 100]);
println!("s1: {:p}", &s1);
let s2 = s1;
println!("s2: {:p}", &s2);
}
2022/05/16(月) 21:07:20.55ID:f/Xu02FO
>>61
struct S {}
fn main() {
let s1 = S{};
println!("s1: {:p}", &s1);
let s2 = s1;
println!("s2: {:p}", &s2);
}
struct S {}
fn main() {
let s1 = S{};
println!("s1: {:p}", &s1);
let s2 = s1;
println!("s2: {:p}", &s2);
}
2022/05/16(月) 21:08:00.98ID:f/Xu02FO
ごめん被った。やっぱそう思うよね。
2022/05/16(月) 21:16:19.81ID:9Ab93Lwf
2022/05/16(月) 21:19:28.47ID:51EzJkQ/
2022/05/16(月) 21:30:56.46ID:W905eBh/
>>57
一番分かってないお前が言うなよw
一番分かってないお前が言うなよw
2022/05/16(月) 21:38:19.38ID:/vD2A9J9
>>61
高コストなCopyも実装してから確認してみてねww
高コストなCopyも実装してから確認してみてねww
2022/05/16(月) 21:38:29.32ID:NE3SiQoq
2022/05/16(月) 21:39:12.01ID:DoCeaK1g
>>67
デバッグビルドだけじゃなくリリースビルドでも確認してねw
デバッグビルドだけじゃなくリリースビルドでも確認してねw
2022/05/16(月) 21:42:44.19ID:51EzJkQ/
>>71
リリースモードでもどちらも同じ結果
リリースモードでもどちらも同じ結果
2022/05/16(月) 21:49:25.30ID:sElCPUyn
2022/05/16(月) 23:46:37.66ID:jfEIc0ZW
このスレはいつもおかしい人間たちが集まってるな
Rustの何が人を狂わせるんだ?
Rustの何が人を狂わせるんだ?
2022/05/17(火) 00:09:43.95ID:HbNyXd2X
おじさんイジリ飽きたので結論いっておく
Copyもmoveもスタックの中身をコピーしてるのは同じ
最適化によって不要なコピーが除去されるかどうかはLLVM次第
でかい配列やでかい構造体などの極一部を除けばCopyは参照の受け渡しよりも低コスト
ついでに言うと&TもCopy
Copyもmoveもスタックの中身をコピーしてるのは同じ
最適化によって不要なコピーが除去されるかどうかはLLVM次第
でかい配列やでかい構造体などの極一部を除けばCopyは参照の受け渡しよりも低コスト
ついでに言うと&TもCopy
2022/05/17(火) 00:26:01.61ID:+9bLcV37
2022/05/17(火) 02:09:56.03ID:2XRLgT14
>>76
ここでいうCopyのコストって具体的にどういう操作のコストのこと言ってる?
構造体データのbitwise-copyのこと?それとも別の何か?
Cloneやmoveの場合にそのコストは発生しないと主張しているの?
ここでいうCopyのコストって具体的にどういう操作のコストのこと言ってる?
構造体データのbitwise-copyのこと?それとも別の何か?
Cloneやmoveの場合にそのコストは発生しないと主張しているの?
2022/05/17(火) 02:13:55.30ID:tAEVG8cC
2022/05/17(火) 07:41:41.18ID:1GDSnWAB
>>78
俺も同じくCopyは自動的にclone()されると思ってた
そう思ってた理由はClone実装せずにCopy実装するとエラーとなるため
そこで実験
#[derive(Debug,Copy)]
struct S { not_cloned: usize, cloned: usize }
impl Clone for S {
fn clone(&self) -> Self {
S { not_cloned: self.not_cloned / 3, cloned: self.cloned }
}
}
fn main() {
let s0 = S { not_cloned: 123, cloned: 456 };
let s1 = s0.clone();
let s2 = s0; // copy
println!("Cloned: {s1:?}");
println!("Copied: {s2:?}");
}
結果
Cloned: S { not_cloned: 41, cloned: 456 }
Copied: S { not_cloned: 123, cloned: 456 }
別物になった…
俺も同じくCopyは自動的にclone()されると思ってた
そう思ってた理由はClone実装せずにCopy実装するとエラーとなるため
そこで実験
#[derive(Debug,Copy)]
struct S { not_cloned: usize, cloned: usize }
impl Clone for S {
fn clone(&self) -> Self {
S { not_cloned: self.not_cloned / 3, cloned: self.cloned }
}
}
fn main() {
let s0 = S { not_cloned: 123, cloned: 456 };
let s1 = s0.clone();
let s2 = s0; // copy
println!("Cloned: {s1:?}");
println!("Copied: {s2:?}");
}
結果
Cloned: S { not_cloned: 41, cloned: 456 }
Copied: S { not_cloned: 123, cloned: 456 }
別物になった…
2022/05/17(火) 10:53:02.16ID:GxF458pr
2022/05/17(火) 14:50:42.61ID:94ESmIzZ
ガイジムーブ来てんね
2022/05/17(火) 21:03:27.69ID:VS5jQHYL
Copyはshallow copyだわな
2022/05/17(火) 22:07:44.57ID:LjbtS7tD
色々と正確な情報が出揃ったところで質問
まず前提として話を明白かつ簡単にするため、
ここでは!DropつまりCopy実装可能な型のみ対象、
そしてもしClone実装するならば*selfつまりCopy実装と同一、
CloneやCopyを実装するかどうかは任意、
小文字のcloneとcopyはそれぞれCloneやCopyを実装した時にそれらが使われることを意味するとする
このとき、次のどちらの主張が正しい?
A「copy/cloneはコストが生じるので、回避できるならば回避したほうが有利」
B「copy/cloneのコストはmoveと同じなので回避する必要はない」
まず前提として話を明白かつ簡単にするため、
ここでは!DropつまりCopy実装可能な型のみ対象、
そしてもしClone実装するならば*selfつまりCopy実装と同一、
CloneやCopyを実装するかどうかは任意、
小文字のcloneとcopyはそれぞれCloneやCopyを実装した時にそれらが使われることを意味するとする
このとき、次のどちらの主張が正しい?
A「copy/cloneはコストが生じるので、回避できるならば回避したほうが有利」
B「copy/cloneのコストはmoveと同じなので回避する必要はない」
2022/05/17(火) 22:30:37.28ID:VUKzLr9a
場合による。
たとえコピーであっても結局は内容が同じものであると看破すれば
実際にはコピーしないようなコードを生成するといったことは有りうる。
Rust は原理的にエイリアス解析がやりやすい言語だと思うし。
実行コスト的にどうかなんて考えずに所有権管理の側面からの妥当性で決めたほうがよい。
その上でどうしても実行コストを切り詰めないといけないようになったならその時に考えればいい。
たとえコピーであっても結局は内容が同じものであると看破すれば
実際にはコピーしないようなコードを生成するといったことは有りうる。
Rust は原理的にエイリアス解析がやりやすい言語だと思うし。
実行コスト的にどうかなんて考えずに所有権管理の側面からの妥当性で決めたほうがよい。
その上でどうしても実行コストを切り詰めないといけないようになったならその時に考えればいい。
2022/05/17(火) 22:33:27.98ID:5/60CrrJ
2022/05/17(火) 23:40:20.70ID:XaJZCLYj
2022/05/17(火) 23:43:19.03ID:nlEgMvZ6
考えてみたけどmove/copyが問題になるレベルの大きさの型をスタックに置いて扱ったことが無いな…
使うとすれば固定長配列のバッファ?
でもそんなものmove/copyするわけないし
やっぱり考える意味の無い二択だと思う
使うとすれば固定長配列のバッファ?
でもそんなものmove/copyするわけないし
やっぱり考える意味の無い二択だと思う
2022/05/17(火) 23:47:41.13ID:FqAlYuq2
2022/05/17(火) 23:49:36.53ID:YviCLBk+
2022/05/17(火) 23:54:01.76ID:VUKzLr9a
2022/05/17(火) 23:55:13.39ID:tAEVG8cC
あっこの流れC++相談室で見たやつだ
2022/05/18(水) 00:07:06.58ID:P5Km+xQv
要は参照使えるなら使っとけって?
今更すぎませんか
今更すぎませんか
2022/05/18(水) 00:30:37.66ID:DGffctwq
オナコードペタペタされてたほうがマシだったなこりゃ
2022/05/18(水) 00:45:17.78ID:opn2S8Zb
>>92
それもあるが、例えば多数のコピーが行われているコードに対して、回避できる分を見直し、少数のコピーで済むように改善できる場合もある
Copy実装せずに明示clone()した方が見つけやすいかもしれない
それもあるが、例えば多数のコピーが行われているコードに対して、回避できる分を見直し、少数のコピーで済むように改善できる場合もある
Copy実装せずに明示clone()した方が見つけやすいかもしれない
2022/05/18(水) 01:26:17.77ID:lxQ5l4ey
2022/05/18(水) 01:42:43.25ID:d5NnfCmB
一人だけ間違った思い込みをしてるのに
説明されても「俺は間違ってない、間違ってるのはお前ら」が続くだけだからな
説明されても「俺は間違ってない、間違ってるのはお前ら」が続くだけだからな
2022/05/18(水) 01:46:16.75ID:6ezlEFaX
2022/05/18(水) 01:51:55.82ID:Da/MVUm8
2022/05/18(水) 02:06:14.30ID:UgigdTUo
100デフォルトの名無しさん
2022/05/18(水) 07:08:20.63ID:bcZKOTNR 大きいフィールドを持つ型には、Copyは実装しないだろうし普通はCopy/Moveのコスト差を気にすることなくない?
どちらにすべきかボーダーが難しいことはありそうだけど
どちらにすべきかボーダーが難しいことはありそうだけど
101デフォルトの名無しさん
2022/05/18(水) 07:14:11.27ID:P5Km+xQv >>94
データフローを見直して単純に消せるclone/copyは消せってことか?
それこそ今更すぎるわ
単純に消せないところまで消した後、さらにパフォーマンス改善するにはどうするかってことで、参照の話か?って聞いたんだけど
どこの誰とも知れないやつのフィボナッチのコードに対する指摘をされても知らねーよ
問題があって対策が分かってるなら自分で直すがいい
データフローを見直して単純に消せるclone/copyは消せってことか?
それこそ今更すぎるわ
単純に消せないところまで消した後、さらにパフォーマンス改善するにはどうするかってことで、参照の話か?って聞いたんだけど
どこの誰とも知れないやつのフィボナッチのコードに対する指摘をされても知らねーよ
問題があって対策が分かってるなら自分で直すがいい
102デフォルトの名無しさん
2022/05/18(水) 07:41:25.51ID:4GWzufxp103デフォルトの名無しさん
2022/05/18(水) 07:56:39.00ID:HgdHe2aE104デフォルトの名無しさん
2022/05/18(水) 08:12:27.72ID:BE/QrV8J 流れからすると本当はジェネリックのフィボナッチにCopyを付けないほうが有利と主張したかったんじゃね?
でも後から回避できないことに気づいて苦しい言い訳を重ねてるだけと見た
でも後から回避できないことに気づいて苦しい言い訳を重ねてるだけと見た
105デフォルトの名無しさん
2022/05/18(水) 08:21:27.45ID:6swlbHlO >>85
根拠も示さず批判だけする一番アカン人間やな
根拠も示さず批判だけする一番アカン人間やな
106デフォルトの名無しさん
2022/05/18(水) 08:33:04.08ID:6hDwlDoy >>104
フィボナッチはCopyを回避できないものなの?
フィボナッチはCopyを回避できないものなの?
107デフォルトの名無しさん
2022/05/18(水) 08:45:43.18ID:2HNq06l+ 分からないなら分からないから教えてって言えばいいのに意地を張るからこうなる
構えば構うほど意味不明な発言が出てくる
真面目に議論したいならせめてIDコロコロ変えるのやめな
構えば構うほど意味不明な発言が出てくる
真面目に議論したいならせめてIDコロコロ変えるのやめな
108デフォルトの名無しさん
2022/05/18(水) 09:10:15.39ID:Gy2qdhBc フィボナッチってこれだろ
f(0) = 0
f(1) = 1
f(n) = f(n - 1) + f(n - 2)
関数呼び出しに足し算に大量のコピーは避けられない
f(0) = 0
f(1) = 1
f(n) = f(n - 1) + f(n - 2)
関数呼び出しに足し算に大量のコピーは避けられない
109デフォルトの名無しさん
2022/05/18(水) 09:28:25.87ID:3vPi03ro >>87
async関数やasyncブロックで生成されるFutureは結構大きくなることがあって、boxingした方が性能出るケースもある
async関数やasyncブロックで生成されるFutureは結構大きくなることがあって、boxingした方が性能出るケースもある
110デフォルトの名無しさん
2022/05/18(水) 10:05:07.09ID:jV65BxdQ111デフォルトの名無しさん
2022/05/18(水) 10:20:40.09ID:AWXqkW+Q >>110
型制約からCopyを外せばプリミティブと言えどもcopyされなくなる
具体的には個々のプリミティブ型へモノモーフィゼーゼーションされる前の段階でCopy実装していない型に対してのcopy発生エラーが生じる
フィボナッチでcopyを回避するのは可能
型制約からCopyを外せばプリミティブと言えどもcopyされなくなる
具体的には個々のプリミティブ型へモノモーフィゼーゼーションされる前の段階でCopy実装していない型に対してのcopy発生エラーが生じる
フィボナッチでcopyを回避するのは可能
112デフォルトの名無しさん
2022/05/18(水) 10:38:43.35ID:2JRtSvHV 複オジの主張まとめ(1)
37, 39, 44
=====
CopyやCloneを使っているから別問題だろう。
一般的にRustのプログラミングでは、
Copy(暗黙的な自動コピー)やClone(clone()による明示的な手動コピー)を使うと楽になるが、コストは高くなる。
そのため不要なclone()を見極めてそれを回避するプログラミングが出来るかどうか、というRustにおける根源的な話だろう。
もちろんCopyは最もコストが高い。
個々のコスト自体は通常clone()と同じだが、常に自動的にclone()が起きるため最もコストが高くなる。
Copyはコストが一番高いから出来る限り避けるべきだな
特にヒープを使うならCloneまでにしておくべき
可能ならばCloneも避けるべきだが
37, 39, 44
=====
CopyやCloneを使っているから別問題だろう。
一般的にRustのプログラミングでは、
Copy(暗黙的な自動コピー)やClone(clone()による明示的な手動コピー)を使うと楽になるが、コストは高くなる。
そのため不要なclone()を見極めてそれを回避するプログラミングが出来るかどうか、というRustにおける根源的な話だろう。
もちろんCopyは最もコストが高い。
個々のコスト自体は通常clone()と同じだが、常に自動的にclone()が起きるため最もコストが高くなる。
Copyはコストが一番高いから出来る限り避けるべきだな
特にヒープを使うならCloneまでにしておくべき
可能ならばCloneも避けるべきだが
113デフォルトの名無しさん
2022/05/18(水) 10:39:05.95ID:2JRtSvHV 複オジの主張まとめ(2)
50, 52, 57
=====
それは理解不足すぎるぜ
大文字のCopyはCopyトレイトを意味しCopyトレイトを実装するか否かの話だろ
moveは別方向の話であり比較対象にすらならない
比較するならば「Copy実装(必然的にClone)も実装」「Cloneのみ実装」「どちらも実装なし」の3つだな
デタラメすぎ
ムーブでビットパターンのコピーは発生しない
ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない
さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる
Copyのコピーはディープであって高コスト
これだけCopyやCloneを理解していない連中が多い状況だと
>>30の質問に答えられるかどうかは最低限クリアすべきテストとして有用ではないか?
フィボナッチ自体はもちろんどうでもよい話だがCopyやCloneを避けるRustの基本ができるかどうかわかる点で
50, 52, 57
=====
それは理解不足すぎるぜ
大文字のCopyはCopyトレイトを意味しCopyトレイトを実装するか否かの話だろ
moveは別方向の話であり比較対象にすらならない
比較するならば「Copy実装(必然的にClone)も実装」「Cloneのみ実装」「どちらも実装なし」の3つだな
デタラメすぎ
ムーブでビットパターンのコピーは発生しない
ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない
さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる
Copyのコピーはディープであって高コスト
これだけCopyやCloneを理解していない連中が多い状況だと
>>30の質問に答えられるかどうかは最低限クリアすべきテストとして有用ではないか?
フィボナッチ自体はもちろんどうでもよい話だがCopyやCloneを避けるRustの基本ができるかどうかわかる点で
114デフォルトの名無しさん
2022/05/18(水) 10:41:41.09ID:2JRtSvHV 複オジの一連の主張を読んでから>>83の複オジ質問を読むべし
115デフォルトの名無しさん
2022/05/18(水) 10:44:21.46ID:Jso4/z1R 複おじに反応するやつも複おじ
116デフォルトの名無しさん
2022/05/18(水) 10:52:26.71ID:j9G6SOiS 主張が毎回変わる
口調も毎回変わる
表記も毎回変わる
間違いなく多重人格者
口調も毎回変わる
表記も毎回変わる
間違いなく多重人格者
117デフォルトの名無しさん
2022/05/18(水) 10:55:48.57ID:TXrPyH7a >>98
この文脈では○○にはなんでも当てはまるから意味がないよね
以下なら議論になる?
A「copy/cloneはmoveよりコストが生じるので、copyが必要な部分とそうでない部分で構造体を分離してでも出来るだけmoveを使用する」
B「copy/cloneのコストはmoveよりコストが生じるとは限らないので、一部でもcopyが必要な部分がある構造体は丸ごとcopyして構わない」
この文脈では○○にはなんでも当てはまるから意味がないよね
以下なら議論になる?
A「copy/cloneはmoveよりコストが生じるので、copyが必要な部分とそうでない部分で構造体を分離してでも出来るだけmoveを使用する」
B「copy/cloneのコストはmoveよりコストが生じるとは限らないので、一部でもcopyが必要な部分がある構造体は丸ごとcopyして構わない」
118デフォルトの名無しさん
2022/05/18(水) 11:00:11.80ID:TXrPyH7a >>116
そこまでいったらネット上では別人で良いだろ
そこまでいったらネット上では別人で良いだろ
119デフォルトの名無しさん
2022/05/18(水) 11:05:55.27ID:f/6XNiB/ >>108
やってみた
fn main() {
for n in 0..100 {
let f = f(n);
println!("f({n}) = {f}");
}
}
fn f(n: i32) -> i32 {
match n {
0 => 0,
1 => 1,
n => f(n - 1) + f(n - 2),
}
}
このあたりから非常に重くなった
f(43) = 433494437
f(44) = 701408733
f(45) = 1134903170
f(46) = 1836311903
f(47) = -1323752223
f(48) = 512559680
やってみた
fn main() {
for n in 0..100 {
let f = f(n);
println!("f({n}) = {f}");
}
}
fn f(n: i32) -> i32 {
match n {
0 => 0,
1 => 1,
n => f(n - 1) + f(n - 2),
}
}
このあたりから非常に重くなった
f(43) = 433494437
f(44) = 701408733
f(45) = 1134903170
f(46) = 1836311903
f(47) = -1323752223
f(48) = 512559680
120デフォルトの名無しさん
2022/05/18(水) 11:24:29.81ID:Rx65yaNy メモ化されてないんやから遅くなるのは当然
>>108は定義を示しただけちゃう?
>>108は定義を示しただけちゃう?
121デフォルトの名無しさん
2022/05/18(水) 11:25:30.07ID:Rx65yaNy つかオーバーフローしとるな
122デフォルトの名無しさん
2022/05/18(水) 11:29:30.10ID:e0i+LLok123デフォルトの名無しさん
2022/05/18(水) 12:13:31.53ID:QV9C5cPM ぼくのかんがえたさいきょうのcountup<T>()をみんなバカにしたので
ぼくのかんがえたさいきょうのfibonacchi<T>()でやっつけようとしたら
わざをだすまえにボコボコにやられてしまいました
く、くやしいです!
ぼくのかんがえたさいきょうのfibonacchi<T>()でやっつけようとしたら
わざをだすまえにボコボコにやられてしまいました
く、くやしいです!
124デフォルトの名無しさん
2022/05/18(水) 13:41:52.15ID:mX15beFi clone()が一個でコンパイル通ったからそのコードでのコピーは一回ではないか
use std::ops::{Add, Sub};
fn f<T>(n: T) -> T where T: Clone + PartialEq + TryFrom<usize> + Add<Output=T> + Sub<Output=T> {
let [zero, one, two] = [0, 1, 2].map(|n| T::try_from(n).ok().unwrap());
match n {
n if n == zero => zero,
n if n == one => one,
n => f(n.clone() - one) + f(n - two),
}
}
use std::ops::{Add, Sub};
fn f<T>(n: T) -> T where T: Clone + PartialEq + TryFrom<usize> + Add<Output=T> + Sub<Output=T> {
let [zero, one, two] = [0, 1, 2].map(|n| T::try_from(n).ok().unwrap());
match n {
n if n == zero => zero,
n if n == one => one,
n => f(n.clone() - one) + f(n - two),
}
}
125デフォルトの名無しさん
2022/05/18(水) 13:50:00.30ID:FQ8O/3lA >>119
計算量はO(n), メモリ使用量は定数オーダーにできるのになんで定義どおり実装したの?
計算量はO(n), メモリ使用量は定数オーダーにできるのになんで定義どおり実装したの?
126デフォルトの名無しさん
2022/05/18(水) 14:41:04.77ID:xTux5YG/ >>123
ぼくのかんがえたさいきょうのfizzbuzz<T>()もわすれないで
ぼくのかんがえたさいきょうのfizzbuzz<T>()もわすれないで
127デフォルトの名無しさん
2022/05/18(水) 15:04:45.49ID:dI/aN4vs >>125
そんな魔法はありません
そんな魔法はありません
128デフォルトの名無しさん
2022/05/18(水) 16:48:40.40ID:pQAvghMm >>127
え?
え?
129デフォルトの名無しさん
2022/05/18(水) 17:53:48.13ID:jsK0MVuh Rust以前の問題じゃん
スレ違い
スレ違い
130デフォルトの名無しさん
2022/05/18(水) 23:22:25.69ID:z2ufbs5N >>124
そのclone()は子のf(n-1)とf(n-2)やそれらの子孫でも呼ばれるので1回ではなくO(n)より大きい
それをO(n)すなわちn回+定数回以下に抑えられるのかどうか
あるいはO(0)回すなわち定数回以下に抑えられるのかどうか
そのclone()は子のf(n-1)とf(n-2)やそれらの子孫でも呼ばれるので1回ではなくO(n)より大きい
それをO(n)すなわちn回+定数回以下に抑えられるのかどうか
あるいはO(0)回すなわち定数回以下に抑えられるのかどうか
131デフォルトの名無しさん
2022/05/18(水) 23:41:48.24ID:RLh6XGtQ フィボナッチはu128を使ってもf(187)でオーバフローするからBigInt必須
clone()はできる限り少なくしないと厳しい
clone()はできる限り少なくしないと厳しい
132デフォルトの名無しさん
2022/05/19(木) 00:10:47.96ID:SnnzWk5R どうでもいいから複おじはTRPL読み直してきてね
133デフォルトの名無しさん
2022/05/19(木) 00:16:28.52ID:IEr5OW/T >>120
メモ化したら速くなったけど
memoをこちらで用意して毎回渡していくのを避けられないのかな?
fn main() {
let mut memo: Vec<usize> = Vec::new();
for n in 0..100 {
let f = f(n, &mut memo);
println!("f({n}) = {f}");
}
}
fn f(n: usize, memo: &mut Vec<usize>) -> usize {
if let Some(result) = memo.get(n) {
*result
} else {
let result = match n {
0 => 0,
1 => 1,
n => f(n - 1, memo) + f(n - 2, memo),
};
memo.push(result);
result
}
}
メモ化したら速くなったけど
memoをこちらで用意して毎回渡していくのを避けられないのかな?
fn main() {
let mut memo: Vec<usize> = Vec::new();
for n in 0..100 {
let f = f(n, &mut memo);
println!("f({n}) = {f}");
}
}
fn f(n: usize, memo: &mut Vec<usize>) -> usize {
if let Some(result) = memo.get(n) {
*result
} else {
let result = match n {
0 => 0,
1 => 1,
n => f(n - 1, memo) + f(n - 2, memo),
};
memo.push(result);
result
}
}
134デフォルトの名無しさん
2022/05/19(木) 00:24:17.53ID:d4KplWCH メモ化する必要ある?
直前の2つだけ記録しておけば次の一項が計算できるんだから再帰にする必要ないよね
直前の2つだけ記録しておけば次の一項が計算できるんだから再帰にする必要ないよね
135デフォルトの名無しさん
2022/05/19(木) 00:33:12.40ID:IEr5OW/T >>134
具体的にどうすればよいてすか?
具体的にどうすればよいてすか?
136デフォルトの名無しさん
2022/05/19(木) 00:46:08.98ID:HY3grr6d >>135
"rust fibonacci"でググるとよいです
"rust fibonacci"でググるとよいです
137デフォルトの名無しさん
2022/05/19(木) 01:21:23.38ID:f3pwm4rC >>134
直前の2つだけ記録して再帰にしない方法ならば
おそらくこうする案だと思うが
>>133がO(n)で済んでいるのに対して
これは二重のforによりO(n^2)になっていてこれは悪手
fn main() {
for n in 0..100 {
let f = f(n);
println!("f({n}) = {f}");
}
}
fn f(n: usize) -> usize {
match n {
0 => 0,
1 => 1,
n => {
let mut prepre = 0;
let mut pre = 1;
for i in 2..n {
let tmp = pre;
pre += prepre;
prepre = tmp;
}
pre + prepre
},
}
}
直前の2つだけ記録して再帰にしない方法ならば
おそらくこうする案だと思うが
>>133がO(n)で済んでいるのに対して
これは二重のforによりO(n^2)になっていてこれは悪手
fn main() {
for n in 0..100 {
let f = f(n);
println!("f({n}) = {f}");
}
}
fn f(n: usize) -> usize {
match n {
0 => 0,
1 => 1,
n => {
let mut prepre = 0;
let mut pre = 1;
for i in 2..n {
let tmp = pre;
pre += prepre;
prepre = tmp;
}
pre + prepre
},
}
}
138デフォルトの名無しさん
2022/05/19(木) 01:31:14.77ID:d4KplWCH >>135
fn main(){
for n in 0..10{
println!("f({}) = {}", n, f(n));
}
}
fn f(n:usize) -> usize{
let mut a = 0;
let mut b = 1;
for i in 0..n{
let tmp = b;
b = a + b;
a = tmp;
}
return a;
}
わざわざRustっぽい書き方をする必要はない
fn main(){
for n in 0..10{
println!("f({}) = {}", n, f(n));
}
}
fn f(n:usize) -> usize{
let mut a = 0;
let mut b = 1;
for i in 0..n{
let tmp = b;
b = a + b;
a = tmp;
}
return a;
}
わざわざRustっぽい書き方をする必要はない
139デフォルトの名無しさん
2022/05/19(木) 01:39:04.90ID:f3pwm4rC >>138
それもforが二重となっていて全体でO(n^2)だから同じく悪手
それもforが二重となっていて全体でO(n^2)だから同じく悪手
140デフォルトの名無しさん
2022/05/19(木) 02:09:27.74ID:XQuKTBpO >>131
なら尚のことジェネリックにする意味ないよね?
なら尚のことジェネリックにする意味ないよね?
141デフォルトの名無しさん
2022/05/19(木) 03:45:23.95ID:jyObMdH0 >>137,139
悪手ってなにをもって悪手だよ
一般項の導出は高校生でもできるレベルで、そうすればO(log(n))で求められるし、つまらん計算量改善のためだけのアルゴリズム議論はもうやめろ
これ以上計算量の話をするなら別のスレでやってくれ
悪手ってなにをもって悪手だよ
一般項の導出は高校生でもできるレベルで、そうすればO(log(n))で求められるし、つまらん計算量改善のためだけのアルゴリズム議論はもうやめろ
これ以上計算量の話をするなら別のスレでやってくれ
142デフォルトの名無しさん
2022/05/19(木) 04:01:44.79ID:f3pwm4rC143デフォルトの名無しさん
2022/05/19(木) 08:08:36.85ID:SnnzWk5R まあ(usize) -> usizeのインターフェースを持たせつつ逐次処理したければメモ化が楽だわな
Rustとは特に関係の無いアルゴリズム一般論の話だけど
Rustとは特に関係の無いアルゴリズム一般論の話だけど
144デフォルトの名無しさん
2022/05/19(木) 12:20:27.39ID:TVQgVkXp なんでmainのループまで計算量に入れてるの?
今やってるのはフィボナッチ数列の計算量の話でしょ
余計なところまで話し広げてどうするの?
今やってるのはフィボナッチ数列の計算量の話でしょ
余計なところまで話し広げてどうするの?
145デフォルトの名無しさん
2022/05/19(木) 12:42:29.01ID:Y0RaHe9J いい加減こんな語り尽くされた話終わってろ
何スレだよここ
何スレだよここ
146デフォルトの名無しさん
2022/05/19(木) 12:44:11.02ID:2eGzkY/T >>143
メモ化は良いが>>133のコードはインターフェースがあまりよくない
逆に>>138のコードはn個の列挙にO(n^2)も費やしている
以下のように書けばn個の列挙がO(n)に収まり、個別f(n)もO(n)で両立できる
fn main() {
println!("f(77) = {}", f(77));
for (n, f) in fibonacci_iter().enumerate() {
println!("f({n}) = {f}");
}
}
fn f(n: usize) -> usize {
fibonacci_iter().nth(n).unwrap()
}
fn fibonacci_iter() -> impl Iterator<Item=usize> {
let mut p = 0;
let mut q = 1;
std::iter::from_fn(move || {
let r = p;
p = q;
q += r;
Some(r)
})
}
メモ化は良いが>>133のコードはインターフェースがあまりよくない
逆に>>138のコードはn個の列挙にO(n^2)も費やしている
以下のように書けばn個の列挙がO(n)に収まり、個別f(n)もO(n)で両立できる
fn main() {
println!("f(77) = {}", f(77));
for (n, f) in fibonacci_iter().enumerate() {
println!("f({n}) = {f}");
}
}
fn f(n: usize) -> usize {
fibonacci_iter().nth(n).unwrap()
}
fn fibonacci_iter() -> impl Iterator<Item=usize> {
let mut p = 0;
let mut q = 1;
std::iter::from_fn(move || {
let r = p;
p = q;
q += r;
Some(r)
})
}
147デフォルトの名無しさん
2022/05/19(木) 12:47:27.97ID:wYj4kQtM 僕チンすごい!ってホルホルしたいんだろうけど
脳のワーキングメモリーが減ってこの程度の内容でしかコードが書けないんだろうな
脳のワーキングメモリーが減ってこの程度の内容でしかコードが書けないんだろうな
148デフォルトの名無しさん
2022/05/19(木) 13:06:09.75ID:TVQgVkXp まず計算量にmainのループを勘定してる時点で…
149デフォルトの名無しさん
2022/05/19(木) 13:18:54.57ID:u56F2Ocx150デフォルトの名無しさん
2022/05/19(木) 18:50:45.11ID:j8hvvms1 イテレーターにするとメリット多いんだな
Rustと相性いい
Rustと相性いい
151デフォルトの名無しさん
2022/05/19(木) 19:01:17.07ID:SnnzWk5R >>146はメモ捨ててるから計算済みのf(n)引っ張ってくるのに毎回O(n)かかるけどね
イテレータと相性良いように見えるとしたら0..nループと組み合わせることしかしてこなかったmainが見せる幻想
そろそろRustの話に戻ってもらっていいですか?
イテレータと相性良いように見えるとしたら0..nループと組み合わせることしかしてこなかったmainが見せる幻想
そろそろRustの話に戻ってもらっていいですか?
152デフォルトの名無しさん
2022/05/19(木) 19:56:30.02ID:X9gr9ket >>151
マジで>>133のメモ化が好ましいと思っているのか?
イテレータはメモ化とも相性が良い
例えば>>146のfibonacci_iter()を含むイテレータ汎用メモ化は即席でこんな感じ
fn main() {
let mut memo = IterMemo::new(fibonacci_iter());
assert_eq!(memo.nth(10), Some(55));
assert_eq!(memo.nth(0), Some(0));
assert_eq!(memo.nth(30), Some(832040));
assert_eq!(memo.nth(5), Some(5));
assert_eq!(memo.nth(50), Some(12586269025));
}
struct IterMemo<I> {
iter: I,
memo: Vec<usize>,
}
impl<I: Iterator<Item=usize>> IterMemo<I> {
fn new(iter: I) -> Self {
IterMemo { iter, memo: Vec::new() }
}
fn nth(&mut self, n: usize) -> Option<usize> {
for _i in self.memo.len()..=n {
if let Some(x) = self.iter.next() {
self.memo.push(x);
}
}
self.memo.get(n).cloned()
}
}
マジで>>133のメモ化が好ましいと思っているのか?
イテレータはメモ化とも相性が良い
例えば>>146のfibonacci_iter()を含むイテレータ汎用メモ化は即席でこんな感じ
fn main() {
let mut memo = IterMemo::new(fibonacci_iter());
assert_eq!(memo.nth(10), Some(55));
assert_eq!(memo.nth(0), Some(0));
assert_eq!(memo.nth(30), Some(832040));
assert_eq!(memo.nth(5), Some(5));
assert_eq!(memo.nth(50), Some(12586269025));
}
struct IterMemo<I> {
iter: I,
memo: Vec<usize>,
}
impl<I: Iterator<Item=usize>> IterMemo<I> {
fn new(iter: I) -> Self {
IterMemo { iter, memo: Vec::new() }
}
fn nth(&mut self, n: usize) -> Option<usize> {
for _i in self.memo.len()..=n {
if let Some(x) = self.iter.next() {
self.memo.push(x);
}
}
self.memo.get(n).cloned()
}
}
153デフォルトの名無しさん
2022/05/19(木) 21:07:44.82ID:wYj4kQtM 汚いな
154デフォルトの名無しさん
2022/05/19(木) 21:11:33.57ID:+7PnyNeM 複オジは何が問題だと指摘されてるのか理解しないんだよなぁ
頭悪いのにとにかくマウントだけ取りたがって恥の上塗り上塗り上塗り
何回塗るねんっw
頭悪いのにとにかくマウントだけ取りたがって恥の上塗り上塗り上塗り
何回塗るねんっw
155デフォルトの名無しさん
2022/05/19(木) 21:20:54.65ID:5LQoe3Bs ほらなw
ぼくのかんがえたさいきょうのひぼなっちいてれーた!
どや!? どやどやどや!!?
これで1000まで行くよw
ぼくのかんがえたさいきょうのひぼなっちいてれーた!
どや!? どやどやどや!!?
これで1000まで行くよw
156デフォルトの名無しさん
2022/05/19(木) 21:27:22.70ID:SnnzWk5R どうしてもイテレータが欲しいなら>>133に建て増ししたほうがよっぽど整理されていいよ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=86c556a9709d959e8b9ecff08223b099
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=86c556a9709d959e8b9ecff08223b099
157デフォルトの名無しさん
2022/05/19(木) 21:29:51.14ID:u7/IlrFk158デフォルトの名無しさん
2022/05/19(木) 21:34:02.60ID:wYj4kQtM その前に単純にバグ入りだけど
159デフォルトの名無しさん
2022/05/19(木) 21:51:56.08ID:MGh63lg3 メモ化と個別機能が完全に分離できている>>152の方が良さげ
160デフォルトの名無しさん
2022/05/19(木) 21:55:11.08ID:wYj4kQtM このスレだけでなくRust書く人間はコケ前提なのが馬鹿らしい
未知の計算するのに対策してない馬鹿野郎ども
未知の計算するのに対策してない馬鹿野郎ども
161デフォルトの名無しさん
2022/05/19(木) 21:56:15.85ID:wYj4kQtM 目が覚めろ
目が覚めろ
コケ前提は恥ずかしい
目が覚めろ
コケ前提は恥ずかしい
162デフォルトの名無しさん
2022/05/19(木) 21:56:34.11ID:iLpWQ9zs163デフォルトの名無しさん
2022/05/19(木) 21:58:30.11ID:wYj4kQtM Rust書く人間はレベルが低いと思われても平気なのか?
164デフォルトの名無しさん
2022/05/19(木) 22:05:28.50ID:+v1Fmw4c165デフォルトの名無しさん
2022/05/19(木) 22:13:58.00ID:G2OEvBhv 「Rustでドヤりたい素人が犯しがちな12の過ち」
みたいな記事が捗りそう
みたいな記事が捗りそう
166デフォルトの名無しさん
2022/05/19(木) 22:18:44.85ID:iQApRYmM >>164
関数の設計ができない人の発想
関数の設計ができない人の発想
167デフォルトの名無しさん
2022/05/19(木) 22:22:18.18ID:z7fdj+fO >>164
なんでIDコロコロ変えてるの?
なんでIDコロコロ変えてるの?
168デフォルトの名無しさん
2022/05/19(木) 22:27:10.61ID:2ZXoSlQ2169デフォルトの名無しさん
2022/05/19(木) 22:29:47.42ID:EaXeIbDt こんな数列ごときでヒープ必須の>>156はプログラミングが下手
170デフォルトの名無しさん
2022/05/19(木) 22:47:12.76ID:AQMm07Qd 数列ごときのプログラムしか書けない複製おじさん……
171デフォルトの名無しさん
2022/05/19(木) 23:33:01.93ID:wYj4kQtM cargo run --releaseで予測した動きをしないコードを書くなよ
速やかにバグを取れ
速やかにバグを取れ
172デフォルトの名無しさん
2022/05/19(木) 23:33:20.92ID:vqaI/jC6 Rust 1.61.0
173デフォルトの名無しさん
2022/05/19(木) 23:35:03.68ID:wYj4kQtM このスレの底辺のコーダーもどき全員ゴミ
まともなコードすらかけないでiterが~とか言ってんじゃねえよ
バカども
まともなコードすらかけないでiterが~とか言ってんじゃねえよ
バカども
174デフォルトの名無しさん
2022/05/20(金) 00:27:37.05ID:xM0P3yOr 拗らせくんもいるのか
175デフォルトの名無しさん
2022/05/20(金) 00:53:44.89ID:syYn06qN このスレを見る限りRustプログラマは低レベルの人間ばかり
まともに動きもしないものでああだこうだ言いあってるだけだ
まともに動きもしないものでああだこうだ言いあってるだけだ
176デフォルトの名無しさん
2022/05/20(金) 00:53:59.48ID:obugnqXb フィボナッチ数列議論スレでやれ
177デフォルトの名無しさん
2022/05/20(金) 00:54:42.82ID:syYn06qN オーバーフローのまともな対処すら知らない馬鹿ばかり
178デフォルトの名無しさん
2022/05/20(金) 01:04:06.18ID:syYn06qN 俺が小学生の頃はBASICで整数オーバーフロー考慮したプログラムは書いていた
多倍長整数演算も自分で考案して天文計算もやっていた
このスレの連中は小学生の頃の俺に負けるレベルの奴しかいない
Rustを書く人間はその程度のレベルばかり
多倍長整数演算も自分で考案して天文計算もやっていた
このスレの連中は小学生の頃の俺に負けるレベルの奴しかいない
Rustを書く人間はその程度のレベルばかり
179デフォルトの名無しさん
2022/05/20(金) 01:16:05.19ID:P7xg55cn エイリアン vs アバター
180デフォルトの名無しさん
2022/05/20(金) 02:33:24.77ID:g6eOZZWy 天文計算なら多倍長じゃなくて浮動小数みたいに指数部と仮数部だけ保持しておくほうがいいだろう
181デフォルトの名無しさん
2022/05/20(金) 07:35:06.49ID:SXN+DpBP >>177
>>146のオーバーフロー対策をしてみた
これでいい?
fn fibonacci_iter() -> impl Iterator<Item=usize> {
let mut op: Option<usize> = Some(0);
let mut oq: Option<usize> = Some(1);
std::iter::from_fn(move || {
op.take().map(|p| {
op = oq.take().map(|q| {
oq = q.checked_add(p);
q
});
p
})
})
}
fn main() {
for (n, f) in fibonacci_iter().enumerate() {
println!("f({n}) = {f}");
}
}
>>146のオーバーフロー対策をしてみた
これでいい?
fn fibonacci_iter() -> impl Iterator<Item=usize> {
let mut op: Option<usize> = Some(0);
let mut oq: Option<usize> = Some(1);
std::iter::from_fn(move || {
op.take().map(|p| {
op = oq.take().map(|q| {
oq = q.checked_add(p);
q
});
p
})
})
}
fn main() {
for (n, f) in fibonacci_iter().enumerate() {
println!("f({n}) = {f}");
}
}
182デフォルトの名無しさん
2022/05/20(金) 08:11:12.19ID:YZ72zuyX 必要ないOptionまで追加してtake.mapのネストは汚すぎる
事前に設計せずコンパイラ駆動だけで書くと汚いコードになりがち
事前に設計せずコンパイラ駆動だけで書くと汚いコードになりがち
183デフォルトの名無しさん
2022/05/20(金) 08:24:34.35ID:5N9lui0T184デフォルトの名無しさん
2022/05/20(金) 08:33:57.56ID:7pe7/3hl >>168
1レスで晒したこの4つの無知は外せないww
(1) ムーブでビットパターンのコピーは発生しない -> ムーブ無知
(2) ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない -> 値渡し無知
(3)さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる -> Copy無知
(4)Copyのコピーはディープであって高コスト -> ディープコピー無知
1レスで晒したこの4つの無知は外せないww
(1) ムーブでビットパターンのコピーは発生しない -> ムーブ無知
(2) ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない -> 値渡し無知
(3)さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる -> Copy無知
(4)Copyのコピーはディープであって高コスト -> ディープコピー無知
185デフォルトの名無しさん
2022/05/20(金) 08:44:11.52ID:SXN+DpBP186デフォルトの名無しさん
2022/05/20(金) 08:52:03.20ID:Te9amNUZ フィボナッチ数列を他の計算の入力として使わないのなら何番目まで必要なのかをusizeとかで受け取ってBigUintのイテレータ返すので十分かな
187デフォルトの名無しさん
2022/05/20(金) 08:54:16.47ID:Te9amNUZ188デフォルトの名無しさん
2022/05/20(金) 09:01:03.34ID:SXN+DpBP189デフォルトの名無しさん
2022/05/20(金) 09:03:09.77ID:SXN+DpBP >>182
mapのネストが苦手と言うならば
mapを使わないバージョンも用意したのでどうぞ
fn fibonacci_iter() -> impl Iterator<Item=usize> {
let mut op: Option<usize> = Some(0);
let mut oq: Option<usize> = Some(1);
std::iter::from_fn(move || {
let p = op.take()?;
op = (|| {
let q = oq.take()?;
oq = q.checked_add(p);
Some(q)
})();
Some(p)
})
}
mapのネストが苦手と言うならば
mapを使わないバージョンも用意したのでどうぞ
fn fibonacci_iter() -> impl Iterator<Item=usize> {
let mut op: Option<usize> = Some(0);
let mut oq: Option<usize> = Some(1);
std::iter::from_fn(move || {
let p = op.take()?;
op = (|| {
let q = oq.take()?;
oq = q.checked_add(p);
Some(q)
})();
Some(p)
})
}
190デフォルトの名無しさん
2022/05/20(金) 09:18:53.35ID:qCLhnuk6 firefoxってどのへんにrust使ってるんだっけ
191デフォルトの名無しさん
2022/05/20(金) 10:35:37.22ID:t0eTe6yv >>189
さらに汚くしてどうすんのw
さらに汚くしてどうすんのw
192デフォルトの名無しさん
2022/05/20(金) 10:55:09.60ID:SXN+DpBP193デフォルトの名無しさん
2022/05/20(金) 10:59:18.09ID:6DrTvbrK >>185
unfold使ってた時と同じでフラグという捉え方がコードが汚くなる原因
命名を疎かにせず変数や関数の型を考えよう
そうすればOptionが必要なものと不要なものくらいは区別できるはず
ヒント終わり
コンパイルができた動けばいいだけのコードからは早めに卒業しようね
unfold使ってた時と同じでフラグという捉え方がコードが汚くなる原因
命名を疎かにせず変数や関数の型を考えよう
そうすればOptionが必要なものと不要なものくらいは区別できるはず
ヒント終わり
コンパイルができた動けばいいだけのコードからは早めに卒業しようね
194デフォルトの名無しさん
2022/05/20(金) 11:03:32.49ID:WF81UNfB195デフォルトの名無しさん
2022/05/20(金) 11:08:36.62ID:5NF4cE9g196デフォルトの名無しさん
2022/05/20(金) 11:16:04.61ID:SXN+DpBP197デフォルトの名無しさん
2022/05/20(金) 11:26:17.74ID:SXN+DpBP198デフォルトの名無しさん
2022/05/20(金) 11:47:37.20ID:hTlaNj/P ベンチも取らずに効率とな?
199デフォルトの名無しさん
2022/05/20(金) 11:48:38.99ID:50J2u53j200デフォルトの名無しさん
2022/05/20(金) 12:16:58.58ID:lLMUMPSU201デフォルトの名無しさん
2022/05/20(金) 12:28:38.69ID:pMSjr2Vl 後出しでどんどん条件が変わっていくから話がまとまる訳がない
これ以上続けたいならソース貼るときは前提条件を共有した上でコンパクトに議論を終わらせてくれ
これ以上続けたいならソース貼るときは前提条件を共有した上でコンパクトに議論を終わらせてくれ
202デフォルトの名無しさん
2022/05/20(金) 19:05:29.84ID:eTvpznuT 複オジは断念したみたいだから
俺の考える汚くないコードを参考までに貼っとく
https://play.rust-lang.org/?edition=2021&gist=cb739f9fa655a73ced7e87e681237d9f
俺の考える汚くないコードを参考までに貼っとく
https://play.rust-lang.org/?edition=2021&gist=cb739f9fa655a73ced7e87e681237d9f
203デフォルトの名無しさん
2022/05/20(金) 19:24:47.86ID:P7xg55cn まずイテレータやめろや
204デフォルトの名無しさん
2022/05/20(金) 19:37:01.42ID:0DaneQt4__ __ ___ _____ _____ ___ ___ ___
| | / / | // | /__ __/ [][] _| |_| |__ _| |_
| |. / / / / / / ̄ ̄|. l / / | _ | |_ レ'~ ̄|
| | / / / / / /. / / | |___  ̄| | / / / /| |
| | / / / / /  ̄ ̄ / \__| | |  ̄ /_ / | |_
| |. / / / / / / ̄ ̄ ̄ |_| |__| \/
| |/ / / /. / /
|. / / / / /
| /. / | ./ /
 ̄ ̄ ̄  ̄ ̄ ̄.  ̄ ̄
205デフォルトの名無しさん
2022/05/20(金) 21:06:57.55ID:/0md/MJf tauriどうよ
206デフォルトの名無しさん
2022/05/20(金) 21:13:38.21ID:zMcvGPNW >>202
successorsバージョンはシンプルでいいね
successorsバージョンはシンプルでいいね
207デフォルトの名無しさん
2022/05/20(金) 21:27:07.51ID:P7xg55cn >>190
https://wiki.mozilla.org/Oxidation#Shipped
話題になったServo関連はもちろんとして、他は文字エンコーディングとか言語関連での採用が多いみたいね
https://4e6.github.io/firefox-lang-stats/
行数ではGecko全体の10%程度
https://wiki.mozilla.org/Oxidation#Shipped
話題になったServo関連はもちろんとして、他は文字エンコーディングとか言語関連での採用が多いみたいね
https://4e6.github.io/firefox-lang-stats/
行数ではGecko全体の10%程度
208デフォルトの名無しさん
2022/05/20(金) 21:57:08.66ID:j6iPiVjl RustとC++を学ぼうと思ってるプログラミング初心者です。
両方ともそのうち学ぶとして、どっちを先にした方がいい感じですか?
両方ともそのうち学ぶとして、どっちを先にした方がいい感じですか?
209デフォルトの名無しさん
2022/05/20(金) 21:59:12.98ID:j6iPiVjl あ、スレチだったかも...すみません
210デフォルトの名無しさん
2022/05/20(金) 22:06:04.12ID:j6iPiVjl 連投すみません...
C++ vs Rustのスレ終わってたから一応どっちにすべきかここで聞きたい
ちなみに自分の中では
・C++のほうがほんの少しだけ速い
・Rustのほうが書くのとかメモリとか楽
・C++のほうが実行環境とか充実してる
みたいな認識になってます。よろしくお願いします
C++ vs Rustのスレ終わってたから一応どっちにすべきかここで聞きたい
ちなみに自分の中では
・C++のほうがほんの少しだけ速い
・Rustのほうが書くのとかメモリとか楽
・C++のほうが実行環境とか充実してる
みたいな認識になってます。よろしくお願いします
211デフォルトの名無しさん
2022/05/20(金) 23:40:49.05ID:1Ryh5lzf212デフォルトの名無しさん
2022/05/21(土) 00:10:36.10ID:gcU5DXZF >>210
どういう領域のプログラムを作りたいかでどっちが適してるか変わるからもうちょっと学ぶ背景とか教えて
どういう領域のプログラムを作りたいかでどっちが適してるか変わるからもうちょっと学ぶ背景とか教えて
213デフォルトの名無しさん
2022/05/21(土) 01:38:57.59ID:qnjM1Lxc >>210
仕事で使うほう
仕事で使うほう
214デフォルトの名無しさん
2022/05/21(土) 01:45:27.47ID:7bviEaCH なんのために学ぶのかにもよるけど、なんにせよC言語とJavaScriptはエンジニアなら全員勉強すべき
急いでないなら、そのあとでC++とRustを選んでもいい
急いでないなら、そのあとでC++とRustを選んでもいい
215デフォルトの名無しさん
2022/05/21(土) 01:46:40.74ID:t6WWJYF7 まぁC言語だよな
216デフォルトの名無しさん
2022/05/21(土) 01:58:05.82ID:y9SWDgH5 せっかくRustのスレに来たんだしRustをやりなよ
C++をかじるのはいいけど仕事で使うわけでないなら
じゃじゃ馬を飼い馴らすバッドノウハウを今更学ぶ必要はないよ
C++をかじるのはいいけど仕事で使うわけでないなら
じゃじゃ馬を飼い馴らすバッドノウハウを今更学ぶ必要はないよ
217デフォルトの名無しさん
2022/05/21(土) 07:32:51.54ID:yS5lPrM7 回答ありがとうございます…
とりあえずRustにしておこうと思います
とりあえずRustにしておこうと思います
218デフォルトの名無しさん
2022/05/21(土) 09:16:08.98ID:iurUdiXY219デフォルトの名無しさん
2022/05/21(土) 09:22:23.20ID:iurUdiXY 個人的にRust以外にやったほうがいいと思う言語
C C++(深入りしない) java
多分必用になる(と思われる)言語
javascript python
C C++(深入りしない) java
多分必用になる(と思われる)言語
javascript python
220デフォルトの名無しさん
2022/05/21(土) 09:40:03.63ID:wAUuWoIP Cをざっと学んでからRustかな
C++は(深入りしない)が重要なんだけど、初心者が自分で判断するのは厳しい
既存の資料もC++98から20まで玉石混交という感じだし
C++は(深入りしない)が重要なんだけど、初心者が自分で判断するのは厳しい
既存の資料もC++98から20まで玉石混交という感じだし
221デフォルトの名無しさん
2022/05/21(土) 09:44:15.57ID:iurUdiXY 自分はOOPは学んだほうがいいと思う派なのでRustだけでは不十分だと感じる
絶対業務で必要になるし
C++ java C# 学んだほうがいいと思う
絶対業務で必要になるし
C++ java C# 学んだほうがいいと思う
222デフォルトの名無しさん
2022/05/21(土) 10:11:16.37ID:gcU5DXZF いろんなパラダイムの言語を触るのが良いよ
223デフォルトの名無しさん
2022/05/21(土) 10:19:06.60ID:5oK/i29u Rustを学ぶならばほとんどの分野でC++とJavaは不要
C言語は実用とは別に最初に基礎教養として学んでおいたほうがRustの理解が早い
C→Rustも可能だが、その前にスクリプト言語などでオブジェクト指向(のうちインスタンスとメソッド呼び出し等)と、非同期(async/await)をそれぞれ学んでおくと楽だと思う
その場合のスクリプト言語はJavaScript(ただしHTML/CSSに踏み込まなくて済むNode.js)がオススメかな
C言語は実用とは別に最初に基礎教養として学んでおいたほうがRustの理解が早い
C→Rustも可能だが、その前にスクリプト言語などでオブジェクト指向(のうちインスタンスとメソッド呼び出し等)と、非同期(async/await)をそれぞれ学んでおくと楽だと思う
その場合のスクリプト言語はJavaScript(ただしHTML/CSSに踏み込まなくて済むNode.js)がオススメかな
224はちみつ餃子 ◆8X2XSCHEME
2022/05/21(土) 10:46:13.19ID:JD6rd3hb 単に習得するためなら Rust を学ぶために他の言語を先に知っておく必要はないが、
C++ を先に使っていると Rust の「ありがたみ」に納得しやすいという意見はあるみたいだね。
まあ C が基礎教養であるというのは私も同意。
C++ を先に使っていると Rust の「ありがたみ」に納得しやすいという意見はあるみたいだね。
まあ C が基礎教養であるというのは私も同意。
225デフォルトの名無しさん
2022/05/21(土) 10:50:44.47ID:iurUdiXY Rustだけを学ぼうとしてもその環境が整ってないんですよ
さっきも書いたけど入門書に演算子の優先順位とかそのレベルの話がどこにも書かれてない
他の言語に乗っかって入門するしかない
さっきも書いたけど入門書に演算子の優先順位とかそのレベルの話がどこにも書かれてない
他の言語に乗っかって入門するしかない
226デフォルトの名無しさん
2022/05/21(土) 10:59:08.26ID:5oK/i29u227デフォルトの名無しさん
2022/05/21(土) 11:34:26.44ID:jUaeJjgy228デフォルトの名無しさん
2022/05/21(土) 11:47:35.41ID:vC8/2hE9 ぼくはガベージコレクションが嫌いです
229デフォルトの名無しさん
2022/05/21(土) 11:50:19.62ID:KkLFGMWv オライリー本もヒープとかスタックとか出てくるあたり、CやC++で動的メモリ確保の面倒くささを知ってる人向けだと思う
230デフォルトの名無しさん
2022/05/21(土) 11:50:43.88ID:uR6sIAw1 メモリ管理まわりの勉強はcで必須
231デフォルトの名無しさん
2022/05/21(土) 11:56:37.53ID:5oK/i29u 逆に考えよう
C→Rustと進むだけで十分であり、何か困ることある?
困ることないよな
C→Rustと進むだけで十分であり、何か困ることある?
困ることないよな
232デフォルトの名無しさん
2022/05/21(土) 12:04:35.32ID:CYzzzsUy ゴミ集めてどうするんだっていう。
233デフォルトの名無しさん
2022/05/21(土) 12:06:48.99ID:gyqhSlT2 十分かどうかはさておき
そもそもCをすべきかどうかというと微妙かもしれない
Cしかやってなさそうな人特有の
・変数がたくさんとっちらかった
・変数名が暗号めいてて
・ifやforが多重になってて
・グローバル変数を平気で使っちゃってる
コードみたことあるでしょ
それはそうするしかやり方を知らないから
一方、抽象度の高い言語からやった人は先にそっちに慣れるんで
List(8, 9, 3, 1).sorted.reverse.foreach(print)
こういうふうにスッキリ書けるのを目指してくれる
そもそもCをすべきかどうかというと微妙かもしれない
Cしかやってなさそうな人特有の
・変数がたくさんとっちらかった
・変数名が暗号めいてて
・ifやforが多重になってて
・グローバル変数を平気で使っちゃってる
コードみたことあるでしょ
それはそうするしかやり方を知らないから
一方、抽象度の高い言語からやった人は先にそっちに慣れるんで
List(8, 9, 3, 1).sorted.reverse.foreach(print)
こういうふうにスッキリ書けるのを目指してくれる
234デフォルトの名無しさん
2022/05/21(土) 12:09:45.76ID:0tb1eDc3 オブジェクト指向がいちばん大事
235デフォルトの名無しさん
2022/05/21(土) 12:10:08.62ID:Uoz2jgaJ 格下相手の話だけイキイキするな
236デフォルトの名無しさん
2022/05/21(土) 12:12:07.01ID:5oK/i29u237デフォルトの名無しさん
2022/05/21(土) 12:39:26.68ID:5HpZ3As+ ありがたみなんて知る必要ないでしょ
典型的な老害だな
典型的な老害だな
238デフォルトの名無しさん
2022/05/21(土) 12:39:58.62ID:0jWT+RR4 >>221
C++ と java はやったけど C# 必要ですか?
C++ と java はやったけど C# 必要ですか?
239デフォルトの名無しさん
2022/05/21(土) 13:06:24.69ID:dZzrxVLl Rustは、プログラミング経験者向けの情報が多い気がするから、PythonとかJavascript辺りをサラッと試してからでも良い気はする。
コンパイルとはとか、型って何?とか。
コンパイルとはとか、型って何?とか。
240デフォルトの名無しさん
2022/05/21(土) 14:18:25.43ID:2XTF0B5o241デフォルトの名無しさん
2022/05/21(土) 14:45:48.56ID:is6KmnjI いつも同じパターン
質問や相談があると、答えたり情報を出したりせずに、それらをしている人たちをバカにする
コードが出ると、代案コードを出すわけでもなく、とにかく批判のみ行なう
質問や相談があると、答えたり情報を出したりせずに、それらをしている人たちをバカにする
コードが出ると、代案コードを出すわけでもなく、とにかく批判のみ行なう
242デフォルトの名無しさん
2022/05/21(土) 14:51:09.52ID:/NlDQvZW プログラミング初心者は言語知識よりも
プログラミングという行為がどういうものなのか
どういうことを考える必要があるかというメタ認知を得ることが最も重要
メタ認知を獲得するために最も効果・効率ともに高い方法は
考えて・書いて・動かして結果を確認するというフィードバックサイクルをとにかく繰り返し回すこと
初心者は上記のサイクルが回しやすい言語から始めると後々の成長が早い
C/C++/Rustはサイクルを回すために越えなければならないハードルが相対的に高いため
現代では初心者向け言語ではない
プログラミングという行為がどういうものなのか
どういうことを考える必要があるかというメタ認知を得ることが最も重要
メタ認知を獲得するために最も効果・効率ともに高い方法は
考えて・書いて・動かして結果を確認するというフィードバックサイクルをとにかく繰り返し回すこと
初心者は上記のサイクルが回しやすい言語から始めると後々の成長が早い
C/C++/Rustはサイクルを回すために越えなければならないハードルが相対的に高いため
現代では初心者向け言語ではない
243デフォルトの名無しさん
2022/05/21(土) 14:57:49.13ID:7TYnpeBW244デフォルトの名無しさん
2022/05/21(土) 15:08:42.12ID:d40Kl4Hf 意訳:
ぼくちゃんがかいたさいきょうのコードをひはんしないでくだしゃい
ぼくのかんがえたやつがさいきょうなんでしゅから
ぼくちゃんがかいたさいきょうのコードをひはんしないでくだしゃい
ぼくのかんがえたやつがさいきょうなんでしゅから
245デフォルトの名無しさん
2022/05/21(土) 15:15:12.95ID:terB7Bhw なでしこ(プログラミング言語)も使ってあげて、、
246デフォルトの名無しさん
2022/05/21(土) 15:15:33.24ID:lzMNCHOR お前ら>>205みたいなのにも反応してやれよ
247デフォルトの名無しさん
2022/05/21(土) 15:46:51.93ID:zcBlczkH >>246
前スレがいしゅつ
前スレがいしゅつ
248デフォルトの名無しさん
2022/05/21(土) 16:45:07.99ID:dBYh2+4n >>218
そのかかれてるC++入門本のタイトルあげてみろ
そのかかれてるC++入門本のタイトルあげてみろ
249デフォルトの名無しさん
2022/05/21(土) 16:48:39.25ID:dBYh2+4n250デフォルトの名無しさん
2022/05/21(土) 16:54:22.75ID:dBYh2+4n お前ら新しい言語勉強する時に本読まないの?
たいていの本には想定する読者ってのが最初のほうに書いているだろ。
現在出版されてるRustの本で他の言語全く使った事ない読者を想定してる本はあるのか?
たいていの本には想定する読者ってのが最初のほうに書いているだろ。
現在出版されてるRustの本で他の言語全く使った事ない読者を想定してる本はあるのか?
251デフォルトの名無しさん
2022/05/21(土) 17:14:51.81ID:is6KmnjI >>246
Tauriではなくweb-view crateがシンプルで良いと思う
Tauriではなくweb-view crateがシンプルで良いと思う
252デフォルトの名無しさん
2022/05/21(土) 17:17:44.98ID:is6KmnjI253デフォルトの名無しさん
2022/05/21(土) 17:21:24.15ID:7bviEaCH おれは基本は本を読む派だけど、読まない派のほうが多そう
254デフォルトの名無しさん
2022/05/21(土) 17:23:04.81ID:mDh+ij7H 昔は本買うか図書館行くかしかなかったもんね
二十年くらい前からこっちはもう本イランけど
ネットで見れるでしょ何もかも
二十年くらい前からこっちはもう本イランけど
ネットで見れるでしょ何もかも
255デフォルトの名無しさん
2022/05/21(土) 17:26:29.76ID:ImS18vsK 最近はもっぱら言語公式のチュートリアル。Rustだと「the book」
256はちみつ餃子 ◆8X2XSCHEME
2022/05/21(土) 17:33:54.80ID:JD6rd3hb257デフォルトの名無しさん
2022/05/21(土) 17:59:31.75ID:WnQbOX9f 確かにこのスレではよく見る
>>112,113
>>112,113
258デフォルトの名無しさん
2022/05/21(土) 18:16:32.63ID:5PeJx3n4 複オジは本を読まないのが原因とは違うと思うぞ
本を読んでも自分勝手な理屈を脳内補完してそれが正しいと思い込むタイプ
本を読んでも自分勝手な理屈を脳内補完してそれが正しいと思い込むタイプ
259デフォルトの名無しさん
2022/05/21(土) 18:31:09.43ID:Uoz2jgaJ260デフォルトの名無しさん
2022/05/21(土) 18:55:12.40ID:is6KmnjI >>259
web-view crateは非常にシンプルで
最初のwebviewビルダーと
JavaScript側からのRustの呼び出しと
Rust側でJavaScriptの実行の三つだけをサポート
学習コストもほぼゼロ
だから更新するようなことがほとんど無い
それでも例えばHTMLのonclick等でRust側を呼び出せてRust側で処理してJSで反映ということが出来てうれしい
web-view crateは非常にシンプルで
最初のwebviewビルダーと
JavaScript側からのRustの呼び出しと
Rust側でJavaScriptの実行の三つだけをサポート
学習コストもほぼゼロ
だから更新するようなことがほとんど無い
それでも例えばHTMLのonclick等でRust側を呼び出せてRust側で処理してJSで反映ということが出来てうれしい
262デフォルトの名無しさん
2022/05/21(土) 19:12:43.38ID:is6KmnjI263デフォルトの名無しさん
2022/05/21(土) 19:21:14.01ID:v1GULhnc たしかに
「そういった人」への批判は意味がなくて、荒れるだけで、誰の役にも立たない
「そういった人」への批判は意味がなくて、荒れるだけで、誰の役にも立たない
264デフォルトの名無しさん
2022/05/21(土) 19:27:36.73ID:tJscH9kk 「そういった」がかかるのは「人」ではなく「批判」じゃないのかな
265デフォルトの名無しさん
2022/05/21(土) 19:30:02.17ID:gcU5DXZF 元のレスをもじっただけで
唐突に殴りかかってくる人には何を言っても無駄だよと諭してるだけでは
唐突に殴りかかってくる人には何を言っても無駄だよと諭してるだけでは
266デフォルトの名無しさん
2022/05/21(土) 19:32:49.23ID:VA28KJC+ 多くの人は良い人たちだが
残念ながらこのスレにも他人を叩いたり言いがかりを付けたりするのが好きなアレな人が紛れ込んでいる
残念ながらこのスレにも他人を叩いたり言いがかりを付けたりするのが好きなアレな人が紛れ込んでいる
267デフォルトの名無しさん
2022/05/21(土) 19:43:36.19ID:7bviEaCH そういうのは反応を見て楽しもうとしてるだけだろうから、無視するしかない
268デフォルトの名無しさん
2022/05/21(土) 21:18:46.48ID:3ug0n3Zl >>260
tauriも同じようなもんじゃないの?
tauriも同じようなもんじゃないの?
269デフォルトの名無しさん
2022/05/21(土) 23:40:28.85ID:GKlgLxBR 今流行のアプリをweb-viewのテストで作ってみたがこんな感じなのか
const HTML: &str = r#"
なぜかHTML部分はセキュリティうんぬん言われて貼れないので略
"#;
fn main() {
struct Fibonacci { index: usize, cur: usize, pre: usize }
let fibonacci = std::sync::Mutex::new(Fibonacci { index: 0, cur: 0, pre: 1 });
let webview = web_view::builder()
.content(web_view::Content::Html(HTML))
.invoke_handler(|webview, arg| {
match arg {
"next" => {
let mut f = fibonacci.lock().unwrap();
(f.index, f.cur, f.pre) = (f.index + 1, f.cur + f.pre, f.cur);
webview.eval(&format!("show({}, {})", f.index, f.cur))?;
},
"exit" => webview.exit(),
_ => unimplemented!(),
};
Ok(())
})
.user_data(()).build().unwrap().run().unwrap();
}
const HTML: &str = r#"
なぜかHTML部分はセキュリティうんぬん言われて貼れないので略
"#;
fn main() {
struct Fibonacci { index: usize, cur: usize, pre: usize }
let fibonacci = std::sync::Mutex::new(Fibonacci { index: 0, cur: 0, pre: 1 });
let webview = web_view::builder()
.content(web_view::Content::Html(HTML))
.invoke_handler(|webview, arg| {
match arg {
"next" => {
let mut f = fibonacci.lock().unwrap();
(f.index, f.cur, f.pre) = (f.index + 1, f.cur + f.pre, f.cur);
webview.eval(&format!("show({}, {})", f.index, f.cur))?;
},
"exit" => webview.exit(),
_ => unimplemented!(),
};
Ok(())
})
.user_data(()).build().unwrap().run().unwrap();
}
270デフォルトの名無しさん
2022/05/22(日) 13:23:37.89ID:kzep88by MozilaはFirefoxを丸ごとRustに書き換える予定はあるん?
今はまだ一部だけだよねRustになってるの
今はまだ一部だけだよねRustになってるの
271デフォルトの名無しさん
2022/05/22(日) 14:00:05.26ID:IGyJdnKj >>270
そうなの?
そうなの?
272デフォルトの名無しさん
2022/05/22(日) 14:06:50.95ID:1cbV2u9G FirefoxはレンダリングエンジンをRustでゼロから作ってるんじゃないの?
273デフォルトの名無しさん
2022/05/22(日) 14:11:38.83ID:s/f+VQic274デフォルトの名無しさん
2022/05/22(日) 14:14:17.72ID:pc68DccV servoはまだ実験段階だったと思う
275デフォルトの名無しさん
2022/05/22(日) 14:54:56.44ID:kzep88by >>273
ありがとう~
ありがとう~
276デフォルトの名無しさん
2022/05/22(日) 15:29:45.38ID:srSb/t9O >>270
特にそういう予定はないと思う
servo自体も別に次世代Firefoxを目指してるとかではなく、Rustでwebブラウザを書く実験プロジェクトという感じ
その実験でうまく行ったコンポーネントを徐々にFirefoxに移植していっている
特にそういう予定はないと思う
servo自体も別に次世代Firefoxを目指してるとかではなく、Rustでwebブラウザを書く実験プロジェクトという感じ
その実験でうまく行ったコンポーネントを徐々にFirefoxに移植していっている
277デフォルトの名無しさん
2022/05/22(日) 15:57:34.13ID:pc68DccV アプローチとしては正しい姿なんだろうな
278デフォルトの名無しさん
2022/05/22(日) 17:29:35.11ID:1mUE50i3 暇を持て余した神々の遊び
servoと言うよりモンスターエンジンだね…
servoと言うよりモンスターエンジンだね…
279デフォルトの名無しさん
2022/05/22(日) 17:37:14.17ID:7nmc6Bff >>270
C++で書かれてる部分は置き換えられるかも知れないけどJSで書かれてる部分までは置き換えしないんでないかな
C++で書かれてる部分は置き換えられるかも知れないけどJSで書かれてる部分までは置き換えしないんでないかな
280デフォルトの名無しさん
2022/05/22(日) 19:19:39.37ID:9fWZc0TE JSとか言ってるのは君だけだと思うよ
281デフォルトの名無しさん
2022/05/22(日) 19:22:44.24ID:7nmc6Bff >>280
FirefoxではC++と同じくらいJS使われてるよ
https://www.openhub.net/p/firefox/analyses/latest/languages_summary
FirefoxではC++と同じくらいJS使われてるよ
https://www.openhub.net/p/firefox/analyses/latest/languages_summary
282デフォルトの名無しさん
2022/05/22(日) 19:25:56.61ID:nrxT1a+p JSの部分を置き換えるなんてはなから誰も思ってないってことだと思うが
283デフォルトの名無しさん
2022/05/22(日) 19:26:01.69ID:LKVhbTwj 意訳すると「JSで書かれてる部分まで置き換えるとか言ってるのは君だけだと思うよ」かな?
言ってないね
言ってないね
284デフォルトの名無しさん
2022/05/22(日) 19:29:03.65ID:7TIjBb30285デフォルトの名無しさん
2022/05/22(日) 19:33:12.87ID:LKVhbTwj286デフォルトの名無しさん
2022/05/22(日) 19:46:00.83ID:u+qheqhP287デフォルトの名無しさん
2022/05/22(日) 19:56:58.26ID:nleMAmaj >>270 が「Firefox を "丸ごと" 書き換える」と言っていたので全部はRustにならないよと伝えたんだけどなんかお気に召さなかった?
288デフォルトの名無しさん
2022/05/22(日) 20:16:58.99ID:KMOjS2oh289デフォルトの名無しさん
2022/05/22(日) 20:17:09.14ID:M3jNarf6 そうだね、そんなふうに言われたらシェルスクリプトやMakefileまでrustで置き換えるんじゃないかって思っちゃうよね。
馬鹿なん?
馬鹿なん?
290デフォルトの名無しさん
2022/05/22(日) 20:36:16.46ID:7nmc6Bff FirefoxはXULのイメージがあってJSも主要な構成要素だと思ってたから変なレスつけちゃったね
皆さんの機嫌害しちゃって申し訳ない
皆さんの機嫌害しちゃって申し訳ない
291デフォルトの名無しさん
2022/05/22(日) 20:54:23.92ID:KMOjS2oh292デフォルトの名無しさん
2022/05/22(日) 22:32:56.13ID:7nmc6Bff293デフォルトの名無しさん
2022/05/23(月) 01:12:40.07ID:436cwmll >>290
ほんと反省しろよ
ほんと反省しろよ
294デフォルトの名無しさん
2022/05/23(月) 02:27:31.54ID:n+tkR/ue 反省してま~す
295デフォルトの名無しさん
2022/05/23(月) 19:27:40.26ID:qJLEBqNZ >>189
おまえら全員そうだがフィボナッチ数列でusize固定はおかしいだろ
コード自体は問題ないが <T: Zero + One + CheckedAdd> を付けろ
あとは0と1をT::zero()とT::one()へ置き換えればi8型からBigUintまで何でも動作するようになる
https://play.rust-lang.org/?edition=2021&gist=929f3df48db39182558dfad6fe8d1cda
さらに今回はfrom_fn()利用をそのままsuccessors()利用へ変換できるので見やすくなる
fn fibonacci_iter<T: Zero + One + CheckedAdd>() -> impl Iterator<Item = T> {
let mut oq = Some(T::one());
iter::successors(Some(T::zero()), move |p| {
let q = oq.take()?;
oq = q.checked_add(p);
Some(q)
})
}
ちなみにCloneを要求しないためBigIntなどでも無駄なコスト増とならない
>>202
そのコードは暗黙のコピーが発生している
from_fn()使用版のコードはcurrがキャプチャ変数なので「let n = curr?;」でコピー発生
successors()使用版のコードはクロージャ引数「|&curr: &usize|」の「&」でコピー発生
usizeならば問題はないがBigIntなどでそのコードは動かないので劣る
おまえら全員そうだがフィボナッチ数列でusize固定はおかしいだろ
コード自体は問題ないが <T: Zero + One + CheckedAdd> を付けろ
あとは0と1をT::zero()とT::one()へ置き換えればi8型からBigUintまで何でも動作するようになる
https://play.rust-lang.org/?edition=2021&gist=929f3df48db39182558dfad6fe8d1cda
さらに今回はfrom_fn()利用をそのままsuccessors()利用へ変換できるので見やすくなる
fn fibonacci_iter<T: Zero + One + CheckedAdd>() -> impl Iterator<Item = T> {
let mut oq = Some(T::one());
iter::successors(Some(T::zero()), move |p| {
let q = oq.take()?;
oq = q.checked_add(p);
Some(q)
})
}
ちなみにCloneを要求しないためBigIntなどでも無駄なコスト増とならない
>>202
そのコードは暗黙のコピーが発生している
from_fn()使用版のコードはcurrがキャプチャ変数なので「let n = curr?;」でコピー発生
successors()使用版のコードはクロージャ引数「|&curr: &usize|」の「&」でコピー発生
usizeならば問題はないがBigIntなどでそのコードは動かないので劣る
296デフォルトの名無しさん
2022/05/23(月) 19:52:54.51ID:aUQlcplw 暗黙のコピー発生って気にするべき?
!Copyならコンパイルエラーになるしこれまで気にしたことなかった
あとcurrはmoveでキャプチャされるからcurr?で発生するのはmove(とそれに伴うmemcpy)だけど、moveのコストも気にすべき?
!Copyならコンパイルエラーになるしこれまで気にしたことなかった
あとcurrはmoveでキャプチャされるからcurr?で発生するのはmove(とそれに伴うmemcpy)だけど、moveのコストも気にすべき?
297デフォルトの名無しさん
2022/05/23(月) 20:00:24.28ID:pMTVA02Y >>296
それは逆
そのキャプチャされた変数はクロージャが呼ばれるたびに何度も使われる
つまりムーブされてはいけない、つまりムーブ禁止となる
したがって n = curr? で currの中身は nへムーブされずコピーとなる
それは逆
そのキャプチャされた変数はクロージャが呼ばれるたびに何度も使われる
つまりムーブされてはいけない、つまりムーブ禁止となる
したがって n = curr? で currの中身は nへムーブされずコピーとなる
298デフォルトの名無しさん
2022/05/23(月) 20:11:34.97ID:aUQlcplw299デフォルトの名無しさん
2022/05/23(月) 20:12:20.25ID:PbQSFqOo300デフォルトの名無しさん
2022/05/23(月) 20:19:20.85ID:aUQlcplw301デフォルトの名無しさん
2022/05/23(月) 20:27:05.01ID:PbQSFqOo302デフォルトの名無しさん
2022/05/23(月) 20:43:27.72ID:4RywOifH >>295
自分のレスに他人のふりしてレスするキチガイ汚コーダーこと複オジさんちぃーすっ
自分のレスに他人のふりしてレスするキチガイ汚コーダーこと複オジさんちぃーすっ
303デフォルトの名無しさん
2022/05/23(月) 20:49:26.67ID:iRCkPDCQ304デフォルトの名無しさん
2022/05/23(月) 21:10:50.44ID:aUQlcplw305デフォルトの名無しさん
2022/05/23(月) 21:18:12.89ID:gtDJ5U8B https://www.reddit.com/r/rust/comments/3wubj0/comment/cxzlvt4/
num_traitsによるジェネリクスは絶対の正解ではないから適当なところで諦めようね
num_traitsによるジェネリクスは絶対の正解ではないから適当なところで諦めようね
306デフォルトの名無しさん
2022/05/23(月) 21:23:42.08ID:iRCkPDCQ307デフォルトの名無しさん
2022/05/23(月) 21:33:03.23ID:9psioJ1p >>296
コピーもmoveも同じでそれがボトルネックかどうかが重要
数値プリミティブの場合はコピーを他の方法に変えたところでボトルネックが解消されることはまずないから気にする必要はない
BigUint前提ならVecと同じでmoveやクローンやのオーバーヘッドはそれなりに気にした方がいい
逆に現実的にはオーバーフロー考慮する必要がなくなるからCheckedAddが余計なオーバーヘッドになる
特性の違う物をジェネリック等でまとめたほうがいい場面なのかそれぞれ別の実装を用意したほうがいい場面なのか判断できることが大事
コピーもmoveも同じでそれがボトルネックかどうかが重要
数値プリミティブの場合はコピーを他の方法に変えたところでボトルネックが解消されることはまずないから気にする必要はない
BigUint前提ならVecと同じでmoveやクローンやのオーバーヘッドはそれなりに気にした方がいい
逆に現実的にはオーバーフロー考慮する必要がなくなるからCheckedAddが余計なオーバーヘッドになる
特性の違う物をジェネリック等でまとめたほうがいい場面なのかそれぞれ別の実装を用意したほうがいい場面なのか判断できることが大事
308デフォルトの名無しさん
2022/05/23(月) 21:43:43.53ID:Ayvhc9bp >>307
それは間違ってるぜ
BigUintのchecked_add()は常にSomeを返すためにチェックとSomeは消えてオーバーヘッドとならない
さらにRustのジェネリックは各型にmonomorphizationされるためジェネリックで書いてもプリミティブ型やBigUint型のコードはそれぞれに最適化される
それは間違ってるぜ
BigUintのchecked_add()は常にSomeを返すためにチェックとSomeは消えてオーバーヘッドとならない
さらにRustのジェネリックは各型にmonomorphizationされるためジェネリックで書いてもプリミティブ型やBigUint型のコードはそれぞれに最適化される
309デフォルトの名無しさん
2022/05/23(月) 22:04:52.01ID:gtDJ5U8B ヒント:
Ratio<T> where T: Integer + Clone + CheckedAdd + CheckedMulは>>295の条件を満たす
Ratio<T> where T: Integer + Clone + CheckedAdd + CheckedMulは>>295の条件を満たす
310デフォルトの名無しさん
2022/05/23(月) 22:25:54.83ID:xQdLaNrd fibonacci_iter::<Ratio<u8>>()すると
ちゃんと最後233で止まるのね
ジェネリック凄い
ちゃんと最後233で止まるのね
ジェネリック凄い
311デフォルトの名無しさん
2022/05/23(月) 22:34:47.31ID:gtDJ5U8B ククク……RatioのCheckedAddの実装を見ても果たして同じことが言えるかな
312デフォルトの名無しさん
2022/05/23(月) 22:37:22.49ID:HY9DKb05 汚染が始まった!
313デフォルトの名無しさん
2022/05/23(月) 22:55:06.68ID:GQTw0VDg >>311
たしかにRatioの実装が悪いな
まずAddと同様に
if self.denom == rhs.denom {の分岐をし
そして1の場合は
self.numberとrhs.numberでchecke_addするくらいはしないとな
たしかにRatioの実装が悪いな
まずAddと同様に
if self.denom == rhs.denom {の分岐をし
そして1の場合は
self.numberとrhs.numberでchecke_addするくらいはしないとな
314デフォルトの名無しさん
2022/05/23(月) 23:14:26.50ID:bbzZFnmN ジェネリックに書いてもRatio専用コードを書いても
どちらもRatioの実装を使わざるをえないのだから同じ結果となる
そしてRatio専用コードを書こうとしても外部からは工夫のしようがないため
ジェネリックからコンパイル時にモノモーフィゼーションされるコードと全く同じになる
どちらもRatioの実装を使わざるをえないのだから同じ結果となる
そしてRatio専用コードを書こうとしても外部からは工夫のしようがないため
ジェネリックからコンパイル時にモノモーフィゼーションされるコードと全く同じになる
315デフォルトの名無しさん
2022/05/23(月) 23:46:45.42ID:lhQpV8J5 このスレごちゃごちゃした書き込み多すぎ
316デフォルトの名無しさん
2022/05/24(火) 00:53:51.91ID:PPYrRT7r 各型を個別に確認しないと良いか悪いか判断できないならジェネリックにしちゃだめでしょ
317デフォルトの名無しさん
2022/05/24(火) 01:46:13.03ID:Y7WsYtba318デフォルトの名無しさん
2022/05/24(火) 07:59:54.71ID:fUfb5k5z >>307
>特性の違う物をジェネリック等でまとめたほうがいい場面なのかそれぞれ別の実装を用意したほうがいい場面なのか判断できることが大事
禿同だわ
コードパズルやってるやつにいつも感じる違和感の原因はこれだな
こういう能力って何て言うんだろ?
>特性の違う物をジェネリック等でまとめたほうがいい場面なのかそれぞれ別の実装を用意したほうがいい場面なのか判断できることが大事
禿同だわ
コードパズルやってるやつにいつも感じる違和感の原因はこれだな
こういう能力って何て言うんだろ?
319デフォルトの名無しさん
2022/05/24(火) 08:06:11.71ID:eTAydD0N320デフォルトの名無しさん
2022/05/24(火) 08:45:23.72ID:ie6AbIfB 男の人って気持ち悪い…
どうして少女をそんなに汚したがるの?
お母さんに悪いとわおもわないの?
どうして少女をそんなに汚したがるの?
お母さんに悪いとわおもわないの?
321デフォルトの名無しさん
2022/05/24(火) 08:52:13.15ID:anVhILE8322デフォルトの名無しさん
2022/05/24(火) 11:37:27.58ID:0VHIsXBI KISS原則だろ
323デフォルトの名無しさん
2022/05/24(火) 19:12:35.28ID:VR6742Ui324デフォルトの名無しさん
2022/05/24(火) 22:16:43.51ID:oAG0OLUi prev, currの状態管理だとcurrの値をprevに代入するのと戻り値として使うのと2箇所に必要になるからね
curr, nextで管理すればいい
curr, nextで管理すればいい
325デフォルトの名無しさん
2022/05/24(火) 22:24:27.19ID:LZzc/1GO326デフォルトの名無しさん
2022/05/24(火) 23:52:58.32ID:m/W944BH フィボナッチ数のような単純な問題でもプログラミングセンスに差が出るものなんだな
327デフォルトの名無しさん
2022/05/25(水) 09:34:10.65ID:veJPShsI328デフォルトの名無しさん
2022/05/25(水) 13:26:51.10ID:4b57184O Webシステム中心ならRustとRails どっちを中心に勉強すればいい?
どうせ仕事で使うのPHPとjsだけど
どうせ仕事で使うのPHPとjsだけど
329デフォルトの名無しさん
2022/05/25(水) 13:32:36.84ID:pqSOGvoX RustでETみたいなのって書けるん?
てかテンプレートはC++みたいに汎用性高いの?
それともC#みたいに適用範囲絞ってる?
てかテンプレートはC++みたいに汎用性高いの?
それともC#みたいに適用範囲絞ってる?
330はちみつ餃子 ◆8X2XSCHEME
2022/05/25(水) 13:40:48.57ID:9QZiEKx+ >>329
C++ で言うところのテンプレートは Rust には無いよ。 ジェネリクスは ML 風の型システムでやってる。
マクロは Lisp 風と言えると思うけどトークンが型付けされてるから Template Haskell とかのほうが近いかもしれない。
C++ で言うところのテンプレートは Rust には無いよ。 ジェネリクスは ML 風の型システムでやってる。
マクロは Lisp 風と言えると思うけどトークンが型付けされてるから Template Haskell とかのほうが近いかもしれない。
331デフォルトの名無しさん
2022/05/25(水) 20:05:45.57ID:G6RbJxKu なんだじゃあRustだめじゃん。
332デフォルトの名無しさん
2022/05/25(水) 20:20:43.79ID:2d7iZvnp >>331
むしろC++のテンプレートよりもRustのの方がほとんどの利用方法で便利かつプログラミングしやすく快適になった
むしろC++のテンプレートよりもRustのの方がほとんどの利用方法で便利かつプログラミングしやすく快適になった
333デフォルトの名無しさん
2022/05/25(水) 20:47:56.26ID:L8VrP5Wq >>331
そうだよ。ダメだから君もRustは使わないほうがいい
そうだよ。ダメだから君もRustは使わないほうがいい
334デフォルトの名無しさん
2022/05/25(水) 21:47:24.60ID:pqSOGvoX 行列クラスを作って
X += A*(B+C)/D
みたいな演算子の多重定義して、すっきり1式で書くことできますか?
X += A*(B+C)/D
みたいな演算子の多重定義して、すっきり1式で書くことできますか?
335デフォルトの名無しさん
2022/05/25(水) 22:02:04.30ID:pqSOGvoX Matrix<Complex> X(2,2 );
Matrix<double> Y(2,2 );
Y << 1., 2.,
3., 5.;
X = (double)(Y^3);
みたいなことrustで書きたい
Matrix<double> Y(2,2 );
Y << 1., 2.,
3., 5.;
X = (double)(Y^3);
みたいなことrustで書きたい
336デフォルトの名無しさん
2022/05/25(水) 22:12:09.13ID:L8VrP5Wq >>335
もちろんできる
こういうのがほしいんでしょ
https://docs.rs/simple-matrix/latest/simple_matrix/
初心者の題材としては適切そうだから、自分で実装してみてはいかがか
もちろんできる
こういうのがほしいんでしょ
https://docs.rs/simple-matrix/latest/simple_matrix/
初心者の題材としては適切そうだから、自分で実装してみてはいかがか
337デフォルトの名無しさん
2022/05/25(水) 22:17:54.75ID:pqSOGvoX スマソ
X=(Complex)Y^3
だた
X=(Complex)Y^3
だた
338デフォルトの名無しさん
2022/05/25(水) 22:26:34.33ID:pqSOGvoX339デフォルトの名無しさん
2022/05/25(水) 22:36:32.50ID:9QZiEKx+ とりあえず一度は the book を読め。
根本的な言語デザインが違うからそこだけ抜き出して詳しい説明なんてできないよ
根本的な言語デザインが違うからそこだけ抜き出して詳しい説明なんてできないよ
340デフォルトの名無しさん
2022/05/26(木) 00:08:48.87ID:U/g7+l0+ rustてこんなコードも許すんだな
fn main() {
println!("Hello, world!");
main();
}
https://play.rust-lang.org/
でやってみるとスタック溢れて死んだけど一応実行できるのねww
fn main() {
println!("Hello, world!");
main();
}
https://play.rust-lang.org/
でやってみるとスタック溢れて死んだけど一応実行できるのねww
341デフォルトの名無しさん
2022/05/26(木) 07:58:26.46ID:a0cw3gsx そんなことで草生やすのはおそらくキミひとり
他の人らは真顔でキミの発言を見守ってるよ
他の人らは真顔でキミの発言を見守ってるよ
342デフォルトの名無しさん
2022/05/26(木) 08:48:32.43ID:8L/oafM1 >>341
いや、そんなふうに思ってるのはキミひとりだから
いや、そんなふうに思ってるのはキミひとりだから
343デフォルトの名無しさん
2022/05/26(木) 09:21:13.14ID:U/g7+l0+ エントリポイントであるmainの停止条件のない再帰が
何のerrorもwarningもなくコンパイルできてしまい、
当然スタックオバフロで停止してしまうなんて間抜けすぎると思ったんだけどね
これが先進言語なのか?ww
何のerrorもwarningもなくコンパイルできてしまい、
当然スタックオバフロで停止してしまうなんて間抜けすぎると思ったんだけどね
これが先進言語なのか?ww
344デフォルトの名無しさん
2022/05/26(木) 09:45:45.88ID:wRvm8KMl >>343
最適化したら、ループに変換されて死ななくなるとか?
最適化したら、ループに変換されて死ななくなるとか?
345デフォルトの名無しさん
2022/05/26(木) 10:23:40.75ID:m4beE+3q Go でやってみたら gopls(Language Server)で infinite recursive call って warning が出た
実行できるけど、
runtime: goroutine stack exceeds 1000000000-byte limit
と表示されて強制終了
実行できるけど、
runtime: goroutine stack exceeds 1000000000-byte limit
と表示されて強制終了
346デフォルトの名無しさん
2022/05/26(木) 10:39:49.31ID:EVCXwRA4 >>343
警告出るよ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=2c7c027a6cf5a2e1c065faaad3a63680
warning: function cannot return without recursing
警告出るよ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=2c7c027a6cf5a2e1c065faaad3a63680
warning: function cannot return without recursing
347デフォルトの名無しさん
2022/05/26(木) 18:28:21.56ID:MJ/jCOeZ じゃあGoのほうが良いんじゃん。
348デフォルトの名無しさん
2022/05/26(木) 19:07:49.07ID:wwtlTazs そこに気づくとはやはり天才か
349デフォルトの名無しさん
2022/05/26(木) 19:23:40.54ID:0K7pUhl0350デフォルトの名無しさん
2022/05/26(木) 21:03:33.74ID:TOBg/lde 草
351デフォルトの名無しさん
2022/05/26(木) 21:33:44.65ID:F8bskD+f イキッてスタックを増し続ける再帰を書くのは愚か、まともなら限界値でブレイクする、天才と努力家は末尾再帰でスタックを増やさない
352デフォルトの名無しさん
2022/05/26(木) 21:43:27.13ID:BmMYHIjm リリースビルドだと最適化されてスタックオーバーフローにならない
loopと同じになる
fn main() {
loop{ println!("Hello, world!"); }
}
loopと同じになる
fn main() {
loop{ println!("Hello, world!"); }
}
353デフォルトの名無しさん
2022/05/26(木) 21:45:32.94ID:p077Q+tt あれ?
前にRustは末尾呼び出し最適化はしないって聞いたけど
前にRustは末尾呼び出し最適化はしないって聞いたけど
354デフォルトの名無しさん
2022/05/26(木) 21:53:44.25ID:BmMYHIjm355デフォルトの名無しさん
2022/05/26(木) 22:19:48.49ID:LHrMwKV/ わかりやすい例
確実にスタックが溢れるusize::MAX回の再帰
fn main() {
assert_eq!(usize::MAX, count(usize::MAX));
}
fn count(n: usize) -> usize {
// println!("{:p}", &n);
match n {
0 => 0,
n => 1 + count(n - 1),
}
}
①デバッグモードだとスタックオーバフロー
②リリースモードだと溢れずアサートも通る
③リリースモードでもコメントになっているprintlnの//を外すと最適化されなくなるようでスタックオーバフロー
確実にスタックが溢れるusize::MAX回の再帰
fn main() {
assert_eq!(usize::MAX, count(usize::MAX));
}
fn count(n: usize) -> usize {
// println!("{:p}", &n);
match n {
0 => 0,
n => 1 + count(n - 1),
}
}
①デバッグモードだとスタックオーバフロー
②リリースモードだと溢れずアサートも通る
③リリースモードでもコメントになっているprintlnの//を外すと最適化されなくなるようでスタックオーバフロー
356デフォルトの名無しさん
2022/05/26(木) 22:41:19.49ID:chFOJ7KS357デフォルトの名無しさん
2022/05/26(木) 23:01:45.92ID:LHrMwKV/358デフォルトの名無しさん
2022/05/26(木) 23:18:51.46ID:LHrMwKV/ ごめん
n表示だけでもあかんわ
ループ化されず溢れる
調査のために、printよりもっと軽くて最適化で消えない操作、何かないかな
n表示だけでもあかんわ
ループ化されず溢れる
調査のために、printよりもっと軽くて最適化で消えない操作、何かないかな
359デフォルトの名無しさん
2022/05/27(金) 10:47:17.91ID:KGTH7nqA360デフォルトの名無しさん
2022/05/27(金) 23:42:23.72ID:QNNDwom0 traitでasync fnなメソッドを宣言してはいけない理由を教えてください
361デフォルトの名無しさん
2022/05/28(土) 00:48:37.27ID:1czNjiXi362デフォルトの名無しさん
2022/05/28(土) 18:21:29.07ID:DPDd3/od async fnはsyntax sugarだから例えば以下は同じ
async fn delayed_add(a: i32, b: i32) -> i32 {
sleep(Duration::from_secs(5)).await;
a + b
}
fn delayed_add(a: i32, b: i32) -> impl Future<Output = i32> {
async move {
sleep(Duration::from_secs(5)).await;
a + b
}
}
つまり現在のRustコンパイラではまだimpl Traitを使える場所が限定されているというもっと大きな問題のために今は使えない
GATsなど現在進行中の諸問題が解決すればいずれ使えるようになるはず
async fn delayed_add(a: i32, b: i32) -> i32 {
sleep(Duration::from_secs(5)).await;
a + b
}
fn delayed_add(a: i32, b: i32) -> impl Future<Output = i32> {
async move {
sleep(Duration::from_secs(5)).await;
a + b
}
}
つまり現在のRustコンパイラではまだimpl Traitを使える場所が限定されているというもっと大きな問題のために今は使えない
GATsなど現在進行中の諸問題が解決すればいずれ使えるようになるはず
363デフォルトの名無しさん
2022/05/28(土) 18:34:44.90ID:DPDd3/od 現状の対策方法としてはimpl FutureをdynにしてBox::pinして返す
trait Foo {
fn delayed_add(a: i32, b: i32) -> Pin<Box<dyn Future<Output = i32>>>;
}
impl Foo for () {
fn delayed_add(a: i32, b: i32) -> Pin<Box<dyn Future<Output = i32>>> {
Box::pin(async move {
sleep(Duration::from_secs(5)).await;
a + b
})
}
}
fn main() {
block_on(async {
let x = <() as Foo>::delayed_add(1, 2).await;
println!("x = {x}");
});
}
これでtraitにて非同期関数を使える
trait Foo {
fn delayed_add(a: i32, b: i32) -> Pin<Box<dyn Future<Output = i32>>>;
}
impl Foo for () {
fn delayed_add(a: i32, b: i32) -> Pin<Box<dyn Future<Output = i32>>> {
Box::pin(async move {
sleep(Duration::from_secs(5)).await;
a + b
})
}
}
fn main() {
block_on(async {
let x = <() as Foo>::delayed_add(1, 2).await;
println!("x = {x}");
});
}
これでtraitにて非同期関数を使える
364デフォルトの名無しさん
2022/05/28(土) 18:41:39.92ID:DPDd3/od それを手動で変換するのは面倒かつコードも見にくいので自動変換してくれる#[async_trait]を使えばasync fnと書ける
use async_trait::async_trait;
#[async_trait]
trait Foo {
async fn delayed_add(a: i32, b: i32) -> i32;
}
#[async_trait]
impl Foo for () {
async fn delayed_add(a: i32, b: i32) -> i32 {
sleep(Duration::from_secs(5)).await;
a + b
}
}
use async_trait::async_trait;
#[async_trait]
trait Foo {
async fn delayed_add(a: i32, b: i32) -> i32;
}
#[async_trait]
impl Foo for () {
async fn delayed_add(a: i32, b: i32) -> i32 {
sleep(Duration::from_secs(5)).await;
a + b
}
}
365デフォルトの名無しさん
2022/05/28(土) 19:10:23.06ID:Hw+E7BcY おじさん調査お疲れ様でした。
366デフォルトの名無しさん
2022/05/28(土) 19:23:54.07ID:6Sv+ENTH ・塩野義製薬が週休3日制導入へ 来年4月、副業も解禁
・塩野義製薬が「週休3日」選択可能に 給与は『週休2日の8割』副業や学び直しを支援
・【フォーカス】サタケ/週休3日制 通年導入めざし夏季のみ試行中 交代制で水曜を休日に
・旅館なのに週休3日!?陣屋・若女将の常識を覆した組織改革
・“時代錯誤”から残業ゼロ、週休3日に! 鳥取の不動産会社が
レガシー企業からDX先進企業になれたワケ
・ネクスウェイ、週休4日制・1日3時間勤務選択できる勤務体系を導入
・日本初「週休4日制度」で、優秀な人材を採用するしくみとは? ?
ナレッジソサエティ久田社長に聞いてみた
・塩野義製薬が「週休3日」選択可能に 給与は『週休2日の8割』副業や学び直しを支援
・【フォーカス】サタケ/週休3日制 通年導入めざし夏季のみ試行中 交代制で水曜を休日に
・旅館なのに週休3日!?陣屋・若女将の常識を覆した組織改革
・“時代錯誤”から残業ゼロ、週休3日に! 鳥取の不動産会社が
レガシー企業からDX先進企業になれたワケ
・ネクスウェイ、週休4日制・1日3時間勤務選択できる勤務体系を導入
・日本初「週休4日制度」で、優秀な人材を採用するしくみとは? ?
ナレッジソサエティ久田社長に聞いてみた
367デフォルトの名無しさん
2022/05/28(土) 20:19:11.57ID:NcTZ/5Yj もう借りまっか
368デフォルトの名無しさん
2022/05/28(土) 21:23:09.11ID:sd5VBl3q ジェネレーターはいつstableになりますか
369デフォルトの名無しさん
2022/05/28(土) 23:09:24.03ID:Gdd1cvMp stableを期待しているということは現状の仕様で納得なんだろうけど
resumeの仕方とか値の受け取り方とか軽快じゃなくね?
let mut generator = || {
yield 1;
yield 2;
yield 3;
return "end"
};
assert_eq!(GeneratorState::Yielded(1), Pin::new(&mut generator).resume(()));
assert_eq!(GeneratorState::Yielded(2), Pin::new(&mut generator).resume(()));
assert_eq!(GeneratorState::Yielded(3), Pin::new(&mut generator).resume(()));
assert_eq!(GeneratorState::Complete("end"), Pin::new(&mut generator).resume(()));
例えばresume構文を用意して記述を見やすくするとか
return値は廃止してOption<T>で返しreturn;でNoneにするとか
resumeの仕方とか値の受け取り方とか軽快じゃなくね?
let mut generator = || {
yield 1;
yield 2;
yield 3;
return "end"
};
assert_eq!(GeneratorState::Yielded(1), Pin::new(&mut generator).resume(()));
assert_eq!(GeneratorState::Yielded(2), Pin::new(&mut generator).resume(()));
assert_eq!(GeneratorState::Yielded(3), Pin::new(&mut generator).resume(()));
assert_eq!(GeneratorState::Complete("end"), Pin::new(&mut generator).resume(()));
例えばresume構文を用意して記述を見やすくするとか
return値は廃止してOption<T>で返しreturn;でNoneにするとか
370デフォルトの名無しさん
2022/05/28(土) 23:30:01.77ID:sd5VBl3q 個人的にはIteratorがyield使って実装できるようになれば満足なのでGeneratorそのものの型とかはそんなに気にしてなかった
371デフォルトの名無しさん
2022/05/28(土) 23:58:46.72ID:Gdd1cvMp372デフォルトの名無しさん
2022/05/29(日) 01:25:03.17ID:B9rZUQzM またイテレータの話してる……
373デフォルトの名無しさん
2022/05/29(日) 01:35:28.37ID:crc4m1b3 結局イテレータを作るには構造体か何かを用意してnext()実装するしかないぜ
それが面倒ならfrom_fnやunfoldなどの汎用イテレータ作成関数を使うしかないな
こんな感じか
fn iter_from_generator<G: Generator + Unpin>(mut generator: G) -> impl Iterator<Item = G::Yield> {
iter::from_fn(move || {
match Pin::new(&mut generator).resume(()) {
GeneratorState::Yielded(n) => Some(n),
_ => None,
}
})
}
fn main() {
let one_two_three = || {
yield 1;
yield 2;
yield 3;
};
for n in iter_from_generator(one_two_three) {
println!("{n}");
}
}
それが面倒ならfrom_fnやunfoldなどの汎用イテレータ作成関数を使うしかないな
こんな感じか
fn iter_from_generator<G: Generator + Unpin>(mut generator: G) -> impl Iterator<Item = G::Yield> {
iter::from_fn(move || {
match Pin::new(&mut generator).resume(()) {
GeneratorState::Yielded(n) => Some(n),
_ => None,
}
})
}
fn main() {
let one_two_three = || {
yield 1;
yield 2;
yield 3;
};
for n in iter_from_generator(one_two_three) {
println!("{n}");
}
}
374デフォルトの名無しさん
2022/05/29(日) 10:29:01.34ID:8RN2vwsK 複クンなんですぐここに貼り付けてしまうん?
それお母さんに見てもらうだけでは不満なん?
それお母さんに見てもらうだけでは不満なん?
375デフォルトの名無しさん
2022/05/29(日) 16:18:25.46ID:G8u1ZvmQ すまんが、関数とジェネリックについてわかんないんだけどさ
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=c548f2825b9f164eeabdd479c4950484
これってなんで動かないん?
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=c548f2825b9f164eeabdd479c4950484
これってなんで動かないん?
376デフォルトの名無しさん
2022/05/29(日) 16:49:19.09ID:B9rZUQzM377デフォルトの名無しさん
2022/05/29(日) 16:52:27.60ID:oSeq4vhZ378デフォルトの名無しさん
2022/05/29(日) 17:03:06.39ID:G8u1ZvmQ そういうことなのか!ありがとう!
だからサンプルコードみんなTを引数で受け取って戻値Tを返してるのばっかなのか
だからサンプルコードみんなTを引数で受け取って戻値Tを返してるのばっかなのか
379デフォルトの名無しさん
2022/05/29(日) 17:10:58.33ID:+aZOCBrD 「(i64 の) 1 から変換可能な型」という制約を付けるのであればたとえばこんな感じかな。
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=73e1d04ceeb2c0aff1dae461126dfb6e
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=73e1d04ceeb2c0aff1dae461126dfb6e
380デフォルトの名無しさん
2022/05/29(日) 18:07:23.25ID:RPMq4FMA >>378
Tを引数に取らずにTを返すことも一般的に可能
その場合もTに何らかのトレイト境界を付けてそのトレイトのメソッドを呼ぶ形で実現する
fn c<T>() -> T {
T { b: 1 }
}
↓修整
fn c<T: Trait1>() -> T {
T::method1()
}
自分を返すmethod1()を持つトレイトTrait1を宣言しておく
trait Trait1 {
fn method1() -> Self;
}
そして型Aに対してそのトレイトを実装すれば動く
impl Trait1 for A {
fn method1() -> Self {
Self { b: 1 }
}
}
もちろんmethod1を引数付きのメソッドにしてもOK
Tを引数に取らずにTを返すことも一般的に可能
その場合もTに何らかのトレイト境界を付けてそのトレイトのメソッドを呼ぶ形で実現する
fn c<T>() -> T {
T { b: 1 }
}
↓修整
fn c<T: Trait1>() -> T {
T::method1()
}
自分を返すmethod1()を持つトレイトTrait1を宣言しておく
trait Trait1 {
fn method1() -> Self;
}
そして型Aに対してそのトレイトを実装すれば動く
impl Trait1 for A {
fn method1() -> Self {
Self { b: 1 }
}
}
もちろんmethod1を引数付きのメソッドにしてもOK
381デフォルトの名無しさん
2022/05/29(日) 18:42:28.03ID:bkDUG0E+382デフォルトの名無しさん
2022/05/29(日) 19:12:40.72ID:X/raLWS5 >>381
Tに依存する箇所のコンパイルを保留してから、実際にT=Aとしてみてインスタンス生成するからね。
https://wandbox.org/permlink/zOH2lP3k2MEPYwsp
conceptで制限はかけられるけど本質は変わらん
https://wandbox.org/permlink/CdKBg61cUgFy2tBs
Tに依存する箇所のコンパイルを保留してから、実際にT=Aとしてみてインスタンス生成するからね。
https://wandbox.org/permlink/zOH2lP3k2MEPYwsp
conceptで制限はかけられるけど本質は変わらん
https://wandbox.org/permlink/CdKBg61cUgFy2tBs
383デフォルトの名無しさん
2022/05/29(日) 19:30:37.85ID:a9qKdJW4 なんだじゃあRustダメじゃん。
384デフォルトの名無しさん
2022/05/29(日) 20:03:03.02ID:vh1lNXiO そうだよ
ダメだからお前はRust使わないほうがいいよ
ダメだからお前はRust使わないほうがいいよ
385デフォルトの名無しさん
2022/05/29(日) 20:16:50.49ID:JtP99XwD386デフォルトの名無しさん
2022/05/29(日) 20:38:31.90ID:ckaCEYgU 未定義動作ではない。
387デフォルトの名無しさん
2022/05/29(日) 20:38:35.33ID:4wBUBbtY 単一の機関が作ってるなら未定義動作なんて生じないんだけどなw
388デフォルトの名無しさん
2022/05/29(日) 20:50:06.03ID:JtP99XwD C++では未初期化部分がある時
そこを利用した全体が未定義動作となる
そこを利用した全体が未定義動作となる
389デフォルトの名無しさん
2022/05/29(日) 21:08:46.86ID:9wc9mAAQ390デフォルトの名無しさん
2022/05/29(日) 21:14:08.45ID:oq8K5mm2 未初期化領域があっても未初期化領域を読み出さなければ未定義動作にはならない
なので後からでも読み出す前にデータを書き込めば合法
なので後からでも読み出す前にデータを書き込めば合法
391デフォルトの名無しさん
2022/05/29(日) 21:23:18.26ID:B9rZUQzM そもそも初期化されます
https://ja.cppreference.com/w/cpp/language/aggregate_initialization
struct A { int x; int y; int z; };
A a{.y = 2, .x = 1}; // エラー、指示子の順序が宣言の順序と一致しません。
A b{.x = 1, .z = 2}; // OK、 b.y は 0 に初期化されます。
https://ja.cppreference.com/w/cpp/language/aggregate_initialization
struct A { int x; int y; int z; };
A a{.y = 2, .x = 1}; // エラー、指示子の順序が宣言の順序と一致しません。
A b{.x = 1, .z = 2}; // OK、 b.y は 0 に初期化されます。
392デフォルトの名無しさん
2022/05/29(日) 23:05:13.03ID:a9qKdJW4 >>385
嘘つき。
嘘つき。
393デフォルトの名無しさん
2022/05/29(日) 23:38:42.10ID:SnN+FeMM Rustのジェネリクスは
型Tに対してトレイト境界を増やせば増やすほど型Tを使って様々なことができるようになっていく
今回のように型Tに対してトレイト境界が何も無ければ任意の型に適用できる代わりにできることが非常に少ない
例えばC++とは異なりRustではデフォルト値で初期化することすら指定なしにはできない
Defaultトレイトをトレイト境界に持ち、さらにそのメソッドを用いてT::default()することで、
初めてようやくデフォルト値で初期化されたT型を得ることができる
これにより「ある型にとってデフォルト値とは何か」「そもそもその型にデフォルト値はあるのか」「デフォルト値が使われるのはいつか」
といった諸問題を全て解決している
C++の複雑なルールと異なりRustでは非常に簡単でわかりやすくなっている
型Tに対してトレイト境界を増やせば増やすほど型Tを使って様々なことができるようになっていく
今回のように型Tに対してトレイト境界が何も無ければ任意の型に適用できる代わりにできることが非常に少ない
例えばC++とは異なりRustではデフォルト値で初期化することすら指定なしにはできない
Defaultトレイトをトレイト境界に持ち、さらにそのメソッドを用いてT::default()することで、
初めてようやくデフォルト値で初期化されたT型を得ることができる
これにより「ある型にとってデフォルト値とは何か」「そもそもその型にデフォルト値はあるのか」「デフォルト値が使われるのはいつか」
といった諸問題を全て解決している
C++の複雑なルールと異なりRustでは非常に簡単でわかりやすくなっている
394デフォルトの名無しさん
2022/05/30(月) 00:14:44.37ID:S6YD6bxt 一方C++erはデフォルトコンストラクタを使ってデフォルト値を定義した
395デフォルトの名無しさん
2022/05/30(月) 00:34:37.40ID:Wa35ZTPi 長いからデフコンって略したほうが良くないっすか?
396デフォルトの名無しさん
2022/05/30(月) 00:37:19.04ID:QyLPQBc1 全てを明瞭シンプルにしたことがRustの勝因
397デフォルトの名無しさん
2022/05/30(月) 00:39:32.57ID:Wa35ZTPi なんだじゃあJavaと一緒じゃん。
398デフォルトの名無しさん
2022/05/30(月) 00:45:18.57ID:L0CO9j2x 明示的に指示されないメンバも初期化されることに気づけなかったのはC++の仕様が複雑すぎるため
僕が悪いのではないことは明らか
僕が悪いのではないことは明らか
399デフォルトの名無しさん
2022/05/30(月) 02:47:26.12ID:ccLFuKy8 Rustは綺麗に整理されてるいるから複雑な個別ルールを覚えなくて済むね
400デフォルトの名無しさん
2022/05/30(月) 08:58:04.28ID:Pjv5EPMb トレイトを増やしすぎて普段は必要ない補完候補が気持ち悪いぐらい出てくる破綻言語
401デフォルトの名無しさん
2022/05/30(月) 09:26:55.13ID:PFXjMGN7 C#は良い言語ですよ
402デフォルトの名無しさん
2022/05/30(月) 18:11:00.15ID:ByAGrxv3 >>400
ほんこれ
ほんこれ
403デフォルトの名無しさん
2022/05/30(月) 18:37:20.51ID:9QWL5Xmb そんなに補完優秀だったっけ?
rust-analyzer?
rust-analyzer?
404デフォルトの名無しさん
2022/05/30(月) 18:49:27.08ID:FmNIm4Mv RustはDと同じ臭いがする
405デフォルトの名無しさん
2022/05/30(月) 18:56:01.15ID:z2BzOSMS 言ってることはHaskellと同じだと思います!
・コンパイルを通ればバグがないことが保証される。
・静的に解決するのでCの10倍速い。
・C++は遅い。
・C++は危険。
・コンパイルを通ればバグがないことが保証される。
・静的に解決するのでCの10倍速い。
・C++は遅い。
・C++は危険。
406デフォルトの名無しさん
2022/05/30(月) 19:18:53.99ID:ccLFuKy8407デフォルトの名無しさん
2022/05/30(月) 19:34:52.16ID:NdgJBZsO408デフォルトの名無しさん
2022/05/30(月) 20:00:34.27ID:z2BzOSMS Rust屋さんはCを目の敵にしてるから。
409デフォルトの名無しさん
2022/05/30(月) 20:01:09.26ID:+MhjIs8x Rust批判はこのスレでどうぞ
410デフォルトの名無しさん
2022/05/30(月) 20:02:56.21ID:z2BzOSMS Ruby批判もこのスレで良いですか?
411デフォルトの名無しさん
2022/05/30(月) 22:52:59.67ID:vE8PcjqL >>405
haskellでそんなこと聞いたこと無いが。
haskellでそんなこと聞いたこと無いが。
412デフォルトの名無しさん
2022/05/30(月) 23:31:08.66ID:HNl+yJ2Z >>410
それはダメ
それはダメ
413デフォルトの名無しさん
2022/05/30(月) 23:38:49.33ID:cFpihliW >>369
Pinは1回だけでいい
そしてas_mutしてresumeする
let mut g = Pin::new(&mut generator);
assert_eq!(GeneratorState::Yielded(1), g.as_mut().resume(()));
assert_eq!(GeneratorState::Yielded(2), g.as_mut().resume(()));
assert_eq!(GeneratorState::Yielded(3), g.as_mut().resume(()));
assert_eq!(GeneratorState::Complete("end"), g.as_mut().resume(()));
Pinは1回だけでいい
そしてas_mutしてresumeする
let mut g = Pin::new(&mut generator);
assert_eq!(GeneratorState::Yielded(1), g.as_mut().resume(()));
assert_eq!(GeneratorState::Yielded(2), g.as_mut().resume(()));
assert_eq!(GeneratorState::Yielded(3), g.as_mut().resume(()));
assert_eq!(GeneratorState::Complete("end"), g.as_mut().resume(()));
414デフォルトの名無しさん
2022/05/31(火) 00:29:14.66ID:qkI00F5r CLI向けのコマンドラインオプションと設定ファイルと環境変数統一的に扱えるライブラリとかない?
コマンドラインで指定があればそれを、なければ環境変数を、それもなければ設定ファイルを、どれもなければデフォルト値を読む
っていう動作を各オプションについてやってくれるライブラリが欲しい
コマンドラインで指定があればそれを、なければ環境変数を、それもなければ設定ファイルを、どれもなければデフォルト値を読む
っていう動作を各オプションについてやってくれるライブラリが欲しい
415デフォルトの名無しさん
2022/05/31(火) 00:42:08.60ID:M2U43b0K clap+argfileでいけるかな?
416デフォルトの名無しさん
2022/05/31(火) 05:48:32.37ID:V7u6lubL 大量じゃなければdotenv+clapで列挙していけばいいね
#[derive(Parser)]
struct Args {
#[clap(long, env = "TEST_NAME", default_value = "デフォルト値")]
test_name: String,
}
dotenv::from_filename("設定ファイル名").ok();
let args = Args::parse();
println!("{}", args.test_name);
argsをparseする前にdotenvで設定ファイルから環境変数へ流し込んでおくと
CLI引数→環境変数→設定ファイル→デフォルト値の順
#[derive(Parser)]
struct Args {
#[clap(long, env = "TEST_NAME", default_value = "デフォルト値")]
test_name: String,
}
dotenv::from_filename("設定ファイル名").ok();
let args = Args::parse();
println!("{}", args.test_name);
argsをparseする前にdotenvで設定ファイルから環境変数へ流し込んでおくと
CLI引数→環境変数→設定ファイル→デフォルト値の順
417デフォルトの名無しさん
2022/05/31(火) 10:19:23.69ID:aYJaA5wp418デフォルトの名無しさん
2022/05/31(火) 14:58:10.34ID:qkI00F5r419デフォルトの名無しさん
2022/05/31(火) 20:23:20.27ID:/PJVfDdU env feature指定すると扱える
あと今時の形式>>416ではderive featureも必須
あと今時の形式>>416ではderive featureも必須
420デフォルトの名無しさん
2022/05/31(火) 21:26:01.43ID:bCRscqs9421デフォルトの名無しさん
2022/06/03(金) 21:24:55.91ID:3LVnIAMZ 配列の中で移動コピーする方法を教えてください
例えば
移動前 [X, X, X, X, 4, 5, 6, 7, 8, 9]
移動後 [4, 5, 6, 7, 8, 9, X, X, X, X];
Xは任意の値で構わないです
可能ならばstable safeでお願いします
例えば
移動前 [X, X, X, X, 4, 5, 6, 7, 8, 9]
移動後 [4, 5, 6, 7, 8, 9, X, X, X, X];
Xは任意の値で構わないです
可能ならばstable safeでお願いします
422デフォルトの名無しさん
2022/06/03(金) 21:51:48.48ID:zWyAdBA8 複おじか?お前
423デフォルトの名無しさん
2022/06/03(金) 21:58:58.40ID:58QZIwzn >>421
xs.rotate_left(4);
xs.rotate_left(4);
424デフォルトの名無しさん
2022/06/03(金) 22:49:16.06ID:/2hdnJHh コピーとあるからcopy_within(4.., 0)でいいんじゃないか
rotate_leftだと大きな配列で後方と前方の間の小さいサイズのコピーでも全体のコピーが発生して無駄
rotate_leftだと大きな配列で後方と前方の間の小さいサイズのコピーでも全体のコピーが発生して無駄
425デフォルトの名無しさん
2022/06/03(金) 23:22:12.53ID:58QZIwzn なるほど、任意の値で構わないってのはそういうことだったのか
426デフォルトの名無しさん
2022/06/03(金) 23:55:24.30ID:3LVnIAMZ ありがとうございました
ところで文字列にはfindメソッドがあって便利なのですが
指定した値が配列の中で前から何番目にあるかを返すメソッドはありますか?
ところで文字列にはfindメソッドがあって便利なのですが
指定した値が配列の中で前から何番目にあるかを返すメソッドはありますか?
427デフォルトの名無しさん
2022/06/04(土) 00:13:56.42ID:1UnvA590 >>426
slice::iter::position
slice::iter::position
428デフォルトの名無しさん
2022/06/04(土) 00:40:32.70ID:oXzC1k// positionでもfindでも行ける
let buf = b"abc\ndef\n";
assert_eq!(Some(3), buf.iter().position(|&b| b == b'\n'));
assert_eq!(Some(3), (0..buf.len()).find(|&i| buf[i] == b'\n'));
文字列でのこの簡潔さと比べるとスライス直結findが欲しくなるのはわかる
let str = "abc\ndef\n";
assert_eq!(Some(3), str.find('\n'));
let buf = b"abc\ndef\n";
assert_eq!(Some(3), buf.iter().position(|&b| b == b'\n'));
assert_eq!(Some(3), (0..buf.len()).find(|&i| buf[i] == b'\n'));
文字列でのこの簡潔さと比べるとスライス直結findが欲しくなるのはわかる
let str = "abc\ndef\n";
assert_eq!(Some(3), str.find('\n'));
429デフォルトの名無しさん
2022/06/04(土) 00:48:39.66ID:SnRPHFsS bikeshed
430デフォルトの名無しさん
2022/06/04(土) 01:04:34.73ID:oXzC1k// str::findは部分列も対応
let str = "abc\r\ndef\r\n";
assert_eq!(Some(3), str.find("\r\n"));
なぜslice::findを作らなかったのだろう?
let str = "abc\r\ndef\r\n";
assert_eq!(Some(3), str.find("\r\n"));
なぜslice::findを作らなかったのだろう?
431デフォルトの名無しさん
2022/06/04(土) 09:04:26.92ID:LG8suQe9 出た
汚コード
汚コード
432デフォルトの名無しさん
2022/06/04(土) 09:19:04.11ID:UQf/W43E Rustの仕様自体が汚いんだよ
433デフォルトの名無しさん
2022/06/04(土) 09:34:38.78ID:nKFWMn7j 汚コードでもいいやん
反面教師になるんだから
ただし単発の短いコードに限る
フィボナッチ汚コードのペタペタ連投みたいなのはもう勘弁
反面教師になるんだから
ただし単発の短いコードに限る
フィボナッチ汚コードのペタペタ連投みたいなのはもう勘弁
434デフォルトの名無しさん
2022/06/04(土) 09:56:15.67ID:kJkfvymC 汚コードなの?初心者だからマジわからん
docのstd::slice::iter::position をみたら似たようなコードだったけど
docのstd::slice::iter::position をみたら似たようなコードだったけど
435デフォルトの名無しさん
2022/06/04(土) 10:11:21.31ID:SnRPHFsS >>430
sliceから部分sliceを探索する頻度が文字列から部分文字列を探索する頻度に比べて圧倒的に低いから、じゃないの
C++のSTLも文字列にしかメンバ関数としてのfindは無いし、これも同じ理由ではないかな
sliceから部分sliceを探索する頻度が文字列から部分文字列を探索する頻度に比べて圧倒的に低いから、じゃないの
C++のSTLも文字列にしかメンバ関数としてのfindは無いし、これも同じ理由ではないかな
436デフォルトの名無しさん
2022/06/04(土) 11:23:20.02ID:HjDRTZ3n Rustのエラー表示すばらしいなほんとに
めちゃくちゃ楽だわな
めちゃくちゃ楽だわな
437デフォルトの名無しさん
2022/06/04(土) 12:01:38.84ID:K/Ra00gu いつも汚コード言ってるやつはキチガイだから無視しとけ
>>430
部分スライスに対してもiterの代わりにwindowsを使えば同じようにpositionで部分文字列findと同じ結果を得られる
let buf = b"abc\r\ndef\r\n";
assert_eq!(Some(3), buf.windows(2).position(|b| b == b"\r\n"));
>>430
部分スライスに対してもiterの代わりにwindowsを使えば同じようにpositionで部分文字列findと同じ結果を得られる
let buf = b"abc\r\ndef\r\n";
assert_eq!(Some(3), buf.windows(2).position(|b| b == b"\r\n"));
438デフォルトの名無しさん
2022/06/04(土) 12:02:08.90ID:rPOcVTB8 エラー表示が出ている時点で(ry
439デフォルトの名無しさん
2022/06/04(土) 12:43:02.16ID:SnRPHFsS bikeshed bikeshed bikeshed
440デフォルトの名無しさん
2022/06/04(土) 13:12:11.67ID:sY7vYVfw 文字列のPatternに相当するものがsliceになないからでは
441デフォルトの名無しさん
2022/06/04(土) 13:40:33.24ID:NhLlWR3w442デフォルトの名無しさん
2022/06/04(土) 13:47:22.44ID:DNUj2Sn5 汚コード公式汚コードですわ~!
443デフォルトの名無しさん
2022/06/04(土) 13:57:36.96ID:nieqt9o7444デフォルトの名無しさん
2022/06/04(土) 14:11:57.60ID:QZjOvH6O こんなスレに質問しに来る初学者なんてものは最初から存在しないんだろうな
445デフォルトの名無しさん
2022/06/04(土) 14:23:56.41ID:ThNWOKir ん?
「初心者だからわからん」というのが汚コーダーの自演だろってこと?
「初心者だからわからん」というのが汚コーダーの自演だろってこと?
446デフォルトの名無しさん
2022/06/04(土) 14:34:25.51ID:QAuL8N6o そうだよ
447デフォルトの名無しさん
2022/06/04(土) 14:39:18.00ID:xn39310Q 複クンはね
みんなに見てもらいたいんよ
つきあってあげてよ
みんなに見てもらいたいんよ
つきあってあげてよ
448デフォルトの名無しさん
2022/06/04(土) 15:03:39.84ID:Skn9YyLT449434
2022/06/04(土) 15:21:18.99ID:kJkfvymC 自演臭くなるからアレなんだけど
暇潰しに公式ドキュメントと照らし合わせて疑問に思ったから書き込んだだけで
ただの通りすがりだからね
暇潰しに公式ドキュメントと照らし合わせて疑問に思ったから書き込んだだけで
ただの通りすがりだからね
450デフォルトの名無しさん
2022/06/04(土) 15:39:42.64ID:nieqt9o7451デフォルトの名無しさん
2022/06/04(土) 16:10:13.56ID:VXQtFnUU 書いてあるコードよりましなコードを出せずに汚コードって呟くしかない可哀想な人は暖かくスルーしてやってくださいな
452デフォルトの名無しさん
2022/06/04(土) 16:13:38.80ID:jusi9BoA453デフォルトの名無しさん
2022/06/04(土) 16:30:17.39ID:43LVHAPc454デフォルトの名無しさん
2022/06/04(土) 21:35:57.57ID:Tzl373uA うわーこれ確定じゃん
複くんRustなんかやめてネトサポやれば?
複くんRustなんかやめてネトサポやれば?
455デフォルトの名無しさん
2022/06/04(土) 23:04:11.48ID:FBgyqIef >フルボッコにされて撃沈。
主砲「Copyはディープで高コストだから避けるべき」発射! ==> ドッカーンwww撃沈www
主砲「Copyはディープで高コストだから避けるべき」発射! ==> ドッカーンwww撃沈www
456デフォルトの名無しさん
2022/06/04(土) 23:12:57.28ID:DCKDFwmc 真面目に書いとくとusizeみたいな数値プリミティブの場合はCopy前提で全く問題ないよ
気になる人はベンチにかけてね
気になる人はベンチにかけてね
457デフォルトの名無しさん
2022/06/04(土) 23:38:03.39ID:UrkwxQuP458デフォルトの名無しさん
2022/06/04(土) 23:52:08.43ID:W82CC99g 汚コード連呼厨は信頼できない
代わりのコードをいつも出せない
珍しく出してきたら元より劣化してた
代わりのコードをいつも出せない
珍しく出してきたら元より劣化してた
459デフォルトの名無しさん
2022/06/04(土) 23:57:58.57ID:SnRPHFsS460デフォルトの名無しさん
2022/06/05(日) 00:16:50.25ID:Y4E70HYz 毎週This Week in Rustのリンクでも貼ればこのくだらない流れは終わるのだろうか
461デフォルトの名無しさん
2022/06/05(日) 00:46:34.90ID:9LpkJgbZ ところでスライスへのfindメソッドなどの後付けはRustのorphan ruleを犯さずに可能なの?
462デフォルトの名無しさん
2022/06/05(日) 04:00:56.97ID:4HXc2Nfq trait定義すればできる
463デフォルトの名無しさん
2022/06/05(日) 09:25:11.96ID:Zl7Pb69A > 誰も求めてないfindで書き直したり
そもそも、誰ももとめてない
「ぼくのかんがえたさいきょうふぃぼなっちいてれーた」
をどんだけ貼り付けたんだろうな彼はw
誰も求めてないものを必死でシコってるからうんざりなんよ
そもそも、誰ももとめてない
「ぼくのかんがえたさいきょうふぃぼなっちいてれーた」
をどんだけ貼り付けたんだろうな彼はw
誰も求めてないものを必死でシコってるからうんざりなんよ
464デフォルトの名無しさん
2022/06/05(日) 10:25:57.06ID:yQi6baxx 複クンはなぜ汚いと言われるのか理解しないね
言語やライブラリの制約で避けられないような汚なさならここまで言われない
言語やライブラリの制約で避けられないような汚なさならここまで言われない
465デフォルトの名無しさん
2022/06/05(日) 10:34:37.11ID:g2kCstof シンプルに意図が伝わりやすい書き方が他にあっても
ぼくのかんがえたさいきょうのシコシココードを我慢出来ずに開陳しちゃうからここが汚部屋になる
ぼくのかんがえたさいきょうのシコシココードを我慢出来ずに開陳しちゃうからここが汚部屋になる
466デフォルトの名無しさん
2022/06/05(日) 10:48:55.83ID:REWyb6H9467デフォルトの名無しさん
2022/06/05(日) 10:54:21.85ID:ULNisafI468デフォルトの名無しさん
2022/06/05(日) 14:57:13.62ID:1ZIcYX0i469デフォルトの名無しさん
2022/06/05(日) 17:36:49.26ID:kdHlti+w470デフォルトの名無しさん
2022/06/05(日) 17:53:32.33ID:uQ7Of1B3471デフォルトの名無しさん
2022/06/05(日) 18:25:46.65ID:Zl7Pb69A まーたふぃぼなっち言ってるw
バカのひとつ覚えすなあw
バカのひとつ覚えすなあw
472デフォルトの名無しさん
2022/06/05(日) 18:50:30.04ID:1ZIcYX0i473デフォルトの名無しさん
2022/06/05(日) 21:53:01.43ID:ZauVJiyh >>470
何のメリットもなく汚くしてるだけだから受け入れられないという話だったんだが
何のメリットもなく汚くしてるだけだから受け入れられないという話だったんだが
474デフォルトの名無しさん
2022/06/05(日) 22:11:06.61ID:ZR9IOkh3 ジェネリックのフィボナッチや
ジェネリックのカウントアップみたいな
架空のユースケースの話題はもういいよ
ジェネリックのカウントアップみたいな
架空のユースケースの話題はもういいよ
475デフォルトの名無しさん
2022/06/05(日) 22:14:01.51ID:uQ7Of1B3 https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=41e1df59aeafe6f45fccaa192941d6d1
iter1とiter2は>>295からの引用
Ryzen 7 3700Xで計測
ジェネリクスへのこだわりを捨てればこのくらいは速くできるよ
fib_iter1 time: [7.2754 ms 7.2824 ms 7.2907 ms]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe
fib_iter2 time: [7.8536 ms 7.8678 ms 7.8818 ms]
fib_biguint time: [4.9757 ms 4.9784 ms 4.9812 ms]
Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high mild
Playgroundでもベンチマークできればいいのになあ
iter1とiter2は>>295からの引用
Ryzen 7 3700Xで計測
ジェネリクスへのこだわりを捨てればこのくらいは速くできるよ
fib_iter1 time: [7.2754 ms 7.2824 ms 7.2907 ms]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe
fib_iter2 time: [7.8536 ms 7.8678 ms 7.8818 ms]
fib_biguint time: [4.9757 ms 4.9784 ms 4.9812 ms]
Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high mild
Playgroundでもベンチマークできればいいのになあ
476デフォルトの名無しさん
2022/06/05(日) 22:14:34.17ID:IymwRCap 「RustとC++を学ぼうと思ってるプログラミング初心者です。」(架空)
477デフォルトの名無しさん
2022/06/05(日) 22:24:27.68ID:+fEwSMrP どの場でも同じだが
「技術的な話題と技術的な指摘」
「他者の話題と他者への攻撃」
この違いがわからず後者を行なうダメ人間のせいで場が荒れる
「技術的な話題と技術的な指摘」
「他者の話題と他者への攻撃」
この違いがわからず後者を行なうダメ人間のせいで場が荒れる
478デフォルトの名無しさん
2022/06/05(日) 22:25:12.37ID:xgxgbUCt479デフォルトの名無しさん
2022/06/05(日) 22:36:45.16ID:4HXc2Nfq >>475
playgroundみたいな環境でベンチマークやれたとしても結果が安定しないのでは
playgroundみたいな環境でベンチマークやれたとしても結果が安定しないのでは
480デフォルトの名無しさん
2022/06/05(日) 22:40:18.97ID:+fEwSMrP >>475
純粋にジェネリックか否かの比較をしたいならばadd_assignとaddの違いなども含めて条件を全て揃えたほうがよい
元がiter::successorsを使っているならば非ジェネリック版も同じくそれで揃えてみてはどうか
純粋にジェネリックか否かの比較をしたいならばadd_assignとaddの違いなども含めて条件を全て揃えたほうがよい
元がiter::successorsを使っているならば非ジェネリック版も同じくそれで揃えてみてはどうか
481デフォルトの名無しさん
2022/06/05(日) 23:17:38.06ID:uQ7Of1B3 >>478
>>480
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=4f477ec7bc08ea9f61f565c00beb0d19
ジェネリックなほうをできる限り揃えたけどこれでいいかい?
CheckedAddでadd_assignする方法だけ無さそうだったからアレになってるけど
fib_generic time: [7.4054 ms 7.4164 ms 7.4275 ms]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
fib_biguint time: [4.9527 ms 4.9591 ms 4.9655 ms]
>>480
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=4f477ec7bc08ea9f61f565c00beb0d19
ジェネリックなほうをできる限り揃えたけどこれでいいかい?
CheckedAddでadd_assignする方法だけ無さそうだったからアレになってるけど
fib_generic time: [7.4054 ms 7.4164 ms 7.4275 ms]
Found 1 outliers among 100 measurements (1.00%)
1 (1.00%) high mild
fib_biguint time: [4.9527 ms 4.9591 ms 4.9655 ms]
482デフォルトの名無しさん
2022/06/05(日) 23:34:45.61ID:MGWqyCtZ483デフォルトの名無しさん
2022/06/06(月) 00:32:35.96ID:m7d3UK5s イテレータで計測してみたけど
>>295のoption::takeだとcloneしても速度変わらないな
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=283e5cd13159cab00fcc68d56952df01
>>295のoption::takeだとcloneしても速度変わらないな
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=283e5cd13159cab00fcc68d56952df01
484デフォルトの名無しさん
2022/06/06(月) 02:33:06.91ID:ETmHHhEk >>483
そういう比較はそれ以外の部分のコードを揃えないと何が要因なのか判断できないよ
そういう比較はそれ以外の部分のコードを揃えないと何が要因なのか判断できないよ
485デフォルトの名無しさん
2022/06/06(月) 03:21:12.98ID:CfMv9iPR Rustってフィボナッチ専用言語みたいだな
486デフォルトの名無しさん
2022/06/06(月) 12:48:39.09ID:fwdLGVHm487デフォルトの名無しさん
2022/06/06(月) 14:47:49.79ID:bWO8YoN9 premature optimizationとpremature abstructionの典型例
・具体的なユースケースを想定しない
・トレードオフを考えない
・誰も求めてない抽象化
・計測を伴わない思い込み最適化
コードの汚さと悉く間違った主張の根っこは同じ
・具体的なユースケースを想定しない
・トレードオフを考えない
・誰も求めてない抽象化
・計測を伴わない思い込み最適化
コードの汚さと悉く間違った主張の根っこは同じ
488デフォルトの名無しさん
2022/06/06(月) 15:32:14.02ID:eTH/ySe7 複オジのおかげでいろんな教訓が再認識できて良かったね
反面教師の鑑
めでたしめでたし
反面教師の鑑
めでたしめでたし
489デフォルトの名無しさん
2022/06/06(月) 15:53:42.58ID:c+f9iTO8490481
2022/06/06(月) 16:16:13.39ID:lWIakgkT >>486
正確に言えば
問題はCheckedAdd::checked_add()はselfもotherも参照で取るから、BigUintだと内部で1回clone()されてしまうということなのよね
一方でadd_assignは(桁があふれない限り)in-placeにやるから、その分のコストが発生しない
だから(compiler optimizationという意味での)最適化以前の問題だよ
https://mevius.5ch.net/test/read.cgi/tech/1509028624/153
↑のコードも参考にどうぞ
C++で二項演算子をオーバーロードするときのイディオムです
これを思い出しながら書きました
正確に言えば
問題はCheckedAdd::checked_add()はselfもotherも参照で取るから、BigUintだと内部で1回clone()されてしまうということなのよね
一方でadd_assignは(桁があふれない限り)in-placeにやるから、その分のコストが発生しない
だから(compiler optimizationという意味での)最適化以前の問題だよ
https://mevius.5ch.net/test/read.cgi/tech/1509028624/153
↑のコードも参考にどうぞ
C++で二項演算子をオーバーロードするときのイディオムです
これを思い出しながら書きました
491デフォルトの名無しさん
2022/06/06(月) 16:52:12.73ID:yU0i67fk >>490
ソース見るところ勘違いしてた
確かにaddでも&self使えばclone入るからchecked_add並みに遅くなった
checked_addにownedのselfを取るバージョンが追加されれば改善するだろうけど
trait定義からして対応するつもりのないユースケースかもね
ソース見るところ勘違いしてた
確かにaddでも&self使えばclone入るからchecked_add並みに遅くなった
checked_addにownedのselfを取るバージョンが追加されれば改善するだろうけど
trait定義からして対応するつもりのないユースケースかもね
492デフォルトの名無しさん
2022/06/06(月) 16:57:14.59ID:+9236oDl >>491
CheckedAddAssignを導入すれば全て解決しそうだな
CheckedAddAssignを導入すれば全て解決しそうだな
493デフォルトの名無しさん
2022/06/06(月) 17:23:25.42ID:V1HrdzSd 必要ならextension traitを書けばいい
そこまでしてジェネリックにする価値があるとは思えないけど
そこまでしてジェネリックにする価値があるとは思えないけど
494デフォルトの名無しさん
2022/06/06(月) 18:19:44.52ID:fWB2qr5d リーナスさんから受けたパニックのありがたい指摘って結局どうなったん?
495デフォルトの名無しさん
2022/06/06(月) 20:58:23.31ID:gJyU9Hxy 放置されてんじゃないの?
コンパイラがパニック起こさないように変えられたって聞かないし
コンパイラがパニック起こさないように変えられたって聞かないし
496デフォルトの名無しさん
2022/06/06(月) 21:04:20.00ID:fWB2qr5d パニックにならないオプションくらい作ってもいい気もするけどね
497デフォルトの名無しさん
2022/06/06(月) 21:29:53.43ID:qARo1+y7 パニック自体はもう1年前くらいに修正済み
今はv7 patchまで来ていて大きな懸念も出ていないから
そろそろマージされてもおかしくはない
今はv7 patchまで来ていて大きな懸念も出ていないから
そろそろマージされてもおかしくはない
498デフォルトの名無しさん
2022/06/06(月) 21:51:13.91ID:gJyU9Hxy リーナスレベルに行く前に誰も問題視してなくて指摘もされてないんだろうか
みんなガバガバなんだな
panic前提のコーディング
みんなガバガバなんだな
panic前提のコーディング
499デフォルトの名無しさん
2022/06/06(月) 22:44:51.98ID:Yvz8OCum try_reserveはstabilizeされてるよ
500デフォルトの名無しさん
2022/06/06(月) 23:01:32.72ID:aWO23bGN501デフォルトの名無しさん
2022/06/06(月) 23:06:15.51ID:2Zdu7NAR ジェネリックフィボナッチと同程度にどうでもいい
502デフォルトの名無しさん
2022/06/06(月) 23:15:40.43ID:HuPaBwwV >>481
1.5倍も差があるのは妙だな
Rustでは最適化されるのでジェネリックで書こうがそんな差は出ないはず
そのベンチマークの仕方がおかしい可能性があるので
ジェネリックか否か、check_addか+か、Option利用か否か、など5つのコードで順に調べてみた
ベンチマーク使用コード
https://gist.github.com/rust-play/18d303c3ec79c19c4285ed190e5b2562
(1) ジェネリック + checked_add + Option + successors 版: 元の>>295と完全に同じコード
(2) BigUint + checked_add + Option + successors 版: (1)のTをBigUintへ
(3) BigUint + add + Option + successors 版: (2)のchecked_addを'+'へ
(4) BigUint + add + Option削除 + successors 版: (3)の変数Optionを削除
(5) BigUint + add + Option削除 + from_fn 版: (4)のsuccessorsをfrom_fnへ
結果
test bench_1 ... bench: 619,527 ns/iter (+/- 18,257)
test bench_2 ... bench: 620,293 ns/iter (+/- 23,787)
test bench_3 ... bench: 624,149 ns/iter (+/- 24,388)
test bench_4 ... bench: 626,810 ns/iter (+/- 20,343)
test bench_5 ... bench: 619,675 ns/iter (+/- 30,977)
結論
いずれも誤差の範囲でほぼ同一結果
Rustではジェネリックで書いても最適化される
BigUintでchecked_addやその結果のOptionを使っても最適化される
したがってi8からBigUintまで任意に動作する>>295のジェネリックコードで問題なし、となる
1.5倍も差があるのは妙だな
Rustでは最適化されるのでジェネリックで書こうがそんな差は出ないはず
そのベンチマークの仕方がおかしい可能性があるので
ジェネリックか否か、check_addか+か、Option利用か否か、など5つのコードで順に調べてみた
ベンチマーク使用コード
https://gist.github.com/rust-play/18d303c3ec79c19c4285ed190e5b2562
(1) ジェネリック + checked_add + Option + successors 版: 元の>>295と完全に同じコード
(2) BigUint + checked_add + Option + successors 版: (1)のTをBigUintへ
(3) BigUint + add + Option + successors 版: (2)のchecked_addを'+'へ
(4) BigUint + add + Option削除 + successors 版: (3)の変数Optionを削除
(5) BigUint + add + Option削除 + from_fn 版: (4)のsuccessorsをfrom_fnへ
結果
test bench_1 ... bench: 619,527 ns/iter (+/- 18,257)
test bench_2 ... bench: 620,293 ns/iter (+/- 23,787)
test bench_3 ... bench: 624,149 ns/iter (+/- 24,388)
test bench_4 ... bench: 626,810 ns/iter (+/- 20,343)
test bench_5 ... bench: 619,675 ns/iter (+/- 30,977)
結論
いずれも誤差の範囲でほぼ同一結果
Rustではジェネリックで書いても最適化される
BigUintでchecked_addやその結果のOptionを使っても最適化される
したがってi8からBigUintまで任意に動作する>>295のジェネリックコードで問題なし、となる
503デフォルトの名無しさん
2022/06/06(月) 23:58:37.28ID:hMQAMrNY504デフォルトの名無しさん
2022/06/07(火) 00:13:51.07ID:GvuMwmTL505デフォルトの名無しさん
2022/06/07(火) 00:16:51.98ID:y2mAB4fu506デフォルトの名無しさん
2022/06/07(火) 00:17:18.96ID:YQOkxy3N https://gist.github.com/rust-play/8caca28378745b36aaba5358d2a54fe8
test bench_1 ... bench: 426,714 ns/iter (+/- 5,563)
test bench_fast ... bench: 201,510 ns/iter (+/- 2,926)
Criterion の使い方が分からなかったのかな
test bench_1 ... bench: 426,714 ns/iter (+/- 5,563)
test bench_fast ... bench: 201,510 ns/iter (+/- 2,926)
Criterion の使い方が分からなかったのかな
507デフォルトの名無しさん
2022/06/07(火) 00:19:44.22ID:y2mAB4fu508デフォルトの名無しさん
2022/06/07(火) 00:35:03.04ID:z0w37Unr509デフォルトの名無しさん
2022/06/07(火) 00:38:00.86ID:wvlfxzyf まーたすがすがしいまでの自演だなぁ
510デフォルトの名無しさん
2022/06/07(火) 00:39:26.17ID:r6MnfEMB511デフォルトの名無しさん
2022/06/07(火) 01:10:53.92ID:YQOkxy3N https://gist.github.com/rust-play/bde9b95f9bfe4de77fad841db30222c7
test bench_1 ... bench: 420,671 ns/iter (+/- 53,102)
test bench_fast ... bench: 219,091 ns/iter (+/- 1,147)
こんな汚ないことしてまでイテレータになんかしたくないんだけど
どうせ次の文句も大体予想付くし
test bench_1 ... bench: 420,671 ns/iter (+/- 53,102)
test bench_fast ... bench: 219,091 ns/iter (+/- 1,147)
こんな汚ないことしてまでイテレータになんかしたくないんだけど
どうせ次の文句も大体予想付くし
512デフォルトの名無しさん
2022/06/07(火) 01:35:52.48ID:gaZATsj9 この件はRustにとって重要なことだから口を挟むが、
Rustではジェネリックで書いてもmonomorphizationによって各型で書いた時と同じコードになる。
だから標準ライブラリの大半はジェネリックに書かれている。
そしてSomeなどのOptionは最適化できる時は綺麗に消えるため、
BigIntのchecked_addのように常にSomeを返す時も最適化でOptionは消えると考えられる。
いずれも抽象的に書けるのに動かすとC並に速いというRustの長所である。
つまり、>>502の結果が出たことはそれらが実証付けられたことになる。
しかし、以前からジェネリックは無駄とか遅いとかRustの長所に反する主張をする人がいるので気になっていた。
今回もRustのジェネリックは遅いと主張するために、
>>506のように、完全に異なるもの同士を比較したり、
>>511のように、Rcを返すという別仕様のものにしてまで、ジェネリックは遅いと主張し出した。
反Rustか反ジェネリックの立場なのかもしれないが、そういう捏造や詐欺のようなことはよくない。
Rustではジェネリックで書いてもmonomorphizationによって各型で書いた時と同じコードになる。
だから標準ライブラリの大半はジェネリックに書かれている。
そしてSomeなどのOptionは最適化できる時は綺麗に消えるため、
BigIntのchecked_addのように常にSomeを返す時も最適化でOptionは消えると考えられる。
いずれも抽象的に書けるのに動かすとC並に速いというRustの長所である。
つまり、>>502の結果が出たことはそれらが実証付けられたことになる。
しかし、以前からジェネリックは無駄とか遅いとかRustの長所に反する主張をする人がいるので気になっていた。
今回もRustのジェネリックは遅いと主張するために、
>>506のように、完全に異なるもの同士を比較したり、
>>511のように、Rcを返すという別仕様のものにしてまで、ジェネリックは遅いと主張し出した。
反Rustか反ジェネリックの立場なのかもしれないが、そういう捏造や詐欺のようなことはよくない。
513デフォルトの名無しさん
2022/06/07(火) 01:49:10.77ID:eprvoL3W >>512
同意
同意
514デフォルトの名無しさん
2022/06/07(火) 03:36:34.68ID:hBVbMSyF >>512
ジェネリクスが無駄だの遅いだのはコード生成の話ではなくてコードのメンテナンスコスト含めた全体の話では
例えば今回ジェネリックなコードで無駄なcloneを避けるためには CheckedAddAssign といった trait を用意し、各整数型に実装するという余計な手間が発生する
また、各整数に追加のtraitを実装したとしても固定長の整数型ではすぐに桁あふれしてしまうから、実質BigUintの実装しか意味がないものになる
だったら最初からジェネリックにせずBigUintで実装するか、BigUintやBigIntといった桁あふれしない型だけを対象にすればよい
ジェネリクスの良さを語りたいならもっと良い例があるんじゃないの
ジェネリクスが無駄だの遅いだのはコード生成の話ではなくてコードのメンテナンスコスト含めた全体の話では
例えば今回ジェネリックなコードで無駄なcloneを避けるためには CheckedAddAssign といった trait を用意し、各整数型に実装するという余計な手間が発生する
また、各整数に追加のtraitを実装したとしても固定長の整数型ではすぐに桁あふれしてしまうから、実質BigUintの実装しか意味がないものになる
だったら最初からジェネリックにせずBigUintで実装するか、BigUintやBigIntといった桁あふれしない型だけを対象にすればよい
ジェネリクスの良さを語りたいならもっと良い例があるんじゃないの
515デフォルトの名無しさん
2022/06/07(火) 07:03:55.78ID:/+rlx4fZ >>511
そのコードはイテレータ内部で無理にunwrapしているためこれだけでpanicしてしまう
let mut iter = fibonacci_biguint_iter();
let first = iter.next();
let second = iter.next();
実行結果
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/main.rs:23:30
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
これでは反証コードになっていないので
ちゃんとimpl Iterator<Item = BigUint>を返すコードを書いたほうがいい
>>514
その無駄なcloneとは何?
ベンチ>>502のジェネリックコードを含めた5つのコードを見てみたが無駄なcloneは見当たらなかった
それらよりもベンチで速いコードが出てこない現状をみると無駄は無いのではないか
あと、BigUintを使うまでもない需要も多いのだからジェネリックに書かれたコード一つで十分と感じる
そのコードはイテレータ内部で無理にunwrapしているためこれだけでpanicしてしまう
let mut iter = fibonacci_biguint_iter();
let first = iter.next();
let second = iter.next();
実行結果
thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', src/main.rs:23:30
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
これでは反証コードになっていないので
ちゃんとimpl Iterator<Item = BigUint>を返すコードを書いたほうがいい
>>514
その無駄なcloneとは何?
ベンチ>>502のジェネリックコードを含めた5つのコードを見てみたが無駄なcloneは見当たらなかった
それらよりもベンチで速いコードが出てこない現状をみると無駄は無いのではないか
あと、BigUintを使うまでもない需要も多いのだからジェネリックに書かれたコード一つで十分と感じる
516デフォルトの名無しさん
2022/06/07(火) 08:13:15.84ID:AZaNrbV3517デフォルトの名無しさん
2022/06/07(火) 08:54:11.67ID:99FzOzNU Rustで抽象オブジェクト作るのってどうやんの?
518デフォルトの名無しさん
2022/06/07(火) 08:59:47.84ID:do0qCmU/ >>517
Box<dyn ...>のこと?
Box<dyn ...>のこと?
519デフォルトの名無しさん
2022/06/07(火) 11:56:38.96ID:99FzOzNU >>518
C系だと構造体にtypeフィールド作って定数入れてその定数の値に応じて呼び出す関数変えるみたいなことやるんだけど
インタプリタの動的オブジェクトみたいなもの
Rustでもtypeフィールで条件分岐するのが普通?
C系だと構造体にtypeフィールド作って定数入れてその定数の値に応じて呼び出す関数変えるみたいなことやるんだけど
インタプリタの動的オブジェクトみたいなもの
Rustでもtypeフィールで条件分岐するのが普通?
520デフォルトの名無しさん
2022/06/07(火) 12:28:57.89ID:do0qCmU/521デフォルトの名無しさん
2022/06/07(火) 12:30:31.93ID:mvWCmBcR ファントムなんとかを使うんじゃないのか?
522デフォルトの名無しさん
2022/06/07(火) 12:50:46.76ID:1EDCqMQN 抽象オブジェクトと検索して出てくる例みたいなのをRustでやるならこうだな
enum Object {
Integer(i32),
Float(f32),
文字列(String),
Null,
}
use Object::{Integer, Float, 文字列, Null};
impl Object {
fn hello(&self) {
match self {
Integer(i) => println!("Hello, Intger {i} です"),
Float(f) => println!("Hello, Float {f} です"),
文字列(s) => println!("こんにちは、文字列 {s} です"),
Null => println!("Nullです"),
}
}
}
fn main() {
let object_list = [Integer(12345), Float(67.89), 文字列("ABC".into()), Null];
for object in &object_list {
object.hello();
}
}
enum Object {
Integer(i32),
Float(f32),
文字列(String),
Null,
}
use Object::{Integer, Float, 文字列, Null};
impl Object {
fn hello(&self) {
match self {
Integer(i) => println!("Hello, Intger {i} です"),
Float(f) => println!("Hello, Float {f} です"),
文字列(s) => println!("こんにちは、文字列 {s} です"),
Null => println!("Nullです"),
}
}
}
fn main() {
let object_list = [Integer(12345), Float(67.89), 文字列("ABC".into()), Null];
for object in &object_list {
object.hello();
}
}
523デフォルトの名無しさん
2022/06/07(火) 13:15:30.50ID:1v+TnHgu gccではなくg++とかだとフィボナッチ数列とかは演算しないように最適化される場合がある。
Rustのようにイグノーベルの遊びのコンピューターサイエンスのようなコードをこねくり回して気持ち悪く長くて自己満足オナニーコードになるぐらいだったら
部分的にmasmで書いたほうがマシ(速度的にも、メンテナンス性も)
またRustはLLVMに執着しすぎてgccのような最適化はまだされてない、フィボナッチ数列とかのしょーもない一般的なアルゴリズムは
CPUキャッシュに乗るのにマシンコードのセクションの結果が64kbに成らなかったり
Rustのようにイグノーベルの遊びのコンピューターサイエンスのようなコードをこねくり回して気持ち悪く長くて自己満足オナニーコードになるぐらいだったら
部分的にmasmで書いたほうがマシ(速度的にも、メンテナンス性も)
またRustはLLVMに執着しすぎてgccのような最適化はまだされてない、フィボナッチ数列とかのしょーもない一般的なアルゴリズムは
CPUキャッシュに乗るのにマシンコードのセクションの結果が64kbに成らなかったり
524デフォルトの名無しさん
2022/06/07(火) 13:48:18.23ID:99FzOzNU >>620-522
ありがとう
ありがとう
525デフォルトの名無しさん
2022/06/07(火) 14:15:55.18ID:uuz77ncq >>523
演算しないように最適化されるとか意味不明
演算はどこかで必ず発生する
コンパイル時点で演算してしまう定数化のことならばRustでも当然できる
const fn fibonacci(n: usize) -> usize {
const fn f(n: usize, a: usize, b: usize) -> usize {
match n {
0 => a,
1 => b,
_ => f(n - 1, b, a + b),
}
}
f(n, 0, 1)
}
const F77: usize = fibonacci(77);
演算しないように最適化されるとか意味不明
演算はどこかで必ず発生する
コンパイル時点で演算してしまう定数化のことならばRustでも当然できる
const fn fibonacci(n: usize) -> usize {
const fn f(n: usize, a: usize, b: usize) -> usize {
match n {
0 => a,
1 => b,
_ => f(n - 1, b, a + b),
}
}
f(n, 0, 1)
}
const F77: usize = fibonacci(77);
526デフォルトの名無しさん
2022/06/07(火) 15:36:32.04ID:glYADNck >>511
俺環の遅いマシンだと6倍近く速くなった
この差なら用途によっては汚くする価値が十分あるね
まあ実際のプログラムでBigUintのサイズまで一つ一つイテレータで返すような使い方をすることはまずないだろうけど
俺環の遅いマシンだと6倍近く速くなった
この差なら用途によっては汚くする価値が十分あるね
まあ実際のプログラムでBigUintのサイズまで一つ一つイテレータで返すような使い方をすることはまずないだろうけど
527デフォルトの名無しさん
2022/06/07(火) 15:42:23.15ID:fRg0KLfu >>511
コードが汚い上にget_mutが失敗してpanicする欠陥コードを恥ずかしげもなく披露できるもんだな
コードが汚い上にget_mutが失敗してpanicする欠陥コードを恥ずかしげもなく披露できるもんだな
528デフォルトの名無しさん
2022/06/07(火) 17:49:46.06ID:jaUMaLrL >>525
だからそう言ってる、そして機能紹介は知ってることを言わなくてよいよ?コンパイル時実行とは違う。gcc系は数学的に既に答えが出るようなアルゴリズムを書いた場合に演算しないで低い桁で答えを持つ場合がある。
意味が分からないんだったら日本語から勉強しなおせ。それと汚いものを張り付けるな
だからそう言ってる、そして機能紹介は知ってることを言わなくてよいよ?コンパイル時実行とは違う。gcc系は数学的に既に答えが出るようなアルゴリズムを書いた場合に演算しないで低い桁で答えを持つ場合がある。
意味が分からないんだったら日本語から勉強しなおせ。それと汚いものを張り付けるな
529デフォルトの名無しさん
2022/06/07(火) 18:06:57.96ID:WAenZnu4 >>523
定数たたみ込みのことかな
試した限りでは gcc でも clang でも rustc でも最適化されて fib 呼び出しは消えているよ
どういうコードで問題おきるの?
gcc: https://godbolt.org/z/nx3hnsxTT
clang: https://godbolt.org/z/MYc7G9jeG
rustc: https://godbolt.org/z/x18ob3MjP
定数たたみ込みのことかな
試した限りでは gcc でも clang でも rustc でも最適化されて fib 呼び出しは消えているよ
どういうコードで問題おきるの?
gcc: https://godbolt.org/z/nx3hnsxTT
clang: https://godbolt.org/z/MYc7G9jeG
rustc: https://godbolt.org/z/x18ob3MjP
530デフォルトの名無しさん
2022/06/07(火) 18:10:22.54ID:WAenZnu4 >>523
あとrustがllvmに執着しているというのも間違いで
gccのcodegenを使えるようにするプロジェクトもあって活発に開発されてるよ
https://github.com/rust-lang/rustc_codegen_gcc
あとrustがllvmに執着しているというのも間違いで
gccのcodegenを使えるようにするプロジェクトもあって活発に開発されてるよ
https://github.com/rust-lang/rustc_codegen_gcc
532デフォルトの名無しさん
2022/06/07(火) 20:22:53.88ID:UaJ7fd+W フィボナッチなんて普通に解析解あるんだからそれ使えばいいじゃん
533デフォルトの名無しさん
2022/06/07(火) 20:28:59.38ID:ZSCymycr フィボナッチよりボイニッチを解読してくれ
534デフォルトの名無しさん
2022/06/07(火) 23:19:58.58ID:bfW1tdFv ボイニッチはどうせ創作ノートでしかないし
535デフォルトの名無しさん
2022/06/07(火) 23:25:02.45ID:lnwubCy8536デフォルトの名無しさん
2022/06/07(火) 23:57:19.63ID:YQOkxy3N ワッチョイありスレに移住してここは複おじに明け渡してやったほうがいいのかもな
537デフォルトの名無しさん
2022/06/08(水) 00:55:31.29ID:QhxBwpDW538デフォルトの名無しさん
2022/06/08(水) 01:35:00.04ID:jyTDsLRS539デフォルトの名無しさん
2022/06/08(水) 01:40:47.24ID:C5b6ywPX https://play.rust-lang.org/?version=nightly&mode=release&edition=2021&gist=5180fadf9fda409e0456042fc1bccd8e
遅くなるの分かりきってたから出し渋ったつもりだったけど普通に速かったわwwwメンゴメンゴ
test bench_1 ... bench: 426,277 ns/iter (+/- 1,804)
test bench_fast ... bench: 350,928 ns/iter (+/- 2,760)
一応criterion版も貼っとく
>>502で提起されたベンチマーク不適切説の真偽が気になるなら是非実行してみてくれ
https://gist.github.com/rust-play/3bd45555b9e6faef2b1426712e4e7601
遅くなるの分かりきってたから出し渋ったつもりだったけど普通に速かったわwwwメンゴメンゴ
test bench_1 ... bench: 426,277 ns/iter (+/- 1,804)
test bench_fast ... bench: 350,928 ns/iter (+/- 2,760)
一応criterion版も貼っとく
>>502で提起されたベンチマーク不適切説の真偽が気になるなら是非実行してみてくれ
https://gist.github.com/rust-play/3bd45555b9e6faef2b1426712e4e7601
540デフォルトの名無しさん
2022/06/08(水) 02:05:38.58ID:jyTDsLRS541デフォルトの名無しさん
2022/06/08(水) 02:17:57.20ID:aUi5KtMm542デフォルトの名無しさん
2022/06/08(水) 02:29:17.13ID:aUi5KtMm543デフォルトの名無しさん
2022/06/08(水) 04:21:09.02ID:uEpi8n1p544デフォルトの名無しさん
2022/06/08(水) 05:52:38.17ID:78wIRTgY545デフォルトの名無しさん
2022/06/08(水) 06:22:34.20ID:2tL4qRNc546デフォルトの名無しさん
2022/06/08(水) 08:45:07.60ID:C5b6ywPX >>541
「checked_addしてから代入」と「add_assign」の比較だよ
で現状後者はジェネリックにやるために適切なtraitが無いから、
ジェネリックな関数では性能向上に限界があるよねって話
>>540の言う通り、ジェネリック関数とmonomorphized関数をの性能を比較したいわけじゃないよ
>>542
>>490,491でも出た通り、checked_addとadd(両辺とも参照の場合)はどっちもcloneが発生する
だから(2)を(3)にしても、遅いchecked_addを遅いaddで置き換えただけなので性能向上は無い
あとclone発生してるのはここね、docs.rsの[src]からたどれば&BigUint同士のaddがこのマクロで定義されているのが分かるはず
https://docs.rs/num-bigint/latest/src/num_bigint/macros.rs.html#91-107
「checked_addしてから代入」と「add_assign」の比較だよ
で現状後者はジェネリックにやるために適切なtraitが無いから、
ジェネリックな関数では性能向上に限界があるよねって話
>>540の言う通り、ジェネリック関数とmonomorphized関数をの性能を比較したいわけじゃないよ
>>542
>>490,491でも出た通り、checked_addとadd(両辺とも参照の場合)はどっちもcloneが発生する
だから(2)を(3)にしても、遅いchecked_addを遅いaddで置き換えただけなので性能向上は無い
あとclone発生してるのはここね、docs.rsの[src]からたどれば&BigUint同士のaddがこのマクロで定義されているのが分かるはず
https://docs.rs/num-bigint/latest/src/num_bigint/macros.rs.html#91-107
547デフォルトの名無しさん
2022/06/08(水) 09:03:01.17ID:C5b6ywPX あんまり頑固になっても聞かなさそうなんでそろそろ妥協案でも
どうしてもジェネリックでやりたかったら、num::PrimIntでも使ってればここまでの批判は無かったんじゃないですかね
BigUint/BigIntは範囲から外れるけど、それはやっぱりそういうものなんですよ
どうしてもジェネリックでやりたかったら、num::PrimIntでも使ってればここまでの批判は無かったんじゃないですかね
BigUint/BigIntは範囲から外れるけど、それはやっぱりそういうものなんですよ
548デフォルトの名無しさん
2022/06/08(水) 09:13:21.45ID:2tL4qRNc549デフォルトの名無しさん
2022/06/08(水) 11:26:56.36ID:oyhrGaRU Rustが自由自在に書けるようなプログラマになりたがったンゴねえ
ワイは低脳だから躓いてるンゴ
例えば&'static TとT: 'staticの違いがなんかあるらしいんやがわからなかったンゴ
前者はプログラム終了時まで生きる変数の参照って意味で後者はもしTに参照があったらそれは'static以上生きるって解釈であってるんか?
ワイは低脳だから躓いてるンゴ
例えば&'static TとT: 'staticの違いがなんかあるらしいんやがわからなかったンゴ
前者はプログラム終了時まで生きる変数の参照って意味で後者はもしTに参照があったらそれは'static以上生きるって解釈であってるんか?
550デフォルトの名無しさん
2022/06/08(水) 11:49:32.36ID:oyhrGaRU いや理解したんご
前者は参照型しか受け付けないけど後者はそれ以上の種類の型を受け付けるンゴねえ
さらに違いがあるかもだけど勉強進めるわ
なんでもなかった
前者は参照型しか受け付けないけど後者はそれ以上の種類の型を受け付けるンゴねえ
さらに違いがあるかもだけど勉強進めるわ
なんでもなかった
551デフォルトの名無しさん
2022/06/08(水) 12:37:42.94ID:C5b6ywPX552デフォルトの名無しさん
2022/06/08(水) 14:46:42.18ID:JNpA1ROM553デフォルトの名無しさん
2022/06/08(水) 15:00:02.66ID:0R8j40RZ554デフォルトの名無しさん
2022/06/08(水) 15:48:23.76ID:kiLfNcoT555デフォルトの名無しさん
2022/06/08(水) 17:10:39.22ID:C5b6ywPX556デフォルトの名無しさん
2022/06/08(水) 17:16:08.77ID:LlAtoLIj これだけ時間をかけても原因すら分からずノンジェネリックとの速度差を埋められない状況をコストとして認識できてないのが恐ろしい
557デフォルトの名無しさん
2022/06/08(水) 17:31:51.50ID:H0oyRmek558デフォルトの名無しさん
2022/06/08(水) 18:18:03.20ID:cKPONsWM559デフォルトの名無しさん
2022/06/08(水) 18:32:47.55ID:y1p7Fxu2560デフォルトの名無しさん
2022/06/08(水) 19:11:11.80ID:sj9oTS9C561デフォルトの名無しさん
2022/06/08(水) 19:45:52.60ID:btlg3B6B562デフォルトの名無しさん
2022/06/08(水) 19:54:30.37ID:hF0KVPZD CheckedAddAssignの定義難しいよね
cloneを減らせるうまい定義見せて欲しい
cloneを減らせるうまい定義見せて欲しい
563デフォルトの名無しさん
2022/06/08(水) 19:58:01.42ID:hF0KVPZD >>560
> 一方でノンジェネリックで書いてもオーバフロー対策としてchecked_addは使わざるを得ない
つまりどちらが有利とか優れているとかいう問題ではない
BigUintの場合はオーバーフローを想定しなくて良いからただのAddAssignで良いよね
ジェネリックな実装の場合は考慮すべき事項が増えるというハンデを抱えている
> 一方でノンジェネリックで書いてもオーバフロー対策としてchecked_addは使わざるを得ない
つまりどちらが有利とか優れているとかいう問題ではない
BigUintの場合はオーバーフローを想定しなくて良いからただのAddAssignで良いよね
ジェネリックな実装の場合は考慮すべき事項が増えるというハンデを抱えている
564デフォルトの名無しさん
2022/06/08(水) 20:09:35.76ID:Pauu0yN9 基地同士の喧嘩おもすれー
565デフォルトの名無しさん
2022/06/08(水) 21:16:33.76ID:zfNTYu3X ジェネリックでなくても各i8版~u128版でchecked_add要るんじゃね?
566デフォルトの名無しさん
2022/06/08(水) 21:31:30.99ID:uKz/tAPi567デフォルトの名無しさん
2022/06/08(水) 22:52:52.99ID:C5b6ywPX このままでは誰も気付かなさそうなのでここでネタばらし
>>539のcriterion版ですがこちらで動かすとこうなりました
fibonacci_iter_1 time: [7.3605 ms 7.3655 ms 7.3711 ms]
Found 9 outliers among 100 measurements (9.00%)
1 (1.00%) high mild
8 (8.00%) high severe
fibonacci_biguint_iter time: [7.5944 ms 7.5967 ms 7.5992 ms]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe
同程度に遅くなってしまいました
理由は>>548の通り、せっかく減らしたcloneをイテレータ化するために戻さざるを得なかったからです
一見非ジェネリックのほうが速い結果が出たのは、criterion版がN=50000としていたのに対して、
test crate版は最初に貼られたN=10000から変えずにやっていたためでした
criterion版をN=10000で、test crate版をN=50000で計測してみると大体同じような結果になりました
N<2^15あたりまでは非ジェネリックのほうがちょっとだけ速いみたいですが、まあ誤差の範疇かと思います
そういうわけで>>539で非ジェネリックのほうが速いと主張したのは嘘です
本気で信じちゃった人はごめんね
最初はcriterionとtest crateの差だと早とちりしたため、ベンチマーク不適切説とか勿体ぶった書き方をしてました
>>502で根拠も無く疑いをかけたのに対するカウンターのつもりで黙ってたんですが、不発になっちゃいました
まあでもtest crateってwarm upもしないしサンプル数固定だし、その結果ひどい場合だと>>511なんか相対誤差10%超えてるし
criterion使ったほうがいいよってのは大筋では間違ってないよね
最後に+=でイテレートするこれだけ貼っとくから
某おじはこれに相当する性能のジェネリックなイテレータが書けるまでそういったクソどうでもいい執着に人を付き合わせるんじゃないぞ
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=76cd0aad53f19888900a4b450fd078c5
>>539のcriterion版ですがこちらで動かすとこうなりました
fibonacci_iter_1 time: [7.3605 ms 7.3655 ms 7.3711 ms]
Found 9 outliers among 100 measurements (9.00%)
1 (1.00%) high mild
8 (8.00%) high severe
fibonacci_biguint_iter time: [7.5944 ms 7.5967 ms 7.5992 ms]
Found 2 outliers among 100 measurements (2.00%)
1 (1.00%) high mild
1 (1.00%) high severe
同程度に遅くなってしまいました
理由は>>548の通り、せっかく減らしたcloneをイテレータ化するために戻さざるを得なかったからです
一見非ジェネリックのほうが速い結果が出たのは、criterion版がN=50000としていたのに対して、
test crate版は最初に貼られたN=10000から変えずにやっていたためでした
criterion版をN=10000で、test crate版をN=50000で計測してみると大体同じような結果になりました
N<2^15あたりまでは非ジェネリックのほうがちょっとだけ速いみたいですが、まあ誤差の範疇かと思います
そういうわけで>>539で非ジェネリックのほうが速いと主張したのは嘘です
本気で信じちゃった人はごめんね
最初はcriterionとtest crateの差だと早とちりしたため、ベンチマーク不適切説とか勿体ぶった書き方をしてました
>>502で根拠も無く疑いをかけたのに対するカウンターのつもりで黙ってたんですが、不発になっちゃいました
まあでもtest crateってwarm upもしないしサンプル数固定だし、その結果ひどい場合だと>>511なんか相対誤差10%超えてるし
criterion使ったほうがいいよってのは大筋では間違ってないよね
最後に+=でイテレートするこれだけ貼っとくから
某おじはこれに相当する性能のジェネリックなイテレータが書けるまでそういったクソどうでもいい執着に人を付き合わせるんじゃないぞ
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=76cd0aad53f19888900a4b450fd078c5
568デフォルトの名無しさん
2022/06/08(水) 23:10:54.19ID:Pauu0yN9 Rust使うやつは全員クズ
569デフォルトの名無しさん
2022/06/08(水) 23:14:19.56ID:xZpQpCco ゴミみてぇに使いにくい
570デフォルトの名無しさん
2022/06/08(水) 23:33:46.23ID:1Qgkgfnu >>567
ジェネリックは遅くて使い物にならずRustはクソ言語のいい流れが出来ていたのに邪魔すんなボケ
ジェネリックは遅くて使い物にならずRustはクソ言語のいい流れが出来ていたのに邪魔すんなボケ
571デフォルトの名無しさん
2022/06/09(木) 00:05:50.09ID:8AO4ag5u572デフォルトの名無しさん
2022/06/09(木) 01:08:31.17ID:b8HehfnZ573デフォルトの名無しさん
2022/06/09(木) 09:43:05.84ID:m8hzuB37574デフォルトの名無しさん
2022/06/09(木) 11:12:09.28ID:5tn+SNbG 複オジ必死やなw
575デフォルトの名無しさん
2022/06/09(木) 11:39:59.58ID:gQa8Lild iterなんだけど
let v = vec![1, 2, 3, 4];
v.iter().filter(|&x| x % 2 == 0).cloned().collect();
v.iter().map(|&x| x * 2).collect();
filter()はcloned()が必要でなぜmap()は必要ないのか
let v = vec![1, 2, 3, 4];
v.iter().filter(|&x| x % 2 == 0).cloned().collect();
v.iter().map(|&x| x * 2).collect();
filter()はcloned()が必要でなぜmap()は必要ないのか
576デフォルトの名無しさん
2022/06/09(木) 11:41:07.83ID:gQa8Lild まちがえたこうだ
let v = vec![1, 2, 3, 4];
let result_1 = v.iter().filter(|&x| x % 2 == 0).cloned().collect();
let result_2 = v.iter().map(|&x| x * 2).collect();
let v = vec![1, 2, 3, 4];
let result_1 = v.iter().filter(|&x| x % 2 == 0).cloned().collect();
let result_2 = v.iter().map(|&x| x * 2).collect();
577デフォルトの名無しさん
2022/06/09(木) 11:52:52.81ID:WWB1ag70578デフォルトの名無しさん
2022/06/09(木) 14:32:02.03ID:BXa7hn4f 「Atom」の開発者が究極のコードエディターを目指す ~「Zed」の開発が始動
「Electron」を捨て、Rust言語を採用。GPUI、tree-sitterなどで武装し、超高速なコードエディターに
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1374986.html
「Electron」を捨て、Rust言語を採用。GPUI、tree-sitterなどで武装し、超高速なコードエディターに
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1374986.html
579デフォルトの名無しさん
2022/06/09(木) 14:58:44.89ID:G7q6UoxI 「重要」でスレ内検索かけると……
580デフォルトの名無しさん
2022/06/09(木) 16:58:07.35ID:/uOnDbzK >>575
Vec<i32>のiter()は&i32のイテレータ
filterした結果も&i32なのでVec<i32>でcollectしたければcopiedやclonedが必要
Vec<&i32>のままcollectするならclonedは不要
mapの例はx * 2でi32が新たに生成され
map以降は&i32ではなくi32のイテレータになるので
cloned無しでVec<i32>にcollectできる
Vec<i32>のiter()は&i32のイテレータ
filterした結果も&i32なのでVec<i32>でcollectしたければcopiedやclonedが必要
Vec<&i32>のままcollectするならclonedは不要
mapの例はx * 2でi32が新たに生成され
map以降は&i32ではなくi32のイテレータになるので
cloned無しでVec<i32>にcollectできる
581デフォルトの名無しさん
2022/06/09(木) 17:07:43.03ID:3qzGL8h6 >>577
Rc版はmake_mutにすれば呼び出し側が参照をつかんでる時だけcloneにフォールバックしてくれる
つかんでなければcloneしないので高速
全ての値をつかむようならRcを使わないやり方より少し遅くなる
Rc版はmake_mutにすれば呼び出し側が参照をつかんでる時だけcloneにフォールバックしてくれる
つかんでなければcloneしないので高速
全ての値をつかむようならRcを使わないやり方より少し遅くなる
582デフォルトの名無しさん
2022/06/09(木) 20:30:30.68ID:sXhLSFat >>355はRustだと末尾呼び出しの最適化が効くの?
末尾呼び出し最適化必須のschemeですら自動的には最適化されず、人間が意味を解析して、アキュムレーター使って末尾再帰になるようにしましょうって練習問題になるくらいなのに。
Rust凄い!!
末尾呼び出し最適化必須のschemeですら自動的には最適化されず、人間が意味を解析して、アキュムレーター使って末尾再帰になるようにしましょうって練習問題になるくらいなのに。
Rust凄い!!
583デフォルトの名無しさん
2022/06/09(木) 21:24:26.48ID:xbJg8ij+ >>581
簡易的なstreaming iteratorにする方法もあるよ
簡易的なstreaming iteratorにする方法もあるよ
584はちみつ餃子 ◆8X2XSCHEME
2022/06/09(木) 22:43:27.67ID:k8dtcEck585デフォルトの名無しさん
2022/06/10(金) 00:02:10.12ID:/2sYVq21 https://twitter.com/Ray__March/status/1523717266730151936
Crab Rave
https://twitter.com/5chan_nel (5ch newer account)
Crab Rave
https://twitter.com/5chan_nel (5ch newer account)
586582
2022/06/10(金) 12:26:19.22ID:xMTaqdcz >>584
340くらいから末尾呼び出し最適化の話題があって、355の2で「リリースモードだとスタックが溢れない」と書いてあったので、末尾呼び出し最適化が効いたのかと思いました。
十分なスタック容量があっただけ?
1+count(n-1)
を
count(n-1, acc+1)
に書き換えてくれる最適化があるのかな、と思いまして
340くらいから末尾呼び出し最適化の話題があって、355の2で「リリースモードだとスタックが溢れない」と書いてあったので、末尾呼び出し最適化が効いたのかと思いました。
十分なスタック容量があっただけ?
1+count(n-1)
を
count(n-1, acc+1)
に書き換えてくれる最適化があるのかな、と思いまして
587デフォルトの名無しさん
2022/06/10(金) 12:39:41.49ID:awrGQFqA588デフォルトの名無しさん
2022/06/10(金) 12:44:00.71ID:NmVzwec3589デフォルトの名無しさん
2022/06/10(金) 13:14:03.27ID:/2sYVq21 streaming iterator! そういうのもあるのか
自分への参照を返せるんだね
使うかどうかは分からんけど覚えておこう
自分への参照を返せるんだね
使うかどうかは分からんけど覚えておこう
591はちみつ餃子 ◆8X2XSCHEME
2022/06/10(金) 20:18:18.95ID:din4Kjb/ >>586
すでに >>587 が指摘しているが、定数畳み込みが起こっている。 入力が定数で、かつそれに対する演算が副作用のない基本的なものであった場合に定数畳み込みがされやすい。 定数ではない場合でもこの関数 count は
mov rax, rdi
ret
になってて、入力をそのまま返す形にまで最適化されるので末尾呼出しがどうこうというレベルのものではなくなっている。
最適化というのは、レジスタ割り当てなどは理論的な背景がはっきりしているが、多くの細々としたものは「大量の置き換えパターンを辞書のように持っている」という物量で押し切る泥臭いものだったりするので (それをやりやすいようなデータ構造とかに工夫はあると思うが) 結局のところは投入されたリソースが多いやつが強い。
ちなみに Scheme の末尾呼出し最適化は言語仕様で要求する最低限度がそれだけ (しかし常にやらなければならない) という意味であって、それ以上の最適化をやっちゃ駄目という意味ではないよ。 最適化をどのレベルまでやるかは処理系次第。
すでに >>587 が指摘しているが、定数畳み込みが起こっている。 入力が定数で、かつそれに対する演算が副作用のない基本的なものであった場合に定数畳み込みがされやすい。 定数ではない場合でもこの関数 count は
mov rax, rdi
ret
になってて、入力をそのまま返す形にまで最適化されるので末尾呼出しがどうこうというレベルのものではなくなっている。
最適化というのは、レジスタ割り当てなどは理論的な背景がはっきりしているが、多くの細々としたものは「大量の置き換えパターンを辞書のように持っている」という物量で押し切る泥臭いものだったりするので (それをやりやすいようなデータ構造とかに工夫はあると思うが) 結局のところは投入されたリソースが多いやつが強い。
ちなみに Scheme の末尾呼出し最適化は言語仕様で要求する最低限度がそれだけ (しかし常にやらなければならない) という意味であって、それ以上の最適化をやっちゃ駄目という意味ではないよ。 最適化をどのレベルまでやるかは処理系次第。
592デフォルトの名無しさん
2022/06/10(金) 20:27:25.22ID:VliTcE7P こいつが出てくると結論が1つも分からなくなる
593デフォルトの名無しさん
2022/06/10(金) 21:05:43.32ID:uz7MKgqc 複オジと同じ臭い
594デフォルトの名無しさん
2022/06/10(金) 21:45:41.77ID:iyAWtrh4 汚文章は汚コードの兄弟
同じ親から生まれてくるもの
同じ親から生まれてくるもの
595デフォルトの名無しさん
2022/06/10(金) 22:32:01.13ID:r0Sf5PMX 最適化の話はかなりコンパイラーに詳しくないとなぜそうなるかって分からないだろうからな
コンパイラーの最適化について話せる奴はプログラミング中級者以上だろ。
(本職プログラマなら話せないと知識なさすぎと言われるだろうが)
趣味でプの俺は永遠に初心者レベルでそんな知識ないから、こいつ何を言っているんだ?だが
コンパイラーの最適化について話せる奴はプログラミング中級者以上だろ。
(本職プログラマなら話せないと知識なさすぎと言われるだろうが)
趣味でプの俺は永遠に初心者レベルでそんな知識ないから、こいつ何を言っているんだ?だが
596デフォルトの名無しさん
2022/06/10(金) 22:32:11.19ID:+N1EN6wu まぁ要するに
×××という最適化処理が処理系の規格として定められているのなら処理系の開発者(=コンパイラとか作る人)はその最適化を実現しないといけないしそれを利用するプログラマは処理系が”上手いことやってくれる”と期待していい、しかしそれが言語規格上は必須とされてない処理については処理系が“うまいことやつてくれる”と基本は期待してはいけない
けど、規格で求められてないような高度な最適化処理を“してはいけない”わけではない、最新の理論で見つかった最適化処理など取り入れる分には好きにして構わない
という意味でしょ
Haskellのメモ化処理とかでもよく出てくるよ
GHCって言うすごい処理系があってHaskellの標準規格では全然定められてないような最適化処理をバンバンやってくれるから“なんでこんなにはやいの?とりま作っただけなのに”と思うこと時々あるからな
×××という最適化処理が処理系の規格として定められているのなら処理系の開発者(=コンパイラとか作る人)はその最適化を実現しないといけないしそれを利用するプログラマは処理系が”上手いことやってくれる”と期待していい、しかしそれが言語規格上は必須とされてない処理については処理系が“うまいことやつてくれる”と基本は期待してはいけない
けど、規格で求められてないような高度な最適化処理を“してはいけない”わけではない、最新の理論で見つかった最適化処理など取り入れる分には好きにして構わない
という意味でしょ
Haskellのメモ化処理とかでもよく出てくるよ
GHCって言うすごい処理系があってHaskellの標準規格では全然定められてないような最適化処理をバンバンやってくれるから“なんでこんなにはやいの?とりま作っただけなのに”と思うこと時々あるからな
597デフォルトの名無しさん
2022/06/10(金) 22:36:04.99ID:3HE2W+m8 最適化と言えば&mutがnoaliasになって高速化したコード出会ったことある人居る?
598デフォルトの名無しさん
2022/06/10(金) 22:56:48.93ID:/Qg1cUoJ599デフォルトの名無しさん
2022/06/10(金) 23:03:01.48ID:EifRM46R >>595
初心者自演乙オジ
初心者自演乙オジ
600デフォルトの名無しさん
2022/06/10(金) 23:39:18.10ID:QxuEFd4p またいつもと同じパターン
善人 = 情報や説明やコード等を書いてくれる人
悪人 = 文句や批判だけの人
>>597
Rustでは基本的に二つの & mut がaliasになることはないからnoaliasでいいけど
LLVMのバグが見つかったりやRustコンパイラの改修などで変遷を経てきてるみたいね
> Rust 1.0 ~ 1.7 noalias enabled
> Rust 1.8 ~ 1.27 noalias disabled
> Rust 1.28 ~ 1.29 noalias enabled
> Rust 1.30 ~ 1.54 noalias disabled
> Rust 1.54 ~ noalias enabled
善人 = 情報や説明やコード等を書いてくれる人
悪人 = 文句や批判だけの人
>>597
Rustでは基本的に二つの & mut がaliasになることはないからnoaliasでいいけど
LLVMのバグが見つかったりやRustコンパイラの改修などで変遷を経てきてるみたいね
> Rust 1.0 ~ 1.7 noalias enabled
> Rust 1.8 ~ 1.27 noalias disabled
> Rust 1.28 ~ 1.29 noalias enabled
> Rust 1.30 ~ 1.54 noalias disabled
> Rust 1.54 ~ noalias enabled
601デフォルトの名無しさん
2022/06/10(金) 23:52:37.74ID:q3uEdydr 仕様ころころゴミ言語
602デフォルトの名無しさん
2022/06/10(金) 23:57:33.08ID:Vy8jfUtT ソースこれですか
https://stackoverflow.com/a/57259339
https://stackoverflow.com/a/57259339
603デフォルトの名無しさん
2022/06/11(土) 00:21:37.71ID:nVHax23k604デフォルトの名無しさん
2022/06/11(土) 00:47:00.69ID:41aFXNPT605デフォルトの名無しさん
2022/06/11(土) 00:53:30.81ID:6T6IERuk そんなつまんねーのに反応すんなよ……
606デフォルトの名無しさん
2022/06/11(土) 01:51:51.23ID:coFBEVyx マッチポンピング好きだねぇ
607デフォルトの名無しさん
2022/06/11(土) 11:14:20.05ID:FpznSlgy そろそろRust製の有名なソフトウェア作ってからビックマウスしてくださいね、Firefox以外で
608デフォルトの名無しさん
2022/06/11(土) 11:39:14.69ID:fd4RDbWP >>606
マッチポンプも過疎スレのにぎわい
マッチポンプも過疎スレのにぎわい
609デフォルトの名無しさん
2022/06/11(土) 11:54:00.75ID:sRR0HfwK TechEmpower Round 18で1.5倍の差を付けて堂々の1位をかっさらったactixは有名ソフトウェアではない了解
610デフォルトの名無しさん
2022/06/11(土) 15:51:26.10ID:Lxou0O6d DiscordとかDropboxとか
611デフォルトの名無しさん
2022/06/11(土) 16:19:59.18ID:C3/u0lQ5 WinとかLinuxの中身ですでに使われてなかった?
612デフォルトの名無しさん
2022/06/11(土) 18:52:01.33ID:BGPUwt90 >>593
同じ臭いも何も同一人物だろ
同じ臭いも何も同一人物だろ
613デフォルトの名無しさん
2022/06/11(土) 19:26:39.50ID:WsHL0uxM614デフォルトの名無しさん
2022/06/11(土) 23:25:25.63ID:HlAQKNMT なんでRound18なんて大昔の過去を?
615デフォルトの名無しさん
2022/06/12(日) 06:12:09.52ID:6S+GFICB616デフォルトの名無しさん
2022/06/12(日) 17:11:51.09ID:tUHADwRi Rustはver2.0にはなりませんって言ってるけど実質はとっくの昔にver2.0になってる
617デフォルトの名無しさん
2022/06/12(日) 19:14:45.66ID:geXDvND7 >>616
どういうこと?
どういうこと?
618デフォルトの名無しさん
2022/06/12(日) 20:36:02.36ID:nrxswUhC >>562 >>566
CheckedAddAssignにこだわる必要はないため、発想を転換して、
checked_add()の原関数であるoverflowing_add()を用いることで、
overflowing_add_assign()を用意して同じようにbool値を返せば解決する
具体的には以下のように引数はadd_assign()と同じでbool値を返せばよい
trait OverflowingAddAssign {
fn overflowing_add_assign(&mut self, rhs: &Self) -> bool;
}
オーバーフローするi8型〜u128型にはoverflowing_add()があるため実装はこうなる
let is_overflow;
(*self, is_overflow) = self.overflowing_add(*rhs);
is_overflow
この3行のコードでちゃんと最適化されるかどうかを確認するため、
単純にadd_assignを用いた場合、すなわち「*self += rhs」と比較すると
https://godbolt.org/z/WP3En8xM8
のアセンブリ出力となり、オーバーフローを返す以外は同一に最適化されることが確認できる
一方でオーバーフローしないBigUintなどの型への実装はこうなる
*self += rhs;
false
つまりオーバーフローの結果として常にfalseを返すので、
こちらは使う側でオーバーフローの扱いが消えてadd_assign部分のみに最適化される
したがってこのOverflowingAddAssignを用いてジェネリックに書けば、
どちらの型の場合であっても、非ジェネリックに書いた時と同一コードとなる
CheckedAddAssignにこだわる必要はないため、発想を転換して、
checked_add()の原関数であるoverflowing_add()を用いることで、
overflowing_add_assign()を用意して同じようにbool値を返せば解決する
具体的には以下のように引数はadd_assign()と同じでbool値を返せばよい
trait OverflowingAddAssign {
fn overflowing_add_assign(&mut self, rhs: &Self) -> bool;
}
オーバーフローするi8型〜u128型にはoverflowing_add()があるため実装はこうなる
let is_overflow;
(*self, is_overflow) = self.overflowing_add(*rhs);
is_overflow
この3行のコードでちゃんと最適化されるかどうかを確認するため、
単純にadd_assignを用いた場合、すなわち「*self += rhs」と比較すると
https://godbolt.org/z/WP3En8xM8
のアセンブリ出力となり、オーバーフローを返す以外は同一に最適化されることが確認できる
一方でオーバーフローしないBigUintなどの型への実装はこうなる
*self += rhs;
false
つまりオーバーフローの結果として常にfalseを返すので、
こちらは使う側でオーバーフローの扱いが消えてadd_assign部分のみに最適化される
したがってこのOverflowingAddAssignを用いてジェネリックに書けば、
どちらの型の場合であっても、非ジェネリックに書いた時と同一コードとなる
619デフォルトの名無しさん
2022/06/12(日) 20:47:24.48ID:nrxswUhC >>577
一般的に参照返すイテレータ類を実装する場合の注意点として、
1. let x0 = x_iter.next();
2. let x1 = x_iter.next();
3. ここで x0 の指す値を使う
順にこのような使い方をした時の挙動として、以下4パターンが考えられる
A. ✕ 実行時エラーとなる
B. ✕ x0の指す値が変化してしまう (次のx1の指す値と同一になってしまう)
C. ○ x0もx1もそれぞれ正しい値を指す
D. ○ コンパイル時エラーとなる
Rcとget_mut()を使った>>511のコードがNGのパターンA.で、これを避けるために、
Rc<RefCell>を使う提案のようだが、それもNGのパターンB.となってしまう
Rcとmake_mut()を使えばパターンC.となり、これがRc利用の場合の解となる
しかし参照を返すイテレータ自身がmake_mut()でclone()するのは役割として過剰である
切り分けとしてはイテレータを使う側が必要に応じてclone()するのが望ましい
そういうコードへ適切に誘導できる道が、コンパイル時エラーで示すパターンD.
具体的には、似非IteratorであるStreamingIteratorを用いるか、
Rust本命のGATsを用いたLendingIterator (=GATs適用後のIterator) を用いると、
clone()が必要な場面ではコンパイル時エラーにより知らせてくれる
もちろん普通にnext()ループ内の利用ならばclone()の必要なくコンパイルが通る
一般的に参照返すイテレータ類を実装する場合の注意点として、
1. let x0 = x_iter.next();
2. let x1 = x_iter.next();
3. ここで x0 の指す値を使う
順にこのような使い方をした時の挙動として、以下4パターンが考えられる
A. ✕ 実行時エラーとなる
B. ✕ x0の指す値が変化してしまう (次のx1の指す値と同一になってしまう)
C. ○ x0もx1もそれぞれ正しい値を指す
D. ○ コンパイル時エラーとなる
Rcとget_mut()を使った>>511のコードがNGのパターンA.で、これを避けるために、
Rc<RefCell>を使う提案のようだが、それもNGのパターンB.となってしまう
Rcとmake_mut()を使えばパターンC.となり、これがRc利用の場合の解となる
しかし参照を返すイテレータ自身がmake_mut()でclone()するのは役割として過剰である
切り分けとしてはイテレータを使う側が必要に応じてclone()するのが望ましい
そういうコードへ適切に誘導できる道が、コンパイル時エラーで示すパターンD.
具体的には、似非IteratorであるStreamingIteratorを用いるか、
Rust本命のGATsを用いたLendingIterator (=GATs適用後のIterator) を用いると、
clone()が必要な場面ではコンパイル時エラーにより知らせてくれる
もちろん普通にnext()ループ内の利用ならばclone()の必要なくコンパイルが通る
620デフォルトの名無しさん
2022/06/12(日) 20:59:35.22ID:nrxswUhC 実際に >>618のOverflowingAddAssignを用いてLendingIteratorで実装すると
以下のようになり、GATsを用いている以外は現状のIteratorともちろん同じ形
自己参照を返せるようになった点のみ異なる
impl<T: OverflowingAddAssign> LendingIterator for Fibonacci<T> {
type Item<'a> = &'a T where Self: 'a;
fn next<'a>(&'a mut self) -> Option<Self::Item<'a>> {
if self.is_overflow {
return None;
}
if self.is_first {
self.is_first = false;
} else {
self.is_overflow = self.p.overflowing_add_assign(&self.q);
std::mem::swap(&mut self.p, &mut self.q);
}
Some(&self.p)
}
}
is_first処理は >>511のコードでの「iter::once(p.clone()).chain(...」部分であり必須
また、前述のようにBigUintで用いれば is_overflow が常にfalseのため最適化で消えて、
値の更新部分は「self.p += &self.q」のみが残り非ジェネリックと同一コードとなる
したがって、上述のコードがどの型でも最善に動作するコードとなるだろう
以下のようになり、GATsを用いている以外は現状のIteratorともちろん同じ形
自己参照を返せるようになった点のみ異なる
impl<T: OverflowingAddAssign> LendingIterator for Fibonacci<T> {
type Item<'a> = &'a T where Self: 'a;
fn next<'a>(&'a mut self) -> Option<Self::Item<'a>> {
if self.is_overflow {
return None;
}
if self.is_first {
self.is_first = false;
} else {
self.is_overflow = self.p.overflowing_add_assign(&self.q);
std::mem::swap(&mut self.p, &mut self.q);
}
Some(&self.p)
}
}
is_first処理は >>511のコードでの「iter::once(p.clone()).chain(...」部分であり必須
また、前述のようにBigUintで用いれば is_overflow が常にfalseのため最適化で消えて、
値の更新部分は「self.p += &self.q」のみが残り非ジェネリックと同一コードとなる
したがって、上述のコードがどの型でも最善に動作するコードとなるだろう
621デフォルトの名無しさん
2022/06/12(日) 21:33:27.12ID:HOCAPH7I NAVERまとめを彷彿とさせるレス乙
3~4日もかけて頑張って調べたのは讃えるが
特質の異なるものを必要もなくジェネリック化することがアンチパターンだということに早く気づいてね
3~4日もかけて頑張って調べたのは讃えるが
特質の異なるものを必要もなくジェネリック化することがアンチパターンだということに早く気づいてね
622デフォルトの名無しさん
2022/06/12(日) 21:51:32.06ID:rC/Ton17 これは同じものだからジェネリックでいいんじゃね
623デフォルトの名無しさん
2022/06/12(日) 22:02:56.78ID:geXDvND7624デフォルトの名無しさん
2022/06/12(日) 22:16:28.43ID:McWr7xMA add系は#[inline]だから大丈夫
625デフォルトの名無しさん
2022/06/12(日) 22:22:02.34ID:geXDvND7 >>624
構造体メンバの値はグローバル変数なんかと同じで関数外で値が変更される可能性があるので
メンバが特定の値しか取らないことを暫定として最適化するためには、
crateの範囲を超えてプログラム全体で値が設定されうる箇所が他にないことを確認するか
メンバが可視な範囲で確認する必要があると思うけど、
前者をやるためにはリンク時最適化が必要だし
後者ならメンバの可視性をLLVMに渡さないといけないと思う
rustcとLLVMはそこまでやってるの?
構造体メンバの値はグローバル変数なんかと同じで関数外で値が変更される可能性があるので
メンバが特定の値しか取らないことを暫定として最適化するためには、
crateの範囲を超えてプログラム全体で値が設定されうる箇所が他にないことを確認するか
メンバが可視な範囲で確認する必要があると思うけど、
前者をやるためにはリンク時最適化が必要だし
後者ならメンバの可視性をLLVMに渡さないといけないと思う
rustcとLLVMはそこまでやってるの?
626デフォルトの名無しさん
2022/06/12(日) 22:54:00.11ID:E86JsxIR rust結構面白いからマイクロソフトがVisualStudioでRustでWindowsFormを作れるようにしてくれればなあ
627デフォルトの名無しさん
2022/06/12(日) 22:59:17.60ID:MphJhZqp628デフォルトの名無しさん
2022/06/12(日) 23:07:42.57ID:McWr7xMA >>627
assignでない演算は生成のため内部でcloneが発生して無駄と既に結論が出ている
assignでない演算は生成のため内部でcloneが発生して無駄と既に結論が出ている
629デフォルトの名無しさん
2022/06/12(日) 23:11:14.31ID:0LaPlWrL GATがstableになるの意外と近い予定なんだな
年単位で先のことかと思ってた
年単位で先のことかと思ってた
630デフォルトの名無しさん
2022/06/12(日) 23:18:22.58ID:H16c0lbs >>625
Rustでそれは起きない
書き換えるには所有権か&mutが必要でコンパイラは全て把握している
更に構造体のメンバーはpub指定がない限り他者はアクセス不能
つまり今回ならばnext()しかメンバー書き換えしないとコンパイラは確定できる
Rustでそれは起きない
書き換えるには所有権か&mutが必要でコンパイラは全て把握している
更に構造体のメンバーはpub指定がない限り他者はアクセス不能
つまり今回ならばnext()しかメンバー書き換えしないとコンパイラは確定できる
631デフォルトの名無しさん
2022/06/12(日) 23:25:01.40ID:geXDvND7 >>630
その最適化するのはLLVMだけどLLVMが最適化できるだけの情報を渡してるの?というのが聞きたいこと
その最適化するのはLLVMだけどLLVMが最適化できるだけの情報を渡してるの?というのが聞きたいこと
632デフォルトの名無しさん
2022/06/13(月) 00:14:58.10ID:RutuvYDu >>623
その通りRustコンパイラが賢いことを確認したよ
is_overflowが常にfalseとなることを察知してNoneを返すことが無くなったみたい
Noneが来ない利用側のwhile let Some(n) = iter.next()は無限ループのコードとなっちゃった
さらにwhile loopより後ろのコードは永遠未達と判断されて完全に消えた
その通りRustコンパイラが賢いことを確認したよ
is_overflowが常にfalseとなることを察知してNoneを返すことが無くなったみたい
Noneが来ない利用側のwhile let Some(n) = iter.next()は無限ループのコードとなっちゃった
さらにwhile loopより後ろのコードは永遠未達と判断されて完全に消えた
633デフォルトの名無しさん
2022/06/13(月) 00:32:02.84ID:XmIGhHAx634デフォルトの名無しさん
2022/06/13(月) 00:46:44.89ID:BEV+i+nu >>620
GATってIteratorとか既存TraitのAssosiate Typeに直接ライフタイム書けない仕様になったの?
LendingIteratorみたいに別のTraitを使わないといけないようならイテレータ関連の仕組みが2重なって使い勝手が悪い
GATってIteratorとか既存TraitのAssosiate Typeに直接ライフタイム書けない仕様になったの?
LendingIteratorみたいに別のTraitを使わないといけないようならイテレータ関連の仕組みが2重なって使い勝手が悪い
635デフォルトの名無しさん
2022/06/13(月) 00:50:16.18ID:WmCB7dh7636デフォルトの名無しさん
2022/06/13(月) 00:56:09.87ID:WmCB7dh7637デフォルトの名無しさん
2022/06/13(月) 12:04:19.24ID:GDAgVCx4 >>632
おー、そんな賢いんだ。すごい
ちなみにfn mainとイテレータの定義は同じcrateに含まれている?
lib crateでイテレータを定義してbin crateから使った場合にどうなるかも気になる
おー、そんな賢いんだ。すごい
ちなみにfn mainとイテレータの定義は同じcrateに含まれている?
lib crateでイテレータを定義してbin crateから使った場合にどうなるかも気になる
638デフォルトの名無しさん
2022/06/13(月) 14:28:57.42ID:HonuYlRO639デフォルトの名無しさん
2022/06/13(月) 17:16:12.55ID:GB/2aB1F やめてくれ
汚コードまみれになる
汚コードまみれになる
640デフォルトの名無しさん
2022/06/13(月) 19:44:34.63ID:oVc0GyRX 乱数系のモジュールの仕様変更がかなりガッツリあったみたいなんだけど
Rustってこういうことよく起るの?
なんかWeb系みたいなノリを感じたんだが合ってる?
Rustってこういうことよく起るの?
なんかWeb系みたいなノリを感じたんだが合ってる?
641デフォルトの名無しさん
2022/06/13(月) 19:57:14.15ID:86dwWfAN なんのはなしだ
642デフォルトの名無しさん
2022/06/13(月) 19:58:13.01ID:8KDu5nut >>640
人に読んでもらう文章は重要なところ省いたら読んでもらえないよ
人に読んでもらう文章は重要なところ省いたら読んでもらえないよ
643デフォルトの名無しさん
2022/06/13(月) 19:59:25.24ID:GDAgVCx4 >>640
標準ライブラリで破壊的変更はほとんどない
外部crateなら概ねsemverに従ってるし lockfile の仕組みもあるから、
以前ビルドできていたものがビルドできなくなることもほとんどない
標準ライブラリで破壊的変更はほとんどない
外部crateなら概ねsemverに従ってるし lockfile の仕組みもあるから、
以前ビルドできていたものがビルドできなくなることもほとんどない
644デフォルトの名無しさん
2022/06/13(月) 20:37:45.98ID:XXqnAuVB >>638
サポートってどの程度のサポートを期待しているんだ?
MSがRustコンパイラー出せばWindowsのRust用フレームワーク出すんだろうがな
出さないなら、C/C++/C#のAPI/フレームワークをRustからとりあえず使えるようにしました
程度のサポートになるだろう。
期待しているのはRust用フレームワークであってRustからとりあえず使えるよじゃないだろ?
サポートってどの程度のサポートを期待しているんだ?
MSがRustコンパイラー出せばWindowsのRust用フレームワーク出すんだろうがな
出さないなら、C/C++/C#のAPI/フレームワークをRustからとりあえず使えるようにしました
程度のサポートになるだろう。
期待しているのはRust用フレームワークであってRustからとりあえず使えるよじゃないだろ?
645デフォルトの名無しさん
2022/06/13(月) 20:37:53.20ID:oVc0GyRX646デフォルトの名無しさん
2022/06/13(月) 20:43:42.90ID:cs6TlBtz647デフォルトの名無しさん
2022/06/13(月) 20:52:20.46ID:oVc0GyRX648デフォルトの名無しさん
2022/06/13(月) 23:01:34.06ID:JmWkv6oB >理由は標準入りしてしまうと破壊的変更ができなくなって腐るから
なんという本末転倒感
なんという本末転倒感
649デフォルトの名無しさん
2022/06/14(火) 00:25:58.88ID:DOq4xEj+ 基本的にRustはシンプルに最小限の言語構成部分しか標準ライブラリに持たない方針
つまり各プログラミング言語毎に標準ライブラリの意味合いや範囲が異なるのと同じ
だから乱数でも正規表現でも何でもRustでは外部クレートに存在する
非同期だって基本構成部分のasync/await/Futureは言語として持つけど
非同期ランタイムや非同期ライブラリは外部クレート
つまり各プログラミング言語毎に標準ライブラリの意味合いや範囲が異なるのと同じ
だから乱数でも正規表現でも何でもRustでは外部クレートに存在する
非同期だって基本構成部分のasync/await/Futureは言語として持つけど
非同期ランタイムや非同期ライブラリは外部クレート
650デフォルトの名無しさん
2022/06/14(火) 00:42:56.77ID:OVbm/pyy OptionやResultの便利メソッドはどんどん追加されてるし別に標準ライブラリを最小限のものにしようとはしてないでしょ
651デフォルトの名無しさん
2022/06/14(火) 00:49:05.73ID:o3U2MVOf >>649
>最小限の言語構成部分しか標準ライブラリに持たない方針
俺もそんな方針だと思う
これが良いのかどうかは分んが。
標準ライブラリだとコンパイラ屋がコンパイラを出す限りサポート・メンテされるのが
他の言語では標準ライブラリなのが外部クレートだと、将来これをメンテする奴がいないになって
放置になり困ったになる可能性あるからな。
>最小限の言語構成部分しか標準ライブラリに持たない方針
俺もそんな方針だと思う
これが良いのかどうかは分んが。
標準ライブラリだとコンパイラ屋がコンパイラを出す限りサポート・メンテされるのが
他の言語では標準ライブラリなのが外部クレートだと、将来これをメンテする奴がいないになって
放置になり困ったになる可能性あるからな。
652デフォルトの名無しさん
2022/06/14(火) 01:01:42.50ID:DOq4xEj+ >>650
それは最小限の意味合いの受け取り方が違っているだけで同じ
Option/ResultはRustにとって言語構成部分
そしてそのメソッドは強いて言えば多彩な制御構文にも相当する
だからRustの最小限の標準ライブラリに含まれているし必要性が認識されればメソッドも増える
それは最小限の意味合いの受け取り方が違っているだけで同じ
Option/ResultはRustにとって言語構成部分
そしてそのメソッドは強いて言えば多彩な制御構文にも相当する
だからRustの最小限の標準ライブラリに含まれているし必要性が認識されればメソッドも増える
653デフォルトの名無しさん
2022/06/14(火) 01:15:57.14ID:DOq4xEj+ >>651
それは「サポートする人がいなくなればサポートされなくなる」という当たり前のことでRustとは別の一般的な話
どんな製品でも、どんなライブラリでも、どんな言語でも、同じ
そして基本構成部分を含むRust本体の改善&メンテと、それ以外のライブラリのそれとは明らかに別の話たから切り離されているのも自然
それは「サポートする人がいなくなればサポートされなくなる」という当たり前のことでRustとは別の一般的な話
どんな製品でも、どんなライブラリでも、どんな言語でも、同じ
そして基本構成部分を含むRust本体の改善&メンテと、それ以外のライブラリのそれとは明らかに別の話たから切り離されているのも自然
654デフォルトの名無しさん
2022/06/14(火) 01:33:47.46ID:Sv0LbY5c 同じではあるがcargoの性質で余計に面倒な状態になってる。
この辺が低レイヤー向けと相性が悪い部分だな。
この辺が低レイヤー向けと相性が悪い部分だな。
655デフォルトの名無しさん
2022/06/14(火) 02:16:38.57ID:DOq4xEj+ >>654
低レイヤー向けのプログラミングをRustでしていて相性の悪さで困ったことはないが具体的に何だろう?
低レイヤー向けのプログラミングをRustでしていて相性の悪さで困ったことはないが具体的に何だろう?
656デフォルトの名無しさん
2022/06/14(火) 02:19:17.55ID:0h5AdYzJ 聞きかじりだけどクロスコンパイルとかやりたかったらxargo使うもんなんじゃないの
657デフォルトの名無しさん
2022/06/14(火) 02:25:36.70ID:RiQN/QJO 同梱されるライブラリが巨大な言語で
とんでもないクソ仕様が最初に入ってしまうとか
メンテナがいなくなったけど互換性維持で簡単に削除できないとか
色々あるからなあ
とんでもないクソ仕様が最初に入ってしまうとか
メンテナがいなくなったけど互換性維持で簡単に削除できないとか
色々あるからなあ
658デフォルトの名無しさん
2022/06/14(火) 02:36:05.02ID:OVbm/pyy >>652
確かにOptionやResultそのものは言語機能にも関わってくる基本的な構成要素だけど、
OptionやResultの便利メソッドは外部crateでも定義できるよね
また、HashMapやBTreeMapなどは "言語" の構成要素ではないし、
最近ではonce_cellという外部crateで実現できていたものをstdに取り込もうとしている
"言語" を構成する最小限の要素に絞るのであれば、これらは外部crateで実現すればよくて標準ライブラリに入れなくても良いはずだよね
おそらく、標準ライブラリに取り込むものは厳選してコンパクトさを保つことを前提に、
広く使われていてAPIが安定しているものは取り込んでいくというスタンスなんだと思うよ
確かにOptionやResultそのものは言語機能にも関わってくる基本的な構成要素だけど、
OptionやResultの便利メソッドは外部crateでも定義できるよね
また、HashMapやBTreeMapなどは "言語" の構成要素ではないし、
最近ではonce_cellという外部crateで実現できていたものをstdに取り込もうとしている
"言語" を構成する最小限の要素に絞るのであれば、これらは外部crateで実現すればよくて標準ライブラリに入れなくても良いはずだよね
おそらく、標準ライブラリに取り込むものは厳選してコンパクトさを保つことを前提に、
広く使われていてAPIが安定しているものは取り込んでいくというスタンスなんだと思うよ
659デフォルトの名無しさん
2022/06/14(火) 02:42:44.72ID:OVbm/pyy あー、rustで書かれたプログラム全体の中でのデファクトスタンダードとかお作法とかも含めて言語って言っているのかな
そうなのであれば特に異論ないです
そうなのであれば特に異論ないです
660デフォルトの名無しさん
2022/06/14(火) 02:45:28.28ID:xoZMylRu マンパワーが足りないから選択と集中で切り捨ててるだけ
利用者がそれを受け入れてるのは切り捨てた部分をコミュニティで支援するからコア機能の開発に力を注げってこと
利用者がそれを受け入れてるのは切り捨てた部分をコミュニティで支援するからコア機能の開発に力を注げってこと
661デフォルトの名無しさん
2022/06/14(火) 02:53:05.21ID:R/3cLRA4 >>657
iostreamのことかああああ!!
iostreamのことかああああ!!
662デフォルトの名無しさん
2022/06/14(火) 03:08:52.27ID:aUgYAX3K >>661
アレをRustに取り入れようという動きはないのかな?
アレをRustに取り入れようという動きはないのかな?
663デフォルトの名無しさん
2022/06/14(火) 18:56:17.12ID:HX1wvnNi >>648
利便性ではなく一貫性で標準を決めているってことだろ
利便性ではなく一貫性で標準を決めているってことだろ
664デフォルトの名無しさん
2022/06/15(水) 14:46:59.83ID:LjsAAUyE >>658
Rustの利点はOption, Resultがmatchなどの構文で評価できる事、演算子もあるが演算子オーバーロードができる言語であれば同様のことができてしまうがC++23とか26とかで提案されていたinspectはmatchそのもの
Rustの利点はOption, Resultがmatchなどの構文で評価できる事、演算子もあるが演算子オーバーロードができる言語であれば同様のことができてしまうがC++23とか26とかで提案されていたinspectはmatchそのもの
665デフォルトの名無しさん
2022/06/16(木) 15:29:08.46ID:13+3Y2cU Rustの活用でElectronよりも軽くて速いアプリフレームワーク「Tauri」が安定版に
まずはデスクトップから。モバイル・Webへの対応も進行中
https://forest.watch.impress.co.jp/docs/news/1417148.html
まずはデスクトップから。モバイル・Webへの対応も進行中
https://forest.watch.impress.co.jp/docs/news/1417148.html
666デフォルトの名無しさん
2022/06/16(木) 16:07:33.42ID:Ry+36K98 TauriとYewで純正Rustデスクトップアプリ開発か、
あるいはTauriとVue.jsでフロントエンドのみJavascriptでデスクトップアプリ開発か、
あるいはTauriとVue.jsでフロントエンドのみJavascriptでデスクトップアプリ開発か、
667デフォルトの名無しさん
2022/06/16(木) 16:51:56.72ID:TPrqrDPX Tauri + Vite + Vue 3 + Vuetify 3でデスクトップアプリ開発オラァ!!!
668デフォルトの名無しさん
2022/06/16(木) 19:39:52.77ID:3W1WJ+ID そういやAtom開発者がRustで書き直した究極のエディター「Zed」はどうなったんや。
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1374/986/amp.index.html
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1374/986/amp.index.html
669デフォルトの名無しさん
2022/06/16(木) 19:54:27.31ID:hIo52KfN >>665
PC Watchが報じるほどのニュースか、これ?
PC Watchが報じるほどのニュースか、これ?
670デフォルトの名無しさん
2022/06/16(木) 20:36:05.07ID:qYRKaF3V671デフォルトの名無しさん
2022/06/16(木) 20:52:57.67ID:rVOBJfNW フレームワークおじさんきちゃったか
672デフォルトの名無しさん
2022/06/16(木) 21:28:18.61ID:5USgn4My rust製フレームワークの話なら歓迎、jsは該当スレでよろ
673デフォルトの名無しさん
2022/06/16(木) 22:27:59.11ID:/ddt6fDk >>670
俺的にはそれなんかバックにC/C++のVulkan系を用いたものって気がするんだよな
俺的にはそれなんかバックにC/C++のVulkan系を用いたものって気がするんだよな
674デフォルトの名無しさん
2022/06/17(金) 01:45:23.89ID:mZKsuJMX rustでgpuなんか使い始めたらライブラリぶっ壊れまくるぞ
675デフォルトの名無しさん
2022/06/17(金) 08:27:34.98ID:8YmvneAf ?
676デフォルトの名無しさん
2022/06/17(金) 15:39:33.09ID:NH7eG327 俺も今日からラスタシアンだからよろしくな
シャドーイングいいねアンダースコアで区切った同じような名前の変数が同一スコープ内に増え続けるのが嫌でイライラしてたらからこの仕様はめちゃ好き
シャドーイングいいねアンダースコアで区切った同じような名前の変数が同一スコープ内に増え続けるのが嫌でイライラしてたらからこの仕様はめちゃ好き
677デフォルトの名無しさん
2022/06/17(金) 17:57:54.34ID:gT1dTx1o >>676
カタカタで書くとラステイシャンかラステイションだからよろしくな
カタカタで書くとラステイシャンかラステイションだからよろしくな
678デフォルトの名無しさん
2022/06/18(土) 06:02:27.98ID:ib599DIL 全然関係無いんだけど
最近の言語って使ってる人達に名前つけるじゃん
パイソニスタとかPHPerみたいな
CとかC++にもあるのかなー?とか考えてた時に思い出したんだけど
Pythonでモヒカンとか言ってる人達いるじゃん
アレの語源は何なの?
最近の言語って使ってる人達に名前つけるじゃん
パイソニスタとかPHPerみたいな
CとかC++にもあるのかなー?とか考えてた時に思い出したんだけど
Pythonでモヒカンとか言ってる人達いるじゃん
アレの語源は何なの?
679はちみつ餃子 ◆8X2XSCHEME
2022/06/18(土) 11:43:40.01ID:vGEU23LW >>678
Python 関連の用語としては知らんけど、これのこと?
https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%92%E3%82%AB%E3%83%B3%E6%97%8F_(%E3%83%8D%E3%83%83%E3%83%88%E7%94%A8%E8%AA%9E)
Python 関連の用語としては知らんけど、これのこと?
https://ja.wikipedia.org/wiki/%E3%83%A2%E3%83%92%E3%82%AB%E3%83%B3%E6%97%8F_(%E3%83%8D%E3%83%83%E3%83%88%E7%94%A8%E8%AA%9E)
680デフォルトの名無しさん
2022/06/18(土) 11:52:07.94ID:quioMmSC モヒカン族とか、一部の人間が使ってるだけでネットではろくに聞かない言葉だね
681デフォルトの名無しさん
2022/06/18(土) 12:19:14.82ID:ib599DIL682デフォルトの名無しさん
2022/06/18(土) 12:29:31.13ID:XkkeHcIr 俺は本場海外の用語以外は一切使わない陰キャチー牛の日本人が勝手な造語の和製英語とかクソダサいからな
683デフォルトの名無しさん
2022/06/18(土) 12:41:40.55ID:rUpNWN/L 2005~2010頃の技術コミュニティではよく聞いたけど
最近はアンチハラスメントポリシーに抵触するから使われなくなった
最近はアンチハラスメントポリシーに抵触するから使われなくなった
684デフォルトの名無しさん
2022/06/18(土) 13:28:43.26ID:n5ZvcUIJ Rust サビちゃん
Python ヘビちゃん
Python ヘビちゃん
685デフォルトの名無しさん
2022/06/18(土) 13:35:45.47ID:n5ZvcUIJ サビちゃんでもありヘビちゃんでもありヘジたんでもあり職場では犬たん++
686はちみつ餃子 ◆8X2XSCHEME
2022/06/18(土) 13:37:07.64ID:vGEU23LW >>678
C 使いや C++ 使いのことは Cer とか C++er と書いたりすることはあるが、どう読むべきなのかわからぬ……。
C 使いや C++ 使いのことは Cer とか C++er と書いたりすることはあるが、どう読むべきなのかわからぬ……。
687デフォルトの名無しさん
2022/06/18(土) 13:42:03.39ID:n5ZvcUIJ >>686
社畜
社畜
688デフォルトの名無しさん
2022/06/18(土) 13:48:09.17ID:n5ZvcUIJ この世の中あまたの言語があるのになぜCやC++でコード書くかと言えば仕事だから
689デフォルトの名無しさん
2022/06/18(土) 14:09:02.52ID:XkkeHcIr 普段仕事でC++使わない俺からするとRustめちゃくちゃわかりやすくて触ってて楽しい
特に配列やコレクションの扱い易さが段違いだわ
特に配列やコレクションの扱い易さが段違いだわ
690デフォルトの名無しさん
2022/06/18(土) 14:30:49.67ID:n5ZvcUIJ >>689
まあ他の言語触ると扱いやすくて気絶するから触るな
まあ他の言語触ると扱いやすくて気絶するから触るな
691デフォルトの名無しさん
2022/06/18(土) 14:57:08.56ID:iczP/r4h ※お話の途中ですが蟹が通ります
,、_,、
三 ( ´・ω・`)
三 /ヽ /ヽ (V) (V)
三ノ  ̄ ゝ 三 ミ (´・ω・`) ミ
タタタッ サササッ
,、_,、
三 ( ´・ω・`)
三 /ヽ /ヽ (V) (V)
三ノ  ̄ ゝ 三 ミ (´・ω・`) ミ
タタタッ サササッ
692デフォルトの名無しさん
2022/06/18(土) 15:02:32.97ID:hqbe2tQH そのカニもらって食べちゃうね
693デフォルトの名無しさん
2022/06/18(土) 15:34:56.20ID:XkkeHcIr 命名規則のガイドラインがスネークケースなのがC/C++に配慮した結果なのかなぁって気がするけどまぁ慣れの問題だから文句ないよ
694デフォルトの名無しさん
2022/06/18(土) 19:21:06.68ID:M9fy3K3m 公式ドキュメントにRustは式指向言語ですってあるんだが式指向とはなんぞや?
695デフォルトの名無しさん
2022/06/18(土) 19:25:35.79ID:1ZLmOyHM 制御構文が文じゃなくて式になってて値を返すという意味かと
696デフォルトの名無しさん
2022/06/18(土) 19:54:48.42ID:vxK0JF3c 終端にセミコロンつけたら式じゃなく文になっちゃうとか独特だよね
fn five() -> i32 { 5 }とかfn five() -> i32 { 5 };って書けた方が違和感ない気がするんだけどね
fn five() -> i32 { 5 }とかfn five() -> i32 { 5 };って書けた方が違和感ない気がするんだけどね
697デフォルトの名無しさん
2022/06/18(土) 20:32:50.72ID:aTjkq+5e Rustはラムダ引数の型推論が多くの他の言語とは異なって機能するんだよ
698デフォルトの名無しさん
2022/06/18(土) 21:11:11.71ID:6CHzGsUP 最近、ゲームのRustが人気過ぎて検索に支障が出てる
699デフォルトの名無しさん
2022/06/18(土) 22:17:14.37ID:ZZmk5y2Z >>694
日本語訳は公式じゃないから
今はもう公式では式指向(expression oriented)という言葉は使われてない
式指向言語の意味を知りたければwikiでもどうぞ
https://en.wikipedia.org/wiki/Expression-oriented_programming_language
日本語訳は公式じゃないから
今はもう公式では式指向(expression oriented)という言葉は使われてない
式指向言語の意味を知りたければwikiでもどうぞ
https://en.wikipedia.org/wiki/Expression-oriented_programming_language
700デフォルトの名無しさん
2022/06/19(日) 00:35:13.44ID:HLAvlKQn VTuberやストリーマーの間で人気を博しているサバイバルゲーム「RUST」とは?
https://www.moguravr.com/vtuber-rust/
https://www.moguravr.com/vtuber-rust/
701デフォルトの名無しさん
2022/06/19(日) 01:08:17.73ID:WtnMKA9r Goを見習って、Rustlangで検索してくださいね
702デフォルトの名無しさん
2022/06/19(日) 05:08:01.71ID:UsMsALi7 rust lang OR 言語 -go
703デフォルトの名無しさん
2022/06/19(日) 07:36:52.36ID:kKndzz48 Rustではboolを論理値と訳してるけど言語ごとに揺らぎがあるのはなんでだろうね
個人的に真偽値を使ってるけど真理値って解釈もあるしこれも定義は別で厳密には違うけどRustとしては解釈は同じで違いはないってことなのかな
個人的に真偽値を使ってるけど真理値って解釈もあるしこれも定義は別で厳密には違うけどRustとしては解釈は同じで違いはないってことなのかな
704デフォルトの名無しさん
2022/06/19(日) 08:12:44.50ID:Nk1h87ob 作った人が違うんだから揺らぎがあるのは当然だろ
705デフォルトの名無しさん
2022/06/19(日) 09:35:04.20ID:pSFkutGr 作った人というより訳した人の違い
Rustの日本語書籍でも統一されてるわけじゃない
論理値はもともとlogical valuesの訳語
>Rustではboolを論理値と訳してるけど
正しくは「The Bookの日本語訳ではBooleanを論理値と訳してるところがあるけど」
Rustの日本語書籍でも統一されてるわけじゃない
論理値はもともとlogical valuesの訳語
>Rustではboolを論理値と訳してるけど
正しくは「The Bookの日本語訳ではBooleanを論理値と訳してるところがあるけど」
706デフォルトの名無しさん
2022/06/19(日) 09:50:34.90ID:KbscZGS+ 手元のRust本見てみたけど真偽値も真理値もあるね
個人的には真偽値かな
個人的には真偽値かな
707デフォルトの名無しさん
2022/06/19(日) 10:18:36.03ID:MGBoiv+i 型は論理型と言いたくなる。真偽値型ってのもたまに聞くけど。
708デフォルトの名無しさん
2022/06/19(日) 10:32:50.28ID:YciZ0/bi ブール型でええやん
709デフォルトの名無しさん
2022/06/19(日) 11:02:28.95ID:McUuM60V the bookの日本語訳は翻訳の質が低いしアップデートもされてないからrustを本気で勉強したい人は読まない方がいいと思う
710デフォルトの名無しさん
2022/06/19(日) 11:11:00.25ID:KAsrUTco https://jp.mathworks.com/help/matlab/logical-operations.html
> logical データ型を使用して boolean データを表現します
matlabではlogicalってデータ型があって中身は0か1
false, trueも結局はlogicalの0と1でしかない
https://doc.rust-lang.org/std/primitive.bool.html
> The bool represents a value, which could only be either true or false.
> If you cast a bool into an integer, true will be 1 and false will be 0.
一方rustではtrueもfalseも依然としてboolのまま
> logical データ型を使用して boolean データを表現します
matlabではlogicalってデータ型があって中身は0か1
false, trueも結局はlogicalの0と1でしかない
https://doc.rust-lang.org/std/primitive.bool.html
> The bool represents a value, which could only be either true or false.
> If you cast a bool into an integer, true will be 1 and false will be 0.
一方rustではtrueもfalseも依然としてboolのまま
711デフォルトの名無しさん
2022/06/19(日) 11:23:29.55ID:2cctUuao ブール値のブールの意味を知らん人が多いのかもしれない
ブール値より真偽値型がいいな
ブール値より真偽値型がいいな
712デフォルトの名無しさん
2022/06/19(日) 11:33:06.55ID:YciZ0/bi boolの意味なんか一般アメリカ人も知らんだろ
713デフォルトの名無しさん
2022/06/19(日) 12:03:30.22ID:dg+pb++y >>710
値の呼び名の話と、内部表現の話と、castせず別の型の値として利用可能かどうかという3つの異なる話を混同してる
値の呼び名の話と、内部表現の話と、castせず別の型の値として利用可能かどうかという3つの異なる話を混同してる
714デフォルトの名無しさん
2022/06/19(日) 13:11:53.53ID:61bWOpc5 ワットとかアンペアの語源を知ってるかって話?
715デフォルトの名無しさん
2022/06/19(日) 13:14:46.84ID:vUT9u2r3 Rustを含めたほとんどの言語で
logical or/and/notと呼び
まとめてlogical operatorと言い
日本語で論理演算子と称するから
その対象となるbool値も論理値と訳すことが多く賛同だが
訳さずbool型とbool値のままが曖昧さがなくよいのではないか
もちろん文字列型も訳さない方がよい
logical or/and/notと呼び
まとめてlogical operatorと言い
日本語で論理演算子と称するから
その対象となるbool値も論理値と訳すことが多く賛同だが
訳さずbool型とbool値のままが曖昧さがなくよいのではないか
もちろん文字列型も訳さない方がよい
716デフォルトの名無しさん
2022/06/19(日) 13:33:48.08ID:vE0AzMds おまえらってほんとう用語の定義とかそういう話になると生き生きしよるな
あと「許可されないなんちゃら」みたいな法律家談義みたいな話
あと「許可されないなんちゃら」みたいな法律家談義みたいな話
717デフォルトの名無しさん
2022/06/19(日) 13:35:46.28ID:Nk1h87ob718デフォルトの名無しさん
2022/06/19(日) 14:12:32.07ID:T+HLe5Kk719デフォルトの名無しさん
2022/06/19(日) 14:17:42.75ID:kKndzz48 これはプログラミングに限定した話ではなく他のカテゴリでも用語を英語に統一すべきだと思うんだよな
世界の大学ランキングで日本の大学が少ないのは教科書や専門書が英語の国が対象だから教科書や専門書が日本語で学習できる日本はレベル高くて母国語ではなく英語でしか学べない他の国がレベル低い土人国家だと言ってるやつがいるけど逆じゃねーの?って思う
世界の大学ランキングで日本の大学が少ないのは教科書や専門書が英語の国が対象だから教科書や専門書が日本語で学習できる日本はレベル高くて母国語ではなく英語でしか学べない他の国がレベル低い土人国家だと言ってるやつがいるけど逆じゃねーの?って思う
720デフォルトの名無しさん
2022/06/19(日) 14:55:53.98ID:8/kH/R2d 自転車置き場の議論
721デフォルトの名無しさん
2022/06/19(日) 15:31:58.19ID:N+aRTDUf >>719
英語じゃなくてラテン語を
英語じゃなくてラテン語を
722デフォルトの名無しさん
2022/06/19(日) 17:52:40.64ID:fArfwr+a723デフォルトの名無しさん
2022/06/19(日) 18:18:54.31ID:lfAX8IzG724デフォルトの名無しさん
2022/06/19(日) 18:25:22.30ID:ZgRIQXP3 >>723
なぜRuby?
なぜRuby?
725デフォルトの名無しさん
2022/06/19(日) 19:22:19.06ID:xSCrTfK1 高階関数の解説を読むたびに出てくるカリー化がそれオーバーロードでよくね?って思うんだが誰か納得感ある説明頼む
726デフォルトの名無しさん
2022/06/19(日) 19:29:05.73ID:YciZ0/bi >>725
カリー化は、ElmとかF#みたいなパイプライン演算子を多用する言語じゃないとありがたみを感じない
カリー化は、ElmとかF#みたいなパイプライン演算子を多用する言語じゃないとありがたみを感じない
727デフォルトの名無しさん
2022/06/19(日) 19:43:10.79ID:Iqvgk6im なんとRustには関数オーバーロードが存在しないのだ!
だからトレイトでクソ面倒臭い実装でむにゃむにゃしないと実現できない!
でもそんなことして何が嬉しいのかわからない!
Rustは可変長引数もないしC++と比較してまだまだ機能的にはぜんぜん追いついてないよ
だからトレイトでクソ面倒臭い実装でむにゃむにゃしないと実現できない!
でもそんなことして何が嬉しいのかわからない!
Rustは可変長引数もないしC++と比較してまだまだ機能的にはぜんぜん追いついてないよ
728デフォルトの名無しさん
2022/06/19(日) 19:47:20.02ID:WtnMKA9r そうですね
あなたはRustではなくC++を使い続けてください
あなたはRustではなくC++を使い続けてください
729デフォルトの名無しさん
2022/06/19(日) 20:02:56.72ID:61bWOpc5 カリー化ってオーバーロードで代替できるのか?
730デフォルトの名無しさん
2022/06/19(日) 21:29:31.34ID:10dVJy7y // 引数2つの関数 (例としてたまたま足し算)
let add_x_y = |x, y| x + y;
assert_eq!(5, add_x_y(2, 3));
// 引数1つの関数をそこから作り出す (カリー化)
let add_x = |x| move |y| add_x_y(x, y);
// 段階適用
let add_2 = add_x(2);
assert_eq!(5, add_2(3));
// 一気適用
assert_eq!(5, add_x(2)(3));
let add_x_y = |x, y| x + y;
assert_eq!(5, add_x_y(2, 3));
// 引数1つの関数をそこから作り出す (カリー化)
let add_x = |x| move |y| add_x_y(x, y);
// 段階適用
let add_2 = add_x(2);
assert_eq!(5, add_2(3));
// 一気適用
assert_eq!(5, add_x(2)(3));
731デフォルトの名無しさん
2022/06/19(日) 22:04:00.15ID:gGrS7GAs >>725
関数を書くたびにカリー化のためのオーバーロード書いていくのは面倒くさすぎるでしょ
関数を書くたびにカリー化のためのオーバーロード書いていくのは面倒くさすぎるでしょ
732デフォルトの名無しさん
2022/06/19(日) 22:26:44.97ID:fArfwr+a カリー化なあ……
rust だとライフタイムの管理がちょっと複雑になると手におえんだろ
理屈はともかくとして、普通のプログラマにとっては割に合わない
rust だとライフタイムの管理がちょっと複雑になると手におえんだろ
理屈はともかくとして、普通のプログラマにとっては割に合わない
733デフォルトの名無しさん
2022/06/19(日) 22:32:20.86ID:8/kH/R2d https://ja.cppreference.com/w/cpp/language/overload_resolution
これを少しでも理解しようとしたことがあるなら、RustにC++並の無制約なオーバーロードが欲しいとは思わないだろうよ
これを少しでも理解しようとしたことがあるなら、RustにC++並の無制約なオーバーロードが欲しいとは思わないだろうよ
734デフォルトの名無しさん
2022/06/20(月) 06:57:08.63ID:E2oosySA 安直に引数個分のダミーパラメータを与えるカリー化マクロcurry!を用意してみた
macro_rules! curry (
($func_name:path, $first_arg:ident $(, $arg:ident )*) => {
|$first_arg| $(move |$arg|)* $func_name($first_arg $(, $arg)*)
};
);
引数が2つの例
let add = |x, y| x + y;
let curry_add = curry!(add, a, b);
assert_eq!(curry_add(1)(2), add(1, 2));
引数が5つの例
let func = |p, q, r, s, t| p + q * r - s / t;
let curry_func = curry!(func, a, b, c, d, e);
assert_eq!(curry_func(5)(4)(3)(2)(1), func(5, 4, 3, 2, 1));
標準ライブラリの文字列replace関数をカリー化
let curry_str_replace = curry!(str::replace, src, old, new);
assert_eq!(curry_str_replace("abcdefg")("cde")("CDE"), "abCDEfg");
let 自己紹介 = curry_str_replace("私の名前は_NAME_です")("_NAME_");
assert_eq!(自己紹介("名無し"), "私の名前は名無しです");
意外にそこそこ使えた
macro_rules! curry (
($func_name:path, $first_arg:ident $(, $arg:ident )*) => {
|$first_arg| $(move |$arg|)* $func_name($first_arg $(, $arg)*)
};
);
引数が2つの例
let add = |x, y| x + y;
let curry_add = curry!(add, a, b);
assert_eq!(curry_add(1)(2), add(1, 2));
引数が5つの例
let func = |p, q, r, s, t| p + q * r - s / t;
let curry_func = curry!(func, a, b, c, d, e);
assert_eq!(curry_func(5)(4)(3)(2)(1), func(5, 4, 3, 2, 1));
標準ライブラリの文字列replace関数をカリー化
let curry_str_replace = curry!(str::replace, src, old, new);
assert_eq!(curry_str_replace("abcdefg")("cde")("CDE"), "abCDEfg");
let 自己紹介 = curry_str_replace("私の名前は_NAME_です")("_NAME_");
assert_eq!(自己紹介("名無し"), "私の名前は名無しです");
意外にそこそこ使えた
735デフォルトの名無しさん
2022/06/20(月) 07:08:36.46ID:10Lmd2dP736デフォルトの名無しさん
2022/06/20(月) 07:31:28.70ID:iAqd5FsI シャドーイングは許容できて関数のオーバーロードが許容できない理由ってなんだろう
737デフォルトの名無しさん
2022/06/20(月) 07:34:05.79ID:E2oosySA738デフォルトの名無しさん
2022/06/20(月) 07:44:20.63ID:E2oosySA >>736
シャドーイングは同時に存在できるのが一つだけで曖昧さがなくプログラミングにおいてプラス効果
オーバーロードは同時に異なるものが存在できるため可読性を下げたりミスを起こす機会を生じさせてマイナス効果
シャドーイングは同時に存在できるのが一つだけで曖昧さがなくプログラミングにおいてプラス効果
オーバーロードは同時に異なるものが存在できるため可読性を下げたりミスを起こす機会を生じさせてマイナス効果
739デフォルトの名無しさん
2022/06/20(月) 10:29:58.07ID:anfwvwwH >>735
読む時にはどのオーバーロードが呼ばれるのかを確認するのが面倒
RustだとT, &T, &mut T違いもあるから他の言語よりもさらに面倒
メリットよりデメリットのほうが大きいと感じる人が多いんじゃないかな
デフォルト引数/オプション引数/キーワード引数はいずれ導入して欲しい
乱用されるとAPIが汚くなるがオーバーロードほどのデメリットはないと思ってる
読む時にはどのオーバーロードが呼ばれるのかを確認するのが面倒
RustだとT, &T, &mut T違いもあるから他の言語よりもさらに面倒
メリットよりデメリットのほうが大きいと感じる人が多いんじゃないかな
デフォルト引数/オプション引数/キーワード引数はいずれ導入して欲しい
乱用されるとAPIが汚くなるがオーバーロードほどのデメリットはないと思ってる
740デフォルトの名無しさん
2022/06/20(月) 10:47:53.81ID:1agQsnkM 真理値なんてどんなアホが訳してんだ
741デフォルトの名無しさん
2022/06/20(月) 11:11:29.76ID:G0GSIi1k 元の英語から違うので訳の問題ではありません (truth value)
742デフォルトの名無しさん
2022/06/20(月) 11:17:59.13ID:c9A58FBc logical values 論理値
truth values 真理値
true or false values 真偽値
Boolean values ブール値
ブール値じゃ分かりにくいと仮定して論理値、真理値、真偽値のどれを選ぶかってこと
the book日本語訳の人はRustの文脈での分かりやすさよりも土台となってる分野で広く使われてる訳語がいいと判断することが多い印象
truth values 真理値
true or false values 真偽値
Boolean values ブール値
ブール値じゃ分かりにくいと仮定して論理値、真理値、真偽値のどれを選ぶかってこと
the book日本語訳の人はRustの文脈での分かりやすさよりも土台となってる分野で広く使われてる訳語がいいと判断することが多い印象
743デフォルトの名無しさん
2022/06/20(月) 11:29:41.63ID:qsA991ej まぁプログラマーでござい(ドヤッ!な勘違いの陰キャチー牛の癖に英語読めないポンコツなの日本人くらいだからなwww
744はちみつ餃子 ◆8X2XSCHEME
2022/06/20(月) 12:24:24.66ID:6BcBi/VL 同じ意味とされることもあるが、若干のニュアンスの差もあると思うんだよな。
ブールはブール代数から取ってるんだから当然に代数的な操作に使うという感覚があるし、
真理値は論理学の方面で抽象的な概念 (命題とか集合とか) に対応付く場合もある気がする。
個人的には論理値が最も中立というか、ただ真と偽の値を持つものという雰囲気を感じる。
ブール ⊂ 真理値 ⊂ 論理値 な感じ。
ブールはブール代数から取ってるんだから当然に代数的な操作に使うという感覚があるし、
真理値は論理学の方面で抽象的な概念 (命題とか集合とか) に対応付く場合もある気がする。
個人的には論理値が最も中立というか、ただ真と偽の値を持つものという雰囲気を感じる。
ブール ⊂ 真理値 ⊂ 論理値 な感じ。
745デフォルトの名無しさん
2022/06/20(月) 12:43:05.08ID:G0GSIi1k たかが二値論理の値の型でしかないものを誰がboolだのbooleanだの呼び始めたのかと思って調べたらALGOL60だった
746デフォルトの名無しさん
2022/06/20(月) 12:43:22.11ID:zDrv1zgC 真理値だけは3値以上の場合も含むからちょっと意味が広い感じはする
747デフォルトの名無しさん
2022/06/20(月) 13:11:27.43ID:bsAvnwWF 関数オーバーロードをありがたがってるのはジャバの連中だけ
748デフォルトの名無しさん
2022/06/20(月) 15:32:26.58ID:nUFjxYTv 論理値は非古典論理の値も含むからさらに広いな。
749デフォルトの名無しさん
2022/06/20(月) 15:34:13.37ID:rudBfZT/750デフォルトの名無しさん
2022/06/20(月) 16:12:28.65ID:Wp6+mQEy751デフォルトの名無しさん
2022/06/20(月) 16:33:57.18ID:vXHoc6MR どうでもいいけどwasmerがaarch64 完全対応したということで、rust+wasm+wasmerでcliを試してみたけど完全にただのjavaで草生えた
752はちみつ餃子 ◆8X2XSCHEME
2022/06/20(月) 16:55:48.44ID:6BcBi/VL Wasm は JVM より低レイヤ寄りだから設計思想は違うんだが……。
でも Java がやってた領域をかなり奪うとは思う。
Android で JVM を使っている部分を Wasm に置き換えたような OS とかもその内に出てくるんじゃないかね?
でも Java がやってた領域をかなり奪うとは思う。
Android で JVM を使っている部分を Wasm に置き換えたような OS とかもその内に出てくるんじゃないかね?
753デフォルトの名無しさん
2022/06/20(月) 17:33:23.64ID:ib2o9qWW 個人的にWasmよりもTauriの方が開発環境構築がめちゃ楽でシンプルだから好き
クロプラの一番の課題って今も昔も設定の煩わしさだよね俺はconfigマスターになりたいわけじゃねーんだよ!
モバイル対応がまだだけどちゃんと予定はあるからTauriが流行ってほしいな
クロプラの一番の課題って今も昔も設定の煩わしさだよね俺はconfigマスターになりたいわけじゃねーんだよ!
モバイル対応がまだだけどちゃんと予定はあるからTauriが流行ってほしいな
754デフォルトの名無しさん
2022/06/20(月) 17:52:06.79ID:cgMFd80D wasmとtauriって別にそういう競合するポジションとかじゃなくね?
755デフォルトの名無しさん
2022/06/20(月) 17:55:14.20ID:JDT/MbKD Tauriはただのwasmのレンダラーだよ。Chromium内蔵をやめて実装をRustにしたElectron。
wasmerはレンダラーしないwasm実行環境。
wasmerはレンダラーしないwasm実行環境。
756デフォルトの名無しさん
2022/06/20(月) 17:56:48.16ID:E2oosySA757はちみつ餃子 ◆8X2XSCHEME
2022/06/20(月) 18:19:59.87ID:6BcBi/VL >>756
論理和・論理積に対応する英語は logical disjunction / logical conjunction であって、 logical or / logical and ではない。
(でも演算子として OR / AND を使った表記をすることはよくあるし……。 カジュアルな場面では曖昧だったりするのかな?)
logical or / logical and は bitwise or / bitwise and と区別するために新しく作られたプログラミング用語として考えるべきで、
もちろん過去からの様々な分野の用語を踏襲してはいるにしてもあまり対応づけて考える必要はないと思う。
bool は人名 (固有名詞) に由来するんだからそのままブール値と訳すのに一票。
論理和・論理積に対応する英語は logical disjunction / logical conjunction であって、 logical or / logical and ではない。
(でも演算子として OR / AND を使った表記をすることはよくあるし……。 カジュアルな場面では曖昧だったりするのかな?)
logical or / logical and は bitwise or / bitwise and と区別するために新しく作られたプログラミング用語として考えるべきで、
もちろん過去からの様々な分野の用語を踏襲してはいるにしてもあまり対応づけて考える必要はないと思う。
bool は人名 (固有名詞) に由来するんだからそのままブール値と訳すのに一票。
758デフォルトの名無しさん
2022/06/20(月) 18:37:04.96ID:E2oosySA >>757
まずRustを含めてプログラミング用語の話においてのみboolが出てくるのだから他へ話を広げる必要なし
次にbitwise andに対してboolean andと言わずにlogical andと用いられているのはlogicalが説明としても用語としても妥当であるため
日本語としてもカタカナ訳語を使う必要はなく論理値や論理演算子でよいのではないかな
まずRustを含めてプログラミング用語の話においてのみboolが出てくるのだから他へ話を広げる必要なし
次にbitwise andに対してboolean andと言わずにlogical andと用いられているのはlogicalが説明としても用語としても妥当であるため
日本語としてもカタカナ訳語を使う必要はなく論理値や論理演算子でよいのではないかな
759デフォルトの名無しさん
2022/06/20(月) 18:41:04.35ID:cgMFd80D 自転車置き場の議論楽しいんんねええええ
760デフォルトの名無しさん
2022/06/20(月) 18:45:53.95ID:fDP2JAl4 Tauriのモバイル対応はwasmのUIフレームワークの整備が進んでいないから、まだいいかな
このままモバイル対応しても、せいぜいReact Native アプリのバックエンドがwasmになって実行速度を少し改善するくらい
全てはWASM実装可能なUIフレームワークの成長次第だから、Yewは頑張ってくれ!
このままモバイル対応しても、せいぜいReact Native アプリのバックエンドがwasmになって実行速度を少し改善するくらい
全てはWASM実装可能なUIフレームワークの成長次第だから、Yewは頑張ってくれ!
761デフォルトの名無しさん
2022/06/20(月) 18:51:29.68ID:vXHoc6MR もしreact 自体をウェブアセンブリとしてビルドできたら、、革命起きそう
762デフォルトの名無しさん
2022/06/20(月) 19:08:40.42ID:MJF5Q/rm763デフォルトの名無しさん
2022/06/20(月) 19:10:28.51ID:Lqu2R1w+ Reactはもういいよウェブベースのクロプラフロントエンドフレームワークの問題を凝縮した実装だから早く消えてほしい
ライフサイクルと状態管理を開発者に丸投げすることを正当化させた罪は重い
MSのオールインワンな開発環境がエンタープライズ分野で今でも支持される理由ってここだと思う
ライフサイクルと状態管理を開発者に丸投げすることを正当化させた罪は重い
MSのオールインワンな開発環境がエンタープライズ分野で今でも支持される理由ってここだと思う
764デフォルトの名無しさん
2022/06/20(月) 19:13:28.43ID:j7veV6LL MSのweb開発フレームワークとプラットフォームはくそじゃん
765デフォルトの名無しさん
2022/06/20(月) 19:27:45.70ID:JN5oCIkY766デフォルトの名無しさん
2022/06/20(月) 21:40:21.97ID:W1rh1Xym >>755
ん?言ってる意味がわからないんだけどTauriのUIレンダリングプロセスはJS/TS/ReactなんかのウェブベースのフロントエンドFWだが?
Chromiumやnode.jsをバイナリに含めずプラットフォームのWebView(WenKit)を使うからサイズが小さいのだが?
レンダラーがWasmってどういうこと?具体的かつ納得できる説明よろ
ん?言ってる意味がわからないんだけどTauriのUIレンダリングプロセスはJS/TS/ReactなんかのウェブベースのフロントエンドFWだが?
Chromiumやnode.jsをバイナリに含めずプラットフォームのWebView(WenKit)を使うからサイズが小さいのだが?
レンダラーがWasmってどういうこと?具体的かつ納得できる説明よろ
767はちみつ餃子 ◆8X2XSCHEME
2022/06/20(月) 21:43:08.29ID:6BcBi/VL DOM (またはそれの元になる html や JavaScript とかも含むのかも?) を生成することをレンダリングと呼ぶ界隈が存在するぞい。
768デフォルトの名無しさん
2022/06/20(月) 22:04:16.75ID:x7QB4AuO769デフォルトの名無しさん
2022/06/20(月) 22:08:03.20ID:j7veV6LL その前に
> レンダラーがWasmってどういうこと?
誰もこんなこと言って無くね?
> レンダラーがWasmってどういうこと?
誰もこんなこと言って無くね?
770デフォルトの名無しさん
2022/06/20(月) 22:20:30.26ID:G0GSIi1k 「wasmのレンダラー」の意味不明度が高すぎて混乱しているのだろう……
771デフォルトの名無しさん
2022/06/20(月) 22:33:21.69ID:vXHoc6MR wasmのレンダラーっていうのはtauri+yewの組み合わせなら間違ってないよ
彼はtauriがreactやvueもレンダリングできるってことを言いたいんじゃないの?
tauriはwebviewのrustやjavascriptのバインディングを提供するフレームワークだと自分は解釈してる
彼はtauriがreactやvueもレンダリングできるってことを言いたいんじゃないの?
tauriはwebviewのrustやjavascriptのバインディングを提供するフレームワークだと自分は解釈してる
772デフォルトの名無しさん
2022/06/20(月) 22:43:18.28ID:vXHoc6MR ちなみにjavascriptバインディングの無い既出の"web-view"ってのがcrate.ioにある
こっちは正真正銘wasmのレンダラーよ
https://crates.io/crates/web-view
こっちは正真正銘wasmのレンダラーよ
https://crates.io/crates/web-view
773デフォルトの名無しさん
2022/06/20(月) 22:49:34.14ID:RTpsTrZi だからwasmのレンダラーっていう書き方が悪いだろうよ
頭の悪いひとたちのために「wasmをレンダーするひと」って書け
頭の悪いひとたちのために「wasmをレンダーするひと」って書け
774デフォルトの名無しさん
2022/06/20(月) 22:54:18.58ID:X5CbdNui Tauri can render JavaScript and WASM and more.
ほら、これでいいか?
ほら、これでいいか?
775デフォルトの名無しさん
2022/06/20(月) 22:57:56.00ID:nM7DxFpE UIフレームワークの話なんか何が面白いの?
776デフォルトの名無しさん
2022/06/20(月) 23:01:44.97ID:DwXFtGxu さあ?
777デフォルトの名無しさん
2022/06/20(月) 23:01:47.43ID:FYZjQUUW778デフォルトの名無しさん
2022/06/20(月) 23:06:38.97ID:FiNSG1Db まあフロントやらずにバックだけ開発の人には関係ない話だな
779デフォルトの名無しさん
2022/06/20(月) 23:12:11.87ID:2JvwDfXO 違う話題って事で
「Rust for Rustaseans」って本めっちゃいいぞ
オライリー本やThe Bookの入門レベルを終えてある程度Rustでプログラム書いた後に読むといい
「Rust for Rustaseans」って本めっちゃいいぞ
オライリー本やThe Bookの入門レベルを終えてある程度Rustでプログラム書いた後に読むといい
780デフォルトの名無しさん
2022/06/20(月) 23:14:12.29ID:2JvwDfXO スペル間違ってた
恥ずい
恥ずい
781デフォルトの名無しさん
2022/06/20(月) 23:19:15.21ID:j7veV6LL >>779
なかなかそのレベルまで遠いんだろうな
なかなかそのレベルまで遠いんだろうな
782デフォルトの名無しさん
2022/06/21(火) 01:19:44.55ID:rZ1ZoU3X >>773 >>774
二人ともおかしい
wasmをレンダーすることはない
一般的にレンダリングとは抽象データから実データを生成すること
今回はTauriの話のようだからレンダリングは2階層あって
1つはTauri上で作るアプリが自分のデータからDOM(HTML)を生成するレンダリング
もう1つはTauri自体がそのDOM(HTML)からコンピューター画面へ描画生成するレンダリング
wasmが関係するとしたら前者
つまりwasm上で動くアプリがDOMを生成するレンダリング
wasmを使わない昔からのやり方ではJavaScript上で動くアプリがレンダリング
つまり対比点はwasmがレンダーするかJavaScriptがレンダーするか、とも言えることから
>>766
> レンダラーがWasmってどういうこと?
ここへ繋がるのではないかと推測
つまりRustコードを書くだけでアプリ作成を完結できるか否かの話にみえる
二人ともおかしい
wasmをレンダーすることはない
一般的にレンダリングとは抽象データから実データを生成すること
今回はTauriの話のようだからレンダリングは2階層あって
1つはTauri上で作るアプリが自分のデータからDOM(HTML)を生成するレンダリング
もう1つはTauri自体がそのDOM(HTML)からコンピューター画面へ描画生成するレンダリング
wasmが関係するとしたら前者
つまりwasm上で動くアプリがDOMを生成するレンダリング
wasmを使わない昔からのやり方ではJavaScript上で動くアプリがレンダリング
つまり対比点はwasmがレンダーするかJavaScriptがレンダーするか、とも言えることから
>>766
> レンダラーがWasmってどういうこと?
ここへ繋がるのではないかと推測
つまりRustコードを書くだけでアプリ作成を完結できるか否かの話にみえる
783デフォルトの名無しさん
2022/06/21(火) 01:28:03.75ID:rVN8NDnU784デフォルトの名無しさん
2022/06/21(火) 01:29:27.34ID:l/hCBOZ3 今スレの怪文書頂上決戦
52 デフォルトの名無しさん sage 2022/05/16(月) 19:06:18.85 ID:78bNbDCr
>>49
デタラメすぎ
ムーブでビットパターンのコピーは発生しない
ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない
さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる
Copyのコピーはディープであって高コスト
755 デフォルトの名無しさん sage 2022/06/20(月) 17:55:14.20 ID:JDT/MbKD
Tauriはただのwasmのレンダラーだよ。Chromium内蔵をやめて実装をRustにしたElectron。
wasmerはレンダラーしないwasm実行環境。
52 デフォルトの名無しさん sage 2022/05/16(月) 19:06:18.85 ID:78bNbDCr
>>49
デタラメすぎ
ムーブでビットパターンのコピーは発生しない
ビットパターンのコピーが発生するのは引数の値渡し等であってムーブとは関係ない
さらに引数の値渡しでのでビットパターンのコピーとCopyのコピーも全く異なる
Copyのコピーはディープであって高コスト
755 デフォルトの名無しさん sage 2022/06/20(月) 17:55:14.20 ID:JDT/MbKD
Tauriはただのwasmのレンダラーだよ。Chromium内蔵をやめて実装をRustにしたElectron。
wasmerはレンダラーしないwasm実行環境。
785デフォルトの名無しさん
2022/06/21(火) 08:26:51.74ID:82ugTJay TauriはJavaScriptやWebAssemblyをWebViewが理解できる機械語に変換するライブラリじゃないの?
786デフォルトの名無しさん
2022/06/21(火) 08:42:00.86ID:X7xq+hMN オーバーロードがなぜ出来ないかって、型推論の完全性が失われるからじゃないの?
787デフォルトの名無しさん
2022/06/21(火) 08:56:29.88ID:TERGIQkG taui+webview==web rendererであってtaui≠=web rendererだから。
だからtauiがwasmやjavascript のrendererというのは間違い。
tauiを媒介したwebviewがwasmやjavascriptのrendererだから。
だからtauiがwasmやjavascript のrendererというのは間違い。
tauiを媒介したwebviewがwasmやjavascriptのrendererだから。
788デフォルトの名無しさん
2022/06/21(火) 08:59:28.38ID:vO+TReRM 俺はフロントエンドやらないからこのスレでTauriの話をしないでくれ
789デフォルトの名無しさん
2022/06/21(火) 09:03:37.95ID:E/HTpvzq renderやらrendererやら、レンダーやらレンダラーやら、ややこしいなおい
790デフォルトの名無しさん
2022/06/21(火) 09:08:13.67ID:OsotcMPi オーバーロードは無くていい派
791デフォルトの名無しさん
2022/06/21(火) 09:17:14.76ID:rK2P992k ジェネリクスで表現できるくらいの自明なものはオーバーロードしてもいいけど
それ以上に挙動が変わるなら名前変えたほうがいいと思ってるから
結局オーバーロードは無くていいかな
それ以上に挙動が変わるなら名前変えたほうがいいと思ってるから
結局オーバーロードは無くていいかな
792デフォルトの名無しさん
2022/06/21(火) 09:18:38.16ID:LcZeBWSd オーバーロードできないのは違和感あるけどすぐ慣れるぞ。頑張れ。
793デフォルトの名無しさん
2022/06/21(火) 09:27:48.90ID:e1jAZPeO >>784
言ってる本人が理解してないだけでwasmレンダラーって言い方はあるよ
言ってる本人が理解してないだけでwasmレンダラーって言い方はあるよ
794デフォルトの名無しさん
2022/06/21(火) 09:38:22.89ID:TERGIQkG TauriがElectronみたいにWebViewを内蔵してないから、TauriがWASMのレンダラーって勘違いしちゃったってことだな
よし解決したなUIの話はもう十分だろ
よし解決したなUIの話はもう十分だろ
795デフォルトの名無しさん
2022/06/21(火) 09:48:41.18ID:aUxUUrSq 古今東西ウェブのレンダラーってレンダリングエンジンのことじゃん
んで歴史あるASPを例にMS公式の解説を引用するならDSLのようにHTMLコードに変換(=レンダリング)する処理系ってことだよ
wasmモジュール(バイナリ)に変換するためのレンダラーはEmscriptenだからwasmがレンダラーって認識は間違い
んで歴史あるASPを例にMS公式の解説を引用するならDSLのようにHTMLコードに変換(=レンダリング)する処理系ってことだよ
wasmモジュール(バイナリ)に変換するためのレンダラーはEmscriptenだからwasmがレンダラーって認識は間違い
796デフォルトの名無しさん
2022/06/21(火) 09:58:17.91ID:4fSeXEQO なぜそこでemscriptenが出てくるんだ?
797デフォルトの名無しさん
2022/06/21(火) 10:01:09.64ID:4fSeXEQO いい加減「wasmのレンダラー」を「wasmがレンダラー」と読むのやめたら?
798デフォルトの名無しさん
2022/06/21(火) 10:03:06.58ID:4fSeXEQO 「wasmのレンダラー」は、wasmでビルドされたレンダラーじゃなくて、wasmバイナリを読み込むことができるレンダラーってことじゃないの?
799デフォルトの名無しさん
2022/06/21(火) 10:04:20.02ID:lcATvJP3 >>795
それは視野が狭い
例えばウェブ業界でCSR(client side rendering)やSSR(server side rendering)と言うときのレンダリングとはHTML/DOMを生成することを指す
CSRはブラウザ等の中でそれを行なうのでReact等ではJavaScriptでレンダリングをするしYew等ではWasm/Rustでレンダリングする
つまりWasmでレンダリングするということはTauriでは全てのコードをRustで書けることになる
それは視野が狭い
例えばウェブ業界でCSR(client side rendering)やSSR(server side rendering)と言うときのレンダリングとはHTML/DOMを生成することを指す
CSRはブラウザ等の中でそれを行なうのでReact等ではJavaScriptでレンダリングをするしYew等ではWasm/Rustでレンダリングする
つまりWasmでレンダリングするということはTauriでは全てのコードをRustで書けることになる
800デフォルトの名無しさん
2022/06/21(火) 10:09:54.89ID:l/hCBOZ3 cssを読み込んで適用できるからってわざわざそのレンダリングエンジンのことをcssレンダラーって呼ぶことがあるか?
801デフォルトの名無しさん
2022/06/21(火) 10:11:12.61ID:5vOFCGpG >>797
Rust使いはASTまでは構築できてもそこから意味理解が弱いんだろうな
Rust使いはASTまでは構築できてもそこから意味理解が弱いんだろうな
802デフォルトの名無しさん
2022/06/21(火) 10:12:25.82ID:D95D9dWE きみたちは一度これを読んだほうがいい
Rust GUI の決定版! Tauri を使ってクロスプラットフォームなデスクトップアプリを作ろう
Chapter 03 Tauri の概要
https://zenn.dev/kumassy/books/6e518fe09a86b2/viewer/168468
より
アーキテクチャ
Tauri のアーキテクチャを図示すると、次のようになります
https://storage.googleapis.com/zenn-user-upload/e215aef57b0a-20220610.png
Core Process はアプリケーション全体のライフサイクル管理を行ったり、 OS のインターフェース(メニューや通知など)の操作、 WebView Process の管理などを行います。
Core Process のコードは Rust で記述されるので、標準ライブラリも crate.io で公開されているライブラリも利用できます。 Tauri は非同期ランタイムとして tokio を利用しているので、非同期 Rust も使えます! Rust のコードはアプリケーションのビルド時にネイティブコードにコンパイルされるので、高速に動作します
WebView Process は Web コンテンツのレンダリングを行うプロセスです。通常の Web ページと同様に、 index.html, JavaScript, CSS から構成されて、 wry にラップされた WebView で動作します。
Tauri の JavaScript API を利用することで、 Core Process と通信したり、ファイルシステムにアクセスしたり、通知を表示する、などの操作が可能です。
WebView Process から WebView のサンドボックスを超えていろいろな操作できてしまうとセキュリティ上問題になることがあります。そこで、 tauri では JavaScript API で利用する API を allowlist に明示的に記述する必要があります。 Electron では preload スクリプトによって Renderer Process に公開する API を制限できましたが、同様の仕組みは allowlist で実現できます。
Tauri でアプリケーションを作ると Electron とは違い、 Chromium と Node.js 実行環境をバンドルする必要がないので、アプリケーションのサイズを小さく保つことができます
Rust GUI の決定版! Tauri を使ってクロスプラットフォームなデスクトップアプリを作ろう
Chapter 03 Tauri の概要
https://zenn.dev/kumassy/books/6e518fe09a86b2/viewer/168468
より
アーキテクチャ
Tauri のアーキテクチャを図示すると、次のようになります
https://storage.googleapis.com/zenn-user-upload/e215aef57b0a-20220610.png
Core Process はアプリケーション全体のライフサイクル管理を行ったり、 OS のインターフェース(メニューや通知など)の操作、 WebView Process の管理などを行います。
Core Process のコードは Rust で記述されるので、標準ライブラリも crate.io で公開されているライブラリも利用できます。 Tauri は非同期ランタイムとして tokio を利用しているので、非同期 Rust も使えます! Rust のコードはアプリケーションのビルド時にネイティブコードにコンパイルされるので、高速に動作します
WebView Process は Web コンテンツのレンダリングを行うプロセスです。通常の Web ページと同様に、 index.html, JavaScript, CSS から構成されて、 wry にラップされた WebView で動作します。
Tauri の JavaScript API を利用することで、 Core Process と通信したり、ファイルシステムにアクセスしたり、通知を表示する、などの操作が可能です。
WebView Process から WebView のサンドボックスを超えていろいろな操作できてしまうとセキュリティ上問題になることがあります。そこで、 tauri では JavaScript API で利用する API を allowlist に明示的に記述する必要があります。 Electron では preload スクリプトによって Renderer Process に公開する API を制限できましたが、同様の仕組みは allowlist で実現できます。
Tauri でアプリケーションを作ると Electron とは違い、 Chromium と Node.js 実行環境をバンドルする必要がないので、アプリケーションのサイズを小さく保つことができます
803デフォルトの名無しさん
2022/06/21(火) 10:30:52.39ID:ZcKPa2VS >>751 の、WASI実装のwasmerによるrustのVM言語化の話は興味深いけど、GUIフレームワークTauriの話はいい加減スレチ
Electronスレにでも行って議論してくれ
Electronスレにでも行って議論してくれ
804デフォルトの名無しさん
2022/06/21(火) 10:39:20.05ID:lcATvJP3 >>802にあるようにHTML/DOMから画面へのレンダリングはWebViewがしてくれるからアプリ開発者は関与しない
アプリ開発者が関与するのはアプリデータからHTML/DOMへのレンダリング部分のコードを書くこと
この点はWeb開発でもTauriでも同じ
アプリ開発者が関与するのはアプリデータからHTML/DOMへのレンダリング部分のコードを書くこと
この点はWeb開発でもTauriでも同じ
805デフォルトの名無しさん
2022/06/21(火) 11:04:51.42ID:uvaWF54t 結局怪文書の出どころはいつものオジだったww
いい加減聞きかじりで知ったかぶりするのやめたら?
いい加減聞きかじりで知ったかぶりするのやめたら?
806デフォルトの名無しさん
2022/06/21(火) 11:08:08.11ID:g+0qioKO 間違いを指摘してくれる人が周りにいないんだろうな
807デフォルトの名無しさん
2022/06/21(火) 11:11:56.32ID:RyNZqEbO IDコロコロしないでほしいわせめて
コテハンつけてくれたらNG捗るのになあ
「所有権の複製」のときから思ってたけど
コテハンつけてくれたらNG捗るのになあ
「所有権の複製」のときから思ってたけど
808デフォルトの名無しさん
2022/06/21(火) 11:13:49.44ID:7sQPW1UK tauriでNGすればおけ
809デフォルトの名無しさん
2022/06/21(火) 11:26:02.71ID:l/hCBOZ3 じゃあ次スレこそはワッチョイつけようか
810デフォルトの名無しさん
2022/06/21(火) 11:28:36.35ID:pS+FR3pl811デフォルトの名無しさん
2022/06/21(火) 11:38:04.80ID:mlYOyxJ9812デフォルトの名無しさん
2022/06/21(火) 11:49:09.87ID:GSNSCBV0 論理構成が薄弱で常に自己正当化するためだけにレスを重ねる人は相手にしちゃダメなんだよ
特にほぼすべてのレスで相手を否定する言葉から始める人はある種の病気だと思って対処した方がいい
論理的な批判に耳を貸す相手じゃないから
特にほぼすべてのレスで相手を否定する言葉から始める人はある種の病気だと思って対処した方がいい
論理的な批判に耳を貸す相手じゃないから
813デフォルトの名無しさん
2022/06/21(火) 11:55:22.58ID:RyNZqEbO コテハンつけてくれるんなら
俺は今後一切複製クンを馬鹿にしないし
むしろ尊敬するから頼むからつけてほしい
俺は今後一切複製クンを馬鹿にしないし
むしろ尊敬するから頼むからつけてほしい
814デフォルトの名無しさん
2022/06/21(火) 12:14:34.84ID:l/hCBOZ3 >>980
ワッチョイついでで思い出したけどvs C++へのリンクは落ちてるから消しといてくれ
ワッチョイついでで思い出したけどvs C++へのリンクは落ちてるから消しといてくれ
815デフォルトの名無しさん
2022/06/22(水) 07:37:30.53ID:EdrHrSzx >>719
これ和製英語もそうだが和製発音も相当やばいよ
今ホットなウクライナがバリバリの和製発音でUkraineって本来ユークレインて発音するからな
英語できないでボランティア行ったやつウクライナ!ウクライナ!って全く通じない発音を連呼してたかと思うとはこっちが恥ずかしくてまさにもう見てらんない!
いい加減に読みも発音もグローバルスタンダードにしろっつーの何でもかんでもガラパゴスなの頭悪すぎる
これ和製英語もそうだが和製発音も相当やばいよ
今ホットなウクライナがバリバリの和製発音でUkraineって本来ユークレインて発音するからな
英語できないでボランティア行ったやつウクライナ!ウクライナ!って全く通じない発音を連呼してたかと思うとはこっちが恥ずかしくてまさにもう見てらんない!
いい加減に読みも発音もグローバルスタンダードにしろっつーの何でもかんでもガラパゴスなの頭悪すぎる
816デフォルトの名無しさん
2022/06/22(水) 07:45:18.19ID:qSL2YnBO だからなに
817デフォルトの名無しさん
2022/06/22(水) 08:24:23.86ID:s09CCxIL >>815
ウィーンをヴィエナって言えってか?
ウィーンをヴィエナって言えってか?
818デフォルトの名無しさん
2022/06/22(水) 08:24:47.41ID:48p4Di1y 頭悪くても使えりゃいい
819デフォルトの名無しさん
2022/06/22(水) 10:01:54.69ID:U3SsHgc3 >>815
強いて言えばウクライーナってくらいで和製発音じゃないから通じるよ
日本は英米と違って中華系の地名・名前以外は現地発音に寄せてるものが多い
中華系は日本語漢字読みだと外国人には全く通じない(中国人・台湾人なら漢字で書けば通じる)
Rustも最初はルーストって発音してる人いたよね
Scalaをスケイラとかも
強いて言えばウクライーナってくらいで和製発音じゃないから通じるよ
日本は英米と違って中華系の地名・名前以外は現地発音に寄せてるものが多い
中華系は日本語漢字読みだと外国人には全く通じない(中国人・台湾人なら漢字で書けば通じる)
Rustも最初はルーストって発音してる人いたよね
Scalaをスケイラとかも
820デフォルトの名無しさん
2022/06/22(水) 10:12:00.42ID:kKprzj+b いや通じないんだなこれがアジアの英語圏ですら通じないんですよ嘘吐いちゃダメよ
公用語が英語のフィリピンのマックやスタバで日本人のゴミ英語が一切通じない現実から目を背けるな
特にプログラミングの世界でどれだけ日本語の意訳が学習の障害になってきた・なっているか
超基本の代入を例に挙げてもわかるせめてアサイン or アサインメントってカタカナにすれば超理解し易いのに代入?ってなるよ代入って意訳した奴は大馬鹿だよ
公用語が英語のフィリピンのマックやスタバで日本人のゴミ英語が一切通じない現実から目を背けるな
特にプログラミングの世界でどれだけ日本語の意訳が学習の障害になってきた・なっているか
超基本の代入を例に挙げてもわかるせめてアサイン or アサインメントってカタカナにすれば超理解し易いのに代入?ってなるよ代入って意訳した奴は大馬鹿だよ
821デフォルトの名無しさん
2022/06/22(水) 10:23:30.15ID:li50soYi エビデンスを出せ
822デフォルトの名無しさん
2022/06/22(水) 10:41:03.57ID:k8vtEW7h 英語カーンプレクスをこじらせちゃってるね
823デフォルトの名無しさん
2022/06/22(水) 10:50:41.07ID:LE1FQ2Yx ラストは日本語識別子も使えるから色々大丈夫
824デフォルトの名無しさん
2022/06/22(水) 10:54:46.62ID:QEBJj1WM フィリピン人のオンライン英会話レッスンで
ウクライナが通じなくて恥ずかしかったんだなきっと
気持ちはわからなくはないが恥ずかしがることではないよ
ウクライナが通じなくて恥ずかしかったんだなきっと
気持ちはわからなくはないが恥ずかしがることではないよ
825デフォルトの名無しさん
2022/06/22(水) 11:04:11.24ID:SASaungr 触れちゃいけない人だろ
面倒だからそのくらいにしとけ
面倒だからそのくらいにしとけ
826デフォルトの名無しさん
2022/06/22(水) 11:54:59.01ID:TXCOqcCS 論破されると変人扱いでシカトとかまんま陰キャチー牛オタクで草
プロジェクトが炎上する理由てこういうプログラマーの癖に論理じゃなくて感情で他人の足引っ張るの大好きな馬鹿が原因なんだよな
プロジェクトが炎上する理由てこういうプログラマーの癖に論理じゃなくて感情で他人の足引っ張るの大好きな馬鹿が原因なんだよな
827デフォルトの名無しさん
2022/06/22(水) 12:16:04.88ID:vkSjQpLZ 早口ですね
828デフォルトの名無しさん
2022/06/22(水) 12:53:20.15ID:KbrpK4gE ID変わっちゃうのは仕方がないことだからコテハンつけてくれ
829デフォルトの名無しさん
2022/06/22(水) 12:55:32.81ID:PETcyPz4 俺の場合、英語だと何倍も読むのに時間がかかったり、わからない単語や言い回しがあったりするので和訳はありがたいんだけど・・・・
ただ専門用語については、英語でなんて言うのかを併記して欲しいな
後に調べるのが大変になってしまう
上で騒いでる発音に関しては、まあ学習の上ではあんまり問題ないね
ただ専門用語については、英語でなんて言うのかを併記して欲しいな
後に調べるのが大変になってしまう
上で騒いでる発音に関しては、まあ学習の上ではあんまり問題ないね
830デフォルトの名無しさん
2022/06/22(水) 14:09:24.45ID:jR4emiFb 発音か…
もう長いこと勉強したことないな
発音勉強するいいサイトないの?(スレチ)
もう長いこと勉強したことないな
発音勉強するいいサイトないの?(スレチ)
831デフォルトの名無しさん
2022/06/22(水) 14:40:24.01ID:NTc30+P3 そこにyoutubeがあるだろ
832デフォルトの名無しさん
2022/06/22(水) 15:11:02.84ID:iqmSmX2L ヨーロッパの地名も日本語は英語よりまともなことが多い。現地語をカナカナに当てはめちゃってるので発音は違うけど。
パリ、パリス
ローマ、ローム
フィレンツェ、フローレンス
パリ、パリス
ローマ、ローム
フィレンツェ、フローレンス
833デフォルトの名無しさん
2022/06/22(水) 15:24:30.47ID:UvvJO3VG おまいらどれを読み間違っていたか正直に言いなさい
height
width
adjust
false
queue
deque
lambda
column
char
height
width
adjust
false
queue
deque
lambda
column
char
834デフォルトの名無しさん
2022/06/22(水) 15:32:22.45ID:hyphYc1n >>815
そこは英語できないじゃなくて、English出来ないだろ!
そこは英語できないじゃなくて、English出来ないだろ!
835デフォルトの名無しさん
2022/06/22(水) 15:37:13.88ID:KbrpK4gE ここまで自分以外単発
836デフォルトの名無しさん
2022/06/22(水) 15:42:45.07ID:2oX7OuW7 欧米のひとなんて日本をジャパンとかいう謎の呼び方するじゃん
837デフォルトの名無しさん
2022/06/22(水) 16:00:46.63ID:pGATTXre 最近の言語って、代入は使う事少なく無い?
束縛って表現は、見かけるけれど。
束縛って表現は、見かけるけれど。
838デフォルトの名無しさん
2022/06/22(水) 16:01:41.99ID:/Mr2VB7b839デフォルトの名無しさん
2022/06/22(水) 16:23:49.52ID:b/qu9BCC >>833
ヘイト
ウィズス
アジャスト
フォルス
キュー
デキュー
ラムダ
ちゃー
https://www.s40otoko.com/wp-content/uploads/2020/09/char_a-sha.jpeg
ヘイト
ウィズス
アジャスト
フォルス
キュー
デキュー
ラムダ
ちゃー
https://www.s40otoko.com/wp-content/uploads/2020/09/char_a-sha.jpeg
840デフォルトの名無しさん
2022/06/22(水) 17:07:06.02ID:UvvJO3VG 基本点5点
一人目の勇気+1点
正直者+1点
ちゃーさん+2点
9点です
一人目の勇気+1点
正直者+1点
ちゃーさん+2点
9点です
841デフォルトの名無しさん
2022/06/22(水) 17:27:44.73ID:JoQ1XY7q ランブダ
コルムン
ちゃーはタムケンの方で
コルムン
ちゃーはタムケンの方で
842デフォルトの名無しさん
2022/06/22(水) 17:36:28.86ID:XpS14TAH >>833
width, deque, char
widthは発音記号(/wɪdθ/)を見て長いことウィドスっぽく発音してた
clothes /kloʊðz/とかも一緒
charとかは純粋な英語ではないからSQLと一緒で英語圏で広く使われてる発音と違ってても全然気にしない
Rustで言えばmut、impl、dyn
width, deque, char
widthは発音記号(/wɪdθ/)を見て長いことウィドスっぽく発音してた
clothes /kloʊðz/とかも一緒
charとかは純粋な英語ではないからSQLと一緒で英語圏で広く使われてる発音と違ってても全然気にしない
Rustで言えばmut、impl、dyn
843デフォルトの名無しさん
2022/06/22(水) 18:25:11.65ID:s09CCxIL844デフォルトの名無しさん
2022/06/22(水) 18:40:33.26ID:jR4emiFb845デフォルトの名無しさん
2022/06/22(水) 18:55:00.54ID:dLMOYH7h 英語なんて下層階級発音の言語をありがたがってもしょうがない。
846デフォルトの名無しさん
2022/06/22(水) 19:03:21.02ID:jR4emiFb 英語はまだ覚えやすいんだよ
他は動詞活用や時制や男性名詞や女性名詞とか覚えることがえらく多い
他は動詞活用や時制や男性名詞や女性名詞とか覚えることがえらく多い
847デフォルトの名無しさん
2022/06/22(水) 19:06:57.00ID:hL7m84GO charは英語でもチャー派とキャー派の両方いる
でも日本語ならキャラ一択だな
iterをイター、dirをダーと発音する人いないよね?
でも日本語ならキャラ一択だな
iterをイター、dirをダーと発音する人いないよね?
848デフォルトの名無しさん
2022/06/22(水) 19:10:55.28ID:2oX7OuW7 プログラミング用語は口語じゃないからな・・・
849デフォルトの名無しさん
2022/06/22(水) 19:20:27.11ID:JoQ1XY7q >>845
日本語が上級って冗談だろ?
日本語が上級って冗談だろ?
850デフォルトの名無しさん
2022/06/22(水) 19:21:33.76ID:jR4emiFb851デフォルトの名無しさん
2022/06/22(水) 19:24:37.98ID:jR4emiFb int イント イントゥ インテジャー
アイエヌティーと呼ぶ人もいるとか
アイエヌティーと呼ぶ人もいるとか
852デフォルトの名無しさん
2022/06/22(水) 19:25:49.84ID:dLMOYH7h >>849
大母音推移で調べてみ。
大母音推移で調べてみ。
853デフォルトの名無しさん
2022/06/22(水) 19:31:40.43ID:jR4emiFb 台拇印推移って英語で中世に起こったやつだろ?
854デフォルトの名無しさん
2022/06/22(水) 20:13:07.52ID:Ocz5NWuM 英語人の発音なんて知らんよ。
日本方言が標準語になるようにどんどん押し付けて行けよ。
日本方言が標準語になるようにどんどん押し付けて行けよ。
855デフォルトの名無しさん
2022/06/22(水) 20:35:42.72ID:jR4emiFb 中世に母音がずれてってスペルと発音がずれてしまった
856デフォルトの名無しさん
2022/06/22(水) 20:43:18.98ID:2oX7OuW7 ナルトとかドラゴンボールみたいな日本作品を海外放送するときに日本語っぽい発音を使わせよう
857デフォルトの名無しさん
2022/06/22(水) 23:24:21.45ID:lxH9sQqR 世界的に見ても英語は最も訛りが酷いのでそれほど気にする必要はない
アジアをエイジアと田舎訛りで発音するのも英語だけ
アジアをエイジアと田舎訛りで発音するのも英語だけ
858デフォルトの名無しさん
2022/06/22(水) 23:38:42.55ID:DzsA87OB >>836
European、American、Russianが本当の人間、〇〇〇eseは彼らの感覚では亜人種
「ese」を使って「軽くバカにする」のは「journalese」や「officialese」とう言葉です。
European、American、Russianが本当の人間、〇〇〇eseは彼らの感覚では亜人種
「ese」を使って「軽くバカにする」のは「journalese」や「officialese」とう言葉です。
859デフォルトの名無しさん
2022/06/23(木) 00:20:04.45ID:VToiRT0b tauriがcargoだけでセットアップできれば即導入するんだけどなー
860デフォルトの名無しさん
2022/06/23(木) 00:54:52.60ID:ML6XVFuw html+jsベースのアプリのネイティブのバックボーンがtauriじゃないの?
cargoでセットアップできてもあまり意味がない気がするけど
yarnとかじゃないとjsやtsのパッケージ部分がつらそう
cargoでセットアップできてもあまり意味がない気がするけど
yarnとかじゃないとjsやtsのパッケージ部分がつらそう
861デフォルトの名無しさん
2022/06/23(木) 03:24:46.64ID:sDo98BDo >>859
既に前スレで出ているように
Tauriはcargoだけで利用できます
npmやNode.jsなどのJavaScript環境は全く必要ないです
https://mevius.5ch.net/test/read.cgi/tech/1644596656/192
>>860
Webサイトを自分でJavsScript書かなくてもRustのみで構築できるように
Tauriでも同様にWasm利用のRustによるフレームワークを使ってRustのみで可能です
糊しろ部分のJavaScriptコードは自動生成されるため気にする必要がないです
既に前スレで出ているように
Tauriはcargoだけで利用できます
npmやNode.jsなどのJavaScript環境は全く必要ないです
https://mevius.5ch.net/test/read.cgi/tech/1644596656/192
>>860
Webサイトを自分でJavsScript書かなくてもRustのみで構築できるように
Tauriでも同様にWasm利用のRustによるフレームワークを使ってRustのみで可能です
糊しろ部分のJavaScriptコードは自動生成されるため気にする必要がないです
862デフォルトの名無しさん
2022/06/23(木) 03:51:12.40ID:a115LlJm Yewが1.0.0になってMaterialUIのcrateできたらやるわ
863デフォルトの名無しさん
2022/06/23(木) 04:10:46.98ID:P5woiaAK Tauri以上に未完成なYewとか本当に触るだけだなこんなので何が出来るんだよw
ツールチェインの導入だけでこのスレの99%がギブアップするな間違いない
ツールチェインの導入だけでこのスレの99%がギブアップするな間違いない
864デフォルトの名無しさん
2022/06/23(木) 07:19:44.58ID:fwy13iz2 YewはReactと比べてライフサイクルや状態管理はどうなん?
865デフォルトの名無しさん
2022/06/23(木) 07:32:21.26ID:zvsRNXTt >>862
Rustでは大半がメジャーバージョン0なのを知らないのか
例えばcargoは最新が0.62.0
1.0.0にならないから使わないのか?
Yewのmaterial UIならば material-yew crate
デモ
https://yew-material.web.app/components
>>863
ツールチェーンの変更は不要
必要なのはtargetとなるアーキテクチャのインストール
rustup target add wasm32-unknown-unknown
この1行で済むから悩むところもない
その後のbuildでのtarget指定などはtrunkで全自動化されてるから指定不要
難しいところは何もない
Rustコードを書くだけ
Rustでは大半がメジャーバージョン0なのを知らないのか
例えばcargoは最新が0.62.0
1.0.0にならないから使わないのか?
Yewのmaterial UIならば material-yew crate
デモ
https://yew-material.web.app/components
>>863
ツールチェーンの変更は不要
必要なのはtargetとなるアーキテクチャのインストール
rustup target add wasm32-unknown-unknown
この1行で済むから悩むところもない
その後のbuildでのtarget指定などはtrunkで全自動化されてるから指定不要
難しいところは何もない
Rustコードを書くだけ
866デフォルトの名無しさん
2022/06/23(木) 07:36:49.21ID:o4L2em1r867デフォルトの名無しさん
2022/06/23(木) 08:37:01.16ID:a115LlJm >>865
randとかの準標準系ライブラリはまた別かもしれないけど、semverの一般論として0.y.zは更新を追い続ける気のある暇人&人柱向けでしょうが
使ってほしかったらこんなところでレスバしてないでバグ出してパッチ書いて1.0.0リリースするの手伝いなさい
randとかの準標準系ライブラリはまた別かもしれないけど、semverの一般論として0.y.zは更新を追い続ける気のある暇人&人柱向けでしょうが
使ってほしかったらこんなところでレスバしてないでバグ出してパッチ書いて1.0.0リリースするの手伝いなさい
868デフォルトの名無しさん
2022/06/23(木) 09:13:40.00ID:YcISn7cj869デフォルトの名無しさん
2022/06/23(木) 09:56:29.17ID:ZOhmOvih まぁsemverの一般論としては1.0.0より前は互換性の制約一切ないからそれは正しいんだが
Rustの場合0.y.zの互換性について独自拡張しているから1.0.0に上げなくても問題ないというのはある
Rustの場合0.y.zの互換性について独自拡張しているから1.0.0に上げなくても問題ないというのはある
870デフォルトの名無しさん
2022/06/23(木) 10:23:14.18ID:9VaR/Lj4 YewやPerchやseedが流行るとは思えないけどねじゃあ何が流行るんだって話だけどwasm自体が流行らないと思うわ
だってどこまでいってもwasmの用途がブラウザ上で実行されるウェブアプリだからな
Electronはクロスプラットフォームなネイティブデスクトップの代替を狙って成功してそれを高速化・軽量化したTauriの方が受け入れられると思う
そもそもwasmのエコシステムが貧弱すぎてウェブで飯食ってるやつらがRust覚えるとは思えない
だってどこまでいってもwasmの用途がブラウザ上で実行されるウェブアプリだからな
Electronはクロスプラットフォームなネイティブデスクトップの代替を狙って成功してそれを高速化・軽量化したTauriの方が受け入れられると思う
そもそもwasmのエコシステムが貧弱すぎてウェブで飯食ってるやつらがRust覚えるとは思えない
871デフォルトの名無しさん
2022/06/23(木) 10:38:49.39ID:uZ5q0lb+ 若いのにバージョン8.0とかになってるライブラリよりはバージョン0.8.100なライブラリを使いたい
872デフォルトの名無しさん
2022/06/23(木) 11:02:58.65ID:t/xdYxij wasmのistioのように拡張機能を書くのに使われるんじゃないの
あとはluaの置き換えとか
ただウェブアプリなんてのはまったく理解してないアホの考えだな
俺はwebで使ってるけど
あとはluaの置き換えとか
ただウェブアプリなんてのはまったく理解してないアホの考えだな
俺はwebで使ってるけど
873デフォルトの名無しさん
2022/06/23(木) 11:08:05.69ID:YcISn7cj874デフォルトの名無しさん
2022/06/23(木) 11:21:57.80ID:LDpjmPqL まぁUnityとかLua置き換えとかそういうニッチで局所的に使われるだけだわな
それだと尚更ここでYewなんて布教してる奴はアホだって証明されちまったな
それだと尚更ここでYewなんて布教してる奴はアホだって証明されちまったな
875デフォルトの名無しさん
2022/06/23(木) 12:11:50.02ID:/pvCP+jT wasmは事実上エッジコンピューティング専用だぞ
876デフォルトの名無しさん
2022/06/23(木) 12:19:37.05ID:1B2ALjfI ちみたちが全否定してボロクソ言われてるElectronが人気出てちみたちも使ってるであろうVSCodeもElectronなのだよ
そして今ちみらが全否定しているTauriはきっと人気がでるのだ
そして今ちみらが全否定しているTauriはきっと人気がでるのだ
877デフォルトの名無しさん
2022/06/23(木) 12:28:47.04ID:XUWHXIGl >>876
C++、JavaScript、Pythonあたりのバインディングが実装されれば人気が出るかもね。
C++、JavaScript、Pythonあたりのバインディングが実装されれば人気が出るかもね。
878はちみつ餃子 ◆8X2XSCHEME
2022/06/23(木) 12:31:55.63ID:78TA9iC2879デフォルトの名無しさん
2022/06/23(木) 12:42:46.04ID:OzGiFUhU ちょっと前までRustなんて流行らないと喚いてたアホが別のところにケチをつけはじめたな
流行ってるPHPでもやっとけ
流行ってるPHPでもやっとけ
880デフォルトの名無しさん
2022/06/23(木) 12:52:55.59ID:fdtlx8br ウェブでwasmを使っているケースは増える一方
加えてCDNエッジなど含めた高速で安全な共通サンドボックスとしてもwasm採用
wasmを軽視してる人は間違いなく時代に取り残された人
加えてCDNエッジなど含めた高速で安全な共通サンドボックスとしてもwasm採用
wasmを軽視してる人は間違いなく時代に取り残された人
881デフォルトの名無しさん
2022/06/23(木) 13:27:54.60ID:xTWjwHox たしかにCloudflareとかFastlyがすでにやってるように、wasmが一番使われるのはアプリケーションのホスティング関連ではありそう
882デフォルトの名無しさん
2022/06/23(木) 14:25:29.85ID:aX6KFPJR オジ必死すぎやろww
wasmの前に汚文章を見直そうぜ
wasmの前に汚文章を見直そうぜ
883デフォルトの名無しさん
2022/06/23(木) 17:13:21.06ID:fwy13iz2 wasmは、アーキテクチャ共通の中間コードを生成する点、主要webブラウザ上では既に完璧に動作する点、当然ながらマルチスレッドに対応している点が良い
開発者側は自社スマホゲームをPWA化してアプリストア手数料を取られずに内課金を実装できる、バイナリだから難読化済み、アプリ動作も高速と、いいこと尽くめ
開発者側は自社スマホゲームをPWA化してアプリストア手数料を取られずに内課金を実装できる、バイナリだから難読化済み、アプリ動作も高速と、いいこと尽くめ
884デフォルトの名無しさん
2022/06/23(木) 17:38:33.22ID:fwy13iz2 wasmについての記事はこれがわかりやすい
https://qiita.com/t_katsumura/items/ff379aaaba6931aad1c4
https://qiita.com/t_katsumura/items/ff379aaaba6931aad1c4
885デフォルトの名無しさん
2022/06/23(木) 17:48:19.80ID:mKYvHwUN アプリをPWAにして独自決済にすれば手数料を取られない!ギャグだろwww
え?ここってホビープログラマーがオナニー見せつけて気持ち良くなるレベルのスレだったっけ?www
WASMガイジが暴れて出して何かと思ったらお花畑でクッソワロタ
え?ここってホビープログラマーがオナニー見せつけて気持ち良くなるレベルのスレだったっけ?www
WASMガイジが暴れて出して何かと思ったらお花畑でクッソワロタ
886デフォルトの名無しさん
2022/06/23(木) 17:49:46.75ID:OrheE29P 無知がバレたから話をそらして挽回しようとするアホの図
887デフォルトの名無しさん
2022/06/23(木) 17:59:44.02ID:fwy13iz2 気を悪くさせたのなら申し訳ない
888デフォルトの名無しさん
2022/06/23(木) 18:01:07.00ID:fwy13iz2 個人的には審査の通らないスマホエロゲとか発展しそうでいいかと思ったんだけど
889デフォルトの名無しさん
2022/06/23(木) 18:22:09.53ID:D2eUSbXw 散々wasmを誉めそやして語って布教した結論がスマホエロゲ
5chで他言語を見下してドヤ顔してるRustスレの奴等なんて所詮こういう陰キャチー牛エロゲオタで草
5chで他言語を見下してドヤ顔してるRustスレの奴等なんて所詮こういう陰キャチー牛エロゲオタで草
890デフォルトの名無しさん
2022/06/23(木) 18:24:46.62ID:2tFofWlQ このスレでRustスゲーするのは理解できる
wasmスゲーは違うかと
wasmスゲーは違うかと
891デフォルトの名無しさん
2022/06/23(木) 18:35:17.77ID:fwy13iz2892デフォルトの名無しさん
2022/06/23(木) 18:43:49.69ID:/gLCWYHm エロは儲かる
893デフォルトの名無しさん
2022/06/23(木) 20:11:26.77ID:fdtlx8br wasmを使うならRustだからだろう
GC言語では本末転倒
C++よりRustという当たり前の結果
> https://www.atmarkit.co.jp/ait/articles/2107/08/news112.html
> 「WebAssemblyアプリケーションの作成に使用している言語は何か」と質問したところ、Rustが最も多くの回答を集めた。
> 「WebAssemblyアプリケーションの作成に今後最も使用したい言語は何か」という質問でも、Rustを挙げた回答が最も多かった。
GC言語では本末転倒
C++よりRustという当たり前の結果
> https://www.atmarkit.co.jp/ait/articles/2107/08/news112.html
> 「WebAssemblyアプリケーションの作成に使用している言語は何か」と質問したところ、Rustが最も多くの回答を集めた。
> 「WebAssemblyアプリケーションの作成に今後最も使用したい言語は何か」という質問でも、Rustを挙げた回答が最も多かった。
894はちみつ餃子 ◆8X2XSCHEME
2022/06/23(木) 20:17:33.07ID:78TA9iC2 Wasm の側に GC を入れる提案も出てはいるので将来的にはどうなるかわからんぞ。
895デフォルトの名無しさん
2022/06/23(木) 21:05:12.10ID:0lumrgPj >>873
1.0未満のバージョンって仕様自体fixしてなくて予告なく破壊的変更入る可能性があるのが普通だと思ってた。
1.0未満のバージョンって仕様自体fixしてなくて予告なく破壊的変更入る可能性があるのが普通だと思ってた。
896デフォルトの名無しさん
2022/06/23(木) 23:25:11.97ID:isDmg9ti 窓の杜: C++言語によるお嬢様コーディングがブームの兆し!?.
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1419370.html
メモリをしっかりお片付けなさりたいのならRustを使いませんこと?
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1419370.html
メモリをしっかりお片付けなさりたいのならRustを使いませんこと?
897デフォルトの名無しさん
2022/06/23(木) 23:27:10.78ID:yevGv1hT お嬢様コーディングなんて流行ってねえよ
お嬢様言葉自体流行ってないのに
お嬢様言葉自体流行ってないのに
898デフォルトの名無しさん
2022/06/23(木) 23:28:00.25ID:N/ehCqi3899デフォルトの名無しさん
2022/06/23(木) 23:56:18.80ID:CfsYAKzO900デフォルトの名無しさん
2022/06/23(木) 23:59:26.92ID:CfsYAKzO901デフォルトの名無しさん
2022/06/24(金) 00:03:12.87ID:Z/7Mth9k >>896
Rustはなんだかゾクゾクしますぞ!!これは服なぞ着てる場合ではありませんぞ!!
Rustはなんだかゾクゾクしますぞ!!これは服なぞ着てる場合ではありませんぞ!!
902デフォルトの名無しさん
2022/06/24(金) 04:06:11.87ID:aL7/n23O 赤いの黙ってて
903デフォルトの名無しさん
2022/06/24(金) 06:23:10.42ID:EMaN3eAt >>897
ネタに全力でレスすんなよw
ネタに全力でレスすんなよw
904デフォルトの名無しさん
2022/06/24(金) 09:12:28.24ID:rZmITKBS まあクソネタにはクソって言っとかないと本当にウケてると思っちゃうやついるからね
905デフォルトの名無しさん
2022/06/24(金) 09:18:36.99ID:8+vtapEb だっさ
906デフォルトの名無しさん
2022/06/24(金) 09:46:26.14ID:ZKGFoh0M そうそう、クソネタにはそうやってダサいと言っておかないと
907デフォルトの名無しさん
2022/06/24(金) 09:50:10.56ID:K2we1Lar >904
+1
+1
908デフォルトの名無しさん
2022/06/24(金) 10:05:30.32ID:0NSCQb1H スルースキルが皆無なのですわ
荒らし様にお引き取りいただけない訳も推して知るべしですわね
荒らし様にお引き取りいただけない訳も推して知るべしですわね
909デフォルトの名無しさん
2022/06/24(金) 10:21:55.48ID:ZKGFoh0M >スルースキルが皆無
誰も自己紹介なんて頼んでないのに…
誰も自己紹介なんて頼んでないのに…
910デフォルトの名無しさん
2022/06/24(金) 17:42:51.52ID:EMaN3eAt ネタにレスして顔真っ赤w
911デフォルトの名無しさん
2022/06/24(金) 21:06:17.36ID:3e9x6I/t wasmって流行ってるけどコード量膨大に増えすぎないか?
912デフォルトの名無しさん
2022/06/24(金) 21:14:59.98ID:FArw1u5A フロントエンドの奴らが rust を使ってるの見てらんない。
TS で無難に書いておけばいいよ。
TS で無難に書いておけばいいよ。
913デフォルトの名無しさん
2022/06/24(金) 21:41:14.48ID:eHTn7QRG >>911
流行ってません
流行ってません
914デフォルトの名無しさん
2022/06/24(金) 21:41:45.02ID:eHTn7QRG 脳内をハッキングでもされてるのか?
915デフォルトの名無しさん
2022/06/24(金) 21:48:58.86ID:+JdvQwfN >>911
javaの中間コードよりマシ
javaの中間コードよりマシ
916デフォルトの名無しさん
2022/06/24(金) 22:46:43.70ID:/25pqsku ところでものすごい今さらなんだが wasm は何て読むんだ?
ワスムか
ワスムか
917デフォルトの名無しさん
2022/06/24(金) 23:21:33.67ID:KLiHHhJ8 ネイティブはだいたいワズムとかウォズムみたいに発音しているような気がする
918デフォルトの名無しさん
2022/06/24(金) 23:23:01.01ID:g65423tt この動画では冒頭でwasmをワスムって言ってる
https://youtu.be/nW71Mlbmxt8
https://youtu.be/nW71Mlbmxt8
919デフォルトの名無しさん
2022/06/24(金) 23:28:47.07ID:wBI1zPp0 >>918
これはワズムっていってないか?リスニングはからっきしのゴミ耳だからよくわからんけど
これはワズムっていってないか?リスニングはからっきしのゴミ耳だからよくわからんけど
920デフォルトの名無しさん
2022/06/25(土) 01:14:39.07ID:JyoKDUES ワズムて連呼しとるね
isの過去形のwasにm
isの過去形のwasにm
921デフォルトの名無しさん
2022/06/25(土) 02:13:22.50ID:APixfc76 >>911
コード量ってなんのこと?
コード量ってなんのこと?
922デフォルトの名無しさん
2022/06/25(土) 09:56:07.84ID:pPSG+F7f ダブルアセムって脳内で読んでたわ
923デフォルトの名無しさん
2022/06/25(土) 10:14:25.56ID:APasFGX+ asm.js(アズム ジェイエス)が進化してwasm(ワズム)に
924デフォルトの名無しさん
2022/06/25(土) 10:21:42.97ID:hQoUoumV 英語できねーおっさんが蘊蓄垂れてクソワロタwww
お前らマジでプライドだけは一流の無能おじで草
お前らマジでプライドだけは一流の無能おじで草
925デフォルトの名無しさん
2022/06/25(土) 10:50:44.23ID:f+PJ3XzM ウェブアセンブラっていみジャネーの?
926はちみつ餃子 ◆8X2XSCHEME
2022/06/25(土) 13:18:50.95ID:jO6HH2tH927デフォルトの名無しさん
2022/06/25(土) 13:29:07.82ID:/zwkJ/mi928デフォルトの名無しさん
2022/06/25(土) 13:52:40.86ID:23CjKpU2 wasmは俺が育てた!(AAry
929デフォルトの名無しさん
2022/06/25(土) 14:34:43.26ID:tSCqWCmZ きみたちもうちょっと真面目にやりなさい
930デフォルトの名無しさん
2022/06/25(土) 15:17:36.49ID:VflkbZsO >>926
じゃあ、ウェブのアセンブラって意味で良いんじゃないの?
じゃあ、ウェブのアセンブラって意味で良いんじゃないの?
931デフォルトの名無しさん
2022/06/25(土) 15:25:02.65ID:bv95EvGA WebAssemblyは仮想命令セットアーキテクチャあるいはプログラミング言語の一種である。略称はWasm。C・Rustなど様々なプログラミング言語のコンパイルターゲットとしてWasmバイナリは生成され、ウェブブラウザを含む様々な環境内のスタックベース仮想マシンにより実行される。
ネイティブコード相当の高速性・隔離環境でのメモリ安全な実行による安全性・仮想マシンによるハードウェア/プラットフォーム可搬性・ソースプログラミング言語中立性などを特徴とする[4]。この命令セットはバイナリ形式で定義されており、またアセンブリ言語ライクなテキスト形式も定義されている(その意味で低水準プログラミング言語といえる)。
Wasm自体は命令セットアーキテクチャであり、Linuxカーネルが提供するようなシステムコール(例: ファイルI/O)、Webブラウザが提供するようなDOMアクセスなどを提供していない。上記の安全性や可搬性はこの特徴に由来している。それと同時に、WasmエコシステムとしてはシステムコールやDOMアクセスがAPIとして個別に定義されており、Wasmランタイムが実装することでそれらの機能を提供している(例: システムコールを提供するWASI)。シンプルでオープンなISAとランタイムごとのAPIを組み合わせることでWasmエコシステムは高い拡張性を有している。例えばWasmをHTTPプロキシでのフィルタスクリプトとして利用するプロジェクトが存在する。
https://ja.m.wikipedia.org/wiki/WebAssemblyより
ネイティブコード相当の高速性・隔離環境でのメモリ安全な実行による安全性・仮想マシンによるハードウェア/プラットフォーム可搬性・ソースプログラミング言語中立性などを特徴とする[4]。この命令セットはバイナリ形式で定義されており、またアセンブリ言語ライクなテキスト形式も定義されている(その意味で低水準プログラミング言語といえる)。
Wasm自体は命令セットアーキテクチャであり、Linuxカーネルが提供するようなシステムコール(例: ファイルI/O)、Webブラウザが提供するようなDOMアクセスなどを提供していない。上記の安全性や可搬性はこの特徴に由来している。それと同時に、WasmエコシステムとしてはシステムコールやDOMアクセスがAPIとして個別に定義されており、Wasmランタイムが実装することでそれらの機能を提供している(例: システムコールを提供するWASI)。シンプルでオープンなISAとランタイムごとのAPIを組み合わせることでWasmエコシステムは高い拡張性を有している。例えばWasmをHTTPプロキシでのフィルタスクリプトとして利用するプロジェクトが存在する。
https://ja.m.wikipedia.org/wiki/WebAssemblyより
932デフォルトの名無しさん
2022/06/25(土) 15:32:39.09ID:tfc1tmd2933デフォルトの名無しさん
2022/06/25(土) 15:35:16.83ID:KZ/E7BkI 現実問題としてWasmはRustで書くのがベストソリューション
934デフォルトの名無しさん
2022/06/25(土) 15:35:55.67ID:VflkbZsO 三行以上書かれても
わかるわけない
常識
わかるわけない
常識
935デフォルトの名無しさん
2022/06/25(土) 15:36:39.28ID:UfyFqt6J 仮想マシン上で動くという点でWASMはJavaと一緒だな
936デフォルトの名無しさん
2022/06/25(土) 15:39:32.24ID:Ho0z1jTS >>930
そもそもアセンブラとかいってる時点でなにもわかってないから相手にするだけ無駄、無視推奨
そもそもアセンブラとかいってる時点でなにもわかってないから相手にするだけ無駄、無視推奨
937デフォルトの名無しさん
2022/06/25(土) 15:45:57.58ID:VflkbZsO Rustで書くとバイナリ肥大化するから、WATが基本になりそうでは?
938デフォルトの名無しさん
2022/06/25(土) 15:53:47.79ID:l76RX7xy >>935
javaの問題をある程度解決したのがwasmっていう認識でおけ?
javaの問題をある程度解決したのがwasmっていう認識でおけ?
939デフォルトの名無しさん
2022/06/25(土) 16:03:23.70ID:9jpr7vFN それな。Javaっぽくwebvmとかwebバイナリとかいった名前の方が分かりやすかったんじゃなかろうか
940デフォルトの名無しさん
2022/06/25(土) 16:05:36.45ID:VflkbZsO 貴様に正義があるというのなら、三行以内で示せ。
942デフォルトの名無しさん
2022/06/25(土) 16:07:10.43ID:ILDlrGK/ WebAssemblyはJVMやeBPFのリバイバルではない WasmがWeb以外でもアツい理由 - ログミーTech
https://logmi.jp/tech/articles/324956
スライド画像
https://img.logmi.jp/article_images/Jq1SrATqsEYupEF4aeAh6j.png
https://img.logmi.jp/article_images/HxUso3S1L63MXwia5RxGXd.png
https://img.logmi.jp/article_images/CntVo54bYF2MXnib2EXGei.png
https://img.logmi.jp/article_images/VLPRht2v3NnzzWyWP1pvrs.png
https://img.logmi.jp/article_images/SsS6T6EZrrPaWCSi5xq2bJ.png
https://img.logmi.jp/article_images/2Miy64H2xW7RnWCRGGJDAQ.png
https://img.logmi.jp/article_images/F2UYcDuwsrybfB6F4npBDL.png
https://img.logmi.jp/article_images/GC6f4J9DHeoEaTQGXaKacJ.png
https://logmi.jp/tech/articles/324956
スライド画像
https://img.logmi.jp/article_images/Jq1SrATqsEYupEF4aeAh6j.png
https://img.logmi.jp/article_images/HxUso3S1L63MXwia5RxGXd.png
https://img.logmi.jp/article_images/CntVo54bYF2MXnib2EXGei.png
https://img.logmi.jp/article_images/VLPRht2v3NnzzWyWP1pvrs.png
https://img.logmi.jp/article_images/SsS6T6EZrrPaWCSi5xq2bJ.png
https://img.logmi.jp/article_images/2Miy64H2xW7RnWCRGGJDAQ.png
https://img.logmi.jp/article_images/F2UYcDuwsrybfB6F4npBDL.png
https://img.logmi.jp/article_images/GC6f4J9DHeoEaTQGXaKacJ.png
943デフォルトの名無しさん
2022/06/25(土) 16:08:16.68ID:VflkbZsO >>941
俺の予想では、それが質問内容だと思います。
俺の予想では、それが質問内容だと思います。
944デフォルトの名無しさん
2022/06/25(土) 16:08:25.01ID:ILDlrGK/945デフォルトの名無しさん
2022/06/25(土) 16:15:09.41ID:akwg01K7 複オジばりの汚文章でワロタ
中身がなさすぎ
中身がなさすぎ
946デフォルトの名無しさん
2022/06/25(土) 16:15:26.89ID:KYOYlq4y >>943
wasmの読み方じゃなかったっけ?
wasmの読み方じゃなかったっけ?
947デフォルトの名無しさん
2022/06/25(土) 16:19:32.95ID:VflkbZsO 読み方は、ワッセンブラで決まりでしょう。
948デフォルトの名無しさん
2022/06/25(土) 16:20:56.33ID:XFOsSqRc DOM・シャドーDOM操作が遅いからwasmはあまり流行らない、これを何とかしない限り、シコシコts書いてるオジサンが量産される
949デフォルトの名無しさん
2022/06/25(土) 16:25:58.06ID:a5vhFArq950デフォルトの名無しさん
2022/06/25(土) 16:29:05.96ID:VflkbZsO 俺は白人の読み方なんか認めんよ。
中国ならまだしも。
中国ならまだしも。
951はちみつ餃子 ◆8X2XSCHEME
2022/06/25(土) 16:33:30.99ID:jO6HH2tH 命名の伝統としてちょっとしたネガティブワードを使うことがあるんだよ。
いわゆるギークセンスというやつだが、日本語でいう中二病に近い。
GIMP の名前を変えるためにフォークするだのなんだのでもめたことがあるの知らんか?
Wasm もそれと同じようなノリなんじゃねーの?
https://eow.alc.co.jp/search?q=wasm
いわゆるギークセンスというやつだが、日本語でいう中二病に近い。
GIMP の名前を変えるためにフォークするだのなんだのでもめたことがあるの知らんか?
Wasm もそれと同じようなノリなんじゃねーの?
https://eow.alc.co.jp/search?q=wasm
952デフォルトの名無しさん
2022/06/25(土) 16:35:39.94ID:VflkbZsO >>951
じゃあ、ワッセンブラでいいじゃん。
じゃあ、ワッセンブラでいいじゃん。
953デフォルトの名無しさん
2022/06/25(土) 16:39:47.09ID:ljJSN7j6954デフォルトの名無しさん
2022/06/25(土) 16:43:21.45ID:VflkbZsO 菅総理が、我が国はワッセンブラに注力すると宣言したら、どうするんだよ?
955デフォルトの名無しさん
2022/06/25(土) 16:47:50.00ID:Xmq8wuxM なるほど、、?(わからん)
WebAssembly Reference Typesで、WasmでDOMを操作する壁がここまで下がった
https://zenn.dev/igrep/articles/2021-11-wasm-reference-types
WebAssembly Reference Typesで、WasmでDOMを操作する壁がここまで下がった
https://zenn.dev/igrep/articles/2021-11-wasm-reference-types
956デフォルトの名無しさん
2022/06/25(土) 16:50:02.77ID:R8NAfVhJ DOMってなんだ?(←自分で調べろ)
957デフォルトの名無しさん
2022/06/25(土) 17:02:05.86ID:WInGVki9958デフォルトの名無しさん
2022/06/25(土) 17:04:38.90ID:Ch122rDL DOM操作なんか、どうやっても遅いんだからワズムからいじる必要ないだろ
959デフォルトの名無しさん
2022/06/25(土) 17:08:43.45ID:/UVjDglo DOM操作は流石にJS系でやればよくね?
960デフォルトの名無しさん
2022/06/25(土) 17:19:33.87ID:XFOsSqRc そんなことはない、JSやTSのようなダメ言語を排して、全部ほかのコンパイル型言語で統一して書けるように考えたのに
遅いなら話にならない。うんこ
遅いなら話にならない。うんこ
961デフォルトの名無しさん
2022/06/25(土) 17:32:09.99ID:KYOYlq4y wasmはjsを置き換えるものではないっていう方針がよくわからんな。置き換えていいのに。
962デフォルトの名無しさん
2022/06/25(土) 17:33:38.66ID:Ch122rDL タイプスクリプトでドム操作書いてみたら分かると思うけど、キャストだらけになる
963デフォルトの名無しさん
2022/06/25(土) 17:38:33.58ID:Sl1k0I/l WebAssemblyはJavaScriptを置き換えようとしていますか?
いいえ!WebAssemblyは、JavaScriptを補完するものであり、JavaScriptを置き換えるものではないように設計されています。WebAssemblyは、時間の経過とともに多くの言語をWebにコンパイルできるようになりますが、JavaScriptには信じられないほどの勢いがあり、Webの単一の特権( 上記のとおり)動的言語のままです。さらに、JavaScriptとWebAssemblyは、さまざまな構成で一緒に使用されることが期待されています。
・JavaScriptを活用して物事をつなぎ合わせるコンパイル済みのC++アプリ全体。
・WebAssemblyで制御されるメインのセンターキャンバスの周りのHTML/CSS / JavaScript UIにより、開発者はWebフレームワークの力を活用して、アクセス可能なWebネイティブな感覚のエクスペリエンスを構築できます。
・ほとんどの場合、いくつかの高性能WebAssemblyモジュールを備えたHTML / CSS / JavaScriptアプリ(たとえば、グラフ化、シミュレーション、画像/音声/ビデオ処理、視覚化、アニメーション、圧縮など、今日asm.jsですでに見られる例)開発者が今日のJavaScriptライブラリと同じように人気のあるWebAssemblyライブラリを再利用できるようにします。
・WebAssembly がガベージコレクションされたオブジェクトにアクセスできる:ユニコーン:ようになると、それらのオブジェクトはJavaScriptと共有され、独自の壁に囲まれた世界には存在しなくなります。
https://webassembly.org/docs/faq/#is-webassembly-trying-to-replace-javascript より
いいえ!WebAssemblyは、JavaScriptを補完するものであり、JavaScriptを置き換えるものではないように設計されています。WebAssemblyは、時間の経過とともに多くの言語をWebにコンパイルできるようになりますが、JavaScriptには信じられないほどの勢いがあり、Webの単一の特権( 上記のとおり)動的言語のままです。さらに、JavaScriptとWebAssemblyは、さまざまな構成で一緒に使用されることが期待されています。
・JavaScriptを活用して物事をつなぎ合わせるコンパイル済みのC++アプリ全体。
・WebAssemblyで制御されるメインのセンターキャンバスの周りのHTML/CSS / JavaScript UIにより、開発者はWebフレームワークの力を活用して、アクセス可能なWebネイティブな感覚のエクスペリエンスを構築できます。
・ほとんどの場合、いくつかの高性能WebAssemblyモジュールを備えたHTML / CSS / JavaScriptアプリ(たとえば、グラフ化、シミュレーション、画像/音声/ビデオ処理、視覚化、アニメーション、圧縮など、今日asm.jsですでに見られる例)開発者が今日のJavaScriptライブラリと同じように人気のあるWebAssemblyライブラリを再利用できるようにします。
・WebAssembly がガベージコレクションされたオブジェクトにアクセスできる:ユニコーン:ようになると、それらのオブジェクトはJavaScriptと共有され、独自の壁に囲まれた世界には存在しなくなります。
https://webassembly.org/docs/faq/#is-webassembly-trying-to-replace-javascript より
964デフォルトの名無しさん
2022/06/25(土) 17:57:29.10ID:qzsUrSUG なるほどね
965デフォルトの名無しさん
2022/06/25(土) 17:59:58.79ID:9jpr7vFN ははーん、ユニコーンね
966デフォルトの名無しさん
2022/06/25(土) 18:04:46.90ID:ndOOnBgl967デフォルトの名無しさん
2022/06/25(土) 18:08:27.82ID:57CBQU6k 🦄
968デフォルトの名無しさん
2022/06/25(土) 19:58:37.73ID:VflkbZsO いいわー
ワッセンブラいいわー。
ワッセンブラいいわー。
969デフォルトの名無しさん
2022/06/25(土) 20:26:19.09ID:bZig/WUT スレチおるど
970デフォルトの名無しさん
2022/06/25(土) 22:42:14.67ID:hVwOcYNS DOMてアレやろ、
971デフォルトの名無しさん
2022/06/25(土) 22:55:47.02ID:Bztv57SD ドムとかユニコーンとかガンダムかよ
972デフォルトの名無しさん
2022/06/25(土) 23:21:23.27ID:/UVjDglo tenplate要素使ってDOMツリー作ってそこに値や要素追加して表示しろって言われた時は訳わかんなかった
973デフォルトの名無しさん
2022/06/25(土) 23:22:45.89ID:Ch122rDL >>972
スペル間違うぐらいなら無理せずカタカナで書けよ
スペル間違うぐらいなら無理せずカタカナで書けよ
974デフォルトの名無しさん
2022/06/25(土) 23:35:08.74ID:3qOpf/5R フロントに全く興味ない奴らが無理してrust使おうとしてるってのがもうクソだわ
975デフォルトの名無しさん
2022/06/25(土) 23:57:43.41ID:sDy4bz93 Stringの中身が変化してほしい時のtrim()はどうすればよいですか?
976デフォルトの名無しさん
2022/06/26(日) 00:30:53.23ID:J3iRsr8e 自分では何も思い付かないんですか?
977デフォルトの名無しさん
2022/06/26(日) 00:41:24.45ID:DP2sbpoK >>942
なぜ無駄に高解像度なのか
なぜ無駄に高解像度なのか
978デフォルトの名無しさん
2022/06/26(日) 01:12:05.67ID:82o8ItO8 s.retain(|c| !c.is_whitespace());
979デフォルトの名無しさん
2022/06/26(日) 01:14:23.73ID:82o8ItO8 中間のスペースも削除されるのか
980デフォルトの名無しさん
2022/06/26(日) 04:54:09.98ID:mBbZ0Pti >>979
そりゃそうだろw
後側の削除だけならtruncateすればいいんじゃね?
let mut s = String::from("てすと ");
let end = s.rfind(|c: char| !c.is_whitespace()).unwrap();
s.truncate(end + 1);
thread 'main' panicked at 'assertion failed: self.is_char_boundary(new_len)'
ダメだった…
そりゃそうだろw
後側の削除だけならtruncateすればいいんじゃね?
let mut s = String::from("てすと ");
let end = s.rfind(|c: char| !c.is_whitespace()).unwrap();
s.truncate(end + 1);
thread 'main' panicked at 'assertion failed: self.is_char_boundary(new_len)'
ダメだった…
981デフォルトの名無しさん
2022/06/26(日) 05:14:19.98ID:vh+TaUjL s.truncate(s.trim_end().len())
982デフォルトの名無しさん
2022/06/26(日) 11:52:06.13ID:KbueaMTO panic する理由を理解したほうがいいよ
983デフォルトの名無しさん
2022/06/26(日) 17:08:41.82ID:afHQr9JE Linus「メモリ確保でpanicするって?認めんわ断じて認めん、ワシの目の黒い内は許さんぞ」
984デフォルトの名無しさん
2022/06/26(日) 17:27:36.02ID:nfXqcTpP 宇宙じゃ。宇宙のせいじゃ!
985デフォルトの名無しさん
2022/06/26(日) 17:36:15.17ID:DrXudPeH Linuxの話題は、あわしろを召喚しちまうから、やめとけ
986デフォルトの名無しさん
2022/06/26(日) 17:36:30.96ID:TFpQVi1k >>983
青いからセーフ
青いからセーフ
987デフォルトの名無しさん
2022/06/26(日) 18:43:28.30ID:82o8ItO8 fn trim_in_place(s: &mut String) {
if let Some(offset) = s.find(|c: char| !c.is_whitespace()) {
s.replace_range(..offset, "");
}
s.truncate(s.trim_end().len());
}
前後で非対称なのが気になるけど文字境界をうまく扱えるStringのメソッドが他に見つからなかった
if let Some(offset) = s.find(|c: char| !c.is_whitespace()) {
s.replace_range(..offset, "");
}
s.truncate(s.trim_end().len());
}
前後で非対称なのが気になるけど文字境界をうまく扱えるStringのメソッドが他に見つからなかった
988デフォルトの名無しさん
2022/06/26(日) 21:34:33.23ID:xXnnisch > s.find(|c: char| !c.is_whitespace())
rustってこれうまいこと関数名だけ渡せないんだっけ?
しかも関数合成できれば
s.find(char::is_whitespace . not)
みたいに書けたり?
rustってこれうまいこと関数名だけ渡せないんだっけ?
しかも関数合成できれば
s.find(char::is_whitespace . not)
みたいに書けたり?
989デフォルトの名無しさん
2022/06/26(日) 22:00:29.06ID:ZYHqIh+i 5chでまともな回答期待する方が頭おかしいことになぜ気付かないんだ
redditでDeepL使って英語で海外ニキに質問した方が1億倍まともな回答くれるぞ
redditでDeepL使って英語で海外ニキに質問した方が1億倍まともな回答くれるぞ
990デフォルトの名無しさん
2022/06/26(日) 23:10:04.56ID:Y8S6yv8a991デフォルトの名無しさん
2022/06/26(日) 23:57:49.73ID:VW+uLNTw >>461
メソッドを増やす時にOrphanルールで出来ないとしたら
それは標準ライブラリ含めて他人が書いたトレイトを他人が書いた型に適用する場合
スライスへfindメソッドを増やすことはそれに該当しないため出来る
適当なトレイト名SliceFindMethodを用意してスライス[T]にメソッドを実装すればよい
trait SliceFindMethod<T> {
fn find(&self, pattern: impl SliceFindPattern<T>) -> Option<usize>;
}
impl<T: PartialEq> SliceFindMethod<T> for [T] {
fn find(&self, pattern: impl SliceFindPattern<T>) -> Option<usize> {
pattern.slice_find(self)
}
}
文字列へのfindと同様に様々なパターンに対応できるよう
適当なトレイト名SliceFindPatternとそのメソッドslice_find()を用意し様々な実装をすればよい
長くなるので全体のコード
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=9110b8c76b17fb479bfef80e1f10182d
これでスライスの一種であるバイト列に対してもfindが適用できる
let buffer: &[u8] = b"ABCDEFGHIHJKL";
assert_eq!(Some(5), buffer.find(b'F'));
assert_eq!(Some(3), buffer.find(b"DEF"));
メソッドを増やす時にOrphanルールで出来ないとしたら
それは標準ライブラリ含めて他人が書いたトレイトを他人が書いた型に適用する場合
スライスへfindメソッドを増やすことはそれに該当しないため出来る
適当なトレイト名SliceFindMethodを用意してスライス[T]にメソッドを実装すればよい
trait SliceFindMethod<T> {
fn find(&self, pattern: impl SliceFindPattern<T>) -> Option<usize>;
}
impl<T: PartialEq> SliceFindMethod<T> for [T] {
fn find(&self, pattern: impl SliceFindPattern<T>) -> Option<usize> {
pattern.slice_find(self)
}
}
文字列へのfindと同様に様々なパターンに対応できるよう
適当なトレイト名SliceFindPatternとそのメソッドslice_find()を用意し様々な実装をすればよい
長くなるので全体のコード
https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=9110b8c76b17fb479bfef80e1f10182d
これでスライスの一種であるバイト列に対してもfindが適用できる
let buffer: &[u8] = b"ABCDEFGHIHJKL";
assert_eq!(Some(5), buffer.find(b'F'));
assert_eq!(Some(3), buffer.find(b"DEF"));
992デフォルトの名無しさん
2022/06/27(月) 00:08:38.77ID:xVflpq4r993デフォルトの名無しさん
2022/06/27(月) 00:54:52.23ID:7xcJ7izy >>989
翻訳の話題はあわしろを召喚しちまうからやめとけ。
翻訳の話題はあわしろを召喚しちまうからやめとけ。
994デフォルトの名無しさん
2022/06/27(月) 02:47:29.39ID:52L0v8L5 null ぬる なる
995デフォルトの名無しさん
2022/06/27(月) 04:40:51.89ID:KgP+fmt3 rust cliコマンドがなぜrustupなのか誰も疑問に思わんの?
俺はこのupがなんなのか気になって調べても分からなくてイライラする
rustup updateとかものすごく気に入らないしそもそもrustupとcargoがあるのもややこしい
俺はこのupがなんなのか気になって調べても分からなくてイライラする
rustup updateとかものすごく気に入らないしそもそもrustupとcargoがあるのもややこしい
996デフォルトの名無しさん
2022/06/27(月) 08:27:05.49ID:SVONOTxH 慣用句の意味を調べるときは"で括るんやで
997デフォルトの名無しさん
2022/06/27(月) 08:27:50.24ID:gDlfKP6u >>995
今はrustcやrustfmtなど含めて全て実体は同じでハードリンク
cargoが各ワーキングディレクトリに対して適用されるのに対して
rustupは全体に適用されるため
同じ名前のサブコマンドでも全く異なる
今はrustcやrustfmtなど含めて全て実体は同じでハードリンク
cargoが各ワーキングディレクトリに対して適用されるのに対して
rustupは全体に適用されるため
同じ名前のサブコマンドでも全く異なる
998デフォルトの名無しさん
2022/06/27(月) 08:28:40.38ID:gDlfKP6u999デフォルトの名無しさん
2022/06/27(月) 10:40:27.69ID:B/Kpn5AjSlot
💣🎴💣
🎰🎰🌸
🌸😜👻
(LA: 2.02, 1.95, 1.85)
1000デフォルトの名無しさん
2022/06/27(月) 10:40:32.55ID:B/Kpn5AjStatus ♥5 ♣8 ♠7 HP: 1000 pts. たぶん(0)
2.02, 1.95, 1.85(904.632812) Proc. [0.187892 sec.]
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 45日 16時間 12分 12秒
新しいスレッドを立ててください。
life time: 45日 16時間 12分 12秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 習政権、高市首相への態度硬化 台湾有事発言で連日非難 中国 ★11 [ぐれ★]
- 国内ホテル、既にキャンセルも 訪日客関連業界、事態見守る ★3 [蚤の市★]
- 日本損失1.7兆円に修正 中国渡航自粛の影響試算 [蚤の市★]
- 「どうしようもない」 ため息つくアジアの玄関口 中国の訪日自粛で−福岡市 [蚤の市★]
- 「アベノミクス」で投資対象と化したマンション ローンの低金利続き「年収の12倍」借りる20代出現 [蚤の市★]
- 食品の高騰対策、政府が交付金の「特別枠」検討 原則全ての自治体で [蚤の市★]
- 【超絶悲報】日本政府「高市さんの答弁撤回はない。政権として弱腰と映る姿勢は見せられない」これもう立憲岡田の議員辞職しかないだろ [519511584]
- 【実況】博衣こよりのえちえち朝こよ🧪
- 台湾「高市さんが台湾人の悲願を叶えてくれた!」これじゃ高市さん発言撤回できないぢゃん😰 [523957489]
- 高市周辺、さすがに焦り始めるww「小さな火種が火事になりかけている。早く鎮火しなくてはいけない」 [271912485]
- 【超悲報】中国への武力行使、世論調査で「賛成」「どちらかといえば賛成」48.8% 「反対」「どちらかといえば反対」の44.2%を上回る [314039747]
- 中国「高市が頭を下げて謝罪しない限り、絶対に許さない」 [329329848]
