公式
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/
※C++との比較は専用スレへ
C++ vs Rust
https://mevius.5ch.net/test/read.cgi/tech/1619219089/
前スレ
Rust part10
https://mevius.5ch.net/test/read.cgi/tech/1617367084/
探検
Rust part11
■ このスレッドは過去ログ倉庫に格納されています
2021/06/17(木) 00:24:12.56ID:NvYoNP9C
355ハノン ◆QZaw55cn4c
2021/07/22(木) 20:40:46.75ID:BtepJ1kx356デフォルトの名無しさん
2021/07/22(木) 23:09:12.36ID:9gEORT6M JSのawait/asyncとかめちゃくちゃ簡単やろ
シングルスレッドなのと背後にイベントループが存在することを抑えておけば余裕よ
すまんスレチだな
シングルスレッドなのと背後にイベントループが存在することを抑えておけば余裕よ
すまんスレチだな
357デフォルトの名無しさん
2021/07/23(金) 00:43:44.14ID:n7dIeb/9 >>355
ここはRustのスレ。
スレッドとはstd::threadであり、いわゆるOSスレッド。
つまり1つのOSプロセスの中で、1つまたは複数のOSスレッドが動く。
一方で、async/.awaitが対象としているのは、スレッドよりさらに小さいタスク。
つまり1つのOSスレッドの上で、1つまたは複数のタスクが動く。
例えばシングルスレッドマルチタスクランタイムでは、1つのOSスレッドの上で無数のタスクを動かすことができる。
async/.awaitはこの非同期に実行されるタスクを扱う。
ここはRustのスレ。
スレッドとはstd::threadであり、いわゆるOSスレッド。
つまり1つのOSプロセスの中で、1つまたは複数のOSスレッドが動く。
一方で、async/.awaitが対象としているのは、スレッドよりさらに小さいタスク。
つまり1つのOSスレッドの上で、1つまたは複数のタスクが動く。
例えばシングルスレッドマルチタスクランタイムでは、1つのOSスレッドの上で無数のタスクを動かすことができる。
async/.awaitはこの非同期に実行されるタスクを扱う。
358デフォルトの名無しさん
2021/07/23(金) 02:10:09.02ID:j3QjPF86 asyncは途中I/Oウェイトで待たされるような処理じゃないと意味がない
359デフォルトの名無しさん
2021/07/23(金) 10:52:29.51ID:QeE9wwG7 スレッド、プロセス、タスクなどの定義は分野やプラットフォーム等によって異なる
360デフォルトの名無しさん
2021/07/23(金) 12:55:46.87ID:luTvzo3i VSCode+Rust Analyzerの環境で、ミュータブル変数にアンダーラインが付されるのをやめたいのですがどうすればよいですか?
361デフォルトの名無しさん
2021/07/23(金) 13:55:17.59ID:Y7b/5yJk awaitの前後でスレッドは変わる可能性があるものの、タスクは変わらないんだと思ってたわ
362デフォルトの名無しさん
2021/07/23(金) 13:58:58.67ID:c2hWXBFi >>357の言う「タスク」って1つのasync関数のように読めるんだが、そういう理解で合ってるのか?
363デフォルトの名無しさん
2021/07/23(金) 14:46:14.22ID:eQcO0XNp364デフォルトの名無しさん
2021/07/23(金) 15:12:50.36ID:c2hWXBFi だとすると「スレッドよりさらに小さい」ってのは変だな。大きい小さいあるいは包含関係が決められるものじゃない。
365デフォルトの名無しさん
2021/07/23(金) 15:14:21.60ID:6EkuYiQH そもそも直交する概念だし用途によって使い分けるものでもあるし
366デフォルトの名無しさん
2021/07/23(金) 16:49:32.73ID:+8+VImv7 スレッドより軽量という意味での小さいなら分かる
367デフォルトの名無しさん
2021/07/23(金) 19:17:06.47ID:Nx0yKcVz Elixirのプロセスは、軽量プロセスと言われていて、
OSのプロセスやスレッドではなく、Greenスレッドです
カーネルではなく、VMでスケジューリングされるので軽量、
コンテキストスイッチが発生しない
1軽量プロセスで約300ワードです
OSのプロセスやスレッドではなく、Greenスレッドです
カーネルではなく、VMでスケジューリングされるので軽量、
コンテキストスイッチが発生しない
1軽量プロセスで約300ワードです
368デフォルトの名無しさん
2021/07/23(金) 19:46:36.80ID:j3QjPF86 ここはRustスレ
369デフォルトの名無しさん
2021/07/23(金) 21:20:19.48ID:O9MjyOb4 いつものRubyキチガイだろう
何言っても無駄だからスルーするしかない
何言っても無駄だからスルーするしかない
370デフォルトの名無しさん
2021/07/23(金) 21:25:52.66ID:c2hWXBFi >>366
スレッドで動くんだから「スレッドより軽量」ってことはない。
スレッドで動くんだから「スレッドより軽量」ってことはない。
371デフォルトの名無しさん
2021/07/23(金) 21:50:34.41ID:TZPR0HeA >>367
軽量プロセスでもコンテキストスイッチは発生するよ
軽量プロセスでもコンテキストスイッチは発生するよ
372デフォルトの名無しさん
2021/07/23(金) 22:59:27.49ID:eQcO0XNp >>370
タスクと同じことをスレッドでやろうとした場合の比較ね
タスクと同じ数のスレッドを作った場合スタックだけで結構な量のメモリが必要になったりする
あとコンテキストスイッチのコストは少なく済んだりするんじゃないかな
タスクと同じことをスレッドでやろうとした場合の比較ね
タスクと同じ数のスレッドを作った場合スタックだけで結構な量のメモリが必要になったりする
あとコンテキストスイッチのコストは少なく済んだりするんじゃないかな
373デフォルトの名無しさん
2021/07/23(金) 23:08:30.77ID:c2hWXBFi374デフォルトの名無しさん
2021/07/24(土) 00:30:53.20ID:LBBZ+Kmj 心臓のスイッチ切って死なねえかなこいつら
375デフォルトの名無しさん
2021/07/24(土) 01:45:40.45ID:5ex845z5376デフォルトの名無しさん
2021/07/24(土) 02:52:34.75ID:F/fcX2Mm タスクって名前が良くないな
一般的にはタスクってプロセスのことじゃない?
一般的にはタスクってプロセスのことじゃない?
377デフォルトの名無しさん
2021/07/24(土) 02:57:53.91ID:UokC4u3Y んなことないでしょ???
378デフォルトの名無しさん
2021/07/24(土) 04:00:31.27ID:NjCPGO8Q タスクってのは内部実装的には非同期I/Oを使ったシングルスレッドでしょ。
379デフォルトの名無しさん
2021/07/24(土) 07:37:56.03ID:vPIKycwR380デフォルトの名無しさん
2021/07/24(土) 09:29:01.55ID:qEX1axDl Rustのasyncについて知りたければ「async-book」は必読なので
次からテンプレに入れよう
https://rust-lang.github.io/async-book/
>>980
よろしこ
次からテンプレに入れよう
https://rust-lang.github.io/async-book/
>>980
よろしこ
381デフォルトの名無しさん
2021/07/24(土) 10:59:35.94ID:/TMjuFD+ >>379
1スレッドで同時に実行されるタスクが1つというのは正しい
従来のスレッドでの並列化(1スレッド1タスク)の場合、IO処理を呼び出すと処理完了するまでの間はスレッドはsleep状態になってしまっていた
sleepしている間に他のタスクを実行させるためには、実行するタスクと同じ数だけのスレッドを生成する必要があるが
スレッド生成で消費するリソースが多いため数万タスクを同時に捌くことは難しかった
async-awaitではIO処理完了までの間スレッドをsleep状態にするのではなく別のタスクを実行する
これによりスレッドあたりの処理可能タスク数が増えるため、アプリケーション全体で同時に捌けるタスク数も増える
従来の手法でもスレッドをsleepさせないようなプログラミングは可能だけどプログラムの構造を大きく書き換えないといけなかった
普通のスレッド並列のプログラムと同じ書き味でより多くのタスクを捌けるプログラムが書けるというのがasync-awaitの一番のメリット
ただし常にasync-awaitが望ましいわけでもない
async-awaitで効率的に実行できるのはIO待ちが発生するタスクの場合で、CPUをぶんまわす処理には向いていない
適材適所で従来のスレッドによる並列化手法と組み合わせて使うことになる
1スレッドで同時に実行されるタスクが1つというのは正しい
従来のスレッドでの並列化(1スレッド1タスク)の場合、IO処理を呼び出すと処理完了するまでの間はスレッドはsleep状態になってしまっていた
sleepしている間に他のタスクを実行させるためには、実行するタスクと同じ数だけのスレッドを生成する必要があるが
スレッド生成で消費するリソースが多いため数万タスクを同時に捌くことは難しかった
async-awaitではIO処理完了までの間スレッドをsleep状態にするのではなく別のタスクを実行する
これによりスレッドあたりの処理可能タスク数が増えるため、アプリケーション全体で同時に捌けるタスク数も増える
従来の手法でもスレッドをsleepさせないようなプログラミングは可能だけどプログラムの構造を大きく書き換えないといけなかった
普通のスレッド並列のプログラムと同じ書き味でより多くのタスクを捌けるプログラムが書けるというのがasync-awaitの一番のメリット
ただし常にasync-awaitが望ましいわけでもない
async-awaitで効率的に実行できるのはIO待ちが発生するタスクの場合で、CPUをぶんまわす処理には向いていない
適材適所で従来のスレッドによる並列化手法と組み合わせて使うことになる
382デフォルトの名無しさん
2021/07/24(土) 11:28:00.32ID:0bHT8/gy >>379
いいえ
1つのスレッド上で同時に複数のタスクを並行(concurrent)に実行できるのがasync/awaitのタスクです。
C10Kと言われるように1つのスレッド上で10000のタスクでも並行に実行できます。
ちなみに1つのスレッド上で並列(parallel)に実行されるのは1つのタスクのみなのは当たり前なので、わざわざ言うことはないです。
今回はasync/awaitの話なので、
『1つのスレッド上で同時に複数のタスクを並行(concurrent)に実行できる』が正解です。
いいえ
1つのスレッド上で同時に複数のタスクを並行(concurrent)に実行できるのがasync/awaitのタスクです。
C10Kと言われるように1つのスレッド上で10000のタスクでも並行に実行できます。
ちなみに1つのスレッド上で並列(parallel)に実行されるのは1つのタスクのみなのは当たり前なので、わざわざ言うことはないです。
今回はasync/awaitの話なので、
『1つのスレッド上で同時に複数のタスクを並行(concurrent)に実行できる』が正解です。
383デフォルトの名無しさん
2021/07/24(土) 11:33:29.24ID:vPIKycwR >>381
その1スレッドが時分割で複数タスクを実行できるということのちょうど裏返しで、1タスクは複数スレッドから実行され得る。
つまりそこに大小関係、包含関係などは無い直交した概念。
軽量云々てのはOSスレッドとグリーンスレッドの話とごっちゃになってんじゃないかねぇ。
その1スレッドが時分割で複数タスクを実行できるということのちょうど裏返しで、1タスクは複数スレッドから実行され得る。
つまりそこに大小関係、包含関係などは無い直交した概念。
軽量云々てのはOSスレッドとグリーンスレッドの話とごっちゃになってんじゃないかねぇ。
384デフォルトの名無しさん
2021/07/24(土) 12:05:51.45ID:F/fcX2Mm385デフォルトの名無しさん
2021/07/24(土) 12:13:15.89ID:XrocH4ML ねえこの引っ込みがつかなくなったゴミクズ共のメンチの切り合いっていつまで続くの?
386デフォルトの名無しさん
2021/07/24(土) 12:14:13.90ID:XrocH4ML 包丁刺し合って死んで終わらないからネットのマウント取り合いって性質が悪いんだよね
387デフォルトの名無しさん
2021/07/24(土) 12:17:43.31ID:sVj/Jq99 5chに何も期待してるのか
388デフォルトの名無しさん
2021/07/24(土) 12:21:52.26ID:K4Uz+tqB389デフォルトの名無しさん
2021/07/24(土) 12:40:53.43ID:F/fcX2Mm390デフォルトの名無しさん
2021/07/24(土) 12:41:30.17ID:F/fcX2Mm 間違った
並行じゃないってことね
並行じゃないってことね
391デフォルトの名無しさん
2021/07/24(土) 12:42:53.22ID:F/fcX2Mm で、実際のところランタイムってlongjmpみたいなことしてるの?
392デフォルトの名無しさん
2021/07/24(土) 12:49:05.14ID:yYYDVwTY393367
2021/07/24(土) 12:51:25.18ID:zz8rVX09 Elixir, Go の軽量プロセスと同じでしょ?
OS は関係ない。
言語(VM)内で切り替えているだけだから
OS は関係ない。
言語(VM)内で切り替えているだけだから
394デフォルトの名無しさん
2021/07/24(土) 13:02:35.92ID:yYYDVwTY タスクの厳密な定義が気になるのってFutureを必要とする動機が無いんじゃないかね
別に新しいことができるわけじゃないし、必要無ければ知らなくていいよ
別に新しいことができるわけじゃないし、必要無ければ知らなくていいよ
395デフォルトの名無しさん
2021/07/24(土) 13:54:25.17ID:lC8WbEdp C10k問題がまずあって、それをselect/epollで解決するってシナリオをまず理解しておかないと
何でめんどくさい事わざわざやってんの?としかならんでしょ
モチベーションが大事
何でめんどくさい事わざわざやってんの?としかならんでしょ
モチベーションが大事
396sage
2021/07/24(土) 14:51:29.52ID:HHfUZBfC まともにテストしてねーじゃん
https://lkml.org/lkml/2021/7/7/422
https://lkml.org/lkml/2021/7/7/422
397デフォルトの名無しさん
2021/07/25(日) 01:04:24.12ID:2QCCz/RS オライリーのrustの本ってどう?
これから勉強するんだけど、これ使っても時代に遅れない?
これから勉強するんだけど、これ使っても時代に遅れない?
398デフォルトの名無しさん
2021/07/25(日) 02:38:56.34ID:kViuqetF 4年前の本だからおすすめはしないな
399デフォルトの名無しさん
2021/07/25(日) 02:43:00.77ID:xzEFH2+d >>383
マルチスレッドなランタイムを使えばスレッドとタスクはm:nだけど
シングルスレッドなランタイムを使えばスレッドとタスクは1:n
いずれの場合でもタスクはスレッドより軽量な存在であり直交する概念ではない
マルチスレッドなランタイムを使えばスレッドとタスクはm:nだけど
シングルスレッドなランタイムを使えばスレッドとタスクは1:n
いずれの場合でもタスクはスレッドより軽量な存在であり直交する概念ではない
400デフォルトの名無しさん
2021/07/25(日) 09:01:27.23ID:gzVcIMN0 >>397
原著の第2版がオススメ
といってもasyncの章が追加されたのを除くとコアなところは第1版と同じ
今のところオライリー本が圧倒的に良いので他の本で学ぶくらいなら第1版の訳書のほうがいい
古くなってるところはEdition Guideやasync-book、Rust Blogで補完
原著の第2版がオススメ
といってもasyncの章が追加されたのを除くとコアなところは第1版と同じ
今のところオライリー本が圧倒的に良いので他の本で学ぶくらいなら第1版の訳書のほうがいい
古くなってるところはEdition Guideやasync-book、Rust Blogで補完
401デフォルトの名無しさん
2021/07/25(日) 09:12:18.43ID:vKIU/TO0 俺もそう思う。古かろうがオライリー本が圧倒的に良い。
402デフォルトの名無しさん
2021/07/25(日) 09:59:11.23ID:jOyNlFI3403デフォルトの名無しさん
2021/07/25(日) 11:34:17.97ID:CXQT/x9B Rust はサンプルコードを見ながら真似ていれば雰囲気で書けるようになる……
なんていう言語ではないので基礎的な理屈を体系的に (それでいてわかりやすく)
説明してくれるオライリー本はとても良いよ。
確かに理屈っぽいが、 Rust がそういう言語なのでオライリーの本がつらいと思う人は
そもそも Rust がつらいタイプの人なんだと思う。
なんていう言語ではないので基礎的な理屈を体系的に (それでいてわかりやすく)
説明してくれるオライリー本はとても良いよ。
確かに理屈っぽいが、 Rust がそういう言語なのでオライリーの本がつらいと思う人は
そもそも Rust がつらいタイプの人なんだと思う。
404デフォルトの名無しさん
2021/07/25(日) 19:04:19.16ID:HNTE1GP9 Rustlingsのこれやっててよくわかんなかったんだけどさあ
https://github.com/rust-lang/rustlings/blob/main/exercises/if/if1.rs
自分の解答は
pub fn bigger(a: i32, b: i32) -> i32 {
if a > b{
return a;
}
b
}
これなんだけど、「return a;」のところってなんで「a」だけじゃダメなの?
https://github.com/rust-lang/rustlings/blob/main/exercises/if/if1.rs
自分の解答は
pub fn bigger(a: i32, b: i32) -> i32 {
if a > b{
return a;
}
b
}
これなんだけど、「return a;」のところってなんで「a」だけじゃダメなの?
405デフォルトの名無しさん
2021/07/25(日) 19:46:35.31ID:gzVcIMN0 elseがあればいいんじゃない?
406デフォルトの名無しさん
2021/07/25(日) 19:49:48.51ID:Wj/gwJho >>404
関数の最後じゃにゃいから
関数の最後じゃにゃいから
407デフォルトの名無しさん
2021/07/25(日) 21:25:46.69ID:2QCCz/RS オライリー買ってくる
408デフォルトの名無しさん
2021/07/25(日) 21:31:05.59ID:HNTE1GP9 ありがとう
最後の式だ特別なのか
最後の式だ特別なのか
409デフォルトの名無しさん
2021/07/26(月) 20:33:20.42ID:FeBtPwa3 文と式を区別しましょう
410デフォルトの名無しさん
2021/07/26(月) 21:31:17.41ID:H6CQkre6 ブロック式が値を持つなら式文も値を持たせればよかったと思うんだけど、それだと何か都合が悪いのかな。
411デフォルトの名無しさん
2021/07/26(月) 21:53:51.50ID:6YP5cq8/ それは式文を構成する式と何が違うのか
412デフォルトの名無しさん
2021/07/26(月) 22:05:31.99ID:H6CQkre6 最後だけセミコロンを外すとかしなくて済む。
413デフォルトの名無しさん
2021/07/26(月) 22:09:46.01ID:x+l/EPbt セミコロンあるなしで意味が変わるのって、バグを産む原因になりそう
414デフォルトの名無しさん
2021/07/26(月) 22:26:28.18ID:6YP5cq8/ その流れ前スレでも見た気がする
415デフォルトの名無しさん
2021/07/27(火) 00:03:59.51ID:rFi02BpK どちらかというと;の有無で()を返すかどうか制御できる方がいい気がするけどな
式文も値を持つならわざわざ();って書かないといけない
(まぁわざわざ書かせるのもRustらしい気もするが)
>>413
間違えたら型エラーになるからバグにはならんと思うよ
式文も値を持つならわざわざ();って書かないといけない
(まぁわざわざ書かせるのもRustらしい気もするが)
>>413
間違えたら型エラーになるからバグにはならんと思うよ
416デフォルトの名無しさん
2021/07/27(火) 03:17:46.37ID:MlLztw4F () を返す場合は関数省略だからreturn必須でよかったな
417デフォルトの名無しさん
2021/07/27(火) 05:41:20.63ID:QHeETuJ4 if-elseとかmatchとかでひたすら();書くのさすがにやばくない?
418デフォルトの名無しさん
2021/07/27(火) 08:21:13.66ID:fovpYeUo どうしても () を返さなきゃならない場面ってそんなに多いんだっけ?
419デフォルトの名無しさん
2021/07/27(火) 08:35:39.46ID:XvzwJYSJ コード例がないから全然わからん
420デフォルトの名無しさん
2021/07/27(火) 08:54:31.16ID:D32lY0Gw Ok(())とか?
421デフォルトの名無しさん
2021/07/27(火) 09:50:38.86ID:UmdqpWnl 最初アホみたいにReturn合った方が…とか思ってたけど慣れると全く要らん境地になるから不思議
422デフォルトの名無しさん
2021/07/27(火) 10:35:08.16ID:KNfqOmw/ >>418
少なくともletは値を返すわけにはいかないので()だね
まぁCopyなら返せなくもないけど、Copyかどうかで挙動が変わるのはさすがに…
();を明示する、みたいにするとletだけ特別扱いになるし、結局今のルールでいいんじゃないかと
少なくともletは値を返すわけにはいかないので()だね
まぁCopyなら返せなくもないけど、Copyかどうかで挙動が変わるのはさすがに…
();を明示する、みたいにするとletだけ特別扱いになるし、結局今のルールでいいんじゃないかと
423デフォルトの名無しさん
2021/07/27(火) 11:00:19.20ID:+VH8W8kj elseのないif式で偽の時の値の話だと思ってた
424デフォルトの名無しさん
2021/07/27(火) 11:03:48.76ID:MlLztw4F425デフォルトの名無しさん
2021/07/27(火) 19:22:36.90ID:AoeS3kCP でも、関数の最後じゃなくてもさあ
文があったら、そこでリターンしてくれたらいいのにな
まあ、ミスってても気づき辛くなるからダメなんかな?
文があったら、そこでリターンしてくれたらいいのにな
まあ、ミスってても気づき辛くなるからダメなんかな?
426デフォルトの名無しさん
2021/07/27(火) 19:47:32.00ID:klQCV9Qk 2文目以降は一切評価されないってことか
斬新だね
斬新だね
427デフォルトの名無しさん
2021/07/27(火) 21:44:05.27ID:fovpYeUo428デフォルトの名無しさん
2021/07/27(火) 21:53:09.04ID:fgL6LRsn そもそもletは式じゃないし
429デフォルトの名無しさん
2021/07/27(火) 22:40:27.72ID:KUIeKdyD XXXがstatementだとか、XXXはexpressionだとか
そういう議論が出る時点でダメ言語のオーラが
言語オタクには楽しいかもしれないけど
そういう議論が出る時点でダメ言語のオーラが
言語オタクには楽しいかもしれないけど
430デフォルトの名無しさん
2021/07/27(火) 22:47:11.69ID:fovpYeUo だから式文じゃない文は () でいいんじゃね?特に特別扱いとは思わんが。
431デフォルトの名無しさん
2021/07/27(火) 23:18:47.62ID:rFi02BpK 文は()という単純なルールを崩してまで式文から値を得たいモチベーションがよくわからん
単に;を取って式にすればいいだけなのに
単に;を取って式にすればいいだけなのに
432デフォルトの名無しさん
2021/07/27(火) 23:20:35.98ID:3rBo4v1y Rust書いてて式と文を意識して区別しないといけないことなんて無いよ
CやPythonならあるけど
CやPythonならあるけど
433デフォルトの名無しさん
2021/07/27(火) 23:30:43.54ID:fgL6LRsn 関数末尾だけセミコロン外すのが気に入らないなら、C/C++でやってたようにreturn x;とすればいい
それで不都合を生むことはない
それで不都合を生むことはない
434デフォルトの名無しさん
2021/07/28(水) 00:01:15.04ID:SAGnL8kO clippy先生に注意される
435デフォルトの名無しさん
2021/07/28(水) 01:30:00.88ID:ch5q2ifJ 全てはclippy先生の仰せのままに
436デフォルトの名無しさん
2021/07/28(水) 01:47:51.35ID:QoybXfTv #![allow(clippy::foo)] を書けばいいじゃん
437デフォルトの名無しさん
2021/07/28(水) 04:09:34.57ID:96ImUxMy なるほど
>Rustのセミコロンは意味と構文からそれぞれ説明できる。
>意味論的には、以下の原則を覚えておけば十分である。
>
>・セミコロンで終端された文は強制的に () 型となる。
>・ブロックの途中の文は () 型でなければならない。
>・ブロックの型はブロックの最後の文の型と等しい。(文がひとつもない場合は ())
>Rustのセミコロンは意味と構文からそれぞれ説明できる。
>意味論的には、以下の原則を覚えておけば十分である。
>
>・セミコロンで終端された文は強制的に () 型となる。
>・ブロックの途中の文は () 型でなければならない。
>・ブロックの型はブロックの最後の文の型と等しい。(文がひとつもない場合は ())
438デフォルトの名無しさん
2021/07/28(水) 07:29:31.85ID:o1sqfUmC >・ブロックの途中の文は () 型でなければならない。
これがあるから1行目の仕様なんだろうけど、これの理由ってなんなのかな。
これがあるから1行目の仕様なんだろうけど、これの理由ってなんなのかな。
439デフォルトの名無しさん
2021/07/28(水) 08:03:12.35ID:LX2CDHAF 文に型なんてないよ
440デフォルトの名無しさん
2021/07/28(水) 08:14:26.64ID:9WJC0mlm 文って値を返さないのかと思ってたけれど、
()を返してるって事?
()を返してるって事?
441デフォルトの名無しさん
2021/07/28(水) 08:37:40.51ID:LX2CDHAF ブロックの型はブロックの最後の「式」の型と等しい。(「ブロックの最後に式がない」場合は())
ここの間違いが他のすべての説明によく分からない辻褄合わせを持ち込んでいるだけだと思う
ここの間違いが他のすべての説明によく分からない辻褄合わせを持ち込んでいるだけだと思う
442デフォルトの名無しさん
2021/07/28(水) 09:58:43.22ID:rdzsGCBs >>437
>・ブロックの途中の文は () 型でなければならない。
そもそもブロックの途中の文を()以外にすることってできるの?
{ foo; bar } みたいなブロックを{ foo bar }とは書けないし
>・ブロックの途中の文は () 型でなければならない。
そもそもブロックの途中の文を()以外にすることってできるの?
{ foo; bar } みたいなブロックを{ foo bar }とは書けないし
443デフォルトの名無しさん
2021/07/28(水) 10:29:08.57ID:LX2CDHAF444デフォルトの名無しさん
2021/07/28(水) 11:58:08.16ID:ch5q2ifJ Facebook、次期ビルドシステムの開発でRust言語の採用を明らかに
https://www.publickey1.jp/blog/21/facebookrust.html
https://www.publickey1.jp/blog/21/facebookrust.html
445デフォルトの名無しさん
2021/07/28(水) 11:59:44.89ID:rdzsGCBs >>443
文法の問題を解決しつつブロックの途中の文を()以外にする方法がわからんってことよ
文法の問題を解決しつつブロックの途中の文を()以外にする方法がわからんってことよ
446デフォルトの名無しさん
2021/07/28(水) 12:46:01.08ID:LX2CDHAF447デフォルトの名無しさん
2021/07/28(水) 12:58:11.75ID:LX2CDHAF 「文を()にする/()以外にする」の正確な意味を言語化してほしい
「文が評価されて結果として()/()以外が得られる」という意味で言っているのなら、文は評価されて結果を返すものではない
評価されて結果を返すものは式と呼ばれる
文は式ではない
「文が評価されて結果として()/()以外が得られる」という意味で言っているのなら、文は評価されて結果を返すものではない
評価されて結果を返すものは式と呼ばれる
文は式ではない
448デフォルトの名無しさん
2021/07/28(水) 13:10:10.87ID:rdzsGCBs449デフォルトの名無しさん
2021/07/28(水) 13:12:38.58ID:YxciSlP+ この一連の議論の評価値は ()
450デフォルトの名無しさん
2021/07/28(水) 13:27:20.45ID:LX2CDHAF451デフォルトの名無しさん
2021/07/28(水) 14:29:43.24ID:x93GMB6T >>449
コンパイルエラーだよ
コンパイルエラーだよ
452デフォルトの名無しさん
2021/07/28(水) 14:52:26.31ID:QoybXfTv セミコロン省略できる式文(?)の型が()ではない場合は型エラーになるね
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=85e09ac464b7f9fb07b6aa1e2d08e8c9
セミコロンをつけたり、型を()にしたりするとエラーにならない
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4e4152ae35e8fd2821060f44ed9a2fda
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=86429babc54c38b515dfe1f9de85f127
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=85e09ac464b7f9fb07b6aa1e2d08e8c9
セミコロンをつけたり、型を()にしたりするとエラーにならない
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4e4152ae35e8fd2821060f44ed9a2fda
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=86429babc54c38b515dfe1f9de85f127
453デフォルトの名無しさん
2021/07/28(水) 17:33:51.84ID:Ns6HtioT 最も単純化してこれはコンパイル通るけど
fn main() {
if true {
1
} else {
0
};
()
}
しかし上記のifの尻のセミコロン無しだとコンパイルエラー【値が()ではない】となる
セミコロン無しでも数字1と0を()へ変えればコンパイルが通る
つまり
>>437
>・ブロックの途中の文は () 型でなければならない。
ifをセミコロン無しで値が数字だと上記の条項を満たせないためエラー
ifをセミコロン無しで値が()だと上記の条項を満たせる
あるいは
>・セミコロンで終端された文は強制的に () 型となる。
値が数字でもifをセミコロン終端させれば上記の条項を満たせる
fn main() {
if true {
1
} else {
0
};
()
}
しかし上記のifの尻のセミコロン無しだとコンパイルエラー【値が()ではない】となる
セミコロン無しでも数字1と0を()へ変えればコンパイルが通る
つまり
>>437
>・ブロックの途中の文は () 型でなければならない。
ifをセミコロン無しで値が数字だと上記の条項を満たせないためエラー
ifをセミコロン無しで値が()だと上記の条項を満たせる
あるいは
>・セミコロンで終端された文は強制的に () 型となる。
値が数字でもifをセミコロン終端させれば上記の条項を満たせる
454デフォルトの名無しさん
2021/07/28(水) 17:46:15.09ID:SAGnL8kO455デフォルトの名無しさん
2021/07/28(水) 18:03:06.43ID:zh3fVAA3 >>454
そのリファレンスの説明だけだと
以下はコンパイル通るけど、関数内の3つの()のうち任意の1つでも数値に変えるとコンパイルエラーとなる説明はどの部分になる?
fn main() {
if true {
()
} else {
()
}
()
}
そのリファレンスの説明だけだと
以下はコンパイル通るけど、関数内の3つの()のうち任意の1つでも数値に変えるとコンパイルエラーとなる説明はどの部分になる?
fn main() {
if true {
()
} else {
()
}
()
}
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★2 [BFU★]
- 【速報】日本産牛肉の対中国輸出再開協議が中止 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★3 [ぐれ★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★8 [おっさん友の会★]
- 高市政権「生んだ以上は育てる」 麻生氏 [どどん★]
- 中国側が首相答弁の撤回要求、日本側拒否★8 [夜のけいちゃん★]
- 【高市速報】トヨタ社長、MAGA帽子をかぶって登場し世界を震撼させる [462275543]
- 【実況】博衣こよりのえちえち雑談🧪
- 【高市有事】牛肉の対中輸出再開協議が中止wwwwwwwwwwwwwwww [834922174]
- 中川翔子「みんな、詐欺師には気をつけて!」 [942773469]
- 【👊専】ロケット🚀👊😅👊🚀パーンチww🏡
- 日本人、ついに気づく「あれ、日本が対中国で取れる対抗措置ってなくない…?」 [931948549]
