公式
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 part19
https://mevius.5ch.net/test/read.cgi/tech/1673926892/
ワッチョイスレ
プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
探検
Rust part20
レス数が1000を超えています。これ以上書き込みはできません。
2023/03/03(金) 00:45:28.73ID:vTVY069B
2023/03/03(金) 01:05:27.64ID:5jfhiVlm
Rust The Book (日本語版)
https://doc.rust-jp.rs/book-ja/
Rust edition guide (日本語版)
https://doc.rust-jp.rs/edition-guide/
Rust by example (日本語版)
https://doc.rust-jp.rs/rust-by-example-ja/
Rust cookbook (日本語版)
https://uma0317.github.io/rust-cookbook-ja/
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust nomicon book (日本語版)
https://doc.rust-jp.rs/rust-nomicon-ja/
Rust async book (日本語版)
https://async-book-ja.netlify.app/
Rust WASM book (日本語版)
https://moshg.github.io/rustwasm-book-ja/
Rust embeded book (日本語版)
https://tomoyuki-nakabayashi.github.io/book/
Rust enbeded discovery (日本語版)
https://tomoyuki-nakabayashi.github.io/discovery/
Rust Design Patterns (日本語版)
https://qiita.com/Yappii_111/items/4ccc3a8461cdd4035651
https://qiita.com/Yappii_111/items/654717e6a6a980722189
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
https://doc.rust-jp.rs/book-ja/
Rust edition guide (日本語版)
https://doc.rust-jp.rs/edition-guide/
Rust by example (日本語版)
https://doc.rust-jp.rs/rust-by-example-ja/
Rust cookbook (日本語版)
https://uma0317.github.io/rust-cookbook-ja/
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
Rust nomicon book (日本語版)
https://doc.rust-jp.rs/rust-nomicon-ja/
Rust async book (日本語版)
https://async-book-ja.netlify.app/
Rust WASM book (日本語版)
https://moshg.github.io/rustwasm-book-ja/
Rust embeded book (日本語版)
https://tomoyuki-nakabayashi.github.io/book/
Rust enbeded discovery (日本語版)
https://tomoyuki-nakabayashi.github.io/discovery/
Rust Design Patterns (日本語版)
https://qiita.com/Yappii_111/items/4ccc3a8461cdd4035651
https://qiita.com/Yappii_111/items/654717e6a6a980722189
Rust API guideline (日本語版)
https://sinkuu.github.io/api-guidelines/
2023/03/03(金) 01:09:18.66ID:5jfhiVlm
Rust Reference Book
https://doc.rust-lang.org/reference/
Rust Standard Library
https://doc.rust-lang.org/std/
Rust rustc Book
https://doc.rust-lang.org/rustc/
Rust rustdoc Book
https://doc.rust-lang.org/rustdoc/
Rust rustup Book
https://rust-lang.github.io/rustup/
Rust Cargo Book
https://doc.rust-lang.org/cargo/
Rust unstable Book
https://doc.rust-lang.org/nightly/unstable-book/
Rust macro Book
https://danielkeep.github.io/tlborm/book/
Rust CLI (Command Line Interface) apps Book
https://rust-cli.github.io/book/
Rust Future Book
https://cfsamson.github.io/books-futures-explained/
Rust async-std Book
https://book.async.rs/
Rust tokio Book
https://tokio.rs/tokio/tutorial
https://doc.rust-lang.org/reference/
Rust Standard Library
https://doc.rust-lang.org/std/
Rust rustc Book
https://doc.rust-lang.org/rustc/
Rust rustdoc Book
https://doc.rust-lang.org/rustdoc/
Rust rustup Book
https://rust-lang.github.io/rustup/
Rust Cargo Book
https://doc.rust-lang.org/cargo/
Rust unstable Book
https://doc.rust-lang.org/nightly/unstable-book/
Rust macro Book
https://danielkeep.github.io/tlborm/book/
Rust CLI (Command Line Interface) apps Book
https://rust-cli.github.io/book/
Rust Future Book
https://cfsamson.github.io/books-futures-explained/
Rust async-std Book
https://book.async.rs/
Rust tokio Book
https://tokio.rs/tokio/tutorial
2023/03/03(金) 02:38:11.23ID:g7UDV3mc
2023/03/03(金) 04:50:59.80ID:5+VE8dsn
>>4
マクロとデザインパターン以外は全て公式とその日本語版じゃね?
マクロとデザインパターン以外は全て公式とその日本語版じゃね?
2023/03/03(金) 06:29:29.67ID:3EPD3050
質問はChatGPTにどうぞ
ってやればいいか
ってやればいいか
2023/03/03(金) 10:06:00.63ID:EsJwG25J
>>4
ゴミ日本語訳に誘導したくて仕方がない関係者だろな
ゴミ日本語訳に誘導したくて仕方がない関係者だろな
2023/03/03(金) 11:36:41.01ID:JQSTwLJ6
2023/03/03(金) 11:57:20.14ID:BFvq14eB
日本語訳は2年近く前のThe Bookをもとにしてるにも関わらず
約1年前の1.58時点のThe Bookをもとにしてるかのようにミスリードしてるのが悪質
倫理観が欠如してるとしか思えない
約1年前の1.58時点のThe Bookをもとにしてるかのようにミスリードしてるのが悪質
倫理観が欠如してるとしか思えない
2023/03/03(金) 21:55:56.58ID:6WvBOcY6
あちゃーまじかー
技術スキルも日本語能力もないやつにやらせんなよ
技術スキルも日本語能力もないやつにやらせんなよ
2023/03/03(金) 21:59:35.11ID:IWtB3OsL
Rust公式でもJP公式でも他の有志翻訳ページでも
もし本当にヤバいミスがあるなら正しい情報をそれぞれに出すのがいいんじゃないか
それで直らないなら新たなサイトを作るとか新たな言語を作るしかない
これらでない言いがかりをつけるだけの荒らし行為はやめとけ
もし本当にヤバいミスがあるなら正しい情報をそれぞれに出すのがいいんじゃないか
それで直らないなら新たなサイトを作るとか新たな言語を作るしかない
これらでない言いがかりをつけるだけの荒らし行為はやめとけ
2023/03/03(金) 23:16:10.01ID:wWtECe2y
所有権複製おじさんも仮の所有権おじさんも日本語訳が生み出したものだと思ってたが因果関係が逆なら根本原因は明らかだね
2023/03/03(金) 23:34:12.09ID:WGG+yJpD
2023/03/04(土) 00:17:04.01ID:73wkOS2W
2023/03/04(土) 13:59:40.63ID:VYEasP1j
https://github.com/rust-lang-ja/book-ja/tree/master-ja/src
の更新日がバラバラだからな
title-pageだけ更新したから>>9みたいになってる
一旦全部AI翻訳にかけた方が早いかもしれない
の更新日がバラバラだからな
title-pageだけ更新したから>>9みたいになってる
一旦全部AI翻訳にかけた方が早いかもしれない
2023/03/04(土) 14:18:14.66ID:u2BMKDBQ
本家に追従しきれないよりは機械翻訳のほうがマシだけど
可能ならちゃんとした技能のある人が翻訳するに越したことはないのも確かなんだよなー。
可能ならちゃんとした技能のある人が翻訳するに越したことはないのも確かなんだよなー。
2023/03/04(土) 18:04:28.01ID:LDufCtSs
翻訳やってる人の言葉使いが複オジとそっくりだから本人っぽいな
2023/03/04(土) 23:12:51.88ID:zScYEmg5
いつ時点のものを訳したのかさえ管理できてないって翻訳プロジェクトとしてはもう終わってんね
そんなのよりThis Week in Rustみたいな役立つリンクをテンプレに入れた方がいい
そんなのよりThis Week in Rustみたいな役立つリンクをテンプレに入れた方がいい
2023/03/05(日) 08:10:28.29ID:Eop1iDrL
https://gihyo.jp/article/2023/03/tfen009-rust_progress
let-elseも1.65から利用可能になり、if let構文(例:if let Some(b) = a {} else {})をlet Some(b) = a else {}と書けるようになりました。
この変更により、ネストが減ってコードの見た目がスッキリしたり、処理の流れが読みやすくなったりというメリットを享受できるようになります。
先日let-elseを使いたくなったので、チームでRustのバージョンを1.65に上げて、これからはlet-elseに変えられるところは変えていこう、ということになりました。
let-elseも1.65から利用可能になり、if let構文(例:if let Some(b) = a {} else {})をlet Some(b) = a else {}と書けるようになりました。
この変更により、ネストが減ってコードの見た目がスッキリしたり、処理の流れが読みやすくなったりというメリットを享受できるようになります。
先日let-elseを使いたくなったので、チームでRustのバージョンを1.65に上げて、これからはlet-elseに変えられるところは変えていこう、ということになりました。
2023/03/05(日) 12:20:05.12ID:NLajm9a+
いつも常駐してるオジサンがダンマリ決め込んでるところを見ると
JP公式==複オジ説は本当なんだな
最悪
JP公式==複オジ説は本当なんだな
最悪
2023/03/05(日) 15:24:37.63ID:78Ic7w+o
どこかのおじさんが自称公式を名乗っていようが正直どうでもいい
このスレ的にはあそこの日本語訳は害が大きいので必ず公式ドキュメント(英語)を参照することを>>1に入れておけばそれで十分
このスレ的にはあそこの日本語訳は害が大きいので必ず公式ドキュメント(英語)を参照することを>>1に入れておけばそれで十分
2023/03/05(日) 15:43:27.49ID:T9VmDwru
ここまで複オジの戯言
2023/03/05(日) 16:04:09.72ID:k8KjXA8F
2023/03/05(日) 18:09:02.89ID:LJW1dSxX
>>20
隔離スレには出没してるからそういうことなんだろう
隔離スレには出没してるからそういうことなんだろう
25デフォルトの名無しさん
2023/03/07(火) 11:59:08.95ID:808C7eOs メモリが足んなくて、FP16とかBF16とかに興味が出てきたんだけどさ
https://docs.rs/half/latest/half/struct.bf16.html
こういうのをx64系のCPUで使うと、FP32の場合より(SIMDがバシッと効く場合を除いて)どんぐらい遅くなるもんなの?
https://docs.rs/half/latest/half/struct.bf16.html
こういうのをx64系のCPUで使うと、FP32の場合より(SIMDがバシッと効く場合を除いて)どんぐらい遅くなるもんなの?
2023/03/07(火) 15:51:39.46ID:n6pI5I+D
2023/03/07(火) 17:36:45.89ID:foOMuD7h
単精度のときに全部L1に乗るなら0.6倍、そうでないなら半精度のほうが早くなる模様
https://www.isus.jp/others/half-precision-floats/
https://www.isus.jp/others/half-precision-floats/
2023/03/07(火) 17:39:18.38ID:j2LIvzFC
おじさんの個人ブログ&リンク集を
JP公式などと呼称するのがそもそもの間違いなんだよな
わかってる人は訪れてもそっ閉じするだけなので
初心者向けの注意喚起だけ書いておけばいいよ
JP公式などと呼称するのがそもそもの間違いなんだよな
わかってる人は訪れてもそっ閉じするだけなので
初心者向けの注意喚起だけ書いておけばいいよ
2023/03/07(火) 17:47:17.93ID:I20MXGms
なんでIDコロコロするの?
2023/03/07(火) 19:42:26.18ID:NkW3dTMM
>>26
どこにその記載あるの?
どこにその記載あるの?
2023/03/07(火) 19:48:30.54ID:NkW3dTMM
2023/03/07(火) 20:33:26.94ID:/0bgQhyZ
2023/03/07(火) 21:12:05.81ID:I20MXGms
推奨も非推奨もしていない書き方だと思うけど、どうやったら推奨してるように見えるんです?
2023/03/07(火) 21:24:18.71ID:/0bgQhyZ
2023/03/07(火) 21:29:32.54ID:YzY/wVtd
日本語コミュニティの中心的な人物は本家コミュニティでも活動してる。
推奨もクソもないんよ。 同じ人が日本語でも英語でも議論や発信してるってだけなんだから。
でも本家コミュニティのほとんどの人は日本語なんて知らんのだから翻訳の質にお墨付きを与えられる立場でもない。
本家コミュニティの中に日本語コミュニティへの橋渡し役がいるから
日本語コミュニティの拠点だと認識しているところにリンクしてるんだわ。
リンクは質についての保証ではなく活動実態がある (と本家コミュニティが認識している) という保証なんだわ。
推奨もクソもないんよ。 同じ人が日本語でも英語でも議論や発信してるってだけなんだから。
でも本家コミュニティのほとんどの人は日本語なんて知らんのだから翻訳の質にお墨付きを与えられる立場でもない。
本家コミュニティの中に日本語コミュニティへの橋渡し役がいるから
日本語コミュニティの拠点だと認識しているところにリンクしてるんだわ。
リンクは質についての保証ではなく活動実態がある (と本家コミュニティが認識している) という保証なんだわ。
2023/03/07(火) 21:31:53.30ID:I20MXGms
>>34
リンクが貼ってあるから推奨ってのはなんとも面白い解釈だね
リンクが貼ってあるから推奨ってのはなんとも面白い解釈だね
2023/03/07(火) 22:07:18.53ID:nFWrM4z5
>>980
次のテンプレにこれをいれとけ
「The Book非公式翻訳版について」
The Bookには有志による非公式な日本語翻訳版が存在しますが
日本語訳の品質に問題があるとの声が多いことや
数年以上前の古いThe Bookの翻訳となっておりアクティブな更新が行われていないことから
混乱を避けるために当スレでThe Bookを参照する場合は非公式翻訳版ではなく必ず公式のThe Book(英語)を参照するようにして下さい
次のテンプレにこれをいれとけ
「The Book非公式翻訳版について」
The Bookには有志による非公式な日本語翻訳版が存在しますが
日本語訳の品質に問題があるとの声が多いことや
数年以上前の古いThe Bookの翻訳となっておりアクティブな更新が行われていないことから
混乱を避けるために当スレでThe Bookを参照する場合は非公式翻訳版ではなく必ず公式のThe Book(英語)を参照するようにして下さい
2023/03/07(火) 22:33:00.74ID:xkCydgep
2023/03/07(火) 22:42:05.39ID:bUqVPH8L
2023/03/07(火) 23:23:41.62ID:/0bgQhyZ
改善すべき点があるならば改善する方向へ動くのが良いと思う
2023/03/08(水) 07:09:44.47ID:/qygPgTx
>>39
なんでそんなにセンシティブになってるの?
なんでそんなにセンシティブになってるの?
2023/03/08(水) 07:14:43.18ID:9h+oJZcX
>>37はいつものRustの足を引っ張るアンチっぽい
2023/03/08(水) 07:54:43.28ID:STUjH1uW
本気でなにか変えたいならGitHubなり公式フォーラムなりで活動すればいいわけで
ここで文句言ってるだけってことは単に言いたいだけなんだろう
ここで文句言ってるだけってことは単に言いたいだけなんだろう
2023/03/08(水) 08:08:57.29ID:vHYmPy/j
2023/03/08(水) 08:31:57.93ID:OMAPV4fU
>>37
数年以上前の古い翻訳との指摘は勘違いかあるいは意図的なガセか?
英語版が2021 Edition対応になったときに
日本語版もその2021 Edition対応になっていて特に問題ないようだが
数年以上前の古い翻訳との指摘は勘違いかあるいは意図的なガセか?
英語版が2021 Edition対応になったときに
日本語版もその2021 Edition対応になっていて特に問題ないようだが
2023/03/08(水) 10:39:24.48ID:FNKYRc64
一人だけ必死オジねww
2023/03/08(水) 11:13:15.11ID:PxKx6CUr
>>45
それ以降更新されてなければ数年以上前の古い翻訳で間違いないね
それ以降更新されてなければ数年以上前の古い翻訳で間違いないね
2023/03/08(水) 11:25:12.41ID:l8ZbUL/a
「数年以上前の古い翻訳」は更新があれば嘘になっちゃうから
更新状況の確認方法を挙げて確認を促すことができればそれがよいね
更新状況の確認方法を挙げて確認を促すことができればそれがよいね
2023/03/08(水) 12:03:18.15ID:YxWGdUuX
2023/03/08(水) 12:09:51.90ID:WGL5Sjj5
>>37の「数年以上前の古いThe Bookの翻訳」で正しい
翻訳の元になっているThe Bookが古いということ
翻訳の元になっているThe Bookが古いということ
2023/03/08(水) 12:24:02.51ID:fO6VixLz
2023/03/08(水) 12:26:44.45ID:W3VafHEB
関係者にも関わらず
それを明かさず必死擁護してると
ステマ規制で罪に問われるよ
それを明かさず必死擁護してると
ステマ規制で罪に問われるよ
2023/03/08(水) 12:28:09.23ID:AVy9425f
>>49
読み手っていうか君がそう感じてるだけでしょ?
真に推奨ならば「THE BOOKを読もう!」のリンク先が日本語版になってるよ
だから公式としては推奨も非推奨もしていない、案内だけしてるという状態
読み手っていうか君がそう感じてるだけでしょ?
真に推奨ならば「THE BOOKを読もう!」のリンク先が日本語版になってるよ
だから公式としては推奨も非推奨もしていない、案内だけしてるという状態
2023/03/08(水) 12:35:05.90ID:YsAFI89D
2023/03/08(水) 12:38:42.68ID:bQZD4wXW
2023/03/08(水) 12:46:44.11ID:zFvjdLUz
必死オジのわざとらしいミスリードだろ
翻訳版がもとにしているThe Bookのバージョンが古いままという指摘に対して
非公式翻訳版を見たら2022年と書いてたよーだもんwww
翻訳版がもとにしているThe Bookのバージョンが古いままという指摘に対して
非公式翻訳版を見たら2022年と書いてたよーだもんwww
2023/03/08(水) 12:57:34.44ID:YxWGdUuX
2023/03/08(水) 13:00:40.45ID:AVy9425f
>>57
推奨も非推奨もしていないと推奨していないは別なんですが...
推奨も非推奨もしていないと推奨していないは別なんですが...
2023/03/08(水) 13:32:34.88ID:lVG18cq8
今気付いたけど本家のThe Bookから正式に日本語版を含む各言語版のレポジトリへリンクが張られてるんだね
https://doc.rust-lang.org/book/appendix-06-translation.html
日本語版の各セクションの更新日を見てみたら
https://github.com/rust-lang-ja/book-ja/tree/master-ja/src
数ヶ月前がいくつかあるから更新されてるんじゃない?
https://doc.rust-lang.org/book/appendix-06-translation.html
日本語版の各セクションの更新日を見てみたら
https://github.com/rust-lang-ja/book-ja/tree/master-ja/src
数ヶ月前がいくつかあるから更新されてるんじゃない?
2023/03/08(水) 14:23:51.90ID:GIrZN4Te
複オジは非公式翻訳を
公式からリンクされてるという理由で
公式な日本語訳と偽っていた罪を償うのが先
嘘つきの言うことは誰も信用しない
公式からリンクされてるという理由で
公式な日本語訳と偽っていた罪を償うのが先
嘘つきの言うことは誰も信用しない
2023/03/08(水) 14:28:59.70ID:MGmZ5+PV
2023/03/08(水) 14:38:17.99ID:k26S3184
評判の悪い日本語訳で勉強するより公式でやったほうがいいのは当然だよな
反対する理由は見当たらない
反対する理由は見当たらない
63デフォルトの名無しさん
2023/03/08(水) 14:49:29.41ID:yw6CL/M82023/03/08(水) 15:29:08.93ID:xMERxfms
非公式おじさん涙目ワロw
2023/03/08(水) 17:16:33.70ID:YxWGdUuX
結局、足を引っ張るだけの無能は口だけ番長ということでいいのかね。
githubの日本語訳リポジトリに改善版のプルリクエスト出して貢献すりゃいいのに。
githubの日本語訳リポジトリに改善版のプルリクエスト出して貢献すりゃいいのに。
2023/03/08(水) 17:43:46.69ID:VNQhgWjd
2023/03/08(水) 17:49:07.09ID:WJ2h17EM
まだ件のAIで翻訳は無理なのか
2023/03/08(水) 18:03:44.14ID:dhvL467/
なんか頑張って擁護してる人は日本語版が古くないっていう根拠全く示せてないよね?
2023/03/08(水) 18:11:20.27ID:K08tGqYA
事実を書くと足を引っ張るだけの無能になるらしい
GitHub のリポジトリに Issue も PR もいくつかあるけど放置されてるじゃん
GitHub のリポジトリに Issue も PR もいくつかあるけど放置されてるじゃん
2023/03/08(水) 18:21:29.08ID:DM+uPewN
>>37の案でok
日本語版の問題点の話ばっかりでこれ以上スレ消費しても仕方ない気がする
日本語版の問題点の話ばっかりでこれ以上スレ消費しても仕方ない気がする
2023/03/08(水) 18:27:52.80ID:BrWt4HZU
2023/03/08(水) 19:27:32.79ID:mW0hpgEv
>>69
ならメンテナに立候補すりゃいいんじゃない?
ならメンテナに立候補すりゃいいんじゃない?
2023/03/08(水) 20:56:54.94ID:+7TMvH3q
もしかしてメンテナご本人?
2023/03/08(水) 22:28:52.95ID:cNf5UxLu
日本語版に問題がある
→じゃお前がPR送れ
IssueもPRも放置されてる
→じゃお前がメンテナやれ
なんなのこれ
こんなのが関係者にいるんなら改善される見込みゼロでしょ
→じゃお前がPR送れ
IssueもPRも放置されてる
→じゃお前がメンテナやれ
なんなのこれ
こんなのが関係者にいるんなら改善される見込みゼロでしょ
2023/03/08(水) 22:29:48.23ID:RPZ0ODVG
ここの皆Rust大好きな筈なのに日本語コミュニティに貢献の痕跡がないってやばない?
2023/03/08(水) 23:02:50.55ID:ijMIMHq8
非公式日本語翻訳には手を出さないよう
積極的に初心者を啓蒙するのが
日本のRustコミュニティにとっての最善手
積極的に初心者を啓蒙するのが
日本のRustコミュニティにとっての最善手
2023/03/09(木) 00:46:37.28ID:ehuwCZc+
>>75
今や匿名じゃないと困っちゃう人の巣窟ですからね
今や匿名じゃないと困っちゃう人の巣窟ですからね
2023/03/09(木) 01:16:43.58ID:Z9xocO1d
常駐してるアンチRustによる妨害連投だろ
何でも文句をつけてRustの足を引っ張ることが目的
日本語版の件も同じ
何でも文句をつけてRustの足を引っ張ることが目的
日本語版の件も同じ
2023/03/09(木) 02:21:45.87ID:ehuwCZc+
そして>>69に戻る
2023/03/09(木) 08:46:28.38ID:NWRX1mim
2023/03/09(木) 09:02:51.43ID:3zbp+azX
Rustアンチを見分けるのは簡単
今までどの話でも「改善案や代替案を出したり協力したり」せずに「批判したり言いがかりをつけたり潰そうとしたりする」
今回の話も同様
もし仮に具体的に深刻な問題があるならば改善する方向へ動けばよいだけの話
今までどの話でも「改善案や代替案を出したり協力したり」せずに「批判したり言いがかりをつけたり潰そうとしたりする」
今回の話も同様
もし仮に具体的に深刻な問題があるならば改善する方向へ動けばよいだけの話
2023/03/09(木) 09:14:52.26ID:bx/t5YIt
2023/03/09(木) 09:20:15.59ID:0a1GOjgJ
> 「批判したり言いがかりをつけたり潰そうとしたりする」
確かに日本語版の問題点が指摘されると
とにかく言いがかりをつけて潰そうとする人がいるね
確かに日本語版の問題点が指摘されると
とにかく言いがかりをつけて潰そうとする人がいるね
2023/03/09(木) 09:27:52.51ID:pceol7Cc
誤訳も放置
イシューも放置
プルリク来るけど知らんぷり
文句言うな
お前がやれ
今日も5chをぐーるぐる
オラこんなリポいやだ
オラこんなリポいやだ
イシューも放置
プルリク来るけど知らんぷり
文句言うな
お前がやれ
今日も5chをぐーるぐる
オラこんなリポいやだ
オラこんなリポいやだ
2023/03/09(木) 09:41:16.94ID:cLGdo+Dg
2023/03/09(木) 09:41:31.57ID:5eT48dzr
本家にある程度追いついてて誤訳があるとか未訳があるなら貢献しやすいけどそうじゃないからなぁ
まずはそこまでメンテナー側でやってくれたら貢献する人も現れるんじゃない?
まずはそこまでメンテナー側でやってくれたら貢献する人も現れるんじゃない?
2023/03/09(木) 09:42:37.79ID:ch2FekEs
>>84
草
草
2023/03/09(木) 09:51:30.09ID:MrYHSR72
Rustアンチは具体的に日本語版Bookのどの章のどの節にどういう問題があって改善案がどうなのかを言えない
RustアンチはRustやその普及を潰すことだけを目標にしている
RustアンチはRustやその普及を潰すことだけを目標にしている
2023/03/09(木) 09:56:19.19ID:5eT48dzr
2023/03/09(木) 09:56:38.71ID:bUyZbGMm
2023/03/09(木) 10:05:17.42ID:DF6AT3du
Rustコミュニティに貢献しても
非公式翻訳版の品質改善のために
PR出さずに批判するやつは全員アンチ扱い
非公式翻訳版の品質改善のために
PR出さずに批判するやつは全員アンチ扱い
2023/03/09(木) 10:07:21.23ID:fiidGuJR
>>89
オジ恥
オジ恥
2023/03/09(木) 10:20:37.62ID:5eT48dzr
>>92
事実に対して反論できず捨て台詞を吐くだけなら何も書かないほうがいいと思います
事実に対して反論できず捨て台詞を吐くだけなら何も書かないほうがいいと思います
2023/03/09(木) 10:26:46.29ID:0ZUHbZyh
2023/03/09(木) 10:39:22.78ID:JRh3xELi
もしかしてforkしてブランチ切る程度のこともやってないわけ?
ちょっと信じられないんだが
ちょっと信じられないんだが
2023/03/09(木) 10:45:17.46ID:dzdLgXqT
>>95
プルリク出しても無視されることが分かってるのに修正する気になるわけないじゃん
プルリク出しても無視されることが分かってるのに修正する気になるわけないじゃん
2023/03/09(木) 10:51:11.72ID:tzQKIk8q
日本語版には問題があるから英語版を使ったほうがいいという意見に対して
批判するならイシューやプルリク出せというのは論点のすり替え
批判するならイシューやプルリク出せというのは論点のすり替え
2023/03/09(木) 10:57:51.77ID:Nh0+4dpq
日本語版を潰すことだけに力を入れてるのかー
マジでアンチじゃん
マジでアンチじゃん
2023/03/09(木) 11:02:16.65ID:ehuwCZc+
全員単発
応仁の乱
応仁の乱
100デフォルトの名無しさん
2023/03/09(木) 11:02:36.11ID:5eT48dzr 問題点・改善点をあげてもアンチ乙で片付けられるんだから無敵だな
101デフォルトの名無しさん
2023/03/09(木) 11:36:59.36ID:I6UUv7Kk102デフォルトの名無しさん
2023/03/09(木) 11:41:54.63ID:vunFCsf3 まぁ実際のところ日本語版を読みたい初心者がこんなスレに来るわけないし
このスレのローカルルールとしては>>37でいいと思うけどな
もし日本語版を本気でどうにかしたい人がいるならその議論はzuilpなりGitHubのissueでやればいい
このスレのローカルルールとしては>>37でいいと思うけどな
もし日本語版を本気でどうにかしたい人がいるならその議論はzuilpなりGitHubのissueでやればいい
103デフォルトの名無しさん
2023/03/09(木) 11:59:25.10ID:IPNUA449104デフォルトの名無しさん
2023/03/09(木) 11:59:38.63ID:Js3muVMH10596,103
2023/03/09(木) 12:07:13.82ID:NxdTjqu4 もしもしはすぐID変わるからダメだな
これじゃIDコロコロするやつと変わんねぇよ
これじゃIDコロコロするやつと変わんねぇよ
106デフォルトの名無しさん
2023/03/09(木) 12:23:44.08ID:WMBmvI2V107デフォルトの名無しさん
2023/03/09(木) 12:53:07.30ID:vunFCsf3108デフォルトの名無しさん
2023/03/09(木) 13:38:49.60ID:tfi/zejU >>102
同意
同意
109デフォルトの名無しさん
2023/03/09(木) 13:56:08.35ID:qMTKidpI 5chの1スレで扱わなくなると殲滅されてしまうよう物なら
近いうちに自然淘汰されるだけだから
ここでは扱わないのが正解ということになる
近いうちに自然淘汰されるだけだから
ここでは扱わないのが正解ということになる
110デフォルトの名無しさん
2023/03/09(木) 14:02:00.14ID:KrFX8l8a 傍から見てるだけだけどさ
わざわざ日本語版を排除しようというのはアンチにしか生じない動機・感情よね
わざわざ日本語版を排除しようというのはアンチにしか生じない動機・感情よね
111デフォルトの名無しさん
2023/03/09(木) 14:10:10.57ID:WYfWQgCO 不正確なもんは排除しとくほうがマシ
それを許して欲しいと言う甘えは通用しない
所有権の複製とかいう用語が世間で通用しないのと同じ
それを許して欲しいと言う甘えは通用しない
所有権の複製とかいう用語が世間で通用しないのと同じ
112デフォルトの名無しさん
2023/03/09(木) 14:12:34.91ID:za1QZKNx 更新が英語版のmainに追い付いたらテンプレに戻すという条件付き除外措置なら誰も文句無いですか?
113デフォルトの名無しさん
2023/03/09(木) 14:13:47.86ID:KrFX8l8a 日本語版で不正確なところはどこなの?
所有権??
所有権??
114デフォルトの名無しさん
2023/03/09(木) 14:16:43.77ID:lc0skjdv 総務省の公文書のことか
115デフォルトの名無しさん
2023/03/09(木) 14:47:46.87ID:WYfWQgCO Rustアンチっていう表現がそもそも疑問なんよね
単にここじゃあ複オジが馬鹿にされてたり
rust-jpに疑問が持たれてたりするだけであって
それがなぜだか
ある人にとっては「Rustアンチ」ってことにすり替わっちゃう
単にここじゃあ複オジが馬鹿にされてたり
rust-jpに疑問が持たれてたりするだけであって
それがなぜだか
ある人にとっては「Rustアンチ」ってことにすり替わっちゃう
116デフォルトの名無しさん
2023/03/09(木) 14:50:24.91ID:TbSLyHqM117デフォルトの名無しさん
2023/03/09(木) 14:51:04.12ID:yQuaEoeh cargoを使用していると、過去のクレートのキャッシュ?なのかなんなのかわからないものがどんどん溜まっていってしまいます
これって使い続けるとどこまでも増えていってしまうのですか?何か容量を抑える策はあるのでしょうか?
SSDがしょぼいので気になってしまいます
これって使い続けるとどこまでも増えていってしまうのですか?何か容量を抑える策はあるのでしょうか?
SSDがしょぼいので気になってしまいます
118デフォルトの名無しさん
2023/03/09(木) 14:52:40.57ID:5eT48dzr >>117
cargo clean
cargo clean
119デフォルトの名無しさん
2023/03/09(木) 15:28:35.84ID:SZrfwfYj 会話や議論のベースとするには信頼が置けないというのが最大の理由でしょ
だからこのスレでは信頼のおける公式The Bookを使うローカルルールにするというだけのこと
日本語版の問題箇所を一つ一つ具体的にあげて改善していくためのスレじゃないんだからそれをやりたい人は>>102が言うようにzuilpなりGitHubでやるのが適切
だからこのスレでは信頼のおける公式The Bookを使うローカルルールにするというだけのこと
日本語版の問題箇所を一つ一つ具体的にあげて改善していくためのスレじゃないんだからそれをやりたい人は>>102が言うようにzuilpなりGitHubでやるのが適切
120デフォルトの名無しさん
2023/03/09(木) 15:45:47.39ID:hrQLf9QV アンチというレッテル貼りしてるだけの人の動機は何なんだろう?
121デフォルトの名無しさん
2023/03/09(木) 15:53:09.08ID:RjLT18Ud122デフォルトの名無しさん
2023/03/09(木) 16:11:36.62ID:od/fqKtF バカが2人に増えたね
信者複製おじさんと謎のrust-jp陰謀論おじさん
地獄
信者複製おじさんと謎のrust-jp陰謀論おじさん
地獄
123デフォルトの名無しさん
2023/03/09(木) 18:38:23.80ID:wqVFkatU Bookの日本語版を一通り読んでみたけど特に間違ったことはなさげ
訳語は一部意見割れるかもしれないけど不可はない感じ
ネット上の日本語のRust入門としてベストじゃないかな
訳語は一部意見割れるかもしれないけど不可はない感じ
ネット上の日本語のRust入門としてベストじゃないかな
124デフォルトの名無しさん
2023/03/09(木) 18:53:24.39ID:1oUy2fzR え、内容が古いことは無視ですか?
125デフォルトの名無しさん
2023/03/09(木) 19:03:49.80ID:wqVFkatU なにか古くて間違ってるようなことなかったと思うよ
126デフォルトの名無しさん
2023/03/09(木) 20:59:36.65ID:5eT48dzr127デフォルトの名無しさん
2023/03/09(木) 22:00:09.63ID:TpJxaXq0128デフォルトの名無しさん
2023/03/09(木) 22:25:18.34ID:5eT48dzr >>127
Box 使用箇所は本家では直ってるところだからここだけ言ってもしょうがないよ
> 間違ってるから優先して直してって言えば対応してくれる
issue,pr は何個かあるけどどれも放置だから無駄だよ
Box 使用箇所は本家では直ってるところだからここだけ言ってもしょうがないよ
> 間違ってるから優先して直してって言えば対応してくれる
issue,pr は何個かあるけどどれも放置だから無駄だよ
129デフォルトの名無しさん
2023/03/09(木) 22:28:14.00ID:Qg5Vw7uS130デフォルトの名無しさん
2023/03/09(木) 23:01:25.11ID:bker4XmI じゃスルーしてたlet-else話でもするか
>>19のリンクに書いてあるlet-elseのリファクタリングってあり?
Afterでもダメってほどじゃないが俺はBeforeのほうがいいように思える
//Before
pub async fn close(&mut self) -> Result<()> {
if let Some(mut file) = self.file.take() {
debug!("File {} closed", self.filename());
file.flush().await?;
}
Ok(())
}
//After
pub async fn close(&mut self) -> Result<()> {
let Some(mut file) = self.file.take() else {
return Ok(());
};
debug!("File {} closed", self.filename());
file.flush().await
}
>>19のリンクに書いてあるlet-elseのリファクタリングってあり?
Afterでもダメってほどじゃないが俺はBeforeのほうがいいように思える
//Before
pub async fn close(&mut self) -> Result<()> {
if let Some(mut file) = self.file.take() {
debug!("File {} closed", self.filename());
file.flush().await?;
}
Ok(())
}
//After
pub async fn close(&mut self) -> Result<()> {
let Some(mut file) = self.file.take() else {
return Ok(());
};
debug!("File {} closed", self.filename());
file.flush().await
}
131デフォルトの名無しさん
2023/03/09(木) 23:19:16.56ID:17jElPHd132デフォルトの名無しさん
2023/03/10(金) 07:39:28.49ID:eGAweG+/133デフォルトの名無しさん
2023/03/10(金) 12:26:56.89ID:5qa3scwI134デフォルトの名無しさん
2023/03/10(金) 13:39:34.28ID:YUaQrZ1H >>130
その2つならif letバージョンの方が読みやすいね
その2つならif letバージョンの方が読みやすいね
135デフォルトの名無しさん
2023/03/10(金) 17:33:37.91ID:THb1tZPF >>130
前者だな
Okでも違う値を返すようになったりネストが深くなったりした段階でリファクタリングを考慮すれば十分
その例ではtake、flush、dropの一連のつながりを切るほどのメリットが全くない
あと後者はfile.flush.await.into()にする必要があるかもしれない
前者だな
Okでも違う値を返すようになったりネストが深くなったりした段階でリファクタリングを考慮すれば十分
その例ではtake、flush、dropの一連のつながりを切るほどのメリットが全くない
あと後者はfile.flush.await.into()にする必要があるかもしれない
136デフォルトの名無しさん
2023/03/10(金) 17:46:09.19ID:Lf3CpR6K137はちみつ餃子 ◆8X2XSCHEME
2023/03/10(金) 17:46:47.36ID:wtzqTKjF >>130
私も前者だと思う。
見通しが特に悪くなるほど複雑な場合でないならやろうとしていることがそのままコードに表れているほうが良くて、
前者のほうが何をやろうとしているのかスッと読める感じがする。
私も前者だと思う。
見通しが特に悪くなるほど複雑な場合でないならやろうとしていることがそのままコードに表れているほうが良くて、
前者のほうが何をやろうとしているのかスッと読める感じがする。
138デフォルトの名無しさん
2023/03/10(金) 18:03:17.42ID:Qo+lY2qI139デフォルトの名無しさん
2023/03/10(金) 19:08:36.07ID:HKUOk1Tv >>138
場面に応じてどちらが向いているのか変わるから場面がわかる特定の例で比較することに意味があるのでは?
場面に応じてどちらが向いているのか変わるから場面がわかる特定の例で比較することに意味があるのでは?
140デフォルトの名無しさん
2023/03/10(金) 19:13:36.55ID:Qo+lY2qI >>139
返り値がResult<()>でelse時にErrではなくOk(())という極めて特殊な偏った例になんの意味があるんだ?
返り値がResult<()>でelse時にErrではなくOk(())という極めて特殊な偏った例になんの意味があるんだ?
141デフォルトの名無しさん
2023/03/10(金) 19:17:05.20ID:ha1WEkSQ 意味の有る無しを断じるあたり幼稚やな
周り見てご覧
キミ以外はそんなとこに拘っとらんやろ?
周り見てご覧
キミ以外はそんなとこに拘っとらんやろ?
142デフォルトの名無しさん
2023/03/10(金) 19:36:05.08ID:YsUJsRqF143デフォルトの名無しさん
2023/03/10(金) 19:40:18.95ID:F+OjF9fC 好きな方使ってろバカども
前スレそれで使い潰してまだ反省してねえのか
前スレそれで使い潰してまだ反省してねえのか
144デフォルトの名無しさん
2023/03/10(金) 20:24:59.10ID:7c0jaWrI145デフォルトの名無しさん
2023/03/10(金) 21:43:27.35ID:+jgRtbOv 現在のIT業界に「代替メモリレイアウト」という概念はありますか?
146130
2023/03/10(金) 22:22:59.62ID:IYh2ezPU147デフォルトの名無しさん
2023/03/10(金) 22:39:57.98ID:IYh2ezPU148デフォルトの名無しさん
2023/03/10(金) 23:34:37.12ID:/vLExm3P 好きにしたらええ
それより前スレ埋めない?
それより前スレ埋めない?
149デフォルトの名無しさん
2023/03/10(金) 23:46:20.34ID:Ug/D0/8N >>145
「代替メモリレイアウト」という概念は聞いたことがないが悪魔の証明は無理なのでそういう概念がある可能性を完全に否定することはできない
非公式の日本語翻訳で使われてる用語みたいだけどこのスレで質問する際は公式のドキュメント(英語)を参照するようにしてね
「代替メモリレイアウト」という概念は聞いたことがないが悪魔の証明は無理なのでそういう概念がある可能性を完全に否定することはできない
非公式の日本語翻訳で使われてる用語みたいだけどこのスレで質問する際は公式のドキュメント(英語)を参照するようにしてね
150デフォルトの名無しさん
2023/03/10(金) 23:54:51.68ID:0dyEfhS9 if letを使うかlet elseを使うかはケースバイケースでどちらもありうるのだから揉めるようなことではないと思うんだよな
let elseは要らないから削除せよ!と言ってた人はここを荒らすためだけに言ってただけだと思うし
let elseは要らないから削除せよ!と言ってた人はここを荒らすためだけに言ってただけだと思うし
151デフォルトの名無しさん
2023/03/11(土) 00:35:13.78ID:fYMzQaF5 >>150
ケースバイケースだからこそ具体的な特定のケースを例にどちらがいいかを話してるんだろ
ケースバイケースだからこそ具体的な特定のケースを例にどちらがいいかを話してるんだろ
152デフォルトの名無しさん
2023/03/11(土) 00:54:45.06ID:48Pa/Qcy Rust標準ライブラリのソースを見るとよくわかるよ
let else構文はもちろん使われまくっている
可読性が良くなるからね
let else構文はもちろん使われまくっている
可読性が良くなるからね
153デフォルトの名無しさん
2023/03/11(土) 06:31:08.87ID:nd+w7sZp インストールでつまずいたのでチラ裏させてくれ
サンプルプログラムをコンパイルしたら`link.exe` not foundでコンパイルできなかった。
原因は、Build Tools for Visual Studio 2022をインストールしてしまったこと、アンインストールして
Build Tools for Visual Studio 2019をインストールしてコンパイルできた。
サンプルプログラムをコンパイルしたら`link.exe` not foundでコンパイルできなかった。
原因は、Build Tools for Visual Studio 2022をインストールしてしまったこと、アンインストールして
Build Tools for Visual Studio 2019をインストールしてコンパイルできた。
154デフォルトの名無しさん
2023/03/11(土) 11:07:27.22ID:ShQc/Olf 相も変わらず1人だけズレてるな
155デフォルトの名無しさん
2023/03/11(土) 11:07:29.53ID:phgAMXMr156デフォルトの名無しさん
2023/03/11(土) 12:18:40.44ID:JdznY9pT let-elseはパターンに合致しないと処理を継続できない場合に早期離脱(return、break、etc.)するための構文でしょ
それ以外でも使えるだろうけど逆に可読性が落ちそう
従来の言語で
if (nullable_obj == null) { continue; } // この行を書き忘れるとえらいことになる
nullable_obj.do_something();
...
みたいに書ける処理を今までのRustだと
if let Some(obj) = nullable_obj {
obj.do_something();
...
} else { // ループの末尾ならここは不要
continue;
}
か無理やりunwrapして
if nullable_obj.is_none() { continue; } // この行を書き忘れるとえらいことになる
let obj = nullable_obj.unwrap();
obj.do_something();
...
みたいに書くしかなかったけど、let-elseを使うと従来の言語に近い形で書けるようになる
let Some(obj) = nullable_obj else { continue; }; // この行を書き忘れることはできない
obj.do_something();
...
returnだと?演算子で十分な場合もあるだろうから敢えてcontinueにした
それ以外でも使えるだろうけど逆に可読性が落ちそう
従来の言語で
if (nullable_obj == null) { continue; } // この行を書き忘れるとえらいことになる
nullable_obj.do_something();
...
みたいに書ける処理を今までのRustだと
if let Some(obj) = nullable_obj {
obj.do_something();
...
} else { // ループの末尾ならここは不要
continue;
}
か無理やりunwrapして
if nullable_obj.is_none() { continue; } // この行を書き忘れるとえらいことになる
let obj = nullable_obj.unwrap();
obj.do_something();
...
みたいに書くしかなかったけど、let-elseを使うと従来の言語に近い形で書けるようになる
let Some(obj) = nullable_obj else { continue; }; // この行を書き忘れることはできない
obj.do_something();
...
returnだと?演算子で十分な場合もあるだろうから敢えてcontinueにした
157デフォルトの名無しさん
2023/03/11(土) 12:36:22.58ID:GtLfWJGz let elseはcontinueでもbreakでもreturnでもpanicでも!なら何でも使えるし使われている
returnの時にErr返しなら?を使ってもよいが
.ok_or_else(|| Error)?; とするか
elseでreturnするか
どちらが見やすいかは意見が別れそうだ
returnの時にErr返しなら?を使ってもよいが
.ok_or_else(|| Error)?; とするか
elseでreturnするか
どちらが見やすいかは意見が別れそうだ
158デフォルトの名無しさん
2023/03/11(土) 12:39:50.82ID:WrUJ3YdB Rustに限った話ではないがリファクタリングの良し悪しを判断するためには該当箇所を含む関数の全容(特に関数シグニチャ)とその関数を呼び出すコード例が最低限必要
関数シグニチャも呼び出すコードもない例では話にならない
呼び出し側が絶対変更できない前提なら前者だけでもいい場合があるが往々にして部分最適になりがち
>>130の例でも呼び出す側を考慮するとまた違った選択肢が見えてくる
関数シグニチャも呼び出すコードもない例では話にならない
呼び出し側が絶対変更できない前提なら前者だけでもいい場合があるが往々にして部分最適になりがち
>>130の例でも呼び出す側を考慮するとまた違った選択肢が見えてくる
159デフォルトの名無しさん
2023/03/11(土) 12:48:32.01ID:Us0DtIzW コーディング規約で早期リターンが推奨される開発現場であれば
その規約に準拠した表現が書きやすくなったのは良いこと
つうかそのつもりで読んでたから後者のほうが読みやすかったわ
その規約に準拠した表現が書きやすくなったのは良いこと
つうかそのつもりで読んでたから後者のほうが読みやすかったわ
160デフォルトの名無しさん
2023/03/11(土) 13:41:29.57ID:+LV0PjS3161デフォルトの名無しさん
2023/03/11(土) 14:09:20.55ID:zozTFx1B 隔離スレでやれ
162デフォルトの名無しさん
2023/03/11(土) 20:53:29.08ID:YsMYadXT https://qiita.com/namn1125/items/ccedf9cc06b8cef71557#let-else文のユースケース
この人が書いてるように?演算子のイディオムを踏襲してればlet-elseの出番は多くはない
逆に本来使うべきでないところでも乱用されやすいから注意が必要
この人が書いてるように?演算子のイディオムを踏襲してればlet-elseの出番は多くはない
逆に本来使うべきでないところでも乱用されやすいから注意が必要
163デフォルトの名無しさん
2023/03/11(土) 23:05:55.56ID:ChsfUoNW >>159
多くのところで言語に関わらずでifネストを深くせずに早期離脱をすることが好まれる
Rustではif let時にそれができなかったためlet else導入まではこうなってしまっていた
let foo = if let Some(foo) {
foo
} else {
(早期離脱前の処理があればここ)
早期離脱
}
これはfooが三重に冗長で不格好
そのためlet else以前は早期離脱をあきらめる本末転倒なことも起きていた
具体的にlet elseが適している早期離脱は「範囲」が広い
・break
・continue
・エラー以外のreturn
・早期離脱前の処理があるエラーreturn
>>162
?が使える「範囲」はlet else より狭く早期離脱前の処理がないエラーreturnのみ
もちろん「量」は多いけどね
多くのところで言語に関わらずでifネストを深くせずに早期離脱をすることが好まれる
Rustではif let時にそれができなかったためlet else導入まではこうなってしまっていた
let foo = if let Some(foo) {
foo
} else {
(早期離脱前の処理があればここ)
早期離脱
}
これはfooが三重に冗長で不格好
そのためlet else以前は早期離脱をあきらめる本末転倒なことも起きていた
具体的にlet elseが適している早期離脱は「範囲」が広い
・break
・continue
・エラー以外のreturn
・早期離脱前の処理があるエラーreturn
>>162
?が使える「範囲」はlet else より狭く早期離脱前の処理がないエラーreturnのみ
もちろん「量」は多いけどね
164デフォルトの名無しさん
2023/03/12(日) 11:57:58.73ID:HouQiurI カルパッチョ
165デフォルトの名無しさん
2023/03/12(日) 12:41:14.42ID:UHnNkdpy 初見
VS code使い始めたんだが、カーソル移動系のショートカットキーの編集ってできないのか?
さくらEditorみたいにカーソル移動・ドラッグ編集を全部キーボードでやりたいんだが
VS code使い始めたんだが、カーソル移動系のショートカットキーの編集ってできないのか?
さくらEditorみたいにカーソル移動・ドラッグ編集を全部キーボードでやりたいんだが
166デフォルトの名無しさん
2023/03/12(日) 12:42:40.81ID:C0R72d/J なぜここできく
167デフォルトの名無しさん
2023/03/12(日) 14:07:53.88ID:BVlbavKU File > Preferences > Keyboard Shortcutsで設定画面開いて
cursorでフィルターかければcursorLeftみたいなコマンド出てくるから大体は変更できると思う
知らんけど
cursorでフィルターかければcursorLeftみたいなコマンド出てくるから大体は変更できると思う
知らんけど
168デフォルトの名無しさん
2023/03/12(日) 14:14:14.53ID:C6Uwumzj vimでもemacsでもrust-analyzer動くよ
169デフォルトの名無しさん
2023/03/12(日) 15:10:27.15ID:UHnNkdpy >>166
プログラム板で一番勢いあるのここだから
プログラム板で一番勢いあるのここだから
170デフォルトの名無しさん
2023/03/12(日) 16:06:30.84ID:nONlRGBh 大学生が書いたQiita記事のほうがこのスレの住民より要点おさえてるじゃんw
おまえらも見習えよ
おまえらも見習えよ
171デフォルトの名無しさん
2023/03/13(月) 11:54:44.62ID:38Ewlrdq Qiitaは秀才だらけだし
5chム板は文字通り住民がrustだし
5chム板は文字通り住民がrustだし
172デフォルトの名無しさん
2023/03/16(木) 07:24:49.76ID:M0AuqK/y173デフォルトの名無しさん
2023/03/16(木) 10:05:31.80ID:3ZknUEKY174デフォルトの名無しさん
2023/03/16(木) 10:12:16.89ID:xtobTOZe 具体的に何が問題なの?
175デフォルトの名無しさん
2023/03/16(木) 18:23:03.08ID:O0F78LdH176デフォルトの名無しさん
2023/03/16(木) 18:54:09.77ID:sXsK9Uns オジおじ言ってたら自演
スレ荒らしが目的
スレ荒らしが目的
177デフォルトの名無しさん
2023/03/17(金) 18:16:56.57ID:XLm6gsUd こういうコードを書くとエラーになります。
Bar を実装しているのは &T であって T ではないからだというのはわかるのですが、
どういう形で書けばいいのかわかりません。
T そのものではなく &T が Bar を実装しているという制約はどう表現すればよいのでしょうか?
trait Bar {
fn func(&self) {}
}
fn baz<T>(x: &T)
where
T: Bar, // どう書けばいいの?
{
let a = x.func();
}
struct Foo {}
impl Bar for &Foo {}
fn main() {
baz(&Foo {});
}
Bar を実装しているのは &T であって T ではないからだというのはわかるのですが、
どういう形で書けばいいのかわかりません。
T そのものではなく &T が Bar を実装しているという制約はどう表現すればよいのでしょうか?
trait Bar {
fn func(&self) {}
}
fn baz<T>(x: &T)
where
T: Bar, // どう書けばいいの?
{
let a = x.func();
}
struct Foo {}
impl Bar for &Foo {}
fn main() {
baz(&Foo {});
}
178デフォルトの名無しさん
2023/03/17(金) 19:14:05.96ID:NC4w42Nt179デフォルトの名無しさん
2023/03/17(金) 19:33:27.88ID:7IpB+MOB180デフォルトの名無しさん
2023/03/17(金) 19:35:54.06ID:NC4w42Nt どうしてもimpl Bar for &Foo {}で行きたいなら
こうするしかない
trait Bar: Sized {
fn func(self) {}
}
fn baz<T>(x: T) where T: Bar,
こうするしかない
trait Bar: Sized {
fn func(self) {}
}
fn baz<T>(x: T) where T: Bar,
181デフォルトの名無しさん
2023/03/17(金) 19:56:30.88ID:TZnQdWAf いやできるが……
fn baz<'a, T>(x: &'a T) where &'a T: Bar
fn baz<'a, T>(x: &'a T) where &'a T: Bar
182デフォルトの名無しさん
2023/03/17(金) 19:59:29.44ID:XLm6gsUd なるほど、寿命を省略できないのですね。
ありがとうございます。
ありがとうございます。
183デフォルトの名無しさん
2023/03/17(金) 20:06:51.73ID:kImSYq8C184デフォルトの名無しさん
2023/03/17(金) 20:28:03.09ID:VjFaSUfW 寿命!
185デフォルトの名無しさん
2023/03/17(金) 21:08:25.10ID:XLm6gsUd186デフォルトの名無しさん
2023/03/18(土) 11:19:09.17ID:KAD/gYE9187デフォルトの名無しさん
2023/03/18(土) 11:40:54.04ID:yS+7OZFn188デフォルトの名無しさん
2023/03/18(土) 11:42:47.58ID:l9YNpI31 lifetime 周りは書いてあるだろ
189デフォルトの名無しさん
2023/03/18(土) 11:53:17.34ID:VtoeVuok190デフォルトの名無しさん
2023/03/18(土) 11:57:09.36ID:kHUlERx3 >>185
ライフタイムは全てにあるが省略できることが多い
省略できないときはコンパイラがエラーとし教えてくれるのでライフタイムを付ければいい
>>186
日本語版もある
https://doc.rust-jp.rs/book-ja/
ライフタイムは全てにあるが省略できることが多い
省略できないときはコンパイラがエラーとし教えてくれるのでライフタイムを付ければいい
>>186
日本語版もある
https://doc.rust-jp.rs/book-ja/
191デフォルトの名無しさん
2023/03/18(土) 14:05:24.60ID:PyzwqGcC192デフォルトの名無しさん
2023/03/18(土) 16:08:20.29ID:QSo2KHpO 「非公式な日本語訳」を「日本語版」と呼称するのはそれがあたかも公式かのように錯覚させる意図が見えるので優良誤認の疑いがある
193デフォルトの名無しさん
2023/03/18(土) 16:13:56.89ID:6WtXixvi194デフォルトの名無しさん
2023/03/18(土) 17:11:12.32ID:NQWJ1KgL 日本語訳の話題は生産的じゃないのでやめよう
このスレのローカルルールは>>37の通り
このスレのローカルルールは>>37の通り
195177
2023/03/18(土) 18:27:39.58ID:XgD5JQEe 読んだのは日本語訳のほうの The book ですが、個々の機能はたぶん分かってると思います。
ライフタイムを省略した場合には一定のルールで補われることも知ってました。
ただ、型が満たすべき性質を書くのが where 句なので (エラーメッセージを見てすら!) ライフタイムが必要ということがぴんと来なかったというのと、
引数と同じ記法でライフタイムをここに書けるのだということがわからなかったんです。
ライフタイムを省略した場合には一定のルールで補われることも知ってました。
ただ、型が満たすべき性質を書くのが where 句なので (エラーメッセージを見てすら!) ライフタイムが必要ということがぴんと来なかったというのと、
引数と同じ記法でライフタイムをここに書けるのだということがわからなかったんです。
196デフォルトの名無しさん
2023/03/18(土) 18:38:31.92ID:l9YNpI31 > 引数と同じ記法でライフタイムをここに書けるのだということがわからなかったんです。
英語版でも日本語版でもどっちでもいいけど 10.3 にちゃんと書いてあるよ
英語版でも日本語版でもどっちでもいいけど 10.3 にちゃんと書いてあるよ
197デフォルトの名無しさん
2023/03/18(土) 19:09:39.09ID:YhY+O2tk whereの:の左辺に参照とか書けるのをまず知らなかったんでしょ
the Bookにそんな例無いし
the Bookにそんな例無いし
198デフォルトの名無しさん
2023/03/18(土) 19:27:58.81ID:sUMBdqo8 日本語版を読まなければこんなことにはならなかった
日本語版を許すな
日本語版を許すな
199デフォルトの名無しさん
2023/03/19(日) 04:14:30.76ID:JYAaHQUF >>183
ラストコンパイラって響きカッコいいな
ラストコンパイラって響きカッコいいな
200デフォルトの名無しさん
2023/03/19(日) 13:06:57.80ID:j6t6IVCD201デフォルトの名無しさん
2023/03/19(日) 13:09:44.94ID:E3Ip09fl そりゃ「個々の機能はたぶん分かってると思います」とか言われたら分かってねーじゃんって言いたくなるだろ
202デフォルトの名無しさん
2023/03/19(日) 13:23:44.49ID:6gmOWdI+ >>196
where 句の制約で書いてる事例はないよ。
where 句の制約で書いてる事例はないよ。
203デフォルトの名無しさん
2023/03/19(日) 14:19:01.09ID:8hEI7b0p204デフォルトの名無しさん
2023/03/19(日) 14:25:09.74ID:RMEG+oCh205デフォルトの名無しさん
2023/03/19(日) 20:29:29.27ID:Pq7wYRkP >>203
順調に日本Rustは錆びているようですね。いや、めでたい。
順調に日本Rustは錆びているようですね。いや、めでたい。
206デフォルトの名無しさん
2023/03/19(日) 20:49:16.05ID:UVlxeYfB207デフォルトの名無しさん
2023/03/19(日) 21:36:02.67ID:XN9u9qop Rustはベンチマーク速いから気になってるんだけど
iPhoneやAndroidの開発で将来的に使えるようになる話はないの?
iPhoneやAndroidの開発で将来的に使えるようになる話はないの?
208デフォルトの名無しさん
2023/03/19(日) 21:40:34.06ID:C8hzWYTf ゴミだな
209デフォルトの名無しさん
2023/03/19(日) 21:41:36.36ID:/nL/Z/hW >>207
普通に使えるやろ
普通に使えるやろ
210デフォルトの名無しさん
2023/03/19(日) 21:48:03.22ID:1LqNQBrB211デフォルトの名無しさん
2023/03/19(日) 22:05:41.03ID:pmaEpt3C212デフォルトの名無しさん
2023/03/19(日) 22:08:47.66ID:pmaEpt3C 5chでの偏差値ね
Stackoverflowだと47くらい
Stackoverflowだと47くらい
213デフォルトの名無しさん
2023/03/19(日) 22:25:46.74ID:6gmOWdI+ >>207
ネイティブコンポーネントには Rust は使える。
Android の根本設計が Linux+JVM で、 JVM は変に高級な設計だからその高級な機能に噛み合うように設計された言語じゃないとうまくいかない。
LLVM バックエンドで JVM バイトコードを生成するものもあるらしいから無理すりゃ Rust でもなんとかなるかもしれないけど……
それよりも現在の情勢を見ると Android に WASM サブシステムが入るとかのほうがあり得そうな気がするよ。
ネイティブコンポーネントには Rust は使える。
Android の根本設計が Linux+JVM で、 JVM は変に高級な設計だからその高級な機能に噛み合うように設計された言語じゃないとうまくいかない。
LLVM バックエンドで JVM バイトコードを生成するものもあるらしいから無理すりゃ Rust でもなんとかなるかもしれないけど……
それよりも現在の情勢を見ると Android に WASM サブシステムが入るとかのほうがあり得そうな気がするよ。
214デフォルトの名無しさん
2023/03/20(月) 00:55:07.77ID:rG0fuScP 自然言語自体に落ち度があると思った方がプログラミング言語の価値が分かりやすい
翻訳にも質問にもChatGPTにも過度の期待をしなくてすむ
翻訳にも質問にもChatGPTにも過度の期待をしなくてすむ
215デフォルトの名無しさん
2023/03/20(月) 01:31:12.77ID:OPxEUMsA 言語の問題と言語を扱うやつの問題を同一視するアホ
216デフォルトの名無しさん
2023/03/20(月) 01:42:28.65ID:+AEvN8jR 正常動作する正規品を期待してたのに
不具合だらけで役に立たないジャンク品でした
不具合だらけで役に立たないジャンク品でした
217デフォルトの名無しさん
2023/03/20(月) 02:15:13.67ID:rG0fuScP はした金ではジャンク品しか買えない
インフレか
物価の問題と品質の問題のような二つの問題を無関係と考えるのがアホだったんじゃないか?
インフレか
物価の問題と品質の問題のような二つの問題を無関係と考えるのがアホだったんじゃないか?
218デフォルトの名無しさん
2023/03/20(月) 03:09:08.81ID:KC0EWXje prettierの代替のdprintがRust製だった
普及してるものがRust製に置き換わるってが今後も続くだろうね
普及してるものがRust製に置き換わるってが今後も続くだろうね
219デフォルトの名無しさん
2023/03/20(月) 03:46:46.02ID:8+GC48xI >>217
ところが実際はジャンク品のほうが正規品より高いんだなこれが
正規品に見せかけて売ってるからいわゆるジャンク扱いではなく蓋を開けたらゴミでしたという落ち
でもありがたいことに今は購入前に中身を確認可能なのでよほどの情弱じゃなければ騙されないんだけどね
ところが実際はジャンク品のほうが正規品より高いんだなこれが
正規品に見せかけて売ってるからいわゆるジャンク扱いではなく蓋を開けたらゴミでしたという落ち
でもありがたいことに今は購入前に中身を確認可能なのでよほどの情弱じゃなければ騙されないんだけどね
220デフォルトの名無しさん
2023/03/20(月) 10:04:17.69ID:UnL767mB221デフォルトの名無しさん
2023/03/20(月) 10:58:26.51ID:uuArbTr3 このあたりを読んでおけば大丈夫
Advanced Lifetimes
https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-02-advanced-lifetimes.html
Advanced Lifetimes
https://doc.rust-lang.org/1.30.0/book/second-edition/ch19-02-advanced-lifetimes.html
222デフォルトの名無しさん
2023/03/20(月) 11:08:21.33ID:XflJK2ct >JVM は変に高級な設計だからその高級な機能に噛み合うように設計された言語じゃないとうまくいかない。
相変わらずいい加減なこと書いてるなぁ
相変わらずいい加減なこと書いてるなぁ
223デフォルトの名無しさん
2023/03/20(月) 11:41:00.74ID:rG0fuScP アプリもコンパイラも動くLinuxが正規品
コンパイラは不要とされアプリしか動かないLinuxがジャンク
コンパイラは不要とされアプリしか動かないLinuxがジャンク
224デフォルトの名無しさん
2023/03/20(月) 11:59:59.11ID:IoVEULD8 >>223
GNUにケンカ売る気かよ
GNUにケンカ売る気かよ
225デフォルトの名無しさん
2023/03/20(月) 14:23:43.87ID:YI144KAX Iterator<Item = Option>の時
filter(|o| o.is_some()).map(|o| o.unwrap()).map(|x| f(x))を
iflet(|Some(x)| f(x))みたいに1つにまとめてくれるメソッドある?
filter(|o| o.is_some()).map(|o| o.unwrap()).map(|x| f(x))を
iflet(|Some(x)| f(x))みたいに1つにまとめてくれるメソッドある?
226デフォルトの名無しさん
2023/03/20(月) 17:14:18.78ID:dpT4FG92 flattenとかflat_mapとかfilter_mapとか
227デフォルトの名無しさん
2023/03/20(月) 19:58:13.92ID:EBVsuSrE flat_mapはmap(f).flatten()の順だから無理だな
filter_mapはOption外しに使えるがmap(f)は別途必要
filter_map(|opt| opt).map(f) または参照なら
filter_map(Option::as_ref).map(f)
したがって正解はこれ
flatten().map(f)
filter_mapはOption外しに使えるがmap(f)は別途必要
filter_map(|opt| opt).map(f) または参照なら
filter_map(Option::as_ref).map(f)
したがって正解はこれ
flatten().map(f)
228デフォルトの名無しさん
2023/03/20(月) 20:22:03.14ID:9WmeSXDj flattenのOption/Resultはずし知らんかった
229デフォルトの名無しさん
2023/03/20(月) 20:32:22.28ID:45aFG7he230デフォルトの名無しさん
2023/03/20(月) 20:46:14.12ID:YI144KAX flattenを使ってできました
let v = vec![None, Some((1, 2)), None, Some((3, 4)), None];
assert_eq!(14, v.iter().flatten().map(|(a, b)| a * b).sum());
>>229
filter_mapを使うと簡単ならば知りたいです
let v = vec![None, Some((1, 2)), None, Some((3, 4)), None];
assert_eq!(14, v.iter().flatten().map(|(a, b)| a * b).sum());
>>229
filter_mapを使うと簡単ならば知りたいです
231デフォルトの名無しさん
2023/03/20(月) 21:35:03.62ID:adpwtvX/ 複オジかよっw
232デフォルトの名無しさん
2023/03/20(月) 21:41:30.44ID:EBVsuSrE 前述したようにfilter_map自体のmapではOption外ししかできないので別途map(f)が必要になる
filter_map(|opt| opt).map(f)
あるいは
filter_map(|opt| opt.map(f))
簡単なのはflatten().map(f)
filter_map(|opt| opt).map(f)
あるいは
filter_map(|opt| opt.map(f))
簡単なのはflatten().map(f)
233デフォルトの名無しさん
2023/03/20(月) 23:15:03.64ID:dBJpnlWY flat_mapはfilter_mapを汎用化したものなので
filter_mapは常にflat_mapで書き直せる
flattenと理屈は同じ
filter_mapは常にflat_mapで書き直せる
flattenと理屈は同じ
234デフォルトの名無しさん
2023/03/20(月) 23:20:21.79ID:I3aedYRP 唐突に妙に具体的な質問が飛んできたらあの人だと思ってればいい
235デフォルトの名無しさん
2023/03/20(月) 23:20:56.30ID:c1bWUyRU どの人だよ
236デフォルトの名無しさん
2023/03/20(月) 23:49:46.77ID:K17OWm6q237デフォルトの名無しさん
2023/03/21(火) 00:12:49.49ID:lhwbZ9up238デフォルトの名無しさん
2023/03/21(火) 10:42:06.27ID:El4m1VCp Someだけ拾って関数をmapすると考えれば
filter_map(|opt| opt.map(f))
だな
元のSome/Noneをそのまま利用するのがトリッキーかもしれないけど
filter_map(|opt| opt.map(f))
だな
元のSome/Noneをそのまま利用するのがトリッキーかもしれないけど
239デフォルトの名無しさん
2023/03/21(火) 11:33:54.48ID:aqrydfrP ところで、ラムダには自由変数というものがありその反対が束縛変数だが
ラムダや自由変数を意識する必要がない文脈で束縛という用語が出ると
その語源を説明する手間がかかるよな
ラムダや自由変数を意識する必要がない文脈で束縛という用語が出ると
その語源を説明する手間がかかるよな
240デフォルトの名無しさん
2023/03/21(火) 13:02:51.29ID:3dx+Qi3k scalaやっているせいかmatchとか
すごく使いやすいわん
iterator nextなんてJavaでも使わんけど
これ使い人いるの?
すごく使いやすいわん
iterator nextなんてJavaでも使わんけど
これ使い人いるの?
241デフォルトの名無しさん
2023/03/21(火) 13:17:10.53ID:lhwbZ9up242デフォルトの名無しさん
2023/03/21(火) 13:27:49.15ID:gPDO4YWu243デフォルトの名無しさん
2023/03/21(火) 13:35:41.08ID:lhwbZ9up244デフォルトの名無しさん
2023/03/21(火) 14:20:03.57ID:El4m1VCp 元の入力で「値の有無」を表してたOptionをfilter_mapの「要素の残存判定」に転用する形だから
Optionの意味が微妙に変わってて引っ掛かる人もいるかなって思った
Optionの意味が微妙に変わってて引っ掛かる人もいるかなって思った
245デフォルトの名無しさん
2023/03/21(火) 14:35:08.73ID:4Vr7UtW/ 昔の言語だと配列に初期値として使っていないことを示すために-1とか0とかnullとかundefinedを入れてしまうことが多かったパターンか
いわゆるデータのnull安全性がなかったことろをRustはOptionのNoneとSome利用でnull安全性が保証
データが0にならならNonZeroを使えばNone時に0が使われて余分なメモリ消費もないしな
いわゆるデータのnull安全性がなかったことろをRustはOptionのNoneとSome利用でnull安全性が保証
データが0にならならNonZeroを使えばNone時に0が使われて余分なメモリ消費もないしな
246デフォルトの名無しさん
2023/03/21(火) 14:39:43.43ID:xxXQcN5m247デフォルトの名無しさん
2023/03/21(火) 14:40:28.73ID:4Vr7UtW/ >>238
そこを出発点として考える場合でも
filter_map(|opt| opt.map(f))
↓ Optionのままmapしても剥がしてからmapしても同じ
filter_map(|opt| opt).map(f)
↓ Optionに対して恒等関数になってるのでflattenと同じ
flatten().map(f)
と辿り着く
そこを出発点として考える場合でも
filter_map(|opt| opt.map(f))
↓ Optionのままmapしても剥がしてからmapしても同じ
filter_map(|opt| opt).map(f)
↓ Optionに対して恒等関数になってるのでflattenと同じ
flatten().map(f)
と辿り着く
248デフォルトの名無しさん
2023/03/21(火) 17:23:17.80ID:El4m1VCp249デフォルトの名無しさん
2023/03/21(火) 18:14:49.79ID:lhwbZ9up250デフォルトの名無しさん
2023/03/21(火) 19:05:07.54ID:Kxmr6Met251デフォルトの名無しさん
2023/03/21(火) 19:18:56.96ID:8T+PSGNQ >>250
インデックス値で管理できるものま無駄なコストがかかるハッシュマップでを用いる気軽な連想配列な考えこそコスト無視のスクリプト言語な考えだよ
インデックス値で管理できるものはRustでは配列かVecを使う
インデックス値で管理できるものま無駄なコストがかかるハッシュマップでを用いる気軽な連想配列な考えこそコスト無視のスクリプト言語な考えだよ
インデックス値で管理できるものはRustでは配列かVecを使う
252デフォルトの名無しさん
2023/03/21(火) 21:39:30.39ID:Hb26aB9L HashMap<K, V>はhash計算コストに加えてkey比較コストがhash衝突回数の分かかるからなー
indexになれる値があって上限が許容されるならVecが有利
indexになれる値があって上限が許容されるならVecが有利
253デフォルトの名無しさん
2023/03/21(火) 23:56:44.92ID:UIyRFaA6 >>250が経験不足と知識不足で知らなかったんでしょ
254デフォルトの名無しさん
2023/03/22(水) 13:00:26.42ID:KFnwa6CM >>251
おいおいなんで急にハッシュマップが出てくるんだよ
そんなんで大丈夫か?
Vec<Option<V>>みたいなデータがどこからともなく自然発生するわけないんだから全体のパイプラインを考えろって言ってるの
現実的かつ具体的なユースケースで考えような
おいおいなんで急にハッシュマップが出てくるんだよ
そんなんで大丈夫か?
Vec<Option<V>>みたいなデータがどこからともなく自然発生するわけないんだから全体のパイプラインを考えろって言ってるの
現実的かつ具体的なユースケースで考えような
255デフォルトの名無しさん
2023/03/22(水) 18:31:25.27ID:KdbjtxZL ナイーブなハッシュテーブルをVec<Option<T>>で実装する人はいるかもしれない
256デフォルトの名無しさん
2023/03/22(水) 21:00:04.56ID:ax9KtLpr うちも値域が限定されてる離散値はArrayかVec<Option<T>>使う
257デフォルトの名無しさん
2023/03/22(水) 21:30:41.78ID:Bu7rNmu4 マニュアルに書いてるような内容をやたら饒舌に語るとChatGPT感出るね
258デフォルトの名無しさん
2023/03/22(水) 21:32:36.00ID:VRM+VuH6259デフォルトの名無しさん
2023/03/22(水) 21:36:57.10ID:fGWMZjSN Vec<Optionは普通に使うぞ
今書いてる部分と似たようなことをしてるregexのソースを見たらVec<Option使ってる
普通そうなるよな
今書いてる部分と似たようなことをしてるregexのソースを見たらVec<Option使ってる
普通そうなるよな
260デフォルトの名無しさん
2023/03/22(水) 22:15:33.42ID:ngpWOwSU261デフォルトの名無しさん
2023/03/22(水) 23:19:58.21ID:M/QYX+I6 Vec<Option<T>>が使われないなんていう話は誰もしてないのにね
話が通じなくてもう面倒くさ過ぎるわ
話が通じなくてもう面倒くさ過ぎるわ
262デフォルトの名無しさん
2023/03/22(水) 23:35:18.64ID:3T9wSwPZ たぶん論点はfilter_mapの話からここ
> vec![None, Some((1, 2)), None, Some((3, 4)), None];みたいなのはこれがすでに入力値に対して何かしら関数適用した結果なんだよね
> Vec<Option<V>>みたいなデータがどこからともなく自然発生するわけないんだから全体のパイプラインを考えろって言ってるの
でもこの主張は間違っていて
疎なデータ構造ならいきなりVec<Option<T>>が現れる
初期値オールNoneから飛び飛びにSome化していく
そのVec<Option<T>>は何度も使うからのイテレータ処理の一時的に現れるものでもない
> vec![None, Some((1, 2)), None, Some((3, 4)), None];みたいなのはこれがすでに入力値に対して何かしら関数適用した結果なんだよね
> Vec<Option<V>>みたいなデータがどこからともなく自然発生するわけないんだから全体のパイプラインを考えろって言ってるの
でもこの主張は間違っていて
疎なデータ構造ならいきなりVec<Option<T>>が現れる
初期値オールNoneから飛び飛びにSome化していく
そのVec<Option<T>>は何度も使うからのイテレータ処理の一時的に現れるものでもない
263デフォルトの名無しさん
2023/03/23(木) 00:27:50.25ID:WQSgJ4cO 構うから暴れるんすよ
264デフォルトの名無しさん
2023/03/23(木) 07:45:41.23ID:ZvBDBUI1 グラフ構造でVec<Option<usize>>使うこともある
さらにインデックス自体のマッピングにも使われたり
// Maps old index to new index. None if not yet visited.
let mut remap: Vec<Option<usize>> = vec![None; self.nodes.len()];
さらにインデックス自体のマッピングにも使われたり
// Maps old index to new index. None if not yet visited.
let mut remap: Vec<Option<usize>> = vec![None; self.nodes.len()];
265デフォルトの名無しさん
2023/03/23(木) 08:16:41.69ID:uJzov1zR 公式ドキュメントとchatgpt
これだけあれば全て滅びる
これだけあれば全て滅びる
266デフォルトの名無しさん
2023/03/25(土) 10:51:05.32ID:F0OLKMhM 人間があれやこれやするよりも
全部 AI 翻訳に任せりゃインジャネーノ
全部 AI 翻訳に任せりゃインジャネーノ
267デフォルトの名無しさん
2023/03/27(月) 10:33:42.84ID:IqXvBms8 >>263
本当にそうだったね
本当にそうだったね
268デフォルトの名無しさん
2023/03/27(月) 13:18:10.65ID:hjxGI+jP そのうち
課題を見つける能力
課題を提起する能力
がメインとなるんやろな
1人会社が当たり前になりそう
課題を見つける能力
課題を提起する能力
がメインとなるんやろな
1人会社が当たり前になりそう
269デフォルトの名無しさん
2023/03/27(月) 17:47:50.73ID:ppqykIl7 >>268
今までもそうだったけど気づいてない人が多かったというだけ
解けることが事前にわかってる問題を与えられて解くだけの人は今までも価格競争にさらされ段階的に置き換えられてきた
機械学習による変化は機械に解かせることのできる問題の抽象度が上がったこと
今までもそうだったけど気づいてない人が多かったというだけ
解けることが事前にわかってる問題を与えられて解くだけの人は今までも価格競争にさらされ段階的に置き換えられてきた
機械学習による変化は機械に解かせることのできる問題の抽象度が上がったこと
270デフォルトの名無しさん
2023/03/30(木) 21:28:14.05ID:O05INV+E samタレットを壊されないかつ迎撃もできる状態で設置する方法ってない?
拠点屋根に四台設置してんだけどログインする度に毎回壊されてるわ
拠点屋根に四台設置してんだけどログインする度に毎回壊されてるわ
271デフォルトの名無しさん
2023/03/30(木) 21:34:58.46ID:O05INV+E ごめんスレ間違えた
272デフォルトの名無しさん
2023/03/31(金) 12:09:07.07ID:lEKZGT8D それはrustだろ?ここはrustスレ。間違えるなよ
273デフォルトの名無しさん
2023/04/01(土) 04:03:16.63ID:ncnK4efa Interface 2023年5月号
550号特別企画 2大特集 Linuxでも正式サポート,組み込みや車載で注目を集める 質実剛健 Rust言語
3月25日発売 (定価 1,200円+税)
第1特集:C言語と比べて理解する
第2特集:マイコンで動くフル機能Rust
特別付録:初めてのRustプログラミング
新連載:毎号実験!自律移動ロボット
550号特別企画 2大特集 Linuxでも正式サポート,組み込みや車載で注目を集める 質実剛健 Rust言語
3月25日発売 (定価 1,200円+税)
第1特集:C言語と比べて理解する
第2特集:マイコンで動くフル機能Rust
特別付録:初めてのRustプログラミング
新連載:毎号実験!自律移動ロボット
274デフォルトの名無しさん
2023/04/01(土) 16:12:14.56ID:MxqBV1k0 >>273
面白そうだな。組み込みだと実装依存のCコードがまかり通っていたりするからな
面白そうだな。組み込みだと実装依存のCコードがまかり通っていたりするからな
275デフォルトの名無しさん
2023/04/02(日) 17:52:37.39ID:w9dFgeBH interface読んでる連中には難しいんじゃないの?
276デフォルトの名無しさん
2023/04/02(日) 18:01:44.10ID:Xkdfgrgv むしろこれを機に組み込みの勉強でも始めてみようかしら
277デフォルトの名無しさん
2023/04/02(日) 18:02:25.20ID:oh3DHZZg278デフォルトの名無しさん
2023/04/02(日) 19:09:06.81ID:w9dFgeBH 組み込みだったらmrubyだよね
しらんけど
しらんけど
279デフォルトの名無しさん
2023/04/03(月) 00:25:42.34ID:XRTgFvZO そのうちrust謹製の組み込み OS とか出てくるんじゃねえの
280デフォルトの名無しさん
2023/04/03(月) 00:53:16.98ID:OPvO6xnV >>279
Google が KataOS を発表してる。 今は CantripOS と改名してるっぽいな。
どこまで本気なのかよくわからんけどコードは Github に有るから見物してみたらいいんじゃない?
Google が KataOS を発表してる。 今は CantripOS と改名してるっぽいな。
どこまで本気なのかよくわからんけどコードは Github に有るから見物してみたらいいんじゃない?
281デフォルトの名無しさん
2023/04/03(月) 09:12:06.30ID:45NlJXFV 組み込み分野を目指す学生はPythonばっかり
これを機にRustやCやC++にも目を向けて欲しい
組み込み分野の実務でPythonはつぶしがきかない
これを機にRustやCやC++にも目を向けて欲しい
組み込み分野の実務でPythonはつぶしがきかない
282デフォルトの名無しさん
2023/04/03(月) 11:15:42.36ID:wQbZbh4b 組み込みでPythonとか使うのか
一番親和性の感じられない組み合わせやな
一番親和性の感じられない組み合わせやな
283デフォルトの名無しさん
2023/04/03(月) 11:32:22.07ID:AEelnK5w ラズパイでしょ
284デフォルトの名無しさん
2023/04/03(月) 11:39:22.47ID:DEHD7IX8 ラズパイは組み込みじゃないだろw
組み込み向けだと MicroPython とかあった気がするけど使われてるのかねぇ
組み込み向けだと MicroPython とかあった気がするけど使われてるのかねぇ
285デフォルトの名無しさん
2023/04/03(月) 11:55:49.94ID:weCnHsyM ラズパイはLinux系OSが動いていてX Windowを立ち上げてデスクトップPCにすることも可能な環境
昔からからの組み込みが指すのはOSがないもしくは簡易なものしかない環境でありそこでPythonは使われない
昔からからの組み込みが指すのはOSがないもしくは簡易なものしかない環境でありそこでPythonは使われない
286デフォルトの名無しさん
2023/04/03(月) 12:04:38.11ID:GLvgK6Zq 組み込みかどうかと言うより
ミッションクリティカルかどうかと言ったほうが正確か
ミッションクリティカルかどうかと言ったほうが正確か
287デフォルトの名無しさん
2023/04/03(月) 12:08:34.80ID:+ZHaYieR 同等以上に曖昧に思う。
288デフォルトの名無しさん
2023/04/03(月) 12:26:19.63ID:NFGj33Dp 組み込みならFORTHだよね。
289デフォルトの名無しさん
2023/04/03(月) 15:05:13.27ID:KUJKPBk4 ミッションクリティカルの意味わかってないだろw
290デフォルトの名無しさん
2023/04/03(月) 15:14:52.29ID:bhpxOZS2 javaですら使われるんだから場所によってはpythonもあるだろう
291デフォルトの名無しさん
2023/04/03(月) 16:24:30.55ID:0x65F9Io このスレ複製おじ来なくなって平和になったなw
292デフォルトの名無しさん
2023/04/03(月) 17:14:33.32ID:XRTgFvZO 10年後くらいには組み込みの指すやつが10GHz・20GBくらいになってんだよ
293デフォルトの名無しさん
2023/04/03(月) 22:15:51.09ID:OPvO6xnV Python だって組み込みに使われるのはわかるよ。
でもそれをホスティングする環境は何で書くんだって話よ。
アプリケーション部分だけ書ければ良しというわけにもいかんだろう。 組み込みってのは。
でもそれをホスティングする環境は何で書くんだって話よ。
アプリケーション部分だけ書ければ良しというわけにもいかんだろう。 組み込みってのは。
294デフォルトの名無しさん
2023/04/03(月) 22:22:41.19ID:6LaoLj6b 組み込みの定義次第
295デフォルトの名無しさん
2023/04/03(月) 22:46:10.84ID:uCVDtc7z 自分の中の組み込みはリアルタイムシステム
CかC++
CかC++
296デフォルトの名無しさん
2023/04/03(月) 23:08:31.70ID:NUuZ0KjY >>290
javaですらというか、javaはもともと組込みを視野に入れて開発されたものだしな
javaですらというか、javaはもともと組込みを視野に入れて開発されたものだしな
297デフォルトの名無しさん
2023/04/04(火) 12:59:01.65ID:9wA8JWJA 普通のWindowsPCを何かの筐体に入れればそれは組み込みだがそういう話じゃないよな
実装的には一般的なアプリと何も変わらないわけだし
実装的には一般的なアプリと何も変わらないわけだし
298デフォルトの名無しさん
2023/04/04(火) 19:20:19.03ID:WPLXkRn6 みんな、組み込みに食いつくね
連想するの分野がひとそれぞれなんだね
おいらは組み込みといったらファームウェアだな
連想するの分野がひとそれぞれなんだね
おいらは組み込みといったらファームウェアだな
299デフォルトの名無しさん
2023/04/04(火) 20:28:06.15ID:ktWoV7jH PICじゃなきゃ組み込みじゃないって感じなのかな?
数年前に関わった仕事じゃFPGAとARMが両方乗っかってて
OSも入ってるやつで測定データをCのソケットでUDP送信させたけどこれ組み込み?
数年前に関わった仕事じゃFPGAとARMが両方乗っかってて
OSも入ってるやつで測定データをCのソケットでUDP送信させたけどこれ組み込み?
300デフォルトの名無しさん
2023/04/04(火) 20:50:26.77ID:vWHz0hKB301デフォルトの名無しさん
2023/04/04(火) 21:47:02.28ID:LgI/21ca 技術的には低レイヤーと称する方が適しているのだろうな。せいぜい軽量のRTOSあたりまで
>>300
汎用性に乏しい装置は原則組み込みじゃね
ゲームコンソールもどちらかと言えば組み込みだと思うし
デジタルサイネージとかも該当するだろう(ラズパイ使っている例もあるらしい)
>>300
汎用性に乏しい装置は原則組み込みじゃね
ゲームコンソールもどちらかと言えば組み込みだと思うし
デジタルサイネージとかも該当するだろう(ラズパイ使っている例もあるらしい)
302デフォルトの名無しさん
2023/04/05(水) 02:16:43.52ID:SGxKhieo303デフォルトの名無しさん
2023/04/05(水) 11:08:42.58ID:vYYfy7R4304デフォルトの名無しさん
2023/04/06(木) 10:45:28.99ID:E/e3rQLj305デフォルトの名無しさん
2023/04/06(木) 11:27:07.02ID:k0Faa7D2 普通組み込み用途と言えばコンピュータ制御の電子機器のために使う用途やろな
・メモリなどのリソースが少ない環境でも使える
・応答時間などのタイミング制御のために実時間処理ができる
こういうのにRustが強いのは何となくわかる
コンパイル時に静的に解決できる範囲が広いからな
・メモリなどのリソースが少ない環境でも使える
・応答時間などのタイミング制御のために実時間処理ができる
こういうのにRustが強いのは何となくわかる
コンパイル時に静的に解決できる範囲が広いからな
306デフォルトの名無しさん
2023/04/06(木) 12:37:50.23ID:HSw9WEQy 全然違う話でごめん
以下のような処理がある時にf(**item)と参照外しを2回も必要とするのは違和感あるけどそういうもの?
let v: Vec<i32> = vec![1, 8, 4, 5, 9, 6, 3];
let valid_index_list: Vec<usize> = v
.iter()
.enumerate()
.filter(|(_, item)| f(**item))
.map(|(index, _)| index)
.collect();
以下のような処理がある時にf(**item)と参照外しを2回も必要とするのは違和感あるけどそういうもの?
let v: Vec<i32> = vec![1, 8, 4, 5, 9, 6, 3];
let valid_index_list: Vec<usize> = v
.iter()
.enumerate()
.filter(|(_, item)| f(**item))
.map(|(index, _)| index)
.collect();
307デフォルトの名無しさん
2023/04/06(木) 12:42:05.41ID:0BpFn4iz 組み込みシステムと組み込みプログラミングで微妙に境界線が異なる
例えばサーマルカメラ内蔵のAndroid端末を使った検温システムは組み込みシステムだけど
サーマルカメラのSDKを利用した検温アプリ開発は組み込みプログラミングとは呼ばないかもしれない
サーマルカメラのSDKを作る開発は組み込みプログラミングと呼べる
例えばサーマルカメラ内蔵のAndroid端末を使った検温システムは組み込みシステムだけど
サーマルカメラのSDKを利用した検温アプリ開発は組み込みプログラミングとは呼ばないかもしれない
サーマルカメラのSDKを作る開発は組み込みプログラミングと呼べる
308デフォルトの名無しさん
2023/04/06(木) 12:56:01.04ID:UmwXRZgB 確かにSoCや基板の事情がソフト側から見えてると
(memory mapped I/O直接叩くとか)
OSの有無によらず組み込みっぽい感じはするな
(memory mapped I/O直接叩くとか)
OSの有無によらず組み込みっぽい感じはするな
309デフォルトの名無しさん
2023/04/06(木) 15:14:50.96ID:f3OaQ0al >>306
なんかオジっぽいコードだね
普通はDeref Coercionを活用する
その例ならfを&i32 -> boolにすれば明示的derefは不要
filter関数がownership取るのは変
ついでにfilter_mapでまとめて
.filter_map(|(index, item)| f(item).then_some(index))
シグニチャ変えられない特別な事情があるならパターンマッチで|(index, &item)|としてderefしておく
なんかオジっぽいコードだね
普通はDeref Coercionを活用する
その例ならfを&i32 -> boolにすれば明示的derefは不要
filter関数がownership取るのは変
ついでにfilter_mapでまとめて
.filter_map(|(index, item)| f(item).then_some(index))
シグニチャ変えられない特別な事情があるならパターンマッチで|(index, &item)|としてderefしておく
310デフォルトの名無しさん
2023/04/06(木) 16:55:58.17ID:E/e3rQLj >>306
値を返すイテレータも参照を返すイテレータもあるから
どちらでも不都合のない仕組みにしようとするとそうなるんじゃないの。
参照が二重になるのはごく普通のこと。
その二重の参照をどうやって剥がすかには選択肢があるけど。
値を返すイテレータも参照を返すイテレータもあるから
どちらでも不都合のない仕組みにしようとするとそうなるんじゃないの。
参照が二重になるのはごく普通のこと。
その二重の参照をどうやって剥がすかには選択肢があるけど。
311デフォルトの名無しさん
2023/04/06(木) 18:19:32.48ID:ypjpS3Va312デフォルトの名無しさん
2023/04/06(木) 18:50:13.90ID:uKOnYkHi 俺はそれやだな
313デフォルトの名無しさん
2023/04/06(木) 19:01:16.65ID:1W2y5liy 俺もそれはちょっと遠慮したい
でもまぁそこは論点じゃないんでしょ
iter().filter()は常に&&Tになるから**itemするのが一般的かどうかを聞いてるんだよね?
でもまぁそこは論点じゃないんでしょ
iter().filter()は常に&&Tになるから**itemするのが一般的かどうかを聞いてるんだよね?
314デフォルトの名無しさん
2023/04/06(木) 19:34:52.41ID:E/e3rQLj >>311
イテレータでのアクセス (シーケンシャルアクセス) とランダムアクセスが混ざるのがなんか嫌な気持ちになる。
Vec や配列であることが分かっているときなら問題はないというか、
むしろ状況が整理された良いコードだとも思うんだけどなんか心理的な抵抗感が……。
イテレータでのアクセス (シーケンシャルアクセス) とランダムアクセスが混ざるのがなんか嫌な気持ちになる。
Vec や配列であることが分かっているときなら問題はないというか、
むしろ状況が整理された良いコードだとも思うんだけどなんか心理的な抵抗感が……。
315デフォルトの名無しさん
2023/04/06(木) 21:02:27.27ID:cLuUm0Wb またイテレータの話してる
316デフォルトの名無しさん
2023/04/06(木) 22:26:13.61ID:Ejh1MMKT >>313
into_iter()でT自体を回してるときにfilterで消費しないように&Tを使っているために
iter()で&Tを回してるときは&&Tになってしまうわけだな
3つの点
・&&Tを考える概念的なわかりにくさ
・記述と可読性
・最適化後の最終コード
それそれで不利があるのかどうか?
into_iter()でT自体を回してるときにfilterで消費しないように&Tを使っているために
iter()で&Tを回してるときは&&Tになってしまうわけだな
3つの点
・&&Tを考える概念的なわかりにくさ
・記述と可読性
・最適化後の最終コード
それそれで不利があるのかどうか?
317デフォルトの名無しさん
2023/04/08(土) 17:58:41.25ID:mPm1zhb4 イテレータおじさん.....。
318デフォルトの名無しさん
2023/04/08(土) 23:26:42.03ID:JVh6Wuqn 多数の文字列をいくつでも追加で登録できて、
その登録した各文字列の参照(&str)を、
その登録オブジェクトが生きてる間は自由に使えるような機能のクレートありますか?
追加のみで削除機能がなければ安全に参照&strを返してその参照をずっと安全に使い続けられるインタフェースを提供できそうですが、
実現にはunsafeを使わざるを得ないため何かデファクトスタンダードなクレートがあるか知りたいです。
その登録した各文字列の参照(&str)を、
その登録オブジェクトが生きてる間は自由に使えるような機能のクレートありますか?
追加のみで削除機能がなければ安全に参照&strを返してその参照をずっと安全に使い続けられるインタフェースを提供できそうですが、
実現にはunsafeを使わざるを得ないため何かデファクトスタンダードなクレートがあるか知りたいです。
319デフォルトの名無しさん
2023/04/09(日) 00:21:16.51ID:mvoikQEA Vec<String>
320デフォルトの名無しさん
2023/04/09(日) 00:32:20.15ID:optZAiB4 Vecは追加のために&mutを使うから&strを持ち続けられないか
321デフォルトの名無しさん
2023/04/09(日) 01:16:25.16ID:uCQZ544j は?
322デフォルトの名無しさん
2023/04/09(日) 01:36:27.91ID:o+9ttclI もしかしてこういうこと?
let mut v = Vec::new();
v.push("first".to_string());
let first: &str = &v[0];
v.push("second".to_string());
let second: &str = &v[1];
println!("{first} and {second}");
コンパイルエラーだな
let mut v = Vec::new();
v.push("first".to_string());
let first: &str = &v[0];
v.push("second".to_string());
let second: &str = &v[1];
println!("{first} and {second}");
コンパイルエラーだな
323デフォルトの名無しさん
2023/04/09(日) 01:42:07.16ID:Xj6NS6Ie 文字列専用じゃないけどarena系の実装でいいのかな
typed_arena(https://docs.rs/typed-arena/latest/typed_arena/index.html)がよく使われてるみたい
use typed_arena::Arena;
fn main() {
let arena = Arena::new();
let a: &mut str = arena.alloc_str("abc");
let b: &mut str = arena.alloc_str("def");
let c: &str = arena.alloc_str("ghi");
println!("{a}, {b}, {c}"); // abc, def, ghi
a.make_ascii_uppercase();
b.make_ascii_uppercase();
let d: &str = arena.alloc_str("jkl");
println!("{a}, {b}, {c}, {d}"); // ABC, DEF, ghi, jkl
}
typed_arena(https://docs.rs/typed-arena/latest/typed_arena/index.html)がよく使われてるみたい
use typed_arena::Arena;
fn main() {
let arena = Arena::new();
let a: &mut str = arena.alloc_str("abc");
let b: &mut str = arena.alloc_str("def");
let c: &str = arena.alloc_str("ghi");
println!("{a}, {b}, {c}"); // abc, def, ghi
a.make_ascii_uppercase();
b.make_ascii_uppercase();
let d: &str = arena.alloc_str("jkl");
println!("{a}, {b}, {c}, {d}"); // ABC, DEF, ghi, jkl
}
324デフォルトの名無しさん
2023/04/09(日) 01:56:50.49ID:awfxf9QU だとしたらinterior mutabilityでやる話だね
325デフォルトの名無しさん
2023/04/09(日) 02:19:43.49ID:fcL4nlHr use string_cache::DefaultAtom;
fn main() {
let s1 = DefaultAtom::from("example");
let s2 = DefaultAtom::from("example");
assert_eq!(s1, s2);
let s1_ref: &str = &*s1;
let s2_ref: &str = &*s2;
assert_eq!(s1_ref, s2_ref);
}
fn main() {
let s1 = DefaultAtom::from("example");
let s2 = DefaultAtom::from("example");
assert_eq!(s1, s2);
let s1_ref: &str = &*s1;
let s2_ref: &str = &*s2;
assert_eq!(s1_ref, s2_ref);
}
326デフォルトの名無しさん
2023/04/09(日) 02:43:31.70ID:vz6m7/QT シンボルテーブルか
327デフォルトの名無しさん
2023/04/09(日) 16:31:56.46ID:CdUYcfdD >>323,325
質問者はコレクションを求めてるんだろ
質問者はコレクションを求めてるんだろ
328デフォルトの名無しさん
2023/04/10(月) 08:37:09.69ID:DyZbTzV6 Rustのwebフレームワークって2023年現在どれがおすすめですか?
329デフォルトの名無しさん
2023/04/10(月) 10:35:11.69ID:wa5pv4tn そんなに数多くないと思うから10~20個くらい試して何が良かったか教えてよ
オススメ聞くってことはここで挙げられるようなやつ全部試して感想聞かせてくれるってことでしょ
決めるのに好みも入ってていいんだから
なんなら「名前が気にくわない」「アイコンがダサい」くらいの理由でもいい
オススメ聞くってことはここで挙げられるようなやつ全部試して感想聞かせてくれるってことでしょ
決めるのに好みも入ってていいんだから
なんなら「名前が気にくわない」「アイコンがダサい」くらいの理由でもいい
330デフォルトの名無しさん
2023/04/10(月) 10:45:58.73ID:yiM3eSrr 規模とか構成とかでも良い選択は違うのでなんとも言いにくいな。
比較的に万能で定番なものは actix, axum, rocket あたりだと思うが。
比較的に万能で定番なものは actix, axum, rocket あたりだと思うが。
331デフォルトの名無しさん
2023/04/10(月) 12:38:17.63ID:GqegRxcS Tide 使っとけば間違いない
332デフォルトの名無しさん
2023/04/10(月) 15:48:33.90ID:4HpjR3/Y パフォーマンスより、単純明快なwebフレームワークが知りたいな
PythonならFlask的な
どうせDBがボトルネックになるし
PythonならFlask的な
どうせDBがボトルネックになるし
333デフォルトの名無しさん
2023/04/10(月) 18:28:14.17ID:Mdv85xt7 そういうの自分で調べられない人はもう少しエコシステムが成熟してからRustを検討した方がいいよ
334デフォルトの名無しさん
2023/04/10(月) 19:05:09.35ID:sUqOZltz どうせ○○がボトルネックになるし
↑
こういう発想は大事
細かいところにだけ着目してvtableのコストがどうのとか
クロック数でいくらどうのとか
そういう連中よりは遥かにセンスがある
↑
こういう発想は大事
細かいところにだけ着目してvtableのコストがどうのとか
クロック数でいくらどうのとか
そういう連中よりは遥かにセンスがある
335デフォルトの名無しさん
2023/04/10(月) 19:20:23.61ID:yiM3eSrr >>334
クラウドだとCPU時間やメモリに課金されるから
「ユーザの体感速度にほんど影響がないからいいや」とはならない。
スループットだけ見てればよい時代は終わった。
ローカルでちょっとした GUI がわりにする程度ならどうでもいいけど……。
クラウドだとCPU時間やメモリに課金されるから
「ユーザの体感速度にほんど影響がないからいいや」とはならない。
スループットだけ見てればよい時代は終わった。
ローカルでちょっとした GUI がわりにする程度ならどうでもいいけど……。
336デフォルトの名無しさん
2023/04/11(火) 23:57:13.30ID:+2ozf4Lx ディスパッチの話で負けた負け犬が遠吠えこいてんのか
337デフォルトの名無しさん
2023/04/26(水) 20:19:48.59ID:WZHTU1Do Rustに限った話じゃないけど非線形(条件分岐を少なからず含む)な関数のテスト条件って普通どうやって作るの?
例えばRGB888フォーマットの色1と色2を飽和加算合成する関数を作ったのでテストしたいとする
すべてのパターンをテストすれば確実だが2の24乗もあってあまり現実的ではない
最小値と最大値と線形から非線形に移行する付近のみテストするとか?
例えばRGB888フォーマットの色1と色2を飽和加算合成する関数を作ったのでテストしたいとする
すべてのパターンをテストすれば確実だが2の24乗もあってあまり現実的ではない
最小値と最大値と線形から非線形に移行する付近のみテストするとか?
338デフォルトの名無しさん
2023/04/26(水) 20:42:58.19ID:NF11/Xrv 境界付近をテストするので良いと思う。
網羅的にテストしたつもりでも実際の問題ってのはどうせ
想定してないところから出てくるもんだから事前に何もかも盛り込むのは無理。
問題が出たときにテストを追加して同じ問題をもう出さない (後退はしない) ようにして
徐々に良くしていくしかない。
網羅的にテストしたつもりでも実際の問題ってのはどうせ
想定してないところから出てくるもんだから事前に何もかも盛り込むのは無理。
問題が出たときにテストを追加して同じ問題をもう出さない (後退はしない) ようにして
徐々に良くしていくしかない。
339337
2023/04/29(土) 21:52:25.06ID:+xgAqXRk >>338
あと追加するなら加算のテストくらいかな
0+1=1、1+1=0+C、1+0=1・・・ビット単位ならパターンはそこまで多くないし
ググっても具体的に何をテストすべきかみたいな解説はあまり出てこない気がする
あと追加するなら加算のテストくらいかな
0+1=1、1+1=0+C、1+0=1・・・ビット単位ならパターンはそこまで多くないし
ググっても具体的に何をテストすべきかみたいな解説はあまり出てこない気がする
340デフォルトの名無しさん
2023/05/02(火) 10:56:16.58ID:j5a6+bQW スレに人が来なくなったのはGWなのとchatGPTでPG需要減ってきたからか
341デフォルトの名無しさん
2023/05/02(火) 12:05:52.42ID:+0ZRIFR4 sudoとsuがRustで書き直される。メモリ安全性向上へ
https://news.yahoo.co.jp/articles/296d15d7c1f7190ff1646f4d52f8df8c56c0e132
https://news.yahoo.co.jp/articles/296d15d7c1f7190ff1646f4d52f8df8c56c0e132
342デフォルトの名無しさん
2023/05/02(火) 12:09:31.43ID:XVCLDAkP このままLinuxの公式言語になってしまうのだろうか?
それはそれでちょっと寂しい
それはそれでちょっと寂しい
343デフォルトの名無しさん
2023/05/02(火) 12:15:20.08ID:GEufc0we へぇ、Rustって知らないところで着実に市民権獲得し始めてるんやな
まぁ確かに“安全性”、“堅牢性”ってのは売りになるわな
まぁ確かに“安全性”、“堅牢性”ってのは売りになるわな
344デフォルトの名無しさん
2023/05/02(火) 12:21:25.01ID:xcMXGreF とは言ってもパラダイムが違うものを組み合わせるのは
それはそれで色々としんどいから
新規プロジェクトからということにはなるわな。
あるいはモジュール単位で徐々に……といったところか。
それはそれで色々としんどいから
新規プロジェクトからということにはなるわな。
あるいはモジュール単位で徐々に……といったところか。
345デフォルトの名無しさん
2023/05/02(火) 13:10:44.65ID:SH4oCjNk 純粋に質問なのですが、Windowsだとユーザ権限プログラムから感知できない全画面確認画面(コード署名表示付き)を
手動クリックすることによって権限昇格するAPIやファイル実行オプションを用いるのですが、
Linuxのsudo、suはそういうOS提供APIの単純ラッパ以外の処理が必要なのですか?
手動クリックすることによって権限昇格するAPIやファイル実行オプションを用いるのですが、
Linuxのsudo、suはそういうOS提供APIの単純ラッパ以外の処理が必要なのですか?
346デフォルトの名無しさん
2023/05/02(火) 14:14:52.25ID:kqtJfIHI347デフォルトの名無しさん
2023/05/02(火) 15:20:08.53ID:HqctS3p2 Qiitaで調べものをしていたらRustを広めたいというユーザーを
見かけたのですが実のあるRustの記事がありません
ここにいらっしゃるのですか?
見かけたのですが実のあるRustの記事がありません
ここにいらっしゃるのですか?
348デフォルトの名無しさん
2023/05/02(火) 16:34:54.41ID:IqyS7yAG Rustはアマチュアがいじいじするだけの言語だから
349デフォルトの名無しさん
2023/05/02(火) 17:29:28.03ID:DSQza21A Rustや情報科学みたいなものは、完全に自分の教養のためと思って勉強してるけど・・・・・
いつまで経っても実用の域に届かない
いつまで経っても実用の域に届かない
350デフォルトの名無しさん
2023/05/02(火) 17:34:42.24ID:KHYt4fkx R&D関係者と交流があるだけの人ってアマチュア?
351デフォルトの名無しさん
2023/05/02(火) 17:49:30.32ID:IqyS7yAG アマチュアがあーでもないこーでもないと
持て余したヒマでいじくり回した結果
しょうもないポエムを生み出すだけ
この言語そのものというより
この言語を取り巻く状況はずっとこう
持て余したヒマでいじくり回した結果
しょうもないポエムを生み出すだけ
この言語そのものというより
この言語を取り巻く状況はずっとこう
352デフォルトの名無しさん
2023/05/02(火) 19:13:07.37ID:XhxCeHYa353デフォルトの名無しさん
2023/05/02(火) 19:48:58.54ID:TWDhbUOL YouTube で有名な雑食系エンジニア・KENTA が、
初心者に推奨するキャリアパスは、Ruby on Rails → Go のみ
Rust, Elixir は普及のキャズムを超えなかった。
オワコン認定した言語は、Scala, PHP
米国年収でも、Rails, AWS Solution Architect が13万ドル
Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7
多くの言語 : 6.5〜7
PHP : 5
Dart : 4.4
日本では、バックエンドの求人倍率が数倍で、
フロントが0.5倍と、10倍の開きがある。
フロントは供給過剰で、低価格競争になっている
欲しい人材は、Rails, Linux, Docker, AWS が出来る香具師。
つまり、ウェブサービスを作れる香具師
Railsは、作者のDHH が言うように、バックエンド技術者がフロントも兼ねるから、
バック/フロントの打ち合わせコストが掛からないのが強み
その代わり、あまりCSS を知らないので、デザイン性に欠ける。
Bootstrap, Tailwind などが多い
つまり、これが文系の低学歴でも、簡単に高収入を得られる方法。チート職業。
だから皆、月千円のKENTAの初心者向けRailsサロンへ入る。稼げるから
初心者に推奨するキャリアパスは、Ruby on Rails → Go のみ
Rust, Elixir は普及のキャズムを超えなかった。
オワコン認定した言語は、Scala, PHP
米国年収でも、Rails, AWS Solution Architect が13万ドル
Ruby, Elixir : 9.3 万ドル
Go : 8.9
Rust : 8.7
多くの言語 : 6.5〜7
PHP : 5
Dart : 4.4
日本では、バックエンドの求人倍率が数倍で、
フロントが0.5倍と、10倍の開きがある。
フロントは供給過剰で、低価格競争になっている
欲しい人材は、Rails, Linux, Docker, AWS が出来る香具師。
つまり、ウェブサービスを作れる香具師
Railsは、作者のDHH が言うように、バックエンド技術者がフロントも兼ねるから、
バック/フロントの打ち合わせコストが掛からないのが強み
その代わり、あまりCSS を知らないので、デザイン性に欠ける。
Bootstrap, Tailwind などが多い
つまり、これが文系の低学歴でも、簡単に高収入を得られる方法。チート職業。
だから皆、月千円のKENTAの初心者向けRailsサロンへ入る。稼げるから
354デフォルトの名無しさん
2023/05/02(火) 20:03:17.56ID:6g8Nsfp3 >>341,345
sudu-rsとsudo(original)のtokeiしました
LOCが違い過ぎて機能的に同等とは思えませんが誰か確認してください
https://i.imgur.com/wqUfNLQ.png
sudu-rsとsudo(original)のtokeiしました
LOCが違い過ぎて機能的に同等とは思えませんが誰か確認してください
https://i.imgur.com/wqUfNLQ.png
355デフォルトの名無しさん
2023/05/02(火) 22:59:03.14ID:3h/NlzQK356デフォルトの名無しさん
2023/05/03(水) 00:18:13.49ID:g1uPDP/x >>355
なるほどテストを比較よろ
なるほどテストを比較よろ
357デフォルトの名無しさん
2023/05/03(水) 00:24:35.35ID:BA7Ot0nV 現時点のCurlからRustの跡形なくなってる
3年前のアナウンス
Memory Safe ‘curl’ for a More Secure Internet - Oct 9, 2020
https://www.memorysafety.org/blog/memory-safe-curl/
言及されてるhyper(-rs)がなくて、C実装になったc-hyper
https://github.com/curl/curl/blob/master/lib/c-hyper.c
Rustlsはそれらしきものが全くない
3年前のアナウンス
Memory Safe ‘curl’ for a More Secure Internet - Oct 9, 2020
https://www.memorysafety.org/blog/memory-safe-curl/
言及されてるhyper(-rs)がなくて、C実装になったc-hyper
https://github.com/curl/curl/blob/master/lib/c-hyper.c
Rustlsはそれらしきものが全くない
358デフォルトの名無しさん
2023/05/03(水) 00:49:48.46ID:CZOik0F4359デフォルトの名無しさん
2023/05/03(水) 08:45:46.83ID:I87taHnB >>357
HTTPバックエンドとして使えるって話だから元々本体にRustコードは入ってないと思うけど
この辺見ればわかるけど、hyperやrustlsは別途ビルドしてるよ
https://github.com/curl/curl/blob/master/.github/workflows/linux.yml
HTTPバックエンドとして使えるって話だから元々本体にRustコードは入ってないと思うけど
この辺見ればわかるけど、hyperやrustlsは別途ビルドしてるよ
https://github.com/curl/curl/blob/master/.github/workflows/linux.yml
360デフォルトの名無しさん
2023/05/03(水) 11:25:57.48ID:iEII6Ca5 もうChatGPTあるしRustの存在意義がほとんど無くなっちゃったね
361デフォルトの名無しさん
2023/05/03(水) 12:08:28.90ID:QeIlVi4X >>360
どういう関係が?
どういう関係が?
362デフォルトの名無しさん
2023/05/03(水) 15:58:21.31ID:FU/0xIZ5 >>358
移行を目指して開発するということです
移行を目指して開発するということです
363デフォルトの名無しさん
2023/05/03(水) 17:41:36.60ID:gBESz1Qj364デフォルトの名無しさん
2023/05/03(水) 20:37:19.00ID:C/1gxzck 数千トークンの単位でしかやり取りできないって知らないんだろうな
365デフォルトの名無しさん
2023/05/05(金) 20:25:46.02ID:zl0JqMlo この手のシステムプログラミング?できる言語って何から始めたら良いんですかね
いきなりRustから入ってもいいのかそれともC言語から始めるべきなのか
シェルスクリプトで作った自作ツールをバイナリ化して動作を早くしたいとかそれくらいしか今は用途ないんですけど
いやでも、既存のツールのソースが読めるようになるから難しくてもまずCをやるべきか…
いきなりRustから入ってもいいのかそれともC言語から始めるべきなのか
シェルスクリプトで作った自作ツールをバイナリ化して動作を早くしたいとかそれくらいしか今は用途ないんですけど
いやでも、既存のツールのソースが読めるようになるから難しくてもまずCをやるべきか…
366デフォルトの名無しさん
2023/05/05(金) 20:44:06.81ID:ug2cMp38 >>365
隔離スレに帰れゴミ
隔離スレに帰れゴミ
367デフォルトの名無しさん
2023/05/05(金) 21:21:06.18ID:zl0JqMlo >>366
ええ…単にRustで検索してたどり着いて書き込んだだけなんだけど
ええ…単にRustで検索してたどり着いて書き込んだだけなんだけど
368デフォルトの名無しさん
2023/05/05(金) 21:21:49.38ID:ZIYROKTz >>365
そういう用途ならとりあえずはGoからはじめるといいよ
目的を実現するまでにかかる時間が5倍くらいは違うと思うから
シェルスクリプトも外部ツールをうまく利用してたら実質Cに近い速度で動いてる場合もあるからCやRustで自作したからといって速くなるとは限らないよ
そういう用途ならとりあえずはGoからはじめるといいよ
目的を実現するまでにかかる時間が5倍くらいは違うと思うから
シェルスクリプトも外部ツールをうまく利用してたら実質Cに近い速度で動いてる場合もあるからCやRustで自作したからといって速くなるとは限らないよ
369デフォルトの名無しさん
2023/05/05(金) 21:25:04.73ID:ZIYROKTz Rustを学ぶために事前にCを学んだほうがいいかと言えば全くそんなことはない
370デフォルトの名無しさん
2023/05/05(金) 21:46:33.98ID:zl0JqMlo >>368,369
ありがとうございます
事前にCの知識が不要であれば、既存のツールのソースを読むのに便利くらいな感じなんですかね、Cは
自作スクリプトは最初からOSに入ってるコマンドを組み合わせる形で動いていて
なのでまあ多少早くなればいいなくらいで、後は趣味兼勉強で覚えたいと思ってます
GoについてはRustと双璧で名前が出てきますね
Rustの方が使われてる印象があったんでそっちを検討してたんですけど
GoについてもRustと違いを把握できる程度で調べて、どっちかで検討してみようと思います
ありがとうございます
事前にCの知識が不要であれば、既存のツールのソースを読むのに便利くらいな感じなんですかね、Cは
自作スクリプトは最初からOSに入ってるコマンドを組み合わせる形で動いていて
なのでまあ多少早くなればいいなくらいで、後は趣味兼勉強で覚えたいと思ってます
GoについてはRustと双璧で名前が出てきますね
Rustの方が使われてる印象があったんでそっちを検討してたんですけど
GoについてもRustと違いを把握できる程度で調べて、どっちかで検討してみようと思います
371デフォルトの名無しさん
2023/05/05(金) 23:01:41.02ID:6VYfhEYJ >>370
システムプログラミングというのはシステム (OS やそれに近い層) のプログラミングを
想定したもので、システムのドキュメントでの説明やツールキットに C が使われていることはそれなりにある。
アプリケーション層でも C や C++ で書かれたライブラリと結合したいこともたまにはある。
(人気のあるライブラリなら Rust 用のラッパーライブラリが提供されていると思うが。)
そういうことをしたいのなら C を多少は読み書きできないとしんどいこともあるかもね。
そうでないなら C を扱える必要はない。
大きなコンポーネントを組み合わせる程度の使い方の場合は
シェルスクリプトを他の言語に置き換えても性能はほとんど変わらない。
実行時間のほとんどがそのコンポーネント内のコードの実行に費やされることが多いので
自分が書く部分の性能が少しばかり高性能でも全体の実行時間にはそれほど大きくは影響しない。
システムプログラミングというのはシステム (OS やそれに近い層) のプログラミングを
想定したもので、システムのドキュメントでの説明やツールキットに C が使われていることはそれなりにある。
アプリケーション層でも C や C++ で書かれたライブラリと結合したいこともたまにはある。
(人気のあるライブラリなら Rust 用のラッパーライブラリが提供されていると思うが。)
そういうことをしたいのなら C を多少は読み書きできないとしんどいこともあるかもね。
そうでないなら C を扱える必要はない。
大きなコンポーネントを組み合わせる程度の使い方の場合は
シェルスクリプトを他の言語に置き換えても性能はほとんど変わらない。
実行時間のほとんどがそのコンポーネント内のコードの実行に費やされることが多いので
自分が書く部分の性能が少しばかり高性能でも全体の実行時間にはそれほど大きくは影響しない。
372デフォルトの名無しさん
2023/05/05(金) 23:23:10.17ID:A/rFKldr373デフォルトの名無しさん
2023/05/06(土) 04:59:19.62ID:cJf94Ar1 C++もGC使えるけどな
374デフォルトの名無しさん
2023/05/06(土) 05:26:55.29ID:ZbAqT6nN 言語システムとしてGCを必須とする言語との区別がつかないアホか
375デフォルトの名無しさん
2023/05/06(土) 06:16:27.47ID:6JUtkYO4 C++マネージ拡張
プログラミング言語
プログラミング言語
376デフォルトの名無しさん
2023/05/06(土) 06:21:14.86ID:cJf94Ar1 文字列は動的なアロケーションが必要な場合があるだろ?
じゃあ、文字列を動的配列に入れる場合どうなる?
コピーなどは動的配列のメンバで行われるだろ?
C++は、コンテナが使用するメモリーはGC、文字列のメモリー確保はマイアロケータ、なんてことが出来る
動的配列のメンバが文字列のメンバにマイアロケータを使わせるようになるってことだぞ
じゃあ、文字列を動的配列に入れる場合どうなる?
コピーなどは動的配列のメンバで行われるだろ?
C++は、コンテナが使用するメモリーはGC、文字列のメモリー確保はマイアロケータ、なんてことが出来る
動的配列のメンバが文字列のメンバにマイアロケータを使わせるようになるってことだぞ
377デフォルトの名無しさん
2023/05/06(土) 06:22:08.86ID:cJf94Ar1 >>375
標準C++で使えるぞ
標準C++で使えるぞ
378デフォルトの名無しさん
2023/05/06(土) 06:47:02.36ID:BGrqS5mo GCが不可欠な言語とライブラリでGCする話は全く異なり関係ない
379デフォルトの名無しさん
2023/05/08(月) 01:15:08.03ID:4H9Xfh5A パーサジェネレータっていろいろあるけど今だと何が良いんだ?
パースターゲットはgas風のアセンブラリスト。取り扱いは今風な方が嬉しい
パースターゲットはgas風のアセンブラリスト。取り扱いは今風な方が嬉しい
380デフォルトの名無しさん
2023/05/08(月) 02:27:34.26ID:6qkGyJAY 文法にも種類があって文法と解析アルゴリズムの組み合わせ次第では定義不可能なこともある。
具体的な文法を検証しないとどれを使うのが妥当かは言えない。
具体的な文法を検証しないとどれを使うのが妥当かは言えない。
381デフォルトの名無しさん
2023/05/08(月) 06:50:07.08ID:4H9Xfh5A382デフォルトの名無しさん
2023/05/08(月) 08:35:46.67ID:Kh0HUP9F nomでいいんじゃないかな
383デフォルトの名無しさん
2023/05/08(月) 10:53:50.62ID:6qkGyJAY gas の文法なら最も素朴な文法カテゴリである LL 文法の範疇に収まるはずなので
PEG 系のパーサコンビネータライブラリが適していると思う。
でも LL 文法は再帰下降で書いてもたいした手間ではないので
凝ったツール (またはライブラリ) を導入しても劇的に楽になるってほどでもない。
コードの見通しが良くはなるかなぁ……。
PEG 系のパーサコンビネータライブラリが適していると思う。
でも LL 文法は再帰下降で書いてもたいした手間ではないので
凝ったツール (またはライブラリ) を導入しても劇的に楽になるってほどでもない。
コードの見通しが良くはなるかなぁ……。
384デフォルトの名無しさん
2023/05/08(月) 20:28:58.82ID:4H9Xfh5A385デフォルトの名無しさん
2023/05/12(金) 21:22:48.00ID:rQCSntAC わび、さび
が分かる日本人↓
が分かる日本人↓
386デフォルトの名無しさん
2023/05/13(土) 06:51:26.85ID:7jqHwrc+ 滑ってるぞ
387デフォルトの名無しさん
2023/05/20(土) 16:33:08.50ID:w2uVrX5O --emit asmをつけるとアセンブラリストを出力できるけどstaticlibやrlibをつけても一部の関数が
出力されないように見える。例えばpanic!を呼ぶとうちの環境(1.69 x64 MSVC)では
callq _ZN4core9panicking5panic17h3445eebb4065373cE
が生成されるけどリスト中にこのラベルはない。マングリングされているけど実体はおそらく
ttps://doc.rust-lang.org/core/panicking/fn.panic.html
と思われるけどこのあたりのアセンブラリストを得るにはどうしたらいいんだろ?
出力されないように見える。例えばpanic!を呼ぶとうちの環境(1.69 x64 MSVC)では
callq _ZN4core9panicking5panic17h3445eebb4065373cE
が生成されるけどリスト中にこのラベルはない。マングリングされているけど実体はおそらく
ttps://doc.rust-lang.org/core/panicking/fn.panic.html
と思われるけどこのあたりのアセンブラリストを得るにはどうしたらいいんだろ?
388デフォルトの名無しさん
2023/05/20(土) 18:33:58.33ID:Sx1e1bwr インライン化されてるだけでは?
panicだと分岐とpanicハンドラが出てくるから分からないってことはないと思うんだが
最小再現コードをgodboltにても上げてみては?
panicだと分岐とpanicハンドラが出てくるから分からないってことはないと思うんだが
最小再現コードをgodboltにても上げてみては?
389デフォルトの名無しさん
2023/05/20(土) 19:27:31.19ID:w2uVrX5O Compiler Explorerの使い方がよくわかっていないので変だったらスマン
ttps://godbolt.org/z/nxz95xejr
こんな感じ。明示的にrip相対になっているのでコンパイラはLinux版と思われる
core::panicking::panicを呼び出していることはわかるがその中身は出てこない
ttps://godbolt.org/z/nxz95xejr
こんな感じ。明示的にrip相対になっているのでコンパイラはLinux版と思われる
core::panicking::panicを呼び出していることはわかるがその中身は出てこない
390デフォルトの名無しさん
2023/05/20(土) 23:56:16.81ID:5KQ3IHQ1391デフォルトの名無しさん
2023/05/21(日) 00:24:43.05ID:bfWEYksH >>390
[no_std]を外すと
callq *std::panicking::begin_panic::{{closure}}@GOTPCREL(%rip)
とかになるみたい。ただしその中で呼んでいるラベルすべてが含まれるわけではない模様
例えば
#[panic_handler]
fn panic(_panic: &PanicInfo<'_>) -> ! {
loop {};
}
などとパニックハンドラを足してもcall先のラベルがrust_begin_unwind(上記panic関数の実体)になったりはせず
core::panicking::panicが呼ばれるっぽい。そこからユーザー定義のハンドラを呼び出す隠れたコードがあるはず
ついでにabort=unwindの場合はpanic発生時にrust_begin_unwindが呼ばれるはずだけどその辺も隠れているように見える
[no_std]を外すと
callq *std::panicking::begin_panic::{{closure}}@GOTPCREL(%rip)
とかになるみたい。ただしその中で呼んでいるラベルすべてが含まれるわけではない模様
例えば
#[panic_handler]
fn panic(_panic: &PanicInfo<'_>) -> ! {
loop {};
}
などとパニックハンドラを足してもcall先のラベルがrust_begin_unwind(上記panic関数の実体)になったりはせず
core::panicking::panicが呼ばれるっぽい。そこからユーザー定義のハンドラを呼び出す隠れたコードがあるはず
ついでにabort=unwindの場合はpanic発生時にrust_begin_unwindが呼ばれるはずだけどその辺も隠れているように見える
392デフォルトの名無しさん
2023/05/23(火) 16:03:35.67ID:Jpx1nTNj 初心者の相談ここでいい?
RustやってみようとWin +VisualStudioCodeに
RustAnalyzer と CodeLLDBを入れ
PythonもPath付きで入れた
cargo newも走った
なのにデバッガが使えない
Hello Worldにブレイクポイント一つ置いただけなのに
F5押したら帰ってこない もう一回押したら
Debugは既に開始しています 別のインスタンスを開始しますか?
なんかワクチンが悪さしてるかと思ってESETも30分止めてみたけれど同じ
誰もこんなところで躓いてないのになんでかな,,,
RustやってみようとWin +VisualStudioCodeに
RustAnalyzer と CodeLLDBを入れ
PythonもPath付きで入れた
cargo newも走った
なのにデバッガが使えない
Hello Worldにブレイクポイント一つ置いただけなのに
F5押したら帰ってこない もう一回押したら
Debugは既に開始しています 別のインスタンスを開始しますか?
なんかワクチンが悪さしてるかと思ってESETも30分止めてみたけれど同じ
誰もこんなところで躓いてないのになんでかな,,,
393デフォルトの名無しさん
2023/05/23(火) 17:27:20.12ID:Jpx1nTNj デバッグなしの実行だと Hello, world! が普通にターミナルに出力されるのに
なんで デバッガ動かないんだか,,,
なんで デバッガ動かないんだか,,,
394デフォルトの名無しさん
2023/05/23(火) 17:30:06.95ID:QaZRkUju >>392
下ペインの出力タブで何かエラーメッセージ出てないか確認しなさい
下ペインの出力タブで何かエラーメッセージ出てないか確認しなさい
395デフォルトの名無しさん
2023/05/23(火) 18:02:22.62ID:QWj3a5zv >>392
launch.jsonを生成してみれば?
launch.jsonを生成してみれば?
396デフォルトの名無しさん
2023/05/23(火) 18:04:39.75ID:Jpx1nTNj へい
コード側に表示されている
Run/DebugのうちのDebugを押しても
ターミナル側にはPS C:\Users\xxx\xxx\hello >
みたいにpathが見えているままで 何も追加表示されない
launch jsonは自動的に作られている
コールスタック表示には プロセスについて run xxと表示が出て
Debug押すたびに run xx 2とかプロセスが増えていくだけ
コード側に表示されている
Run/DebugのうちのDebugを押しても
ターミナル側にはPS C:\Users\xxx\xxx\hello >
みたいにpathが見えているままで 何も追加表示されない
launch jsonは自動的に作られている
コールスタック表示には プロセスについて run xxと表示が出て
Debug押すたびに run xx 2とかプロセスが増えていくだけ
397デフォルトの名無しさん
2023/05/23(火) 18:11:32.54ID:Jpx1nTNj "configurations": [
{ "type": "lldb", "request": "launch",
"name": "Debug executable 'hello'",
"cargo": { "args": [ "build", "--bin=hello", "--package=hello" ],
"filter": { "name": "hello", "kind": "bin" } },
"args": [ ], "cwd": "${workspaceFolder}" },
{ "type": "lldb", "request": "launch",
"name": "Debug unit tests in executable 'hello'",
"cargo": { "args": [ "test", "--no-run", "--bin=hello", "--package=hello" ],
"filter": { "name": "hello", "kind": "bin" } },
"args": [ ], "cwd": "${workspaceFolder}" } ] }
誘導に乗るままに自動生成されたlaunch json なんかおかしいのかなこれ
{ "type": "lldb", "request": "launch",
"name": "Debug executable 'hello'",
"cargo": { "args": [ "build", "--bin=hello", "--package=hello" ],
"filter": { "name": "hello", "kind": "bin" } },
"args": [ ], "cwd": "${workspaceFolder}" },
{ "type": "lldb", "request": "launch",
"name": "Debug unit tests in executable 'hello'",
"cargo": { "args": [ "test", "--no-run", "--bin=hello", "--package=hello" ],
"filter": { "name": "hello", "kind": "bin" } },
"args": [ ], "cwd": "${workspaceFolder}" } ] }
誘導に乗るままに自動生成されたlaunch json なんかおかしいのかなこれ
398デフォルトの名無しさん
2023/05/23(火) 18:14:16.03ID:QaZRkUju399デフォルトの名無しさん
2023/05/23(火) 18:26:24.50ID:Jpx1nTNj へい
今日はもうPCから離れてしまったので
(お仕事の時間
明日の午後 出力をここに転記してみます
よろしくお願いします
今日はもうPCから離れてしまったので
(お仕事の時間
明日の午後 出力をここに転記してみます
よろしくお願いします
400デフォルトの名無しさん
2023/05/24(水) 14:06:06.92ID:r6J0oqAK 昨日の続きです 出力>Debugdセレクタで
Launching debug configuration:
{
"type": "lldb",
"request": "launch",
"name": "run hello",
"program": "C:\\Users\\ochia\\Downloads\\RustTry\\hello\\target\\debug\\hello.exe",
"args": [],
"cwd": "C:\\Users\\ochia\\Downloads\\RustTry\\hello",
"sourceMap": {},
"sourceLanguages": [
"rust"
],
"env": {
"RUST_BACKTRACE": "short", 以下略
Launching debug configuration:
{
"type": "lldb",
"request": "launch",
"name": "run hello",
"program": "C:\\Users\\ochia\\Downloads\\RustTry\\hello\\target\\debug\\hello.exe",
"args": [],
"cwd": "C:\\Users\\ochia\\Downloads\\RustTry\\hello",
"sourceMap": {},
"sourceLanguages": [
"rust"
],
"env": {
"RUST_BACKTRACE": "short", 以下略
401デフォルトの名無しさん
2023/05/24(水) 14:08:03.26ID:r6J0oqAK >LLDBセレクタ
relativePathBase: 'c:\\Users\\xxx\\Downloads\\xxx\\hello',
_adapterSettings: {
displayFormat: 'auto',
showDisassembly: 'auto',
dereferencePointers: true,
suppressMissingSourceFiles: true,
evaluationTimeout: 5,
consoleMode: 'commands',
sourceLanguages: null,
terminalPromptClear: null,
evaluateForHovers: true,
commandCompletions: true,
reproducer: false
}
}
relativePathBase: 'c:\\Users\\xxx\\Downloads\\xxx\\hello',
_adapterSettings: {
displayFormat: 'auto',
showDisassembly: 'auto',
dereferencePointers: true,
suppressMissingSourceFiles: true,
evaluationTimeout: 5,
consoleMode: 'commands',
sourceLanguages: null,
terminalPromptClear: null,
evaluateForHovers: true,
commandCompletions: true,
reproducer: false
}
}
402デフォルトの名無しさん
2023/05/24(水) 14:09:28.83ID:r6J0oqAK Resolved debug configuration: {
type: 'lldb',
request: 'launch',
name: 'run hello',
program: 'C:\\Users\\xxx\\Downloads\\xxx\\hello\\target\\debug\\hello.exe',
args: [],
cwd: 'C:\\Users\\xxx\\Downloads\\xxx\\hello',
sourceMap: {},
sourceLanguages: [ 'rust' ],
env: {
RUST_BACKTRACE: 'short', 以下略
type: 'lldb',
request: 'launch',
name: 'run hello',
program: 'C:\\Users\\xxx\\Downloads\\xxx\\hello\\target\\debug\\hello.exe',
args: [],
cwd: 'C:\\Users\\xxx\\Downloads\\xxx\\hello',
sourceMap: {},
sourceLanguages: [ 'rust' ],
env: {
RUST_BACKTRACE: 'short', 以下略
403デフォルトの名無しさん
2023/05/24(水) 14:17:47.42ID:r6J0oqAK launch jsonの内容をなぞっているように見えますけれど どこが問題なんですかね
404デフォルトの名無しさん
2023/05/24(水) 19:14:40.08ID:P3DEOWau その後は何もないの?
405デフォルトの名無しさん
2023/05/27(土) 20:30:35.69ID:MtF41Uws 生行列をallocするベストプラクティスを教えてください
doube **a=malloc(sizeof(double*)*100);
for (i=0; i < 100; i++) {
a[i]=malloc(sizeof(double)*1000);
}
//a[i][j]でアクセス
みたいなやつです
条件としてC/C++より遅くはならないこと
かつある程度安全であることです
普通にやVecで良い」ならそれで行きます
doube **a=malloc(sizeof(double*)*100);
for (i=0; i < 100; i++) {
a[i]=malloc(sizeof(double)*1000);
}
//a[i][j]でアクセス
みたいなやつです
条件としてC/C++より遅くはならないこと
かつある程度安全であることです
普通にやVecで良い」ならそれで行きます
406デフォルトの名無しさん
2023/05/27(土) 21:43:25.68ID:gMKf+OGS 何に使うかによります
407デフォルトの名無しさん
2023/05/27(土) 22:55:13.87ID:A+Fg27pW408デフォルトの名無しさん
2023/05/27(土) 22:56:24.11ID:3vAeCl3M ドキュメントを調べたらRawVecが良さそうなんですが
まだ安定版で早い模様
https://github.com/rust-lang/rust/blob/master/library/alloc/src/raw_vec.rs
うーむ
まだ安定版で早い模様
https://github.com/rust-lang/rust/blob/master/library/alloc/src/raw_vec.rs
うーむ
409デフォルトの名無しさん
2023/05/27(土) 23:03:14.16ID:A+Fg27pW Vecの中身がRawVecなんだけど
RawVecを直接使ったほうが速くなるような使い方なのかな?
RawVecを直接使ったほうが速くなるような使い方なのかな?
410デフォルトの名無しさん
2023/05/27(土) 23:15:57.87ID:3vAeCl3M 数万要素の行列演算なので極力余計な処理はして欲しくない感じかな
411デフォルトの名無しさん
2023/05/27(土) 23:38:53.11ID:vyw6vGV+ >>405
Cのコード見るにそんな速度にこだわり無さそうだけどw
Cのコード見るにそんな速度にこだわり無さそうだけどw
412デフォルトの名無しさん
2023/05/28(日) 00:21:22.19ID:zeE7KVbL 今のご時世に行列計算の速度を気にするならSIMD使えでFAじゃね?
413デフォルトの名無しさん
2023/05/28(日) 00:34:27.16ID:TDETqQQX 今の時代は普通にGPU使うのがベストだよ
ただしクラウドでやるとなると金がかかる
今こそCPUで限界まで性能を出し切ることが「男の夢」じゃあないか
マルチスレッド、ベクトル命令、メモリのプリフェッチを駆使して
GPUなしでどの程度性能を引き出せるか?という実験をやっているところ
Cなら普通に書けるのだけどRustの方が色々ライブラリも豊富だから
アプリケーション化するとき楽かなあと思った次第
ただしクラウドでやるとなると金がかかる
今こそCPUで限界まで性能を出し切ることが「男の夢」じゃあないか
マルチスレッド、ベクトル命令、メモリのプリフェッチを駆使して
GPUなしでどの程度性能を引き出せるか?という実験をやっているところ
Cなら普通に書けるのだけどRustの方が色々ライブラリも豊富だから
アプリケーション化するとき楽かなあと思った次第
414デフォルトの名無しさん
2023/05/28(日) 00:34:40.65ID:druolHmT 詳しくないけどBLAS/LAPACKっていうの使えばいいんじゃないすか
そもそも行列計算するつもりなのかすら明言されていませんが
そもそも行列計算するつもりなのかすら明言されていませんが
415デフォルトの名無しさん
2023/05/28(日) 00:42:17.84ID:A/FYSLVX GPUは環境依存が激しいからなぁ。自分しか計算しないならそれでもかまわないかもしれないが
不特定の環境で動かすソフト用には使いづらい
不特定の環境で動かすソフト用には使いづらい
416デフォルトの名無しさん
2023/05/28(日) 02:13:41.27ID:TDETqQQX とりあえず行列を適当なブロックに区切ってそれをスレッドで計算、ブロックは転置したりしてキャッシュメモリに乗るように調整する
それを最終的にreduceする
こうすればマルチノードでも実行可能
>>414
それも使ってみるよ
numpyは内部でそれを使ってるらしいけどね
ただライブラリ使ってハイ終わりってのは味気ない
そしてやってることは俺が上に書いた技術以上のことは現状ない
それを最終的にreduceする
こうすればマルチノードでも実行可能
>>414
それも使ってみるよ
numpyは内部でそれを使ってるらしいけどね
ただライブラリ使ってハイ終わりってのは味気ない
そしてやってることは俺が上に書いた技術以上のことは現状ない
417デフォルトの名無しさん
2023/05/28(日) 18:01:21.95ID:ouzH40Jy 「The Rust Programming Language 日本語版」の日本語訳が微妙すぎる。自分は英語が苦手なのでできるだけ日本語で分かりやすくRustの使用について書いてあるドキュメントが読みたい。
だれか日本語的にもう少しちゃんとしたRustのドキュメントを作ってくれないだろうか?
だれか日本語的にもう少しちゃんとしたRustのドキュメントを作ってくれないだろうか?
418デフォルトの名無しさん
2023/05/28(日) 18:48:08.28ID:zw3BCEgM >>417
しっかり学びたいならオライリー本がいいよ
しっかり学びたいならオライリー本がいいよ
419デフォルトの名無しさん
2023/05/29(月) 09:19:07.96ID:THthJ00e 本家に追従できていないのは不備だがそれは単なるリソース不足だから訳者が増えないとどうしようもないし、
文章表現の中に学習に障害になるほどおかしいようなところがあるとは思えないので
分かり難いと感じる箇所は本当に翻訳由来なのか? と思う。
文章表現の中に学習に障害になるほどおかしいようなところがあるとは思えないので
分かり難いと感じる箇所は本当に翻訳由来なのか? と思う。
420デフォルトの名無しさん
2023/05/29(月) 11:00:00.74ID:0py62bgw >>417
日本語訳にそのような問題はない
日本語訳にそのような問題はない
421デフォルトの名無しさん
2023/05/29(月) 11:14:03.62ID:Ukb2D43H せめて具体的にどの部分かくらいは言ってくれないと
翻訳の問題なのか原文自体が417に合わなかったのかも分からんしなぁ
翻訳の問題なのか原文自体が417に合わなかったのかも分からんしなぁ
422デフォルトの名無しさん
2023/05/29(月) 11:31:04.88ID:FT7slsJB そんなレベルじゃないだろ
あの日本語訳を普通に読めるやつって普段どんな文章読んでんだよ
あの日本語訳を普通に読めるやつって普段どんな文章読んでんだよ
423デフォルトの名無しさん
2023/05/29(月) 11:43:48.21ID:NzRLe/wE424デフォルトの名無しさん
2023/05/29(月) 11:49:14.32ID:ZdZrmK0s 日本語訳は原文読むための補助くらいの感覚がいいと思う
std含むライブラリのドキュメントは基本的に全部英語だから英語苦手とか言ってられない
MDNみたいに片っ端から翻訳されるならいいけどそんなリソースないでしょ
std含むライブラリのドキュメントは基本的に全部英語だから英語苦手とか言ってられない
MDNみたいに片っ端から翻訳されるならいいけどそんなリソースないでしょ
425デフォルトの名無しさん
2023/05/29(月) 13:13:50.43ID:35XvpH6w The Book以外の入門書や入門方法を求めたり提案したりするのは構わないけど
The Book日本語訳自体はこのスレでは扱わないことになってるので
日本語訳の個別具体的な問題点についての話はGithubなど別の場所でどうぞ
The Book日本語訳自体はこのスレでは扱わないことになってるので
日本語訳の個別具体的な問題点についての話はGithubなど別の場所でどうぞ
426デフォルトの名無しさん
2023/05/29(月) 14:20:40.96ID:iwZJC5k1 所有権の複製ですか?( ・`ω・´)
427デフォルトの名無しさん
2023/05/29(月) 15:10:37.76ID:O87suSPk ぶっちゃけ非公式日本語訳より機械翻訳の方がずっとわかりやすいよ
ChatGPTのようにコンテキストを理解してくれるやつなら機械翻訳特有の不自然な言い回しはあっても誤訳は遥かに少ないから
ChatGPTのようにコンテキストを理解してくれるやつなら機械翻訳特有の不自然な言い回しはあっても誤訳は遥かに少ないから
428デフォルトの名無しさん
2023/05/29(月) 16:08:06.98ID:THthJ00e デタラメをハキハキとしゃべる人のほうが好人物に思われやすい。
人間は自然さ (流暢さ) を正しさと誤解するバグがある。
そのバグを突かれてるだけ。
人間は自然さ (流暢さ) を正しさと誤解するバグがある。
そのバグを突かれてるだけ。
429デフォルトの名無しさん
2023/05/29(月) 16:51:09.81ID:wn8XGwh5430デフォルトの名無しさん
2023/05/29(月) 17:04:22.45ID:4yvEjXWf いまだに1ページ目から誤訳盛り沢山
リソース不足というより能力不足とやる気不足
リソース不足というより能力不足とやる気不足
431デフォルトの名無しさん
2023/05/29(月) 18:20:04.93ID:Qw0OFueK432デフォルトの名無しさん
2023/05/29(月) 20:58:34.38ID:14JJPgZq 誤訳でも元の英語が大体思い浮かぶから問題なし
433デフォルトの名無しさん
2023/05/29(月) 21:18:54.45ID:ZWlF7ESV そうして生まれたのが複製おじさんや仮の所有権おじさん
434デフォルトの名無しさん
2023/05/29(月) 21:36:32.72ID:fyU8ZoqD435デフォルトの名無しさん
2023/05/29(月) 22:51:14.31ID:/vmU8chJ アハハ バカね!嘘つくならもっとマシな嘘ついてよね・・・
436デフォルトの名無しさん
2023/05/30(火) 00:04:02.24ID:/771ql8l 明瞭に「誤訳」だとわかるくらいの能力があるなら issue 立てるくらいしてくれよ。
437デフォルトの名無しさん
2023/05/30(火) 11:47:11.26ID:0Tfb139m このスレも日本語を禁止して英語だけにした方が話が早くね?
438デフォルトの名無しさん
2023/05/30(火) 13:54:02.69ID:m0YhPkee Good Idea desune〜
439デフォルトの名無しさん
2023/05/30(火) 21:02:05.18ID:H+AZ7xQ9 可変変数という摩訶不思議な用語・・・・・
440デフォルトの名無しさん
2023/05/30(火) 21:41:45.99ID:6nHNYy1Z おっさんになって覚えがわるいのか言語のせいなのかわからんがRust難しいなおい…
441デフォルトの名無しさん
2023/05/30(火) 21:44:11.50ID:wiPQkzC+ >>436
issue も pr も放置されてる現実を見ような
issue も pr も放置されてる現実を見ような
442デフォルトの名無しさん
2023/05/31(水) 12:34:12.39ID:mN2Hu6K3 ハードウェア依存のライブラリってのはパッケージ管理ソフトが扱いづらいんだよ。
cargoがそういうの取り込むとは思えん。
cargoがそういうの取り込むとは思えん。
443デフォルトの名無しさん
2023/05/31(水) 21:01:36.14ID:YdF423Zw >>440
どうだろ。 それは知識背景によると思う。
最初に学ぶ言語なら Rust はしんどいと思う。
ウェブ系でアプリケーションレイヤしか触ってないみたいな経歴でも Rust は異質かも?
C++ を充分に習得してるくらいなら Rust はそんなにハードルは高くないと思う。
まあ隅々まで理解しようと思うとなんだって大変だが及第点レベルまではドキュメントを読めば普通にわかる。
Rust の型システムは ML 系言語で実績があるものだからその感覚で使えるし、
唯一の面倒なところはライフタイムの管理くらいじゃないかなぁ。
そのライフタイムにしたところで参照より先にオブジェクトの寿命が終わったらダメという当たり前の根本ルールを
成立させられるように考えたら詳細を知らんでも自然に出来そう。
どうだろ。 それは知識背景によると思う。
最初に学ぶ言語なら Rust はしんどいと思う。
ウェブ系でアプリケーションレイヤしか触ってないみたいな経歴でも Rust は異質かも?
C++ を充分に習得してるくらいなら Rust はそんなにハードルは高くないと思う。
まあ隅々まで理解しようと思うとなんだって大変だが及第点レベルまではドキュメントを読めば普通にわかる。
Rust の型システムは ML 系言語で実績があるものだからその感覚で使えるし、
唯一の面倒なところはライフタイムの管理くらいじゃないかなぁ。
そのライフタイムにしたところで参照より先にオブジェクトの寿命が終わったらダメという当たり前の根本ルールを
成立させられるように考えたら詳細を知らんでも自然に出来そう。
444デフォルトの名無しさん
2023/05/31(水) 23:09:20.99ID:wcJUGwzN445デフォルトの名無しさん
2023/06/02(金) 15:23:50.48ID:xBaj60Ia446デフォルトの名無しさん
2023/06/02(金) 16:09:01.15ID:IDHD031H447デフォルトの名無しさん
2023/06/03(土) 20:44:16.65ID:oycqQ//J >>446
簡単なプログラムだと自分で書く範囲でトレイトで抽象化するのを避けると意外と避けたまま済んじゃうんだよね。
簡単なプログラムだと自分で書く範囲でトレイトで抽象化するのを避けると意外と避けたまま済んじゃうんだよね。
448デフォルトの名無しさん
2023/06/03(土) 23:52:21.19ID:JeZxIQ3D 新しい型を作らない程度の使い方だとトレイトの理解が不十分でも意外と何とかなっちゃうかも?
449デフォルトの名無しさん
2023/06/04(日) 08:41:55.61ID:rt4nzg3U みんなRust使って何開発してるの?
一通り勉強したけど用途が今の俺にはあまり縁が無い事に気付いた
普通のアプリならGC走って少しレスポンス遅い時があっても問題無い
Webフレームワークで早いっていっても色んな機能が無いだけ
あれもこれもそれもとフルスタックなら既存言語ので良い
結局仕事として使ったのってセンサー系だけ
確かにIoTセンサーには向いてると思った
一通り勉強したけど用途が今の俺にはあまり縁が無い事に気付いた
普通のアプリならGC走って少しレスポンス遅い時があっても問題無い
Webフレームワークで早いっていっても色んな機能が無いだけ
あれもこれもそれもとフルスタックなら既存言語ので良い
結局仕事として使ったのってセンサー系だけ
確かにIoTセンサーには向いてると思った
450デフォルトの名無しさん
2023/06/04(日) 09:02:25.58ID:QzSyb99b 毎年の調査結果にも出てるように
Rustを使っているのが多いのはWeb
低レベルhyperの上のフレームワーク本命axumが熱い
Rustを使っているのが多いのはWeb
低レベルhyperの上のフレームワーク本命axumが熱い
451デフォルトの名無しさん
2023/06/04(日) 09:11:57.71ID:rt4nzg3U やっぱりWebなん?
でもWebシステムだとアレコレソレって色々必要じゃん
足りてる?
言語云々じゃ無くてミドルウェア
でもWebシステムだとアレコレソレって色々必要じゃん
足りてる?
言語云々じゃ無くてミドルウェア
452デフォルトの名無しさん
2023/06/04(日) 09:19:10.72ID:MHoxWKtY 今どきのウェブはクラウドに載ってることが多い。
CPU やメモリを使った分だけコストがかかるのでレスポンスタイムが問題なくても
リソース消費量を削減すれば大幅なコスト削減が見込める。
ライブラリはなんだかんだでそこそこ充実してるし、
むしろ何か足りないものってある?
具体的にこれが足りないって言える?
CPU やメモリを使った分だけコストがかかるのでレスポンスタイムが問題なくても
リソース消費量を削減すれば大幅なコスト削減が見込める。
ライブラリはなんだかんだでそこそこ充実してるし、
むしろ何か足りないものってある?
具体的にこれが足りないって言える?
453デフォルトの名無しさん
2023/06/04(日) 09:34:57.16ID:rt4nzg3U そこまでガッツリとRustでWeb開発して無いから聞いてる感じかな
例えばASP.NET系でAzureAD認証だと設定しとけば勝手に認証機能付く
それこそアクセストークンがどうだのリフレッシュトークンがどうだの開発者は気にしない
勝手に内部でアクセストークンが期限切れならリフレッシュトークンで再取得して処理する
リフレッシュトークンが期限切れでも勝手に認証ページ飛んで認証したら続きから処理する
そういうミドルウェアあるんかな?
アレもコレも実装しなきゃってのは充実してない
C#ならNugetでライブラリ読み込んで設定用の数行記述したらそれで終わり
コレが充実
例えばASP.NET系でAzureAD認証だと設定しとけば勝手に認証機能付く
それこそアクセストークンがどうだのリフレッシュトークンがどうだの開発者は気にしない
勝手に内部でアクセストークンが期限切れならリフレッシュトークンで再取得して処理する
リフレッシュトークンが期限切れでも勝手に認証ページ飛んで認証したら続きから処理する
そういうミドルウェアあるんかな?
アレもコレも実装しなきゃってのは充実してない
C#ならNugetでライブラリ読み込んで設定用の数行記述したらそれで終わり
コレが充実
454デフォルトの名無しさん
2023/06/04(日) 09:59:54.28ID:6x+rjW9P そういうのはない
でも俺もwebで使ってる
でも俺もwebで使ってる
455デフォルトの名無しさん
2023/06/04(日) 10:02:25.33ID:QzSyb99b ASP.NETに全く興味ないので知らないが
そこまでやりたいことがはっきりしてるなら自分で調べればいいだけではないのか?
何をしようとしたが何ができなくて困っているのかをはっきりさせよ
そこまでやりたいことがはっきりしてるなら自分で調べればいいだけではないのか?
何をしようとしたが何ができなくて困っているのかをはっきりさせよ
456デフォルトの名無しさん
2023/06/04(日) 10:08:15.10ID:rt4nzg3U >>455
いやRustはWebには向いてないって思ってたから調べてさえいないよ
そして試してもいないから困ってもいない
最初に質問したように俺の感覚ではIoTとかみたいな変なタイミングでGCしちゃってみたいなのは困る場面ぐらいしか用途は無いと思ってた
だから何に使ってるのかを聞いた
コレが俺の知りたい事で既に書いてる
そこでWebで使ってると返ってきたから突っ込んで聞いてみただけよ
でもってやっぱり無理矢理使ってるだけって印象を更に深めた結果になってる
いやRustはWebには向いてないって思ってたから調べてさえいないよ
そして試してもいないから困ってもいない
最初に質問したように俺の感覚ではIoTとかみたいな変なタイミングでGCしちゃってみたいなのは困る場面ぐらいしか用途は無いと思ってた
だから何に使ってるのかを聞いた
コレが俺の知りたい事で既に書いてる
そこでWebで使ってると返ってきたから突っ込んで聞いてみただけよ
でもってやっぱり無理矢理使ってるだけって印象を更に深めた結果になってる
457デフォルトの名無しさん
2023/06/04(日) 10:08:26.66ID:M4a45GKO そりゃAzureADとかやりたいならC#で良くてわざわざRust使うこともないよ
でもWebのすべてがそういった要件を必要とするわけでもないし、Rustが向いてるとこに使えばいいってだけ
自分の分野で向いてるとこがないって判断ならそれでいいと思うけど
でもWebのすべてがそういった要件を必要とするわけでもないし、Rustが向いてるとこに使えばいいってだけ
自分の分野で向いてるとこがないって判断ならそれでいいと思うけど
458デフォルトの名無しさん
2023/06/04(日) 10:10:46.55ID:rt4nzg3U459デフォルトの名無しさん
2023/06/04(日) 10:12:15.45ID:E551jt0y 俺は実用のコードを専らC#で書いていて、コンピューターサイエンスやRustの言語は単なる修行だと思って学習してるんだけどさ
10年ぐらい前に廃れたような構造でWebアプリを作ろうとする人を見ると、「年をとっても学習を止めちゃだめだ」と改めて感じたね
10年ぐらい前に廃れたような構造でWebアプリを作ろうとする人を見ると、「年をとっても学習を止めちゃだめだ」と改めて感じたね
460デフォルトの名無しさん
2023/06/04(日) 10:13:17.36ID:rt4nzg3U ちなみに認証だけならRustでもあるぞ
本当に認証するだけで期限切れがどうとかリフレッシュトークンがどうとかは自分で書く感じ
最低限のライブラリは一応あるけどミドルウェアにはなってないって感じ
本当に認証するだけで期限切れがどうとかリフレッシュトークンがどうとかは自分で書く感じ
最低限のライブラリは一応あるけどミドルウェアにはなってないって感じ
461デフォルトの名無しさん
2023/06/04(日) 10:15:03.74ID:QzSyb99b462デフォルトの名無しさん
2023/06/04(日) 10:17:45.38ID:M4a45GKO あとはWASMも結構多いかもね
Amazon Prime Videoとかディズニーの動画配信はRustで書いてたはず
Amazon Prime Videoとかディズニーの動画配信はRustで書いてたはず
463デフォルトの名無しさん
2023/06/04(日) 10:18:49.32ID:rt4nzg3U >>459
そこは難しいんじゃね
開発者の問題ってより経営者の問題
新しい技術は良いけど補償出来るの?って感じやん
他社での実績は?ノウハウは?トラブった時に解決出来る?って感じ
企業がシステムに望むのは安定稼働
なので数年前から10年前の技術が現在の主流になる
実績があってノウハウがあって技術持った人が外部にも多いから求人も楽でコンサルしてくれる所も有る
こういう要素無いと稟議通らないでしょ
そこは難しいんじゃね
開発者の問題ってより経営者の問題
新しい技術は良いけど補償出来るの?って感じやん
他社での実績は?ノウハウは?トラブった時に解決出来る?って感じ
企業がシステムに望むのは安定稼働
なので数年前から10年前の技術が現在の主流になる
実績があってノウハウがあって技術持った人が外部にも多いから求人も楽でコンサルしてくれる所も有る
こういう要素無いと稟議通らないでしょ
464デフォルトの名無しさん
2023/06/04(日) 10:20:54.57ID:rt4nzg3U465デフォルトの名無しさん
2023/06/04(日) 10:28:10.92ID:xOmzDhxR 複おじ共々隔離スレにお帰りくださいませ
466デフォルトの名無しさん
2023/06/04(日) 10:29:49.43ID:MHoxWKtY 実行中のプロセスを実行中のままで別のサーバに移動するみたいなことも出来るしな。
負荷分散とか CDN みたいなことを考えたら WASM の利用価値は高いと思う。
ただ、逆に言えば大規模にクラウドを活用するという場合でないのなら
必要そうなものが最初から載ってるフレームワークが楽というのは確かにそう。
既存のシステムがあるなら既存のシステムでやればいい。
そうでないときが有るから新しいシステムが発明されるわけなんで。
負荷分散とか CDN みたいなことを考えたら WASM の利用価値は高いと思う。
ただ、逆に言えば大規模にクラウドを活用するという場合でないのなら
必要そうなものが最初から載ってるフレームワークが楽というのは確かにそう。
既存のシステムがあるなら既存のシステムでやればいい。
そうでないときが有るから新しいシステムが発明されるわけなんで。
467デフォルトの名無しさん
2023/06/04(日) 10:29:57.16ID:rt4nzg3U >>461
これビューエンジンは何使うの?
調べてみたけど貧相なテンプレート機能しかない感じだけどマジ?
Razorみたいにガッツリ中でコーディング出来ないの?
それともJavaScript系の何か使うの?
もしかしてコーディング量で言えばRustの方が少なくてJS書く方が多い?
マジ?
これビューエンジンは何使うの?
調べてみたけど貧相なテンプレート機能しかない感じだけどマジ?
Razorみたいにガッツリ中でコーディング出来ないの?
それともJavaScript系の何か使うの?
もしかしてコーディング量で言えばRustの方が少なくてJS書く方が多い?
マジ?
468デフォルトの名無しさん
2023/06/04(日) 10:31:29.87ID:rt4nzg3U >>466
動かしたまま別サーバーに移動ってAzureやらAWSじゃ普通に出来るやんw
動かしたまま別サーバーに移動ってAzureやらAWSじゃ普通に出来るやんw
469デフォルトの名無しさん
2023/06/04(日) 11:27:05.07ID:IpWrAX+2 画面周りなんかHTMLで書いた方がだいぶ楽だろ。
470デフォルトの名無しさん
2023/06/04(日) 11:45:54.52ID:2fzIybDH 延々と自演してて草
471デフォルトの名無しさん
2023/06/04(日) 12:12:07.87ID:rt4nzg3U >>469
これはただの馬鹿w
これはただの馬鹿w
472デフォルトの名無しさん
2023/06/04(日) 12:29:26.42ID:ckCJmvWc Rustってlinuxコマンドのリプレースを作るための言語だろ
473デフォルトの名無しさん
2023/06/04(日) 12:33:51.42ID:+vxIFgp1 いつからそんな地位を?w
474デフォルトの名無しさん
2023/06/04(日) 12:54:38.29ID:yBN53eMB 個人開発で技術力高いならコスト削減の効果があるが
エンタープライズは人件費の方が高いわけでコスト削減にそもそもならない
AWSとかマンパワーのある企業なら別だけど
このことをわかってるから、Web系企業は普通Rustを採用しない
基本はC、C++の代替言語だね
ランタイムが薄くてシステムプログラミング向け
そもそもWebサーバーをCで普通書かないから同様にRustも向いてないということになる
IT土方向け言語じゃなくてOS開発とか一部のエリート開発者向け言語
エンタープライズは人件費の方が高いわけでコスト削減にそもそもならない
AWSとかマンパワーのある企業なら別だけど
このことをわかってるから、Web系企業は普通Rustを採用しない
基本はC、C++の代替言語だね
ランタイムが薄くてシステムプログラミング向け
そもそもWebサーバーをCで普通書かないから同様にRustも向いてないということになる
IT土方向け言語じゃなくてOS開発とか一部のエリート開発者向け言語
475デフォルトの名無しさん
2023/06/04(日) 12:56:42.06ID:rt4nzg3U つまりRustでWeb云々言ってる奴は小規模開発の経験しか無い土方って訳か
そりゃ意見が合わん訳だ
そりゃ意見が合わん訳だ
476デフォルトの名無しさん
2023/06/04(日) 13:04:09.42ID:S8P2kIF5 Rustって戦争の準備じゃないの?
サイバー攻撃に備えましょうって事とか
爆弾搭載したドローン制御するのにとか
サイバー攻撃に備えましょうって事とか
爆弾搭載したドローン制御するのにとか
477デフォルトの名無しさん
2023/06/04(日) 13:06:29.56ID:QZNMuBNC RustでWebっていうとCloudflareみたいにHTTP直接扱うようなのも多いしな
PHPでWebアプリ、みたいな層はターゲットではないと思う
PHPでWebアプリ、みたいな層はターゲットではないと思う
478デフォルトの名無しさん
2023/06/04(日) 13:14:25.68ID:Yc44DpOp479デフォルトの名無しさん
2023/06/04(日) 13:18:05.37ID:rt4nzg3U480デフォルトの名無しさん
2023/06/04(日) 13:28:02.69ID:Yc44DpOp >>479
CDNやクラウドなど含めてWebサーバーシステムの新たなものはRust製
Rustの世界的な利用調査結果からみてもWeb方面での利用が多い
この分野で現在プログラミング言語のうち最も適しているのはRust
CDNやクラウドなど含めてWebサーバーシステムの新たなものはRust製
Rustの世界的な利用調査結果からみてもWeb方面での利用が多い
この分野で現在プログラミング言語のうち最も適しているのはRust
481デフォルトの名無しさん
2023/06/04(日) 13:38:27.69ID:M4a45GKO Webにも低レイヤ(HTTP3とかSSLみたいなライブラリ)から高レイヤ(Railsで作るようなWebアプリ)まであって
まとめてWebっていうから話が合わないんだろうね
高レイヤしかやってない人はそもそも低レイヤの存在自体知らなかったりするし
Rustに向いてるのは低レイヤ側で、Railsの代わりに使えるなんて言う人はいないんじゃないかな
まとめてWebっていうから話が合わないんだろうね
高レイヤしかやってない人はそもそも低レイヤの存在自体知らなかったりするし
Rustに向いてるのは低レイヤ側で、Railsの代わりに使えるなんて言う人はいないんじゃないかな
482デフォルトの名無しさん
2023/06/04(日) 13:39:46.54ID:R98I/Q0o 実際ウェブアプリを速攻で作ってみるというなら
Railsは何でもライブラリやドキュメントが揃ってるから楽
規模が大きくなるとRubyのせいで辛いことが増えてくるけど
最初から高度なこと目指してない人には
Rustから始めるのは現状では立ち上がりの苦労が多いとは思う
Railsは何でもライブラリやドキュメントが揃ってるから楽
規模が大きくなるとRubyのせいで辛いことが増えてくるけど
最初から高度なこと目指してない人には
Rustから始めるのは現状では立ち上がりの苦労が多いとは思う
483デフォルトの名無しさん
2023/06/04(日) 13:46:22.68ID:wTbdEHgi 俺はいわゆるwebアプリ作ってるよ
最近は重厚なフレームワークは避けられるでしょ
最近は重厚なフレームワークは避けられるでしょ
484デフォルトの名無しさん
2023/06/04(日) 13:58:39.33ID:s0MiwY6r 高レイヤwebは形式上プログラミング言語を使っただけのお絵描きや職人芸みたいなものであって、Rustユーザーが言うプログラミングとはかなり異なる世界
485デフォルトの名無しさん
2023/06/04(日) 13:59:58.35ID:YjKn3ZKa Webブラウザサイドで重い計算処理はRustで書いてWasmにやらせている
関連するUIやviewもWasmから
関連するUIやviewもWasmから
486デフォルトの名無しさん
2023/06/04(日) 15:22:57.88ID:6x+rjW9P 楽だという理由でwebで使っているよ
487デフォルトの名無しさん
2023/06/04(日) 15:26:41.80ID:rt4nzg3U488デフォルトの名無しさん
2023/06/04(日) 15:49:15.47ID:6x+rjW9P 平たくいうと品質を保つのが楽
スクリプト言語は作るのは楽だけど維持するのが苦痛すぎ
スクリプト言語は作るのは楽だけど維持するのが苦痛すぎ
489デフォルトの名無しさん
2023/06/04(日) 16:05:09.85ID:rt4nzg3U それってJavaとかC#でも良くね?
Rustである意味はないよね
Rustである意味はないよね
490デフォルトの名無しさん
2023/06/04(日) 16:06:21.66ID:6x+rjW9P なぜそう思うの?
491デフォルトの名無しさん
2023/06/04(日) 16:14:24.49ID:JwBn0wcZ Rustを活用できないクソ雑魚が使わない理由の正当化に必死っすな
492デフォルトの名無しさん
2023/06/04(日) 16:22:16.38ID:rt4nzg3U493デフォルトの名無しさん
2023/06/04(日) 16:23:34.73ID:rt4nzg3U494デフォルトの名無しさん
2023/06/04(日) 16:26:51.47ID:rt4nzg3U ちなみに俺のそもそもの質問は何に使ってるのかって話なんだから“活用”出来る場所を教えてくれよ
OSやら低レイヤWeb以外でさ
OSやら低レイヤWeb以外でさ
495デフォルトの名無しさん
2023/06/04(日) 16:40:10.04ID:ydxF9Sga RustのWebアプリ個人的にrailsより遥かにわかりやすいと思うんだけど
496デフォルトの名無しさん
2023/06/04(日) 16:46:31.48ID:rt4nzg3U シンプルな機能しか無いからだろ
497デフォルトの名無しさん
2023/06/04(日) 16:46:36.28ID:3zj6xUo2 エコシステム全体が代数的データ型前提で作られていて
型宣言だけでほぼAPIの使い方がわかる、みたいな体験は他言語ではちょっとないかもね
だから一度Rust書けるようになったら全部Rustでいいじゃんってなりがち
型宣言だけでほぼAPIの使い方がわかる、みたいな体験は他言語ではちょっとないかもね
だから一度Rust書けるようになったら全部Rustでいいじゃんってなりがち
498デフォルトの名無しさん
2023/06/04(日) 16:47:18.61ID:iNT4RVPT railsの分からなさは、どこのコードがいつ動いてるのか、分からんとこ
499デフォルトの名無しさん
2023/06/04(日) 16:55:53.89ID:6x+rjW9P500デフォルトの名無しさん
2023/06/04(日) 16:59:31.44ID:6x+rjW9P501デフォルトの名無しさん
2023/06/04(日) 17:00:30.76ID:CvW15b8Y 高レイヤーのWebアプリでもRustがつかわれるようになるよ
支配的にはならないけど
支配的にはならないけど
502デフォルトの名無しさん
2023/06/04(日) 18:26:31.67ID:R98I/Q0o ID:rt4nzg3Uからは議論や情報交換より
「論破」したい気持ちは強く伝わるな
「論破」したい気持ちは強く伝わるな
503デフォルトの名無しさん
2023/06/04(日) 18:31:18.83ID:rt4nzg3U 論破なんてどうでも良いです
504デフォルトの名無しさん
2023/06/04(日) 18:56:40.97ID:Yc44DpOp >>493
AWS (Amazon Web Service)など様々なものがRust製になっていってる現実を受け入れられない?
もしRust製である必要がないと主張したいならばどの言語を使うのがベストなのか明確にすべき
AWS (Amazon Web Service)など様々なものがRust製になっていってる現実を受け入れられない?
もしRust製である必要がないと主張したいならばどの言語を使うのがベストなのか明確にすべき
505デフォルトの名無しさん
2023/06/04(日) 19:11:40.33ID:rt4nzg3U506デフォルトの名無しさん
2023/06/04(日) 19:12:48.96ID:rt4nzg3U OS開発に向いてますって言われてもOS作る開発者は一般的じゃ無いやろ
507デフォルトの名無しさん
2023/06/04(日) 19:13:29.18ID:yBN53eMB >>478
言おうとしてたのはWebサーバーじゃなくてWebアプリね
で、企業でnginxやapacheみたいなHTTPサーバースクラッチで作ってる日本の企業ってどこにあるんだ?
Webアプリ作ってるのが大半だろ?
H2Oぐらいしか知らないけどあれはほぼ個人開発だしな
なんでかって言うと既にOSSで優秀なエンジニアが作ってるから、企業でそれをやるのは意味がないから
普通のエンジニアはこういう車両の再発明的なことを業務ではやらない
だからWeb系企業にRustは普通採用されないと言ってるの
一部のエリート向けって言ったのはまさにこういうこと
nginxもredisもCで書かれてるけどほぼ一人のエリートよって作成されてるからな
Linuxカーネル書いてる人もエリートしかいないだろ
そう言う人向けの言語
言おうとしてたのはWebサーバーじゃなくてWebアプリね
で、企業でnginxやapacheみたいなHTTPサーバースクラッチで作ってる日本の企業ってどこにあるんだ?
Webアプリ作ってるのが大半だろ?
H2Oぐらいしか知らないけどあれはほぼ個人開発だしな
なんでかって言うと既にOSSで優秀なエンジニアが作ってるから、企業でそれをやるのは意味がないから
普通のエンジニアはこういう車両の再発明的なことを業務ではやらない
だからWeb系企業にRustは普通採用されないと言ってるの
一部のエリート向けって言ったのはまさにこういうこと
nginxもredisもCで書かれてるけどほぼ一人のエリートよって作成されてるからな
Linuxカーネル書いてる人もエリートしかいないだろ
そう言う人向けの言語
508デフォルトの名無しさん
2023/06/04(日) 19:13:51.05ID:rt4nzg3U 議論が出来ない馬鹿の良くある事
極論で語る
これが出てきたら無能確定
極論で語る
これが出てきたら無能確定
509デフォルトの名無しさん
2023/06/04(日) 19:36:06.85ID:yBN53eMB でその一部のエリートは通常C、C++を使いたがる
新しい言語自体には興味がなくメモリを自分で管理できる自信があるから
Rustが輝くのはAWSとか一部のエリート企業に限られるだろうね
企業でやる場合はメモリ安全は重要だろう
俺たちIT土方はまずこういった低レイヤーやミドルウェアを触れる機会がないので間違ってもイキってWebアプリとかでRust使わない方がいいと思うよ
ほとんどのケースで向いてないし、企業でもまず採用されないから
新しい言語自体には興味がなくメモリを自分で管理できる自信があるから
Rustが輝くのはAWSとか一部のエリート企業に限られるだろうね
企業でやる場合はメモリ安全は重要だろう
俺たちIT土方はまずこういった低レイヤーやミドルウェアを触れる機会がないので間違ってもイキってWebアプリとかでRust使わない方がいいと思うよ
ほとんどのケースで向いてないし、企業でもまず採用されないから
510デフォルトの名無しさん
2023/06/04(日) 19:55:56.27ID:Yc44DpOp >>505
Webにそんな区別はない
HTTPベースで通信するものがWebと呼ばれておりAWSのWもその略
Rustでも他の言語と同様にHTTPは自分で実装する必要がなく利用するだでよい
低レイヤという区別をするならばRustではhyperというHTTPを担うライブラリが低レイヤと呼ばれている
だからRustでもその低レイヤ部分を自分で実装する必要はない
さらにその低レイヤhyperの上に作られた様々なフレームワークがある
つまり低レイヤ部分のhyperを自分で直接使う必要はなく各フレームワークを用いてWebのプログラムを書くことができる
したがってRustでは低レイヤ部分を自作もできるが既に標準的なものがあり
フレームワークも自作できるが既に様々なものがあり自分で作らなくても利用可能
Rustを否定しているあなたがRustの代わりに使うべきだと考えているプログラミング言語は何ですか?
>>509
Rustを否定しているあなたもRustの代わりに使うべきだと考えているプログラミング言語は何ですか?
Webにそんな区別はない
HTTPベースで通信するものがWebと呼ばれておりAWSのWもその略
Rustでも他の言語と同様にHTTPは自分で実装する必要がなく利用するだでよい
低レイヤという区別をするならばRustではhyperというHTTPを担うライブラリが低レイヤと呼ばれている
だからRustでもその低レイヤ部分を自分で実装する必要はない
さらにその低レイヤhyperの上に作られた様々なフレームワークがある
つまり低レイヤ部分のhyperを自分で直接使う必要はなく各フレームワークを用いてWebのプログラムを書くことができる
したがってRustでは低レイヤ部分を自作もできるが既に標準的なものがあり
フレームワークも自作できるが既に様々なものがあり自分で作らなくても利用可能
Rustを否定しているあなたがRustの代わりに使うべきだと考えているプログラミング言語は何ですか?
>>509
Rustを否定しているあなたもRustの代わりに使うべきだと考えているプログラミング言語は何ですか?
511デフォルトの名無しさん
2023/06/04(日) 22:38:12.29ID:rt4nzg3U 何でRust否定してる事になってるの?
妄想酷くねw
長々と書いてるけど的外れなんだよ
妄想酷くねw
長々と書いてるけど的外れなんだよ
512デフォルトの名無しさん
2023/06/04(日) 22:52:44.00ID:Lgm9jhwY 結局なにがしたいのかがわからん
相手にしてるやつも
相手にしてるやつも
513デフォルトの名無しさん
2023/06/04(日) 22:57:08.43ID:YjKn3ZKa 速さ省メモリに保守性の良さからRustがベストで間違いない
514デフォルトの名無しさん
2023/06/05(月) 01:02:48.45ID:G39bRhEA この人の中ではRustの適用範囲は決まってて
他の人が範囲外の事例出すと否定のための否定を
したいだけなのが明白だから相手しても不毛
他の人が範囲外の事例出すと否定のための否定を
したいだけなのが明白だから相手しても不毛
515デフォルトの名無しさん
2023/06/05(月) 01:11:33.27ID:9wHuhZD9516デフォルトの名無しさん
2023/06/05(月) 01:41:08.29ID:FV749zD+ まとめて隔離スレに帰れゴミカスども
517デフォルトの名無しさん
2023/06/05(月) 07:49:28.36ID:GAWgQYcM >>468
ライブマイグレーションって今でもあまり普通じゃないと思うけど。冗長化構成とって切り替えが多いだろ。
ライブマイグレーションって今でもあまり普通じゃないと思うけど。冗長化構成とって切り替えが多いだろ。
518デフォルトの名無しさん
2023/06/05(月) 11:19:07.49ID:9Zk1qYqb >>514
違うかな
逆に言うとC#でもOSは書けるし実際に有る
でもソレって無理矢理感有るでしょ
Rustも同じでやろうと思えば出来る
でもそれってRustである意味は無いよねって話
高速で動く必要があって
GCが走って一時的にレスポンスが遅くなる事態が不味い
って場面がRustの出番って事だと思うんだけどね
WebアプリについてはまさしくRustであるある必要は無い
せめて他言語のフレームワーク並みに各種ミドルウェアが充実してるならまだしもその分野では貧相としか言えない
だからこそ流行ってないとも言える
違うかな
逆に言うとC#でもOSは書けるし実際に有る
でもソレって無理矢理感有るでしょ
Rustも同じでやろうと思えば出来る
でもそれってRustである意味は無いよねって話
高速で動く必要があって
GCが走って一時的にレスポンスが遅くなる事態が不味い
って場面がRustの出番って事だと思うんだけどね
WebアプリについてはまさしくRustであるある必要は無い
せめて他言語のフレームワーク並みに各種ミドルウェアが充実してるならまだしもその分野では貧相としか言えない
だからこそ流行ってないとも言える
519デフォルトの名無しさん
2023/06/05(月) 11:31:56.47ID:G39bRhEA >>518
そうだねすごいね
そうだねすごいね
520デフォルトの名無しさん
2023/06/05(月) 12:29:52.32ID:AdIugMi7 自分で考えて調べて判断を下せない人にはRustは向かない
良い悪いじゃなく適性と置かれている環境の違い
良い悪いじゃなく適性と置かれている環境の違い
521デフォルトの名無しさん
2023/06/05(月) 12:41:59.19ID:GjYw3Sbx DiscordでGC云々ってのもGoのアップデートで解消できる内容だしな
(Go作者のRuss Coxさん曰く)
Webでいちいちスタックだとかヒープだとかメモリの所有権だとか考えながらコードを書くメリットは別にそこまでないよな
nginxみたいなミドルウェア的な立ち位置のWebサーバーを作るならともかく
システムプログラミング言語だからあくまでもC, C++の代替言語
GoやJavaとは全く別用途の言語
(Go作者のRuss Coxさん曰く)
Webでいちいちスタックだとかヒープだとかメモリの所有権だとか考えながらコードを書くメリットは別にそこまでないよな
nginxみたいなミドルウェア的な立ち位置のWebサーバーを作るならともかく
システムプログラミング言語だからあくまでもC, C++の代替言語
GoやJavaとは全く別用途の言語
522デフォルトの名無しさん
2023/06/05(月) 13:16:05.91ID:dGVU/GMJ 15年くらい前の考え方だね
523デフォルトの名無しさん
2023/06/05(月) 13:34:19.17ID:UReP7Es5 >>518
C#である必要もない
C#である必要もない
524デフォルトの名無しさん
2023/06/05(月) 13:43:03.69ID:UReP7Es5 >>521
あるよ
ここまで外部データを扱う分野もない
つまり内部でメモリアロケーションが頻発する
メモリをどうアロケートするか?で天と地の差が出るのが現代のマシンのアーキテクチャだ
キャッシュメモリに全部乗せるようにプログラムを書くのは今や常識
いちいちヒープからメモリを確保していたらページフォルトで尋常じゃないスピード劣化を招く
ましてやGCなどそんなプログラムを遅くするようなもんよく採用したな?というレベル
Webこそスタックとヒープとメモリアロケーションを明確に制御できるべき分野
あるよ
ここまで外部データを扱う分野もない
つまり内部でメモリアロケーションが頻発する
メモリをどうアロケートするか?で天と地の差が出るのが現代のマシンのアーキテクチャだ
キャッシュメモリに全部乗せるようにプログラムを書くのは今や常識
いちいちヒープからメモリを確保していたらページフォルトで尋常じゃないスピード劣化を招く
ましてやGCなどそんなプログラムを遅くするようなもんよく採用したな?というレベル
Webこそスタックとヒープとメモリアロケーションを明確に制御できるべき分野
525デフォルトの名無しさん
2023/06/05(月) 13:46:53.65ID:UReP7Es5 >>509
何度も言うがスタック、ヒープ、ベクター化(SIMD)、キャッシュメモリなどを意識することは一昔前よりはるかに有効になっている
キャッシュメモリの速度が比べ物にならないくらい速くなっているからだ
むしろ今こそスタックとヒープを意識して「メモリをちゃんと使い回す」ことを意識すべきなんだよ
所有権ってのはマシンアーキテクチャの視点で見ると
メモリ領域をうまく使い回すための技術ともいえる
余計なアロケーションを防ぎメモリリークを防ぎ
ページフォルトを防ぎベクター化を容易にする
このような現代的なプログラミング技術についてまともに解説されることは少ないのだが
優れたプログラマは常に意識している
何度も言うがスタック、ヒープ、ベクター化(SIMD)、キャッシュメモリなどを意識することは一昔前よりはるかに有効になっている
キャッシュメモリの速度が比べ物にならないくらい速くなっているからだ
むしろ今こそスタックとヒープを意識して「メモリをちゃんと使い回す」ことを意識すべきなんだよ
所有権ってのはマシンアーキテクチャの視点で見ると
メモリ領域をうまく使い回すための技術ともいえる
余計なアロケーションを防ぎメモリリークを防ぎ
ページフォルトを防ぎベクター化を容易にする
このような現代的なプログラミング技術についてまともに解説されることは少ないのだが
優れたプログラマは常に意識している
526デフォルトの名無しさん
2023/06/05(月) 13:51:56.62ID:UReP7Es5 「Rustが速い」と言われてるのはこのようなメモリの使い方が優れているから結果として速くなっているというのが事実
これは他の言語が捨てた部分だ
他の言語は「メモリなんて富豪的でいいっしょ」と言う姿勢を貫いていた
しかし現代のアーキテクチャにおいては他の言語が捨てた部分こそが高速化の肝だったのだ
Rustの初期のメンバーがここまで意識できてたかはわからないが
メモリ安全を追求した結果現代アーキテクチャにとって最適な形になったのは偶然ではない
これは他の言語が捨てた部分だ
他の言語は「メモリなんて富豪的でいいっしょ」と言う姿勢を貫いていた
しかし現代のアーキテクチャにおいては他の言語が捨てた部分こそが高速化の肝だったのだ
Rustの初期のメンバーがここまで意識できてたかはわからないが
メモリ安全を追求した結果現代アーキテクチャにとって最適な形になったのは偶然ではない
527デフォルトの名無しさん
2023/06/05(月) 14:02:53.03ID:v+V2Ynpr >>521
TypeScriptで型レベルプログラミングに慣れた人たちは「せめて直和型くらいは欲しい」となってしまい
移行先としてGoもJavaも対象外になって、パフォーマンスが必要なくてもRustに行くケースがよくある
Goがもっとリッチな言語機能を目指してればこういう層は全部取れたんだろうけど
TypeScriptで型レベルプログラミングに慣れた人たちは「せめて直和型くらいは欲しい」となってしまい
移行先としてGoもJavaも対象外になって、パフォーマンスが必要なくてもRustに行くケースがよくある
Goがもっとリッチな言語機能を目指してればこういう層は全部取れたんだろうけど
528デフォルトの名無しさん
2023/06/05(月) 14:21:53.12ID:qHQdZEB1 アレな人とアレを複製する人のアレな議論からは
反面教師とする以外に何も得るものがないな
反面教師とする以外に何も得るものがないな
529デフォルトの名無しさん
2023/06/05(月) 14:27:59.36ID:/xaXR3Rr >>521
かつてはウェブの世界だと細々と切り詰めて効率化するよりスケールアウトのしやすさのほうが重要視されてた。
プログラムを改良して性能を倍に延ばすよりもサーバの数を増やしたほうが安上がりだから。
プログラムの改良はやればやるだけ性能が伸びるというわけでなくて、
どうせどこかに上限があるなら数で補えるような設計のほうが良い。
それがかつてのウェブの思想だが、クラウドが前提の世界になって一変した。
スケールアウトを簡単に出来るインフラが整ってしまったんだ。
サービスを構築する側は CPU とメモリを使いたい分だけ金を払えばスケールアウトは当たり前に出来るものになった。
サーバの準備が投資ではなく消費になってしまったとも言える。
ま、経営者にとってみれば消費は減らしたいもんだ。
故に今はミクロ的な実行効率のほうを上げようとする圧力が発生している。
そんなわけで Rust を採用する動機はある。
もちろんサービスの規模が小さいならそんなに手間かける割に合わんということも多いだろうけど、
ウェブでも Rust を採用する動機は存在するんだよ。
かつてはウェブの世界だと細々と切り詰めて効率化するよりスケールアウトのしやすさのほうが重要視されてた。
プログラムを改良して性能を倍に延ばすよりもサーバの数を増やしたほうが安上がりだから。
プログラムの改良はやればやるだけ性能が伸びるというわけでなくて、
どうせどこかに上限があるなら数で補えるような設計のほうが良い。
それがかつてのウェブの思想だが、クラウドが前提の世界になって一変した。
スケールアウトを簡単に出来るインフラが整ってしまったんだ。
サービスを構築する側は CPU とメモリを使いたい分だけ金を払えばスケールアウトは当たり前に出来るものになった。
サーバの準備が投資ではなく消費になってしまったとも言える。
ま、経営者にとってみれば消費は減らしたいもんだ。
故に今はミクロ的な実行効率のほうを上げようとする圧力が発生している。
そんなわけで Rust を採用する動機はある。
もちろんサービスの規模が小さいならそんなに手間かける割に合わんということも多いだろうけど、
ウェブでも Rust を採用する動機は存在するんだよ。
530デフォルトの名無しさん
2023/06/05(月) 14:30:23.16ID:SGaNfCKj おっさん、Rustは学歴勝負の言語なんだよ
高卒様はC#スレに帰ってくれ
高卒様はC#スレに帰ってくれ
531デフォルトの名無しさん
2023/06/05(月) 14:36:08.40ID:0sUVinjo Rustの言語機能の充実さが書きやすくて堅牢でメンテもしやすいね
メモリ管理はほぼ自動で慣れだけの問題で書くこともできるし
さらに踏み込んで頑張ることもできて幅広い利用者に適してる
Rustの唯一の弱点は慣れるまでの時間が他の言語より長いことだけど
慣れてしまえば消える弱点なので現存するベストなプログラミング言語かな
メモリ管理はほぼ自動で慣れだけの問題で書くこともできるし
さらに踏み込んで頑張ることもできて幅広い利用者に適してる
Rustの唯一の弱点は慣れるまでの時間が他の言語より長いことだけど
慣れてしまえば消える弱点なので現存するベストなプログラミング言語かな
532デフォルトの名無しさん
2023/06/05(月) 14:45:53.25ID:DZ7CuRre 結局C++とRustってどっちが良いの? 3traits
https://mevius.5ch.net/test/read.cgi/tech/1683154196/
https://mevius.5ch.net/test/read.cgi/tech/1683154196/
533デフォルトの名無しさん
2023/06/05(月) 14:47:01.66ID:DZ7CuRre 他言語との比較は隔離スレでお願いします
534デフォルトの名無しさん
2023/06/05(月) 15:11:38.38ID:vRd9123b ID変えないやつはNGしやすくていいけど
複オジはID変えてしかも複数人のふりして
同じ内容の長文を繰り返し繰り返し書くから
めちゃくちゃウザい
複オジはID変えてしかも複数人のふりして
同じ内容の長文を繰り返し繰り返し書くから
めちゃくちゃウザい
535デフォルトの名無しさん
2023/06/05(月) 15:34:05.37ID:AvaxKdII >>492
具体的にRust以外のどの言語?
具体的にRust以外のどの言語?
536デフォルトの名無しさん
2023/06/05(月) 16:59:55.04ID:4ssR4odd 単発NGを推奨する
537デフォルトの名無しさん
2023/06/05(月) 17:04:06.04ID:GjYw3Sbx Webって何に対しても上限決まってないから動的確保が基本でヒープに確保しまくるだろ
Rustですらヒープ使うしかないのに何いってんだこいつ
Rustですらヒープ使うしかないのに何いってんだこいつ
538デフォルトの名無しさん
2023/06/05(月) 17:19:13.55ID:4NoCfZlh どういう書き込みに対するレスかわからないが
一般的にはヒープの使用をゼロというより最小限にすることが可能な言語かどうか
バックエンドをマイクロサービス化した場合は想定外のリクエストは来ないので更に最小化できる
いずれにせよGCのある言語は論外
一般的にはヒープの使用をゼロというより最小限にすることが可能な言語かどうか
バックエンドをマイクロサービス化した場合は想定外のリクエストは来ないので更に最小化できる
いずれにせよGCのある言語は論外
539デフォルトの名無しさん
2023/06/05(月) 17:34:34.25ID:DZ7CuRre540デフォルトの名無しさん
2023/06/05(月) 18:09:21.14ID:dww0BWyZ 論外坊を相手にしてはいけない、メモリ確保と解放を繰り返す原始的なダサい構造より搭載メモリに応じてアリーナ管理するほうが理にかなってる。Rustを使ってるのにアロケーターの自作や変更を考えたことのない子は最小の意味が分かっていない
541デフォルトの名無しさん
2023/06/05(月) 18:15:03.73ID:8ZF5QBOp ガベージコレクションのある言語はそれができず非効率だもんな
542デフォルトの名無しさん
2023/06/05(月) 18:29:07.02ID:tOuh49Mt 書き心地のよさや近代的なエコシステムが好きで使ってる
チームで使うと品質を安定させやすい
実行時もリソースも安定させやすい
パフォーマンス面ではどちらかとコストの低い方を選択するよう努力するするが、そこまで突き詰めて考えないよ
チームで使うと品質を安定させやすい
実行時もリソースも安定させやすい
パフォーマンス面ではどちらかとコストの低い方を選択するよう努力するするが、そこまで突き詰めて考えないよ
543デフォルトの名無しさん
2023/06/05(月) 18:33:55.89ID:/S79/CE3 Rustの良い面が多面的であり
どの面を重視するかは人によって様々だが
Rustに行き着く点では同じだ
どの面を重視するかは人によって様々だが
Rustに行き着く点では同じだ
544デフォルトの名無しさん
2023/06/05(月) 18:54:42.77ID:M00yb3VA まーたクソみたいな複オジ節が連投されてんなw
545デフォルトの名無しさん
2023/06/05(月) 20:04:46.68ID:5pPw8Ntr546デフォルトの名無しさん
2023/06/05(月) 20:12:05.32ID:sHX0h5A1 ML系言語やればいいよ思うよ
547デフォルトの名無しさん
2023/06/05(月) 20:50:22.82ID:UzHiRmXo 先日のStableのリリースでやっとOnceCellが安定化されたんですね。
Lazyはまだっぽいけど嬉しい。
Lazyはまだっぽいけど嬉しい。
548デフォルトの名無しさん
2023/06/06(火) 02:17:44.23ID:puQ29V2U 去年から始めたけど、ここ2~3年で標準化された機能が必須に感じるので、最適なタイミングで始められたなと思う
549デフォルトの名無しさん
2023/06/06(火) 07:22:24.29ID:o6YEf8qO550デフォルトの名無しさん
2023/06/06(火) 07:54:49.95ID:8OPdxEUp 書き心地も良いが開発効率の高さだな
スクリプトで済むのはスクリプト言語を使うとして
プログラミングするならRust一択となった
スクリプトで済むのはスクリプト言語を使うとして
プログラミングするならRust一択となった
551デフォルトの名無しさん
2023/06/06(火) 10:54:53.70ID:6c57W+Lm 何の数字を比べて 開発効率が上がったと言ってるんだ?
552デフォルトの名無しさん
2023/06/06(火) 11:12:32.78ID:o1s33Rlj ありがとうRustAnalyzer
553デフォルトの名無しさん
2023/06/06(火) 19:31:13.22ID:mkQOe4X2 >>545
それは反対だ。副作用がない関数コールでOptionやResultはオーバースペックで邪魔でしかない、Rustだって-> i32とか出来るのは理由があるからで意味のないResultラッピングしてしまうのは邪悪でしかない。
それは反対だ。副作用がない関数コールでOptionやResultはオーバースペックで邪魔でしかない、Rustだって-> i32とか出来るのは理由があるからで意味のないResultラッピングしてしまうのは邪悪でしかない。
554デフォルトの名無しさん
2023/06/06(火) 19:35:17.52ID:5BE6aCuJ555デフォルトの名無しさん
2023/06/06(火) 21:19:28.43ID:n1ZdC4n5556デフォルトの名無しさん
2023/06/06(火) 22:39:17.85ID:lWt7Neg4 >>553
絶対にエラーが起きない場合も含めてインターフェースの戻り型を統一しなきゃいけない時に、
Resultで統一することで非効率になるのを恐れているのだと思うけど、
エラーが起きない場合の実装のみエラー型をstd::convert::Infallibleつまり戻り型をResult<Xxx, Infallible>とすれば、
最適化されるため気にせずResultラッピングのコードを書いても大丈夫だよ
絶対にエラーが起きない場合も含めてインターフェースの戻り型を統一しなきゃいけない時に、
Resultで統一することで非効率になるのを恐れているのだと思うけど、
エラーが起きない場合の実装のみエラー型をstd::convert::Infallibleつまり戻り型をResult<Xxx, Infallible>とすれば、
最適化されるため気にせずResultラッピングのコードを書いても大丈夫だよ
557デフォルトの名無しさん
2023/06/07(水) 02:16:00.81ID:pdPmNlas Rustは文字列やネット系のライブラリが充実しているため、書き易いと
感じるのかもしれないが、言語自体の書き心地は悪い。
感じるのかもしれないが、言語自体の書き心地は悪い。
558デフォルトの名無しさん
2023/06/07(水) 02:25:13.42ID:VU6rdBvm >>557
スクリプト以外でRustより書き易い言語ある?
スクリプト以外でRustより書き易い言語ある?
559デフォルトの名無しさん
2023/06/07(水) 02:41:53.93ID:pdPmNlas >>558
色々有るな。例えばJavaやC#とか。
色々有るな。例えばJavaやC#とか。
560デフォルトの名無しさん
2023/06/07(水) 02:52:36.10ID:bLVp0x6K Javaは言語が古すぎ
機能不足で書くのが苦痛
今どきの言語を知っていてJavaを書きやすいと言う人はいない
機能不足で書くのが苦痛
今どきの言語を知っていてJavaを書きやすいと言う人はいない
561デフォルトの名無しさん
2023/06/07(水) 03:13:16.86ID:PASEDR7I お前ら本当にシステム屋か?
“描きやすい”ってのは人それぞれで定義が曖昧やん
なぜその定義や認識の統一をせずに議論始めるん?
“描きやすい”ってのは人それぞれで定義が曖昧やん
なぜその定義や認識の統一をせずに議論始めるん?
562デフォルトの名無しさん
2023/06/07(水) 03:15:24.35ID:PASEDR7I 例えばだけどJavaは古くてというが昔からJavaやってるやつは慣れから書きやすいと感じる
Java歴15年
Rust歴1年
とかで比べたらどっちに軍配上がるか分かるやん
Java歴15年
Rust歴1年
とかで比べたらどっちに軍配上がるか分かるやん
563デフォルトの名無しさん
2023/06/07(水) 03:23:10.65ID:2dySsIAz 議論を成立させるのが無理なの分かってるから隔離スレでやれっつってるんですよ
564デフォルトの名無しさん
2023/06/07(水) 03:35:20.85ID:PASEDR7I まあ言語スレで具体的なコードも出さずに議論しちゃう馬鹿ばかりだしな
せめて○○言語じゃこう書くけどRustではこう書ける
だから書きやすいってぐらいはして欲しいもんだ
せめて○○言語じゃこう書くけどRustではこう書ける
だから書きやすいってぐらいはして欲しいもんだ
565デフォルトの名無しさん
2023/06/07(水) 03:35:24.21ID:mYje0a9y >>562
それは言語の書きやすさではなく
その個人が慣れか不慣れかだろ
言語の書きやすさはその言語に十分慣れた上で
言語の機能が不足していて書きにくい点がないかどうかなどで決まる
その比較例だとJavaとRust両方に慣れた人たちにとって全員がJavaに❌をつける
それは言語の書きやすさではなく
その個人が慣れか不慣れかだろ
言語の書きやすさはその言語に十分慣れた上で
言語の機能が不足していて書きにくい点がないかどうかなどで決まる
その比較例だとJavaとRust両方に慣れた人たちにとって全員がJavaに❌をつける
566デフォルトの名無しさん
2023/06/07(水) 04:14:00.36ID:PASEDR7I 別の言語を長くやってても面倒臭いなって思う点は出てくるじゃん
例えばJavaやってるとC#のあの機能欲しい
なんでJavaには追加されないんだろとかさ
例えばJavaやってるとC#のあの機能欲しい
なんでJavaには追加されないんだろとかさ
567デフォルトの名無しさん
2023/06/07(水) 04:15:46.17ID:mYje0a9y だから全員がJavaに✕をつける
568デフォルトの名無しさん
2023/06/07(水) 10:36:40.93ID:o7otWeXk >>562
わかるやん、てあなたが勝手に言ってるだけですやんw
わかるやん、てあなたが勝手に言ってるだけですやんw
569デフォルトの名無しさん
2023/06/07(水) 15:06:17.70ID:3M1fBRd0 でも、多数決では、Rustが最下位なんだよな。
570デフォルトの名無しさん
2023/06/07(水) 15:44:42.75ID:3M1fBRd0 Rustの問題点を指摘すると、「それはあなたが ・・・」
「馬鹿だから」「老害だから」「じじいだから」「化石みたいな人だから」
みたいな事言って人いるけど、それは
「若くて頭のいい人々が使うんだから、老害/馬鹿は黙っとけって」ことになるが、
それでは一般人に普及する言語には成れないであろう。
そもそも、高級言語の目的とは、簡単に安全にやりたいことが出来ると言う
ことであり、しかも、一部の人を除いては簡単にも思えないようなものであっては
普及は遠い。
「馬鹿だから」「老害だから」「じじいだから」「化石みたいな人だから」
みたいな事言って人いるけど、それは
「若くて頭のいい人々が使うんだから、老害/馬鹿は黙っとけって」ことになるが、
それでは一般人に普及する言語には成れないであろう。
そもそも、高級言語の目的とは、簡単に安全にやりたいことが出来ると言う
ことであり、しかも、一部の人を除いては簡単にも思えないようなものであっては
普及は遠い。
571デフォルトの名無しさん
2023/06/07(水) 15:54:04.41ID:3M1fBRd0572デフォルトの名無しさん
2023/06/07(水) 16:20:31.76ID:QsxM8200 書きやすいか否かという話より、rustは意外にタイピング量は多い思想は考え直してほしい。
std::fmtなどの「::」だとか引数名・変数の後の型の「:」だとか、むろんmutも、戻り値の「->」もなぜ引数の「:」と戻り値の「->」を同じにしなかったのか?思想面が分かる人に教えてほしい。
ほかにもなぜマクロ呼び出しに「!」をいちいち付けるのかとか、関数はfnやpubで省略しているのに?アトリビュートも#[xxx]と異様に見える。なぜ@xxxでは駄目だったのか?
まあセミコロンはC/C++からの移行を重視したのだろうけど。言語をディスってる訳じゃなく完全論破されることを願う
std::fmtなどの「::」だとか引数名・変数の後の型の「:」だとか、むろんmutも、戻り値の「->」もなぜ引数の「:」と戻り値の「->」を同じにしなかったのか?思想面が分かる人に教えてほしい。
ほかにもなぜマクロ呼び出しに「!」をいちいち付けるのかとか、関数はfnやpubで省略しているのに?アトリビュートも#[xxx]と異様に見える。なぜ@xxxでは駄目だったのか?
まあセミコロンはC/C++からの移行を重視したのだろうけど。言語をディスってる訳じゃなく完全論破されることを願う
573デフォルトの名無しさん
2023/06/07(水) 16:59:17.90ID:MyTs/b4R 細かい構文は互換性やらが重視されて一定の思想が徹底してないことも多いでしょうよ
暇ならissue掘り返してみればいい
とりあえず::はC++由来でattributeはC#由来
暇ならissue掘り返してみればいい
とりあえず::はC++由来でattributeはC#由来
574デフォルトの名無しさん
2023/06/07(水) 18:36:58.20ID:Rjy197CJ Rustが難しいと感じるのは経験不足だと思うわ
困難に立ち向かった経験が少ない
困難に立ち向かった経験が少ない
575デフォルトの名無しさん
2023/06/07(水) 18:50:18.58ID:JMx9Ekkp >>572
マクロ呼び出しに「!」を付けるのはコンパイラと人間の両方がマクロ呼び出しをすぐに識別できるようにするため
コンパイラの実装方法によっては無くすことは不可能ではないだろうけど効率が悪くなるし実装も難しくなる
最初は俺も無いほうが良いと思ってたけど
「!」をつけないといけないから不必要にマクロを作らなくて
結果的にメンテしやすいコードにつながってるので考え方変わった
マクロ呼び出しに「!」を付けるのはコンパイラと人間の両方がマクロ呼び出しをすぐに識別できるようにするため
コンパイラの実装方法によっては無くすことは不可能ではないだろうけど効率が悪くなるし実装も難しくなる
最初は俺も無いほうが良いと思ってたけど
「!」をつけないといけないから不必要にマクロを作らなくて
結果的にメンテしやすいコードにつながってるので考え方変わった
576デフォルトの名無しさん
2023/06/07(水) 19:54:20.54ID:6MUTDsao >>572
タッチタイピングできない人?
もしくはVSCode使ってない人?
文字数なんて気にするやつ初めて見たぞ
::はC++由来
->はHaskell由来だよ
マクロの!や?はおそらくRuby由来だが別の意味で使ってる
#[]はわからん
タッチタイピングできない人?
もしくはVSCode使ってない人?
文字数なんて気にするやつ初めて見たぞ
::はC++由来
->はHaskell由来だよ
マクロの!や?はおそらくRuby由来だが別の意味で使ってる
#[]はわからん
577デフォルトの名無しさん
2023/06/07(水) 20:20:10.95ID:MyTs/b4R >>576
煽るなら最低限公式ドキュメントの内容はすべて頭に入れてからにしたまえ
https://doc.rust-lang.org/reference/influences.html
>>572が言いたいのはTypeScriptのごとくfn f(x: T): Uとかけないのは何故かということだろう
trait boundとの曖昧性が生まれる状況があるのかなと思ったが、ちょっと具体例が思いつかないので違うかも
煽るなら最低限公式ドキュメントの内容はすべて頭に入れてからにしたまえ
https://doc.rust-lang.org/reference/influences.html
>>572が言いたいのはTypeScriptのごとくfn f(x: T): Uとかけないのは何故かということだろう
trait boundとの曖昧性が生まれる状況があるのかなと思ったが、ちょっと具体例が思いつかないので違うかも
578デフォルトの名無しさん
2023/06/07(水) 21:01:38.64ID:MyTs/b4R というかRustは元々めっちゃタイプ数気にする系言語だったんだよねむしろ
1.0以前にはreturnがretだった頃もあった
今日まで残るfnとかimplとか、比較的新しいdynもそうだが
実際かなり略したがりな言語ではあると思うよ
1.0以前にはreturnがretだった頃もあった
今日まで残るfnとかimplとか、比較的新しいdynもそうだが
実際かなり略したがりな言語ではあると思うよ
579デフォルトの名無しさん
2023/06/07(水) 22:03:46.79ID:juXVB+W2 >>572
あらゆる言語で同じことが言えるが
基本的な文法記述方法を考え直してほしいと要求しても
今から変わるわけがないし変わったら利用者が困る
無意味な破壊的な要求をしていることになる
タイピング量が多いといってもわずかな誤差であり
ほとんどの記述方法は既存のメジャーな言語で実績があるものと同じ
現在のメモリCPU開発環境からも余裕で許容される範囲でもある
個人的に気に入らないと主張しているのと変わらない
あらゆる言語で同じことが言えるが
基本的な文法記述方法を考え直してほしいと要求しても
今から変わるわけがないし変わったら利用者が困る
無意味な破壊的な要求をしていることになる
タイピング量が多いといってもわずかな誤差であり
ほとんどの記述方法は既存のメジャーな言語で実績があるものと同じ
現在のメモリCPU開発環境からも余裕で許容される範囲でもある
個人的に気に入らないと主張しているのと変わらない
580デフォルトの名無しさん
2023/06/07(水) 22:23:55.97ID:gvoW4qh7 記述方法が気に入らないのであれば
自分で変換器を作ればいいだけなのでは?
自分で変換器を作ればいいだけなのでは?
581デフォルトの名無しさん
2023/06/07(水) 22:42:25.08ID:JMx9Ekkp >>577
>TypeScriptのごとくfn f(x: T): Uとかけないのは何故かということだろう
基本的には視認性の問題
TypeScriptも関数の型を明記するときはファットアローを使ってる
>TypeScriptのごとくfn f(x: T): Uとかけないのは何故かということだろう
基本的には視認性の問題
TypeScriptも関数の型を明記するときはファットアローを使ってる
582デフォルトの名無しさん
2023/06/07(水) 23:12:17.03ID:Y4/HSuwV 気に入らない部分くらいあってもいいだろうに過剰に攻撃的な人は落ち着いて欲しい
どんな人もある程度は興味があってきてるんだろうから建設的に話をしましょうよ
気に入らない部分も背景知ると納得できたりするしそういう情報知るの楽しいから書いてくれてる人はありがたい
どんな人もある程度は興味があってきてるんだろうから建設的に話をしましょうよ
気に入らない部分も背景知ると納得できたりするしそういう情報知るの楽しいから書いてくれてる人はありがたい
583デフォルトの名無しさん
2023/06/07(水) 23:20:10.61ID:C+WmTRhv 戻り値型指定の->には returns や maps to 的なニュアンスを感じられるから個人的には好き
584デフォルトの名無しさん
2023/06/07(水) 23:44:37.64ID:ZHL7BfYm ->ってでも実際は不要でしょ?
無駄
無駄
585デフォルトの名無しさん
2023/06/07(水) 23:52:00.89ID:PbTa+35j >>572が、Rustの思想を考え直して欲しい、と攻撃的にスタートしたのはマズかったかもね。
戻り値の型指定がなぜ「:」ではなく「->」なのかと、素直に質問すればよかったかも。
理由は視認性の良さに加えて、C++の関数の戻り型の後置記法「-> int」と、同じ記法にしたためでしょう。
例えばCarbonでは「-> i32」と、Rustと同じになります。
戻り値の型指定がなぜ「:」ではなく「->」なのかと、素直に質問すればよかったかも。
理由は視認性の良さに加えて、C++の関数の戻り型の後置記法「-> int」と、同じ記法にしたためでしょう。
例えばCarbonでは「-> i32」と、Rustと同じになります。
586デフォルトの名無しさん
2023/06/07(水) 23:58:55.09ID:KhstQSkV int foo() {} C/C++前置
auto foo() -> int {} C++後置
fn foo() -> i32 {} Carbon
fn foo() -> i32 {} Rust
auto foo() -> int {} C++後置
fn foo() -> i32 {} Carbon
fn foo() -> i32 {} Rust
587デフォルトの名無しさん
2023/06/08(木) 02:28:36.11ID:EE2g7bKF Cと似ても似つかない。
588デフォルトの名無しさん
2023/06/08(木) 02:35:35.53ID:EE2g7bKF 嘘つき大国アメリカには、良いソフトウェアは作れない。
独占によって維持するのみ。
独占によって維持するのみ。
589デフォルトの名無しさん
2023/06/08(木) 02:36:59.06ID:EE2g7bKF 日本人を大量虐殺したことを反省せず、今度はウクライナとロシア人を
殺している。
そんな国に良いものは作りえない。ずるするのみ。
殺している。
そんな国に良いものは作りえない。ずるするのみ。
590デフォルトの名無しさん
2023/06/08(木) 02:48:48.98ID:EE2g7bKF 平均寿命がアメリカは日本より5歳も低いことをみんな知らない。
そんな後進国を先進国扱いしている。
そんな後進国を先進国扱いしている。
591デフォルトの名無しさん
2023/06/08(木) 02:53:24.84ID:EE2g7bKF 特に、githubなんかは、わけの分からんソフトを作ってる人に別の左翼が
寄付する。左翼は相互扶助で虚構世界を作るのが好き。一般需要が全く無い
ソフトウェアに大金が寄付される。
このように、左翼は日本やアメリカにあってもお互いに虚構を流し合うことで
脳内で言論統制し合い虚構世界を生きている。
寄付する。左翼は相互扶助で虚構世界を作るのが好き。一般需要が全く無い
ソフトウェアに大金が寄付される。
このように、左翼は日本やアメリカにあってもお互いに虚構を流し合うことで
脳内で言論統制し合い虚構世界を生きている。
592デフォルトの名無しさん
2023/06/08(木) 03:00:18.36ID:EE2g7bKF アメリカのやり口:
・需要が無いのに無理やり使わせる。
・不便なのに無料化することで構造上それしか存在しない状態になっている。
・無料化することでどんなに粗悪品でも対抗製品が現れ得ないからである。
・からくりは、検索エンジンの広告料で大金を永遠と稼ぐことで、ソフトを
無料化し、検索エンジンを持たない通常企業の参入を永久阻止しているのである。
・需要が無いのに無理やり使わせる。
・不便なのに無料化することで構造上それしか存在しない状態になっている。
・無料化することでどんなに粗悪品でも対抗製品が現れ得ないからである。
・からくりは、検索エンジンの広告料で大金を永遠と稼ぐことで、ソフトを
無料化し、検索エンジンを持たない通常企業の参入を永久阻止しているのである。
593デフォルトの名無しさん
2023/06/08(木) 03:40:00.34ID:aft4Kt1Y うーん
やはりワッチョイなしスレは放棄する他ないか
やはりワッチョイなしスレは放棄する他ないか
594デフォルトの名無しさん
2023/06/08(木) 03:57:30.29ID:VBjeYwpm595デフォルトの名無しさん
2023/06/08(木) 04:06:08.75ID:EE2g7bKF596デフォルトの名無しさん
2023/06/08(木) 04:07:01.06ID:EE2g7bKF アメリカは基本ルールが守れて無いのに、Rustの仕様なんて語る権利が無い。
597デフォルトの名無しさん
2023/06/08(木) 04:10:05.28ID:EE2g7bKF 要は、アメリカは人殺しが刑務所で書いた本が売れて億万長者になっているようなものだ。
598デフォルトの名無しさん
2023/06/08(木) 07:29:01.96ID:ABj73STK C言語の戻り型の前置記述だとC++で色々と不便なことがわかり
C++11では戻り型を"->"により後置できるようになった
ラムダ式でも戻り型を指定する時に同じく"->"で後置する
つまりC++11の時点で"->"による戻り型の後置記法が導入されている
そして>>586のようにRustとCarbonもC++11の"->"を踏襲している
C++11では戻り型を"->"により後置できるようになった
ラムダ式でも戻り型を指定する時に同じく"->"で後置する
つまりC++11の時点で"->"による戻り型の後置記法が導入されている
そして>>586のようにRustとCarbonもC++11の"->"を踏襲している
599デフォルトの名無しさん
2023/06/08(木) 08:51:14.64ID:9HUG8roo 他言語とか視認性置いておいてもfn f(x: T): Uは一貫性ないんだよな
Tはxの型だがUはfの型ではないわけで
:の左辺が名前で右辺が型という原則に従うなら fn f: (x: T) -> U となるはず
Tはxの型だがUはfの型ではないわけで
:の左辺が名前で右辺が型という原則に従うなら fn f: (x: T) -> U となるはず
600デフォルトの名無しさん
2023/06/08(木) 08:52:05.56ID:u/DD3jzo うちはインターンの女子大生すらRust使い始めたわ
ペチパーには辛い世界になっていくだろうな
ペチパーには辛い世界になっていくだろうな
601デフォルトの名無しさん
2023/06/08(木) 09:22:42.20ID:c1TL2iD8 >>572
お爺ちゃん🥺
お爺ちゃん🥺
602デフォルトの名無しさん
2023/06/08(木) 13:15:19.62ID:5t64h36a >>599
左辺が式だと思えば筋は通るやん?
左辺が式だと思えば筋は通るやん?
603デフォルトの名無しさん
2023/06/08(木) 14:14:27.48ID:Iro3x2NJ604デフォルトの名無しさん
2023/06/08(木) 14:32:27.10ID:5t64h36a 隔離スレにコピペしたからあとはあっちで頼むわ
605デフォルトの名無しさん
2023/06/08(木) 15:00:38.73ID:ybwEaSV3606デフォルトの名無しさん
2023/06/08(木) 20:13:04.97ID:rV/cB3of 関数型言語から拾っただけで深い考えはないだろ
関数型言語は 引数 -> 戻り値 とか 引数 -> 引数 -> 戻り値でカリー化したら引数の数が減ったりするので意味は通じるけど…
関数型言語は 引数 -> 戻り値 とか 引数 -> 引数 -> 戻り値でカリー化したら引数の数が減ったりするので意味は通じるけど…
607デフォルトの名無しさん
2023/06/08(木) 20:15:30.41ID:4tjPz2+B オレオレ一貫性w
全然一貫してない
全然一貫してない
608デフォルトの名無しさん
2023/06/08(木) 20:45:27.43ID:ABj73STK 「-> 戻り型」を批判してる人は先に採用したC++に対しても批判しているの?
ML系で何十年も使われて来た実績と視認性の良さからベストな記法
ML系で何十年も使われて来た実績と視認性の良さからベストな記法
609デフォルトの名無しさん
2023/06/08(木) 21:09:50.06ID:6OsjtmDb ML系は関数呼び出しにかっこを使わないし
関数定義と型注釈を分けて書くし
Cスタイルとはだいぶ違う文法体系だよね
同じ記号を使っているという以外に共通点はないと思うよ
そしてx: TはPascalスタイルの型の付け方なんですね
TypeScriptの他にもScala、Kotlin、HaxeなどがPascalに従って(x: T): Uのように戻り値型注釈をつけます
参考までに
関数定義と型注釈を分けて書くし
Cスタイルとはだいぶ違う文法体系だよね
同じ記号を使っているという以外に共通点はないと思うよ
そしてx: TはPascalスタイルの型の付け方なんですね
TypeScriptの他にもScala、Kotlin、HaxeなどがPascalに従って(x: T): Uのように戻り値型注釈をつけます
参考までに
610デフォルトの名無しさん
2023/06/09(金) 02:12:57.64ID:vRGkF7ww sigplan noticeではindentationとlexical syntaxの話は禁止だったw
611デフォルトの名無しさん
2023/06/09(金) 17:20:52.23ID:3c0vm8Dw syntaxで言うならライフタイムのsyntaxは今でも違和感あるわ。
具体的に使うわけでもない変数を定義するようなのはどうにかならんかったのか。
具体的に使うわけでもない変数を定義するようなのはどうにかならんかったのか。
612デフォルトの名無しさん
2023/06/09(金) 18:41:37.13ID:2zdGi9Wu613デフォルトの名無しさん
2023/06/09(金) 18:57:57.14ID:2zdGi9Wu 変数として使ってないわけじゃないな
具体的なインスタンスが生成されるときに具体的なライフタイムが代入されると思うべきか
具体的なインスタンスが生成されるときに具体的なライフタイムが代入されると思うべきか
614デフォルトの名無しさん
2023/06/09(金) 18:59:26.79ID:FpUIfFmd 型パラメータは変数じゃありません
615デフォルトの名無しさん
2023/06/09(金) 19:10:21.66ID:9O24uU1k 違和感あるようにしてるんだぞ
Bad Partsはあえて汚くなるような構文を選んでる
Bad Partsはあえて汚くなるような構文を選んでる
616デフォルトの名無しさん
2023/06/09(金) 19:42:24.19ID:9O24uU1k617デフォルトの名無しさん
2023/06/09(金) 20:20:27.29ID:JRGzkE91 rustのstructってなんで中身をカンマで区切るんですか?
C/C++/C#/Swiftはセミコロンだし、影響受けたとされるhaskellの直積型はスペースですよね、デフォルトでメモリースペースが最小になるように再配置されるから?
でもそれだと配列のように直線的に配置されるように感じてしまう気がするのだが
C/C++/C#/Swiftはセミコロンだし、影響受けたとされるhaskellの直積型はスペースですよね、デフォルトでメモリースペースが最小になるように再配置されるから?
でもそれだと配列のように直線的に配置されるように感じてしまう気がするのだが
618デフォルトの名無しさん
2023/06/09(金) 20:32:17.49ID:j7wYaK9P 内容の列挙だからカンマの方が自然だと思うけどセミコロンが使われがちなのは
構文解析(エラー復帰)しやすいからなのかな
let Point { x; y; } = p;
だと気持ち悪いからパターンマッチと関係あるかもしれない
構文解析(エラー復帰)しやすいからなのかな
let Point { x; y; } = p;
だと気持ち悪いからパターンマッチと関係あるかもしれない
619デフォルトの名無しさん
2023/06/09(金) 22:10:43.24ID:JRGzkE91 >>618
なるほど?構文解析が楽だからという理由はある程度は納得できるが、自然と感じる理由が個人的な嗜好で何となくなのかな?
ほかにカンマを使う場面は分割代入(destructuring)があるので、structを分解するときに対称性が良いからなのかと考えたり
なるほど?構文解析が楽だからという理由はある程度は納得できるが、自然と感じる理由が個人的な嗜好で何となくなのかな?
ほかにカンマを使う場面は分割代入(destructuring)があるので、structを分解するときに対称性が良いからなのかと考えたり
620デフォルトの名無しさん
2023/06/10(土) 08:59:06.95ID:gJM3u8Zc cでエンディアン確認するとき
unsigned long x = 0x12345678;
for( int i = 0; i < sizeof(long); i++ ){
unsigned long x = 0x12345678;
for( int i = 0; i < sizeof(long); i++ ){
621デフォルトの名無しさん
2023/06/10(土) 09:07:47.23ID:gJM3u8Zc cでエンディアン確認するとき
unsigned long x = 0x12345678;
unsigned char *px = (unsingned char *)&x;
for( int i = 0; i < sizeof(long); i++ ){
fprintf(stderr, "%X ", *px++ );
}
fprintf(stderr, "\n" );
てのをrustならどー書いたらええの>
unsigned long x = 0x12345678;
unsigned char *px = (unsingned char *)&x;
for( int i = 0; i < sizeof(long); i++ ){
fprintf(stderr, "%X ", *px++ );
}
fprintf(stderr, "\n" );
てのをrustならどー書いたらええの>
622デフォルトの名無しさん
2023/06/10(土) 09:44:12.87ID:NYFdP8Rk それと同じこともできるけど、単にエンディアン知りたいだけならこんな感じで
if cfg!(target_endian = "big") {
// big endian
} else {
// little endian
}
if cfg!(target_endian = "big") {
// big endian
} else {
// little endian
}
623デフォルトの名無しさん
2023/06/10(土) 09:56:44.54ID:gJM3u8Zc >>622
エンディアンと書いたのは一例で
実際用意された型にバイトデータがどう格納されてるかを知りたい
ポインタキャストどー書くの?
forとかも変なことなってるけど
条件判断と goto ラベルさえあれば繰り返しは実行できるんだが,
rustにC/C++にあるgotoとかラベルってあるの?
エンディアンと書いたのは一例で
実際用意された型にバイトデータがどう格納されてるかを知りたい
ポインタキャストどー書くの?
forとかも変なことなってるけど
条件判断と goto ラベルさえあれば繰り返しは実行できるんだが,
rustにC/C++にあるgotoとかラベルってあるの?
624デフォルトの名無しさん
2023/06/10(土) 10:05:08.69ID:NYFdP8Rk >>623
その場合はtransmuteかな
https://doc.rust-lang.org/std/mem/fn.transmute.html
gotoはない
ラベルはネストしたループから脱出するためのはある
その場合はtransmuteかな
https://doc.rust-lang.org/std/mem/fn.transmute.html
gotoはない
ラベルはネストしたループから脱出するためのはある
625デフォルトの名無しさん
2023/06/10(土) 10:07:35.39ID:n814OtyQ >>621
let x: i32 = 0x12345678;
// 直訳すると生ポインタなのでunsafe
use std::mem::size_of;
let mut px = &x as *const i32 as *const u8;
for _i in 0..size_of::<i32>() {
print!("{:x} ", unsafe { *px });
unsafe { px = px.add(1); };
}
println!();
// byte列とみなすメソッドを使うとsafe
for b in x.to_ne_bytes() {
print!("{b:x} ");
}
println!();
let x: i32 = 0x12345678;
// 直訳すると生ポインタなのでunsafe
use std::mem::size_of;
let mut px = &x as *const i32 as *const u8;
for _i in 0..size_of::<i32>() {
print!("{:x} ", unsafe { *px });
unsafe { px = px.add(1); };
}
println!();
// byte列とみなすメソッドを使うとsafe
for b in x.to_ne_bytes() {
print!("{b:x} ");
}
println!();
626デフォルトの名無しさん
2023/06/10(土) 10:13:46.29ID:udyVxmRJ エンディアン君を、ウッカリ助平と命名したい....
627デフォルトの名無しさん
2023/06/10(土) 10:25:42.92ID:gJM3u8Zc628デフォルトの名無しさん
2023/06/10(土) 10:26:30.43ID:gJM3u8Zc629デフォルトの名無しさん
2023/06/10(土) 10:35:25.62ID:n814OtyQ to_ne_bytesのneはnative endianの意味でleやbeもある
neを使ってlittle endian環境ならば
assert_eq!(0x12345678_u32.to_ne_bytes(), [0x78, 0x56, 0x34, 0x12]);
assert_eq!(0x12345678, u32::from_ne_bytes([0x78, 0x56, 0x34, 0x12]));
neを使ってlittle endian環境ならば
assert_eq!(0x12345678_u32.to_ne_bytes(), [0x78, 0x56, 0x34, 0x12]);
assert_eq!(0x12345678, u32::from_ne_bytes([0x78, 0x56, 0x34, 0x12]));
630デフォルトの名無しさん
2023/06/10(土) 15:12:50.25ID:PsHn2Fx3 テキストデータを画像にレンダリングして最終的に2値モノクロ画像を得たいんだけど
今だとどんなクレートを使うのがいいかな?
フォントレンダラはfont-rs・・・は放置されているしからfontdueとか?
2値化に影響するディザリングのオプションとかを指定できるとありがたい
今だとどんなクレートを使うのがいいかな?
フォントレンダラはfont-rs・・・は放置されているしからfontdueとか?
2値化に影響するディザリングのオプションとかを指定できるとありがたい
631デフォルトの名無しさん
2023/06/10(土) 15:48:41.24ID:UQF9pDDb rusttypeとかab_glyphってのがダウンロード数多いみたい
632デフォルトの名無しさん
2023/06/12(月) 12:58:17.77ID:oql3AWnL ただの思いつきだが、CやC++はメモリセーフではないだろ。ってことはプログラム中で結構無駄なメモリを消費してたりしないの?Rustはそこの所最適化されてるから究極的にはRustの方がCやC++よりも高速に動作するのでは?
633デフォルトの名無しさん
2023/06/12(月) 13:04:11.65ID:RXOqFmSk ?
634デフォルトの名無しさん
2023/06/12(月) 14:15:17.58ID:krlNNb+N ちょっと何言ってるかわからない
635デフォルトの名無しさん
2023/06/12(月) 16:35:03.90ID:snPhjFNJ メモリセーフかどうかと
メモリを無駄使いしてるかどうかに直接の関係はない
メモリを無駄使いしてるかどうかに直接の関係はない
636デフォルトの名無しさん
2023/06/12(月) 16:47:01.05ID:/yLe7ykR メモリ安全性とメモリの利用効率に関係はないが、
安全性のために導入したライフタイム管理が最適化に影響する部分がないとは言えない。
依存関係が明瞭だからエイリアス解析がしやすく、
結果的に効果的に最適化しやすい可能性は高い。
しかし実行時でないと安全なアクセスであるかどうか検出が不可能な場合もあるから
それも込みで考えると Rust のほうがやや不利であると言える要素もある。
全体的な性能は互角か Rust のほうがやや遅いくらいじゃないの。 知らんけど。
性能が互角くらいでより安全ならそのほうがいいじゃろ。
安全性のために導入したライフタイム管理が最適化に影響する部分がないとは言えない。
依存関係が明瞭だからエイリアス解析がしやすく、
結果的に効果的に最適化しやすい可能性は高い。
しかし実行時でないと安全なアクセスであるかどうか検出が不可能な場合もあるから
それも込みで考えると Rust のほうがやや不利であると言える要素もある。
全体的な性能は互角か Rust のほうがやや遅いくらいじゃないの。 知らんけど。
性能が互角くらいでより安全ならそのほうがいいじゃろ。
637デフォルトの名無しさん
2023/06/12(月) 18:28:52.16ID:EF0TFJgA メモリ安全にするために過剰なコピーや長いライフタイムになる実装をしてしまうことがあり、それをコンパイラがガードしてあげるからルールに従って書いてねってのがRustの思想だと思う。
逆に適当に書いても安全にするし出来るだけメモリ効率も配慮するよってのが他のGC言語
逆に適当に書いても安全にするし出来るだけメモリ効率も配慮するよってのが他のGC言語
638デフォルトの名無しさん
2023/06/12(月) 18:44:13.30ID:A48fS+G5 そんな話一般論で語れる訳ないぞ
コードを出しな?
コードを出しな?
639デフォルトの名無しさん
2023/06/12(月) 20:02:49.65ID:dpH2J6Rw640デフォルトの名無しさん
2023/06/12(月) 21:33:36.66ID:/yLe7ykR641デフォルトの名無しさん
2023/06/12(月) 21:39:50.33ID:MIVgoZU9 意味のない議論がほんと好きだねー
642デフォルトの名無しさん
2023/06/12(月) 21:44:05.58ID:G7kVZgOF コードが一切出てこないのが本当不思議
643デフォルトの名無しさん
2023/06/12(月) 21:45:00.87ID:dpH2J6Rw644デフォルトの名無しさん
2023/06/13(火) 11:32:39.43ID:dzy+ZzAL >>639
>そのRustがやや不利でやや遅いと思っている具体的なケースのコードを出してごらん
ややどころか、大幅に遅くなるケースもあるぞ。
俺はこれ以上指摘しない。自分で分かるかどうかが技術力の試金石だ。
>そのRustがやや不利でやや遅いと思っている具体的なケースのコードを出してごらん
ややどころか、大幅に遅くなるケースもあるぞ。
俺はこれ以上指摘しない。自分で分かるかどうかが技術力の試金石だ。
645デフォルトの名無しさん
2023/06/13(火) 11:35:33.48ID:dzy+ZzAL また、
「Rustは、どんな場合でも、効率を下げずに少数の関数の中に unsafe 箇所を閉じ込められる」
というのも嘘。
「Rustは、どんな場合でも、効率を下げずに少数の関数の中に unsafe 箇所を閉じ込められる」
というのも嘘。
646デフォルトの名無しさん
2023/06/13(火) 11:43:16.69ID:+SMK6i6B ならお前はこれ以上指摘すんなよ未来に渡って
647デフォルトの名無しさん
2023/06/13(火) 11:53:41.84ID:+a/cV++y >>644
デタラメ屋さんまた来たのか
デタラメ屋さんまた来たのか
648デフォルトの名無しさん
2023/06/13(火) 14:38:11.20ID:oknE//uE649デフォルトの名無しさん
2023/06/13(火) 18:50:01.53ID:t3PG4UqW >>648
ぷw
ぷw
650デフォルトの名無しさん
2023/06/13(火) 23:11:29.90ID:/Z2+rRnG >>648
だいぶ頭良いプログラマーはこんなとこ来ねーからw
だいぶ頭良いプログラマーはこんなとこ来ねーからw
651デフォルトの名無しさん
2023/06/14(水) 17:49:14.80ID:yJueN6KQ 可変長のバイナリデータを扱う場合の型ってやっぱvec<u8>あたり?
独自の型を定義する以外に他によさそうな型って何かあるかな
独自の型を定義する以外に他によさそうな型って何かあるかな
652デフォルトの名無しさん
2023/06/14(水) 20:22:43.85ID:kb1QmHED >>651
Trait std::io::Readのrequired methodが
fn read(&mut self, buf: &mut [u8]) -> Result<usize>;
であるように&[u8]でアクセスできれば何でもよい
そのうち可変で最もお手軽なのはVec<u8>
Trait std::io::Readのprovided methodの一つ
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize> { ... }
もVec<u8>の可変参照を渡す仕様
Trait std::io::Readのrequired methodが
fn read(&mut self, buf: &mut [u8]) -> Result<usize>;
であるように&[u8]でアクセスできれば何でもよい
そのうち可変で最もお手軽なのはVec<u8>
Trait std::io::Readのprovided methodの一つ
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize> { ... }
もVec<u8>の可変参照を渡す仕様
653デフォルトの名無しさん
2023/06/14(水) 20:28:50.68ID:MiDa+oME よくわからないんだけど
ライフタイムの例でよく出てくる関数の引数a,bを同じライフタイムの指定にするってやつは
どちらが選ばれるか分からないから使わないほうも長い方の寿命に合わせて残しておきますと言う解釈でいいの?
ライフタイムの例でよく出てくる関数の引数a,bを同じライフタイムの指定にするってやつは
どちらが選ばれるか分からないから使わないほうも長い方の寿命に合わせて残しておきますと言う解釈でいいの?
654デフォルトの名無しさん
2023/06/14(水) 20:57:15.56ID:VhTmt6N9 >>653
その例となってる関数のコードくらいは書けよ
その例となってる関数のコードくらいは書けよ
655デフォルトの名無しさん
2023/06/14(水) 23:11:40.84ID:kb1QmHED たぶんこういう例のことかな
fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() >= s2.len() { s1 } else { s2 }
}
ここである呼び出しの時に
s1が'staticでs2が'x (!= 'static)だったとすると
'aとして寿命が短い'xの方が採用される
ただしこれはcovarianceである&Tの場合の話
invarianceである&mut Tの場合は逆になるので注意
fn longest<'a>(s1: &'a str, s2: &'a str) -> &'a str {
if s1.len() >= s2.len() { s1 } else { s2 }
}
ここである呼び出しの時に
s1が'staticでs2が'x (!= 'static)だったとすると
'aとして寿命が短い'xの方が採用される
ただしこれはcovarianceである&Tの場合の話
invarianceである&mut Tの場合は逆になるので注意
656デフォルトの名無しさん
2023/06/14(水) 23:20:37.20ID:yJueN6KQ657デフォルトの名無しさん
2023/06/14(水) 23:43:12.09ID:kb1QmHED 構造体とか要unsafeとか何をしたいのかわからないが
上限を決めてもよい用途ならば
ヒープを使わずともArrayVec<u8, CAPACITY>がスタック上のみで動く
上限を決めてもよい用途ならば
ヒープを使わずともArrayVec<u8, CAPACITY>がスタック上のみで動く
658デフォルトの名無しさん
2023/06/14(水) 23:49:13.19ID:yJueN6KQ データの一部だけ可変長とかブロック構造の個数が
可変(ブロックの中身は固定)とかね
可変(ブロックの中身は固定)とかね
659デフォルトの名無しさん
2023/06/14(水) 23:54:41.98ID:MiDa+oME staticは消滅しないから実質参考にならんので無視して短い方をaとする
これは対象が2つだからであって
static 1
その他 2
ならその他2の長い方になると言う考えでいいのかな?
これは対象が2つだからであって
static 1
その他 2
ならその他2の長い方になると言う考えでいいのかな?
660デフォルトの名無しさん
2023/06/14(水) 23:58:17.85ID:CT9YbjmP もう何言ってんだよ
661デフォルトの名無しさん
2023/06/14(水) 23:59:42.49ID:hllwji0O >>655
ライフタイムに関しては&も&mutもcovariantなので違いはありません
ライフタイムに関しては&も&mutもcovariantなので違いはありません
662デフォルトの名無しさん
2023/06/15(木) 00:08:38.46ID:wST3qwRf Tに対して&Tはcovariant
Tに対して&mut Tはinvariant
Tに対して&mut Tはinvariant
663デフォルトの名無しさん
2023/06/15(木) 08:25:03.26ID:9aol5+Qr >>547
OptionとOnceCellの違い
&Tを得ることをgetと呼ぶようになった
【Option】fn as_ref(&self) -> Option<&T>
【OnceCell】fn get(&self) -> Option<&T>
&mut Tを得ることをget_mutと呼ぶようになった
【Option】fn as_mut(&mut self) -> Option<&mut T>
【OnceCell】fn get_mut(&mut self) -> Option<&mut T>
空にしてTを得ることをtakeと呼ぶのは同じ
【Option】fn take(&mut self) -> Option<T>
【OnceCell】fn take(&mut self) -> Option<T>
空(default)を作成することをnewと呼ぶこともできるようになった
【Option】fn default() -> Option<T>
【OnceCell】fn default() -> OnceCell<T> または fn new() -> OnceCell<T>
OptionとOnceCellの違い
&Tを得ることをgetと呼ぶようになった
【Option】fn as_ref(&self) -> Option<&T>
【OnceCell】fn get(&self) -> Option<&T>
&mut Tを得ることをget_mutと呼ぶようになった
【Option】fn as_mut(&mut self) -> Option<&mut T>
【OnceCell】fn get_mut(&mut self) -> Option<&mut T>
空にしてTを得ることをtakeと呼ぶのは同じ
【Option】fn take(&mut self) -> Option<T>
【OnceCell】fn take(&mut self) -> Option<T>
空(default)を作成することをnewと呼ぶこともできるようになった
【Option】fn default() -> Option<T>
【OnceCell】fn default() -> OnceCell<T> または fn new() -> OnceCell<T>
664デフォルトの名無しさん
2023/06/15(木) 11:48:36.10ID:7LFutjAG トヨタの車載OSってRUSTなんだ
665デフォルトの名無しさん
2023/06/15(木) 18:17:26.02ID:wrhp+okP ライフタイムもtraitも難しすぎてマジでわからん
666デフォルトの名無しさん
2023/06/15(木) 18:21:52.25ID:WlvOik+R ライフタイムの質問してたものだけど
コードを書いてて完全に誤解していたことに気が付いた
コンパイル時に範囲をチェックするために引数のライフタイムを最小限に揃える仕組みなんだな
多分一般向けには流行らないわな
コードを書いてて完全に誤解していたことに気が付いた
コンパイル時に範囲をチェックするために引数のライフタイムを最小限に揃える仕組みなんだな
多分一般向けには流行らないわな
667デフォルトの名無しさん
2023/06/15(木) 18:38:09.80ID:Ah9v0OFJ ライフタイムって該当のメモリがいつまで確保されているかって話であって難しいところはなくね?
所望のタイミングまで開放してほしくないがどのようにするのが望ましいか?って話ならまだわかるが
所望のタイミングまで開放してほしくないがどのようにするのが望ましいか?って話ならまだわかるが
668デフォルトの名無しさん
2023/06/15(木) 18:40:44.72ID:QZKQzk+I 自明なときに省略できるせいで理解しづらくなってる気はする
669デフォルトの名無しさん
2023/06/15(木) 18:44:18.80ID:WlvOik+R 日本語がおかしかった
関数では引数に依存する戻り値の寿命がわからない
それで基本的に指定した複数の引数のライフタイムの一番短い奴に合わせて解釈する
そのライフタイムを元にコンパイル時にチェックしてダングリングを防いでる
一番寿命が短い奴に合わせてチェックしたら他はそれより長いのでダングリングが起こらないだろうと
こういうふうに言う人間があまりいないのが現状
関数では引数に依存する戻り値の寿命がわからない
それで基本的に指定した複数の引数のライフタイムの一番短い奴に合わせて解釈する
そのライフタイムを元にコンパイル時にチェックしてダングリングを防いでる
一番寿命が短い奴に合わせてチェックしたら他はそれより長いのでダングリングが起こらないだろうと
こういうふうに言う人間があまりいないのが現状
670デフォルトの名無しさん
2023/06/15(木) 18:47:34.83ID:WlvOik+R 普通にコードを書いた時点でスコープや借用の関係で寿命は決まってる
それが範囲外になるかどうかボローチェックしてるんだけどそいつのためにライフタイムを明示してる
ライフタイムを明示してもコード上の寿命は伸び縮みしないけどエラーを見てコードを書いた人は修正ができる
それが範囲外になるかどうかボローチェックしてるんだけどそいつのためにライフタイムを明示してる
ライフタイムを明示してもコード上の寿命は伸び縮みしないけどエラーを見てコードを書いた人は修正ができる
671デフォルトの名無しさん
2023/06/15(木) 18:52:46.39ID:WlvOik+R と言う解釈なんだけど今のところ
普通に違ってるかもしれない
普通に違ってるかもしれない
672デフォルトの名無しさん
2023/06/15(木) 18:57:24.57ID:uU1WiW+l OnceCellってようやく俺たちの欲しいものが来てくれたか
RefCellもCellも複雑なデータ構造作ると面倒だったからな
RefCellもCellも複雑なデータ構造作ると面倒だったからな
673デフォルトの名無しさん
2023/06/15(木) 20:40:26.65ID:bvsZhoj8 Cellの 種類が増えるってのは悪い兆候だね
674デフォルトの名無しさん
2023/06/15(木) 20:43:39.64ID:vyb4HXQ7 Cellを使ったら負け
他の言語からの移植だと、なぜか増えてしまう
他の言語からの移植だと、なぜか増えてしまう
675デフォルトの名無しさん
2023/06/15(木) 21:23:13.49ID:jjsgM8WL >>669
結構何を言ってるか分からないが引数のライフタイムを省略した場合は全部同じライフタイムを持つことになるよ
結構何を言ってるか分からないが引数のライフタイムを省略した場合は全部同じライフタイムを持つことになるよ
676デフォルトの名無しさん
2023/06/15(木) 21:54:27.47ID:o+xWcDso >>669
main()→sub()→...と呼ばれている時に
'mainと'subをそれぞれの関数で持っている分の寿命とすると
寿命の長さは'static>'main>'subだが
「'sub以上の集合」⊃「'main以上の集合」⊃「'static以上の集合」なので
実は'staticの方がサブタイプ(下位)
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str において
寿命'aはジェネリックなパラメータなので
longest('main, 'static)と呼び出されれば'aは上位の'mainとなり
longest('main, 'sub)と呼び出されれば'aは上位の'subとなる
一方で
fn foo<'a, 'b>(x: &'a str, y: &'b str) -> &'b str という関数だと
foo('main, 'static)と呼び出されれば'bはそのまま'staticとなり
foo('main, 'sub)と呼び出されれば'bはそのまま'subとなる
この場合はもちろん引数の短い方の寿命になるわけではない
fn bar<'a, 'b>(x: &'a str, y: &'b str) -> Bar<'a, 'b> という関数は
返り型が構造体(か何か)のBarでその内部に寿命'aのものと寿命'bのものを持つ
このように様々なケースがある
main()→sub()→...と呼ばれている時に
'mainと'subをそれぞれの関数で持っている分の寿命とすると
寿命の長さは'static>'main>'subだが
「'sub以上の集合」⊃「'main以上の集合」⊃「'static以上の集合」なので
実は'staticの方がサブタイプ(下位)
fn longest<'a>(x: &'a str, y: &'a str) -> &'a str において
寿命'aはジェネリックなパラメータなので
longest('main, 'static)と呼び出されれば'aは上位の'mainとなり
longest('main, 'sub)と呼び出されれば'aは上位の'subとなる
一方で
fn foo<'a, 'b>(x: &'a str, y: &'b str) -> &'b str という関数だと
foo('main, 'static)と呼び出されれば'bはそのまま'staticとなり
foo('main, 'sub)と呼び出されれば'bはそのまま'subとなる
この場合はもちろん引数の短い方の寿命になるわけではない
fn bar<'a, 'b>(x: &'a str, y: &'b str) -> Bar<'a, 'b> という関数は
返り型が構造体(か何か)のBarでその内部に寿命'aのものと寿命'bのものを持つ
このように様々なケースがある
677デフォルトの名無しさん
2023/06/15(木) 22:01:26.73ID:o+xWcDso >>672
OnceCellは前からあって広く使われていて今回stdに採り入れられた
once_cell::unsync::OnceCell が std::cell::OnceCell となった
staticで使われてきたSyncなOnceCellの方は別名となり
once_cell::sync::OnceCell が std::sync::OnceLock となった
OnceCellは前からあって広く使われていて今回stdに採り入れられた
once_cell::unsync::OnceCell が std::cell::OnceCell となった
staticで使われてきたSyncなOnceCellの方は別名となり
once_cell::sync::OnceCell が std::sync::OnceLock となった
678デフォルトの名無しさん
2023/06/15(木) 22:08:16.03ID:yL2pOlPY >>669
データフロー解析を知らないのだろうか?
データフロー解析を知らないのだろうか?
679デフォルトの名無しさん
2023/06/15(木) 22:11:21.57ID:R+Rv2ggs680デフォルトの名無しさん
2023/06/15(木) 22:12:42.39ID:o+xWcDso681デフォルトの名無しさん
2023/06/15(木) 22:15:38.46ID:EOr7Ahlr >>676
上位下位にサブタイプにsubて嫌がらせか!
上位下位にサブタイプにsubて嫌がらせか!
682デフォルトの名無しさん
2023/06/15(木) 22:39:43.11ID:WlvOik+R683デフォルトの名無しさん
2023/06/15(木) 23:12:41.78ID:ZgEGySwy >>682
こんがらがってないならまずは他人に理解できる日本語とコード例を書いてくれよ
間違いを指摘するとか以前に何を言いたいのかわからないんだって
俺だけじゃなくて何人も君が何を言いたいのか分からないって書いてるでしょ?
こんがらがってないならまずは他人に理解できる日本語とコード例を書いてくれよ
間違いを指摘するとか以前に何を言いたいのかわからないんだって
俺だけじゃなくて何人も君が何を言いたいのか分からないって書いてるでしょ?
684デフォルトの名無しさん
2023/06/15(木) 23:29:09.39ID:iPvlEIxp685デフォルトの名無しさん
2023/06/15(木) 23:59:14.48ID:sGVU6kWB >>682
ライフタイムの「仮引数」としては省略されると全部同じ扱いで合ってるよ。
https://doc.rust-lang.org/reference/lifetime-elision.html
一方で呼び出す側が認識しているライフタイムの「実引数」は違っていてもいい。
>>655の例で言えば、呼び出す側が x: &'b str と y: &'c str を渡して戻り値を z: &'d str に束縛するなら、'a は 'b: 'a, 'c: 'a, 'a: 'd を満たす最小のライフタイムに推論される。
そのような 'a があれば、&'b str <: &'a str etc. の部分型付け関係に基づいて、引数はすべて一度 &'a str にアップキャストされると思っていればいい。はず。
適切な 'a が無ければライフタイムに関するコンパイルエラーになる。
https://doc.rust-lang.org/reference/subtyping.html
https://rust-lang.github.io/rfcs/2094-nll.html
ライフタイムの「仮引数」としては省略されると全部同じ扱いで合ってるよ。
https://doc.rust-lang.org/reference/lifetime-elision.html
一方で呼び出す側が認識しているライフタイムの「実引数」は違っていてもいい。
>>655の例で言えば、呼び出す側が x: &'b str と y: &'c str を渡して戻り値を z: &'d str に束縛するなら、'a は 'b: 'a, 'c: 'a, 'a: 'd を満たす最小のライフタイムに推論される。
そのような 'a があれば、&'b str <: &'a str etc. の部分型付け関係に基づいて、引数はすべて一度 &'a str にアップキャストされると思っていればいい。はず。
適切な 'a が無ければライフタイムに関するコンパイルエラーになる。
https://doc.rust-lang.org/reference/subtyping.html
https://rust-lang.github.io/rfcs/2094-nll.html
686デフォルトの名無しさん
2023/06/16(金) 00:20:26.24ID:Ej8ifuNd Rustのコードが'まみれになるのはそういう理由だよね
687デフォルトの名無しさん
2023/06/16(金) 00:24:30.59ID:0npxuivH >>685
> パラメーター内の省略された各ライフタイムは、別個のライフタイム パラメーターになります。
> パラメーター内の省略された各ライフタイムは、別個のライフタイム パラメーターになります。
688デフォルトの名無しさん
2023/06/16(金) 00:30:18.44ID:rJ7TTESK >>685
いや、全部別になる
参照引き数が2つあれば'aと'b別になる
ソース
https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html
The first rule is that the compiler assigns a lifetime parameter to each parameter that’s a reference.
In other words,
a function with one parameter gets one lifetime parameter: fn foo<'a>(x: &'a i32);
a function with two parameters gets two separate lifetime parameters: fn foo<'a, 'b>(x: &'a i32, y: &'b i32);
and so on.
(snip)
Let’s look at another example, this time using the longest function that had no lifetime parameters
when we started working with it in Listing 10-20:
fn longest(x: &str, y: &str) -> &str {
Let’s apply the first rule: each parameter gets its own lifetime.
This time we have two parameters instead of one, so we have two lifetimes:
fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
このようにコンパイラは解釈する
そして戻り値が一意に決まらないのでコンパイルエラーとなる
そのためコンパイラは改善提案の一つとして全部同じにする提案コードを出す
fn longest<'a,>(x: &'a str, y: &'a str) -> &'a str {
全部同じ扱いと思い込んでいる人はこの提案をコンパイラが解釈したと逆に思ってしまったのではないか
いや、全部別になる
参照引き数が2つあれば'aと'b別になる
ソース
https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html
The first rule is that the compiler assigns a lifetime parameter to each parameter that’s a reference.
In other words,
a function with one parameter gets one lifetime parameter: fn foo<'a>(x: &'a i32);
a function with two parameters gets two separate lifetime parameters: fn foo<'a, 'b>(x: &'a i32, y: &'b i32);
and so on.
(snip)
Let’s look at another example, this time using the longest function that had no lifetime parameters
when we started working with it in Listing 10-20:
fn longest(x: &str, y: &str) -> &str {
Let’s apply the first rule: each parameter gets its own lifetime.
This time we have two parameters instead of one, so we have two lifetimes:
fn longest<'a, 'b>(x: &'a str, y: &'b str) -> &str {
このようにコンパイラは解釈する
そして戻り値が一意に決まらないのでコンパイルエラーとなる
そのためコンパイラは改善提案の一つとして全部同じにする提案コードを出す
fn longest<'a,>(x: &'a str, y: &'a str) -> &'a str {
全部同じ扱いと思い込んでいる人はこの提案をコンパイラが解釈したと逆に思ってしまったのではないか
690デフォルトの名無しさん
2023/06/16(金) 05:23:01.54ID:VMczRTMU 厳格な言語て嫌いでな
Verilogはなんの問題もなかったのに
VHDLはとうとう挫折した
てか予約後長いし,マクロがないのが許せなかったんだが
その意味でJavaも結局書く気にもならなんだわ
Verilogはなんの問題もなかったのに
VHDLはとうとう挫折した
てか予約後長いし,マクロがないのが許せなかったんだが
その意味でJavaも結局書く気にもならなんだわ
691デフォルトの名無しさん
2023/06/16(金) 14:09:49.37ID:J436PiNE692デフォルトの名無しさん
2023/06/16(金) 14:58:22.19ID:KrMgX33B 水ノ都さんこんにちは
693デフォルトの名無しさん
2023/06/16(金) 17:51:24.52ID:fkGXFirN 組み込み向けの解説記事でよさそうなのってない?
The Embedded Rust Bookは有名だけどSTM32ありきで書かれているしリンカとか肝心な部分の説明もないように見える
日本の人が書いているっぽいEmbedded Rust Techniquesの方がマシだがこれでも最低限か・・・
The Embedded Rust Bookは有名だけどSTM32ありきで書かれているしリンカとか肝心な部分の説明もないように見える
日本の人が書いているっぽいEmbedded Rust Techniquesの方がマシだがこれでも最低限か・・・
694デフォルトの名無しさん
2023/06/16(金) 18:25:34.38ID:b/MZViq+ >>693
The Book以外のドキュメントなら https://docs.rust-embedded.org/ からいろいろ探せるよ
あるいはEmbedded Rust Techniquesの人が書いてる「基礎から学ぶ組み込みRust」って本とか
The Book以外のドキュメントなら https://docs.rust-embedded.org/ からいろいろ探せるよ
あるいはEmbedded Rust Techniquesの人が書いてる「基礎から学ぶ組み込みRust」って本とか
695デフォルトの名無しさん
2023/06/16(金) 18:39:22.38ID:dwgGWWV8 Rust好きがまあまあ見てそうなこのスレでもこのレベルなんだから一般に広まるのは無理ゲーだと思うわ
696デフォルトの名無しさん
2023/06/16(金) 19:23:08.87ID:PpmLuWiO 問題点を具体的に言えずに曖昧に批判してるつもりの人がいるね
697デフォルトの名無しさん
2023/06/16(金) 19:40:36.76ID:dwgGWWV8 自分でスレを読めばいい
お前の足りない脳を誰かがフォローしてボローチェックまでしてくれるなんて思うなよ
お前の足りない脳を誰かがフォローしてボローチェックまでしてくれるなんて思うなよ
698デフォルトの名無しさん
2023/06/16(金) 19:42:26.19ID:QEmhRLek 言語の良し悪し以上にライブラリの分量が効いてくるんだわ。
そんでその大量にあるライブラリが利用しやすければなお良い。
やりたいことにマッチするライブラリがあるなら
自分で書かなくてよい部分が多くなるわけだし、
書く部分が少なければ少々の面倒くささなんてどうでもよくなる。
C や C++ の歴史の長さ故の物量に対抗するのは難しいけど
Rust は利用しやすさではかなり上回ってると思うので時間の問題だろ。
そんでその大量にあるライブラリが利用しやすければなお良い。
やりたいことにマッチするライブラリがあるなら
自分で書かなくてよい部分が多くなるわけだし、
書く部分が少なければ少々の面倒くささなんてどうでもよくなる。
C や C++ の歴史の長さ故の物量に対抗するのは難しいけど
Rust は利用しやすさではかなり上回ってると思うので時間の問題だろ。
699デフォルトの名無しさん
2023/06/16(金) 23:38:46.36ID:KXgq6I38 >>695
単に5chがオワコンなだけだぞ
単に5chがオワコンなだけだぞ
700デフォルトの名無しさん
2023/06/17(土) 20:33:46.40ID:pjy0GOzk >>683
ときにアセンブラで書必要に迫られる組込でRustあ日の目をみることなんてない
ときにアセンブラで書必要に迫られる組込でRustあ日の目をみることなんてない
701デフォルトの名無しさん
2023/06/17(土) 21:26:17.31ID:iUJ74AnJ >>694
その人は本を出していたのか。今度都内へ行ったときに見てみるか
その人は本を出していたのか。今度都内へ行ったときに見てみるか
702デフォルトの名無しさん
2023/06/17(土) 23:07:17.38ID:H9lc23A5 今日たまたま本屋で見かけた
売れるんかこれと思ったけど買う人がいる
売れるんかこれと思ったけど買う人がいる
703デフォルトの名無しさん
2023/06/18(日) 01:17:21.64ID:PsNivFBp Rustでlinuxに機能を追加するならどんな機能が欲しい?みんな自由に言ってみて。
704デフォルトの名無しさん
2023/06/18(日) 09:07:15.46ID:JHhjqwBk >>695
ほんそれ
ほんそれ
705デフォルトの名無しさん
2023/06/18(日) 09:08:49.10ID:JHhjqwBk >>698
crates.io はゴミだらけのイメージ(もちろんゴミじゃないのもあるがSN比が絶望的に悪い)
crates.io はゴミだらけのイメージ(もちろんゴミじゃないのもあるがSN比が絶望的に悪い)
706デフォルトの名無しさん
2023/06/18(日) 09:13:33.05ID:JHhjqwBk >>703
これと言って無いし今のlinuxで満足(不満もあるけどそれがRustで解決するとも思わない)
カーネルもシェルもAPIもRust化しないと意味無くね?
どうせ unsafe! unsafe!! unsafe!!!
これと言って無いし今のlinuxで満足(不満もあるけどそれがRustで解決するとも思わない)
カーネルもシェルもAPIもRust化しないと意味無くね?
どうせ unsafe! unsafe!! unsafe!!!
707デフォルトの名無しさん
2023/06/18(日) 09:15:13.52ID:QTU736PH >>705
まぁそれは何を比較するかじゃない?
ディストリビューション配布のCライブラリだと厳選されてるから当然クォリティ高いけど
GitHub上から探すとC系の方がS/N悪い(そもそもビルドできないとか)と感じるし
まぁそれは何を比較するかじゃない?
ディストリビューション配布のCライブラリだと厳選されてるから当然クォリティ高いけど
GitHub上から探すとC系の方がS/N悪い(そもそもビルドできないとか)と感じるし
708デフォルトの名無しさん
2023/06/18(日) 10:10:46.67ID:dnSpWVpE rustは他の言語からの移植性が著しく悪い
移植と言うより最初から作ってるのと変わらない
移植と言うより最初から作ってるのと変わらない
709デフォルトの名無しさん
2023/06/18(日) 10:29:41.24ID:dnSpWVpE c → rustの移植が楽ならほおっておいても全部rustになる
その視点が欠けてる
ライナスがLinuxやGit作ったときのようにその他の勢力がおバカさんで実質アシストしてる時と同じような状況
Cust作るためのおぜん立てをしてるようにも見える
その視点が欠けてる
ライナスがLinuxやGit作ったときのようにその他の勢力がおバカさんで実質アシストしてる時と同じような状況
Cust作るためのおぜん立てをしてるようにも見える
710デフォルトの名無しさん
2023/06/18(日) 10:37:34.85ID:dnSpWVpE 後世から見たらライナスはlinuxとgitとcustを作った偉人ですと言うことになるんだろう
711デフォルトの名無しさん
2023/06/18(日) 12:12:13.93ID:kd/h5bzN 仮にkernelや主要コマンドが全部rustに移植されたらその部分は安全にはなるわな
しかし現状そこまで行くかはわからん
なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
つまり主要なlibも全部rustで書き変えないとunsafeからは逃れられないけどものすごい作業量になりそう
いけるのかな?
しかし現状そこまで行くかはわからん
なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
つまり主要なlibも全部rustで書き変えないとunsafeからは逃れられないけどものすごい作業量になりそう
いけるのかな?
712デフォルトの名無しさん
2023/06/18(日) 13:00:20.06ID:TBj+uqoQ713デフォルトの名無しさん
2023/06/18(日) 13:12:59.30ID:aPOK9VRV714デフォルトの名無しさん
2023/06/18(日) 13:26:34.81ID:PsNivFBp >>712
個人的にRustはあれだけの実行速度、安全性の割にはかなり文法がシンプルで好きだけどね。
個人的にRustはあれだけの実行速度、安全性の割にはかなり文法がシンプルで好きだけどね。
715デフォルトの名無しさん
2023/06/18(日) 14:02:54.81ID:TBj+uqoQ >>714
蓼食う虫も好き好きだね。
蓼食う虫も好き好きだね。
716デフォルトの名無しさん
2023/06/18(日) 16:08:38.91ID:aKqZwOD/717デフォルトの名無しさん
2023/06/18(日) 23:54:05.72ID:V79KPNHt >>703
その発想からしてRustのパラダイムから逸脱しており反Rust
その発想からしてRustのパラダイムから逸脱しており反Rust
718デフォルトの名無しさん
2023/06/20(火) 17:00:50.46ID:Dvlv0UV+ >711
>なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
これ知るとRust安全神話なんて嘘八百八町なんよね
金儲けのために保守気取ってましたーに通じる
>なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
これ知るとRust安全神話なんて嘘八百八町なんよね
金儲けのために保守気取ってましたーに通じる
719デフォルトの名無しさん
2023/06/20(火) 19:31:43.67ID:WU95hkUv720デフォルトの名無しさん
2023/06/20(火) 19:54:19.85ID:kXFGlrCh unsafe=危険=意味なしみたいな人はRustを使うことが目的だと思っているんだろうね
安全なソフトウェアやシステムを開発することが目的ならそういう発想にはならないはずだ
安全なソフトウェアやシステムを開発することが目的ならそういう発想にはならないはずだ
721デフォルトの名無しさん
2023/06/20(火) 20:03:45.82ID:2T4Y6uqL 純粋なRustのライブラリはまだ完成度が微妙なんだよな。PythonとかC,C++と比べると。勿論、他言語のバインディングのライブラリは結構豊富なんだけど、それだとRustを使う意義がないからな。
722デフォルトの名無しさん
2023/06/20(火) 20:20:14.97ID:IIzrqfbq >>718
部分的にでもマシになるなら意味あるやん。
論理的な破綻がないように定理証明器をベースにした言語とかもあるけど、
そのために既存のライブラリが使えないようだとそれこそ使い物にならんだろ。
結局はバランスおじさん「結局はバランス」
部分的にでもマシになるなら意味あるやん。
論理的な破綻がないように定理証明器をベースにした言語とかもあるけど、
そのために既存のライブラリが使えないようだとそれこそ使い物にならんだろ。
結局はバランスおじさん「結局はバランス」
723デフォルトの名無しさん
2023/06/20(火) 20:41:02.57ID:7CvaHT3W >>718
それはunsafeとは何かを理解できていなくて初心者なのかも知れないけどかなりヤバイよ
ffiなんて例を出す必要はなくメモリ空間へのアクセスは最終的に生ポインタとなって当然unsafeになる
例えばslice[index]やslice.iter()の内部は当然unsafeな生ポインタを使って実装されている
ではunsafeで実装されているslice[index]やslice.iter()は危険か?となるがもちろん完全に安全だ
なぜならunsafeを内部に閉じ込めて安全なインタフェースを提供しているからである
これがRustの基本原理
ffiについても同様で例えばファイルのオープンや読み書きは通常OSへのシステムコールとなり通常ffiとなるため当然unsafe
しかしRustの標準ライブラリではそのunsafeを内部に閉じ込めて安全なインターフェイスとして提供している
このようにメモリアクセスもOS呼び出しもそれ自体は当然unsafeだがそれはモジュールの内部に閉じ込められている
そしてそれらを利用する側のプログラマーは安全なインターフェースのみを用いてsafeにプログラミングすることができる
そしてsafeな部分なコンパイラにより様々な安全性が自動的に保証されるという至上の恩恵をもたらすのがRust
それはunsafeとは何かを理解できていなくて初心者なのかも知れないけどかなりヤバイよ
ffiなんて例を出す必要はなくメモリ空間へのアクセスは最終的に生ポインタとなって当然unsafeになる
例えばslice[index]やslice.iter()の内部は当然unsafeな生ポインタを使って実装されている
ではunsafeで実装されているslice[index]やslice.iter()は危険か?となるがもちろん完全に安全だ
なぜならunsafeを内部に閉じ込めて安全なインタフェースを提供しているからである
これがRustの基本原理
ffiについても同様で例えばファイルのオープンや読み書きは通常OSへのシステムコールとなり通常ffiとなるため当然unsafe
しかしRustの標準ライブラリではそのunsafeを内部に閉じ込めて安全なインターフェイスとして提供している
このようにメモリアクセスもOS呼び出しもそれ自体は当然unsafeだがそれはモジュールの内部に閉じ込められている
そしてそれらを利用する側のプログラマーは安全なインターフェースのみを用いてsafeにプログラミングすることができる
そしてsafeな部分なコンパイラにより様々な安全性が自動的に保証されるという至上の恩恵をもたらすのがRust
724デフォルトの名無しさん
2023/06/20(火) 20:48:07.86ID:FDgZeyem 話の流れとは直接関係無いが、豆知識:
バグと言うものは、64BIT 整数を 32BIT 整数で受けたり、符号付きを符合なし
で受けたり(その逆でも)するだけでも起きるし、メモリ関連バグだけでは無い。
バグと言うものは、64BIT 整数を 32BIT 整数で受けたり、符号付きを符合なし
で受けたり(その逆でも)するだけでも起きるし、メモリ関連バグだけでは無い。
725デフォルトの名無しさん
2023/06/20(火) 20:50:12.42ID:FDgZeyem 例えば、OSの一度に行なえるファイル読み書きが10MBに制限
されている場合に、それを知らずにバイト数に20MBを指定して
しまったら、バグとなる。
テストでは10MBを超えるファイルを扱っていなかったら気付かない。
されている場合に、それを知らずにバイト数に20MBを指定して
しまったら、バグとなる。
テストでは10MBを超えるファイルを扱っていなかったら気付かない。
726デフォルトの名無しさん
2023/06/20(火) 21:06:06.55ID:wgbzrV/N727デフォルトの名無しさん
2023/06/20(火) 21:17:59.27ID:7CvaHT3W728デフォルトの名無しさん
2023/06/21(水) 20:47:56.17ID:DnSmyfOL Rustで最初に出したバグはデッドロックだったな
コンパイルエラーにしてくれるもんだと油断していた
コンパイルエラーにしてくれるもんだと油断していた
729デフォルトの名無しさん
2023/06/21(水) 21:05:00.78ID:W7d/0xn7 静的解析でデッドロックを検出するのは不可能
もちろんRustでも無理
もちろんRustでも無理
730デフォルトの名無しさん
2023/06/26(月) 18:26:13.57ID:H3+gGIMJ すいません、くだらない質問かもしれませんけど割り込ませて下さい
Haskellとかだと二項演算子(+)はNum classに属する型なら適用できます
自分が作った型でもその型において(+)をどう実装するか定義すれば(+)が利用できるようになります
例えば5元体の計算を行うF5 型を定義してそこで足し算とかをするには
data F5 = F5 Int deriving (Eq,Show) -- 型F5を作成
instance Num F5 where -- F5がNum classに属する宣言
(F5 x ) + ( F5 y) = F5 $ mod (x+y) 5
...略...
のようなものを作れば例えば
print $ ( F5 3 )^4
でF5 1を得る事ができます
同じような事はRustでできますか?
自分でこのような5元体の計算を行うための型を自作しそれの計算を二項演算子(+),(*)を用いた表記を可能にする方法とかありますか?
Haskellとかだと二項演算子(+)はNum classに属する型なら適用できます
自分が作った型でもその型において(+)をどう実装するか定義すれば(+)が利用できるようになります
例えば5元体の計算を行うF5 型を定義してそこで足し算とかをするには
data F5 = F5 Int deriving (Eq,Show) -- 型F5を作成
instance Num F5 where -- F5がNum classに属する宣言
(F5 x ) + ( F5 y) = F5 $ mod (x+y) 5
...略...
のようなものを作れば例えば
print $ ( F5 3 )^4
でF5 1を得る事ができます
同じような事はRustでできますか?
自分でこのような5元体の計算を行うための型を自作しそれの計算を二項演算子(+),(*)を用いた表記を可能にする方法とかありますか?
731デフォルトの名無しさん
2023/06/26(月) 18:32:46.35ID:DZPgqn/v >>730
std::ops::Add を実装すれば + が使えるし
std::ops::Mul を実装すれば * が使えるよ。
https://doc.rust-lang.org/std/ops/trait.Add.html
https://doc.rust-lang.org/std/ops/trait.Mul.html
std::ops::Add を実装すれば + が使えるし
std::ops::Mul を実装すれば * が使えるよ。
https://doc.rust-lang.org/std/ops/trait.Add.html
https://doc.rust-lang.org/std/ops/trait.Mul.html
732デフォルトの名無しさん
2023/06/26(月) 19:00:39.37ID:PhkZx7XR733デフォルトの名無しさん
2023/07/04(火) 01:09:18.95ID:2CEMaM2m 神クラス的なArcMutexのstructをごっそり差し替えし始めたらrust analyzerが糞遅くなって書くのが辛い
コード戻したくなる
助けて
コード戻したくなる
助けて
734デフォルトの名無しさん
2023/07/08(土) 03:39:28.67ID:kPVzZee0 キーボードの何かのキーが入力されてるか調べるけど
何もない場合は止まらずにそのまま次の処理を続けるはどうすればいいの?
何もない場合は止まらずにそのまま次の処理を続けるはどうすればいいの?
735デフォルトの名無しさん
2023/07/08(土) 04:25:29.10ID:hz58RfSC >>734
C言語の時と同じ
ノンブロッキング指定するだけでなく
cooked modeではなくraw modeをICANONに指定
これでバッファリングされることなくブロックされることなく読み出せる
libc叩かなくてもtermioなど好みのクレートを使う
C言語の時と同じ
ノンブロッキング指定するだけでなく
cooked modeではなくraw modeをICANONに指定
これでバッファリングされることなくブロックされることなく読み出せる
libc叩かなくてもtermioなど好みのクレートを使う
736デフォルトの名無しさん
2023/07/08(土) 07:46:14.85ID:kPVzZee0 なるほど
737デフォルトの名無しさん
2023/07/08(土) 08:39:38.42ID:kPVzZee0 窓だからGetAsyncKeyState呼び出すのが楽っぽい
738デフォルトの名無しさん
2023/07/13(木) 13:31:51.91ID:B+tQlcfl Rust言語で開発したWindowsカーネル、Canaryチャネルで展開開始
https://news.yahoo.co.jp/articles/de16ce55a291d59f7364096690fd601c5ee2ece2
https://news.yahoo.co.jp/articles/de16ce55a291d59f7364096690fd601c5ee2ece2
739デフォルトの名無しさん
2023/07/14(金) 11:16:58.08ID:tzjfWmow 値をコピーせずに参照を切り替えてFibonacci数列を計算したい
https://ideone.com/lnMyvH
はいけるんだけど
https://ideone.com/VerTGV
は
error[E0658]: destructuring assignments are unstable
と怒られます
どなたか対処法わかりますか?
https://ideone.com/lnMyvH
はいけるんだけど
https://ideone.com/VerTGV
は
error[E0658]: destructuring assignments are unstable
と怒られます
どなたか対処法わかりますか?
740デフォルトの名無しさん
2023/07/14(金) 11:27:16.72ID:Jafjy1es741デフォルトの名無しさん
2023/07/14(金) 12:09:03.76ID:8J2hXx2d742デフォルトの名無しさん
2023/07/14(金) 12:17:12.18ID:8J2hXx2d ちなみにコレxとyの参照してる値を保持してる内容を入れ替えてませんよね?
xとyの参照してるアドレスの入れ替えをしたいんですけど
それどうやって確かめたらいいんでしょう?
xとyの参照してるアドレスの入れ替えをしたいんですけど
それどうやって確かめたらいいんでしょう?
743デフォルトの名無しさん
2023/07/14(金) 12:25:35.09ID:8J2hXx2d そもそもうまく行ってると思ってたほうもうまくいってなかったorz
https://ideone.com/rny4y8
xとyの参照が切り替わってるんではなくて値そのものこくかんしてやがる
xとyの値に触らずxとyの参照先アドレスだけ切り替えるのってできないんでしょうか?
https://ideone.com/rny4y8
xとyの参照が切り替わってるんではなくて値そのものこくかんしてやがる
xとyの値に触らずxとyの参照先アドレスだけ切り替えるのってできないんでしょうか?
744デフォルトの名無しさん
2023/07/14(金) 12:36:55.78ID:8J2hXx2d ちょっと長くなるけどやりたい事書きます
例えばFという処理があってそれを初期値a0に何度も適用したいとします
Fの値を計算する関数を入力バッファと出力バッファのアドレスをとって入力バッファ側のデータを読んで出力バッファに書き出す関数を作ったとします
それを何度も繰り返す場合、出てきた出力バッファの内容をもう一度入力バッファにコピーする作業はあまりにも無駄なので出てきた出力バッファを今度はそのまま出力バッファとして使用したいんです
でもx,yは参照型でy=xとしたら何故かxの内容をyの内容に置き換えてしまってるみたいですけどコレ何故なんでしょう?
なんとかならないんですか?
例えばFという処理があってそれを初期値a0に何度も適用したいとします
Fの値を計算する関数を入力バッファと出力バッファのアドレスをとって入力バッファ側のデータを読んで出力バッファに書き出す関数を作ったとします
それを何度も繰り返す場合、出てきた出力バッファの内容をもう一度入力バッファにコピーする作業はあまりにも無駄なので出てきた出力バッファを今度はそのまま出力バッファとして使用したいんです
でもx,yは参照型でy=xとしたら何故かxの内容をyの内容に置き換えてしまってるみたいですけどコレ何故なんでしょう?
なんとかならないんですか?
745デフォルトの名無しさん
2023/07/14(金) 12:57:26.91ID:KGL+WmuV746デフォルトの名無しさん
2023/07/14(金) 13:20:43.04ID:bUq24laG747デフォルトの名無しさん
2023/07/14(金) 13:21:19.50ID:i4/iEcAZ そもそもE0658がideoneのrustcのバージョンが古すぎるせいだから>>1のPlayground使ってろ
748デフォルトの名無しさん
2023/07/14(金) 19:05:41.95ID:qocfo89A 亀だが
>>694
>基礎から学ぶ組み込みRust
見てきた。あの内容じゃWebの記事読んでおけば十分な感じだった
肝心の低レイヤー(CPUやペリフェラルとのインターフェイス)の解説がペラい
特に現状ではメーカーのサポートが得られない以上HALやBSPに相当する部分を
自前で用意せざるを得ないケースは少なくないと思うけど
その辺が十分に解説されているようには見えなかった
>>694
>基礎から学ぶ組み込みRust
見てきた。あの内容じゃWebの記事読んでおけば十分な感じだった
肝心の低レイヤー(CPUやペリフェラルとのインターフェイス)の解説がペラい
特に現状ではメーカーのサポートが得られない以上HALやBSPに相当する部分を
自前で用意せざるを得ないケースは少なくないと思うけど
その辺が十分に解説されているようには見えなかった
749デフォルトの名無しさん
2023/07/14(金) 21:27:06.52ID:+dZRH6iE そりゃマイナーなチップのHALを自分で作るなんて
マニアックすぎる内容で商業出版は無理だろ
そこまでやるならもう既存の実装見に行ったほうが早いよ
マニアックすぎる内容で商業出版は無理だろ
そこまでやるならもう既存の実装見に行ったほうが早いよ
750デフォルトの名無しさん
2023/07/17(月) 14:57:59.69ID:ckC6D+AP 期待してたけどめちゃくちゃ頼りないスタイルガイドが出てきたな
「こういう場合はこうフォーマットしましょう」だけじゃなくもう少し踏み込んで欲しかった
https://doc.rust-lang.org/nightly/style-guide/statements.html
「こういう場合はこうフォーマットしましょう」だけじゃなくもう少し踏み込んで欲しかった
https://doc.rust-lang.org/nightly/style-guide/statements.html
751デフォルトの名無しさん
2023/07/17(月) 15:40:03.84ID:qDsaxMYb スタイルガイドの目的はrustfmtの挙動を文書化して開発を進めやすくするってことだから
まさに「こういう場合はこうフォーマットしましょう」のための文書だよ
まさに「こういう場合はこうフォーマットしましょう」のための文書だよ
752デフォルトの名無しさん
2023/07/17(月) 17:17:17.76ID:WT/Een/k もう少し踏み込んで欲しかった、と言ってる人にそれを言ってもどうもならないわな
別にスタイルガイドの定義の話あなたが勝手に始めただけですよね
論破ですよね
別にスタイルガイドの定義の話あなたが勝手に始めただけですよね
論破ですよね
753デフォルトの名無しさん
2023/07/17(月) 17:39:41.44ID:Lx49eL3d なにいってだこいつ
754デフォルトの名無しさん
2023/07/18(火) 03:22:09.12ID:wb1VWGHJ755デフォルトの名無しさん
2023/07/18(火) 03:37:10.43ID:wb1VWGHJ756デフォルトの名無しさん
2023/07/18(火) 09:14:53.67ID:nuoH1aU3 一般的なスタイルガイドを知ってる人と知らない人の違いだね
常識だと思ってた
常識だと思ってた
757デフォルトの名無しさん
2023/07/18(火) 13:02:43.58ID:W9LkQalw 公式のスタイルガイドはrustfmtに実装するフォーマッティング以外はスコープ外
フォーマッティングガイドラインと改名したほうがいいわな
フォーマッティングガイドラインと改名したほうがいいわな
758デフォルトの名無しさん
2023/07/19(水) 11:14:31.27ID:HXkvqxP4 関数呼び出しの質問です
私の認識では
「rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される、ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
であってますか?
それでお聞きしたいのはrust compilerって呼び出した関数側が実際引数を変更するかしないか判定して“immutatibleな変数を変更しようとした、なめとんかボケ”って怒ってくることがあります
コレ逆に言えば例えプログラマが変更しない変数をmutableで呼び出しを指定してもcompilerはどうせ変更されないんだからコピーもしないでいいよねと気を利かせてコピーしないとかしてくれると考えて大丈夫ですか?、
私の認識では
「rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される、ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
であってますか?
それでお聞きしたいのはrust compilerって呼び出した関数側が実際引数を変更するかしないか判定して“immutatibleな変数を変更しようとした、なめとんかボケ”って怒ってくることがあります
コレ逆に言えば例えプログラマが変更しない変数をmutableで呼び出しを指定してもcompilerはどうせ変更されないんだからコピーもしないでいいよねと気を利かせてコピーしないとかしてくれると考えて大丈夫ですか?、
759デフォルトの名無しさん
2023/07/19(水) 11:21:25.92ID:yw4UHEnD760デフォルトの名無しさん
2023/07/19(水) 11:41:04.52ID:HXkvqxP4 すいません
具体的なコーどはちょっと用意します
別件なんですけど
let mut i : u64;
let p : u64 = 2u64.pow(32)-2u64.pow(10)+1;
for i in 2..100000 {
if i.pow(524288)%p != 1 && i.pow(1048576)%p == 1 {
println!("{}",i);
}
}
と書いたところ
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
--> compiler.rs:136:8
と怒られます
u64って指定するだけではダメなんでしょうか?
どう書いたら通してもらえますか?
よろしくお願いします
具体的なコーどはちょっと用意します
別件なんですけど
let mut i : u64;
let p : u64 = 2u64.pow(32)-2u64.pow(10)+1;
for i in 2..100000 {
if i.pow(524288)%p != 1 && i.pow(1048576)%p == 1 {
println!("{}",i);
}
}
と書いたところ
error[E0689]: can't call method `pow` on ambiguous numeric type `{integer}`
--> compiler.rs:136:8
と怒られます
u64って指定するだけではダメなんでしょうか?
どう書いたら通してもらえますか?
よろしくお願いします
761デフォルトの名無しさん
2023/07/19(水) 11:47:10.22ID:x9es5cRL unsafe { 引数のポインタ拾って描き替えたら }
呼び出し側も描き換わってたでござる
呼び出し側も描き換わってたでござる
762デフォルトの名無しさん
2023/07/19(水) 11:49:41.95ID:x9es5cRL >>760
for i in 2..100000u64 {
for i in 2..100000u64 {
763デフォルトの名無しさん
2023/07/19(水) 11:51:21.32ID:x9es5cRL >>762
あと mut i: u64 の i は for では使われてないし警告出てない?
あと mut i: u64 の i は for では使われてないし警告出てない?
764デフォルトの名無しさん
2023/07/19(水) 12:00:23.67ID:HXkvqxP4 ダメでした
error[E0308]: mismatched types
--> compiler.rs:136:12
|
136 | if i.pow(524288u64)%p != 1 && i.pow(1048576u64)%p == 1 {
| --- ^^^^^^^^^ expected `u32`, found `u64`
| |
| arguments to this function are incorrect
|
note: associated function defined here
= note: this error originates in the macro `uint_impl` (in Nightly builds, run with -Z macro-backtrace for more info)
help: change the type of the numeric literal from `u64` to `u32`
|
136 | if i.pow(524288u32)%p != 1 && i.pow(1048576u64)%p == 1 {
| ~~~
となります
powってu64はダメなんでしょうか?
error[E0308]: mismatched types
--> compiler.rs:136:12
|
136 | if i.pow(524288u64)%p != 1 && i.pow(1048576u64)%p == 1 {
| --- ^^^^^^^^^ expected `u32`, found `u64`
| |
| arguments to this function are incorrect
|
note: associated function defined here
= note: this error originates in the macro `uint_impl` (in Nightly builds, run with -Z macro-backtrace for more info)
help: change the type of the numeric literal from `u64` to `u32`
|
136 | if i.pow(524288u32)%p != 1 && i.pow(1048576u64)%p == 1 {
| ~~~
となります
powってu64はダメなんでしょうか?
765デフォルトの名無しさん
2023/07/19(水) 12:07:25.53ID:HXkvqxP4 ideoneでもダメです
https://ideone.com/FaBKXh
https://ideone.com/FaBKXh
766デフォルトの名無しさん
2023/07/19(水) 12:11:42.11ID:a/a2TjKK エラーメッセージから「ダメ」かどうかの1ビットしか読み取らない人にプログラミングは難しい。
767デフォルトの名無しさん
2023/07/19(水) 12:12:42.07ID:HXkvqxP4 あ、そもそもコレダメですね
仮にu64受け付けてくれてもダメやん
powは自作します
しかしu64版のpowってないんでしょうか?
仮にu64受け付けてくれてもダメやん
powは自作します
しかしu64版のpowってないんでしょうか?
768デフォルトの名無しさん
2023/07/19(水) 12:14:10.94ID:x9es5cRL overflowは知らん自己責任でやれ
https://ideone.com/JR2FhX
https://ideone.com/JR2FhX
769デフォルトの名無しさん
2023/07/19(水) 12:17:18.80ID:x9es5cRL770デフォルトの名無しさん
2023/07/19(水) 12:25:20.07ID:YST94QZy いろいろキッツいなぁー
loop-variableはfor-loopのブロックスコープ
u64::powはfn pow(self, exp: u32) -> u64
(u32以上の値をとってもオーバーフローするから)
>「rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される、ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
>であってますか?
もちろん間違ってます
loop-variableはfor-loopのブロックスコープ
u64::powはfn pow(self, exp: u32) -> u64
(u32以上の値をとってもオーバーフローするから)
>「rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される、ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
>であってますか?
もちろん間違ってます
771デフォルトの名無しさん
2023/07/19(水) 12:29:53.08ID:hsqLjzEB 余りをとっているから繰り返し自乗法を適当に実装すればオーバーフローは回避できる
772デフォルトの名無しさん
2023/07/19(水) 12:30:35.45ID:HXkvqxP4773デフォルトの名無しさん
2023/07/19(水) 12:41:14.04ID:HXkvqxP4 >>771
そうなんですよ
毎回あまり取らないとダメですよね
pの値も間違ってたし
やりたかったのはバッファサイズが1048576の有限体のフーリエ変換のための素数と位数1048576の元zetaを見つける作業でpはすぐ見つけてたんですけどzetaで手こずりました
まだrust慣れてないもので
これで行けました
https://ideone.com/haw9t8
見つけたzetaの候補3つ
4293918721
1557
7183
8874
そうなんですよ
毎回あまり取らないとダメですよね
pの値も間違ってたし
やりたかったのはバッファサイズが1048576の有限体のフーリエ変換のための素数と位数1048576の元zetaを見つける作業でpはすぐ見つけてたんですけどzetaで手こずりました
まだrust慣れてないもので
これで行けました
https://ideone.com/haw9t8
見つけたzetaの候補3つ
4293918721
1557
7183
8874
774デフォルトの名無しさん
2023/07/19(水) 15:49:39.29ID:HXkvqxP4 やはりダメです
型の指定の書き方がわかりません
次のコードです
https://ideone.com/QLw12c
有限体上のFourier変換を書きたいんですけどmutの書き方がらみで怒られます
どうすれば通せますか?
型の指定の書き方がわかりません
次のコードです
https://ideone.com/QLw12c
有限体上のFourier変換を書きたいんですけどmutの書き方がらみで怒られます
どうすれば通せますか?
775デフォルトの名無しさん
2023/07/19(水) 16:22:53.10ID:HXkvqxP4 とりあえずmutを全部につけまくったら通りました
https://ideone.com/EF9EEJ
https://ideone.com/EF9EEJ
776デフォルトの名無しさん
2023/07/19(水) 17:34:17.58ID:g8hXxOtp >>774
>どうすれば通せますか?
The Bookを読んで基本を身につければ通せます。
https://doc.rust-lang.org/book/
まずはplygroundとエラーメッセージの読み方から学ぶことをお勧めいたします。
>どうすれば通せますか?
The Bookを読んで基本を身につければ通せます。
https://doc.rust-lang.org/book/
まずはplygroundとエラーメッセージの読み方から学ぶことをお勧めいたします。
777デフォルトの名無しさん
2023/07/19(水) 17:52:11.79ID:HXkvqxP4 ありがとうございます
コンパイルは無事通ったんですけどstack overflowで実行できませんでしたw
どうせならどでかいのでやってみようと欲張ったらダメでしたw
まぁ縮める分には見つけたpやzetaはそのまま使えるのでまた時間ある日に続きやります
やっぱり新しい言語挑戦するのは時間かかりますね
ついでにひとつお聞きしたいんですけど、今回は「Rustの売りのなるべくstuckでやる」でやってみたんですけど流石にこのサイズはstackにとれないようです
コレ同じ事ヒープでやってもRustコンパイラはフラグメンテーションが怒らないように良きにはからってくれますよね?
コードは>>775です、まだ作りかけですけど
Fourier変換でO(n log n)で掛け算するプログラムの実装の演習の自習中です
コンパイルは無事通ったんですけどstack overflowで実行できませんでしたw
どうせならどでかいのでやってみようと欲張ったらダメでしたw
まぁ縮める分には見つけたpやzetaはそのまま使えるのでまた時間ある日に続きやります
やっぱり新しい言語挑戦するのは時間かかりますね
ついでにひとつお聞きしたいんですけど、今回は「Rustの売りのなるべくstuckでやる」でやってみたんですけど流石にこのサイズはstackにとれないようです
コレ同じ事ヒープでやってもRustコンパイラはフラグメンテーションが怒らないように良きにはからってくれますよね?
コードは>>775です、まだ作りかけですけど
Fourier変換でO(n log n)で掛け算するプログラムの実装の演習の自習中です
778デフォルトの名無しさん
2023/07/19(水) 23:54:55.34ID:6nPpRSza >>758
>> rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される
Rustは常にcall by valueでvalueをコピーする
大きなものをコピーされたくないならば
渡すvalueとしてその参照を指定する
すると参照すなわちポインタ値のみがコピーされて渡される
>> ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない
immutatibleな呼び出しなんて概念はない
immutableな参照を渡すかmutableな参照を渡すかの選択肢はある
そのポインタ値は常にコピーされる
ポインタ値のコピーはどんな速い言語を作っても避けられずそれが最速
ただし例えば数値単体を渡すなら参照(ポインタ値)を渡すよりも速い
>>777
数MBのデータはスタック領域に入らないのでヒープ領域に開始時に確保すればよい
>> rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される
Rustは常にcall by valueでvalueをコピーする
大きなものをコピーされたくないならば
渡すvalueとしてその参照を指定する
すると参照すなわちポインタ値のみがコピーされて渡される
>> ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない
immutatibleな呼び出しなんて概念はない
immutableな参照を渡すかmutableな参照を渡すかの選択肢はある
そのポインタ値は常にコピーされる
ポインタ値のコピーはどんな速い言語を作っても避けられずそれが最速
ただし例えば数値単体を渡すなら参照(ポインタ値)を渡すよりも速い
>>777
数MBのデータはスタック領域に入らないのでヒープ領域に開始時に確保すればよい
779デフォルトの名無しさん
2023/07/20(木) 15:25:39.14ID:6BSTmMYa780デフォルトの名無しさん
2023/07/20(木) 16:14:28.16ID:zz9s86Uo 古典的なcall by valueの定義におけるコピーと
そのCopyとはまた違う話
ついでに言うとRustにおけるcall by valueの定義と
古典的call by valueの定義は違うので要注意
現代では古典的定義でcall by valueかどうかを考えるのはあまり意味がない
そのCopyとはまた違う話
ついでに言うとRustにおけるcall by valueの定義と
古典的call by valueの定義は違うので要注意
現代では古典的定義でcall by valueかどうかを考えるのはあまり意味がない
781デフォルトの名無しさん
2023/07/20(木) 19:56:50.64ID:neDY19sM >>779
そのコピーはビットコピーの話でCopy実装型の話とは別
Copy非実装型でもムーブするとビットコピーされる
そもそもCPUやメモリにムーブなんてものは存在しなくてMOV (MOVE)命令ですらビットコピーが行われる
ただしビットコピーは最適化で消えうる
例えば別の変数にムーブしても最適化でビットコピーは消えうる
サイズの大きな値を関数でムーブ返ししてもRTO (Return Value Optimization)により呼び出し元スタックフレームに直接生成できるならビットコピーは消えうる
サイズの小さい値を関数でムーブ返しするとレジスタ返しとなる等
そのコピーはビットコピーの話でCopy実装型の話とは別
Copy非実装型でもムーブするとビットコピーされる
そもそもCPUやメモリにムーブなんてものは存在しなくてMOV (MOVE)命令ですらビットコピーが行われる
ただしビットコピーは最適化で消えうる
例えば別の変数にムーブしても最適化でビットコピーは消えうる
サイズの大きな値を関数でムーブ返ししてもRTO (Return Value Optimization)により呼び出し元スタックフレームに直接生成できるならビットコピーは消えうる
サイズの小さい値を関数でムーブ返しするとレジスタ返しとなる等
782デフォルトの名無しさん
2023/07/20(木) 22:07:49.98ID:YJW86g9/ call by valueのコピーはビットコピーなんて定義はない
ビットコピーかどうかはimplementation detail
ビットコピーかどうかはimplementation detail
783デフォルトの名無しさん
2023/07/20(木) 22:17:52.36ID:mzA35L2k レジスタかメモリへのビットコピー以外に渡す手段はない
現行のコンピューターでは
現行のコンピューターでは
784デフォルトの名無しさん
2023/07/22(土) 01:08:25.26ID:9fslOp72 メモリ管理について質問です
Rustは「GCをしない言語」を謳っています
一応「GCを心配する必要はない、フラグメンテーションなも起きない、メモリ不足になったらそれはフラグメンテーションではなくて元々のメモリ不足」と言い切れればいいんですけど、実際にはそうではなく、下手なデータ管理をすればフラメンテーションは発生するようです
まぁそりゃそうなんですけど
https://hackernoon.com/ja/Rust%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%83%92%E3%83%BC%E3%83%97%E3%81%AE%E6%96%AD%E7%89%87%E5%8C%96%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%81%A6%E5%9B%9E%E9%81%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
ということはプログラマ極力フラグメンテーションが発生しないように注意したいところですが、しかしRustのアロケータはどういう状況でフラグメンテーションを発生させるか、どうやれば防げるかの資料が見つかりません、なので先のリンクの人は自分で調べてたみたいです
これ誰かご存知の方いますか?
具体的には同じ型のSizedのデータA,を作成して先にAを消し、その後同じ型のCを作った場合、Rustシステムはその時点で開いてる穴のAの抜け穴を利用してそこにCを割り当ててくれるんでしょうか、
それともBが消えるまではAのあった場所も“欠番扱い”になるんでしょうか?
Rustは「GCをしない言語」を謳っています
一応「GCを心配する必要はない、フラグメンテーションなも起きない、メモリ不足になったらそれはフラグメンテーションではなくて元々のメモリ不足」と言い切れればいいんですけど、実際にはそうではなく、下手なデータ管理をすればフラメンテーションは発生するようです
まぁそりゃそうなんですけど
https://hackernoon.com/ja/Rust%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%A7%E3%83%92%E3%83%BC%E3%83%97%E3%81%AE%E6%96%AD%E7%89%87%E5%8C%96%E3%82%92%E8%A6%8B%E3%81%A4%E3%81%91%E3%81%A6%E5%9B%9E%E9%81%BF%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
ということはプログラマ極力フラグメンテーションが発生しないように注意したいところですが、しかしRustのアロケータはどういう状況でフラグメンテーションを発生させるか、どうやれば防げるかの資料が見つかりません、なので先のリンクの人は自分で調べてたみたいです
これ誰かご存知の方いますか?
具体的には同じ型のSizedのデータA,を作成して先にAを消し、その後同じ型のCを作った場合、Rustシステムはその時点で開いてる穴のAの抜け穴を利用してそこにCを割り当ててくれるんでしょうか、
それともBが消えるまではAのあった場所も“欠番扱い”になるんでしょうか?
785デフォルトの名無しさん
2023/07/22(土) 02:40:42.91ID:htX2UcZa >>784
アロケーションやフラグメンテーションはRustの言語システムの範囲外
例えばOSがない環境も含めてアロケータを自作もできるようになっている
普通にOSなどある環境を使うとRustはそこでの標準のアロケータをそのままグローバルアロケータとして用いる
つまり環境毎に異なるものが使われていてRustとは全く関係がない問題であることがわかる
もちろんRustでは自分でアロケータを変えることもできる
グローバルアロケータを丸ごと変える方法とBoxやVecなどで個別にアロケータを指定する方法がある
使用環境の標準のアロケータで何か問題が起きていると感じたらその例のように別のものと交換して比較してベストなアロケータを選べばよい
もう一つ全く別のアプローチとしてそれらアロケータに頼るのではなくプログラムのレベルでまとまったメモリの割り当て管理する方法もある
この方法は全て自分の制御下におけるため様々な特性のあるクレートがありもちろん自作もできる
アロケーションやフラグメンテーションはRustの言語システムの範囲外
例えばOSがない環境も含めてアロケータを自作もできるようになっている
普通にOSなどある環境を使うとRustはそこでの標準のアロケータをそのままグローバルアロケータとして用いる
つまり環境毎に異なるものが使われていてRustとは全く関係がない問題であることがわかる
もちろんRustでは自分でアロケータを変えることもできる
グローバルアロケータを丸ごと変える方法とBoxやVecなどで個別にアロケータを指定する方法がある
使用環境の標準のアロケータで何か問題が起きていると感じたらその例のように別のものと交換して比較してベストなアロケータを選べばよい
もう一つ全く別のアプローチとしてそれらアロケータに頼るのではなくプログラムのレベルでまとまったメモリの割り当て管理する方法もある
この方法は全て自分の制御下におけるため様々な特性のあるクレートがありもちろん自作もできる
786デフォルトの名無しさん
2023/07/22(土) 02:50:52.30ID:htX2UcZa >>784
後半の質問はもちろん再割り当てしてくれる
どの環境の標準アロケータでもそのような普通のことは当然している
だからアロケータの変更などは何か問題が起きてから考えればいい
質問の挙動ならばアドレスを表示させればわかる
fn main() {
// aを割り当て
let a = foo(123);
println!("a: {:p}", &*a);
// bを割り当て
let b = foo(456);
println!("b: {:p}", &*b);
// aを解放
std::mem::drop(a);
// cを割り当て
let c = foo(789);
println!("c: {:p}", &*c);
// aとcは同じアドレスになっている
}
fn foo(init: i32) -> Box<[i32; 1000]> {
std::boxed::Box::new([init; 1000])
}
後半の質問はもちろん再割り当てしてくれる
どの環境の標準アロケータでもそのような普通のことは当然している
だからアロケータの変更などは何か問題が起きてから考えればいい
質問の挙動ならばアドレスを表示させればわかる
fn main() {
// aを割り当て
let a = foo(123);
println!("a: {:p}", &*a);
// bを割り当て
let b = foo(456);
println!("b: {:p}", &*b);
// aを解放
std::mem::drop(a);
// cを割り当て
let c = foo(789);
println!("c: {:p}", &*c);
// aとcは同じアドレスになっている
}
fn foo(init: i32) -> Box<[i32; 1000]> {
std::boxed::Box::new([init; 1000])
}
787デフォルトの名無しさん
2023/07/22(土) 08:56:00.85ID:40PxJ+ku やはりそうですね
Rustはヒープエリアのメモリ管理は言語システムでは提供しない、その性能については規定しない立場なんですね
なので先の質問のような場合「Rustでは必ずうまいことやってくれる」とは言えず「コンパイラ××、実行環境××で実測したらうまく行った」程度しか言えず、同じソースを別の環境に持ってやったらダメだったもありうるんですね
結局ヒープを使わざるを得ない場合には「自分でメモリ割り当てをうまいことやる」しかないんですね
今やってる例だとスタックには入らないって怒られるし、ヒープ使うなら、うまくいくかはやってみるまでわからないというのはちょっと面白くないなぁ
Rustはヒープエリアのメモリ管理は言語システムでは提供しない、その性能については規定しない立場なんですね
なので先の質問のような場合「Rustでは必ずうまいことやってくれる」とは言えず「コンパイラ××、実行環境××で実測したらうまく行った」程度しか言えず、同じソースを別の環境に持ってやったらダメだったもありうるんですね
結局ヒープを使わざるを得ない場合には「自分でメモリ割り当てをうまいことやる」しかないんですね
今やってる例だとスタックには入らないって怒られるし、ヒープ使うなら、うまくいくかはやってみるまでわからないというのはちょっと面白くないなぁ
788デフォルトの名無しさん
2023/07/22(土) 09:24:29.44ID:htX2UcZa >>787
OS環境などが提供するアロケータ(=Rustのデフォルトのアロケータ)をそのまま使う時だけ環境依存になる
これはRustに限らずそれをそのまま使う全てのプログラミング言語で起こるためRustの問題ではない
しかもRustは次のように解決策がある言語だ
アロケータ含めて同じソースを持っていってそれを使うならば動作も同じになるので大丈夫
例えば先ほどのケースのようにjemallocをアロケータとして指定して使えば環境依存ではなくなる
よほど特殊なケースでの特殊な効率化を目指さない限り自分でアロケータを書く必要はない
OS環境などが提供するアロケータ(=Rustのデフォルトのアロケータ)をそのまま使う時だけ環境依存になる
これはRustに限らずそれをそのまま使う全てのプログラミング言語で起こるためRustの問題ではない
しかもRustは次のように解決策がある言語だ
アロケータ含めて同じソースを持っていってそれを使うならば動作も同じになるので大丈夫
例えば先ほどのケースのようにjemallocをアロケータとして指定して使えば環境依存ではなくなる
よほど特殊なケースでの特殊な効率化を目指さない限り自分でアロケータを書く必要はない
789デフォルトの名無しさん
2023/07/22(土) 09:54:09.20ID:JFG0S3Tm まぁそうですね
Rustにしたら今までのプログラミング言語で常に問題視されてたアロケーション問題が魔法のように解決するなどという事があるはずはないですね
Rustにしたら今までのプログラミング言語で常に問題視されてたアロケーション問題が魔法のように解決するなどという事があるはずはないですね
790デフォルトの名無しさん
2023/07/22(土) 09:59:59.87ID:htX2UcZa 何を問題にしているのか明確にせよ
Rustはアロケータすら自由に入れ替えられる
つまり理論上可能なことはRustならば解決できる
Rustはアロケータすら自由に入れ替えられる
つまり理論上可能なことはRustならば解決できる
791デフォルトの名無しさん
2023/07/22(土) 10:40:08.11ID:S6pKsqQS 複オジーww
792デフォルトの名無しさん
2023/07/22(土) 10:45:39.31ID:xU//sEEH 問題は普通のプログラミング言語の“メモリ割り当て問題”です
別にRust特有の問題ではなく、どんなプログラミング言語でも発生する問題ですよ
Rustではどういう戦略で当たってるのかなと
もちろんこの戦略に関して“どんな場合でもうまくいくまほうのような解決策”などありません、そして多くの場合この処理は大変重たい処理でとても重大な問題を引き起こします
画像処理、動画処理、AIの機械学習の処理などで大きなデータの割り当て、更新、消去は処理中かなり頻繁に起こり、データサイズによってはフラグメンテーションが大きな問題になる事などしょっちゅうです
結局プログラマはほとんどの場合自前でアロケーション問題を解決させられるわけでそこにもはや“言語のデフォルトに任せておけばいける”幻想は抱いてません
しかしRustはどうしてるんだろうと、もしRustでやれといわれた場合があったと妄想して自分にそれができるようにしときたいなと思って自習中なんです、まぁ絶対なさそうですが
今まで色々資料読んだ範囲内だと感覚的には「Rustはメモリ管理に関しては言語内部的には頑張らない、外部環境で処理するか、可読性を犠牲にガチャガチャしろ」というスタンスで提供されてる感じはしてます
別にRust特有の問題ではなく、どんなプログラミング言語でも発生する問題ですよ
Rustではどういう戦略で当たってるのかなと
もちろんこの戦略に関して“どんな場合でもうまくいくまほうのような解決策”などありません、そして多くの場合この処理は大変重たい処理でとても重大な問題を引き起こします
画像処理、動画処理、AIの機械学習の処理などで大きなデータの割り当て、更新、消去は処理中かなり頻繁に起こり、データサイズによってはフラグメンテーションが大きな問題になる事などしょっちゅうです
結局プログラマはほとんどの場合自前でアロケーション問題を解決させられるわけでそこにもはや“言語のデフォルトに任せておけばいける”幻想は抱いてません
しかしRustはどうしてるんだろうと、もしRustでやれといわれた場合があったと妄想して自分にそれができるようにしときたいなと思って自習中なんです、まぁ絶対なさそうですが
今まで色々資料読んだ範囲内だと感覚的には「Rustはメモリ管理に関しては言語内部的には頑張らない、外部環境で処理するか、可読性を犠牲にガチャガチャしろ」というスタンスで提供されてる感じはしてます
793デフォルトの名無しさん
2023/07/22(土) 11:31:54.16ID:l0FUWY0y794デフォルトの名無しさん
2023/07/22(土) 11:35:08.26ID:nQhdUCcc この人はそういう人なので適当に切り上げることをおすすめします
795デフォルトの名無しさん
2023/07/22(土) 11:38:03.03ID:xU//sEEH まぁ無理です
できないことをできると言い張るのはもはや学問ではなく信仰です
できないことをできると言い張るのはもはや学問ではなく信仰です
796デフォルトの名無しさん
2023/07/22(土) 11:49:43.86ID:YLqzZrt5 A造る
B造る
A消す
C造る
AのサイズよりCのサイズが小さいとき
A-Cのサイズ分のフラグメントが発生
B造る
A消す
C造る
AのサイズよりCのサイズが小さいとき
A-Cのサイズ分のフラグメントが発生
797デフォルトの名無しさん
2023/07/22(土) 12:06:07.26ID:24bvSiNd >>792
>> 今まで色々資料読んだ範囲内だと感覚的には「Rustはメモリ管理に関しては言語内部的には頑張らない、外部環境で処理するか、可読性を犠牲にガチャガチャしろ」というスタンスで提供されてる感じはしてます
メモリ管理の階層の違いを理解できていなさそうだが
メモリアロケータの話ならばRustはC++と同様に交換自由でライブラリ選択可能
可読性を犠牲にガチャガチャする必要はなくRustでは#[global_allocator]で指定するだけで交換可能
>> 今まで色々資料読んだ範囲内だと感覚的には「Rustはメモリ管理に関しては言語内部的には頑張らない、外部環境で処理するか、可読性を犠牲にガチャガチャしろ」というスタンスで提供されてる感じはしてます
メモリ管理の階層の違いを理解できていなさそうだが
メモリアロケータの話ならばRustはC++と同様に交換自由でライブラリ選択可能
可読性を犠牲にガチャガチャする必要はなくRustでは#[global_allocator]で指定するだけで交換可能
798デフォルトの名無しさん
2023/07/22(土) 13:41:17.13ID:7Mz5wCRP 理解できてなかったらしい
もういいや
もういいや
799デフォルトの名無しさん
2023/07/22(土) 13:57:51.76ID:u4m8T/// >>792はC言語でたとえるとmallocを使ったメモリ管理とmallocの中のメモリ管理の違いをわかっていない初心者かな
800デフォルトの名無しさん
2023/07/22(土) 13:58:55.74ID:NWfMWzFP そうです
初心者でした
お騒がせして申し訳ありませんでした
初心者でした
お騒がせして申し訳ありませんでした
801デフォルトの名無しさん
2023/07/22(土) 14:25:05.31ID:AxAuiZIS802デフォルトの名無しさん
2023/07/22(土) 14:42:32.24ID:QLIAp4G5 >>801
そんなに単純じゃないよ。
確保しようとする大きさによって違う領域から割り当てるような実装も普通。
順序良く割り当てるわけではなく、
そのときの状況によって効率的になるように采配する。
仮に断片化を意図的に起こしてでも総合的に断片化の確率を減らすような
戦略を持っているのかもしれないし、
よほど深刻な場合を除いて使う側はアロケータの中なんぞ忘れておくのが吉。
そんなに単純じゃないよ。
確保しようとする大きさによって違う領域から割り当てるような実装も普通。
順序良く割り当てるわけではなく、
そのときの状況によって効率的になるように采配する。
仮に断片化を意図的に起こしてでも総合的に断片化の確率を減らすような
戦略を持っているのかもしれないし、
よほど深刻な場合を除いて使う側はアロケータの中なんぞ忘れておくのが吉。
803デフォルトの名無しさん
2023/07/22(土) 14:54:17.36ID:NWfMWzFP もちろん発生しますよ
どんな場合でも最高次数にうまくいく魔法のような戦略なんてありません
なのでケースバイケースで場合に応じて戦略を使い分けなければならない
しかしOSの実行環境なんかのアロケーターはプログラムの内部情報を何一つ持ってないから「開きメモリのリストを持っておいて最初に見つかったスキマにアサインする、足りなくなったらGC」以外に戦略の採りようがない、だから従来のプログラミング言語は自分でGCするわけです、少なくともコンパイラはコンパイルする時点でどれくらいの頻度でどれくらいのサイズのアロケーション要求が発生するかある程度情報が得られるからそれを利用してよりよい割り当て戦略をとれるチャンスがあるからです、なんならその情報をコンパイラに教えるnotificationをつけられるように設計する事もできる
しかしそれとて限界がある、だからRustはもうそれすらやらない、アロケーションは自分でやれ、そのためのツールはある程度は言語内部で用意する、ダメなら言語外部のツール使え、という「無理してやってもどうせ“最適”には程遠いからやらない」んでしょう
逆に言えばRustでプログラム組むとき、特にでかいデータの作成、廃棄を繰り返すような場合はプログラマはかなり練度が必要になるんでしょう
立ち位置としてそれくらいの事がこなせるユーザーをプログラマとして想定してるという事です
学習コストが高いんじゃなくてそもそもプログラマに要求されてる水準が高めなんですね
どんな場合でも最高次数にうまくいく魔法のような戦略なんてありません
なのでケースバイケースで場合に応じて戦略を使い分けなければならない
しかしOSの実行環境なんかのアロケーターはプログラムの内部情報を何一つ持ってないから「開きメモリのリストを持っておいて最初に見つかったスキマにアサインする、足りなくなったらGC」以外に戦略の採りようがない、だから従来のプログラミング言語は自分でGCするわけです、少なくともコンパイラはコンパイルする時点でどれくらいの頻度でどれくらいのサイズのアロケーション要求が発生するかある程度情報が得られるからそれを利用してよりよい割り当て戦略をとれるチャンスがあるからです、なんならその情報をコンパイラに教えるnotificationをつけられるように設計する事もできる
しかしそれとて限界がある、だからRustはもうそれすらやらない、アロケーションは自分でやれ、そのためのツールはある程度は言語内部で用意する、ダメなら言語外部のツール使え、という「無理してやってもどうせ“最適”には程遠いからやらない」んでしょう
逆に言えばRustでプログラム組むとき、特にでかいデータの作成、廃棄を繰り返すような場合はプログラマはかなり練度が必要になるんでしょう
立ち位置としてそれくらいの事がこなせるユーザーをプログラマとして想定してるという事です
学習コストが高いんじゃなくてそもそもプログラマに要求されてる水準が高めなんですね
804デフォルトの名無しさん
2023/07/22(土) 16:19:13.40ID:2BLjTz4O >>803
間違い多いな
まず一般的にGCはフラグメンテーションを解決しない
特にマークアンドスイープ方式のGCや参照カウント方式のGCはフラグメンテーションは放置で関与しない
Rustについての記述は間違いだらけでなんとも言いようがない
言語外部のツール使えとはトンデモすぎて何を言ってるのかもわからない
フラグメンテーションを起こし得るメモリアロケーターについてRustはC/C++と同じ立場で同じものを使う
C/C++/Rust共通の話として同じようにjemallocなど別のメモリアロケーターを使うことができる
Rustだけ特別な方法をとったり特別な性質をもったりはしておらずフラグメンテーションについてもC/C++と同じ
間違い多いな
まず一般的にGCはフラグメンテーションを解決しない
特にマークアンドスイープ方式のGCや参照カウント方式のGCはフラグメンテーションは放置で関与しない
Rustについての記述は間違いだらけでなんとも言いようがない
言語外部のツール使えとはトンデモすぎて何を言ってるのかもわからない
フラグメンテーションを起こし得るメモリアロケーターについてRustはC/C++と同じ立場で同じものを使う
C/C++/Rust共通の話として同じようにjemallocなど別のメモリアロケーターを使うことができる
Rustだけ特別な方法をとったり特別な性質をもったりはしておらずフラグメンテーションについてもC/C++と同じ
805デフォルトの名無しさん
2023/07/22(土) 16:41:16.06ID:NWfMWzFP 素人なものですいません
スレ汚しすいませんでした
スレ汚しすいませんでした
806デフォルトの名無しさん
2023/07/22(土) 17:02:30.53ID:NRmzieuj >まず一般的にGCはフラグメンテーションを解決しない
マーク&スウィープ方式は一般的にコンパクションもやってるぞ
マーク&スウィープ方式は一般的にコンパクションもやってるぞ
807デフォルトの名無しさん
2023/07/22(土) 17:07:41.36ID:2BLjTz4O808デフォルトの名無しさん
2023/07/22(土) 17:59:22.96ID:QLIAp4G5809デフォルトの名無しさん
2023/07/22(土) 18:05:22.75ID:YLqzZrt5 そういえば君らのメモリ管理の会話でLinkedListの使い道思い出したわ
Rustやその他の言語側じゃなくてOS側のメモリ管理にLinkedList使われてるわ
Rustやその他の言語側じゃなくてOS側のメモリ管理にLinkedList使われてるわ
810デフォルトの名無しさん
2023/07/22(土) 18:42:28.71ID:2BLjTz4O811デフォルトの名無しさん
2023/07/22(土) 19:01:55.55ID:TsQs+vXV812デフォルトの名無しさん
2023/07/22(土) 19:18:33.46ID:2BLjTz4O >>811
compactionをする前にマークアンドスイープGC自体は既に終わっていて独立した別の行為
実際にそれら言語では世代別GCが行われていていて新入り若手のオブジェクトはコピーGCを行なうが古いオブジェクトはマークアンドスイープのみで再配置しない方法が一般的
compactionをする前にマークアンドスイープGC自体は既に終わっていて独立した別の行為
実際にそれら言語では世代別GCが行われていていて新入り若手のオブジェクトはコピーGCを行なうが古いオブジェクトはマークアンドスイープのみで再配置しない方法が一般的
813デフォルトの名無しさん
2023/07/22(土) 19:31:27.25ID:nB6v7J6K 隔離スレ行けアスペジジー
814デフォルトの名無しさん
2023/07/22(土) 20:04:44.58ID:2BLjTz4O 再配置はデータコピーとそこへのポインタ全て書き換えでコストが大きすぎるから可能な限り避けるのが正しい
世代別GCで若手オブジェクトだけに限ってコピーGCの対象にするのも若手の大半は一時的利用でコピーしなくて済むため
Rustではそんなコストをかけないだけでなくヒープ確保解放のコストすら減らすことと一石二鳥で解決する方法も取られている
例えばbumpalo crateはまとまった領域を持って追記していくだけで個別の解放コストゼロ(=何もしない)と個別の確保コストも最小(=追記のみor足りないとまとまったお代わり)のアリーナアロケータ
つまり未使用領域の再利用をしないことで管理不要となり最高速になるとともにまとめて一気に最高速で返す
具体的にはサーバーまたはバッチ処理で各対象固有データのみそこから確保してその対象を終える時に破棄
これはフラグメンテーションを防ぐのに非常に効果的な方法
世代別GCで若手オブジェクトだけに限ってコピーGCの対象にするのも若手の大半は一時的利用でコピーしなくて済むため
Rustではそんなコストをかけないだけでなくヒープ確保解放のコストすら減らすことと一石二鳥で解決する方法も取られている
例えばbumpalo crateはまとまった領域を持って追記していくだけで個別の解放コストゼロ(=何もしない)と個別の確保コストも最小(=追記のみor足りないとまとまったお代わり)のアリーナアロケータ
つまり未使用領域の再利用をしないことで管理不要となり最高速になるとともにまとめて一気に最高速で返す
具体的にはサーバーまたはバッチ処理で各対象固有データのみそこから確保してその対象を終える時に破棄
これはフラグメンテーションを防ぐのに非常に効果的な方法
815デフォルトの名無しさん
2023/07/22(土) 21:33:49.24ID:kHWj4RWJ まーた複オジが知ったかぶりして無知晒してるw
初心者かなww
初心者かなww
816デフォルトの名無しさん
2023/07/22(土) 22:04:25.70ID:kdu4dn9d Rust使うくらいならJavaかC#で良いのでは?
817デフォルトの名無しさん
2023/07/22(土) 22:08:51.83ID:wR/xGD2g RustとC#だとどっちがいいの?
818デフォルトの名無しさん
2023/07/23(日) 02:44:41.28ID:lmJrnSr9 >>814
GCのないRustが速いわけだ
GCのないRustが速いわけだ
819デフォルトの名無しさん
2023/07/23(日) 11:09:10.60ID:kMNWXVHy >>814
C/C++でも同じアルゴリズムのアロケータあるで
C/C++でも同じアルゴリズムのアロケータあるで
820デフォルトの名無しさん
2023/07/23(日) 11:10:16.97ID:dOw1chPf >>816
🤮
🤮
821デフォルトの名無しさん
2023/07/25(火) 06:32:45.09ID:7X7HwnNv >>819
言語に関係なくそこへ行き着くんだよな
もちろん通常はフラグメンテーションなんか気にせずに普通にコードを書けばよく
稼働時間の長いプロセスでフラグメンテーションが実際に起きた時の解決策の一つ
言語に関係なくそこへ行き着くんだよな
もちろん通常はフラグメンテーションなんか気にせずに普通にコードを書けばよく
稼働時間の長いプロセスでフラグメンテーションが実際に起きた時の解決策の一つ
822デフォルトの名無しさん
2023/07/27(木) 13:16:19.02ID:/bGsBsBb play-rustのコードのコピペのやり方教えて下さい
具体的にはお題スレの
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=f627f3a5de4a0c467f015a8b1527c141
のコードコピペする方法がわかりません
よろしくお願いします
具体的にはお題スレの
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=f627f3a5de4a0c467f015a8b1527c141
のコードコピペする方法がわかりません
よろしくお願いします
823デフォルトの名無しさん
2023/07/27(木) 14:04:04.46ID:90/I2Z5n rustは型推論をしてくれると聞いたのですけど、結果どういう型になったか調べる方法はありますか?
Haskellのghciの:tに当たるやつです
例えはghci内で
prelude> let f n = sum [ x^n | x<- [1..5] ]
として
prelude> :t f
とすれば
( Num a, Integral b ) => b -> a
のように返してくれます
rustでコンパイラの型推論の結果どういう型に決定したのか調べる方法はありますか?
Haskellのghciの:tに当たるやつです
例えはghci内で
prelude> let f n = sum [ x^n | x<- [1..5] ]
として
prelude> :t f
とすれば
( Num a, Integral b ) => b -> a
のように返してくれます
rustでコンパイラの型推論の結果どういう型に決定したのか調べる方法はありますか?
824デフォルトの名無しさん
2023/07/27(木) 14:28:57.60ID:p+3LvAw4 >>823
LSP 対応のエディタ (VSCode など) を使ってるならそのへんにカーソルを合わせるだけで型は見れるよ。
LSP 対応のエディタ (VSCode など) を使ってるならそのへんにカーソルを合わせるだけで型は見れるよ。
825デフォルトの名無しさん
2023/07/27(木) 21:59:53.82ID:x4QyUuiY >>823
安直な方法としては関数の戻り型なら -> i32と嘘の型宣言を指定すれば型不一致で正しい具体型をコンパイルエラーに表示してくれる
プログラムで表示したいならこれ
fn get_type<T>(_: T) -> &'static str {
std::any::type_name::<T>()
}
安直な方法としては関数の戻り型なら -> i32と嘘の型宣言を指定すれば型不一致で正しい具体型をコンパイルエラーに表示してくれる
プログラムで表示したいならこれ
fn get_type<T>(_: T) -> &'static str {
std::any::type_name::<T>()
}
826デフォルトの名無しさん
2023/07/27(木) 23:11:30.70ID:sTDTKxns827デフォルトの名無しさん
2023/07/27(木) 23:12:33.60ID:paov2RlH rustの型推論って曖昧なことを許容したっけ?
すべて一意にならないとならないと思ってたけど
すべて一意にならないとならないと思ってたけど
828デフォルトの名無しさん
2023/07/28(金) 19:39:32.86ID:4cjf/6GX >>827
正しい
ジェネリックであってもパラメタは各々で必ず一意に静的に確定せねばならず
impl Traitで型宣言しても各々で一意に具体的な型に静的に確定する
特にそれが関数の引数ならば生成コードは単相化される
ただしdyn Traitはそれらが静的ではなく実行時のオブジェクト生成毎に個別に一意の具体的な型に確定する点で異なる
コンパイル時の静的な生成コードは複数の型で共有となるためvtableを持って対処している
正しい
ジェネリックであってもパラメタは各々で必ず一意に静的に確定せねばならず
impl Traitで型宣言しても各々で一意に具体的な型に静的に確定する
特にそれが関数の引数ならば生成コードは単相化される
ただしdyn Traitはそれらが静的ではなく実行時のオブジェクト生成毎に個別に一意の具体的な型に確定する点で異なる
コンパイル時の静的な生成コードは複数の型で共有となるためvtableを持って対処している
829デフォルトの名無しさん
2023/07/29(土) 16:54:29.41ID:Nh9kevR9 なるほど
Rustは最終的にコンパイルが終わって型が完全に推論が終わって単相型が決定した状態でしかわからないのかな
当然get_typeで得られるstrは推論終わって単相型が割り当てられた後の型しかわからないんやな
Rustは最終的にコンパイルが終わって型が完全に推論が終わって単相型が決定した状態でしかわからないのかな
当然get_typeで得られるstrは推論終わって単相型が割り当てられた後の型しかわからないんやな
830デフォルトの名無しさん
2023/07/29(土) 18:53:43.03ID:nTghkNr5 コードを書いた時点で型は決まるし書いた人は型を把握できる
ジェネリックな関数だとしても型パラメタ以外の部分は確定している
その関数を呼び出す側が最後のピースとして型パラメタを指定して完全確定する
ジェネリックな関数だとしても型パラメタ以外の部分は確定している
その関数を呼び出す側が最後のピースとして型パラメタを指定して完全確定する
831デフォルトの名無しさん
2023/07/29(土) 19:01:27.37ID:mkN3FcGi そうなんよねぇ
ML型型理論ならexpression毎に最も一般的な型が決まる
Haskellは型を指定しない場合自動的にその最も一般的な型を確定させてghciとかで調べられる
今のところ上がってる方法ではRustではそれに該当する方法はなさそう
ML型型理論ならexpression毎に最も一般的な型が決まる
Haskellは型を指定しない場合自動的にその最も一般的な型を確定させてghciとかで調べられる
今のところ上がってる方法ではRustではそれに該当する方法はなさそう
832デフォルトの名無しさん
2023/07/29(土) 19:02:57.30ID:mkN3FcGi イヤまだvscideとかのやつは試してないな
これならできるんかな?
これならできるんかな?
833デフォルトの名無しさん
2023/07/29(土) 20:36:12.76ID:JeVM9tS2 こいつダメだわ
ある意味複オジ2世
ある意味複オジ2世
834デフォルトの名無しさん
2023/07/29(土) 21:40:33.16ID:EPaDIYai >>829
> Rustは最終的にコンパイルが終わって型が完全に推論が終わって単相型が決定した状態でしかわからないのかな
いやもうrustは変数宣言時に定義した型の変更を許さないのよ(基本的に)
だから型推論は変数宣言時のものを利用したり、関数の場合は返値、手打ちの数字の場合はデフォルトの型に決め打ちされて型推論されるわけ
いちいち型を調べる必要がない
ジェネリックに関しても基本的に場合分け
> Rustは最終的にコンパイルが終わって型が完全に推論が終わって単相型が決定した状態でしかわからないのかな
いやもうrustは変数宣言時に定義した型の変更を許さないのよ(基本的に)
だから型推論は変数宣言時のものを利用したり、関数の場合は返値、手打ちの数字の場合はデフォルトの型に決め打ちされて型推論されるわけ
いちいち型を調べる必要がない
ジェネリックに関しても基本的に場合分け
835デフォルトの名無しさん
2023/07/29(土) 21:44:15.48ID:EPaDIYai pythonとかjavascriptとか勝手に型を変更する(ような振る舞いをする→変更するとは言ってない)
言語なんてサイテーだと個人的には思う
言語なんてサイテーだと個人的には思う
836デフォルトの名無しさん
2023/07/29(土) 22:05:07.65ID:2dUASh9D837デフォルトの名無しさん
2023/07/29(土) 22:10:13.37ID:2dUASh9D ごめん、誤字った
rustの型システムはMLじゃないの?
いわゆる型の全体と命題論理の全体を一対一に対応させる
で、その命題論理の目モデルを探す事=単相型を決定する事がMLの型推論システムで、Rustもそれ採用してるんだと思ってるんだけど
で単相型が割り当てられる“命題”に対応してるものが多相型と呼ぶんだと教えてもらった事あるけど
rustの型システムはMLじゃないの?
いわゆる型の全体と命題論理の全体を一対一に対応させる
で、その命題論理の目モデルを探す事=単相型を決定する事がMLの型推論システムで、Rustもそれ採用してるんだと思ってるんだけど
で単相型が割り当てられる“命題”に対応してるものが多相型と呼ぶんだと教えてもらった事あるけど
838デフォルトの名無しさん
2023/07/29(土) 22:19:51.45ID:381IW7f/ も少し書くなら基本的にrustもhaskellも型システムは基本的な原理は同じじゃないのって話
それを説明する用語としてRust特定の説明の仕方をしてるのかもしれないけど説明の仕方や用語の使い方を変えたところでどっちもカリーハワード理論に基づく型システムじゃない?
それを説明する用語としてRust特定の説明の仕方をしてるのかもしれないけど説明の仕方や用語の使い方を変えたところでどっちもカリーハワード理論に基づく型システムじゃない?
839デフォルトの名無しさん
2023/07/29(土) 22:51:50.32ID:381IW7f/ もし同じならHaskellと同じく例えば
mysum [] = 0
mysum (a:as) = a + ( mysum as )
なら Haskell ならmysumの型は
( Num a ) => [ a ] -> a
と推論されます
RustでもML型システムである限り少なくとも内部的には同じような型が割り当てられてるはずだと思うんですけど
もちろんこれら推論された型を全部総合して実装時には特定の単相型が割り当てられます
この辺のメカニズムはHaskellもRustも同じじゃないんでしょうか?
mysum [] = 0
mysum (a:as) = a + ( mysum as )
なら Haskell ならmysumの型は
( Num a ) => [ a ] -> a
と推論されます
RustでもML型システムである限り少なくとも内部的には同じような型が割り当てられてるはずだと思うんですけど
もちろんこれら推論された型を全部総合して実装時には特定の単相型が割り当てられます
この辺のメカニズムはHaskellもRustも同じじゃないんでしょうか?
840デフォルトの名無しさん
2023/07/29(土) 23:06:20.41ID:MBm8IaU2 まずRustの数値リテラルはHaskellと違って多相な型を持たないです
841デフォルトの名無しさん
2023/07/29(土) 23:25:14.79ID:I6XWshKt >>839
分かってる気になっておかしなことを書く癖を直したほうがいいと思うが…
分かってる気になっておかしなことを書く癖を直したほうがいいと思うが…
842デフォルトの名無しさん
2023/07/29(土) 23:36:28.14ID:I6XWshKt 人間としての推論機構が間違っている
基礎を勉強してルールとしてそれを覚えてから
それを基に推論を行わないと意味がないと知るべき
基礎を勉強してルールとしてそれを覚えてから
それを基に推論を行わないと意味がないと知るべき
843デフォルトの名無しさん
2023/07/29(土) 23:51:52.56ID:nTghkNr5 >>831
最も一般的な型ではダメでRustは唯一に確定しなければならない
Rustは関数(メソッド)の引数も返り値も型宣言が必須だけど
そこでの型はジェネリックで型パラメータを持つものも多く
その型パラメータのトレイト境界などによる制約とそのトレイト実装をする型が複数あることから複数解も生じる
複数解がありうるならばコンパイルエラーとなり明示的な型指定を求められる
唯一の例外が数値リテラルの利用により数値型までは確定している時でそれが整数ならば自動的にi32型に解決される
最も一般的な型ではダメでRustは唯一に確定しなければならない
Rustは関数(メソッド)の引数も返り値も型宣言が必須だけど
そこでの型はジェネリックで型パラメータを持つものも多く
その型パラメータのトレイト境界などによる制約とそのトレイト実装をする型が複数あることから複数解も生じる
複数解がありうるならばコンパイルエラーとなり明示的な型指定を求められる
唯一の例外が数値リテラルの利用により数値型までは確定している時でそれが整数ならば自動的にi32型に解決される
844デフォルトの名無しさん
2023/07/30(日) 00:16:28.33ID:psEFm3Dt >>840
その説明はよくrustの解説本にあるけど多分字面通りの意味にとってはいけないんじゃないかと
だってプログラム全体を見なければ型なんか決められるはずない
ML型の型システムである限りHaskellのexpressionから定まる最も一般的な多相型持ってると思う、でなければML型型システムと呼べない
さっきあげたmysumなんかその典型、あのmusumはnum classに属するすべての型で使うことができる、もしこのような多相型を持たない理論ならすべての足し算を持つクラス全てにほとんど同じsumを定義させられることになる、それを避けられるのがML型システムの1番の売りなんだから
てか上の例のmysumに相当する書き方Rustでもできるんでしょ?
無理なん?
その説明はよくrustの解説本にあるけど多分字面通りの意味にとってはいけないんじゃないかと
だってプログラム全体を見なければ型なんか決められるはずない
ML型の型システムである限りHaskellのexpressionから定まる最も一般的な多相型持ってると思う、でなければML型型システムと呼べない
さっきあげたmysumなんかその典型、あのmusumはnum classに属するすべての型で使うことができる、もしこのような多相型を持たない理論ならすべての足し算を持つクラス全てにほとんど同じsumを定義させられることになる、それを避けられるのがML型システムの1番の売りなんだから
てか上の例のmysumに相当する書き方Rustでもできるんでしょ?
無理なん?
845デフォルトの名無しさん
2023/07/30(日) 00:18:56.60ID:psEFm3Dt ML型システムと呼べないは言い過ぎかな?
まぁ型宣言省略しても型推論してくれるならML型型システムと呼べなくはないけど、でも流石にさっきのmysumみたいな記述は許されてるんじゃないの?
まぁ型宣言省略しても型推論してくれるならML型型システムと呼べなくはないけど、でも流石にさっきのmysumみたいな記述は許されてるんじゃないの?
846デフォルトの名無しさん
2023/07/30(日) 00:19:43.44ID:dT6HJfPv ハスケル!
ハスケル!
ハスケル!
その毎度のハスケルおじさんに構うのは止めとけよ
Rubyおじさんと変わらないんだからさあ
自覚のない荒らしだよ
ハスケル!
ハスケル!
その毎度のハスケルおじさんに構うのは止めとけよ
Rubyおじさんと変わらないんだからさあ
自覚のない荒らしだよ
847デフォルトの名無しさん
2023/07/30(日) 00:19:47.09ID:psEFm3Dt848デフォルトの名無しさん
2023/07/30(日) 00:21:02.70ID:dT6HJfPv Haskellおじさんは自分の思いをここに書かないと死んじゃうの?
なんでRustをRustとして扱いたくないの?
なんでRustをRustとして扱いたくないの?
849デフォルトの名無しさん
2023/07/30(日) 00:21:05.69ID:psEFm3Dt850デフォルトの名無しさん
2023/07/30(日) 00:22:04.96ID:dT6HJfPv ハスケルおじさんは壁に向かってハスケルハスケル行ってればいいのに
851デフォルトの名無しさん
2023/07/30(日) 00:24:01.50ID:dT6HJfPv マクロしらんの?
852デフォルトの名無しさん
2023/07/30(日) 00:24:09.72ID:psEFm3Dt >>848
すでに習得した言語の対比して新しい言語に挑戦するのは当たり前やろ?
Haskellの型システム理解するのにどれだけの時間をかけて教科書を読み、論文を読み、プログラミングを組んでみたか、その資産を使いたいとおもうのがそんなに悪いんか?
黙っといてくれよ
すでに習得した言語の対比して新しい言語に挑戦するのは当たり前やろ?
Haskellの型システム理解するのにどれだけの時間をかけて教科書を読み、論文を読み、プログラミングを組んでみたか、その資産を使いたいとおもうのがそんなに悪いんか?
黙っといてくれよ
853デフォルトの名無しさん
2023/07/30(日) 00:24:40.66ID:dT6HJfPv854デフォルトの名無しさん
2023/07/30(日) 00:26:23.01ID:dT6HJfPv 論文読まないとプログラム言語が理解できないんだから困ったやつだろ
推論システムが変
推論システムが変
855デフォルトの名無しさん
2023/07/30(日) 00:29:41.31ID:dT6HJfPv まずは"真面目にRust学習"しろ
そして習得しろ
そして疑問を解決しろ
そして習得しろ
そして疑問を解決しろ
856デフォルトの名無しさん
2023/07/30(日) 00:32:06.97ID:psEFm3Dt >>854
すまんけどオレは論文なんか読まなくても理解できるような天才じゃないんだよ
君は論文なんぞ読まなくても何もかもわかる天才なのかもしれんけど世の中そんな天才ばかりじゃないんだよ
オレみたいに寝食忘れて努力に努力を重ねてやっと話しが分かる鈍才もいるんだよ
鈍才が悪あがきするの邪魔せんでくれ
すまんけどオレは論文なんか読まなくても理解できるような天才じゃないんだよ
君は論文なんぞ読まなくても何もかもわかる天才なのかもしれんけど世の中そんな天才ばかりじゃないんだよ
オレみたいに寝食忘れて努力に努力を重ねてやっと話しが分かる鈍才もいるんだよ
鈍才が悪あがきするの邪魔せんでくれ
857デフォルトの名無しさん
2023/07/30(日) 00:33:26.30ID:psEFm3Dt858デフォルトの名無しさん
2023/07/30(日) 02:16:35.97ID:ArPWIRVu 大先生3人に共通するのは
自分は分かってるという根拠のない思い込みと
何度指摘されても全く反省せず同じことを繰り返す傍迷惑な行動
自分は分かってるという根拠のない思い込みと
何度指摘されても全く反省せず同じことを繰り返す傍迷惑な行動
859デフォルトの名無しさん
2023/07/30(日) 02:39:34.14ID:g1ghpAt+ >>847
consセルを使った簡易なリスト操作表記をRustは言語仕様レベルではサポートしていない
だからそのHaskellのmysumをその表現のまま移植するのは本質的ではないため
意味だけを重視してリストをイテレータで表現し再帰定義している点を尊重すると
use std::ops::Add;
use num::Zero;
fn mysum<T>(mut iter: impl Iterator<Item = T>) -> T
where
T: Zero + Add<Output = T>,
{
match iter.next() {
Some(n) => n + mysum(iter),
None => T::zero(),
}
}
一例としてこのようにmysumはジェネリックに書ける
mysumに最低限必要なトレイト境界(Zero + Add)のみを課している
もちろんこの関数だけで以下のように機能して計算結果も合う
assert_eq!(15, mysum([1, 2, 3, 4, 5].into_iter()));
consセルを使った簡易なリスト操作表記をRustは言語仕様レベルではサポートしていない
だからそのHaskellのmysumをその表現のまま移植するのは本質的ではないため
意味だけを重視してリストをイテレータで表現し再帰定義している点を尊重すると
use std::ops::Add;
use num::Zero;
fn mysum<T>(mut iter: impl Iterator<Item = T>) -> T
where
T: Zero + Add<Output = T>,
{
match iter.next() {
Some(n) => n + mysum(iter),
None => T::zero(),
}
}
一例としてこのようにmysumはジェネリックに書ける
mysumに最低限必要なトレイト境界(Zero + Add)のみを課している
もちろんこの関数だけで以下のように機能して計算結果も合う
assert_eq!(15, mysum([1, 2, 3, 4, 5].into_iter()));
860デフォルトの名無しさん
2023/07/30(日) 02:43:03.72ID:g1ghpAt+ >>859のmysumでトレイト境界はZeroとAddさえ満たしていれば通常の数値でなくても構わないので
例えば以下のようなHoge型を定義して必要なトレイト境界(ZeroとAdd)を実装すると
#[derive(PartialEq, Debug)]
struct Hoge(usize);
impl Zero for Hoge {
fn zero() -> Self { Hoge(0) }
fn is_zero(&self) -> bool { self.0 == 0 }
}
impl Add for Hoge {
type Output = Self;
fn add(self, rhs: Self) -> Self {
Hoge((1 << (self.0.trailing_ones() + rhs.0.trailing_ones())) - 1)
}
}
先程と同じように「15 = 1 + 2 + 3 + 4 + 5」をHoge型で表現することで
Hogeについてもmysum()は以下のようにきちんと計算できていることがわかる
assert_eq!(Hoge(0b111111111111111), mysum([Hoge(0b1), Hoge(0b11), Hoge(0b111), Hoge(0b1111), Hoge(0b11111)].into_iter()));
Haskellに全く詳しくないので逆に質問というか教えてほしい
このHoge型をHaskellで定義(実装)するにはどのようなコードになるのか?
そしてこのHoge型に対してもHaskell版>>839のmysumで使えるようにするにはどうするのか?
たぶん型クラスNumの代わりに型クラスZeroとAddを指定するだけで済むのだろうけど
もしHaskellに型クラスZeroやAddがなければそれを定義する形になるのだろうか?
よろしくお願いします
例えば以下のようなHoge型を定義して必要なトレイト境界(ZeroとAdd)を実装すると
#[derive(PartialEq, Debug)]
struct Hoge(usize);
impl Zero for Hoge {
fn zero() -> Self { Hoge(0) }
fn is_zero(&self) -> bool { self.0 == 0 }
}
impl Add for Hoge {
type Output = Self;
fn add(self, rhs: Self) -> Self {
Hoge((1 << (self.0.trailing_ones() + rhs.0.trailing_ones())) - 1)
}
}
先程と同じように「15 = 1 + 2 + 3 + 4 + 5」をHoge型で表現することで
Hogeについてもmysum()は以下のようにきちんと計算できていることがわかる
assert_eq!(Hoge(0b111111111111111), mysum([Hoge(0b1), Hoge(0b11), Hoge(0b111), Hoge(0b1111), Hoge(0b11111)].into_iter()));
Haskellに全く詳しくないので逆に質問というか教えてほしい
このHoge型をHaskellで定義(実装)するにはどのようなコードになるのか?
そしてこのHoge型に対してもHaskell版>>839のmysumで使えるようにするにはどうするのか?
たぶん型クラスNumの代わりに型クラスZeroとAddを指定するだけで済むのだろうけど
もしHaskellに型クラスZeroやAddがなければそれを定義する形になるのだろうか?
よろしくお願いします
861デフォルトの名無しさん
2023/07/30(日) 10:57:59.43ID:TSIasAnA >>860
Haskellではこうなります
https://ideone.com/PKy694
mysum [] = 0
mysum ( a : as ) = a + ( mysum as )
hogePlus a 0 = a
hogePlus a b | even b = 2 * (hogePlus a ( div b 2 ) )
hogePlus a b = 1 + 2 * (hogePlus a ( div b 2 ) )
data Hoge = H Integer deriving Show
instance Num Hoge where
( H x ) + ( H y ) = H ( hogePlus x y )
fromInteger = H
main = do
print $ mysum [ 1..5 ]
print $ hogePlus 3 7
print $ mysum [ H 1, H 3, H 7, H 15, H 31 ]
Haskellではこうなります
https://ideone.com/PKy694
mysum [] = 0
mysum ( a : as ) = a + ( mysum as )
hogePlus a 0 = a
hogePlus a b | even b = 2 * (hogePlus a ( div b 2 ) )
hogePlus a b = 1 + 2 * (hogePlus a ( div b 2 ) )
data Hoge = H Integer deriving Show
instance Num Hoge where
( H x ) + ( H y ) = H ( hogePlus x y )
fromInteger = H
main = do
print $ mysum [ 1..5 ]
print $ hogePlus 3 7
print $ mysum [ H 1, H 3, H 7, H 15, H 31 ]
862デフォルトの名無しさん
2023/07/30(日) 10:58:19.77ID:TSIasAnA この例だとmysumの型は
mysum :: ( Num a ) => [ a ] -> a
と推論されます
すなわちmysumは
aがNum class に属する型aに対して[a]型の値に対してa型の値を返す関数の型
です
よってmysumをある型Hogeで利用するにはHogeにNumインスタンスを導入しなければなりません、すなわちRustでは
impl Num for Hoge { ... }
のように書く部分です( >> 860 のAdd,Zeroを実装してる部分に該当します)
本来はNumのminimal complete definition全部実装するべきでHaskell1990までは“定義が揃ってない”とおこられましたが。2010以降は必要な分だけ実装すれば良い、ただし実行時エラーは覚悟しろという風に変更されてるようです(未確認、コンパイラがエラー吐かなくなったので)
mysum :: ( Num a ) => [ a ] -> a
と推論されます
すなわちmysumは
aがNum class に属する型aに対して[a]型の値に対してa型の値を返す関数の型
です
よってmysumをある型Hogeで利用するにはHogeにNumインスタンスを導入しなければなりません、すなわちRustでは
impl Num for Hoge { ... }
のように書く部分です( >> 860 のAdd,Zeroを実装してる部分に該当します)
本来はNumのminimal complete definition全部実装するべきでHaskell1990までは“定義が揃ってない”とおこられましたが。2010以降は必要な分だけ実装すれば良い、ただし実行時エラーは覚悟しろという風に変更されてるようです(未確認、コンパイラがエラー吐かなくなったので)
863デフォルトの名無しさん
2023/07/30(日) 12:33:59.93ID:g1ghpAt+ >>861
RustのAddトレイト実装によって足し算(a + b)のみを他の型でも自由に使えるようにできる機能をHaskellは持っていないということ?
そのためHaskellではやむを得ない代替処置としてHoge型を型クラスNumへ入れてしまうことで解決したということ?
例えばRustではStringについてもAddトレイト実装があり
let s = String::from("abc");
assert_eq!(s + "xyz", String::from("abcxyz"));
といったこともできます
同様に自作の型に対しても足し算のみの実装が可能です
Haskellではこのようなケースでもオーバースペック気味にNumを使うしかないのでしょうか?
RustのAddトレイト実装によって足し算(a + b)のみを他の型でも自由に使えるようにできる機能をHaskellは持っていないということ?
そのためHaskellではやむを得ない代替処置としてHoge型を型クラスNumへ入れてしまうことで解決したということ?
例えばRustではStringについてもAddトレイト実装があり
let s = String::from("abc");
assert_eq!(s + "xyz", String::from("abcxyz"));
といったこともできます
同様に自作の型に対しても足し算のみの実装が可能です
Haskellではこのようなケースでもオーバースペック気味にNumを使うしかないのでしょうか?
864デフォルトの名無しさん
2023/07/30(日) 12:37:15.22ID:g1ghpAt+ >>862
Haskellでは実行時エラーを覚悟しろという点は非常に困りますね
今回のケースも無理やりにNumへ入れてしまったのに足し算しか実装していないから引き算や掛け算などで実行時エラーとなるわけですよね
ちなみにRustのnumクレートでは
trait Num: Zero + One + NumOps + PartialEq とトレイト境界があり
impl NumOps for T where T: Add + Sub + Mul + Div + Rem {} の実装があります
つまり自作の型で使う場合は全ての演算を実装した上で更に加えて
impl Num for Foo とするとようやくNumになれます
したがってRustでは不備があればコンパイル時エラーとなり安心して安全に使うことができます
Haskellでは実行時エラーを覚悟しろという点は非常に困りますね
今回のケースも無理やりにNumへ入れてしまったのに足し算しか実装していないから引き算や掛け算などで実行時エラーとなるわけですよね
ちなみにRustのnumクレートでは
trait Num: Zero + One + NumOps + PartialEq とトレイト境界があり
impl NumOps for T where T: Add + Sub + Mul + Div + Rem {} の実装があります
つまり自作の型で使う場合は全ての演算を実装した上で更に加えて
impl Num for Foo とするとようやくNumになれます
したがってRustでは不備があればコンパイル時エラーとなり安心して安全に使うことができます
865デフォルトの名無しさん
2023/07/30(日) 12:47:58.55ID:wjjxPYUe そろそろ隔離スレ行ってろカスども
866デフォルトの名無しさん
2023/07/30(日) 14:02:34.57ID:iwDEPHME Haskell 的には演算子オーバーロードを目的として型クラスを使うことはしない。
Num な性質を持つ値の操作として + という名前の演算子もあるというだけで、
演算子として + を使いたいから型クラスの実装を定義するということはしないってこと。
それに、 Num はいくつかの演算子を使えるというだけではなく
それらの演算子の関係で満たさなければいけない性質があるので個々の演算子 (に結び付く型クラス) として分解できない。
https://hackage.haskell.org/package/base-4.18.0.0/docs/Prelude.html#t:Num
価値観が違う。
なんせ Haskell では記号を組み合わせていくらでも演算子を作ることが出来て
たとえば <$> とか >>= とかいう変な演算子を必要なだけ作れるので少ない演算子を取り合う必要がない。
Num の性質の中で + を使うってのと、
なんらかの足し算っぽい操作は別の名前で定義されているべきだし、
Haskell ではそれで困らない。
価値観が違う。
Num な性質を持つ値の操作として + という名前の演算子もあるというだけで、
演算子として + を使いたいから型クラスの実装を定義するということはしないってこと。
それに、 Num はいくつかの演算子を使えるというだけではなく
それらの演算子の関係で満たさなければいけない性質があるので個々の演算子 (に結び付く型クラス) として分解できない。
https://hackage.haskell.org/package/base-4.18.0.0/docs/Prelude.html#t:Num
価値観が違う。
なんせ Haskell では記号を組み合わせていくらでも演算子を作ることが出来て
たとえば <$> とか >>= とかいう変な演算子を必要なだけ作れるので少ない演算子を取り合う必要がない。
Num の性質の中で + を使うってのと、
なんらかの足し算っぽい操作は別の名前で定義されているべきだし、
Haskell ではそれで困らない。
価値観が違う。
867デフォルトの名無しさん
2023/07/30(日) 18:06:30.12ID:mgfeU+D6 新設の見慣れぬ演算子の種類を勝手に増やして各々が異なる意味付けすることは可読性を下げるのみで百害あって一利無し
>>862
コンパイラがエラーを吐かずに実行時エラーとなるのはマズいな
Haskellの価値観はよくない
>>862
コンパイラがエラーを吐かずに実行時エラーとなるのはマズいな
Haskellの価値観はよくない
868デフォルトの名無しさん
2023/07/30(日) 19:58:32.75ID:Llc746TG すいません、筆が滑りました
もちろんコンパイル時にエラー吐きます
以前のHaskellだと例えそのプログラムで使われてない場合でも実装しないとエラー吐いてました
しょうがないのでwhere句に使いもしないのに
_ * _ = undefined
signum _ = undefined
....
を書いてました
流石に無意味すぎて使わないのは書かなくて良いことになったようです
使ってるのに未実装はもちろんコンパイラが見つけてくれます
もちろんコンパイル時にエラー吐きます
以前のHaskellだと例えそのプログラムで使われてない場合でも実装しないとエラー吐いてました
しょうがないのでwhere句に使いもしないのに
_ * _ = undefined
signum _ = undefined
....
を書いてました
流石に無意味すぎて使わないのは書かなくて良いことになったようです
使ってるのに未実装はもちろんコンパイラが見つけてくれます
869デフォルトの名無しさん
2023/07/30(日) 20:06:02.24ID:iwDEPHME どうでもいいけど signum という名前を見るとヴォルケンリッターを連想してしまう……
870デフォルトの名無しさん
2023/07/31(月) 08:16:09.72ID:G+nEO2Oo どうでもいいなら・・・煽りたくなるな
871デフォルトの名無しさん
2023/07/31(月) 10:23:47.98ID:8wbRk2dY use Hoge::prelude::*; って良く観るがダサいなー
872デフォルトの名無しさん
2023/07/31(月) 10:35:07.69ID:i3Lje9zm でもまあ機能ごとにモジュールを整理しても
それとは別によく使う集合があるのも現実だし。
それとは別によく使う集合があるのも現実だし。
873デフォルトの名無しさん
2023/07/31(月) 11:07:00.50ID:sgBBFIN2 global 禁止(キリっ
874デフォルトの名無しさん
2023/07/31(月) 12:25:28.59ID:lZja90Kc875デフォルトの名無しさん
2023/07/31(月) 12:34:21.81ID:eCR2qI4e Rustで、Vecに要素を追加したとき、メモリ不足で
メモリ確保に失敗した場合、どうなるんですか?
C++の場合は「例外」がthrowされますが。
メモリ確保に失敗した場合、どうなるんですか?
C++の場合は「例外」がthrowされますが。
876デフォルトの名無しさん
2023/07/31(月) 14:38:56.18ID:uDpaCeqo pqnic
877デフォルトの名無しさん
2023/07/31(月) 16:40:54.67ID:cE0Z6rmj ピクニック?
878デフォルトの名無しさん
2023/07/31(月) 17:53:43.20ID:1dCFbVL1 fn っていちいち略さなくても function でよくない?
書き込める変数の宣言に mut ってつけるのもダサい
書き込める変数の宣言に mut ってつけるのもダサい
879デフォルトの名無しさん
2023/07/31(月) 18:05:43.81ID:+bjI2PCn mutはガチでダサい
何かいい記号はなかったのかとw
何かいい記号はなかったのかとw
880デフォルトの名無しさん
2023/07/31(月) 18:13:53.64ID:+bjI2PCn 英語圏の人たちはmut見てcoolに感じるとか日本人と感性が違う可能性がある
881デフォルトの名無しさん
2023/07/31(月) 18:38:57.32ID:9nT3Yxeb >>878
感性が古いよ
感性が古いよ
882デフォルトの名無しさん
2023/07/31(月) 18:48:05.02ID:STr6yd2M 今までミュートと読んでいた
883デフォルトの名無しさん
2023/07/31(月) 18:49:54.52ID:A3cMstwB unicode解禁にして変にすればいい
884デフォルトの名無しさん
2023/07/31(月) 20:49:15.69ID:X0OEUfKN >>881
短い略語を使いたがるのはメモリ容量が少なかった昔の習性・感性だろ。
昔に作られた言語のFortranとPascalですらfunctionは略さなかったのに、
今になって変な略語を採用したRust開発者は工学的センスも美的センスもない。
比較的新しい言語のF#はmutと略さずにmutableと書く。
短い略語を使いたがるのはメモリ容量が少なかった昔の習性・感性だろ。
昔に作られた言語のFortranとPascalですらfunctionは略さなかったのに、
今になって変な略語を採用したRust開発者は工学的センスも美的センスもない。
比較的新しい言語のF#はmutと略さずにmutableと書く。
885デフォルトの名無しさん
2023/07/31(月) 21:15:27.96ID:+bjI2PCn BASICの頃はDEF FNと言うので関数を定義してた
886デフォルトの名無しさん
2023/07/31(月) 21:25:40.03ID:4/4p/Sxt 様々なプログラミング言語があって千差万別な中
大した問題ではないキーワード名やその多少の長さに文句をつける人はダメな仕事できないやつ
仕事できる人は文法とその意味論を比べる
大した問題ではないキーワード名やその多少の長さに文句をつける人はダメな仕事できないやつ
仕事できる人は文法とその意味論を比べる
887デフォルトの名無しさん
2023/07/31(月) 21:34:38.41ID:+bjI2PCn ダサいのはダサい
今後何があってもbegin end区切りの言語は使わないと思う
delphiやってた時もimplementationと言うのを見てクソダサいなと感じた
Objective-Cも二度と接することはないだろう
今後何があってもbegin end区切りの言語は使わないと思う
delphiやってた時もimplementationと言うのを見てクソダサいなと感じた
Objective-Cも二度と接することはないだろう
888デフォルトの名無しさん
2023/07/31(月) 22:59:44.59ID:i3Lje9zm kotlin や swift の前で同じこと言えるの?
889デフォルトの名無しさん
2023/07/31(月) 23:19:46.93ID:+bjI2PCn implementation Point {
public function ...
}
public function ...
}
890デフォルトの名無しさん
2023/08/01(火) 03:00:40.65ID:8wU+ches891デフォルトの名無しさん
2023/08/01(火) 03:53:49.10ID:enF/Vqu1 constは定数だからコンパイル時に静的に確定する
immutableかmutableかというのはconstとは無関係な概念で実行時の変数の値が書き換わるかどうか
つまりRustの非mut (immutable)は定数ではなく実行時に値が決まる変数
immutableかmutableかというのはconstとは無関係な概念で実行時の変数の値が書き換わるかどうか
つまりRustの非mut (immutable)は定数ではなく実行時に値が決まる変数
892デフォルトの名無しさん
2023/08/01(火) 11:16:59.87ID:AvEKEx5a let x : u32 = 1234;
と
const x : u32 = 1234;
は違うんですか?
と
const x : u32 = 1234;
は違うんですか?
893デフォルトの名無しさん
2023/08/01(火) 11:22:28.49ID:AvEKEx5a なるほど、const = の右辺値はconst 文脈で書かれていてコンパイル時に決定できないといけないけど let = の右辺はその制約がないのか
894デフォルトの名無しさん
2023/08/01(火) 17:52:49.94ID:3uGNwlqu constはコンパイル時に値が決まる定数となり定数名は大文字で書く
letは(mutの有無に関係なく)実行時に値が決まる変数となり変数名は小文字で書く
mutの有無はその変数の値が書き換えられるかどうかだけの違い
letは(mutの有無に関係なく)実行時に値が決まる変数となり変数名は小文字で書く
mutの有無はその変数の値が書き換えられるかどうかだけの違い
895デフォルトの名無しさん
2023/08/01(火) 18:49:11.32ID:Nt/KTAzO 自分は素人だけどそれじゃあ型に対する言及が抜けてないですか?
896デフォルトの名無しさん
2023/08/01(火) 20:27:35.06ID:3uGNwlqu 型とは直交する概念なので型とは無関係
任意の型で成り立つ
任意の型で成り立つ
897デフォルトの名無しさん
2023/08/01(火) 22:08:28.57ID:YdsBZTXH 'static
898デフォルトの名無しさん
2023/08/01(火) 22:38:58.55ID:Nt/KTAzO constはシャドーイングは行われない
変数と違い型を必ず明示しなくてはならない
変数と違い型を必ず明示しなくてはならない
899デフォルトの名無しさん
2023/08/02(水) 00:09:43.49ID:IOFZl0B3900デフォルトの名無しさん
2023/08/02(水) 00:12:43.58ID:/ED8qpF1 >>892
constならROM領域に置ける
constならROM領域に置ける
901デフォルトの名無しさん
2023/08/02(水) 00:12:59.71ID:IOFZl0B3 あ、わかった
そりゃそうだ
そりゃそうだ
902デフォルトの名無しさん
2023/08/02(水) 09:00:43.40ID:4pI1Wfnv 関数名というか関数を格納した変数?にもmut付けるときあるけど
動作中に関数を変えるのが目的?って表明以外の意味ある?
動作中に関数を変えるのが目的?って表明以外の意味ある?
903デフォルトの名無しさん
2023/08/02(水) 13:19:46.95ID:MBDISWVo 関数ポインタかラムダ式(クロージャ)かで意味が変わりそうだな
関数ポインタの場合は途中で別の同型の関数に差し替えるときにmutが必要
クロージャの場合は途中で内部の変数が変更される(FnMutになる)ときにmutが必要
(クロージャは型の関係で別の関数に差し替えることはできないはず)
下の例だとf,gのどちらもmutがないと怒られる
fn print_foo() { println!("foo"); }
fn print_bar() { println!("bar"); }
fn main() {
let mut f: fn();
f = print_foo;
f();
f = print_bar;
f();
let mut i = 0u32;
let mut g = move || { println!("{i}"); i += 1; };
for _ in 0..5 { g(); }
}
関数ポインタの場合は途中で別の同型の関数に差し替えるときにmutが必要
クロージャの場合は途中で内部の変数が変更される(FnMutになる)ときにmutが必要
(クロージャは型の関係で別の関数に差し替えることはできないはず)
下の例だとf,gのどちらもmutがないと怒られる
fn print_foo() { println!("foo"); }
fn print_bar() { println!("bar"); }
fn main() {
let mut f: fn();
f = print_foo;
f();
f = print_bar;
f();
let mut i = 0u32;
let mut g = move || { println!("{i}"); i += 1; };
for _ in 0..5 { g(); }
}
904デフォルトの名無しさん
2023/08/02(水) 13:23:57.98ID:MBDISWVo そこに置かれてる値(関数ポインタ or クロージャ)が変更されるという意味では同じか
905デフォルトの名無しさん
2023/08/02(水) 18:24:39.32ID:SI51iZ7R let mut hoge; じゃなくて
むしろ let hoge = 3; と mut hoge = 3; の二種類に分ければ美しくてよ
むしろ let hoge = 3; と mut hoge = 3; の二種類に分ければ美しくてよ
906デフォルトの名無しさん
2023/08/02(水) 19:02:02.79ID:F3jAz55G static mut もあるし
letはパターンマッチ文だからlet (mut a, b) もあるし
if let Some((ref mut p, ref q)) もあるし
letはパターンマッチ文だからlet (mut a, b) もあるし
if let Some((ref mut p, ref q)) もあるし
907デフォルトの名無しさん
2023/08/02(水) 20:18:56.34ID:/ED8qpF1 >>905
それは無い
それは無い
908デフォルトの名無しさん
2023/08/03(木) 07:43:41.06ID:9tsUh6Bs 速い! 安全! ださい!
909デフォルトの名無しさん
2023/08/03(木) 08:17:38.34ID:8npqW66R >>906
mutを単独キーワードに分離したRustの設計方針の勝利だな
mutを単独キーワードに分離したRustの設計方針の勝利だな
910デフォルトの名無しさん
2023/08/03(木) 10:00:57.61ID:W+hOnHrE かわいい
北朝鮮みたい
北朝鮮みたい
911デフォルトの名無しさん
2023/08/03(木) 21:15:21.47ID:j7849mpF こんなスレ見てるなんてダサいぞ!
912デフォルトの名無しさん
2023/08/04(金) 09:07:52.99ID:XLfSEGlw かわいい
埼玉県みたい
埼玉県みたい
913デフォルトの名無しさん
2023/08/06(日) 17:59:34.17ID:xBSreVT+ 任意長整数型演算の実装の演習してるんですけど
・和の時には下の桁から、大小の比較の時は上の桁から順次比較するので双方からのアクセスをO(1)で行いたい
・任意長なので加法のときにover flowしたときitemの追加ができないとダメ
この場合どのcollection型が有利ですか?
ソースが難しすぎてわかりません
情報お願いいたします
・和の時には下の桁から、大小の比較の時は上の桁から順次比較するので双方からのアクセスをO(1)で行いたい
・任意長なので加法のときにover flowしたときitemの追加ができないとダメ
この場合どのcollection型が有利ですか?
ソースが難しすぎてわかりません
情報お願いいたします
914デフォルトの名無しさん
2023/08/06(日) 19:27:39.64ID:3wcIZOky 自分ならVec使う
915デフォルトの名無しさん
2023/08/06(日) 19:29:40.12ID:lVXXe/mp >>913
何を問題にしているのかわからない
言語に関係なく連続体のデータ型(配列やベクタなど)の順次アクセスは
前から後ろから関係なくサイズNに対して総コストO(N)で1つあたりO(1)
それらのうち固定長ではなくサイズを伸ばせるデータ型(ベクタ)なら要素を追加できる
RustならVec
何を問題にしているのかわからない
言語に関係なく連続体のデータ型(配列やベクタなど)の順次アクセスは
前から後ろから関係なくサイズNに対して総コストO(N)で1つあたりO(1)
それらのうち固定長ではなくサイズを伸ばせるデータ型(ベクタ)なら要素を追加できる
RustならVec
916デフォルトの名無しさん
2023/08/06(日) 20:21:24.84ID:xBSreVT+917デフォルトの名無しさん
2023/08/06(日) 20:24:19.56ID:xBSreVT+ >>914
ありがとう
確かに片方だけ伸ばすならbecで良さそうなんですよね
しかし後でよくよく考えたら掛け算の時に一の位の方向にも伸ばせた方が便利な気もしてきて
でもそっちは絶対じゃないんですよね
なんせvecのソースがむずい
ありがとう
確かに片方だけ伸ばすならbecで良さそうなんですよね
しかし後でよくよく考えたら掛け算の時に一の位の方向にも伸ばせた方が便利な気もしてきて
でもそっちは絶対じゃないんですよね
なんせvecのソースがむずい
918デフォルトの名無しさん
2023/08/06(日) 20:32:19.03ID:Mgx3ApDu ソースよりドキュメントを見なよ。
図つきで解説されてるから。
Vec は必要に応じて自動で再配置する配列ってかんじ。
要素は連続して配置される。
図つきで解説されてるから。
Vec は必要に応じて自動で再配置する配列ってかんじ。
要素は連続して配置される。
919デフォルトの名無しさん
2023/08/06(日) 20:50:29.31ID:WEauDaB9 >>918
https://doc.rust-lang.org/std/collections/index.html
とか読んだんですけどよくわからないんですよ
rust専用スレならstd::vec全部目を通せてる人いるかなと
連続して確保される領域の幅とかは指定できます?
https://doc.rust-lang.org/std/collections/index.html
とか読んだんですけどよくわからないんですよ
rust専用スレならstd::vec全部目を通せてる人いるかなと
連続して確保される領域の幅とかは指定できます?
920デフォルトの名無しさん
2023/08/06(日) 20:51:36.50ID:lVXXe/mp >>916
性質が重要なのであってよほどのことがないかぎり実装内部のソースを知る必要はない
LinkedListは極一部の用途を除きほとんどの用途で遅く不利になり今回も考える必要はない
これらは言語と関係なく一般的な話
性質が重要なのであってよほどのことがないかぎり実装内部のソースを知る必要はない
LinkedListは極一部の用途を除きほとんどの用途で遅く不利になり今回も考える必要はない
これらは言語と関係なく一般的な話
921デフォルトの名無しさん
2023/08/06(日) 21:11:21.94ID:kGEgc8zj >>920
とりあえず今はガロアの連分数使って円周率の計算でもやってみようと思ってるんですけど、その場合計算する項のlog orderで桁数が増大していきます
でも例えばbinary splittingとかにすれば桁数の上昇具合が変わってきます
そういう用途に応じて適切なcollection型の使い分けできるようにしたいんですよ
あくまで練習なので
ソース読みはまぁ趣味みたいなもんなんですけどそもそもRustの自習が趣味なので
とりあえず今はガロアの連分数使って円周率の計算でもやってみようと思ってるんですけど、その場合計算する項のlog orderで桁数が増大していきます
でも例えばbinary splittingとかにすれば桁数の上昇具合が変わってきます
そういう用途に応じて適切なcollection型の使い分けできるようにしたいんですよ
あくまで練習なので
ソース読みはまぁ趣味みたいなもんなんですけどそもそもRustの自習が趣味なので
922デフォルトの名無しさん
2023/08/06(日) 21:11:35.12ID:Mgx3ApDu >>919
だからドキュメント読めってば。
Vec はポインタとキャパシティと長さを管理する仕組みだと書いてある。
https://doc.rust-lang.org/std/vec/struct.Vec.html#guarantees
実体が配列だからスライスの形で扱うことも出来る。
もし C++ を知ってるなら設計理念的には vectorと同じ感じとおもっていいと思う。
だからドキュメント読めってば。
Vec はポインタとキャパシティと長さを管理する仕組みだと書いてある。
https://doc.rust-lang.org/std/vec/struct.Vec.html#guarantees
実体が配列だからスライスの形で扱うことも出来る。
もし C++ を知ってるなら設計理念的には vectorと同じ感じとおもっていいと思う。
923デフォルトの名無しさん
2023/08/06(日) 21:16:41.06ID:kGEgc8zj >>922
まぁ実はちょっと立場上普通の人より深く知ってる事を要求されることが多いんですよ
もちろんRustを並の人より知ってると言えるには後何年か修行しないといけないんでしょうけど、そもそもRustについては趣味なのでそこまで深く理解しなくてもいいとは思ってます
まぁ趣味なのでボチボチ読みます
ありがとうございます
まぁ実はちょっと立場上普通の人より深く知ってる事を要求されることが多いんですよ
もちろんRustを並の人より知ってると言えるには後何年か修行しないといけないんでしょうけど、そもそもRustについては趣味なのでそこまで深く理解しなくてもいいとは思ってます
まぁ趣味なのでボチボチ読みます
ありがとうございます
924デフォルトの名無しさん
2023/08/06(日) 21:39:48.28ID:+jzrd7Vj Haskell君と同じ臭いがしますね〜w
925デフォルトの名無しさん
2023/08/06(日) 22:09:28.45ID:lVXXe/mp >>921
何度も書いて伝わっていると思うが各データ型の性質や各用途への向き不向きは使用言語と関係ない話
その適切なcollection型の使い分けというのが仮に必要だとしても各言語と関係なく抽象的なレベルで考えて可否を判断すべきこと
その上でベクタ型のデータ構造では何がいけないのかの問題点も見えてこない
何度も書いて伝わっていると思うが各データ型の性質や各用途への向き不向きは使用言語と関係ない話
その適切なcollection型の使い分けというのが仮に必要だとしても各言語と関係なく抽象的なレベルで考えて可否を判断すべきこと
その上でベクタ型のデータ構造では何がいけないのかの問題点も見えてこない
926デフォルトの名無しさん
2023/08/06(日) 22:29:25.87ID:jEjmg3Hf やっぱり>>913のようにサイズが不定である場合にはダメですね
The capacity of a vector is the amount of space allocated for any future elements that will be added onto the vector. This is not to be confused with the length of a vector, which specifies the number of actual elements within the vector. If a vector’s length exceeds its capacity, its capacity will automatically be increased, but its elements will have to be reallocated.
まぁ一般論ではなくて××桁まで計算するとか決めうちして使います
どのみち掛け算最終的にはFourier変換でやってみるつもりなのでその場合不定長だとメチャクチャ難しいし
The capacity of a vector is the amount of space allocated for any future elements that will be added onto the vector. This is not to be confused with the length of a vector, which specifies the number of actual elements within the vector. If a vector’s length exceeds its capacity, its capacity will automatically be increased, but its elements will have to be reallocated.
まぁ一般論ではなくて××桁まで計算するとか決めうちして使います
どのみち掛け算最終的にはFourier変換でやってみるつもりなのでその場合不定長だとメチャクチャ難しいし
927デフォルトの名無しさん
2023/08/06(日) 22:59:01.67ID:lVXXe/mp >>926
不定長なら再配置を含めてもVecが有利
再配置コストは例えば2^nから2^(n+1)へ広げる度にしか発生せず誤差となる
それよりも連続領域に配置されることによるメモリキャッシュ効果が絶対に効く
不定長なら再配置を含めてもVecが有利
再配置コストは例えば2^nから2^(n+1)へ広げる度にしか発生せず誤差となる
それよりも連続領域に配置されることによるメモリキャッシュ効果が絶対に効く
928デフォルトの名無しさん
2023/08/06(日) 23:14:54.40ID:vwDBawzd >>927
そうなんですか?
でもドキュメントには続いて
For example, a vector with capacity 10 and length 0 would be an empty vector with space for 10 more elements. Pushing 10 or fewer elements onto the vector will not change its capacity or cause reallocation to occur. However, if the vector’s length is increased to 11, it will have to reallocate, which can be slow. For this reason, it is recommended to use Vec::with_capacity whenever possible to specify how big the vector is expected to get.
とありますよ?
そうなんですか?
でもドキュメントには続いて
For example, a vector with capacity 10 and length 0 would be an empty vector with space for 10 more elements. Pushing 10 or fewer elements onto the vector will not change its capacity or cause reallocation to occur. However, if the vector’s length is increased to 11, it will have to reallocate, which can be slow. For this reason, it is recommended to use Vec::with_capacity whenever possible to specify how big the vector is expected to get.
とありますよ?
929デフォルトの名無しさん
2023/08/06(日) 23:50:23.90ID:lVXXe/mp それを読んで再配置があった場合でも1回あたりO(1)で済んでいることが理解できないならば
Rustの勉強でもなくプログラミングの勉強でもなくCSなどの基礎から学ぶことをおすすめする
そういう基礎を理解しないままO(1)で行ないたいと最初の質問で書いていたのもヤバい
何度も伝えているが各言語と関係なく成り立つ話なのだから各言語に立ち入る前に理解を済ませておくべき
Rustの勉強でもなくプログラミングの勉強でもなくCSなどの基礎から学ぶことをおすすめする
そういう基礎を理解しないままO(1)で行ないたいと最初の質問で書いていたのもヤバい
何度も伝えているが各言語と関係なく成り立つ話なのだから各言語に立ち入る前に理解を済ませておくべき
930デフォルトの名無しさん
2023/08/07(月) 00:14:34.21ID:KoOATDug931デフォルトの名無しさん
2023/08/07(月) 00:41:08.66ID:Sa+WohTx “amortized O(N)”を”1回あたりO(1)”に変換するあたりは流石オジ
でもCS基礎を学べというオジの主張に今回ばかりは同意するよ
でもCS基礎を学べというオジの主張に今回ばかりは同意するよ
932デフォルトの名無しさん
2023/08/07(月) 00:47:42.86ID:uTLlh+jk >>929なんでO(1)で済むんですか?
そもそもデータ全体を連続領域に確保するんでしょ?
その延長する部分のヒープがもう埋まってたらデータ全部丸写しするしかないんじゃないですか?
大体そもそもデータを連続領域に確保して前からも後ろからも関係なくアドレス1発でアクセスもできて、その上データの追加もO(1)でできるとかなら無敵じゃないですか?
そんな魔法のよなメモリ管理できるハズないのでは?
そもそもデータ全体を連続領域に確保するんでしょ?
その延長する部分のヒープがもう埋まってたらデータ全部丸写しするしかないんじゃないですか?
大体そもそもデータを連続領域に確保して前からも後ろからも関係なくアドレス1発でアクセスもできて、その上データの追加もO(1)でできるとかなら無敵じゃないですか?
そんな魔法のよなメモリ管理できるハズないのでは?
933デフォルトの名無しさん
2023/08/07(月) 00:48:41.30ID:Lr/s88yL Vecって単純過ぎてデータ構造では扱わなかったりするのかな
ならし解析では最初に出てきそうなネタだけど
ならし解析では最初に出てきそうなネタだけど
934デフォルトの名無しさん
2023/08/07(月) 00:50:22.19ID:uTLlh+jk ああ、データの読み書きが一回あたりI(1)ですか
でも今データの追加は整数の桁数が一上がるごとに発生するんですよ?
あらかじめデータの桁数が不明でそれが難しいと言ってるじゃないですか
足し算のたびにコピー発生しますよ?
でも今データの追加は整数の桁数が一上がるごとに発生するんですよ?
あらかじめデータの桁数が不明でそれが難しいと言ってるじゃないですか
足し算のたびにコピー発生しますよ?
935デフォルトの名無しさん
2023/08/07(月) 00:53:46.05ID:O5oF7I6f こいつぅ
絶対わかってないやんw
絶対わかってないやんw
936デフォルトの名無しさん
2023/08/07(月) 00:53:52.95ID:++BmxY1A 実際バイナリスプリッティングでマクローリン級数で足し算する場合とかどうやってあらかじめ必要桁数予言するの
937デフォルトの名無しさん
2023/08/07(月) 00:54:45.54ID:eXrQj8ZH 実際どんな用途かも具体的に書いてるのに
938デフォルトの名無しさん
2023/08/07(月) 02:21:35.00ID:pearvhja 2年くらい前の過去スレと今の状況見比べて泣いちゃった
939デフォルトの名無しさん
2023/08/07(月) 10:50:23.98ID:wl/Lx6N5 ここまでvecdeq無しとは
940デフォルトの名無しさん
2023/08/07(月) 18:18:54.25ID:UTlzilSe VecDequeもその名の通りVec(正確にはどちらもRawVec)で作られていて
確保されている連続領域に対して未使用領域が末端か途中かの違いしかない
>>932は確保されている連続領域が埋まった時のコストを気にしているようだが
サイズNが埋まるまでの再配置の総コストは最悪ケースでもわずかN-1回の読み書きコストで済む
例えばサイズN/2が埋まった時にその倍のサイズNの新たな連続領域へ再配置するためにはN/2回の読み書きが発生
仮に最悪ケースでサイズ1からスタートしてもそれまでの累積の再配置コストはN/2+N/4+N/8+...+1 = N-1が上限値となる
つまりサイズNが埋まるまでの再配置の総コストは最悪のケースで読み書きN-1回でありO(N)で済む
一方でサイズNが埋まるまでの再配置以外の読み書きが何回行われるかを今回のケースで考えると
次々とサイズが倍々に増えていく計算の場合は最小でも合計O(N)回の読み書きが起こり
次々とサイズがリニアに増えていく計算の場合は最小でも合計O(N^2)回の読み書きが起こり
もっと緩やかにサイズが増える場合や上述の増え方の場合でも普通に読み書きが多い計算なら合計O(N^2)を超える
現実のほとんどの計算においてVecの再配置コストO(N)は誤差となる
確保されている連続領域に対して未使用領域が末端か途中かの違いしかない
>>932は確保されている連続領域が埋まった時のコストを気にしているようだが
サイズNが埋まるまでの再配置の総コストは最悪ケースでもわずかN-1回の読み書きコストで済む
例えばサイズN/2が埋まった時にその倍のサイズNの新たな連続領域へ再配置するためにはN/2回の読み書きが発生
仮に最悪ケースでサイズ1からスタートしてもそれまでの累積の再配置コストはN/2+N/4+N/8+...+1 = N-1が上限値となる
つまりサイズNが埋まるまでの再配置の総コストは最悪のケースで読み書きN-1回でありO(N)で済む
一方でサイズNが埋まるまでの再配置以外の読み書きが何回行われるかを今回のケースで考えると
次々とサイズが倍々に増えていく計算の場合は最小でも合計O(N)回の読み書きが起こり
次々とサイズがリニアに増えていく計算の場合は最小でも合計O(N^2)回の読み書きが起こり
もっと緩やかにサイズが増える場合や上述の増え方の場合でも普通に読み書きが多い計算なら合計O(N^2)を超える
現実のほとんどの計算においてVecの再配置コストO(N)は誤差となる
941デフォルトの名無しさん
2023/08/09(水) 00:49:09.66ID:52BV6d5f942デフォルトの名無しさん
2023/08/09(水) 18:58:03.94ID:2XWtgL1F でも競プロでvec.insert(0, value)でタイムアウトしたけどvecdeque.pushfront(value)ではタイムアウトしなかった経験があるな
943デフォルトの名無しさん
2023/08/09(水) 19:31:59.29ID:X5pmvNGk VecDequeはring bufferだから連続性は保証されないね
VecみたいなDerefがないから&[T]に渡せない
slice未実装かと思ったら2つのsliceで返すas_slices()が実装されてて思ったより芸が細かかった
VecみたいなDerefがないから&[T]に渡せない
slice未実装かと思ったら2つのsliceで返すas_slices()が実装されてて思ったより芸が細かかった
944デフォルトの名無しさん
2023/08/09(水) 22:17:02.23ID:5oPtG5Gl945デフォルトの名無しさん
2023/08/10(木) 04:07:06.41ID:GpbD/XFE >slice未実装かと思ったら2つのsliceで返すas_slices()が実装されてて
He-
He-
946デフォルトの名無しさん
2023/08/10(木) 04:08:51.37ID:GpbD/XFE vecdequeはlinkedlistじゃね
947デフォルトの名無しさん
2023/08/10(木) 06:08:17.32ID:74A6gUuN vecdequeはもちろんvecで構成
linkedlistは他のデータ構造(vector, binary tree, hash table)と比較してほとんどの用途で遅く不利なため極限られた用途でしか用いられない
linkedlistが用いられる限られた用途でもlinkedlistの欠点を補うため同時にhash tableやbinary treeなどと組み合わせて用いられることも多い
linkedlistは他のデータ構造(vector, binary tree, hash table)と比較してほとんどの用途で遅く不利なため極限られた用途でしか用いられない
linkedlistが用いられる限られた用途でもlinkedlistの欠点を補うため同時にhash tableやbinary treeなどと組み合わせて用いられることも多い
948デフォルトの名無しさん
2023/08/11(金) 08:01:08.13ID:4oMIZBsG949デフォルトの名無しさん
2023/08/11(金) 08:22:37.37ID:6e7vDYNE RustやるならCSでもまず計算モデル(特にスタックフレームモデル周辺)だろ。
950デフォルトの名無しさん
2023/08/11(金) 08:37:22.11ID:/t3LBfIN >>948
その配列というのが長さと場所を固定した連続領域を取るデータ構造なのよ
Vecは同じ連続領域だけど長さと場所は可変なデータ構造
VecDequeはVecを用いたリングバッファで連続領域を確保して使っているけど使用データ自体は最大二つの領域に分かれるデータ構造
LinkedListは連続領域を使わない連結リストといったようにいろいろあるデータ構造の中で質問者はどれを使うべきか悩んでるみたい
その配列というのが長さと場所を固定した連続領域を取るデータ構造なのよ
Vecは同じ連続領域だけど長さと場所は可変なデータ構造
VecDequeはVecを用いたリングバッファで連続領域を確保して使っているけど使用データ自体は最大二つの領域に分かれるデータ構造
LinkedListは連続領域を使わない連結リストといったようにいろいろあるデータ構造の中で質問者はどれを使うべきか悩んでるみたい
951デフォルトの名無しさん
2023/08/11(金) 11:19:59.50ID:4oMIZBsG 最近おかしな議論が複数のスレにまたがって続いてるけど
多倍長整数というワードすら出てこないんだからなあ
多倍長整数というワードすら出てこないんだからなあ
952デフォルトの名無しさん
2023/08/11(金) 12:40:08.98ID:v1edpQDw 複オジと厨房と二人いるのか?
それとも厨2病をこじらせた複オジか?
それとも厨2病をこじらせた複オジか?
953デフォルトの名無しさん
2023/08/11(金) 13:08:17.16ID:1cDd+Y+T955デフォルトの名無しさん
2023/08/11(金) 14:38:02.18ID:WGGkjKOg 複オジ認定される人は複数いると思われ
956デフォルトの名無しさん
2023/08/12(土) 06:55:54.99ID:H/leygs+ 誰かに雇われてるのかもな
957デフォルトの名無しさん
2023/08/12(土) 17:12:05.53ID:uYfXOEbY 詳しい人がいたらアドバイスをもらえると嬉しいです
やりたいこと
入力系イベントの変換及び送出
例えば所定のウインドウがアクティブ時にピンチインが入力されたらCtrl+「-」を送出とか
OS
WindowsとLinux。同じコードで両OSに対応する必要はない
UI
とりあえずCLIでも構わない
技術要素
入力系イベントのグローバルフック。Rustではどうやる?
というか言語を問わずグローバルフックを使った新しい記事ってめっちゃ減っている気がする
現行の環境でどのような実装が良いのかよくわからない
やりたいこと
入力系イベントの変換及び送出
例えば所定のウインドウがアクティブ時にピンチインが入力されたらCtrl+「-」を送出とか
OS
WindowsとLinux。同じコードで両OSに対応する必要はない
UI
とりあえずCLIでも構わない
技術要素
入力系イベントのグローバルフック。Rustではどうやる?
というか言語を問わずグローバルフックを使った新しい記事ってめっちゃ減っている気がする
現行の環境でどのような実装が良いのかよくわからない
958デフォルトの名無しさん
2023/08/12(土) 18:35:08.55ID:Vg3fIeNP XY問題の上にRust関係ないな
959デフォルトの名無しさん
2023/08/12(土) 20:05:24.91ID:uYfXOEbY 今でもピンチイン/ピンチアウトで縮小拡大できないデスクトップアプリは珍しくないからね
特にエンジニアリング系アプリは有名どころでもタッチやペンに対応していなかったりするし
あと今から作るならRustを使いたいけどフックなどの実装は処理系依存になりやすく
システム言語を自称するRustでどこまでできるのかという点も興味ある
特にエンジニアリング系アプリは有名どころでもタッチやペンに対応していなかったりするし
あと今から作るならRustを使いたいけどフックなどの実装は処理系依存になりやすく
システム言語を自称するRustでどこまでできるのかという点も興味ある
960デフォルトの名無しさん
2023/08/12(土) 21:12:06.35ID:ufIhf+ig 言語と関係なくね?
961デフォルトの名無しさん
2023/08/12(土) 22:08:53.37ID:ysM/YNb0 >>960
言語の話ではないが、まぁ、RustでWinやLinuxのアプリを作るときには(激システム依存だろうが)関係するからな
WinならWinのapiを使うためのクレート
https://learn.microsoft.com/ja-jp/windows/dev-environment/rust/rust-for-windows
で頑張るとかになるだろうが。
言語の話ではないが、まぁ、RustでWinやLinuxのアプリを作るときには(激システム依存だろうが)関係するからな
WinならWinのapiを使うためのクレート
https://learn.microsoft.com/ja-jp/windows/dev-environment/rust/rust-for-windows
で頑張るとかになるだろうが。
962デフォルトの名無しさん
2023/08/12(土) 22:11:27.89ID:ecBv/yaX アタオカがまた別のアタオカを呼ぶ
963デフォルトの名無しさん
2023/08/12(土) 22:58:19.87ID:SnIoCjjg964デフォルトの名無しさん
2023/08/12(土) 23:35:32.02ID:pSdIUbms まぁ仕事でRust使う人は皆無だろうからな
そして仕事でなければコンソールアプリで十分やし
家でサンデープログラミングするのにわざわざwindows sdk引っ張り出さないし
そして仕事でなければコンソールアプリで十分やし
家でサンデープログラミングするのにわざわざwindows sdk引っ張り出さないし
965デフォルトの名無しさん
2023/08/12(土) 23:49:38.13ID:SnIoCjjg むしろ仕事でWindowsを使わない
人それぞれだろう
人それぞれだろう
966デフォルトの名無しさん
2023/08/12(土) 23:52:35.31ID:3Gp8Ilch システムプログラミング向けの言語だからデスクトップアプリでは活況ではないんじゃないかな
967デフォルトの名無しさん
2023/08/13(日) 00:01:39.02ID:lcT7JkgH そうか、サーバサイドの人は使わんわな
968デフォルトの名無しさん
2023/08/13(日) 00:04:16.66ID:RW198XaM 好きにプロセス消失してもいい系のWebサーバ向けアプリには
あんまメリットないわな。
あんまメリットないわな。
969デフォルトの名無しさん
2023/08/13(日) 01:00:38.38ID:IKXyPV6w >>967
>>968
WebサーバーサイドはRustが最も適している
そしてRustが毎年調査しているAnnual Survey ReportでもRustの業務利用目的の調査トップがWebサーバーサイド&バックエンド
https://gihyo.jp/assets/images/article/2022/09/rust-monthly-topics/in_what_technology_domain_is_Rust_used_at_your_company.png
>>968
WebサーバーサイドはRustが最も適している
そしてRustが毎年調査しているAnnual Survey ReportでもRustの業務利用目的の調査トップがWebサーバーサイド&バックエンド
https://gihyo.jp/assets/images/article/2022/09/rust-monthly-topics/in_what_technology_domain_is_Rust_used_at_your_company.png
970デフォルトの名無しさん
2023/08/13(日) 11:45:17.49ID:mxfdwtiA また現状認識ズレた人が不況に熱心なこと
971デフォルトの名無しさん
2023/08/13(日) 12:47:43.44ID:tlLZmbuO クラウドはリソース(演算能力やストレージ)を使った分だけ金がかかるという話は何度も言及されているやで
972デフォルトの名無しさん
2023/08/13(日) 13:12:36.18ID:1wlKIUZg ずっとそれ勘違いして言い続けてるよね
急になんJ民の振りしてもバレバレ
急になんJ民の振りしてもバレバレ
973デフォルトの名無しさん
2023/08/13(日) 13:31:43.04ID:4YjHceGO >>971
オンプレミスも同じ
遅い言語を用いていると無駄にサーバー数が必要となりその電気代が固定費となってしまう
C/C++にはtokioのような非同期並行並列でCPUマルチコアを使い切れるスケジューリング環境もないため
現状Rust一択
オンプレミスも同じ
遅い言語を用いていると無駄にサーバー数が必要となりその電気代が固定費となってしまう
C/C++にはtokioのような非同期並行並列でCPUマルチコアを使い切れるスケジューリング環境もないため
現状Rust一択
974デフォルトの名無しさん
2023/08/13(日) 16:16:11.90ID:QszCfK1u オンプレでも最終的にはそうなんだけど、クラウドの力でリソースの割り当てが柔軟に出来る状況になったので
「(開発初期は) まだ余っているリソースのチューニングは後回しにする」ということが出来なくなった。
余りなど存在しないので。
「(開発初期は) まだ余っているリソースのチューニングは後回しにする」ということが出来なくなった。
余りなど存在しないので。
975デフォルトの名無しさん
2023/08/13(日) 20:12:32.36ID:NbQv8fjv 費用ならjavaやc#の方が安い
利用者が多くエンジニアを集めるコストが低いので
利用者が多くエンジニアを集めるコストが低いので
976デフォルトの名無しさん
2023/08/13(日) 21:37:06.42ID:lTJXvUOS Webサービス分野だと小規模なサービスは人件費 > サーバー費用だからRustは早すぎる最適化になりがち。
とはいえ開発体験もかなり優秀な部類になってきたから初手でRust選ぶのが開発者のオナニーとは言い切れなくなってきてるよな。
とはいえ開発体験もかなり優秀な部類になってきたから初手でRust選ぶのが開発者のオナニーとは言い切れなくなってきてるよな。
977デフォルトの名無しさん
2023/08/13(日) 22:11:07.62ID:QszCfK1u ウェブサービスというものが根本的に手探りだった時代は
素早く変更してサービスに反映させられる言語が重要だったけど
今は部品が確立してそれを組み合わせる形に変わっているから
部品が充分に揃っていると仮定できるなら言語 (処理系) の性能差で差がつく。
素早く変更してサービスに反映させられる言語が重要だったけど
今は部品が確立してそれを組み合わせる形に変わっているから
部品が充分に揃っていると仮定できるなら言語 (処理系) の性能差で差がつく。
978デフォルトの名無しさん
2023/08/13(日) 22:21:31.33ID:26EPBWum でも実際問題としてRustで組んだ人いる?
979デフォルトの名無しさん
2023/08/13(日) 22:35:27.66ID:4YjHceGO 世界のウェブインフラもRust製
【CDN世界トップシェアCloudflare】
https://www.publickey1.jp/blog/22/cloudflarenginxrusthttppingoracdncpu31.html
CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、
同社自身がRust製のHTTPプロキシである「Pingora」を開発し利 用していることを明らかにしました。
【クラウド世界トップシェアAWS】
https://japan.zdnet.com/article/35183866/
Rustで構築されたAWSサービスの例としては、
コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
「Amazon Simple Storage Service(S3)」、
「Amazon Elastic Compute Cloud(EC2)」、
コンテンツ配信ネットワーク「Amazon CloudFront」、
LinuxベースのコンテナーOS「Bottlerocket」などがある。
【CDN世界トップシェアCloudflare】
https://www.publickey1.jp/blog/22/cloudflarenginxrusthttppingoracdncpu31.html
CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、
同社自身がRust製のHTTPプロキシである「Pingora」を開発し利 用していることを明らかにしました。
【クラウド世界トップシェアAWS】
https://japan.zdnet.com/article/35183866/
Rustで構築されたAWSサービスの例としては、
コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
「Amazon Simple Storage Service(S3)」、
「Amazon Elastic Compute Cloud(EC2)」、
コンテンツ配信ネットワーク「Amazon CloudFront」、
LinuxベースのコンテナーOS「Bottlerocket」などがある。
980デフォルトの名無しさん
2023/08/13(日) 22:57:04.72ID:otTwfC5P >>979
イヤ、そうじゃなくてこういうとこで雑談するレベルの話で実際に仕事でRust使うような実例を持ってる人いるかって質問
別に煽ってるわけじゃないよ
まずそこまで流行ってないと思うしかない、仕事で実際使った人いるならどういう経緯で使うことになったのかなぁと
イヤ、そうじゃなくてこういうとこで雑談するレベルの話で実際に仕事でRust使うような実例を持ってる人いるかって質問
別に煽ってるわけじゃないよ
まずそこまで流行ってないと思うしかない、仕事で実際使った人いるならどういう経緯で使うことになったのかなぁと
981デフォルトの名無しさん
2023/08/13(日) 23:15:24.43ID:QyDGXVub 自分は仕事で書いてるし、直接の知り合いで仕事で使ってる人10人くらいはいるかな
なんで国内でも数十社くらいは使ってるんじゃないかと思う
なんで国内でも数十社くらいは使ってるんじゃないかと思う
982デフォルトの名無しさん
2023/08/13(日) 23:48:35.51ID:iO5PvBbd そうなんや
それは言語はなんでもいいから好きなので書いていいん?
それともRustで書くように指示された案件?
それは言語はなんでもいいから好きなので書いていいん?
それともRustで書くように指示された案件?
983デフォルトの名無しさん
2023/08/13(日) 23:48:42.00ID:427/I8XL > 自分は仕事で書いてる
開発の仕事じゃなさそう
くだらないウェブ記事書いてお小遣いもらってそう
開発の仕事じゃなさそう
くだらないウェブ記事書いてお小遣いもらってそう
984デフォルトの名無しさん
2023/08/13(日) 23:51:53.47ID:6khxmh9H うちはバックエンドの一部をRust製にした
最終的には全てRust製へ置き換えるが着実に一つずつ
最終的には全てRust製へ置き換えるが着実に一つずつ
985デフォルトの名無しさん
2023/08/14(月) 00:03:15.79ID:SMR2domD へぇ、意外にRust導入されてるんやな
986デフォルトの名無しさん
2023/08/14(月) 02:41:34.96ID:QUiVDENJ 蝦出んす
987デフォルトの名無しさん
2023/08/14(月) 06:54:36.10ID:BvDmcvEg988デフォルトの名無しさん
2023/08/14(月) 08:31:01.38ID:YSmL6IQ6 こちらはNode.jsからRustへ移行だったけど
どちらもasync/awaitによる軽量タスクコードだから意外に簡単だった
どちらもasync/awaitによる軽量タスクコードだから意外に簡単だった
989デフォルトの名無しさん
2023/08/14(月) 22:05:11.92ID:VoYfevle どれも具体性が薄すぎてニートが妄想で書いてるんかってレベルやな
何の目的があってRustが選択されたのか
他の候補として何が検討されたか
最終的に目的はどの程度達成されたのか
大きな課題としてどんなものが現れたか
その課題はどう解決したか(しなかったか)
一般論じゃなく各論で、そういう特筆すべきことはなんにもなかったんか?
何の目的があってRustが選択されたのか
他の候補として何が検討されたか
最終的に目的はどの程度達成されたのか
大きな課題としてどんなものが現れたか
その課題はどう解決したか(しなかったか)
一般論じゃなく各論で、そういう特筆すべきことはなんにもなかったんか?
990デフォルトの名無しさん
2023/08/14(月) 22:08:35.90ID:NTZtQKzP そうやって情報収集しようとするクセよくないぞ
自分でしらべろや
自分でしらべろや
991デフォルトの名無しさん
2023/08/14(月) 22:13:54.79ID:sy90BXR1 このスレにいる以上は Rust に関心を持っているのは当たり前なんだから
実務で使ってる事例もそれなりにあるのは全く自然なことだと思うんだが、
そう思えない理由がなんかあるか?
LISP スレですら実務の採用例がそこそこあるのに Rust で無いってこたぁない。
実務で使ってる事例もそれなりにあるのは全く自然なことだと思うんだが、
そう思えない理由がなんかあるか?
LISP スレですら実務の採用例がそこそこあるのに Rust で無いってこたぁない。
992デフォルトの名無しさん
2023/08/14(月) 23:40:20.02ID:GBb0r4Vn 思う思わないレベルの話はいらない
993デフォルトの名無しさん
2023/08/14(月) 23:49:03.15ID:h0ddCJfE アンチの相手しなくていいんじゃないかしら
お盆に入ってからの書き込み原文ママ
「仕事でRust使う人は皆無だろう」
「サーバサイドの人は使わん」
「Webサーバ向けアプリにはあんまメリットない」
「開発の仕事じゃなさそう」
「くだらないウェブ記事書いてお小遣いもらってそう」
「どれも具体性が薄すぎてニートが妄想で書いてる」
お盆に入ってからの書き込み原文ママ
「仕事でRust使う人は皆無だろう」
「サーバサイドの人は使わん」
「Webサーバ向けアプリにはあんまメリットない」
「開発の仕事じゃなさそう」
「くだらないウェブ記事書いてお小遣いもらってそう」
「どれも具体性が薄すぎてニートが妄想で書いてる」
994デフォルトの名無しさん
2023/08/15(火) 00:22:56.61ID:0OuVStUx 無理やで
995デフォルトの名無しさん
2023/08/15(火) 01:10:11.11ID:eHfmSxwe >>993
君のとこでは採用してるん?
君のとこでは採用してるん?
996デフォルトの名無しさん
2023/08/15(火) 02:40:39.04ID:ozj7JwYA 確かにこんなところで調査しても意味ねえわ
997デフォルトの名無しさん
2023/08/15(火) 03:17:19.17ID:W84SzS8v NoSQLなデータ扱うマイクロサービス改修を機会にそこをRustにしたよ
998デフォルトの名無しさん
2023/08/15(火) 08:51:26.28ID:ca01mENm ウクライナが勝ってるよっていう情報を流すのと同じw
999デフォルトの名無しさん
2023/08/15(火) 22:01:38.42ID:wEreUCSS ここで普及させようとしても意味無いでw
1000デフォルトの名無しさん
2023/08/15(火) 22:12:55.30ID:6mJ3MaUL rustupが動かないので手動でクロスビルド環境を構築したいんだが
rustup target add 〜
って具体的に何やっているの?ターゲットはとりあえずthumbv7em-none-eabihfとriscv32imac-unknown-none-elfの2つ
ネイティブビルド環境は公式にあるプレビルドファイル一式を適当な場所に手動で展開すれば構築できるけど(構築済み)
rustup target add 〜
って具体的に何やっているの?ターゲットはとりあえずthumbv7em-none-eabihfとriscv32imac-unknown-none-elfの2つ
ネイティブビルド環境は公式にあるプレビルドファイル一式を適当な場所に手動で展開すれば構築できるけど(構築済み)
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 165日 21時間 27分 27秒
新しいスレッドを立ててください。
life time: 165日 21時間 27分 27秒
10021002
Over 1000Thread 5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/
▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- トランプ政権の「相互関税」 日本には24%、韓国には25%、中国に34% [どどん★]
- トランプ大統領 全ての国に一律10%関税 相互関税は日本に24% [少考さん★]
- 【速報】任天堂「Switch2」6月5日発売決定 価格は税込4万9980円 マリオカート新作と同時発売!新機能も発表 ★3 [Ailuropoda melanoleuca★]
- 【速報】任天堂「Switch2」6月5日発売決定 価格は税込4万9980円 マリオカート新作と同時発売!新機能も発表 ★4 [Ailuropoda melanoleuca★]
- 【事件】吉本興業所属タレント6人 オンラインカジノ賭博疑い書類送検へ [Ikhtiandr★]
- 【フジ】中居氏 被害女性Aアナの酷い体調悪化・入院→本当に自分が原因なのか、仕事や家族の別件かもと思ったと 第三者委に ★3 [ひかり★]
- 【動画】中国🇨🇳山東省3/28に行方不明となった6歳男児が発見。臓器を取られ池に沈められる [776365898]
- トランプの相互関税「日本は24%」 [545512288]
- 【悲報】中国への関税は54%wwwwwwwwwwwwwwwwwwwwwww [733893279]
- 【悲報】トランプ関税、全世界へ一律10%で日本は24%WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
- 【悲報】 日経平均、ガチのマジで大暴落 久しぶりににナイアガラ見たわ [434776867]
- トランプの相互関税が発表される。日本は24% [805596214]