公式
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
330デフォルトの名無しさん
2021/07/16(金) 07:53:03.75ID:xJNtEE5m >>329
マジ!? ちょっと困るなぁ
マジ!? ちょっと困るなぁ
331ハノン ◆QZaw55cn4c
2021/07/17(土) 20:18:11.59ID:Blzyac97332デフォルトの名無しさん
2021/07/17(土) 22:06:07.73ID:u8FQMqKe Win11は u16, i16 が使えなくなるのか
ま、使ったことないけど
ま、使ったことないけど
333デフォルトの名無しさん
2021/07/17(土) 23:18:45.26ID:H+CbDngl どうしてそうなる
334デフォルトの名無しさん
2021/07/18(日) 01:10:05.65ID:uA1uG+Zo 冗談と気付くまで時間かかっちゃったぞ
335デフォルトの名無しさん
2021/07/19(月) 17:48:08.64ID:Ex9Tt6CE Rustの文法を教えて欲しいんだけどさあ
https://github.com/seanmonstar/reqwest
ここのExampleの中にある
>.json::<HashMap<String, String>>()
の行って、渡されたデータをHashMapに変換してるようだけど・・・・()があるから関数を呼び出しているんだろうけど、なのに関数名が無いってどういう文法なの?
https://github.com/seanmonstar/reqwest
ここのExampleの中にある
>.json::<HashMap<String, String>>()
の行って、渡されたデータをHashMapに変換してるようだけど・・・・()があるから関数を呼び出しているんだろうけど、なのに関数名が無いってどういう文法なの?
336デフォルトの名無しさん
2021/07/19(月) 18:18:59.22ID:N5AD9uIb >>335
関数名はjsonで::の後はjsonの型パラメーター
関数名はjsonで::の後はjsonの型パラメーター
337デフォルトの名無しさん
2021/07/19(月) 18:58:43.60ID:R+McuOkS >>335
turbofishで検索してみると幸せになれるかもよ
turbofishで検索してみると幸せになれるかもよ
338デフォルトの名無しさん
2021/07/20(火) 08:52:59.51ID:m4QWlK0Z そういうことだったのか
チュートリアルやったつもりが全然身についてなくて、まるで初見の文法に見えたよ
ありがとう!
チュートリアルやったつもりが全然身についてなくて、まるで初見の文法に見えたよ
ありがとう!
339デフォルトの名無しさん
2021/07/20(火) 11:37:04.97ID:bZGFynsp async/awaitよく理解できないので質問です。
async fnを.awaitすることは、
thread::spawn(fn)で得られたJoinHandleをjoinすることと何が異なるのでしょうか
async fnを.awaitすることは、
thread::spawn(fn)で得られたJoinHandleをjoinすることと何が異なるのでしょうか
340デフォルトの名無しさん
2021/07/20(火) 13:18:42.59ID:ZLL16lvF341デフォルトの名無しさん
2021/07/20(火) 13:51:30.35ID:x1qprig3 日本語でOK
342デフォルトの名無しさん
2021/07/20(火) 14:46:16.61ID:0ur63h8Z343デフォルトの名無しさん
2021/07/20(火) 17:53:25.45ID:poqzYj22 >>339
どのプログラミング言語でも同じ概念の話として
非同期プログラミングとスレッドプログラミングの違いをまず学ぶと良いでしょう
非同期プログラミングはスレッド使わないシングルスレッドでも成立するしよく使われます
スレッドは無駄にリソースを喰って重いのでスレッドを使わないシングルスレッドでプログラミング出来る事ならばそれが最も軽くて速いです
まずはシングルスレッドでの非同期プログラミングを経験しておきましょう
もちろん最初はasync/awaitを使わずに非同期プログラミングを体験したほうが良いでしょう
そうすることで初めてasync/awaitの意義と利便性を理解することができます
以上が通常のasync/awaitの初心者がたどるべき入門コースです
どのプログラミング言語でも同じ概念の話として
非同期プログラミングとスレッドプログラミングの違いをまず学ぶと良いでしょう
非同期プログラミングはスレッド使わないシングルスレッドでも成立するしよく使われます
スレッドは無駄にリソースを喰って重いのでスレッドを使わないシングルスレッドでプログラミング出来る事ならばそれが最も軽くて速いです
まずはシングルスレッドでの非同期プログラミングを経験しておきましょう
もちろん最初はasync/awaitを使わずに非同期プログラミングを体験したほうが良いでしょう
そうすることで初めてasync/awaitの意義と利便性を理解することができます
以上が通常のasync/awaitの初心者がたどるべき入門コースです
344デフォルトの名無しさん
2021/07/21(水) 18:10:51.09ID:xEcHVrDP 初級プログラマーは非同期プログラミングをしたことない人もいるけど
中級プログラマーになるには必須の技術だからね
中級プログラマーになるには必須の技術だからね
345デフォルトの名無しさん
2021/07/21(水) 20:22:35.81ID:zFAfbWuD 初級なら知らなくても仕方ない、中級なら必須という区分けはなんか違和感あるかな。対象の業務次第で知っとけよって範囲は違うからなぁ。
346デフォルトの名無しさん
2021/07/22(木) 00:13:25.98ID:nOo3Pk8s その辺は分野にもよるでしょ
組み込みと可だと初級でもマルチスレッドシラネはかなり問題だぞ
組み込みと可だと初級でもマルチスレッドシラネはかなり問題だぞ
347デフォルトの名無しさん
2021/07/22(木) 00:59:16.39ID:GmU5m4WV 昔ながらの言語だとスレッドはできてもコルーチンはできなかったりするので分野次第かな
348デフォルトの名無しさん
2021/07/22(木) 03:11:24.17ID:lswwPTyi349デフォルトの名無しさん
2021/07/22(木) 10:08:08.42ID:I7nexIle プリエンプティブじゃないマルチタスクωですねわかります
350デフォルトの名無しさん
2021/07/22(木) 11:38:36.18ID:K4TSDl0a await後にどのスレッドが戻ってくるかは運なの?
351デフォルトの名無しさん
2021/07/22(木) 13:02:57.44ID:DiCBumX8 >>350
ランタイムの実装次第
ランタイムの実装次第
352デフォルトの名無しさん
2021/07/22(木) 16:56:26.36ID:PJWgwtfy >>350
async/awaitとスレッドは直接は関係がない
async/awaitの対象はタスク
例えば1つのスレッドに10000のタスクを動作可能
8つのスレッドそれぞれでそれを行なえば計80000のタスクになるけども
スレッド1つにタスク1つしか使わなければ8つのスレッドで計8つのタスクになるといった具合い
これらはランタイムによってサポートが様々
したがって正確な質問は「await後にどのタスクが戻ってくるかは運なの?」となるけど
これはランタイムのスケジューリング次第
ランタイムはRustの言語仕様範囲外なので自分で決めた方針でスケジューリングするランタイムを作ることが可能
つまり運ではなく自分の思い通りに実行させることも可能
async/awaitとスレッドは直接は関係がない
async/awaitの対象はタスク
例えば1つのスレッドに10000のタスクを動作可能
8つのスレッドそれぞれでそれを行なえば計80000のタスクになるけども
スレッド1つにタスク1つしか使わなければ8つのスレッドで計8つのタスクになるといった具合い
これらはランタイムによってサポートが様々
したがって正確な質問は「await後にどのタスクが戻ってくるかは運なの?」となるけど
これはランタイムのスケジューリング次第
ランタイムはRustの言語仕様範囲外なので自分で決めた方針でスケジューリングするランタイムを作ることが可能
つまり運ではなく自分の思い通りに実行させることも可能
353デフォルトの名無しさん
2021/07/22(木) 17:10:57.69ID:KJg/dUdU JSのasync awaitってややこしい
goroutineのほうが簡単
goroutineのほうが簡単
354デフォルトの名無しさん
2021/07/22(木) 20:26:18.99ID:7YxYJ8AQ promise使うのに比べてそこまで楽か?って言われるとそうでもないわな
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 だから式文じゃない文は () でいいんじゃね?特に特別扱いとは思わんが。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【工作員】「X」のアカウント所在地公開機能が暴いた世論操作の実態 MAGA支持著名アカウントの多くが米国外から運営 日本にも波及 ★2 [ごまカンパチ★]
- 【高市関税キター!!】個人輸入・少額輸入品への税優遇見直しへ…1万円以下の輸入品にも消費税を課す方針★2 [1ゲットロボ★]
- 【・(ェ)・】「くまちゃんがいた」散歩中の2歳園児が発見 クリ林に1頭のクマ…保育士「ワンちゃんだね…」と声かけて移動 [Ailuropoda melanoleuca★]
- 【芸能】人気ゲーム実況者が一定期間の活動休止を発表「彼女以外の女性複数人と関係を持った」 [湛然★]
- 【大阪】日本一高い観覧車が落雷で緊急停止 約20人乗客が閉じ込められ9時間にわたり救助活動 [七波羅探題★]
- ラピダス、第2工場建設でも見えぬ顧客 技術開発も難題山積 [蚤の市★]
- 【悲報】高市早苗、首相就任から一ヶ月経ってもいまだ"会食ゼロ"…仲間づくりや意見交換をないがしろする態度に批判さっとう [339712612]
- 【高市悲報】日経社説「高市の台湾発言は思慮不足。地域の緊張を高めて米国の不信を招く」 [663382246]
- 【悲報】小野田紀美「私のドレスは日本の正礼装なんだが?ダサいと言ってるやつは日本文化を否定し国内ブランドを貶したいのか?」 [802034645]
- 【悲報】日本円、トリコリラに対しても円安加速開始WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- たぬかなはん、ちょっとクズすぎなんじゃね? [267550838]
- 何も考えずクンニマシーンとして生きたいクンニだけしてたい
