Rust part21

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2023/08/15(火) 22:24:39.45ID:xzxy4cgp
公式
https://www.rust-lang.org/
https://blog.rust-lang.org/
https://github.com/rust-lang/rust

公式ドキュメント
https://www.rust-lang.org/learn

Web上の実行環境
https://play.rust-lang.org

※Rustを学びたい人はまず最初に公式のThe Bookを読むこと
https://doc.rust-lang.org/book/

※Rustを学ぶ際に犯しがちな12の過ち
https://dystroy.org/blog/how-not-to-learn-rust

※Rustのasyncについて知りたければ「async-book」は必読
https://rust-lang.github.io/async-book/

※次スレは原則>>980が立てること

前スレ
Rust part20
https://mevius.2ch.net/test/read.cgi/tech/1677771928/

ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.2ch.net/test/read.cgi/tech/1514107621/
28デフォルトの名無しさん
垢版 |
2023/08/23(水) 15:46:36.91ID:89z/H8g7
let hoge = "もとの文字列";
let hoge = hoge.replace("なんか1を", "別のなんか1に変換");
let hoge = hoge.replace("なんか2を", "別のなんか2に変換");
let hoge = hoge.replace("なんか3を", "別のなんか3に変換");
...
みたいなのが連続して実行したいとき
まとめてやってくれるような関数とかありますか?
また変換表がVecとかMapとかDBみたいなのに対応してるものもありますか?
2023/08/23(水) 17:55:57.94ID:JDxfEBUZ
>>28
単に連続して実行したいだけなら自分でループさせる関数作れば十分だと思う
効率的なアルゴリズム実装を探してるならとりあえずaho-corasick
regexを使ってるようなプロジェクトならregexでもいいと思う
2023/08/23(水) 18:02:34.00ID:JDxfEBUZ
もとの文字列が大きくなればなるほどstr::replaceを繰り返し実行する方法は効率が悪くなる
もとの文字列が小さいならあんまり気にする必要無い
少なくともベンチマークとってから考えるべき
2023/08/23(水) 23:32:44.32ID:J9iaXSyF
その前に変換された部分を後続の変換の対象にするのかしないのかを決めないと
「まとめてやる」だから対象にしないっぽいけど
文字列リテラルのエスケープを本来の文字に置換するイメージでいいのかな

変換前の文字列を簡単なパターンで表現できるなら正規表現のライブラリがいいと思う
余分にひっかけた場合は変換せずにそのまま通す感じで
マッチした文字列→変換する文字列の処理を自前の関数で書くとよさそう
2023/08/23(水) 23:46:47.50ID:1keD1dOe
aho使うのが楽
入力がimpl std::io::Readで出力がimpl std::io::Writeを指定できるからファイルでもなんでも楽
33デフォルトの名無しさん
垢版 |
2023/08/24(木) 07:02:22.08ID:2mbJt/0N
thx
2023/08/26(土) 21:30:29.95ID:gjVHse6A
constな再帰関数で以下のエラーが出てその対処方法を知りたいのですが

error[E0080]: evaluation of constant value failed
| foo(n)
| ^^^^^^ exceeded interpreter step limit (see `#[const_eval_limit]`)

const_eval_limitで検索しても削除された(?)らしい情報しかわかりませんでした
どう指定するとリミットを増やせますか?
2023/08/26(土) 22:02:13.69ID:ONdb/hN6
>>34
古いバージョン使ってない?
2023/08/26(土) 22:23:39.67ID:hWWrh3fN
1.72での変更みたいだね
2023/08/27(日) 08:31:30.86ID:lrONLN4Y
一昨日リリースの1.72にこう書いてあるな
https://blog.rust-lang.org/2023/08/24/Rust-1.72.0.html
you can allow(const_eval_long_running) to permit especially long const evaluation.

ところがこう指定してもエラーになる
#[allow(const_eval_long_running)]

正解はこれ
#[allow(long_running_const_eval)]
2023/08/27(日) 19:53:52.23ID:Aks4ymi6
>>37
リリースを読む奴はほとんどいないだろってことでいい加減でも良いやといことだろうな
Rust野郎にしてみれば手を抜を抜けるところは手を抜くって良いこと
2023/08/27(日) 21:39:30.30ID:/o9fKn5S
コンパイルエラーで正しいほうが表示されるから問題ないわな

