21/06/30 22:36:50.05 Nj/xCjQN.net
>>146
CXXはどうですか?
152:デフォルトの名無しさん
21/07/03 10:43:55.27 6NDcSyYc.net
rust始めました!
ってゲームの方を始めてたネタをやろうと思ったけど
想像以上にクソゲー過ぎてダメだった
やっぱり言語の方がいい
153:デフォルトの名無しさん
21/07/03 16:18:59.47 VnJT/Tz5.net
検索するとゲームの方と言語の方が出てきてややこしい
Rust(ゲーム)は名前変えてくれ...
154:デフォルトの名無しさん
21/07/03 16:30:28.41 lPTKqMkr.net
それな
go(一般動詞)も名前を変えてくれ
155:デフォルトの名無しさん
21/07/03 16:48:51.41 VnJT/Tz5.net
GoはGolangって別名があるから問題ないけどRustに関してはRustLangとはあまり言わないのがなぁ
156:デフォルトの名無しさん
21/07/03 17:18:42.64 HAk/Aizq.net
まあそれはRustの問題ではないですが、クロス環境に問題を感じているなら、Haskellがお勧めですよ。
あわしろ氏がいつも言ってることですがね。
157:デフォルトの名無しさん
21/07/03 18:23:28.50 yvqGZDdm.net
rustlang言わない?
158:デフォルトの名無しさん
21/07/03 19:07:06.86 3WlrzvVf.net
そもそもオフィシャルのレポジトリ名がrust-lang/rustだし普通に言うのでは
159:デフォルトの名無しさん
21/07/03 19:51:08.37 VnJT/Tz5.net
言わなくはないけどRustLangよりはRustと呼ばれることのが多い気がする
GoだったらGo(golang)とかGolangとか言われることが多いけど
160:デフォルトの名無しさん
21/07/03 22:13:02.85 yvqGZDdm.net
単にgoよりgooglabilityが高いことのあらわれじゃね
別にそんなに困ったこと無いけどな
161:デフォルトの名無しさん
21/07/03 23:01:24.13 5pcVeoYl.net
ていうかGoはもうgolangに改名したほうがいいと思う
Goではとにかく名前がクソすぎる
そもそもなんかダサいし
162:デフォルトの名無しさん
21/07/04 00:56:25.25 KTwjVJIR.net
goはogle(いやらしい目で見る)という名前のデバッガとセットで売り出す予定だったけど
ogleがこけたから残念な名前だけが残ってしまった
163:デフォルトの名無しさん
21/07/04 01:51:19.90 1GGCqeGW.net
Rustってゲームなかったっけ?
164:デフォルトの名無しさん
21/07/04 05:17:25.91 pNIAvX41.net
あるからこまってる
165:デフォルトの名無しさん
21/07/04 09:10:12.70 1GGCqeGW.net
JuliaでAV女優ばっか出てくるのと一緒やな
166:デフォルトの名無しさん
21/07/04 09:10:48.09 FDfsH90c.net
たいていは rust + 別の単語 でググるけどゲームの情報が出てきて困ったことはあまりないかな
167:デフォルトの名無しさん
21/07/04 09:12:10.94 Ik+vLhuV.net
pythonってそう考えるとなかなかいいネーミング
168:デフォルトの名無しさん
21/07/04 09:13:21.27 1GGCqeGW.net
そういやRustはツイッター検索だとかなり厄介だったな
169:デフォルトの名無しさん
21/07/04 09:25:35.54 FDfsH90c.net
既存の名詞使うときは perl みたいにスペルに一ひねり加えるのが良いんだろうね
rust でやるのは難しいけど
170:デフォルトの名無しさん
21/07/04 17:06:20.02 DVzGg7Pn.net
>>166
pearlとしなかったのは既存言語が存在した偶然みたいだけどね
phpは某雑誌がよく引っ掛かってたな
171:デフォルトの名無しさん
21/07/05 22:26:57.75 GYdy1bNH.net
Rust とかGoとか固有名詞やめてほしいよね。。。
172:デフォルトの名無しさん
21/07/06 00:14:23.09 cmRSsVyO.net
固有名詞でない言語名...
「名前を言ってはいけないあの言語」みたいな名付けかな
173:デフォルトの名無しさん
21/07/06 00:37:05.95 GFPrEw7Y.net
既存の固有名詞じゃない方が珍しい気がする
174:デフォルトの名無しさん
21/07/06 07:26:35.07 SYh5jqXt.net
そう言う意味だとCとか最悪だな
175:デフォルトの名無しさん
21/07/06 09:07:51.28 qxjbHNhG.net
langを付けると意味が変わるしCは本当に検索ワードに迷う
176:デフォルトの名無しさん
21/07/06 10:07:00.27 t2+Z62DR.net
C++もtwitterでは検索できない。C#もだけど。
それは、わざとなんらかかの意図を持ってされていることかも知れない。
twitteの社長や技術者がC++が嫌いだとか。
177:デフォルトの名無しさん
21/07/06 11:00:10.66 cmRSsVyO.net
/ も無視されるし単純に記号が無視されるだけでしょ
178:デフォルトの名無しさん
21/07/06 11:33:36.74 GDULTuH0.net
つまりまたもやlispが最強だと判明してしまったわけたな
179:デフォルトの名無しさん
21/07/06 12:33:05.02 paV/EiqB.net
ガイジ度でRubyには勝てんだろ
180:デフォルトの名無しさん
21/07/06 13:48:45.02 t2+Z62DR.net
>>174
技術的には簡単に直せるのに直さないところに意図を感じる。
181:デフォルトの名無しさん
21/07/06 15:47:25.27 qxjbHNhG.net
技術的に簡単だと思うなら外部サービスとして提供してみたら?
182:デフォルトの名無しさん
21/07/06 17:48:26.50 W6OOwnvK.net
外部から伺い知れない部分について簡単に違いないと断言する人とは議論しとうない
183:デフォルトの名無しさん
21/07/06 17:56:26.40 luG13vJj.net
全文検索とか形態素解析を少しでもかじってたら簡単とは思えないはずなんだけどね。
184:デフォルトの名無しさん
21/07/06 18:02:06.64 t2+Z62DR.net
>>178
外部サービスとは?
内部の人がやるのは簡単でも、外部の人がやるのはとても大変。
>>180
俺は字句解析系はよくやっているので簡単に感じるが。
185:デフォルトの名無しさん
21/07/06 18:08:31.76 8bcWgGBz.net
人は陰謀論が大好きなんですよ
186:デフォルトの名無しさん
21/07/06 18:15:25.48 nSctAZgU.net
字句解析と形態素解析や全文検索はまったくの別物だろう
187:デフォルトの名無しさん
21/07/06 18:16:09.96 t2+Z62DR.net
陰謀論とかじゃなくて、壊したい相手に不利なようにするのがアメリカ流なんだよ。
卑怯な手口だが、卑怯という概念にはあの国には無いのだろう。
あの国の連中は、ことごとくそういう手口で生き残っているから、そのうち
技術の進歩が遅れてある時、がさっと負けだすかも知れないな、GAFAMも含めて。
188:デフォルトの名無しさん
21/07/06 18:17:03.75 t2+Z62DR.net
>>183
形態素解析などに入る前に、例えば、C++をcppと同一視してしまえばいいんだ。
189:デフォルトの名無しさん
21/07/06 18:20:48.86 M25Qh6q2.net
簡単に直せる
(計算量が増えたり既存機能に影響を与えたりするかもしれないけど)
ってことでしょ
190:デフォルトの名無しさん
21/07/06 19:17:37.60 luG13vJj.net
>>186
それを簡単と呼ぶのは研究とかラボの人間よね。
191:デフォルトの名無しさん
21/07/06 20:35:47.80 5M+Sovmm.net
字句解析と形態素解析の違いもわからないのはちょっと…
192:デフォルトの名無しさん
21/07/06 23:19:32.02 cmRSsVyO.net
まーたrustと関係ない話してる
193:デフォルトの名無しさん
21/07/06 23:35:07.67 qUsPK4G4.net
「また」って言うけど「いつも」の間違いだろ?
194:デフォルトの名無しさん
21/07/07 08:37:56.63 ICcjc0w9.net
>>184
で、c++を壊してtwitterにどんなメリットが?アホなの?
195:デフォルトの名無しさん
21/07/07 10:14:36.36 ifayQQT8.net
アホだと分かってるなら構うなよ
196:デフォルトの名無しさん
21/07/07 10:38:37.05 fRD7zTM6.net
URLリンク(lore.kernel.org)
panic問題は大部分解決されたみたい
197:デフォルトの名無しさん
21/07/08 01:55:46.25 qbgAaMCH.net
そういうのは形態素解析したあと、同義語辞書(シソーラス)で単語を正規化する作業になる。
形態素解析の段階で記号は除去しないとややこしくなるから記号入りの単語を使うのが悪いわな。
198:デフォルトの名無しさん
21/07/09 19:08:10.80 XWrdIq9z.net
ハッカーが使わない言語は流行らない。メモリ安全だけじゃ一部需要のみ
楽しい言語も流行らない。いつも趣味レベルの言語で終わる
199:デフォルトの名無しさん
21/07/09 19:58:26.11 /dpK029q.net
ハッカーって言葉久々に聞いた
200:デフォルトの名無しさん
21/07/09 20:07:52.69 vKrZ9ebb.net
自分のこと賢いと思ってそう
201:デフォルトの名無しさん
21/07/09 21:36:56.44 6sMTa3MH.net
流行で選ぶってアフィチューバーやアフィブロガーかな?
202:デフォルトの名無しさん
21/07/10 06:29:54.67 XPpA1ojF.net
一通り学習したつもりになったから、WebAPIで情報取得するプログラムでもいざ書いてみようと思ったら・・・・
いきなりreqwestのクレートでasync/awaitの壁があったぜ
これThe Bookのキーワードの項目にはあるものの、本編で出てきたっけ???
URLリンク(doc.rust-lang.org)
ちょっと適当に書いてみた感じ、他言語と違ってawaitしたところでアンラップされないのかな・・・・・?全然わからん
これって何を見たら学習できるの?
203:デフォルトの名無しさん
21/07/10 07:10:52.64 hr5Pc4AR.net
これでいいんじゃない?
URLリンク(rust-lang.github.io)
204:g_started/01_chapter.html
205:デフォルトの名無しさん
21/07/10 08:40:15.75 FBIqRA7j.net
reqwest::blocking使えば?
206:デフォルトの名無しさん
21/07/10 09:30:24.80 GKhTMPF2.net
ぼこぼこDLしてウザ過ぎる
207:デフォルトの名無しさん
21/07/10 09:31:26.47 GKhTMPF2.net
x.py build したあと、x.py install したら、
また意味不明にボコボコビルドし始めたんだけど、
知恵遅れなの?
208:デフォルトの名無しさん
21/07/10 09:47:05.85 4hsXIyfP.net
そういう所は今後改善して欲しいわな
209:デフォルトの名無しさん
21/07/10 13:41:38.31 e+Cu97LZ.net
>>195
面白い観点だな。
楽しい言語も流行らないか・・・、なんか考えさせられる。
210:デフォルトの名無しさん
21/07/10 13:52:24.60 aG/WAOkt.net
>>199
ureq 使えよ
211:デフォルトの名無しさん
21/07/10 14:01:01.07 4hsXIyfP.net
ハッカー専用の言語ってあるの?
212:デフォルトの名無しさん
21/07/10 14:20:32.32 hyh546Qk.net
prolog
213:デフォルトの名無しさん
21/07/10 14:25:24.27 jayrPH8y.net
いつまで miri のトラブルを放置しておくの?
ゴミ言語
214:デフォルトの名無しさん
21/07/10 14:28:17.22 a84ckjUx.net
ハッカーって・・・なに?
215:デフォルトの名無しさん
21/07/10 14:44:49.05 e+Cu97LZ.net
unsafeモードが使えても、safeモードでのコード生成結果が予測できないのであれば
使うのは難しい。
216:デフォルトの名無しさん
21/07/10 14:53:04.04 SrgkCeWe.net
無駄な通信と監視と役立たずのゴミでツリーを汚すゴミ
217:デフォルトの名無しさん
21/07/10 16:15:47.34 9b6+aeFV.net
ハッカーは書くスピードと実行時間が重要だからnimとかが向いてそう
少なくともRustは絶対にハッカーの第一言語にならない
218:デフォルトの名無しさん
21/07/10 16:53:00.70 zdV39cNV.net
お前がそう思うんならそういうことでいいよ
219:デフォルトの名無しさん
21/07/10 17:38:05.35 nAGZi/ZP.net
ハッカーとか呼んでねえからキーボードでもしゃぶってろ
220:デフォルトの名無しさん
21/07/10 17:43:28.58 IKbPFXW0.net
最強言語議論スレでやれ
221:デフォルトの名無しさん
21/07/10 17:56:33.98 wJrCg/wx.net
犯罪者用言語とか使いたくないなあ
222:デフォルトの名無しさん
21/07/11 01:09:10.02 MzFRAytS.net
ハッカー != 犯罪者 がモダンな解釈だと思うんだが。
○にかけのお爺さんかな?
223:デフォルトの名無しさん
21/07/11 02:27:33.50 0Hcxwo3i.net
ロシア人ハッカーグループって言ったら
犯罪者っぽくね?
224:デフォルトの名無しさん
21/07/11 02:54:13.69 6/u0+cwV.net
イスラエル人ハッカーグループって言うと
なにか巨大な国際政治がらみの陰謀っぽい
225:デフォルトの名無しさん
21/07/11 03:33:22.44 PFbpUEa3.net
日本人ハッカーグループ
よわそう
226:デフォルトの名無しさん
21/07/11 03:47:16.72 OgOa7vqd.net
日本は、一人当りのGDPだと先進30カ国中最下位レベルだけど、純粋な頭脳線だと、
三位以内に入ることが良くある。
227:デフォルトの名無しさん
21/07/11 09:25:42.31 Z2zeAI0N.net
純粋な頭脳線
228:デフォルトの名無しさん
21/07/11 09:54:14.29 HGkeQify.net
>>199
Rustはasync/awaitを言語レベルでゼロコストでサポートする代わりに非同期ランタイムを別途用意する必要がある
これによりRustでは様々な非同期ランタイムを言語と独立に自由に作ることができる
例えば非同期ランタイムを自作することも当然できてfuturesクレイトをその部品として使うことができる
もちろん非同期ランタイムを自作せずとも既に様々なコミュニティから提供されているのでそれを使うこともできる
具体的には例えば最も使われているtokioなどのチュートリアルを見るのが良いかな
URLリンク(tokio.rs)
229:デフォルトの名無しさん
21/07/11 11:06:14.34 MzFRAytS.net
>>219-220
その考え方が古い。(というか最初から?)間違ってる。
ハッカー == 凄い奴 的な意図でしかないので
ロシアだろうがイスラエルだろうが某大陸だろうが
超エリートなんだろうなとしか思わない(事になってる)。
犯罪者はクラッカーと言って区別される(事になってる)。
区別しようと言い出したのは…(ry
230:デフォルトの名無しさん
21/07/11 12:38:13.92 8RaHq8wW.net
でも発端の>>195の「ハッカー」はホワイトかブラックかは知らんがセキュリティ関連の話ちゃうんか?
231:デフォルトの名無しさん
21/07/11 12:47:21.47 sDQUZcY3.net
>>225
モダンな解釈だと良いハッカー=ホワイトハッカー 悪いハッカー=ハッカーですね
あと老人ホームから抜け出してまで5chなんてしたら家族に迷惑かかりますよ
迷惑かけない内に尊厳死をおすすめします
232:デフォルトの名無しさん
21/07/11 12:48:22.75 BdwgI/w3.net
そんな高度な話だったんだ
小学生がうんこちんちんって罵倒してるようなものだと理解していた
233:デフォルトの名無しさん
21/07/11 15:23:07.49 MzFRAytS.net
>>227
> 悪いハッカー=ハッカー
では無いよ、と書いてる事が理解できないかな?
>>227 がどう思おうがどうでも良いけど
話が通じないことがある事くらいは理解しといた方が
身のためだぞ。
URLリンク(ja.m.wikipedia.org)ハッカー
迷惑かけない内に勉強し直す事お勧めておきます。
234:デフォルトの名無しさん
21/07/11 15:31:18.36 lbKLD5N+.net
相変わらずマウンター専用言語になっとるな
235:デフォルトの名無しさん
21/07/11 15:34:34.85 HtoAUPrm.net
正しい定義がどうだろうと>>195の意図なんかわからんのでどうでもいいうんこちんちん
236:デフォルトの名無しさん
21/07/11 16:25:58.47 SRU4khSo.net
仕様や実装のマイナーな機能を使って人を驚かせるのがハッカーだ、と思ってるのでは
Cのポインタ祭りとかLISPのマクロ生成マクロとかを好むのだ、と
237:デフォルトの名無しさん
21/07/11 16:31:55.44 rINaUnOH.net
クソどうでもいい
238:デフォルトの名無しさん
21/07/11 16:37:35.60 8jG+0fGV.net
ハッカーの定義はどうでも良いからせめてrustの何がダメかを語れよ
239:デフォルトの名無しさん
21/07/11 16:47:25.03 0Hcxwo3i.net
rustは文字列の扱いに難があるなあ
sjisのコンテンツとかマルチバイトのファイル名(WinだとUTF16?)の扱い方がよくわからん
240:デフォルトの名無しさん
21/07/11 16:48:48.06 lbKLD5N+.net
Non-Lexical Lifetimes が制御フローレベルなので実装をデバッグできるやつがほとんどいない。
c++と同じレベルの複雑さを有するようになってきている。
cargoのビルドシステムがあまりに強制的すぎる。
メモリを直接いじる必要のある効率的なアルゴリズムでは結局unsafeになる。
メモリ最適化の許す範囲があまりに非自明でcから呼ぶのは不安定すぎる。
241:デフォルトの名無しさん
21/07/11 17:06:54.98 vvFM5IKu.net
コンテナ類が実際にどのように格納されているかが分からないと言うのは、
それをunsafeで扱うのが難しくなってる。
どこでコピーが生じて、どこがmoveなのかも分かりにくいことがあるし。
242:デフォルトの名無しさん
21/07/11 17:08:44.89 vvFM5IKu.net
ライフタイムもちゃんと仕様が書いてないから、手探り状態で試さないといけないし
プログラムするのに時間が掛かる。
色々やっても結局、C/C++のような効率のよい方法を取ることは不可能な場合もあるし。
243:デフォルトの名無しさん
21/07/11 17:30:39.23 QonYN50D.net
素晴らしい言語ですね
カニかわいい
244:デフォルトの名無しさん
21/07/11 18:42:50.97 0Hcxwo3i.net
ときどき、Javaの検査例外みたいなやらかし感を感じる
厳密にしすぎると却って使いづらいみたいな
245:デフォルトの名無しさん
21/07/11 19:53:14.68 8jG+0fGV.net
Box<dyn Error>やanyhowやeyreを使えば良いのでは
246:デフォルトの名無しさん
21/07/11 21:00:56.13 lZiRxAj0.net
>>235
Windows 系以外のすべての言語は、UTF-8
だから、MSYS/MinGW でも、UTF-8以外でバグるので、
UTF-8以外を使っちゃいけない!
唯一バグらないのは、WSL。
Windows Terminal, VSCode のRemote WSL などで、
ls /mnt/c/Users/Owner/Documents/
と入力すると、日本語のフォルダ名も、正しく表示される
出力
あ
い
たぶん、Windowsが変換しているのだろう
247:242
21/07/11 21:05:19.71 lZiRxAj0.net
WSL は一種のチート
ハイパーバイザーでLinux を起動して、
Linux側から、Windows側のドライブを見た時に、
UTF-8 以外の言語をUTF-8に変換する
まあ、漏れの推測だけど
248:デフォルトの名無しさん
21/07/11 21:46:26.10 0Hcxwo3i.net
>>242
そこに文句言われてもねー
要件に文句を付けるのはフェアじゃない
現実にUTF16でネーミングされたファイルがあって、
それにどう対応するかって話なんだけど
249:242
21/07/11 22:51:28.82 lZiRxAj0.net
だから、プログラマーの基本は、Windows 系など、UTF-8 以外を使わない事!
この大原則を守っていない人は、システムを作れない
システムには、ascii しか使えない!
これが大原則
250:デフォルトの名無しさん
21/07/11 22:51:54.52 3favf/XH.net
>>244
WinならOsStringのエンコーディングは普通にUTF-16だから何の問題もないと思うが
sjis扱いたいならencoding-rsとか
結局何に困ってるのかわからないと何とも言いようがない
251:デフォルトの名無しさん
21/07/11 22:52:47.14 g6LNT/Hh.net
Ruby外耳に構うなよ
252:デフォルトの名無しさん
21/07/12 00:42:25.80 Hp3EIfPo.net
じつはわしはRustはやったことなかったのだが、
これまでの経験上おそらく >>236 みたいな感じだろうなと想像してたら
ほんとうにそのとおりでワロタw
アホみたいに「安全ドグマ」に縛られるとたいがいそうなる
253:デフォルトの名無しさん
21/07/12 01:08:52.63 hS+nIw/n.net
>>245
プログラマーの基本! とか システムを作れない(キリッ とか言われても
既存のシステムがそうなってるんだという話
「システムには、ascii しか使えない!」とか言ったら、客に帰れと言われるだけ
>>246
sjisファイルを読み込みたい
でもチュートリアルにあるようにBufReaderは使えない
そりゃ読み込んだ後、変換処理したら何でもありでしょ
でも、ネイティブに処理できん?と思う
むしろ安全性にこだわる割に文字に対するこの雑さは何なの?と
254:デフォルトの名無しさん
21/07/12 01:27:11.82 j3ZM+094.net
論理的な問題点以前に、言語として見た目的な美しさも無いし、記述が
簡潔でもなければ直感的でもなく、無駄に長くなる。
255:242
21/07/12 01:50:03.57 7a0iIKMk.net
システムには、ascii しか使わないのは、Linux の基本
AWS でも、そう。
半角空白もバグるから、使わない
必ず、客から注意される。
日本語のファイル名・半角空白を使わないでと。
バグるから
例えば、5ch は、sjis だからバグだらけ。
; を書いていないのに、文字列の後ろに、; が付いてるとか
sjisとか、Windows以外では、どうしようもない
256:デフォルトの名無しさん
21/07/12 02:01:17.96 uNcygyrG.net
encoding-rsつかいにくい
257:デフォルトの名無しさん
21/07/12 02:17:50.78 MXdX1Uu3.net
>>249
バイト列としてVec<u8>に読んじゃえば後はCと一緒じゃん
それともlocaleとwchar_tフル活用したいという話?
258:デフォルトの名無しさん
21/07/12 02:37:38.72 hS+nIw/n.net
>>253
それでcrlfでsplitしろって?
なんて原始的な…
259:デフォルトの名無しさん
21/07/12 0
260:3:41:51.48 ID:3p3WQ9hU.net
261:242
21/07/12 04:00:29.19 7a0iIKMk.net
>>242
に書いたみたいに、
sjis, UTF-16 などのWindows 用言語で、
唯一バグらないのは、WSL だけ
WSL でLinux側から、Windows側のドライブを見た時だけ、
日本語のファイル名を正常に変換できる
Windows Terminal, VSCode のRemote WSL などで使える
ひょっとして、Windows用言語を扱っていて、WSLを使っていないの?
262:デフォルトの名無しさん
21/07/12 09:20:21.53 fBGbiQ8q.net
>>249
変換せずに扱いたいのか?いまいちよくわからんが、既存の言語で理想的なやつってどれ?
Rustは文字列に関しては最もちゃんとしてる方だと思うけど
263:デフォルトの名無しさん
21/07/12 09:26:54.48 fBGbiQ8q.net
あ、あとascii/WSLおじさんは気にしなくていいと思うよ
少なくともRustにそんな制限はない
Cとかだとasciiに限定したい気持ちもわからなくはないけど
264:デフォルトの名無しさん
21/07/12 09:39:13.23 cIYVT4Ba.net
・ファイルシステム上のエンコーディング
・OSのAPIのエンコーディング
・言語のAPIのエンコーディング
・言語の文字列のエンコーディング
それぞれ独立だし変換しあってることをおじさんは理解していないと見える
265:デフォルトの名無しさん
21/07/12 09:40:16.32 cIYVT4Ba.net
最後2つは基本的に同じだけど
266:デフォルトの名無しさん
21/07/12 09:56:37.25 Jwa42/D9.net
>>255
でもUTF8は「ひらがな」ですら3バイトになるので困る。
267:デフォルトの名無しさん
21/07/12 11:12:15.24 k3eDnaJZ.net
>>256
へー WSL って言語だったんだωωω
268:デフォルトの名無しさん
21/07/12 11:13:38.78 k3eDnaJZ.net
>>260
違うよ
269:デフォルトの名無しさん
21/07/12 11:24:40.84 hS+nIw/n.net
>>257
どれが理想的というか、rustは特にめんどい気がした
fgetsが出来ればそれでいいんだが
270:デフォルトの名無しさん
21/07/12 12:42:05.71 4jaglyfV.net
>>261
最近だと何に困った?
271:デフォルトの名無しさん
21/07/12 12:58:50.09 Yne+2tk7.net
>>249
sjisを変換せずそのまま内部表現として標準的に扱うプログラミング言語って具体的に何?
もちろん全ての言語でバイト配列としては扱えるけどsjisにとってそれは無意味であり
先頭から全読みしないとsjisの1バイト目か2バイト目かすらわからない欠陥sjis仕様のためsjisそのまま使うことはないよね
仮に入力も出力もsjisなら内部表現もsjisのままにしてsjis処理関数いっぱい
書くのも見合うケースがあるかもしれないけど
入出力の片方がsjisでないならば他との変換必ず必要だから内部表現をsjisにこだわる意味はないよね
一方で内部表現として処理を無条件に簡単にしようとするとUTF32で1文字32bitにするしかないけど常にUTF32強制ではメモリが無駄すぎる
そこでメモリ上だけでなくファイルもネット通信も無駄を避けるためにUTF8を用いる
という当たり前の帰結になりRustもそうだけどこれの何が不満なの?
272:デフォルトの名無しさん
21/07/12 13:37:26.66 hS+nIw/n.net
>>266
いや、内部表現なんてどうだっていいんだって
utf8以外のテキストを使うとResult<Error>でぶっ飛ばされるのが面倒なの
273:デフォルトの名無しさん
21/07/12 13:41:52.17 Yne+2tk7.net
>>267
それはUTF8文字列として扱う関数を使うからそうなる
普通に生バイト列として扱う関数を呼べばよい
このへんは多くのプログラミング言語で同じ話
274:デフォルトの名無しさん
21/07/12 13:45:10.21 XKWfaP9x.net
>>264
fgetsで良いって言うなら単にVec<u8>で読むだけだと思うけど
エラー処理が面倒というならとりあえずunwrapしてればいいし
そういうので文字数がかさむのが嫌だというなら、Rustは合ってないんじゃないかな
Rustは基本的にソースコード上にいろいろ明記したい言語なので
275:デフォルトの名無しさん
21/07/12 14:07:37.33 hS+nIw/n.net
>>269
それって行の切り出し(改行までのsplit)って自分で書かなきゃだめ?
276:デフォルトの名無しさん
21/07/12 14:14:18.06 XKWfaP9x.net
>>270
それは書かないといけないね
たぶんRustが好きな人は「fgetsだと何が改行コードとして想定されてるのか分からなくて不安」
って人が多いんじゃないかな
実際Linux環境でCR改行のファイルをfgetsするとどうなるのかよく分からんし
そういうふうに処理系がうまくやってくれることを期待するならGoとかもほうが合っているかも
277:デフォルトの名無しさん
21/07/12 14:16:40.71 4WArcuIG.net
splitすればいいだけじゃなくて?
278:デフォルトの名無しさん
21/07/12 14:18:27.57 hS+nIw/n.net
うーん、Windowsでsjisファイル読み込むのってそんなにニッチなのか……
>>271
>たぶんRustが好きな人は「fgetsだと何が改行コードとして想定されてるのか分からなくて不安」
>って人が多いんじゃないかな
BufReaderがあるので、それはないかと
279:デフォルトの名無しさん
21/07/12 14:29:03.08 XKWfaP9x.net
>>273
read_lineはLF区切りって決まってるからそんなに気にならないけどな
fgetsはプラットフォーム依存じゃなかったっけ?
もう忘れてしまったけど
280:デフォルトの名無しさん
21/07/12 14:30:57.94 7o0jLcLl.net
これはRustの問題ではない
例えばスクリプト言語であるJavaScriptでもsjisファイルを読み込むにはNodeでも標準サポートはない
だから生バッファに読み込んで次にそのsjisを内部へ変換するという手順となる
いずれにせよ文字コード変換の一行が余分に入るだけでありどの言語でも大した問題ではない
281:デフォルトの名無しさん
21/07/12 14:31:19.34 hS+nIw/n.net
>>272
うん、それはそうなんだ>splitすればいい
でも、なんでこんなにしつこく聞いたかっていうと
最近の言語にこんな基本的な機能ないわけないだろ?と思ったからなんだ
確かに自分で書いたって大した処理じゃない
でも、一人ひとりがそんな原始的なコード書いてるの?
ありえない 標準で用意しとけやって
282:デフォルトの名無しさん
21/07/12 14:35:03.79 hS+nIw/n.net
>>275
文字コード変換だけなら文句は言わない
昔からMulitbyteToWideCharを噛ませるぐらいのことはやってたからね
283:デフォルトの名無しさん
21/07/12 14:40:47.93 XKWfaP9x.net
最近の言語としては標準ライブラリが小さいというのはあるね
代わりに外部ライブラリをたくさん使うという方針
今のケースならこれかな
URLリンク(crates.io)
284:デフォルトの名無しさん
21/07/12 14:48:08.10 hS+nIw/n.net
>>278
おおっ! これ良さそうだね!
試してみる! サンキュー
285:デフォルトの名無しさん
21/07/12 14:48:41.98 hUBiSSyU.net
要はバイナリのsplitがあればいいんだろ
まあニッチだし標準には入りにくいだろうな
286:デフォルトの名無しさん
21/07/12 14:56:20.42 OFdOdpfq.net
>>265
ログ的なものや、テキストファイルが大きくなる。
開発中にはソースやバイナリを高頻度に単純コピーでバックアップしたいが、
そのとき、毎回毎回大きくなるのでディスクの無駄使いになる。
287:デフォルトの名無しさん
21/07/12 15:01:47.66 hS+nIw/n.net
>>281
それはもうutf8の問題じゃないんじゃないか?
288:デフォルトの名無しさん
21/07/12 15:08:46.48 wU8EXWL2.net
>>281
今さら何を言ってるんだ?
UTF-8が長いとか短いとか論争してたのは20世紀の過去の話であり今は2021年だ
UTF-9のエイプリルフールRFCが出たのですら16年前の2005年だ
既に20世紀に今後は世界中全てUTF-8で行くと方向が決まった
289:デフォルトの名無しさん
21/07/12 15:25:03.01 OFdOdpfq.net
日本語処理が僅かに遅くなる。
290:デフォルトの名無しさん
21/07/12 16:15:05.27 rb4auT/4.net
>>242
No
291:. Linux やら BSD やらでファイル名を UTF-8 と保証しているものはたぶん少数派だ。 ロケール設定で UTF-8 を選ぶのが多数派になっているのは疑いがないが、 システムとして保証しない分だけ Windows よりつらい。
292:デフォルトの名無しさん
21/07/12 16:35:47.66 OFdOdpfq.net
>>282
日本人そっちのけで勝手にアメリカ人が作った文字コード。
日本(と中国)だけが不利になった。
293:デフォルトの名無しさん
21/07/12 16:36:54.04 OFdOdpfq.net
最近でもJSは日本語の文字イベントがサポートされてない。
アメリカ中心。
294:デフォルトの名無しさん
21/07/12 17:25:47.35 +TTC9E1P.net
UTF-8の規格制定の時にはアジア圏も割と口出しだんではなかった?
295:デフォルトの名無しさん
21/07/12 17:31:04.46 XXt8kyyQ.net
余り上手く行ってなかったと聞いている。
296:デフォルトの名無しさん
21/07/12 17:47:35.65 msgpc4nf.net
>>287
日本語の文字イベントという意味不明なものは何だ?
日本語じゃない文字イベントというのも聞いたことないぞ
297:デフォルトの名無しさん
21/07/12 19:18:49.33 Yne+2tk7.net
sjisのfgets()相当の件だけど
標準のBufReaderのlines()で回すのは何が不満なんだっけ?
use std::error::Error;
use std::fs::File;
use std::io::{BufReader, BufRead};
use encoding_rs::SHIFT_JIS;
use encoding_rs_io::DecodeReaderBytesBuilder;
fn main() -> Result<(), Box<dyn Error>> {
let file = File::open("sjis.txt")?;
let reader = BufReader::new(DecodeReaderBytesBuilder::new().encoding(Some(SHIFT_JIS)).build(file));
for line in reader.lines() {
println!("utf8: {}", line?);
}
return Ok(());
}
298:デフォルトの名無しさん
21/07/12 19:44:27.20 XXt8kyyQ.net
>>290
nativeのWin32やMFCだと、IMEで日本語入力した時、WM_CHARで
SJISやUnicodeの文字コードを取得できるが、ブラウザ上のJSだと、
英字の範囲でしかそれに該当するイベント、つまり、IMEで
漢字やひらがなを打った結果を取得する文字イベントが無い。
299:デフォルトの名無しさん
21/07/12 19:46:32.99 NCQjfvng.net
>>292
URLリンク(developer.mozilla.org)
はい次
300:デフォルトの名無しさん
21/07/12 20:38:52.08 hS+nIw/n.net
>>291
いいね!
取得した文字列をOsStringに変換しなくても
なぜかファイルパスとして正常に動作するし(UTF16じゃなくていいのか……)
encoding_rs標準になればいいのに
301:デフォルトの名無しさん
21/07/12 22:26:31.98 +ke1h7j2.net
encoding_rsが標準になって欲しい(stdに入って欲しい?)のはなぜ?
302:デフォルトの名無しさん
21/07/12 22:49:13.65 hS+nIw/n.net
>>295
・基本機能だから
・ロジックを標準化するため
・Cargo.tomlのdependancyに記述するのが面倒だから
特にバージョン指定
303:デフォルトの名無しさん
21/07/13 00:30:07.97 n/daahFD.net
>>296
stdに取り込む提案のRFC書いてみたら?
304:デフォルトの名無しさん
21/07/13 03:10:04.82 EtxXgsUj.net
>>293
中身を理解して無いくせに黙ってろ。
305:デフォルトの名無しさん
21/07/13 03:20:46.36 qEHxTKb1.net
www
306:デフォルトの名無しさん
21/07/13 06:39:54.56 cTgR7KKr.net
UTF8(とASCII)以外の文字コードを扱うのが基本機能とは思えんが
307:デフォルトの名無しさん
21/07/13 07:23:42.37 b6J4OLfP.net
>>296
> 基本機能だから
UTF-8さえ標準で扱えれば問題ない、UTF-8は世界標準だから
よって基本機能ではない
なので標準化する必要もないし、cargo.tomlに依存ライブラリを書くのが面倒ならapt-getでライブラリをインストールして使うC言語でも使えばいい
308:デフォルトの名無しさん
21/07/13 0
309:8:54:58.88 ID:NU/mwW4g.net
310:デフォルトの名無しさん
21/07/13 09:10:42.11 lb+vVVj1.net
今は多少議論の余地があっても、数年したら
「なんでstdにSJIS扱うライブラリ入ってるの? めったに使わないのにバカじゃねーの」
って言われるのが目に見えてる
311:デフォルトの名無しさん
21/07/13 09:14:58.89 n/daahFD.net
エンコーディング関連のコードは量が多いだろうから
あらゆるプログラムのコンパイル時間を増やしたりバイナリサイズを大きくしたりするだけの価値があるかという議論にはなりそう
312:デフォルトの名無しさん
21/07/13 09:17:07.48 NU/mwW4g.net
encoding_rsはSJISのためのライブラリじゃないでしょ
313:デフォルトの名無しさん
21/07/13 09:36:27.67 /A7/SyKa.net
Cとかだと依存ライブラリの導入が面倒すぎるから標準化してほしいというのもわかるが
Cargo.tomlに一行書くのが面倒と言われてもあまり共感は得られないんじゃないかな
314:デフォルトの名無しさん
21/07/13 11:03:30.55 pwZ9R0Fi.net
>>291
変換したくないって話じゃなかったの?
315:242
21/07/13 11:43:58.46 dtNqNBdW.net
>>285
その通り。だから、
>>251
に書いたように、ユーザー名・ファイル名などのシステムには、ascii しか使えない
システム内部で、UTF-8/16 のどちらを使っているか不明だから、
共通項のasciiしか使えない
ただ、Windows で日本語のファイル名を使っている人も多いから、その場合は、
>>242
に書いたように、WSL で、Linux, UTF-8 に変換できると言うだけ
Windows言語だけは特殊。
Windows言語以外のすべての言語は、Linux, UTF-8 が基本
316:デフォルトの名無しさん
21/07/13 11:50:05.93 WUJYnH4r.net
SJIS 死ね
\ 死ね
317:デフォルトの名無しさん
21/07/13 11:52:00.92 WUJYnH4r.net
>>308
うby厨 死ね
318:デフォルトの名無しさん
21/07/13 12:40:03.07 pH6df75p.net
>>302 UTF-8を使えというより、今の標準はUTF-8だから標準化する必要がないということを言いたかった
そんなものを標準化したところで使うのは英語圏以外だけだし、その英語圏以外でも滅多に使うことはないから必要に応じてcargo.tomlに書き加える今の方式で良い
319:デフォルトの名無しさん
21/07/13 13:23:53.20 EtxXgsUj.net
>>311
多数決で言えば漢字文化圏の方が人口が多い。
しかも母国語が漢字を使う。英語を母国語とする人口は三億人くらい。
漢字を母国語で使うのは15億人くらい。
漢字以外の多バイト文字を使う国まで入れたら70億人、つまり地球の95%異常
となる。英語の方が少数派。
320:デフォルトの名無しさん
21/07/13 13:23:53.20 EtxXgsUj.net
>>311
多数決で言えば漢字文化圏の方が人口が多い。
しかも母国語が漢字を使う。英語を母国語とする人口は三億人くらい。
漢字を母国語で使うのは15億人くらい。
漢字以外の多バイト文字を使う国まで入れたら70億人、つまり地球の95%異常
となる。英語の方が少数派。
321:デフォルトの名無しさん
21/07/13 13:40:25.49 NU/mwW4g.net
漢字とかもあるけど、例えばMIME64のデコードとか
エンコード・デコード処理の標準化と考えれば英語圏でもありかも
322:242
21/07/13 13:42:56.59 dtNqNBdW.net
日本語をユーザー名・ファイル名など、システムに使うのは、Windows の香具師だけ
Linux を使うプロは絶対に、ascii しか使わない。
せいぜい、ハイフン・アンダーバーぐらい
もし、半角空白でも使えば、あちこちから怒りの声が届く。
システムがバグるから使うな!
323:デフォルトの名無しさん
21/07/13 13:46:44.21 NU/mwW4g.net
>>315
ここにいる人間はそんなことわかってるから、まあ落ち着け
324:242
21/07/13 13:46:50.24 dtNqNBdW.net
Linux のテレビの録画システムで、
日本語のテレビ番組名を、そのままファイル名にしていた香具師がいたけど、
バグって使えない
325:デフォルトの名無しさん
21/07/13 13:48:05.76 qZprVsAK.net
なんか変なのが居着いたな
326:デフォルトの名無しさん
21/07/13 14:21:53.19 Ooc6RI1Q.net
Rubyボットの活動範囲がさらに広がってきたな
よほど暇なんだろう
327:デフォルトの名無しさん
21/07/13 15:12:06.73 QsXB5/qu.net
今日はRust in Actionが45%off
328:デフォルトの名無しさん
21/07/13 15:55:17.99 oaeUW36h.net
>>307
そこは実は本質的な要件ではないらしく
>>249
> sjisファイルを読み込みたい
> でもチュートリアルにあるようにBufReaderは使えない
が本質的な要件だから
utf8と全く同様にFile::openとBufReaderしてreader.lines()を使えれば良いと見て
>>291のコードを提案した
そして「いいね!」とレスしてるからこれでOKのようだ
329:デフォルトの名無しさん
21/07/13 16:00:31.83 WUJYnH4r.net
>>316
だよな
そして >>315 がいつものあいつだということもみんなしってる
330:デフォルトの名無しさん
21/07/13 16:16:17.73 QSkHhbzy.net
Windows ではプログラムをインストールするフォルダが Program Files となっているのは
パスが空白を含むくらいでおかしくなるようなカスなソフトを早めに発見するためなんよな。
パスが空白も漢字も含みうる仕様なのに対応してないソフトがあるならそのソフトがカスなだけじゃん。
今の時点で現実にそういうソフトがあるから仕方ないという論法だと
SJIS のデータがあるから仕方ないというのと言ってることは同じなわけで、
データが大事かソフトが大事かという点で軸が違うに過ぎない。
331:デフォルトの名無しさん
21/07/13 19:45:00.15 SMX4Ldwl.net
cmd「せやな」
332:デフォルトの名無しさん
21/07/14 11:14:54.14 eOdFkTAr.net
Windows 11は64-bitのみになるみたいだけど
Rustじゃ i686-pc-windows-gnu, i686-pc-windows-msvc はいつまでTier 1なんだろう?
333:デフォルトの名無しさん
21/07/14 11:43:09.28 eD4Wlw/y.net
>>325
32bit macがtier3落ちしたときはxcodeでコンパイルもできないし実行環境もないからって理由だったはず
同様にmsvcはMSがサポート切ってくればなくなるかもね
32bitアプリ自体が動かなくなるわけじゃなさそうだしgnuは大丈夫なんじゃないかな
334:デフォルトの名無しさん
21/07/14 13:27:24.91 BkkfMVAi.net
Win11はOSが32bitCPUでは動かないってだけで32ビットアプリはまだ動くのでは
335:デフォルトの名無しさん
21/07/14 13:35:34.15 FWHo5b9L.net
それであってる
336:デフォルトの名無しさん
21/07/14 16:08:27.83 bE2/aeQE.net
Win11は、16bitが公式では完全に動かなくなる
337:デフォルトの名無しさん
21/07/16 07:53:03.75 xJNtEE5m.net
>>329
マジ!? ちょっと困るなぁ
338:ハノン
21/07/17 20:18:11.59 Blzyac97.net
>>329
え?今までも64ビット版Windowsでは 16 bit は NE フォーマットを含めて動かないと思っていました‥‥
だから emu を使っていましたが、今なら動くんですか?
339:デフォルトの名無しさん
21/07/17 22:06:07.73 u8FQMqKe.net
Win11は u16, i16 が使えなくなるのか
ま、使ったことないけど
340:デフォルトの名無しさん
21/07/17 23:18:45.26 H+CbDngl.net
どうしてそうなる
341:デフォルトの名無しさん
21/07/18 01:10:05.65 uA1uG+Zo.net
冗談と気付くまで時間かかっちゃったぞ
342:デフォルトの名無しさん
21/07/19 17:48:08.64 Ex9Tt6CE.net
Rustの文法を教えて欲しいんだけどさあ
URLリンク(github.com)
ここのExampleの中にある
>.json::<HashMap<String, String>>()
の行って、渡されたデータをHashMapに変換してるようだけど・・・・()があるから関数を呼び出しているんだろうけど、なのに関数名が無いってどういう文法なの?
343:デフォルトの名無しさん
21/07/19 18:18:59.22 N5AD9uIb.net
>>335
関数名はjsonで::の後はjsonの型パラメーター
344:デフォルトの名無しさん
21/07/19 18:58:43.60 R+McuOkS.net
>>335
turbofishで検索してみると幸せになれるかもよ
345:デフォルトの名無しさん
21/07/20 08:52:59.51 m4QWlK0Z.net
そういうことだったのか
チュートリアルやったつもりが全然身についてなくて、まるで初見の文法に見えたよ
ありがとう!
346:デフォルトの名無しさん
21/07/20 11:37:04.97 bZGFynsp.net
async/awaitよく理解できないので質問です。
async fnを.awaitすることは、
thread::spawn(fn)で得られたJoinHandleをjoinすることと何が異なるのでしょうか
347:デフォルトの名無しさん
21/07/20 13:18:42.59 ZLL16lvF.net
>>339
URLリンク(rust-lang.github.io)
348:デフォルトの名無しさん
21/07/20 13:51:30.35 x1qprig3.net
日本語でOK
349:デフォルトの名無しさん
21/07/20 14:46:16.61 0ur63h8Z.net
URLリンク(async-book-ja.netlify.app)
古い版ベースっぽいが
350:デフォルトの名無しさん
21/07/20 17:53:25.45 poqzYj22.net
>>339
どのプログラミング言語でも同じ概念の話として
非同期プログラミングとスレッドプログラミングの違いをまず学ぶと良いでしょう
非同期プログラミングはスレッド使わないシングルスレッドでも成立するしよく使われます
スレッドは無駄にリソースを喰って重いのでスレッドを使わないシングルスレッドでプログラミング出来る事ならばそれが最も軽くて速いです
まずはシングルスレッドでの非同期プログラミングを経験しておきましょう
もちろん最初はasync/awaitを使わずに非同期プログラミングを体験したほうが良いでしょう
そうすることで初めてasync/awaitの意義と利便性を理解することができます
以上が通常のasync/awaitの初心者がたどるべき入門コースです
351:デフォルトの名無しさん
21/07/21 18:10:51.09 xEcHVrDP.net
初級プログラマーは非同期プログラミングをしたことない人もいるけど
中級プログラマーになるには必須の技術だからね
352:デフォルトの名無しさん
21/07/21 20:22:35.81 zFAfbWuD.net
初級なら知らなくても仕方ない、中級なら必須という区分けはなんか違和感あるかな。対象の業務次第で知っとけよって範囲は違うからなぁ。
353:デフォルトの名無しさん
21/07/22 00:13:25.98 nOo3Pk8s.net
その辺は分野にもよるでしょ
組み込みと可だと初級でもマルチスレッドシラネはかなり問題だぞ
354:デフォルトの名無しさん
21/07/22 00:59:16.39 GmU5m4WV.net
昔ながらの言語だとスレッドはできてもコルーチンはできなかったりするので分野次第かな
355:デフォルトの名無しさん
21/07/22 03:11:24.17 lswwPTyi.net
>>346
今回はマルチスレッドしか知らなくて
(シングルスレッドでも動く)非同期プログラミングを知らないという話だから
356:デフォルトの名無しさん
21/07/22 10:08:08.42 I7nexIle.net
プリエンプティブじゃないマルチタスクωですねわかります
357:デフォルトの名無しさん
21/07/22 11:38:36.18 K4TSDl0a.net
await後にどのスレッドが戻ってくるかは運なの?
358:デフォルトの名無しさん
21/07/22 13:02:57.44 DiCBumX8.net
>>350
ランタイムの実装次第
359:デフォルトの名無しさん
21/07/22 16:56:26.36 PJWgwtfy.net
>>350
async/awaitとスレッドは直接は関係がない
async/awaitの対象はタスク
例えば1つのスレッドに10000のタスクを動作可能
8つのスレッドそれぞれでそれを行なえば計80000のタスクになるけども
スレッド1つにタスク1つしか使わなければ8つのスレッドで計8つのタスクになるといった具合い
これらはランタイムによってサポートが様々
したがって正確な質問は「await後にどのタスクが戻ってくるかは運なの?」となるけど
これはランタイムのスケジューリング次第
ランタイムはRustの言語仕様範囲外なので自分で決めた方針でスケジューリングするランタイムを作ることが可能
つまり運ではなく自分の思い通りに実行させることも可能
360:デフォルトの名無しさん
21/07/22 17:10:57.69 KJg/dUdU.net
JSのasync awaitってややこしい
goroutineのほうが簡単
361:デフォルトの名無しさん
21/07/22 20:26:18.99 7YxYJ8AQ.net
promise使うのに比べてそこまで楽か?って言われるとそうでもないわな
362:ハノン
21/07/22 20:40:46.75 BtepJ1kx.net
>>352
え?
そもそもタスクとはどう定義するのですか?
あなたの①プロセス②スレッド、そして③タスクの定義を教えてください、多分①②③の違いが明確でないので話が混乱しているかと
363:デフォルトの名無しさん
21/07/22 23:09:12.36 9gEORT6M.net
JSのawait/asyncとかめちゃくちゃ簡単やろ
シングルスレッドなのと背後にイベントループが存在することを抑えておけば余裕よ
すまんスレチだな
364:デフォルトの名無しさん
21/07/23 00:43:44.14 n7dIeb/9.net
>>355
ここはRustのスレ。
スレッドとはstd::threadであり、いわゆるOSスレッド。
つまり1つのOSプロセスの中で、1つまたは複数のOSスレッドが動く。
一方で、async/.awaitが対象としているのは、スレッドよりさらに小さいタスク。
つまり1つのOSスレッドの上で、1つまたは複数のタスクが動く。
例えばシングルスレッドマルチタスクランタイムでは、1つのOSスレッドの上で無数のタスクを動かすことができる。
async/.awaitはこの非同期に実行されるタスクを扱う。
365:デフォルトの名無しさん
21/07/23 02:10:09.02 j3QjPF86.net
asyncは途中I/Oウェイトで待たされるような処理じゃないと意味がない
366:デフォルトの名無しさん
21/07/23 10:52:29.51 QeE9wwG7.net
スレッド、プロセス、タスクなどの定義は分野やプラットフォーム等によって異なる
367:デフォルトの名無しさん
21/07/23 12:55:46.87 luTvzo3i.net
VSCode+Rust Analyzerの環境で、ミュータブル変数にアンダーラインが付されるのをやめたいのですがどうすればよいですか?
368:デフォルトの名無しさん
21/07/23 13:55:17.59 Y7b/5yJk.net
awaitの前後でスレッドは変わる可能性があるものの、タスクは変わらないんだと思ってたわ
369:デフォルトの名無しさん
21/07/23 13:58:58.67 c2hWXBFi.net
>>357の言う「タスク」って1つのasync関数のように読めるんだが、そういう理解で合ってるのか?
370:デフォルトの名無しさん
21/07/23 14:46:14.22 eQcO0XNp.net
>>362
tokio::spawnなどの引数に渡すものがタスク
async関数やブロックの場合もあるし、それらをコンビネーターでしたものの場合もある
371:デフォルトの名無しさん
21/07/23 15:12:50.36 c2hWXBFi.net
だとすると「スレッドよりさらに小さい」ってのは変だな。大きい小さいあるいは包含関係が決められるものじゃない。
372:デフォルトの名無しさん
21/07/23 15:14:21.60 6EkuYiQH.net
そもそも直交する概念だし用途によって使い分けるものでもあるし
373:デフォルトの名無しさん
21/07/23 16:49:32.73 +8+VImv7.net
スレッドより軽量という意味での小さいなら分かる
374:デフォルトの名無しさん
21/07/23 19:17:06.47 Nx0yKcVz.net
Elixirのプロセスは、軽量プロセスと言われていて、
OSのプロセスやスレッドではなく、Greenスレッドです
カーネルではなく、VMでスケジューリングされるので軽量、
コンテキストスイッチが発生しない
1軽量プロセスで約300ワードです
375:デフォルトの名無しさん
21/07/23 19:46:36.80 j3QjPF86.net
ここはRustスレ
376:デフォルトの名無しさん
21/07/23 21:20:19.48 O9MjyOb4.net
いつものRubyキチガイだろう
何言っても無駄だからスルーするしかない
377:デフォルトの名無しさん
21/07/23 21:25:52.66 c2hWXBFi.net
>>366
スレッドで動くんだから「スレッドより軽量」ってことはない。
378:デフォルトの名無しさん
21/07/23 21:50:34.41 TZPR0HeA.net
>>367
軽量プロセスでもコンテキストスイッチは発生するよ
379:デフォルトの名無しさん
21/07/23 22:59:27.49 eQcO0XNp.net
>>370
タスクと同じことをスレッドでやろうとした場合の比較ね
タスクと同じ数のスレッドを作った場合スタックだけで結構な量のメモリが必要になったりする
あとコンテキストスイッチのコストは少なく済んだりするんじゃないかな
380:デフォルトの名無しさん
21/07/23 23:08:30.77 c2hWXBFi.net
>>372
「タスク」の定義が>>363のようなものならそれはスレッドと直交する概念だと思うが?
381:デフォルトの名無しさん
21/07/24 00:30:53.20 LBBZ+Kmj.net
心臓のスイッチ切って死なねえかなこいつら
382:デフォルトの名無しさん
21/07/24 01:45:40.45 5ex845z5.net
>>370
async/awaitでのタスクはスレッドよりリソースを喰わず軽量
例えば1つのスレッドの上に1万個のタスクでも動作可能でいわゆるC10K問題も対応できる軽量さ
>>373
直交する概念ではなく重量順に
OSプロセス≧OSスレッド≧タスク
(それぞれ=となるのは1プロセス1スレッドおよび1スレッド1タスクで用いる時)
383:デフォルトの名無しさん
21/07/24 02:52:34.75 F/fcX2Mm.net
タスクって名前が良くないな
一般的にはタスクってプロセスのことじゃない?
384:デフォルトの名無しさん
21/07/24 02:57:53.91 UokC4u3Y.net
んなことないでしょ???
385:デフォルトの名無しさん
21/07/24 04:00:31.27 NjCPGO8Q.net
タスクってのは内部実装的には非同期I/Oを使ったシングルスレッドでしょ。
386:デフォルトの名無しさん
21/07/24 07:37:56.03 vPIKycwR.net
>>375
OSプロセスは複数のスレッドを持つ場合があるから≧でいいが、>>363の言うタスクなら
1スレッドで同時に実行できるのは1タスクしかないと思うが?
387:デフォルトの名無しさん
21/07/24 09:29:01.55 qEX1axDl.net
Rustのasyncについて知りたければ「async-book」は必読なので
次からテンプレに入れよう
URLリンク(rust-lang.github.io)
>>980
よろしこ
388:デフォルトの名無しさん
21/07/24 10:59:35.94 /TMjuFD+.net
>>379
1スレッドで同時に実行されるタスクが1つというのは正しい
従来のスレッドでの並列化(1スレッド1タスク)の場合、IO処理を呼び出すと処理完了するまでの間はスレッドはsleep状態になってしまっていた
sleepしている間に他のタスクを実行させるためには、実行するタスクと同じ数だけのスレッドを生成する必要があるが
スレッド生成で消費するリソースが多いため数万タスクを同時に捌くことは難しかった
async-awaitではIO処理完了までの間スレッドをsleep状態にするのではなく別のタスクを実行する
これによりスレッドあたりの処理可能タスク数が増えるため、アプリケーション全体で同時に捌けるタスク数も増える
従来の手法でもスレッドをsleepさせないようなプログラミングは可能だけどプログラムの構造を大きく書き換えないといけなかった
普通のスレッド並列のプログラムと同じ書き味でより多くのタスクを捌けるプログラムが書けるというのがasync-awaitの一番のメリット
ただし常にasync-awaitが望ましいわけでもない
async-awaitで効率的に実行できるのはIO待ちが発生するタスクの場合で、CPUをぶんまわす処理には向いていない
適材適所で従来のスレッドによる並列化手法と組み合わせて使うことになる
389:デフォルトの名無しさん
21/07/24 11:28:00.32 0bHT8/gy.net
>>379
いいえ
1つのスレッド上で同時に複数のタスクを並行(concurrent)に実行できるのがasync/awaitのタスクです。
C10Kと言われるように1つのスレッド上で10000のタスクでも並行に実行できます。
ちなみに1つのスレッド上で並列(parallel)に実行されるのは1つのタスクのみなのは当たり前なので、わざわざ言うことはないです。
今回はasync/awaitの話なので、
『1つのスレッド上で同時に複数のタスクを並行(concurrent)に実行できる』が正解です。
390:デフォルトの名無しさん
21/07/24 11:33:29.24 vPIKycwR.net
>>381
その1スレッドが時分割で複数タスクを実行できるということのちょうど裏返しで、1タスクは複数スレッドから実行され得る。
つまりそこに大小関係、包含関係などは無い直交した概念。
軽量云々てのはOSスレッドとグリーンスレッドの話とごっちゃになってんじゃないかねぇ。
391:デフォルトの名無しさん
21/07/24 12:05:51.45 F/fcX2Mm.net
>>382
>C10Kと言われるように1つのスレッド上で10000のタスクでも並行に実行できます。
本当に並行に実行される?
キューイングされたコールバックを順に呼んでるだけじゃなくて?
392:デフォルトの名無しさん
21/07/24 12:13:15.89 XrocH4ML.net
ねえこの引っ込みがつかなくなったゴミクズ共のメンチの切り合いっていつまで続くの?
393:デフォルトの名無しさん
21/07/24 12:14:13.90 XrocH4ML.net
包丁刺し合って死んで終わらないからネットのマウ
394:ント取り合いって性質が悪いんだよね
395:デフォルトの名無しさん
21/07/24 12:17:43.31 sVj/Jq99.net
5chに何も期待してるのか
396:デフォルトの名無しさん
21/07/24 12:21:52.26 K4Uz+tqB.net
>>384
あなたは初心者のようだから
まずは基礎知識である並行(concurrent)と並列(parallel)の違いを理解してから
あらためて>>382を読み直して理解しましょう
397:デフォルトの名無しさん
21/07/24 12:40:53.43 F/fcX2Mm.net
>>388
理解した
並列じゃないってことね
398:デフォルトの名無しさん
21/07/24 12:41:30.17 F/fcX2Mm.net
間違った
並行じゃないってことね
399:デフォルトの名無しさん
21/07/24 12:42:53.22 F/fcX2Mm.net
で、実際のところランタイムってlongjmpみたいなことしてるの?
400:デフォルトの名無しさん
21/07/24 12:49:05.14 yYYDVwTY.net
>>391
しない
Futureを実装したオブジェクトのメンバとして持ち回る
クロージャがFnMut/FnOnceを実装したオブジェクトのメンバとして状態を持ち回るのと同じ
401:367
21/07/24 12:51:25.18 zz8rVX09.net
Elixir, Go の軽量プロセスと同じでしょ?
OS は関係ない。
言語(VM)内で切り替えているだけだから
402:デフォルトの名無しさん
21/07/24 13:02:35.92 yYYDVwTY.net
タスクの厳密な定義が気になるのってFutureを必要とする動機が無いんじゃないかね
別に新しいことができるわけじゃないし、必要無ければ知らなくていいよ
403:デフォルトの名無しさん
21/07/24 13:54:25.17 lC8WbEdp.net
C10k問題がまずあって、それをselect/epollで解決するってシナリオをまず理解しておかないと
何でめんどくさい事わざわざやってんの?としかならんでしょ
モチベーションが大事
404:sage
21/07/24 14:51:29.52 HHfUZBfC.net
まともにテストしてねーじゃん
URLリンク(lkml.org)
405:デフォルトの名無しさん
21/07/25 01:04:24.12 2QCCz/RS.net
オライリーのrustの本ってどう?
これから勉強するんだけど、これ使っても時代に遅れない?
406:デフォルトの名無しさん
21/07/25 02:38:56.34 kViuqetF.net
4年前の本だからおすすめはしないな
407:デフォルトの名無しさん
21/07/25 02:43:00.77 xzEFH2+d.net
>>383
マルチスレッドなランタイムを使えばスレッドとタスクはm:nだけど
シングルスレッドなランタイムを使えばスレッドとタスクは1:n
いずれの場合でもタスクはスレッドより軽量な存在であり直交する概念ではない
408:デフォルトの名無しさん
21/07/25 09:01:27.23 gzVcIMN0.net
>>397
原著の第2版がオススメ
といってもasyncの章が追加されたのを除くとコアなところは第1版と同じ
今のところオライリー本が圧倒的に良いので他の本で学ぶくらいなら第1版の訳書のほうがいい
古くなってるところはEdition Guideやasync-book、Rust Blogで補完
409:デフォルトの名無しさん
21/07/25 09:12:18.43 vKIU/TO0.net
俺もそう思う。古かろうがオライリー本が圧倒的に良い。
410:デフォルトの名無しさん
21/07/25 09:59:11.23 jOyNlFI3.net
>>397
言語仕様的なのが延々と書いてあっても辛くないタイプの人ならオススメ
自分はそういうのが好きだが、「サンプルアプリを作りながら学びましょう」ってタイプではないので合わない人はいると思う
411:デフォルトの名無しさん
21/07/25 11:34:17.97 CXQT/x9B.net
Rust はサンプルコードを見ながら真似ていれば雰囲気で書けるようになる……
なんていう言語ではないので基礎的な理屈を体系的に (それでいてわかりやすく)
説明してくれるオライリー本はとても良いよ。
確かに理屈っぽいが、 Rust がそういう言語なのでオライリーの本がつらいと思う人は
そもそも Rust がつらいタイプの人なんだと思う。
412:デフォルトの名無しさん
21/07/25 19:04:19.16 HNTE1GP9.net
Rustlingsのこれやっててよくわかんなかったんだけどさあ
URLリンク(github.com)
自分の解答は
pub fn bigg
413:er(a: i32, b: i32) -> i32 { if a > b{ return a; } b } これなんだけど、「return a;」のところってなんで「a」だけじゃダメなの?
414:デフォルトの名無しさん
21/07/25 19:46:35.31 gzVcIMN0.net
elseがあればいいんじゃない?
415:デフォルトの名無しさん
21/07/25 19:49:48.51 Wj/gwJho.net
>>404
関数の最後じゃにゃいから
416:デフォルトの名無しさん
21/07/25 21:25:46.69 2QCCz/RS.net
オライリー買ってくる
417:デフォルトの名無しさん
21/07/25 21:31:05.59 HNTE1GP9.net
ありがとう
最後の式だ特別なのか
418:デフォルトの名無しさん
21/07/26 20:33:20.42 FeBtPwa3.net
文と式を区別しましょう
419:デフォルトの名無しさん
21/07/26 21:31:17.41 H6CQkre6.net
ブロック式が値を持つなら式文も値を持たせればよかったと思うんだけど、それだと何か都合が悪いのかな。
420:デフォルトの名無しさん
21/07/26 21:53:51.50 6YP5cq8/.net
それは式文を構成する式と何が違うのか
421:デフォルトの名無しさん
21/07/26 22:05:31.99 H6CQkre6.net
最後だけセミコロンを外すとかしなくて済む。
422:デフォルトの名無しさん
21/07/26 22:09:46.01 x+l/EPbt.net
セミコロンあるなしで意味が変わるのって、バグを産む原因になりそう
423:デフォルトの名無しさん
21/07/26 22:26:28.18 6YP5cq8/.net
その流れ前スレでも見た気がする
424:デフォルトの名無しさん
21/07/27 00:03:59.51 rFi02BpK.net
どちらかというと;の有無で()を返すかどうか制御できる方がいい気がするけどな
式文も値を持つならわざわざ();って書かないといけない
(まぁわざわざ書かせるのもRustらしい気もするが)
>>413
間違えたら型エラーになるからバグにはならんと思うよ
425:デフォルトの名無しさん
21/07/27 03:17:46.37 MlLztw4F.net
() を返す場合は関数省略だからreturn必須でよかったな
426:デフォルトの名無しさん
21/07/27 05:41:20.63 QHeETuJ4.net
if-elseとかmatchとかでひたすら();書くのさすがにやばくない?
427:デフォルトの名無しさん
21/07/27 08:21:13.66 fovpYeUo.net
どうしても () を返さなきゃならない場面ってそんなに多いんだっけ?
428:デフォルトの名無しさん
21/07/27 08:35:39.46 XvzwJYSJ.net
コード例がないから全然わからん
429:デフォルトの名無しさん
21/07/27 08:54:31.16 D32lY0Gw.net
Ok(())とか?
430:デフォルトの名無しさん
21/07/27 09:50:38.86 UmdqpWnl.net
最初アホみたいにReturn合った方が…とか思ってたけど慣れると全く要らん境地になるから不思議
431:デフォルトの名無しさん
21/07/27 10:35:08.16 KNfqOmw/.net
>>418
少なくともletは値を返すわけにはいかないので()だね
まぁCopyなら返せなくもないけど、Copyかどうかで挙動が変わるのはさすがに…
();を明示する、みたいにするとletだけ特別扱いになるし、結局今のルールでいいんじゃないかと
432:デフォルトの名無しさん
21/07/27 11:00:19.20 +VH8W8kj.net
elseのないif式で偽の時の値の話だと思ってた
433:デフォルトの名無しさん
21/07/27 11:03:48.76 MlLztw4F.net
>>417
書き方が悪かった
returnは値を返す時は必須だけどreturnがない場合は省略する。 関数の返り値と同じ法則で
434:デフォルトの名無しさん
21/07/27 19:22:36.90 AoeS3kCP.net
でも、関数の最後じゃなくてもさあ
文があったら、そこでリターンしてくれたらいいのにな
まあ、ミスってても気づき辛くなるからダメなんかな?
435:デフォルトの名無しさん
21/07/27 19:47:32.00 klQCV9Qk.net
2文目以降は一切評価されないってことか
斬新だね
436:デフォルトの名無しさん
21/07/27 21:44:05.27 fovpYeUo.net
>>422
特別扱いってのがよくわからないなぁ。
let x が () なら let x; も () でいいし (); を明示する必要もないと思うんだけど。
437:デフォルトの名無しさん
21/07/27 21:53:09.04 fgL6LRsn.net
そもそもletは式じゃないし
438:デフォルトの名無しさん
21/07/27 22:40:27.72 KUIeKdyD.net
XXXがstatementだとか、XXXはe
439:xpressionだとか そういう議論が出る時点でダメ言語のオーラが 言語オタクには楽しいかもしれないけど
440:デフォルトの名無しさん
21/07/27 22:47:11.69 fovpYeUo.net
だから式文じゃない文は () でいいんじゃね?特に特別扱いとは思わんが。
441:デフォルトの名無しさん
21/07/27 23:18:47.62 rFi02BpK.net
文は()という単純なルールを崩してまで式文から値を得たいモチベーションがよくわからん
単に;を取って式にすればいいだけなのに
442:デフォルトの名無しさん
21/07/27 23:20:35.98 3rBo4v1y.net
Rust書いてて式と文を意識して区別しないといけないことなんて無いよ
CやPythonならあるけど
443:デフォルトの名無しさん
21/07/27 23:30:43.54 fgL6LRsn.net
関数末尾だけセミコロン外すのが気に入らないなら、C/C++でやってたようにreturn x;とすればいい
それで不都合を生むことはない
444:デフォルトの名無しさん
21/07/28 00:01:15.04 SAGnL8kO.net
clippy先生に注意される
445:デフォルトの名無しさん
21/07/28 01:30:00.88 ch5q2ifJ.net
全てはclippy先生の仰せのままに
446:デフォルトの名無しさん
21/07/28 01:47:51.35 QoybXfTv.net
#![allow(clippy::foo)] を書けばいいじゃん
447:デフォルトの名無しさん
21/07/28 04:09:34.57 96ImUxMy.net
なるほど
>Rustのセミコロンは意味と構文からそれぞれ説明できる。
>意味論的には、以下の原則を覚えておけば十分である。
>
>・セミコロンで終端された文は強制的に () 型となる。
>・ブロックの途中の文は () 型でなければならない。
>・ブロックの型はブロックの最後の文の型と等しい。(文がひとつもない場合は ())
448:デフォルトの名無しさん
21/07/28 07:29:31.85 o1sqfUmC.net
>・ブロックの途中の文は () 型でなければならない。
これがあるから1行目の仕様なんだろうけど、これの理由ってなんなのかな。
449:デフォルトの名無しさん
21/07/28 08:03:12.35 LX2CDHAF.net
文に型なんてないよ
450:デフォルトの名無しさん
21/07/28 08:14:26.64 9WJC0mlm.net
文って値を返さないのかと思ってたけれど、
()を返してるって事?
451:デフォルトの名無しさん
21/07/28 08:37:40.51 LX2CDHAF.net
ブロックの型はブロックの最後の「式」の型と等しい。(「ブロックの最後に式がない」場合は())
ここの間違いが他のすべての説明によく分からない辻褄合わせを持ち込んでいるだけだと思う
452:デフォルトの名無しさん
21/07/28 09:58:43.22 rdzsGCBs.net
>>437
>・ブロックの途中の文は () 型でなければならない。
そもそもブロックの途中の文を()以外にすることってできるの?
{ foo; bar } みたいなブロックを{ foo bar }とは書けないし
453:デフォルトの名無しさん
21/07/28 10:29:08.57 LX2CDHAF.net
>>442
それは型の問題以前に文法の問題
型だけの問題だというなら、{ let foo = (); foo bar }と書けばコンパイルできるはずだが、
もちろんそんなことはない
454:デフォルトの名無しさん
21/07/28 11:58:08.16 ch5q2ifJ.net
Facebook、次期ビルドシステムの開発でRust言語の採用を明らかに
URLリンク(www.publickey1.jp)
455:デフォルトの名無しさん
21/07/28 11:59:44.89 rdzsGCBs.net
>>443
文法の問題を解決しつつブロックの途中の文を()以外にする方法がわからんってことよ
456:デフォルトの名無しさん
21/07/28 12:46:01.08 LX2CDHAF.net
>>445
何度でも言う
文に型はない
457:デフォルトの名無しさん
21/07/28 12:58:11.75 LX2CDHAF.net
「文を()にする/()以外にする」の正確な意味を言語化してほしい
「文が評価されて結果として()/()以外が得られる」という意味で言っているのなら、文は評価されて結果を返すものではない
評価されて結果を返すものは式と呼ばれる
文は式ではない
458:デフォルトの名無しさん
21/07/28 13:10:10.87 rdzsGCBs.net
>>447
俺もそのへんはよくわからんが、
式文は「文が評価されて結果として()が得られる」って認識で使ってた
これが誤りならまあすまん
ここにこだわるつもりは全然なくて、
ようするに>>437の「ブロックの途中の文は () 型でなければならない。」ってのがどういうこっちゃってこと
この表現だと() 型じゃなくする方法があるように読めるからさ
459:デフォルトの名無しさん
21/07/28 13:12:38.58 YxciSlP+.net
この一連の議論の評価値は ()
460:デフォルトの名無しさん
21/07/28 13:27:20.45 LX2CDHAF.net
>>448
自分は>>441で書いた通りその部分は辻褄合わせだと思ってるよ
まあでも、自分もRust入門したころは似たようなことでこんがらがってたような気はする
ブロックが式だなんて思ってなかったからかな
461:デフォルトの名無しさん
21/07/28 14:29:43.24 x93GMB6T.net
>>449
コンパイルエラーだよ
462:デフォルトの名無しさん
21/07/28 14:52:26.31 QoybXfTv.net
セミコロン省略できる式文(?)の型が()ではない場合は型エラーになるね
URLリンク(play.rust-lang.org)
セミコロンをつけたり、型を()にしたりするとエラーにならない
URLリンク(play.rust-lang.org)
URLリンク(play.rust-lang.org)
463:デフォルトの名無しさん
21/07/28 17:33:51.84 Ns6HtioT.net
最も単純化してこれはコンパイル通るけど
fn main() {
if true {
1
} else {
0
};
()
}
しかし上記のifの尻のセミコロン無しだとコンパイルエラー【値が()ではない】となる
セミコロン無しでも数字1と0を()へ変えればコンパイルが通る
つまり
>>437
>・ブロックの途中の文は () 型でなければならない。
ifをセミコロン無しで値が数字だと上記の条項を満たせないためエラー
ifをセミコロン無しで値が()だと上記の条項を満たせる
あるいは
>・セミコロンで終端された文は強制的に () 型となる。
値が数字でもifをセミコロン終端させれば上記の条項を満たせる
464:デフォルトの名無しさん
21/07/28 17:46:15.09 SAGnL8kO.net
で?って感じだけど
とりあえずリファレンス見てくれば?
URLリンク(doc.rust-lang.org)
465:デフォルトの名無しさん
21/07/28 18:03:06.43 zh3fVAA3.net
>>454
そのリファレンスの説明だけだと
以下はコンパイル通るけど、関数内の3つの()のうち任意の1つでも数値に変えるとコンパイルエラーとなる説明はどの部分になる?
fn main() {
if true {
()
} else {
()
}
()
}
466:デフォルトの名無しさん
21/07/28 18:13:09.38 gOp2Ufou.net
今問題になってるのはこっちだね
最後の方に「;省略した式文は()でないといけない」となっている
URLリンク(doc.rust-lang.org)
467:デフォルトの名無しさん
21/07/28 18:38:39.95 SAGnL8kO.net
>>455
Note: As a control flow expression, if a block expression is the outer expression of an expression statement, the expected type is () unless it is followed immediately by a semicolon.
URLリンク(doc.rust-lang.org)
An expression that consists of only a block expression or control flow expression, if used in a context where a statement is permitted, can omit the trailing semicolon. This can cause an ambiguity between it being parsed as a standalone statement and as a part of another expression; in this case, it is parsed as a statement. The type of ExpressionWithBlock expressions when used as statements must be the unit type.
When the trailing semicolon is omitted, the result must be type ().
URLリンク(doc.rust-lang.org)
あとif式はifのブロックとelseのブロックで型が揃ってないとだめだよ
468:デフォルトの名無しさん
21/07/28 20:25:06.81 o1sqfUmC.net
>>440
「値を返さない」と「()を返す」は同義だと思う。
469:デフォルトの名無しさん
21/07/28 20:32:49.95 lhnCplqc.net
>>458
値を返さないことはnever typeとして別途定義されてるから()を返すこととは違うよ
470:デフォルトの名無しさん
21/07/28 21:30:00.41 o1sqfUmC.net
never は値どころか制御も返さないから別物では?
()を返す(値は返さない)ことはできるけど、neverは返すことも不可能だと思う。
471:デフォルトの名無しさん
21/07/28 21:34:29.80 iYnBfOfY.net
>>455
2つのエラー要因がある
ifは式(rustでは式文と呼ぶのか)なので、
472:then節とelse節が同じ型でないといけない mainはTerminationトレイトを実装していないといけないので最後の()は数値にできない
473:デフォルトの名無しさん
21/07/28 21:51:43.19 iYnBfOfY.net
>>458
値を返さない、という言葉が今この場では曖昧に見える
本当にrustが値を返すものじゃない、と定義しているのは文法レベルで定義しているのはletや関数定義などの文
これは型チェック入る前にエラーになる
文法的に正しい、けど「値を返さない型」としか呼べないような式も存在して、それはrustだとnever type (!) と呼んでいる
loop {} とかif true { return 10} else { return 0 }とか、こいつらは式だけど決して値にならない
474:デフォルトの名無しさん
21/07/28 23:11:13.67 SAGnL8kO.net
>>458
違うって
何回も指摘されてるやん
475:デフォルトの名無しさん
21/07/28 23:15:38.71 fFOGvJ3Q.net
>>461
じゃあどうしてこれがコンパイルエラーとなるの?
fn main() {
if true {
1
} else {
0
}
()
}
476:デフォルトの名無しさん
21/07/28 23:25:02.98 SAGnL8kO.net
The syntax for a block is {, then any inner attributes, then any number of statements, then an optional expression, called the final operand, and finally a }.
The type of a block is the type of the final operand, or () if the final operand is omitted.
URLリンク(doc.rust-lang.org)
let foo = { fn_call(); }; // final operandがないのでブロックの型は()
let bar = { fn_call() }; // final operandがあるのブロックの型はfn_call()の型
式文が()を返すわけじゃない
477:デフォルトの名無しさん
21/07/28 23:28:39.35 SAGnL8kO.net
>>464
fn main() {
if true { 1 } else { 0 } // <- 式。文法的にfinal operand以外は文じゃないとダメ。if式の型が()の場合のみセミコロンを省略可。
() // <- final operand
}
478:デフォルトの名無しさん
21/07/28 23:34:19.58 2+fvqic5.net
>>466
なぜ『if式の型が()の場合のみセミコロンを省略可。』という謎ルールがあるの??
479:デフォルトの名無しさん
21/07/29 00:18:18.96 J3IrN4Ey.net
>>467
使い勝手がいいから
fn main() {
if true { 1 } else { 0 }
()
}
↑この`if true { 1 } else { 0 }`に意味ないでしょ?
意味持たせるには`let foo = if true { 1 } else { 0 };`みたいに評価結果の値を何かしら使う形にする必要がある
意味がないけどセミコロンで式文にして「値を無視します」と表明すればエラーにはしない
表明がなければ「お前意味ないことやってるぞ」とエラーにしてくれる
`if condition { println!(“1”) } else { println!(“0”) }`みたいに()に評価されるif式は
副作用を起こしたいケースなので評価結果の値を何かしら使う形じゃなくても意味がある
この使い方の時にセミコロンを必須にすると他言語習得者にとってはめちゃくちゃ使い勝手が悪い
知ってれば役に立つことはあっても普段コードを書く時に意識する必要のないルール
480:デフォルトの名無しさん
21/07/29 00:18:47.37 +vgAr19b.net
>>467 他の言語での一般的な書き方も出来るようにだと思う
481:デフォルトの名無しさん
21/07/29 00:23:32.99 vLI97hvR.net
>>467
if式から値が返ってきた場合、次の行まで式が継続するのか;省略なのかが曖昧になるから
()ならそれに対してなにか操作はできないから、式が継続する可能性は消えて、;省略が確定する
482:デフォルトの名無しさん
21/07/29 00:27:10.13 J3IrN4Ey.net
>>468
>`let foo = if true { 1 } else { 0 };`
一応補足しておくと↑この場合のセミコロンは文法的にはlet statementのセミコロン
483:デフォルトの名無しさん
21/07/29 08:55:08.12 KzEq3JVg.net
>>470
構文解析フェーズで型を意識してるの?
484:デフォルトの名無しさん
21/07/29 22:05:11.47 0uhLIXqL.net
>>470
こういうことかな
if true { () } else { () } - 2 【値-2】
if true { 1 } else { 0 } - 2 【エラー】
if true { 1 } else { 0 }; - 2 【値-2】
(if true { 1 } else { 0 }) - 2 【値-1】
485:デフォルトの名無しさん
21/07/30 02:02:42.06 VAfd9CHU.net
rust version 1.54.0 リリース
486:デフォルトの名無しさん
21/07/30 11:59:34.52 3yGih40v.net
URLリンク(twitter.com)
(deleted an unsolicited ad)
487:デフォルトの名無しさん
21/07/30 13:41:26.16 bSJbrTlR.net
Cは、明確にポインタをつかって書くことで手作業で最適化できるが、
Rustのsafeモードは、見た目は参照もポインタも使わず実体コピーのような
書き方をする。例えば、
let a = Box::new(オブジェクト名:{・・・});
や、
let b = Box::new(オブジェクトを返す関数(・・・));
のように。
これはちゃんとコピーが生じないように最適化されているのだろうか?
C++は、同様の書き方をする場合は、無駄をなくすために例えば、
vector::emplace_back()
なるものがあり、最適化に任さずに明確にコピーを省略するマクロの様な
働きをするらしい。
488:デフォルトの名無しさん
21/07/30 14:17:32.88 bSJbrTlR.net
>>476
あと、C++の場合、
CPerson person = CPerson(・・・);
と書いた場合は、代入にならずに必ず、
CPerson person(・・・);
と書いた場合と全く同様にコンストラクタが呼び出されることが決まっている。
Rustの場合、そういうことが全くドキュメント化されてない。
C++プログラマはそのことを理解しているから高速なコードが書けるが、
Rustは書いてないのでテキトーに書くしかない。
結果、あまり速くないコードになって、しかもどこが原因かも分からなく
なりそう。
489:はちみつ餃子
21/07/30 14:26:14.81 qMgk6unv.net
>>476
URLリンク(doc.rust-lang.org)
490:デフォルトの名無しさん
21/07/30 14:26:20.43 uBYlPp6h.net
それよりdropがいつ走るかわからない方が怖いわ
491:デフォルトの名無しさん
21/07/30 15:17:37.81 bSJbrTlR.net
Rustでは、CPersonのメンバ関数 new()の中で Heapにオブジェクトを作る時、
fn new(yyy) {
return Box::new( CPerson {
age: xxxx,
name: xxxx
} );
}
みたいに書くしかないらしい。しかし、C++だと、コンストラクタの中で、
GetSystemModuleName(&name, zzz);
のような書き方も出来る。
何が言いたいかと言えば、Rustだと代入形式でしか書けないので柔軟性に
欠けるということ。
492:デフォルトの名無しさん
21/07/30 15:19:00.34 bSJbrTlR.net
>>478
リンク先間違ってない?
493:デフォルトの名無しさん
21/07/30 15:31:40.72 87Gl51wF.net
bindings_after_at stableになったのうれしい
494:デフォルトの名無しさん
21/07/30 16:14:14.47 ghy/bFcm.net
>>480
メモリ安全性を保つのが困難になっていくからそれを避ける方法がベストだよ
495:デフォルトの名無しさん
21/07/30 16:42:36.73 bSJbrTlR.net
>>483
なんともなあ。
496:デフォルトの名無しさん
21/07/30 16:53:36.97 SwFfvD28.net
せっかくだしこっち使ってくれよ
スレリンク(tech板)
497:デフォルトの名無しさん
21/07/30 16:58:32.68 9xDw6FKV.net
>>476
コピーが生じないように最適化される。
つまり、スタック上の一時オブジェクトをヒープにコピーするのではなく、ヒープ上に直接オブジェクトを作成する。
498:デフォルトの名無しさん
21/07/30 17:02:02.06 lHY+syIy.net
>>480
具体的にこのように書きたいけどエラーになるというRustのコードを示してください。(他の言語のコードは不要)
それによりようやく初めて、何を問題としているのか、何が問題なのか、がはっきりします。
499:デフォルトの名無しさん
21/07/30 17:29:20.46 nNXXdoxJ.net
VeqDequeに二分探索実装されてるけどそもそもソートできなくない???
500:デフォルトの名無しさん
21/07/30 18:21:23.96 N3W+nBLQ.net
>>488
make_contiguousかas_mut_slicesで中身の可変スライスを受け取って
そのスライスのsortかsort_byを使えばソートできそう(試してない)
make_contiguousが本線っぽいからリファレンス読んでくれ
501:デフォルトの名無しさん
21/07/30 18:33:31.64 nNXXdoxJ.net
make_contiguousするならそのあとのas_mut_slicesに対して二分探索でよくない????
502:デフォルトの名無しさん
21/07/30 19:00:01.19 N3W+nBLQ.net
その辺はもう「お好きにどうぞ」としか言えない
503:デフォルトの名無しさん
21/07/30 20:35:47.56 Lxzkaxvv.net
contiguousじゃないがsortされてることが保証されてるケースで使いたいのかね
504:デフォルトの名無しさん
21/07/30 21:37:49.30 7fXRNBDL.net
sort順を壊さない位置に要素を挿入するのにbinary_searchを使う
505:デフォルトの名無しさん
21/07/30 21:46:04.82 Lxzkaxvv.net
URLリンク(github.com)
506:デフォルトの名無しさん
21/07/30 23:01:01.92 YV3ifLwI.net
>>486
オブジェクトを返す関数を Box::new()のパラメータの位置に書いてもそうなるの?
507:デフォルトの名無しさん
21/07/30 23:11:44.30 ZatLdYYe.net
>>477
explicitでなければな
508:デフォルトの名無しさん
21/07/31 16:04:12.94 4L+o4Dn8.net
配列の添え字はusize以外も許容してほしいなー
509:デフォルトの名無しさん
21/07/31 16:11:02.83 zwQwPVDS.net
std::ops::Index を実装すればええんちゃう?
510:デフォルトの名無しさん
21/07/31 16:31:36.36 4L+o4Dn8.net
>>498
おお、こんなのあるのか。知らなかった。
511:デフォルトの名無しさん
21/08/02 06:51:52.57 rcivjOzc.net
Tokio @tokio_rs
Announcing Axum - An ergonomic and modular web framework that takes full advantage of the Tokio, Hyper, and Tower ecosystem.
URLリンク(tokio.rs)
512:デフォルトの名無しさん
21/08/02 10:51:16.95 /2ZmNaA8.net
Rocketが統一するんじゃなかったんかい
513:デフォルトの名無しさん
21/08/02 11:07:27.91 IM57Srba.net
axumはシンプルかつ洗練されており柔軟性もあって、よりRustっぽい
それでいてtokio直轄だから今後の主流になりそう
514:デフォルトの名無しさん
21/08/02 11:09:36.24 gKjubcDS.net
actix-webと比較するとどう?
515:デフォルトの名無しさん
21/08/02 11:22:47.21 LBPYCkqw.net
asyncも結局Tokioが覇権になるんかな?
516:デフォルトの名無しさん
21/08/02 11:40:06.27 txHGxpYt.net
高収入エンジニアは「ラスト」に注目、ファインディ調査:日本経済新聞
URLリンク(www.nikkei.com)
517:デフォルトの名無しさん
21/08/02 11:52:00.11 XqEhhKmo.net
tokio、名前がダサすぎて無理w
async-std勢にもっと頑張ってほしい
518:デフォルトの名無しさん
21/08/02 13:37:03.39 b7V5cI6n.net
どうしても沢田研二を思い出すからな
519:デフォルトの名無しさん
21/08/02 13:48:07.46 cEvsPyTU.net
客の入りが悪くてダサいヤツ