公式
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のasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/
※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
前スレ
Rust part11
https://mevius.5ch.net/test/read.cgi/tech/1623857052/
Rust part12
■ このスレッドは過去ログ倉庫に格納されています
2021/08/24(火) 22:55:27.78ID:972JwtmU
257デフォルトの名無しさん
2021/08/31(火) 23:52:15.67ID:3ENBWRwS 調べたのにfor式を理解できんかったんかーいっ!!!
258デフォルトの名無しさん
2021/08/31(火) 23:54:52.53ID:uga9Wpe3 Rustのforで二分探索ってどうやるのか気になる
259デフォルトの名無しさん
2021/08/31(火) 23:56:09.61ID:cANa6qyq どうせ自分で二分探索なんか実装しないだろ
気にするな
標準ライブラリ使え
気にするな
標準ライブラリ使え
260デフォルトの名無しさん
2021/09/01(水) 01:38:57.54ID:iOouKnxp261デフォルトの名無しさん
2021/09/01(水) 01:59:11.36ID:p49DyIKy262デフォルトの名無しさん
2021/09/01(水) 03:29:00.40ID:MtyAaHfZ >>254
もちろんRustのforはVecや配列に適用じゃなくてイテレータに適用
だからリスト処理しかできない言語のfor/foreachよりはRustのforは適用範囲が広い
しかし
>>258
for以前に確定しているデータしかイテレータ内で使えなくて
これはforの中で算出されたデータを借用規則によりイテレータに反映させられないためで
forの中でif分岐などする形で二分探索は無理と思う
しかし
元々の>>249が言う
「forを利用してindexで回さないとできないことが山ほどある。例えば二分探索とか」も間違い
このforはC言語などのfor (index初期値; index条件判定; index更新)を指しているが
二分探索はindex更新が状況により増減変化するためfor(;;)文を使えない
無理やりにforを使っても更新項がないため最初からwhile文を使うのが正解
つまりCでもRustでも同じでforではなくwhileが使われる
もちろんRustのforはVecや配列に適用じゃなくてイテレータに適用
だからリスト処理しかできない言語のfor/foreachよりはRustのforは適用範囲が広い
しかし
>>258
for以前に確定しているデータしかイテレータ内で使えなくて
これはforの中で算出されたデータを借用規則によりイテレータに反映させられないためで
forの中でif分岐などする形で二分探索は無理と思う
しかし
元々の>>249が言う
「forを利用してindexで回さないとできないことが山ほどある。例えば二分探索とか」も間違い
このforはC言語などのfor (index初期値; index条件判定; index更新)を指しているが
二分探索はindex更新が状況により増減変化するためfor(;;)文を使えない
無理やりにforを使っても更新項がないため最初からwhile文を使うのが正解
つまりCでもRustでも同じでforではなくwhileが使われる
263デフォルトの名無しさん
2021/09/01(水) 05:05:49.84ID:W5DSGMZK こんな感じ?
fn binary_search<T>(array: &[T], target: T) -> Option<usize> where T: std::cmp::PartialOrd {
let mut left = 0;
let mut right = array.len() as i32 - 1;
while left <= right {
let mid = (left + right) / 2;
if array[mid as usize] == target {
return Some(mid as usize);
} else if array[mid as usize] < target {
left = mid + 1;
} else {
right = mid - 1;
}
}
return None;
}
Cで書いてもほぼ同じコードになるね
同じコードで任意の型に楽に対応できるRustの方が有利かな
fn binary_search<T>(array: &[T], target: T) -> Option<usize> where T: std::cmp::PartialOrd {
let mut left = 0;
let mut right = array.len() as i32 - 1;
while left <= right {
let mid = (left + right) / 2;
if array[mid as usize] == target {
return Some(mid as usize);
} else if array[mid as usize] < target {
left = mid + 1;
} else {
right = mid - 1;
}
}
return None;
}
Cで書いてもほぼ同じコードになるね
同じコードで任意の型に楽に対応できるRustの方が有利かな
264デフォルトの名無しさん
2021/09/01(水) 08:56:44.94ID:wrwogreT265デフォルトの名無しさん
2021/09/01(水) 19:34:58.07ID:8EcW0Jj4 >>249
お、249は俺だ。
言われてみれば確かに二分探索でforはないなww
while max-min > 0 とかそんな感じだった。飲んで書いてたからすまんすまん
でも、イテレータでなくてindexでやるほうが便利なことのほうが多いのは事実なのよ
動的計画法で現在の参照している配列の前後の内容を参照する時とか
お、249は俺だ。
言われてみれば確かに二分探索でforはないなww
while max-min > 0 とかそんな感じだった。飲んで書いてたからすまんすまん
でも、イテレータでなくてindexでやるほうが便利なことのほうが多いのは事実なのよ
動的計画法で現在の参照している配列の前後の内容を参照する時とか
266デフォルトの名無しさん
2021/09/01(水) 20:35:07.40ID:+RqlKI+M indexが便利なことの "方が" 多いの?
indexが便利なこと "も" 多いならわかる
indexが便利なこと "も" 多いならわかる
267デフォルトの名無しさん
2021/09/01(水) 21:13:02.22ID:8EcW0Jj4 自分は競プロでRustを使ってるけど、その範囲では圧倒的にindex
268デフォルトの名無しさん
2021/09/01(水) 21:38:57.15ID:8EcW0Jj4 うーん、こういうのはイテレータだけでもいけるね
ttps://atcoder.jp/contests/abc138/tasks/abc138_d
static mut tree_list: Vec<(i64, i64)> = Vec::new();
static mut job_list: Vec<(i64, i64)> = Vec::new();
static mut res_list: Vec<i64> = Vec::new();
fn main() {
unsafe {
input! {
edge: i64, job: i64,
tree_list0: [(i64, i64); edge-1],
job_list0: [(i64, i64); job],
}
tree_list = tree_list0;
job_list = job_list0;
res_list = vec![0_i64; edge as usize + 1];
unsafe fn calc(index: i64, count: i64) {
res_list[index as usize] += count;
for &(a, b) in &tree_list { if a == index { calc(b, count); } }
}
for &(a, b) in &job_list { calc(a, b); }
for i in 1..res_list.len() { print!("{} ", res_list[i]); }
println!();
}
}
ttps://atcoder.jp/contests/abc138/tasks/abc138_d
static mut tree_list: Vec<(i64, i64)> = Vec::new();
static mut job_list: Vec<(i64, i64)> = Vec::new();
static mut res_list: Vec<i64> = Vec::new();
fn main() {
unsafe {
input! {
edge: i64, job: i64,
tree_list0: [(i64, i64); edge-1],
job_list0: [(i64, i64); job],
}
tree_list = tree_list0;
job_list = job_list0;
res_list = vec![0_i64; edge as usize + 1];
unsafe fn calc(index: i64, count: i64) {
res_list[index as usize] += count;
for &(a, b) in &tree_list { if a == index { calc(b, count); } }
}
for &(a, b) in &job_list { calc(a, b); }
for i in 1..res_list.len() { print!("{} ", res_list[i]); }
println!();
}
}
269デフォルトの名無しさん
2021/09/02(木) 00:21:53.48ID:nqohbFGX ところで非同期ライブラリはどれが標準になるの?
270デフォルトの名無しさん
2021/09/02(木) 01:42:02.99ID:S2XiqXH4 そりゃあれでしょ
271デフォルトの名無しさん
2021/09/02(木) 11:37:50.37ID:UEpMLVw4 名前がダセェあれか
272デフォルトの名無しさん
2021/09/02(木) 14:15:51.06ID:AObLO14s お江戸
273デフォルトの名無しさん
2021/09/02(木) 14:55:26.38ID:2FuyxSW6 >>269
futuresで行ける
futuresで行ける
274デフォルトの名無しさん
2021/09/02(木) 15:18:41.35ID:l4XbE5cZ Rustは、Tiobe index で、少し前に始めて20位に入ったが、今見たら
24位に下がってる。
このランキングの信憑性にも議論の余地はあろうが。
でも、日経の調査ではプロが使っている言語のTOPは、C/C++ということなので、
その調査とも整合はしている。
他の調査でも、CとC++を合算するとTOPか、2位になる。
24位に下がってる。
このランキングの信憑性にも議論の余地はあろうが。
でも、日経の調査ではプロが使っている言語のTOPは、C/C++ということなので、
その調査とも整合はしている。
他の調査でも、CとC++を合算するとTOPか、2位になる。
275デフォルトの名無しさん
2021/09/02(木) 15:28:38.88ID:l4XbE5cZ https://www.rust-lang.org/ja/production/users
には、Rust公式サイト(?)で製品に使っている企業名が書いてあるが、
聞いたことが無い企業が多い。それはそういうものなのかもしれないが。
には、Rust公式サイト(?)で製品に使っている企業名が書いてあるが、
聞いたことが無い企業が多い。それはそういうものなのかもしれないが。
276デフォルトの名無しさん
2021/09/02(木) 17:24:27.18ID:oZlwZEWk >>254
お前の負けやでw
お前の負けやでw
277デフォルトの名無しさん
2021/09/02(木) 17:50:16.02ID:5ahReTWB >>256
そらそろ宿題できたかい?
そらそろ宿題できたかい?
278デフォルトの名無しさん
2021/09/02(木) 18:51:20.53ID:oZlwZEWk >>277
お前の負けやでw
お前の負けやでw
279デフォルトの名無しさん
2021/09/02(木) 19:10:59.17ID:2FuyxSW6 また荒らしが来てるな
ところで非同期関数を呼ぶとfuture/promiseを返すだけでそのタイミングては実行開始しない怠惰タイプのプログラミング言語はRust以外に何があります?
ところで非同期関数を呼ぶとfuture/promiseを返すだけでそのタイミングては実行開始しない怠惰タイプのプログラミング言語はRust以外に何があります?
280デフォルトの名無しさん
2021/09/02(木) 19:14:26.82ID:rwq3+G7G281デフォルトの名無しさん
2021/09/02(木) 20:17:55.99ID:cdb/p6kF >>279
イテレータも理解してないのに他スレでRustをバカ推しすんなよな
イテレータも理解してないのに他スレでRustをバカ推しすんなよな
282デフォルトの名無しさん
2021/09/02(木) 21:18:33.70ID:5ahReTWB イテレータも理解してないアホがいるのか
283デフォルトの名無しさん
2021/09/02(木) 21:26:15.36ID:+7Q9WvZy >>282
ほぅ(for)( ^ω^)・・・
ほぅ(for)( ^ω^)・・・
284デフォルトの名無しさん
2021/09/02(木) 22:29:04.14ID:2FuyxSW6 >>269
せめてfutures::io::AsyncRead,AsyncWriteトレイトあたりで中立に互換性問題なんとかしてほしい
せめてfutures::io::AsyncRead,AsyncWriteトレイトあたりで中立に互換性問題なんとかしてほしい
285デフォルトの名無しさん
2021/09/02(木) 23:41:15.18ID:Ubg4tWaQ >>268
これじゃナイーブ過ぎて通らないでしょ
これじゃナイーブ過ぎて通らないでしょ
286デフォルトの名無しさん
2021/09/03(金) 00:54:23.74ID:2xSRfF9g >>283
いちゃラブ ((っ´ω`)♡(´ω`⊂ )) すればすぐわかるのにね
いちゃラブ ((っ´ω`)♡(´ω`⊂ )) すればすぐわかるのにね
287デフォルトの名無しさん
2021/09/03(金) 13:54:25.02ID:j8ut1qUg let a = [10, 20, 130, 40];
let v = vec!a;//←これってなんでダメなんですか?
let v = vec!a;//←これってなんでダメなんですか?
288デフォルトの名無しさん
2021/09/03(金) 14:17:04.75ID:9y+1HwQb >>287
そういう構文規則(syntax)だから。
二行目は、vec! はマクロ名で、直後からはマクロの引数列が続く。
そして、その引数列は決まった形式で書く必要があり、
vec!a という形式はそれに当てはまってない。
そういう構文規則(syntax)だから。
二行目は、vec! はマクロ名で、直後からはマクロの引数列が続く。
そして、その引数列は決まった形式で書く必要があり、
vec!a という形式はそれに当てはまってない。
289デフォルトの名無しさん
2021/09/03(金) 14:20:52.38ID:12Im1YVo >>287
vec![]の[]は配列リテラルではなくて、一般的にマクロ呼び出しは[]か()か{}で引数を渡す
なので実はvec!(1)やvec!{1}も通るのだが、配列リテラルの見た目と合わせるために普通[]が使われる
vec![]の[]は配列リテラルではなくて、一般的にマクロ呼び出しは[]か()か{}で引数を渡す
なので実はvec!(1)やvec!{1}も通るのだが、配列リテラルの見た目と合わせるために普通[]が使われる
291デフォルトの名無しさん
2021/09/03(金) 15:36:22.40ID:eAcQJHwr Cのvolatileって低レイヤで多用されるにもかかわらず実装依存なんだな
処理系依存の属性値的なのと同じようなもんか
Rustはcoreの中にvolatileアクセス用のメソッドが用意されている分進んでいる
処理系依存の属性値的なのと同じようなもんか
Rustはcoreの中にvolatileアクセス用のメソッドが用意されている分進んでいる
292デフォルトの名無しさん
2021/09/03(金) 15:55:22.52ID:4g+/rgm+293デフォルトの名無しさん
2021/09/03(金) 18:49:30.86ID:XJw5Azdc 何らか単純なmacroリライトとは異なるproprocessorが必要になりそうね
cとかlisp(cより遥かにまし)みたいなエラー挟み込むだけのマクロよりかは
rustのマクロはマシよね殆ど利便性は特になくcompile前にregex雑魚ver replace導入してるだけだけど
まぁ、素直なアプローチというか何というか(´・ω・`)
cとかlisp(cより遥かにまし)みたいなエラー挟み込むだけのマクロよりかは
rustのマクロはマシよね殆ど利便性は特になくcompile前にregex雑魚ver replace導入してるだけだけど
まぁ、素直なアプローチというか何というか(´・ω・`)
294デフォルトの名無しさん
2021/09/03(金) 23:47:36.72ID:g/jq2Cau rustの勉強のため自作のbashコマンドを、rustで書き直してるんですが、
コマンド置換( $(echo ) )はどうやればいいでしょうか?
Command::new('hoge').args......は調べたのですが、コマンド置換の方法が
どうしてもわかりません。
コマンド置換( $(echo ) )はどうやればいいでしょうか?
Command::new('hoge').args......は調べたのですが、コマンド置換の方法が
どうしてもわかりません。
295デフォルトの名無しさん
2021/09/04(土) 01:53:11.04ID:HZGHSQTb >>294
Command::outputでstdout取得してきてそれをコマンド列に埋め込むとか?
Command::outputでstdout取得してきてそれをコマンド列に埋め込むとか?
296デフォルトの名無しさん
2021/09/04(土) 05:20:01.42ID:iqtSb51S インタプリタを作るのでなければ置換の必要性ある?
例えばこういうことが出来ればいいんだよね?
let s = format!("今日は{}曜日です", String::from_utf8(std::process::Command::new("date").arg("+%a").env("LANG", "ja_JP.utf8").output()?.stdout)?.trim_end());
例えばこういうことが出来ればいいんだよね?
let s = format!("今日は{}曜日です", String::from_utf8(std::process::Command::new("date").arg("+%a").env("LANG", "ja_JP.utf8").output()?.stdout)?.trim_end());
297デフォルトの名無しさん
2021/09/04(土) 09:57:53.03ID:KxfCnNFO 汚いコードだなぁ
298デフォルトの名無しさん
2021/09/04(土) 12:45:59.97ID:mADKIhQi299デフォルトの名無しさん
2021/09/04(土) 14:38:37.40ID:1i5Z4ndW >>298
Command は system 関数相当じゃなくて fork/exec だから shell は関与しないと思ってたんだけど違うの?
Command は system 関数相当じゃなくて fork/exec だから shell は関与しないと思ってたんだけど違うの?
300デフォルトの名無しさん
2021/09/04(土) 17:05:10.13ID:iqtSb51S >>297
美しいコードをご教示して下さい
美しいコードをご教示して下さい
301デフォルトの名無しさん
2021/09/04(土) 17:33:46.64ID:mADKIhQi >>299
fork/execだからとかそういう問題じゃなくて、
外部コマンド使うんだったら、それは単なるラッパーだろうと
要求する機能を満たすだけなら別にそれでも良いと思うが、
勉強のためにrustで書き直すというなら違和感がある
自作コマンドの内容にもよるけど
fork/execだからとかそういう問題じゃなくて、
外部コマンド使うんだったら、それは単なるラッパーだろうと
要求する機能を満たすだけなら別にそれでも良いと思うが、
勉強のためにrustで書き直すというなら違和感がある
自作コマンドの内容にもよるけど
302デフォルトの名無しさん
2021/09/04(土) 19:48:22.92ID:FwiYtexa303デフォルトの名無しさん
2021/09/04(土) 20:41:42.28ID:HZGHSQTb >>301
shell を作ってるんだから外部コマンド呼び出してなんぼだと思うんだが
shell を作ってるんだから外部コマンド呼び出してなんぼだと思うんだが
305デフォルトの名無しさん
2021/09/04(土) 22:09:11.34ID:HZGHSQTb >>304
自作のbashコマンドを自作の bash 互換シェルと読んでコマンド置換の仕組みを作ろうとしてるのかと思ったけど
もしかして bash スクリプトで書いたコマンドのことだったりする?
それにしたって外部コマンド含めて自作する必要はないと思うが
自作のbashコマンドを自作の bash 互換シェルと読んでコマンド置換の仕組みを作ろうとしてるのかと思ったけど
もしかして bash スクリプトで書いたコマンドのことだったりする?
それにしたって外部コマンド含めて自作する必要はないと思うが
306デフォルトの名無しさん
2021/09/04(土) 23:54:37.12ID:iqtSb51S なるほど
>>296と書くのではRustで書き直したことになっていないとはそういう意味か
これでいいのかな
use locale::Time;
use chrono::{Local, Datelike};
let s = format!("今日は{}曜日です", Time::load_user_locale().unwrap().short_day_name(Local::now().date().weekday().num_days_from_sunday() as usize));
>>296と書くのではRustで書き直したことになっていないとはそういう意味か
これでいいのかな
use locale::Time;
use chrono::{Local, Datelike};
let s = format!("今日は{}曜日です", Time::load_user_locale().unwrap().short_day_name(Local::now().date().weekday().num_days_from_sunday() as usize));
307デフォルトの名無しさん
2021/09/05(日) 01:20:41.47ID:lJqHVJAL $ foo=$(bar $(baz))
↓
let foo = bar(baz())
↓
let foo = bar(baz())
308デフォルトの名無しさん
2021/09/05(日) 14:42:42.92ID:5vCe2TIK >>294
>rustの勉強のため自作のbashコマンドを、rustで書き直し
https://github.com/uutils/coreutils/blob/master/src/uu/echo/src/echo.rs
> コマンド置換( $(echo ) )はどうやればいいでしょうか?
https://www.joshmcguigan.com/blog/build-your-own-shell-rust/
https://zenn.dev/garebare/articles/a463257c447fa9
独自shellスクリプトをbashやzshのように実行する際は標準入力を逐次読むインタラクティブシェルの
動作モードの他に第一引数のスクリプトパスを受け取り連続的に動作するようにしなければなりません。
上記のサンプルのように変数やコマンド置換を展開(子プロを作って実行結果を保持する)パーサーが
必要になります。(上の例ではリダイレクトやパイプなどしか処理していませんが)またファイル先頭の
#!/bin/shと同じようにshebangを認識するのはOSが行います。
そのほかにもifに使われるや"["もしくはtestなどは大昔はコマンドでしたが、現在は多くのシェルでは
組み込みのビルトインコマンドになっています。
また現在でもbashなどでクラッシュさせる脆弱性が発見されていますが、GNU bashの場合はパーサーは
手書きではなく、parse.yなどのyaccです
>rustの勉強のため自作のbashコマンドを、rustで書き直し
https://github.com/uutils/coreutils/blob/master/src/uu/echo/src/echo.rs
> コマンド置換( $(echo ) )はどうやればいいでしょうか?
https://www.joshmcguigan.com/blog/build-your-own-shell-rust/
https://zenn.dev/garebare/articles/a463257c447fa9
独自shellスクリプトをbashやzshのように実行する際は標準入力を逐次読むインタラクティブシェルの
動作モードの他に第一引数のスクリプトパスを受け取り連続的に動作するようにしなければなりません。
上記のサンプルのように変数やコマンド置換を展開(子プロを作って実行結果を保持する)パーサーが
必要になります。(上の例ではリダイレクトやパイプなどしか処理していませんが)またファイル先頭の
#!/bin/shと同じようにshebangを認識するのはOSが行います。
そのほかにもifに使われるや"["もしくはtestなどは大昔はコマンドでしたが、現在は多くのシェルでは
組み込みのビルトインコマンドになっています。
また現在でもbashなどでクラッシュさせる脆弱性が発見されていますが、GNU bashの場合はパーサーは
手書きではなく、parse.yなどのyaccです
309デフォルトの名無しさん
2021/09/05(日) 19:37:48.09ID:vqQF7q4/ シェル自体をRustで実装する話なん?
310デフォルトの名無しさん
2021/09/05(日) 20:23:09.21ID:qXYO1Gcj 想定外。
シェルスクリプトで書かれてる日常ツール類を、高速化&練習ついでにRust化、ってのはよくある話なので、今回もそういうことかと想定してた。
シェルスクリプトで書かれてる日常ツール類を、高速化&練習ついでにRust化、ってのはよくある話なので、今回もそういうことかと想定してた。
311デフォルトの名無しさん
2021/09/05(日) 20:31:50.21ID:Mq9n6pyZ grepの書き換えとか入門用テキストあるあるだしな俺もそれかと思ってたw
インタープリターみたいの作りたいなら単純に考えて$(.+)みたいの発見し次第rustで書かれたプログラムに書き換え
この際$(.+)の.+の部分にもrust書き換えプログラムを同様に適用のrecursiveな奴考えるな
match等でregex構文が扱いやすい分rust native interpreterみたいの造りやすそう
あとそうゆうのredosだかなんだかのrust os projectみたいのあるから見たら面白いんじゃね(´・ω・`)
インタープリターみたいの作りたいなら単純に考えて$(.+)みたいの発見し次第rustで書かれたプログラムに書き換え
この際$(.+)の.+の部分にもrust書き換えプログラムを同様に適用のrecursiveな奴考えるな
match等でregex構文が扱いやすい分rust native interpreterみたいの造りやすそう
あとそうゆうのredosだかなんだかのrust os projectみたいのあるから見たら面白いんじゃね(´・ω・`)
312デフォルトの名無しさん
2021/09/07(火) 12:42:27.81ID:O1QkM6d3 nullの可能性がある複数の参照を作りたい場合って
OptionとかRcを組み合わせるの?
縦によも横にもコードが長くなりそう
OptionとかRcを組み合わせるの?
縦によも横にもコードが長くなりそう
313デフォルトの名無しさん
2021/09/07(火) 13:22:01.93ID:J2y4//gF Option<&T> や &Option<T>でも良いかも知れないけど状況次第
可変参照にしたいなら Rc<RefCell<Option<T>>> とかになるかも
可変参照にしたいなら Rc<RefCell<Option<T>>> とかになるかも
314デフォルトの名無しさん
2021/09/07(火) 14:39:19.62ID:vfOWvkqv Rustの文化詳しくないけど、null objectは使わないの?
せっかく静的安全性にこだわっているのに、型無しのnullを使うのはこだわりが足りない気がするなぁ。
せっかく静的安全性にこだわっているのに、型無しのnullを使うのはこだわりが足りない気がするなぁ。
315デフォルトの名無しさん
2021/09/07(火) 15:00:30.72ID:gb4OeP+0 OptionがあるのにNullObjectいらなくないです?
316デフォルトの名無しさん
2021/09/07(火) 15:16:47.38ID:yn0D/zff317デフォルトの名無しさん
2021/09/07(火) 15:20:59.00ID:oZHnA/lF NullObjectは時代遅れ過ぎる
318312
2021/09/07(火) 15:36:48.61ID:O1QkM6d3319デフォルトの名無しさん
2021/09/07(火) 15:42:12.42ID:gb4OeP+0 参照をRcするような場面てあんまりないような気がする
ところでRc<RefCell<Option<T>>>は、
参照じゃなくてヒープにある(かもしれない)Tの共有になりませんか
ところでRc<RefCell<Option<T>>>は、
参照じゃなくてヒープにある(かもしれない)Tの共有になりませんか
320デフォルトの名無しさん
2021/09/07(火) 15:58:38.34ID:X4ha4H+D321デフォルトの名無しさん
2021/09/07(火) 18:22:59.95ID:J2y4//gF322デフォルトの名無しさん
2021/09/07(火) 19:09:15.95ID:/9ekKyA5323デフォルトの名無しさん
2021/09/07(火) 20:06:06.42ID:Z/GuZfd2324デフォルトの名無しさん
2021/09/07(火) 21:28:45.74ID:GNL8Ud6q325デフォルトの名無しさん
2021/09/07(火) 22:29:28.46ID:KSe0arFM 本来はOption/Result/(Either)はRust言語的な仕組みでは無く、ライブラリの作法に過ぎないが、ランタイムが
無いはずなのに、Resultなどで宣言しているところで原則として捕捉しないpanicがあるのは納得できない人は
結構いると思う。言語の構文でmatchや?など、まさにそれのサポート構文があるのに、unwrapしたらpanicで
この話は嫌がる人が結構いるけど、OptionもResultもPanicも取っ払った最小の標準ライブラリが欲しい
無いはずなのに、Resultなどで宣言しているところで原則として捕捉しないpanicがあるのは納得できない人は
結構いると思う。言語の構文でmatchや?など、まさにそれのサポート構文があるのに、unwrapしたらpanicで
この話は嫌がる人が結構いるけど、OptionもResultもPanicも取っ払った最小の標準ライブラリが欲しい
326デフォルトの名無しさん
2021/09/07(火) 22:45:10.91ID:rBwLSogt >>325
何が言いたいのか分からん
何が言いたいのか分からん
327デフォルトの名無しさん
2021/09/07(火) 23:03:38.48ID:2A/XDTjQ >>325
そこは使い分け。
エラーな時にそのままエラー吐かせても構わない場合は、main()をResult型にしてしまうし、
きちんとエラー処理する必要あるものな場合は、少なくともmain()やそれより下でmatchでResultを必ず受け止める。
そこは使い分け。
エラーな時にそのままエラー吐かせても構わない場合は、main()をResult型にしてしまうし、
きちんとエラー処理する必要あるものな場合は、少なくともmain()やそれより下でmatchでResultを必ず受け止める。
328デフォルトの名無しさん
2021/09/07(火) 23:11:59.18ID:oZHnA/lF329デフォルトの名無しさん
2021/09/07(火) 23:18:49.53ID:2A/XDTjQ あと後者の場合、unwrap()も基本的には使わない。
例外的に使うのはフィルタし終えて必ずSome(T)となっているものを剥がす時だけ。
つまりpanicはさせないので、その>>325の懸念事項は発生しない。
例外的に使うのはフィルタし終えて必ずSome(T)となっているものを剥がす時だけ。
つまりpanicはさせないので、その>>325の懸念事項は発生しない。
330デフォルトの名無しさん
2021/09/08(水) 07:19:42.43ID:yXT40j/x 素人です、質問させてください
Rustでスマホアプリやwebアプリは作れますか?
作れるとしたら
java/kotlinやswiftやjavascriptより作りやすいですか?
アプリ制作でこれらの言語よりRustは優れてますか?
Rustでスマホアプリやwebアプリは作れますか?
作れるとしたら
java/kotlinやswiftやjavascriptより作りやすいですか?
アプリ制作でこれらの言語よりRustは優れてますか?
331デフォルトの名無しさん
2021/09/08(水) 07:34:28.50ID:bql1CtjZ Rust+JavaScriptでウェブアプリとそのためのサーバーサイドは作れる
ウェブブラウザ上ではJavaScriptが必須なのでRustだけにはできない
ただしウェブブラウザ上ではJavaScriptに加えてWebAssembly(Wasm)も動いてこれはRustで書いたプログラムが動く
なのでJavaScript部分を最小限にしてRustで書いたWasmがメインというケースもないわけではない
サーバーサイドはRustだけで全て構築できる
ウェブブラウザ上ではJavaScriptが必須なのでRustだけにはできない
ただしウェブブラウザ上ではJavaScriptに加えてWebAssembly(Wasm)も動いてこれはRustで書いたプログラムが動く
なのでJavaScript部分を最小限にしてRustで書いたWasmがメインというケースもないわけではない
サーバーサイドはRustだけで全て構築できる
332デフォルトの名無しさん
2021/09/08(水) 07:48:35.45ID:yXT40j/x ありがとうございました
スマホアプリを作るならKotlinやswiftってことなんですね
大変に参考になりました。ありがとうございました。
スマホアプリを作るならKotlinやswiftってことなんですね
大変に参考になりました。ありがとうございました。
333デフォルトの名無しさん
2021/09/08(水) 08:09:19.60ID:nCYYHiA4 オマケみたいなもんやな
334デフォルトの名無しさん
2021/09/08(水) 08:14:48.98ID:bql1CtjZ >>332
そんなことはない
スマホアプリならKotlinとSwiftの2種類を無駄に覚えずともJavaScriptだけで両OS向けスマホアプリ作成が可能
もちろんスマホでもウェブアプリが動きアプリの種類によってはウェブアプリで十分なためスマホアプリを作らないケースも出ている
一方でRustで書いてAndroid上でツワモノもいるがそれはおいとくとして
Rustをこの件で使うケースはウェブブラウザで動くWasmのプログラミングする時かサーバーサイド側
あとはGoogleがAndroid OS開発にRustを使い始めた
そんなことはない
スマホアプリならKotlinとSwiftの2種類を無駄に覚えずともJavaScriptだけで両OS向けスマホアプリ作成が可能
もちろんスマホでもウェブアプリが動きアプリの種類によってはウェブアプリで十分なためスマホアプリを作らないケースも出ている
一方でRustで書いてAndroid上でツワモノもいるがそれはおいとくとして
Rustをこの件で使うケースはウェブブラウザで動くWasmのプログラミングする時かサーバーサイド側
あとはGoogleがAndroid OS開発にRustを使い始めた
335デフォルトの名無しさん
2021/09/08(水) 14:35:34.40ID:kw5H9VGz めっちゃWasm使ってるわ、使い心地としてはgoのが良いのだが
てか絶対JS書きたくない勢以外は勧められないけどな
エントリーポイントで4〜5行JS書かざるを得ないが、そこはコピペだから俺は1行も書いてない
てか絶対JS書きたくない勢以外は勧められないけどな
エントリーポイントで4〜5行JS書かざるを得ないが、そこはコピペだから俺は1行も書いてない
336デフォルトの名無しさん
2021/09/08(水) 19:04:28.13ID:beXhRlkk >>335
javascriptからwasmにディスパッチする際のオーバーヘッドってどう?
javascriptからwasmにディスパッチする際のオーバーヘッドってどう?
337デフォルトの名無しさん
2021/09/08(水) 19:45:38.33ID:tR72XlKG getopt()みたいなのでRust標準はどのクレイト?
338デフォルトの名無しさん
2021/09/08(水) 20:27:20.45ID:aH1RnViv clapだけど、それを使ったさらに便利なstructoptのほうがおすすめかも
339デフォルトの名無しさん
2021/09/08(水) 21:24:09.27ID:Ug8WkgwI clapはv3でstructoptの機能を取り込むから、今ならclapの3.0.0-beta4を使うのでもいいかも
340デフォルトの名無しさん
2021/09/08(水) 21:44:07.80ID:XbOUeFJA >>339
その後、structoptはどうなるの?
その後、structoptはどうなるの?
341デフォルトの名無しさん
2021/09/08(水) 23:46:53.75ID:tR72XlKG342デフォルトの名無しさん
2021/09/09(木) 00:04:52.59ID:fa/WJTRs マクロは見やすさだけじゃなくてコンパイル時に諸々チェックされるのが嬉しい
343デフォルトの名無しさん
2021/09/09(木) 20:16:33.24ID:Rwhy6P/q 数値の並びがある時に
その中の一番大きなものがある場所(index)が欲しいのですが
Rustではどう書くとよいでしょうか?
その中の一番大きなものがある場所(index)が欲しいのですが
Rustではどう書くとよいでしょうか?
344デフォルトの名無しさん
2021/09/09(木) 20:38:00.34ID:fa/WJTRs >>343
たとえばこう
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c7a0d0459c540d7b373b124d7faf239a
たとえばこう
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c7a0d0459c540d7b373b124d7faf239a
345デフォルトの名無しさん
2021/09/09(木) 21:09:46.20ID:18O2MBOf >>344
copied()っているっけ?
copied()っているっけ?
346デフォルトの名無しさん
2021/09/09(木) 21:32:28.08ID:Rwhy6P/q ありがとうございます
無しでもいけました
別の質問です
Vecにスライス(の各値のコピー)をappendしたいのですが
append()メソッドはVecしか引数に取れず困っています
どうすればいいでしょうか?
無しでもいけました
別の質問です
Vecにスライス(の各値のコピー)をappendしたいのですが
append()メソッドはVecしか引数に取れず困っています
どうすればいいでしょうか?
347デフォルトの名無しさん
2021/09/09(木) 21:36:39.36ID:dEhWYfPh ちったあググれよ
教えて君は嫌われるよ
教えて君は嫌われるよ
348デフォルトの名無しさん
2021/09/09(木) 21:55:23.66ID:aKI9+8DZ349デフォルトの名無しさん
2021/09/09(木) 22:34:44.73ID:18O2MBOf >>346
append()はその名前から想像しにくい実はムーブで引数側のVecは空になるw
じゃあappendはどうすればいいかというと
1つだけappendするpush()の複数版のpush_all()が元々あって
それは名前変更で今はextend_from_slice()になった
がその中身はより一般化したExtendトレイトのextend()を呼んでるだけになったので
結論としてはv.extend(&a)が正解
append()はその名前から想像しにくい実はムーブで引数側のVecは空になるw
じゃあappendはどうすればいいかというと
1つだけappendするpush()の複数版のpush_all()が元々あって
それは名前変更で今はextend_from_slice()になった
がその中身はより一般化したExtendトレイトのextend()を呼んでるだけになったので
結論としてはv.extend(&a)が正解
350デフォルトの名無しさん
2021/09/09(木) 23:25:03.49ID:12Nq5czF Rust 1.55.0 リリース
351デフォルトの名無しさん
2021/09/10(金) 01:12:44.66ID:t0Gbnfvj faqのような気がするんだが、以下のようなコードって
どうすればコンパイル通る?
#[derive (Copy)]
struct St{
s: String
}
fn main(){
let ar = [St{s: String::from("str")}; 10];
}
どうすればコンパイル通る?
#[derive (Copy)]
struct St{
s: String
}
fn main(){
let ar = [St{s: String::from("str")}; 10];
}
352デフォルトの名無しさん
2021/09/10(金) 01:34:46.88ID:Dnq/g++J 参照を配列に格納するか
let st = St{s: String::from("str")};
let array = [&st; 10];
Stringじゃなく&strにするか
#[derive (Debug, Clone, Copy)]
struct St{
s: &'static str
}
かな?
let st = St{s: String::from("str")};
let array = [&st; 10];
Stringじゃなく&strにするか
#[derive (Debug, Clone, Copy)]
struct St{
s: &'static str
}
かな?
353デフォルトの名無しさん
2021/09/10(金) 01:38:58.21ID:t0Gbnfvj354デフォルトの名無しさん
2021/09/10(金) 01:44:26.77ID:59f2QwjZ355デフォルトの名無しさん
2021/09/10(金) 05:44:54.18ID:XIGB6bHM もはやご希望のものかどうかはわからんが
#[derive(Clone)]
struct St{
s: String
}
fn main(){
let ar = vec![St {s: String::from("str")}; 10];
}
CopyをCloneして配列をvecにしただけ
#[derive(Clone)]
struct St{
s: String
}
fn main(){
let ar = vec![St {s: String::from("str")}; 10];
}
CopyをCloneして配列をvecにしただけ
356デフォルトの名無しさん
2021/09/10(金) 06:59:27.65ID:59f2QwjZ■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【サッカー】「国立ガラガラじゃん!」 「タダ券ばら撒かないんだっけ?」天皇杯決勝、6万7750人収容のスタンドに目立つ空席 [鉄チーズ烏★]
- 【立憲民主党】「質問レベルの低さが立憲の存立危機事態」台湾有事発言を引き出した立憲“執拗追及”が波紋… [尺アジ★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★13 [BFU★]
- ゼレンスキー氏、アメリカの支援失う危険あるとウクライナ国民に演説 米和平案めぐり [1ゲットロボ★]
- 【サッカー】天皇杯決勝戦 町田×神戸 [久太郎★]
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★14 [BFU★]
- 他サポ 2025-261
- ハム専ファンフェス
- 2025 SUPER FORMULA Lap18
- 京都競馬4回5日目エリザベス女王杯★3
- 【フジテレビ】2025 FORMULA 1【NEXT】Lap600
- 福島競馬3回5日目
- 【高市悲報】観光地から中国人🇨🇳が消え始める。。。。。。。。。。。。。日本人さあ、ほんとにこれでいいのか??? [573041775]
- 高市早苗「G20サミット、なめられない服を選びました。外交交渉でマウント取れる服買わないとなぁ」大炎上 [165981677]
- (*´ω`*)がショボンに捕まるやつ
- 魂心家の日で行列
- 【悲報】田崎史郎氏「発言撤回したら高市政権は終わる」 [115996789]
- 「中国残留孤児」これ本当に悲しい話だよな。でも、そんな日本人の子どもを分け隔てなく育ててくれた中国の田舎の人は偉いわ [389326466]