const_eval_limitのほうは↓
#![feature(const_eval_limit)]
#![const_eval_limit = “10000000”]
2023/08/27(日) 23:07:34.85ID:F9w6FdF5
レビューすり抜けちゃったんだな
PRでも出してあげたら
41デフォルトの名無しさん
垢版 |
2023/08/28(月) 03:13:40.15ID:gISZWwhM
英単語のスペルチェックはしなくて良いから
関数や変数のスペルチェックに力を入れてくれ > Codeエディタさん
2023/08/29(火) 03:19:51.47ID:UVGH3K1M
VSCodeの余計なお世話機能外しのサイトないかな?とにかく邪魔
2023/08/29(火) 09:29:50.39ID:ud/hz0aH
let hoge = "hoge".to_string();
let v = hoge.as_bytes().to_vec(); // ← ここでデータのコピーは発生しますか?
2023/08/29(火) 09:40:59.22ID:ud/hz0aH
あー
let v = hoge.into_bytes(); // これか
45デフォルトの名無しさん
垢版 |
2023/08/29(火) 10:07:33.54ID:ud/hz0aH
let v = hoge.as_bytes().into(); // これも等価なんか?
46デフォルトの名無しさん
垢版 |
2023/08/29(火) 10:08:22.27ID:ud/hz0aH
>>43>>45 が等価で
>>44 だけ違うんか?
2023/08/29(火) 10:28:52.72ID:hbocgPIY
>>43
コピーを発生せずに別の型へ変換するには「消費してxxxへ変換」(into_xxx)するしかないため元が所有権を持たなければならない
つまり単なるスライス参照&[T]をto_vec()するのはコピーが発生する
一方で所有権を持つスライスBox<[T]>ならばinto_vec()でコピーを発生させずにVecにできる
このto_xxxとinto_xxxに注意

>>44
互いに消費してコピーを発生せずに行き来できる
let vec = string.into_bytes();
let string = String::from_utf8(vec).unwrap();
前者は特にVec<u8>になるためinto_vecではなくinto_bytesと名付けられている
後者はutf8保証チェックが入るためResultが返る
その保証を人が与えるならチェックを省略できる
let string = unsafe { String::from_utf8_unchecked(vec) };
2023/08/29(火) 11:53:16.22ID:j8lLGaij
>>46
リファレンス見ればすぐわかるよ
もし見方や調べ方がわからないならそれを質問するといい
2023/08/29(火) 14:58:40.58ID:0ZJbGVqi
>>42
VSCodeの邪魔な機能で最初に思い浮かぶのはinlay hintsだな

[File > Preferences > Settings]の[Editor › Inlay Hints: Enabled]を
offかoffUnlessPressedに変えると消える

offUnlessPressedだとCtrl + Altを押してる間だけ表示される
2023/08/30(水) 11:49:10.17ID:2xM9XyZu
unsafeを使ったコードで
有効な参照ではないことを確認する方法はありますか?
2023/08/30(水) 15:30:33.41ID:OpkUn9pD
miriやaddress sanitizerやloomのようなツールとテストの組み合わせで検知するくらいじゃないかな
もちろん100%の検知は不可能
52デフォルトの名無しさん
垢版 |
2023/08/30(水) 15:37:47.00ID:jEaVNaFL
日本人は100%とか完璧とか絶対とか求めるの好きだよね。
やる側が志すのはいいんだけど、たいていはやらない側が求めてくる。
2023/08/30(水) 17:42:42.30ID:Pm5h7iVu
そういう理にかなわないことをしているから原発がぶっ飛ぶんやで
2023/08/30(水) 17:57:48.34ID:DO1AbTsl
address sanitizerじゃなくてmemory sanitizerだった
2023/08/30(水) 20:21:44.39ID:y+HDByBG
無効な参照は即UBじゃなかったけ
なので正しく書かれたRustプログラムの参照はすべて有効
2023/08/30(水) 21:05:03.06ID:7wIq4Piv
正しく書かれてるかどうかを確かめる方法を聞いてるんだろ
57デフォルトの名無しさん
垢版 |
2023/08/30(水) 22:02:55.54ID:zbgAoZ7n
rustでdll造ってCから使うとき
rust側で勝手に捨てられるのは困るな
2023/08/30(水) 22:17:03.68ID:kn7H0YN4
そのためにforgetとかleakみたいな謎関数がある
存在は知ってるけどまだ使う機会に恵まれない
2023/08/31(木) 00:43:59.43ID:gbA1Jwq2
Cに所有権ごと渡すなら使うのはinto_rawかfrom_rawじゃね
60デフォルトの名無しさん
垢版 |
2023/08/31(木) 11:31:08.47ID:qE8kvwKZ
Rustしばらく使ってるとC/C++描けなくなってくる
2023/09/01(金) 16:56:03.45ID:8Q6o7DlX
sqlite3 用の crate って sqlite3 という名前のがあるけど
rusqlite 使うのとどっちが良い?
62デフォルトの名無しさん
垢版 |
2023/09/02(土) 07:37:58.97ID:v3EBZAej
失礼します

