質問
rustでプログラミングするのに当たってこれはわかってた方が良いみたいな知識やその身に着け方を教えてください。
TeraTailで質問をしていて、回答者の言ってることが理解できません
背景
いろんなサイトでrustの入門のものをいくら読んでも何がわかって何がわかってないかわからないのでpythonのdiscord.pyで作ってたdiscordのbotをrustのserenityで作り直したり、行列計算をrustで実装したりしているのですが、その時にどうしてもわからないことがあって質問してもそれに対する回答があまり理解できないことがある。
現状の理解度
C言語をある程度できて、所有権やライフタイムもそこそこ理解できてResultやOptionも慣れてきたかなという具合です。非同期に関してはさっぱりわかってない
持っている本
『実践RUSTプログラミング入門』(難しすぎました)
余談(?)
モダンな言語すぎて変化が速く、2017年とかの個人ブログ等に書いてあることが今でも通用してふさわしいのか判断することが難しくて辛い
どこが??
gentaroさんが提案してくれたものを改変して 追記
Rustの学習中ですが、過去にこのような質問(https://teratail.com/questions/342452)をして回答をいただいたものの、その回答の「クロージャからasyncブロックを返すことにより非同期な処理が書けるようになります」などについてを理解できておらず、基礎的な知識の不足を感じていますので、より適した学習教材等を教えていただきたいです。
現在使っているのは『実践RUSTプログラミング入門』ですが、これも私にとっては内容が難しいと感じており、言語仕様を理解する以前に本の中で行われている目的に躓いてしまいます
ネット上で学習リソースをいくつか探しましたが、そもそもRustは現在記事も少なく、また、上記の内容は特に単語ごとに分解され検索に引っかからないため見つかりませんでした。
もう少し平易で理解しやすい参考書や入門書、ネット上の文献等、皆さんの経験を踏まえて推奨のものがあれば教えてください。
> 『実践RUSTプログラミング入門』(難しすぎました)
何が難しいとか易しいというのは人それぞれなので、自分で選ぶしかないでしょう。
なぜ「自分に理解できるかどうか」という判断基準なのに人任せにするのか理解できません。
一般論で言うなら、もっと易しい言語で、もっと初歩的な物を作ればいいのでは?
Hello World とか。
Zuishinさん
確かにそうですね
不適切な質問だったかもしれません
代替案に関しては既にいろいろやってるし根本的にずれてる気がします
ずれてるかどうか、こちらでは判断できません。私はあなたと同じ人ではないし、あなたが既に何をやってるのか全く知らないので。
> 何が難しいとか易しいというのは人それぞれなので、自分で選ぶしかないでしょう。
これがコメントの主旨です。
自分で選ぶしかないというのはわかりました
あまりにわからない言葉が多いのであれば、自分の実力に見合っていないことをしているので、もっと初歩的なところから始めたらいいと思います。
「いろいろしている」ことが足りていません。
クロージャも async も await も全部調べればすぐわかることなので、わからなければ調べたらいいと思います。
多分その本にも書いてあります。
そもそも Rust は難しめの言語で、他の言語をある程度使える人に向けた資料しか見つかりにくいと思うので、入門者用の言語から始める選択肢もあります。
「Rustは難しいのだから初心者はやめろ」で突き放してしまうのはいかがなものかと思います。
LEGEND さん、質問がたくさんあるようでしたらSlackチームの rust-jp に参加してみてはどうでしょうか。
初心者でも質問しやすいように専用のチャンネルも用意されています。
https://rust-jp.rs/
equal-l2さんありがとうございます
slackはまだよくわかってないですが参加しました
> 「Rustは難しいのだから初心者はやめろ」で突き放してしまうのはいかがなものかと思います。
そんなことは言っていません。
「いろいろしたけどわからなかった」人にはそのような道もあるということです。
そのような道がないということですか?
Rust は「必ず最初に」習得しなければいけない言語ですか?
「C言語をある程度できて」という文も読めない人は黙っててください
C言語、Python、Java、Perl、Go、Haskell、Gallina等いろいろやってます
それだけの言語がある程度できて、それでもできないとしたら、もう無理でしょう。
「ある程度」がどの程度か知りませんが、FizzBuzz くらいですか?
さすがにクロージャの意味すらわからないのは「ある程度できる」範疇には一般的に言って入らないと思います。
根本的に相手を見下して決めつけることしかできないあなたは黙ってください
不快な投稿として通報しました
自分を過大評価するのをやめたらもっと素直に読めるんじゃないですかね。
他の言語で関数に渡す無名関数ぐらいのイメージでクロージャは聞きなじみはあったけど、
Rustのラムダ式のようなもののを同じくクロージャと呼ぶと知らなかっただけです
あ、返信はいらないです
無名関数とクロージャは全然違います。
あなたはまず自分を知るところから始めるべきでしょう。
クロージャを無名関数として実装してる言語はあります
これ以上ここを汚さないでください
汚してるのはあなたでしょう。
クロージャを無名関数として実装してるという言葉自体、その意味が分かってない証拠です。
クロージャにしても、async にしても、ブロックにしても、それぞれ基本中の基本です。
それらが使える以前に意味すらわからないのに、あなたは自分を様々な言語が使いこなせるプログラマーだと思い込み、そうでないという評価に対してただのマウントで汚れた言葉だと思っているからだめなんですよ。
そこにリンクしてある回答も、言葉の意味がわからなければ、
知ったかぶりでベストアンサーつけずに聞けばいいじゃないですか。
言葉も通じてないのにわかったふりをするようなことを積み重ねてきたのが今のあなたです。
その現状を認識できれば成長の余地はあるでしょうが、できなければそのまま一生絵本を探し続ける以外にないんじゃないですか?
そもそもここは素人の質問にプロが無償で答えるサービスではなく、エンジニアが相互に助け合うところです。
それだけの言語がある程度使いこなせるなら、質問するだけではなく回答したらいいでしょう。
そうすれば、自分がどの程度できるのかも、自己評価でなく相対的にわかると思います。
ここ(Teratail)は誰かの能力を判定して批判する場所ではありません。
また、「クロージャからasyncブロックを返すことにより非同期な処理が書ける」という回答について理解できなかったからといって、それが、プログラミングの初心者であることを意味するわけではありません。他の方の回答にもありますが、Rustの非同期処理は結構難しいです。他の言語でのプログラミング経験が十分にあっても、Rustにおける非同期処理がどのように実現されているかを知らなければ、その回答は理解できないでしょう。
もちろん私も、以下のコメントについては適切だと思います。
- Rust は難しめの言語で、他の言語をある程度使える人に向けた資料しか見つかりにくい
- 入門者用の言語から始める選択肢もある
が、それ以上のコメント、例えば「Hello World(をやってみたら)」や「もう無理でしょう」はちょっと行き過ぎに感じました。
Hello World が適当かどうかはやってみなければわからないでしょう。行き過ぎでも何でもありません。どこまでできるかわからない場合はそこから始めるべきです。
無理かどうかについても、ちゃんと条件が書いてあります。
実力を低く判断されたくないなら、せめて専門用語くらいは自分で調べて書くべきです。
それができないのは初心者です。
あと、批判というのはズレています。全く言葉がわからず、調べることもできないなら、実力に見合ったことをすべきという当たり前のことを言っているだけです。
「あなたのコメント」が日本語でいう「批判」にあたります。
そもそも、初心者でないのに「学ぶための前提知識」を問うというのが私には全く理解できません。
初心者は自分が初心者であると認めて初めて学んでいけるのではないですか?
批判と質問者へのおべんちゃらをいうサイトでしたっけ?
クロージャについての理解度が中途半端であったことは認めます
匿名関数とクロージャが全然違うのかという天において
「関数閉包はプログラミング言語における関数オブジェクトの一種。いくつかの言語ではラムダ式や無名関数にて利用可能な機能・概念である。」(https://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AD%E3%83%BC%E3%82%B8%E3%83%A3)
「C++ 11 以降では、ラムダ式 (多くの場合、 ラムダ と呼ばれます) は、関数に引数として呼び出されるか、引数として渡される匿名関数オブジェクト ( クロージャ) を定義する便利な方法です。」(https://docs.microsoft.com/ja-jp/cpp/cpp/lambda-expressions-in-cpp?view=msvc-160)
等との整合性がとれないので別件で質問を建てようかと思います
しかし、そもそもあなたZuishinさんがRustについてどれだけ知った上で話してるのかという疑問があります
非同期ブロックを返すクロージャについて改めて質問したところ、「クロージャ」「async」「ブロック」という言葉の意味を組み合わせても非常に非自明な(Rustの特有の)内容になっており、全体的に見ないとわからないようなものを単語に分解して、調べればわかるだろというようなニュアンスで話すあなたがただ無知でてきとーにそれっぽいこと並べて話してるように見えて信頼できません。
もしRustにとても精通していて、なおかつ「基本中の基本的な単語や概念としてここまで理解したらRustに戻ってきていいよ」的な明確な基準があれば、それを詳細に回答に書いてくれると幸いです。
回答4件
あなたの回答
tips
プレビュー