Rustは制約の厳しい言語だから(環境さえ整えば)他言語にトランスパイルしやすい言語
という認識は合ってるでしょうか?
2023/09/02(土) 08:12:23.91ID:bvTG+KAn
Rustは制約がほとんどなく自由な裁量の大きな言語の一つ
楽に書ける方法の一方で色んな観点を極めることにより書き手によってメモリ利用法や実行速度もピンキリになりうる
色んな環境で動かせることもできてOSの無い環境やstdライブラリを使わない方法など自由が大きい
プログラミングパラダイムやスタイル指向の見地からも書き手によって様々な方針をとることができる
2023/09/02(土) 08:29:19.99ID:bvTG+KAn
ランタイムが必須かどうかも制約として重要になってくる
C/C++やRustはそのような制約がないため他の言語のライブラリ作成にも用いることができる
WebAssemblyでの実行についても同様でそのような制約のないRustが有利なため最も使われている
2023/09/02(土) 11:00:44.98ID:YkB2gBn6
>>62
トランスパイル先言語との機能的互換性の高さやや元言語のコンパイラが単純なほうがトランスパイルしやすいと思う
例えばOwnership/Borrow/Lifetimeあたりのトランスパイルが楽かどうか
2023/09/02(土) 11:44:04.91ID:g76m2OPt
>>65
壮大な勘違いしてるな
実行時に所有権やライフタイムは一切出て来ないぞ
2023/09/02(土) 11:48:36.47ID:l2r0UsPx
>>66
壮大な勘違いしてるな
トランスパイル時は実行時ではないぞ
2023/09/02(土) 11:50:40.77ID:l2r0UsPx
一口にトランスパイルといっても、元言語にあった属性をどこまで先言語に引き継ぐかは目的に応じた取捨選択がなされるものです
前例がないので>>62に対する答えは「未知数」としか言えないですね

あるいは言語自体に「トランスパイルのしやすさ」という属性があるとすれば、それは「言語自体がトランスパイルされることを前提として設計されているか」と同義でしょう
その側面から言えば答えは「いいえ」です
69デフォルトの名無しさん
垢版 |
2023/09/02(土) 12:05:15.52ID:f2x52juV
ライフタイムは妥当かどうかの静的なチェックに使われるもの
トランスパイル先に持ち込まれることはない
2023/09/02(土) 13:06:33.37ID:euHMK3ab
短絡思考 + 自己弁護 = 複オジ
2023/09/02(土) 13:21:18.64ID:gZ7bGKIm
トランスパイルというとTypeScript→JavaScriptみたいにシンタックスをほぼ保ったまま変換することを意図してる?
それともRustで書いたコードをトランスパイル先のランタイムなり処理系なりで動かせれば良い?
後者ならトランスパイル先言語でWASMランタイム用意すればRustで書いたコードは動かせるよね
72デフォルトの名無しさん
垢版 |
2023/09/02(土) 14:30:38.26ID:mCX3wjBN
NimはCにトランスパイルされる
2023/09/02(土) 14:59:18.30ID:dPTTZbJb
コンパイルする話じゃなくトランスパイルする話をしてるのにその区別すらできないオジ
2023/09/02(土) 15:01:52.18ID:Ng1Dtdjk
一般にトランスパイルは同程度に高級な言語の間で
(なるべく)変換後の言語として自然な形で変換するものを言う。

コードジェネレータ、または実行エンジンとして他言語を
経由するものは含んだり含まなかったりするけど
表面上は同じことをやってるので境界が曖昧なんだよ。
2023/09/02(土) 16:08:00.76ID:LNeShMZN
境界があいまいだからRustコードからWASMバイナリを生成することをトランスパイルと呼んでもおかしくないと?
2023/09/02(土) 16:25:56.23ID:Ng1Dtdjk
>>75
そう呼んで欲しくはないが呼んでるかもしれないという想定で
すり合わせるプロセスは必要かもしれない。
77デフォルトの名無しさん
垢版 |
2023/09/02(土) 16:37:50.73ID:aKZIxXWD
>>65 がトランスパイル先にまでOwnership/Borrow/Lifetimeあたりの機能あったほうが良さそうなこと匂わすトンチンカンなこと書いてるからだろ
2023/09/02(土) 17:46:31.63ID:3Onl8i9L
>>77
そんな頓珍漢な勘違いをするのはおまえだけだろw
2023/09/02(土) 18:52:34.01ID:l2r0UsPx
どうせ>>62も複おじなんだろうね

なぜRustからトランスパイルしようなどと思ったのか?
その動機が出ないならこの話は終わりです
80デフォルトの名無しさん
垢版 |
2023/09/02(土) 19:16:20.22ID:v3EBZAej
>>62です。ぼんやりとした質問ですみませんでした

例えばRustが読めない人向けにPython等に変換してPython読める人ならなんとか読めるものに変換できないかなという想定でした。
あとはLLVM以外の環境で動かしたいとか。それなら確かにWASMで良かったみたいですね。
Rustは型が厳格とかデフォでimmutableだったりムーブだったり制約が強いイメージでしたが前提からして間違ってたみたいですね

皆さま事細かにありがとうございました
81デフォルトの名無しさん
垢版 |
2023/09/02(土) 19:32:06.11ID:aKZIxXWD
だから言っただろうがよ
2023/09/02(土) 19:33:02.08ID:EvLWL1zC
これは違うな
疑って失礼しました
2023/09/02(土) 19:34:44.69ID:GzMi3EqG
>>67
お前が勘違いしてんだろガイジ
実行時に所有権やライフタイムは出てこないからこそトランスパイル先の言語にもこれらの機能が言語機能として備える必要がないわけでこのスレでお前だけが1人だけ勘違いしている
頭悪そう
2023/09/02(土) 19:51:23.24ID:Wl+8+V5g
おじ、キレた!!
2023/09/02(土) 20:07:34.22ID:x+ZOYO9b
複数ID全員おじとか糖質患者やろ
お前のたった1人だけの発言の方がすべておじに似つかわしいんやけど自覚できない?
86デフォルトの名無しさん
垢版 |
2023/09/02(土) 20:45:16.67ID:f2x52juV
おじ使いはいつも病気
2023/09/02(土) 23:40:40.30ID:lMQqG2Zb
的外れなレス(>>63-64)からの
恥ずかしい壮大な勘違い(>>66)
そしてなぜかドヤる(>>81)

控えめに言って頭オカシイ
さすが複オジ
2023/09/02(土) 23:56:54.98ID:v0MnUUsV
オジオジ言ってる人は書き込みに中身がなくて全方位叩きだからスレ荒しが目的なのかな
反応せず無視するのがいいんだろうけど反応しちゃった失礼
2023/09/03(日) 00:03:56.01ID:cm8T2pY+
どうでもいいし面倒だしもうここ潰してワッチョイありスレに一本化してほしいんだけど
2023/09/03(日) 00:09:50.96ID:HRiHoELW
「自演認定は頭おかしい」論法
「おじ連呼厨」の強調

いつものやつですね
自演認定糖質論法は久しぶりに聞いた気がする
2023/09/03(日) 00:16:07.67ID:HRiHoELW
ID:bvTG+KAn
ID:g76m2OPt
ID:f2x52juV
ID:GzMi3EqG
ID:x+ZOYO9b
ID:v0MnUUsV
2023/09/03(日) 00:20:28.54ID:cZTMAPOv
議論でバトルが盛り上がるのは歓迎
オジおじ連投がいる時は議論がなく荒れるだけでつまらん
2023/09/03(日) 00:35:38.11ID:HRiHoELW
歓迎するわけねーだろアホか
2023/09/03(日) 00:38:35.94ID:cCJ59BhE
まともな議論が成り立たない原因は複オジだからね
まともな議論ができそうなのはどう見ても>>65>>68のほう
>>91にまとめられてるレスを書いてるようなやつが議論は歓迎とか笑わせるな
2023/09/03(日) 00:45:48.36ID:HRiHoELW
既視感の正体

https://mevius.5ch.net/test/read.cgi/tech/1673926892/745
https://mevius.5ch.net/test/read.cgi/tech/1652347700/468
2023/09/03(日) 00:53:25.84ID:roP/qgKi
>>61
亀レスだが特に理由がないならrusqliteで
今のところはこれがデファクト
2023/09/03(日) 01:20:25.77ID:YZAPuv0W
気に食わない意見があるけど反論できないで次々とおじさん認定して叩くだけのゲスがいるな

libsqlite3の上に構築したRusqliteでもいいが
Rustで構築したSQLxがSQLiteもサポートするようになり出来が良いので急上昇で逆転する見込み
2023/09/03(日) 01:41:47.18ID:mceEf04V
sqlxのsqliteドライバもlibsqlite3の上に構築されてるぞ
SQLiteはCのAPIしか提供してないんだから他のものを使う理由がない
2023/09/03(日) 07:28:12.23ID:x92ht6sx
また知ったかぶりして恥かいてるww
2023/09/03(日) 08:37:05.08ID:WZFIWsZX
sqlx以外はasync/await使えない?
2023/09/03(日) 13:35:31.95ID:mxOeoCcq
自分でspawn_blockingすればいい
2023/09/03(日) 13:45:08.16ID:yQjRA1Qa
安定感や性能に差があるのでsqlite限定ならFirefoxでも使ってるrusqliteがベター
2023/09/03(日) 13:48:17.25ID:jFAGdbdC
■購入目的(達成されました)
・Rustで動くプログラムの写経
・映像表現的な出力結果はモチベーションを維持できる気がした
・RustについてはWeb上に素晴らしいテキストがたくさんあるので簡単な実践的なプログラムを読みたい

■自分のレベル
私は数カ月前にRustを勉強し始めました。
これまで高校でc、Javaの基礎、大学でc++基礎、ObjectiveC、社会人になってPythonやc#と触れてきました。たくさん触れてきていますが結局自分が作りたい少し大きい物をプログラミングで何かを作りきるということをしてきませんでした。いつもチュートリアルで終わりです。永遠に世界に挨拶でもしてろと言われそうなタイプです。

ここ数年で映像制作から転職してインフラエンジニア関係に勤めています。
ネットワークやサーバ周りの知識に加えて一つ言語を修めたいと思いRustをはじめました。
2023/09/03(日) 23:37:22.86ID:IkMULQX5
>>101
spawn_blockingは別OSスレッドを立ててそこで実行するだけだから根本的な解決にならない
2023/09/04(月) 01:10:37.74ID:Ev35rGw5
>>104
別OSスレッドを立ててそこで実行する以外の解決方法はないよ
2023/09/04(月) 02:53:02.64ID:IXHvJiGY
君たちは何を問題と定義しているのか
2023/09/04(月) 06:58:20.37ID:HktKZ7k9
昔と違って今はFutureを返すcrateを選べるのだからそこで困ることはないな
糖衣のasync関数を含めてFutureさえ返してくれればいい
自分側はawaitもしくはspawnしてもいいしFutureUnorderedなどで早い者勝ち処理など自由な方針を取れるのだから
2023/09/04(月) 09:56:10.80ID:NSmwDj9w
>>107
そこで困るとは?
2023/09/04(月) 10:17:13.25ID:/ASAZOX6
困ってない人は一生気付かない
これが理想郷
2023/09/04(月) 13:01:49.77ID:9feyj9k/
いつものストローマンオジ
2023/09/04(月) 18:54:13.07ID:UIsGravq
困ったことが無い香具師には何で困るかわからんマジ
2023/09/04(月) 20:11:06.59ID:pWElWRNz
Futureもawaitして同期のみで困っていない人もいる
Futureすら使わず別スレッドにしちゃって困っていない人もいる
ただしベターな方法を知らないために困っていないだけかも知れない
理解した上で選んでいるなら問題ない
2023/09/04(月) 20:41:40.87ID:0aDTsPbB
>>112
同期APIを非同期で使う話だということを理解してね
何に困ってるのか知らんけど
2023/09/04(月) 20:57:24.92ID:IXHvJiGY
よく分からんが誰も困っていないらしいのでヨシ!
2023/09/04(月) 21:18:46.15ID:xwtgk4fq
>>114
俺は誰れが何に困っているのか分からん。 で、>>107は知っているみたいだが
>>100
>sqlx以外はasync/await使えない?
だから、うん、使えない/いや、xxxも使えるのような回答で良いはずなのに
ITドカタ板に多い障碍者は妄想必死して、変なことを言い出すからな。
2023/09/04(月) 21:28:55.91ID:bE42d19a
>>113
最後の手段spawn_blocking()の話?
あれはスレッドを消費しちゃうから例えばクライアント接続が多数来てそれぞれが使うと詰むよ
全部を非同期APIに統一するのがよいね
2023/09/04(月) 21:58:02.43ID:dk25eEP4
そういう状況なら非同期とか言う前にsqliteやめよう複くん!
118デフォルトの名無しさん
垢版 |
2023/09/04(月) 22:16:10.47ID:Ts5EvUDj
SQL関係ない一般的な話がされてると思ってたらSQLにこだわる人もいてよくわからんな
SQLにしてもサーバーに繋ぎにいくなら同期はありえんな
2023/09/04(月) 22:29:51.49ID:fWqFM9pZ
>>116
スレッド消費せずにSQLiteへの接続を同時にさばくことが出来ないからね
複オジおすすめのsqlxも当然接続ごとに別OSスレッド立ち上げてるからクライアント接続が多数来たら同じように詰むんだよ
2023/09/04(月) 22:47:23.47ID:rfWjSjrk
自分が何を知らないか
知ってる人もいれば
知らない人もいる
前者は詐欺師で
後者は複オジである
彼はみんなを騙しているのではなくて
彼はなんでも知っているつもりなのである
2023/09/04(月) 23:11:41.51ID:ueRfdgpS
RustのSQLデファクトスタンダードのsqlxに対して「複オジおすすめのsqlx」と書いてることから、
複オジ使いはRustを使っていない疑惑が再び出てきた。
2023/09/04(月) 23:53:13.41ID:IXHvJiGY
>>118の相似形

https://mevius.5ch.net/test/read.cgi/tech/1644596656/919
919: デフォルトの名無しさん sage 2022/05/09(月) 18:50:22.63 ID:rGYbsi5m
>>915
>>918
FizzBuzzは単なる話の出発点の例の一つに過ぎなくて既に皆はもっと一般的な話をしているようにみえる
皆もFizzBuzz限定の話なんかに興味はなくて一般的な話に興味があるからではないかな
2023/09/04(月) 23:54:19.18ID:8cZoZvfB
またオジが妄想に取り憑かれてるねww
2023/09/04(月) 23:56:14.30ID:IXHvJiGY
質問者のユースケースが非同期ライブラリを必要としているのか?
そうした前提を確認せずに、非同期対応の一点でライブラリの適・不適を評価しようとすること自体が筋違いなのです
2023/09/05(火) 00:09:09.34ID:XN2NC5/h
質問者>>100
>sqlx以外はasync/await使えない?
だから、非同期が前提ではないかい
2023/09/05(火) 00:23:36.51ID:XDjugVOt
>>125
そっちじゃなくて>>61のこと

https://github.com/launchbadge/sqlx/blob/main/sqlx-sqlite/src/connection/worker.rs#L82
なるほどワーカースレッド立てて通信してるだけで別に非同期ファイルI/Oを最大限活用するとかじゃないんだね
確かにこれなら>>119の言う通りブロッキング待ちするものをspawn_blockingしても大した差はなさそうだ
127デフォルトの名無しさん
垢版 |
2023/09/05(火) 04:37:15.62ID:Zsmh0CoR
>>117
これこれ
2023/09/05(火) 05:16:32.99ID:Rvonn+YZ
>>101
各spawn_blocking()毎に専用のネイティブスレッドをブロックする形で用いるため
spawn_blockingが同時に大量に発生しないよう留意しなければならない
そのため同期ライブラリの利用方法には何らかの制限がついてしまう
非同期ライブラリを利用すればそのような制限はない
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況