X

Rust part20

レス数が1000を超えています。これ以上書き込みはできません。
2023/03/03(金) 00:45:28.73ID:vTVY069B
公式
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/
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/
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
2023/03/03(金) 02:38:11.23ID:g7UDV3mc
>>2,3
それ追加すんなって
公式見ないで質問するようなやつが増えるだけから
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
>>7
複製オジが関係者なのか!!
だとしたらあの日本語品質は納得
近寄ったらダメなやつだな
2023/03/03(金) 11:57:20.14ID:BFvq14eB
日本語訳は2年近く前の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
>>11
JP公式って何の公式なん?
日本ユニセフ協会はUNICEF公式みたいな?
2023/03/04(土) 00:17:04.01ID:73wkOS2W
>>13
その例でいくと日本ユニセフ協会公式ってことだろ
略してJP公式
2023/03/04(土) 13:59:40.63ID:VYEasP1j
https://github.com/rust-lang-ja/book-ja/tree/master-ja/src
の更新日がバラバラだからな
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みたいな役立つリンクをテンプレに入れた方がいい
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に変えられるところは変えていこう、ということになりました。
2023/03/05(日) 12:20:05.12ID:NLajm9a+
いつも常駐してるオジサンがダンマリ決め込んでるところを見ると
JP公式==複オジ説は本当なんだな
最悪
2023/03/05(日) 15:24:37.63ID:78Ic7w+o
どこかのおじさんが自称公式を名乗っていようが正直どうでもいい
このスレ的にはあそこの日本語訳は害が大きいので必ず公式ドキュメント(英語)を参照することを>>1に入れておけばそれで十分
2023/03/05(日) 15:43:27.49ID:T9VmDwru
ここまで複オジの戯言
2023/03/05(日) 16:04:09.72ID:k8KjXA8F
>>21
それでいいんじゃね
実際前スレ前々スレとそれで良かったわけだから
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がバシッと効く場合を除いて)どんぐらい遅くなるもんなの?
2023/03/07(火) 15:51:39.46ID:n6pI5I+D
>>21
公式があの日本語訳は非公式翻訳版ですよとちゃんと明記したからあれを公式翻訳かのように言ってたあのおじさんは無視でOK
https://www.rust-lang.org/ja/learn
2023/03/07(火) 17:36:45.89ID:foOMuD7h
単精度のときに全部L1に乗るなら0.6倍、そうでないなら半精度のほうが早くなる模様
https://www.isus.jp/others/half-precision-floats/
2023/03/07(火) 17:39:18.38ID:j2LIvzFC
おじさんの個人ブログ&リンク集を
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
>>30
と思ったらリンクに「非公式」とあるだけで、否定しているわけじゃないんだな。中国語とかと同じじゃない?

そもそもリンクある時点で「公式の推奨」的な位置づけになってるんじゃないのかね。
2023/03/07(火) 20:33:26.94ID:/0bgQhyZ
>>27
大きなデータ処理でL3キャッシュに乗らない時は半精度を使ったほうが単精度の1.6倍速くなるわけか

>>31
日本語版へのリンクを本家が貼って推奨してるようにみえる
2023/03/07(火) 21:12:05.81ID:I20MXGms
推奨も非推奨もしていない書き方だと思うけど、どうやったら推奨してるように見えるんです?
2023/03/07(火) 21:24:18.71ID:/0bgQhyZ
>>33
本家がフランス語版や中国語版など各言語に応じてその言語版へのリンクを貼っている
非推奨ならばリンクを貼ることはない
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(英語)を参照するようにして下さい
2023/03/07(火) 22:33:00.74ID:xkCydgep
>>37
いいね
改行はもう少し揃えたほうが読みやすいとは思う
2023/03/07(火) 22:42:05.39ID:bUqVPH8L
>>37
そんなバカなアンチ活動みたいなことはやめとけ
その唯一の日本語版にもし致命的な間違いが仮にあるとすれば直せばいいだけじゃないのか?
おそらく間接的な協力も直接的な協力のどちらもできるだろう
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
>>41
足の引っ張り合いがコミュニティーを殺すから。
否定だけして改善しない無能がはびこると誰もコミュニティーに貢献しなくなる。
2023/03/08(水) 08:31:57.93ID:OMAPV4fU
>>37
数年以上前の古い翻訳との指摘は勘違いかあるいは意図的なガセか?
英語版が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
>>36
本家が「紹介する価値がある」と判断したからリンクしているのであって、一般的な感覚としては推奨の範疇に入るんだけど。
少なくとも読み手はそう考える。
2023/03/08(水) 12:09:51.90ID:WGL5Sjj5
>>37の「数年以上前の古いThe Bookの翻訳」で正しい
翻訳の元になっているThe Bookが古いということ
2023/03/08(水) 12:24:02.51ID:fO6VixLz
>>37
ウソでしょ
日本語版を見に行ったら最初に2022年と書いてあるよ
数年以上前ってなんのこと
2023/03/08(水) 12:26:44.45ID:W3VafHEB
関係者にも関わらず
それを明かさず必死擁護してると
ステマ規制で罪に問われるよ
2023/03/08(水) 12:28:09.23ID:AVy9425f
>>49
読み手っていうか君がそう感じてるだけでしょ?
真に推奨ならば「THE BOOKを読もう!」のリンク先が日本語版になってるよ
だから公式としては推奨も非推奨もしていない、案内だけしてるという状態
2023/03/08(水) 12:35:05.90ID:YsAFI89D
>>51
非公式翻訳版は公式のどのブランチのどのコミットバージョンをもとにしてるのかな?
どこに記載されてるののかな?
2023/03/08(水) 12:38:42.68ID:bQZD4wXW
>>51
2022はさすがに嘘だろ
もっと前に変更されてた内容がが日本語版では古いままだったのが数スレ前に出てだぞ
あれから更新された気配はない
2023/03/08(水) 12:46:44.11ID:zFvjdLUz
必死オジのわざとらしいミスリードだろ

翻訳版がもとにしているThe Bookのバージョンが古いままという指摘に対して
非公式翻訳版を見たら2022年と書いてたよーだもんwww
2023/03/08(水) 12:57:34.44ID:YxWGdUuX
>>53
それも君がそう感じてるだけでしょ?

特別に案内している唯一の和訳なのに推奨していないとか、日本語圏の読み手を騙そうとしているとしか思えないね。
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
数ヶ月前がいくつかあるから更新されてるんじゃない?
2023/03/08(水) 14:23:51.90ID:GIrZN4Te
複オジは非公式翻訳を
公式からリンクされてるという理由で
公式な日本語訳と偽っていた罪を償うのが先

嘘つきの言うことは誰も信用しない
2023/03/08(水) 14:28:59.70ID:MGmZ5+PV
>>59
で?
翻訳のもとになってる公式The Bookがいつ時点のものなのかがわからないなら無意味
2023/03/08(水) 14:38:17.99ID:k26S3184
評判の悪い日本語訳で勉強するより公式でやったほうがいいのは当然だよな
反対する理由は見当たらない
63デフォルトの名無しさん
垢版 |
2023/03/08(水) 14:49:29.41ID:yw6CL/M8
>>59
二つの問題が一気に片付いたな
日本語版は公認されている
日本語版は更新されている
2023/03/08(水) 15:29:08.93ID:xMERxfms
非公式おじさん涙目ワロw
2023/03/08(水) 17:16:33.70ID:YxWGdUuX
結局、足を引っ張るだけの無能は口だけ番長ということでいいのかね。

githubの日本語訳リポジトリに改善版のプルリクエスト出して貢献すりゃいいのに。
2023/03/08(水) 17:43:46.69ID:VNQhgWjd
>>37
わかりやすくていいと思う
内容がすでに古くなっていることに気付かずに利用する人がこのスレでも結構いたからね
そういう人達がテンプレを読むとは限らないけど注意書きは絶対あったほうがいいと思う
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 もいくつかあるけど放置されてるじゃん
2023/03/08(水) 18:21:29.08ID:DM+uPewN
>>37の案でok
日本語版の問題点の話ばっかりでこれ以上スレ消費しても仕方ない気がする
2023/03/08(水) 18:27:52.80ID:BrWt4HZU
>>69
放置されてるね~
これもしかしてメンテナ兼レビュワー1人体制?
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も放置されてる
→じゃお前がメンテナやれ

なんなのこれ
こんなのが関係者にいるんなら改善される見込みゼロでしょ
2023/03/08(水) 22:29:48.23ID:RPZ0ODVG
ここの皆Rust大好きな筈なのに日本語コミュニティに貢献の痕跡がないってやばない?
2023/03/08(水) 23:02:50.55ID:ijMIMHq8
非公式日本語翻訳には手を出さないよう
積極的に初心者を啓蒙するのが
日本のRustコミュニティにとっての最善手
2023/03/09(木) 00:46:37.28ID:ehuwCZc+
>>75
今や匿名じゃないと困っちゃう人の巣窟ですからね
2023/03/09(木) 01:16:43.58ID:Z9xocO1d
常駐してるアンチRustによる妨害連投だろ
何でも文句をつけてRustの足を引っ張ることが目的
日本語版の件も同じ
2023/03/09(木) 02:21:45.87ID:ehuwCZc+
そして>>69に戻る
2023/03/09(木) 08:46:28.38ID:NWRX1mim
>>78
どう見てもあなたの方が常駐してるアンチですよ
何の貢献もせずRustコミュニティの足引っ張るのやめてもらえます?
2023/03/09(木) 09:02:51.43ID:3zbp+azX
Rustアンチを見分けるのは簡単
今までどの話でも「改善案や代替案を出したり協力したり」せずに「批判したり言いがかりをつけたり潰そうとしたりする」

今回の話も同様
もし仮に具体的に深刻な問題があるならば改善する方向へ動けばよいだけの話
2023/03/09(木) 09:14:52.26ID:bx/t5YIt
>>37の具体的なテンプレ改善案に対して
>>39のように最初からヒステリックなレッテル貼りをして理性的な反論をしないあなたは間違いなくアンチですね

簡単に見分けられます
2023/03/09(木) 09:20:15.59ID:0a1GOjgJ
> 「批判したり言いがかりをつけたり潰そうとしたりする」
確かに日本語版の問題点が指摘されると
とにかく言いがかりをつけて潰そうとする人がいるね
2023/03/09(木) 09:27:52.51ID:pceol7Cc
誤訳も放置
イシューも放置
プルリク来るけど知らんぷり

文句言うな
お前がやれ
今日も5chをぐーるぐる

オラこんなリポいやだ
オラこんなリポいやだ
2023/03/09(木) 09:41:16.94ID:cLGdo+Dg
>>83
問題点を指摘するだけでもコミュニティに対する立派な貢献なのにな
それを必死に潰そうとするやつこそアンチだわな
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やその普及を潰すことだけを目標にしている
2023/03/09(木) 09:56:19.19ID:5eT48dzr
>>88
>>86で言ってるやんけ
github.com/rust-lang/book/graphs/commit-activity
github.com/rust-lang-ja/book-ja/graphs/commit-activity

これ見りゃ分かるけど本家の更新が全然入ってないのよ
改善案としては>>86に書いた通りか、リポジトリをアーカイブしてもう更新しないことをこれから見る人に通知するかがいいと思う
2023/03/09(木) 09:56:38.71ID:bUyZbGMm
>>85
ですよね
自分が経験した問題点を共有して後進の初心者に注意を促すような行為も十分立派な貢献
あとは受け手が内容を判断すればいいわけで
2023/03/09(木) 10:05:17.42ID:DF6AT3du
Rustコミュニティに貢献しても
非公式翻訳版の品質改善のために
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
>>91
自分達がコミュニティ代表という選民意識だろうね

都合の悪い問題点を指摘されると>>82の言うようにヒステリックなレッテル貼りで言論封殺という行動に出ちゃうあたりは高市とそっくり

やってることはRustコミュニティに対するアンチ活動でしかないんだがこの手の人たちは自分たちの私欲が満たせればあとはどうでもいいんだろう
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+
全員単発
応仁の乱
2023/03/09(木) 11:02:36.11ID:5eT48dzr
問題点・改善点をあげてもアンチ乙で片付けられるんだから無敵だな
2023/03/09(木) 11:36:59.36ID:I6UUv7Kk
>>96
そういう意味じゃない
翻訳プロジェクトが英語版リポジトリをforkしたり翻訳用リポジトリに取り込んだりしてないのかという意味
2023/03/09(木) 11:41:54.63ID:vunFCsf3
まぁ実際のところ日本語版を読みたい初心者がこんなスレに来るわけないし
このスレのローカルルールとしては>>37でいいと思うけどな
もし日本語版を本気でどうにかしたい人がいるならその議論はzuilpなりGitHubのissueでやればいい
2023/03/09(木) 11:59:25.10ID:IPNUA449
>>101
なるほど
元々が fork じゃない形態をとってるからよく分からないんだよね
まぁこれは各言語版そうなってるっぽいけど
2023/03/09(木) 11:59:38.63ID:Js3muVMH
>>101
どっちもやってないみたいだぞ
信じられんよな
最低限のソース管理も碌にできない人が
俺のやることに文句を言うなとかどの口で言ってんだか
10596,103
垢版 |
2023/03/09(木) 12:07:13.82ID:NxdTjqu4
もしもしはすぐID変わるからダメだな
これじゃIDコロコロするやつと変わんねぇよ
2023/03/09(木) 12:23:44.08ID:WMBmvI2V
>>102
日本語版を殲滅するようなローカルルールを決めるのはやり過ぎ
そこまでするのはRustのアンチと言われても仕方ないかな
2023/03/09(木) 12:53:07.30ID:vunFCsf3
>>106
単にこのスレでは取り扱わないってことでいいんじゃないかと思うけど
普通の初心者はこのスレ見る前にググればすぐにたどり着くんだし
2023/03/09(木) 13:38:49.60ID:tfi/zejU
>>102
同意
2023/03/09(木) 13:56:08.35ID:qMTKidpI
5chの1スレで扱わなくなると殲滅されてしまうよう物なら
近いうちに自然淘汰されるだけだから
ここでは扱わないのが正解ということになる
2023/03/09(木) 14:02:00.14ID:KrFX8l8a
傍から見てるだけだけどさ
わざわざ日本語版を排除しようというのはアンチにしか生じない動機・感情よね
2023/03/09(木) 14:10:10.57ID:WYfWQgCO
不正確なもんは排除しとくほうがマシ
それを許して欲しいと言う甘えは通用しない
所有権の複製とかいう用語が世間で通用しないのと同じ
2023/03/09(木) 14:12:34.91ID:za1QZKNx
更新が英語版のmainに追い付いたらテンプレに戻すという条件付き除外措置なら誰も文句無いですか?
2023/03/09(木) 14:13:47.86ID:KrFX8l8a
日本語版で不正確なところはどこなの?
所有権??
2023/03/09(木) 14:16:43.77ID:lc0skjdv
総務省の公文書のことか
2023/03/09(木) 14:47:46.87ID:WYfWQgCO
Rustアンチっていう表現がそもそも疑問なんよね
単にここじゃあ複オジが馬鹿にされてたり
rust-jpに疑問が持たれてたりするだけであって
それがなぜだか
ある人にとっては「Rustアンチ」ってことにすり替わっちゃう
2023/03/09(木) 14:50:24.91ID:TbSLyHqM
>>110
これから始める人が不正確な物を見ないように配慮するのがアンチ行為になるんですか?

>>113
100レスちょっとしかないんだから頭から流し読みしてくればいいじゃん
117デフォルトの名無しさん
垢版 |
2023/03/09(木) 14:51:04.12ID:yQuaEoeh
cargoを使用していると、過去のクレートのキャッシュ?なのかなんなのかわからないものがどんどん溜まっていってしまいます
これって使い続けるとどこまでも増えていってしまうのですか?何か容量を抑える策はあるのでしょうか?
SSDがしょぼいので気になってしまいます
2023/03/09(木) 14:52:40.57ID:5eT48dzr
>>117
cargo clean
2023/03/09(木) 15:28:35.84ID:SZrfwfYj
会話や議論のベースとするには信頼が置けないというのが最大の理由でしょ
だからこのスレでは信頼のおける公式The Bookを使うローカルルールにするというだけのこと

日本語版の問題箇所を一つ一つ具体的にあげて改善していくためのスレじゃないんだからそれをやりたい人は>>102が言うようにzuilpなりGitHubでやるのが適切
2023/03/09(木) 15:45:47.39ID:hrQLf9QV
アンチというレッテル貼りしてるだけの人の動機は何なんだろう?
2023/03/09(木) 15:53:09.08ID:RjLT18Ud
>>120
どうも日本語版のメンテしてる関係者らしいよ
こんなところで一日中書き込みしてるくらいなら
放置してるIssueやPRの対応すればいいのにね
2023/03/09(木) 16:11:36.62ID:od/fqKtF
バカが2人に増えたね
信者複製おじさんと謎のrust-jp陰謀論おじさん
地獄
2023/03/09(木) 18:38:23.80ID:wqVFkatU
Bookの日本語版を一通り読んでみたけど特に間違ったことはなさげ
訳語は一部意見割れるかもしれないけど不可はない感じ
ネット上の日本語のRust入門としてベストじゃないかな
2023/03/09(木) 18:53:24.39ID:1oUy2fzR
え、内容が古いことは無視ですか?
2023/03/09(木) 19:03:49.80ID:wqVFkatU
なにか古くて間違ってるようなことなかったと思うよ
2023/03/09(木) 20:59:36.65ID:5eT48dzr
>>125
古いっていうのは本家と比べてだから誤りがあるかどうかは別だよ
そして少なくとも Box 使用箇所でコンパイル通らないコードがそのままになってたりするよ
2023/03/09(木) 22:00:09.63ID:TpJxaXq0
>>126
具体的に間違い箇所がわかってるならissue立てたらいいんじゃない?
メンテナの人とやりとりしたことあるけど、間違ってるから優先して直してって言えば対応してくれると思う
2023/03/09(木) 22:25:18.34ID:5eT48dzr
>>127
Box 使用箇所は本家では直ってるところだからここだけ言ってもしょうがないよ

> 間違ってるから優先して直してって言えば対応してくれる
issue,pr は何個かあるけどどれも放置だから無駄だよ
2023/03/09(木) 22:28:14.00ID:Qg5Vw7uS
日本語訳の話はもういいよ
>>37に同意しない人は1人だけで有効な反論は出なかったからここでの結論は出た
日本語訳の品質改善に取り組みたい人はそれ用のGithubかZulipへどうぞ
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
}
2023/03/09(木) 23:19:16.56ID:17jElPHd
>>37
ネットで読める日本語のRust入門のベストはThe Bookの日本語版です
そんなテンプレは理解できないので反対します

>>130
その長さと深さならどちらでも個人の好み次第でしょう
長く深くなるとlet elseが読みやすくて推奨かな
2023/03/10(金) 07:39:28.49ID:eGAweG+/
>>129
「日本語訳は最新版を取り込めていないところもあるから注意」くらいならまだしも、>>37は狭量で排他的だからだめ。
こんなのと同類扱いされたくない。
2023/03/10(金) 12:26:56.89ID:5qa3scwI
>>132
追記。
日本語訳を(forkするなりした)修正バージョンを作ってそちらに誘導する、というのならあり。ユーザーにとってより良い改善策になるし。
2023/03/10(金) 13:39:34.28ID:YUaQrZ1H
>>130
その2つならif letバージョンの方が読みやすいね
2023/03/10(金) 17:33:37.91ID:THb1tZPF
>>130
前者だな
Okでも違う値を返すようになったりネストが深くなったりした段階でリファクタリングを考慮すれば十分
その例ではtake、flush、dropの一連のつながりを切るほどのメリットが全くない
あと後者はfile.flush.await.into()にする必要があるかもしれない
136デフォルトの名無しさん
垢版 |
2023/03/10(金) 17:46:09.19ID:Lf3CpR6K
>>111
不正確なもんは排除しとくほうがマシ、と考えるのも自由だし、5chで主張するのも自由。
もちろんそれによって誰も何の影響も受けない。
2023/03/10(金) 17:46:47.36ID:wtzqTKjF
>>130
私も前者だと思う。
見通しが特に悪くなるほど複雑な場合でないならやろうとしていることがそのままコードに表れているほうが良くて、
前者のほうが何をやろうとしているのかスッと読める感じがする。
2023/03/10(金) 18:03:17.42ID:Qo+lY2qI
>>130
if letとlet elseは場面に応じてどちらが向いているのか変わるから
その特定の例を比較してもなんの意味もないと思うが
一般的にif letが多段になるとその各else部分を先にlet elseで処理したほうが見やすくなる
一段でもif letの中が長くelse処理があって短いならばlet elseが見やすい

今回の>>130は返り値がResult<()>でelse処理が無い極めて特殊な例だから
当たり前のようにif letで良い
むしろそんな特殊な例を持ち出して議論することに意味がない
2023/03/10(金) 19:08:36.07ID:HKUOk1Tv
>>138
場面に応じてどちらが向いているのか変わるから場面がわかる特定の例で比較することに意味があるのでは?
2023/03/10(金) 19:13:36.55ID:Qo+lY2qI
>>139
返り値がResult<()>でelse時にErrではなくOk(())という極めて特殊な偏った例になんの意味があるんだ?
2023/03/10(金) 19:17:05.20ID:ha1WEkSQ
意味の有る無しを断じるあたり幼稚やな
周り見てご覧
キミ以外はそんなとこに拘っとらんやろ?
2023/03/10(金) 19:36:05.08ID:YsUJsRqF
>>141
そのあたりも本質の一つじゃね?
まあ俺なら>>130のif letにelse節がないことも問題視するけどな
そんな例ならif letを使うのがいいと自明だから問う価値がない
>>130がアホ
2023/03/10(金) 19:40:18.95ID:F+OjF9fC
好きな方使ってろバカども
前スレそれで使い潰してまだ反省してねえのか
2023/03/10(金) 20:24:59.10ID:7c0jaWrI
>>130
前者は表明を表していて、後者は処理の条件を表している。
基本的に関数全体の条件を明示したほうが関数を使う側にとって使いやすいので、前者のほうが望ましい。
2023/03/10(金) 21:43:27.35ID:+jgRtbOv
現在のIT業界に「代替メモリレイアウト」という概念はありますか?
146130
垢版 |
2023/03/10(金) 22:22:59.62ID:IYh2ezPU
>>130のコードは>>19のリンク先で「let-elseが便利すぎる」と銘打って紹介してたものなんだけど
let-elseを使う例としてはあまり適切な例ではないように感じたので他の人の意見を聞いてみたかった

理由はそれぞれ違うけどおおむね前者のほうがいいという意見が多くてスッキリした
ありがとう
2023/03/10(金) 22:39:57.98ID:IYh2ezPU
>>142
少なくとも>>19のリンク先ではif let Someでelse節が必要ない状況だからこそ
let-elseを使うケースとして>>130の例を紹介している
2023/03/10(金) 23:34:37.12ID:/vLExm3P
好きにしたらええ
それより前スレ埋めない?
2023/03/10(金) 23:46:20.34ID:Ug/D0/8N
>>145
「代替メモリレイアウト」という概念は聞いたことがないが悪魔の証明は無理なのでそういう概念がある可能性を完全に否定することはできない

非公式の日本語翻訳で使われてる用語みたいだけどこのスレで質問する際は公式のドキュメント(英語)を参照するようにしてね
2023/03/10(金) 23:54:51.68ID:0dyEfhS9
if letを使うかlet elseを使うかはケースバイケースでどちらもありうるのだから揉めるようなことではないと思うんだよな
let elseは要らないから削除せよ!と言ってた人はここを荒らすためだけに言ってただけだと思うし
2023/03/11(土) 00:35:13.78ID:fYMzQaF5
>>150
ケースバイケースだからこそ具体的な特定のケースを例にどちらがいいかを話してるんだろ
2023/03/11(土) 00:54:45.06ID:48Pa/Qcy
Rust標準ライブラリのソースを見るとよくわかるよ
let else構文はもちろん使われまくっている
可読性が良くなるからね
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をインストールしてコンパイルできた。
2023/03/11(土) 11:07:27.22ID:ShQc/Olf
相も変わらず1人だけズレてるな
2023/03/11(土) 11:07:29.53ID:phgAMXMr
>>152
ネストが深くならないように積極的にlet else使うのが良いみたいやな
130の例はネストが無いことがif letのままでいい根本的な理由となるわけだ
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にした
2023/03/11(土) 12:36:22.58ID:GtLfWJGz
let elseはcontinueでもbreakでもreturnでもpanicでも!なら何でも使えるし使われている
returnの時にErr返しなら?を使ってもよいが
.ok_or_else(|| Error)?; とするか
elseでreturnするか
どちらが見やすいかは意見が別れそうだ
2023/03/11(土) 12:39:50.82ID:WrUJ3YdB
Rustに限った話ではないがリファクタリングの良し悪しを判断するためには該当箇所を含む関数の全容(特に関数シグニチャ)とその関数を呼び出すコード例が最低限必要
関数シグニチャも呼び出すコードもない例では話にならない

呼び出し側が絶対変更できない前提なら前者だけでもいい場合があるが往々にして部分最適になりがち
>>130の例でも呼び出す側を考慮するとまた違った選択肢が見えてくる
2023/03/11(土) 12:48:32.01ID:Us0DtIzW
コーディング規約で早期リターンが推奨される開発現場であれば
その規約に準拠した表現が書きやすくなったのは良いこと
つうかそのつもりで読んでたから後者のほうが読みやすかったわ
2023/03/11(土) 13:41:29.57ID:+LV0PjS3
>>158
?とOptionとResultの影響があるから
他の言語よりも関数シグニチャーの持つ意味が余計に大きいように思う
2023/03/11(土) 14:09:20.55ID:zozTFx1B
隔離スレでやれ
2023/03/11(土) 20:53:29.08ID:YsMYadXT
https://qiita.com/namn1125/items/ccedf9cc06b8cef71557#let-else文のユースケース
この人が書いてるように?演算子のイディオムを踏襲してればlet-elseの出番は多くはない
逆に本来使うべきでないところでも乱用されやすいから注意が必要
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のみ
もちろん「量」は多いけどね
2023/03/12(日) 11:57:58.73ID:HouQiurI
カルパッチョ
2023/03/12(日) 12:41:14.42ID:UHnNkdpy
初見

VS code使い始めたんだが、カーソル移動系のショートカットキーの編集ってできないのか?
さくらEditorみたいにカーソル移動・ドラッグ編集を全部キーボードでやりたいんだが
2023/03/12(日) 12:42:40.81ID:C0R72d/J
なぜここできく
2023/03/12(日) 14:07:53.88ID:BVlbavKU
File > Preferences > Keyboard Shortcutsで設定画面開いて
cursorでフィルターかければcursorLeftみたいなコマンド出てくるから大体は変更できると思う
知らんけど
2023/03/12(日) 14:14:14.53ID:C6Uwumzj
vimでもemacsでもrust-analyzer動くよ
2023/03/12(日) 15:10:27.15ID:UHnNkdpy
>>166
プログラム板で一番勢いあるのここだから
2023/03/12(日) 16:06:30.84ID:nONlRGBh
大学生が書いたQiita記事のほうがこのスレの住民より要点おさえてるじゃんw
おまえらも見習えよ
2023/03/13(月) 11:54:44.62ID:38Ewlrdq
Qiitaは秀才だらけだし
5chム板は文字通り住民がrustだし
2023/03/16(木) 07:24:49.76ID:M0AuqK/y
>>162
その記事を読んでみたが漏れもあり
>>163のまとめで十分と思った
2023/03/16(木) 10:05:31.80ID:3ZknUEKY
複オジにいちいち突っ込むのは疲れたよ
>>163見れば素人だとすぐわかる
もう騙される人もいないから注意する必要もない
2023/03/16(木) 10:12:16.89ID:xtobTOZe
具体的に何が問題なの?
2023/03/16(木) 18:23:03.08ID:O0F78LdH
>>174
いつもの自演だろ。
真面目な話題はワッチョイスレにしようぜ。
2023/03/16(木) 18:54:09.77ID:sXsK9Uns
オジおじ言ってたら自演
スレ荒らしが目的
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 {});
}
2023/03/17(金) 19:14:05.96ID:NC4w42Nt
>>177
✕ impl Bar for &Foo {}
○ impl Bar for Foo {}
2023/03/17(金) 19:33:27.88ID:7IpB+MOB
>>178
それは変えられない前提の部分です。
制約の付け方 (where句の書き方) を質問しています。
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,
2023/03/17(金) 19:56:30.88ID:TZnQdWAf
いやできるが……
fn baz<'a, T>(x: &'a T) where &'a T: Bar
2023/03/17(金) 19:59:29.44ID:XLm6gsUd
なるほど、寿命を省略できないのですね。
ありがとうございます。
2023/03/17(金) 20:06:51.73ID:kImSYq8C
>>182
Rustコンパイラからのエラーメッセージを見てる?
参照に対してライフタイム付けろと出ているはず
2023/03/17(金) 20:28:03.09ID:VjFaSUfW
寿命!
2023/03/17(金) 21:08:25.10ID:XLm6gsUd
>>183
答えを見たら全く自然なことだということは理解できるんですが
explicit lifetime というのがなんのことかすらぴんと来ない程度なんです……。
2023/03/18(土) 11:19:09.17ID:KAD/gYE9
>>185
Rustを学びたい人はまず最初に”公式”のThe Bookを読むこと
https://doc.rust-lang.org/book/
2023/03/18(土) 11:40:54.04ID:yS+7OZFn
>>186
>>177て”公式”のThe Bookに書いてあったっけ?
2023/03/18(土) 11:42:47.58ID:l9YNpI31
lifetime 周りは書いてあるだろ
2023/03/18(土) 11:53:17.34ID:VtoeVuok
>>188
>>181とかどこだっけ?
2023/03/18(土) 11:57:09.36ID:kHUlERx3
>>185
ライフタイムは全てにあるが省略できることが多い
省略できないときはコンパイラがエラーとし教えてくれるのでライフタイムを付ければいい

>>186
日本語版もある
https://doc.rust-jp.rs/book-ja/
2023/03/18(土) 14:05:24.60ID:PyzwqGcC
>>190
誤訳だらけの粗悪な非公式日本語訳はお勧めしない
簡単なエラーメッセージの意味も分からないような状態なんだからまずは公式The Bookをしっかり読むべき
2023/03/18(土) 16:08:20.29ID:QSo2KHpO
「非公式な日本語訳」を「日本語版」と呼称するのはそれがあたかも公式かのように錯覚させる意図が見えるので優良誤認の疑いがある
2023/03/18(土) 16:13:56.89ID:6WtXixvi
>>187
The Bookはクックブックじゃないからな
特定の方法が書いてるか書いてないかよりも
読んで理解してれば自己解決できる問題かどうかが重要
2023/03/18(土) 17:11:12.32ID:NQWJ1KgL
日本語訳の話題は生産的じゃないのでやめよう
このスレのローカルルールは>>37の通り
195177
垢版 |
2023/03/18(土) 18:27:39.58ID:XgD5JQEe
読んだのは日本語訳のほうの The book ですが、個々の機能はたぶん分かってると思います。
ライフタイムを省略した場合には一定のルールで補われることも知ってました。
ただ、型が満たすべき性質を書くのが where 句なので (エラーメッセージを見てすら!) ライフタイムが必要ということがぴんと来なかったというのと、
引数と同じ記法でライフタイムをここに書けるのだということがわからなかったんです。
2023/03/18(土) 18:38:31.92ID:l9YNpI31
> 引数と同じ記法でライフタイムをここに書けるのだということがわからなかったんです。
英語版でも日本語版でもどっちでもいいけど 10.3 にちゃんと書いてあるよ
2023/03/18(土) 19:09:39.09ID:YhY+O2tk
whereの:の左辺に参照とか書けるのをまず知らなかったんでしょ
the Bookにそんな例無いし
2023/03/18(土) 19:27:58.81ID:sUMBdqo8
日本語版を読まなければこんなことにはならなかった
日本語版を許すな
2023/03/19(日) 04:14:30.76ID:JYAaHQUF
>>183
ラストコンパイラって響きカッコいいな
2023/03/19(日) 13:06:57.80ID:j6t6IVCD
>>193
この場合に必要なのはクックブックだろ。
せめて>>196みたいに誘導しないと。

「読んで理解すれば自己解決できる」とか、そもそも読むところも示していないのにできるわけない。読み手を無視してマウントする自慰行為にしか見えん。
2023/03/19(日) 13:09:44.94ID:E3Ip09fl
そりゃ「個々の機能はたぶん分かってると思います」とか言われたら分かってねーじゃんって言いたくなるだろ
2023/03/19(日) 13:23:44.49ID:6gmOWdI+
>>196
where 句の制約で書いてる事例はないよ。
2023/03/19(日) 14:19:01.09ID:8hEI7b0p
>>200
訳の分からない日本語訳読んでわかったつもりになってるだけだからそう感じるんだよ
つべこべ言わずに全部読め
2023/03/19(日) 14:25:09.74ID:RMEG+oCh
>>202
grepだけじゃ答えは見つからない
読んでないから調べ方もわからない
2023/03/19(日) 20:29:29.27ID:Pq7wYRkP
>>203
順調に日本Rustは錆びているようですね。いや、めでたい。
2023/03/19(日) 20:49:16.05ID:UVlxeYfB
ちゃんとあるじゃん
https://doc.rust-jp.rs/book-ja/ch10-03-lifetime-syntax.html#%E3%83%A9%E3%82%A4%E3%83%95%E3%82%BF%E3%82%A4%E3%83%A0%E6%B3%A8%E9%87%88%E8%A8%98%E6%B3%95
207デフォルトの名無しさん
垢版 |
2023/03/19(日) 21:36:02.67ID:XN9u9qop
Rustはベンチマーク速いから気になってるんだけど
iPhoneやAndroidの開発で将来的に使えるようになる話はないの?
2023/03/19(日) 21:40:34.06ID:C8hzWYTf
ゴミだな
2023/03/19(日) 21:41:36.36ID:/nL/Z/hW
>>207
普通に使えるやろ
2023/03/19(日) 21:48:03.22ID:1LqNQBrB
>>177見て思うんだじぇど
ゆとり教育超大国日本ではゆとり脳な奴が多数になって
エラーがでたよ、でも、エラー内容は書かないようなコミュ力の低い奴が
普通になっているんかな。
2023/03/19(日) 22:05:41.03ID:pmaEpt3C
>>210
いくつか落ち度はあっても>>177は自分の考える最小限の再現可能なコードを提示してるからめっちゃくちゃマシな質問者
質問者としての偏差値63くらい
2023/03/19(日) 22:08:47.66ID:pmaEpt3C
5chでの偏差値ね
Stackoverflowだと47くらい
2023/03/19(日) 22:25:46.74ID:6gmOWdI+
>>207
ネイティブコンポーネントには Rust は使える。
Android の根本設計が Linux+JVM で、 JVM は変に高級な設計だからその高級な機能に噛み合うように設計された言語じゃないとうまくいかない。
LLVM バックエンドで JVM バイトコードを生成するものもあるらしいから無理すりゃ Rust でもなんとかなるかもしれないけど……
それよりも現在の情勢を見ると Android に WASM サブシステムが入るとかのほうがあり得そうな気がするよ。
2023/03/20(月) 00:55:07.77ID:rG0fuScP
自然言語自体に落ち度があると思った方がプログラミング言語の価値が分かりやすい
翻訳にも質問にもChatGPTにも過度の期待をしなくてすむ
2023/03/20(月) 01:31:12.77ID:OPxEUMsA
言語の問題と言語を扱うやつの問題を同一視するアホ
2023/03/20(月) 01:42:28.65ID:+AEvN8jR
正常動作する正規品を期待してたのに
不具合だらけで役に立たないジャンク品でした
2023/03/20(月) 02:15:13.67ID:rG0fuScP
はした金ではジャンク品しか買えない
インフレか
物価の問題と品質の問題のような二つの問題を無関係と考えるのがアホだったんじゃないか?
218デフォルトの名無しさん
垢版 |
2023/03/20(月) 03:09:08.81ID:KC0EWXje
prettierの代替のdprintがRust製だった
普及してるものがRust製に置き換わるってが今後も続くだろうね
2023/03/20(月) 03:46:46.02ID:8+GC48xI
>>217
ところが実際はジャンク品のほうが正規品より高いんだなこれが
正規品に見せかけて売ってるからいわゆるジャンク扱いではなく蓋を開けたらゴミでしたという落ち

でもありがたいことに今は購入前に中身を確認可能なのでよほどの情弱じゃなければ騙されないんだけどね
2023/03/20(月) 10:04:17.69ID:UnL767mB
>>217
物価の意味も知らんのかww
恥ずかしいから辞書引けよ
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
2023/03/20(月) 11:08:21.33ID:XflJK2ct
>JVM は変に高級な設計だからその高級な機能に噛み合うように設計された言語じゃないとうまくいかない。

相変わらずいい加減なこと書いてるなぁ
2023/03/20(月) 11:41:00.74ID:rG0fuScP
アプリもコンパイラも動くLinuxが正規品
コンパイラは不要とされアプリしか動かないLinuxがジャンク
2023/03/20(月) 11:59:59.11ID:IoVEULD8
>>223
GNUにケンカ売る気かよ
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つにまとめてくれるメソッドある?
2023/03/20(月) 17:14:18.78ID:dpT4FG92
flattenとかflat_mapとかfilter_mapとか
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)
228デフォルトの名無しさん
垢版 |
2023/03/20(月) 20:22:03.14ID:9WmeSXDj
flattenのOption/Resultはずし知らんかった
2023/03/20(月) 20:32:22.28ID:45aFG7he
>>227
どれでもできるぞ
初手で一番素直な選択はfilter_map
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を使うと簡単ならば知りたいです
2023/03/20(月) 21:35:03.62ID:adpwtvX/
複オジかよっw
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)
2023/03/20(月) 23:15:03.64ID:dBJpnlWY
flat_mapはfilter_mapを汎用化したものなので
filter_mapは常にflat_mapで書き直せる
flattenと理屈は同じ
2023/03/20(月) 23:20:21.79ID:I3aedYRP
唐突に妙に具体的な質問が飛んできたらあの人だと思ってればいい
2023/03/20(月) 23:20:56.30ID:c1bWUyRU
どの人だよ
2023/03/20(月) 23:49:46.77ID:K17OWm6q
>>234
いやー俺は今回まんまと騙されたわ
自演力と自画自賛力にステ振りすぎとちゃう?
2023/03/21(火) 00:12:49.49ID:lhwbZ9up
>>226 >>233
質問はOption列が対象のようだからflat_mapとfilter_mapは対象外やろ
それらはむしろOptionを作る関数を与えて使う
元から既にOptionになってるのだからflattenが正解
2023/03/21(火) 10:42:06.27ID:El4m1VCp
Someだけ拾って関数をmapすると考えれば
filter_map(|opt| opt.map(f))
だな
元のSome/Noneをそのまま利用するのがトリッキーかもしれないけど
2023/03/21(火) 11:33:54.48ID:aqrydfrP
ところで、ラムダには自由変数というものがありその反対が束縛変数だが
ラムダや自由変数を意識する必要がない文脈で束縛という用語が出ると
その語源を説明する手間がかかるよな
240デフォルトの名無しさん
垢版 |
2023/03/21(火) 13:02:51.29ID:3dx+Qi3k
scalaやっているせいかmatchとか
すごく使いやすいわん
iterator nextなんてJavaでも使わんけど
これ使い人いるの?
2023/03/21(火) 13:17:10.53ID:lhwbZ9up
>>240
nextはIterator全ての基礎
nextだけを定義すれば他のメソッドはnextで作られているので自動的に定義される
for文もnextを使っている
2023/03/21(火) 13:27:49.15ID:gPDO4YWu
>>238
入力から出力までのパイプラインの全体像を見ればトリッキーに感じることはないと思うよ
例えば>>230にあるvec![None, Some((1, 2)), None, Some((3, 4)), None];みたいなのはこれがすでに入力値に対して何かしら関数適用した結果なんだよね
2023/03/21(火) 13:35:41.08ID:lhwbZ9up
>>242
関数適用せずとも
None初期化配列やVecで一部indexにだけ値がSomeは普通によくあるパターン
2023/03/21(火) 14:20:03.57ID:El4m1VCp
元の入力で「値の有無」を表してたOptionをfilter_mapの「要素の残存判定」に転用する形だから
Optionの意味が微妙に変わってて引っ掛かる人もいるかなって思った
2023/03/21(火) 14:35:08.73ID:4Vr7UtW/
昔の言語だと配列に初期値として使っていないことを示すために-1とか0とかnullとかundefinedを入れてしまうことが多かったパターンか
いわゆるデータのnull安全性がなかったことろをRustはOptionのNoneとSome利用でnull安全性が保証
データが0にならならNonZeroを使えばNone時に0が使われて余分なメモリ消費もないしな
2023/03/21(火) 14:39:43.43ID:xxXQcN5m
隔離スレでやれ
https://mevius.5ch.net/test/read.cgi/tech/1677286186/
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)
と辿り着く
2023/03/21(火) 17:23:17.80ID:El4m1VCp
>>247
自分は途中のイテレータ減らしたい派だから一番上で落ち着いてしまう
ラムダ式減らすなら下だろうけどfilter_mapが便利すぎてね…
2023/03/21(火) 18:14:49.79ID:lhwbZ9up
>>244
Optionは常に値の有無を表している
filter_mapも値の有無を残存判定に用いている
Optionの意味が変わることはない
2023/03/21(火) 19:05:07.54ID:Kxmr6Met
>>243
いかにも競プロっぽい考え方だね
現実のプログラムでは最低でも(K, V)で管理するから計算対象の値だけを素のOption配列で管理したりしないよ
2023/03/21(火) 19:18:56.96ID:8T+PSGNQ
>>250
インデックス値で管理できるものま無駄なコストがかかるハッシュマップでを用いる気軽な連想配列な考えこそコスト無視のスクリプト言語な考えだよ
インデックス値で管理できるものはRustでは配列かVecを使う
2023/03/21(火) 21:39:30.39ID:Hb26aB9L
HashMap<K, V>はhash計算コストに加えてkey比較コストがhash衝突回数の分かかるからなー
indexになれる値があって上限が許容されるならVecが有利
2023/03/21(火) 23:56:44.92ID:UIyRFaA6
>>250が経験不足と知識不足で知らなかったんでしょ
2023/03/22(水) 13:00:26.42ID:KFnwa6CM
>>251
おいおいなんで急にハッシュマップが出てくるんだよ
そんなんで大丈夫か?

Vec<Option<V>>みたいなデータがどこからともなく自然発生するわけないんだから全体のパイプラインを考えろって言ってるの
現実的かつ具体的なユースケースで考えような
2023/03/22(水) 18:31:25.27ID:KdbjtxZL
ナイーブなハッシュテーブルをVec<Option<T>>で実装する人はいるかもしれない
2023/03/22(水) 21:00:04.56ID:ax9KtLpr
うちも値域が限定されてる離散値はArrayかVec<Option<T>>使う
2023/03/22(水) 21:30:41.78ID:Bu7rNmu4
マニュアルに書いてるような内容をやたら饒舌に語るとChatGPT感出るね
2023/03/22(水) 21:32:36.00ID:VRM+VuH6
>>255
>ナイーブなハッシュテーブルをVec<Option<T>>で実装する人はいるかもしれない
その場合でもTは(u64, K, V)
2023/03/22(水) 21:36:57.10ID:fGWMZjSN
Vec<Optionは普通に使うぞ
今書いてる部分と似たようなことをしてるregexのソースを見たらVec<Option使ってる
普通そうなるよな
2023/03/22(水) 22:15:33.42ID:ngpWOwSU
>>257
まるで知能は互角で内容だけが違うみたいな言い方だが
知能の差を見せつければいいだけだよ
2023/03/22(水) 23:19:58.21ID:M/QYX+I6
Vec<Option<T>>が使われないなんていう話は誰もしてないのにね
話が通じなくてもう面倒くさ過ぎるわ
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>>は何度も使うからのイテレータ処理の一時的に現れるものでもない
2023/03/23(木) 00:27:50.25ID:WQSgJ4cO
構うから暴れるんすよ
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()];
2023/03/23(木) 08:16:41.69ID:uJzov1zR
公式ドキュメントとchatgpt
これだけあれば全て滅びる
2023/03/25(土) 10:51:05.32ID:F0OLKMhM
人間があれやこれやするよりも
全部 AI 翻訳に任せりゃインジャネーノ
267デフォルトの名無しさん
垢版 |
2023/03/27(月) 10:33:42.84ID:IqXvBms8
>>263
本当にそうだったね
268デフォルトの名無しさん
垢版 |
2023/03/27(月) 13:18:10.65ID:hjxGI+jP
そのうち
課題を見つける能力
課題を提起する能力
がメインとなるんやろな
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
ごめんスレ間違えた
2023/03/31(金) 12:09:07.07ID:lEKZGT8D
それはrustだろ?ここはrustスレ。間違えるなよ
2023/04/01(土) 04:03:16.63ID:ncnK4efa
Interface 2023年5月号
550号特別企画 2大特集 Linuxでも正式サポート,組み込みや車載で注目を集める 質実剛健 Rust言語
3月25日発売 (定価 1,200円+税)

第1特集:C言語と比べて理解する
第2特集:マイコンで動くフル機能Rust
特別付録:初めてのRustプログラミング
新連載:毎号実験!自律移動ロボット
2023/04/01(土) 16:12:14.56ID:MxqBV1k0
>>273
面白そうだな。組み込みだと実装依存のCコードがまかり通っていたりするからな
2023/04/02(日) 17:52:37.39ID:w9dFgeBH
interface読んでる連中には難しいんじゃないの?
2023/04/02(日) 18:01:44.10ID:Xkdfgrgv
むしろこれを機に組み込みの勉強でも始めてみようかしら
2023/04/02(日) 18:02:25.20ID:oh3DHZZg
>>273
本屋で見てきた。個人的にめぼしい解説はCMSIS-DAPくらいで
大体The Embedded Rust Bookで十分かな
2023/04/02(日) 19:09:06.81ID:w9dFgeBH
組み込みだったらmrubyだよね
しらんけど
2023/04/03(月) 00:25:42.34ID:XRTgFvZO
そのうちrust謹製の組み込み OS とか出てくるんじゃねえの
2023/04/03(月) 00:53:16.98ID:OPvO6xnV
>>279
Google が KataOS を発表してる。 今は CantripOS と改名してるっぽいな。
どこまで本気なのかよくわからんけどコードは Github に有るから見物してみたらいいんじゃない?
2023/04/03(月) 09:12:06.30ID:45NlJXFV
組み込み分野を目指す学生はPythonばっかり
これを機にRustやCやC++にも目を向けて欲しい
組み込み分野の実務でPythonはつぶしがきかない
2023/04/03(月) 11:15:42.36ID:wQbZbh4b
組み込みでPythonとか使うのか
一番親和性の感じられない組み合わせやな
283デフォルトの名無しさん
垢版 |
2023/04/03(月) 11:32:22.07ID:AEelnK5w
ラズパイでしょ
2023/04/03(月) 11:39:22.47ID:DEHD7IX8
ラズパイは組み込みじゃないだろw
組み込み向けだと MicroPython とかあった気がするけど使われてるのかねぇ
2023/04/03(月) 11:55:49.94ID:weCnHsyM
ラズパイはLinux系OSが動いていてX Windowを立ち上げてデスクトップPCにすることも可能な環境
昔からからの組み込みが指すのはOSがないもしくは簡易なものしかない環境でありそこでPythonは使われない
2023/04/03(月) 12:04:38.11ID:GLvgK6Zq
組み込みかどうかと言うより
ミッションクリティカルかどうかと言ったほうが正確か
2023/04/03(月) 12:08:34.80ID:+ZHaYieR
同等以上に曖昧に思う。
2023/04/03(月) 12:26:19.63ID:NFGj33Dp
組み込みならFORTHだよね。
289デフォルトの名無しさん
垢版 |
2023/04/03(月) 15:05:13.27ID:KUJKPBk4
ミッションクリティカルの意味わかってないだろw
2023/04/03(月) 15:14:52.29ID:bhpxOZS2
javaですら使われるんだから場所によってはpythonもあるだろう
2023/04/03(月) 16:24:30.55ID:0x65F9Io
このスレ複製おじ来なくなって平和になったなw
2023/04/03(月) 17:14:33.32ID:XRTgFvZO
10年後くらいには組み込みの指すやつが10GHz・20GBくらいになってんだよ
2023/04/03(月) 22:15:51.09ID:OPvO6xnV
Python だって組み込みに使われるのはわかるよ。
でもそれをホスティングする環境は何で書くんだって話よ。
アプリケーション部分だけ書ければ良しというわけにもいかんだろう。 組み込みってのは。
294デフォルトの名無しさん
垢版 |
2023/04/03(月) 22:22:41.19ID:6LaoLj6b
組み込みの定義次第
2023/04/03(月) 22:46:10.84ID:uCVDtc7z
自分の中の組み込みはリアルタイムシステム
CかC++
2023/04/03(月) 23:08:31.70ID:NUuZ0KjY
>>290
javaですらというか、javaはもともと組込みを視野に入れて開発されたものだしな
2023/04/04(火) 12:59:01.65ID:9wA8JWJA
普通のWindowsPCを何かの筐体に入れればそれは組み込みだがそういう話じゃないよな
実装的には一般的なアプリと何も変わらないわけだし
2023/04/04(火) 19:20:19.03ID:WPLXkRn6
みんな、組み込みに食いつくね
連想するの分野がひとそれぞれなんだね
おいらは組み込みといったらファームウェアだな
2023/04/04(火) 20:28:06.15ID:ktWoV7jH
PICじゃなきゃ組み込みじゃないって感じなのかな?
数年前に関わった仕事じゃFPGAとARMが両方乗っかってて
OSも入ってるやつで測定データをCのソケットでUDP送信させたけどこれ組み込み?
2023/04/04(火) 20:50:26.77ID:vWHz0hKB
>>297
それも組み込みだがなんらかのデバイスの制御はするだろ。
しないってのならさすがに組み込みとは言わんと思うが……。
2023/04/04(火) 21:47:02.28ID:LgI/21ca
技術的には低レイヤーと称する方が適しているのだろうな。せいぜい軽量のRTOSあたりまで

>>300
汎用性に乏しい装置は原則組み込みじゃね
ゲームコンソールもどちらかと言えば組み込みだと思うし
デジタルサイネージとかも該当するだろう(ラズパイ使っている例もあるらしい)
2023/04/05(水) 02:16:43.52ID:SGxKhieo
>>301
steam deckがLinuxベースという話もあるので
ゲームコンソールが組み込みかどうか…

テレビもLinuxが入ってたりするしなあ
2023/04/05(水) 11:08:42.58ID:vYYfy7R4
>>302
Steam Deckは携帯ゲーム機の形をしているだけで任意のOSを使用できるのだからPCでしょ
>>301でいうゲームコンソールはCS機やAC機等のゲームを実行することしか想定していない装置のこと
テレビもどちらかと言えばゲームコンソールよりでは
2023/04/06(木) 10:45:28.99ID:E/e3rQLj
>>303
デバイスドライバやファームウェアをひとつも書いてないってことはなかろうし、
デバイスに固有の低レイヤプログラミングの部分は組み込みと言ってもいいんじゃないの。
2023/04/06(木) 11:27:07.02ID:k0Faa7D2
普通組み込み用途と言えばコンピュータ制御の電子機器のために使う用途やろな
・メモリなどのリソースが少ない環境でも使える
・応答時間などのタイミング制御のために実時間処理ができる
こういうのにRustが強いのは何となくわかる
コンパイル時に静的に解決できる範囲が広いからな
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();
307デフォルトの名無しさん
垢版 |
2023/04/06(木) 12:42:05.41ID:0BpFn4iz
組み込みシステムと組み込みプログラミングで微妙に境界線が異なる

例えばサーマルカメラ内蔵のAndroid端末を使った検温システムは組み込みシステムだけど
サーマルカメラのSDKを利用した検温アプリ開発は組み込みプログラミングとは呼ばないかもしれない
サーマルカメラのSDKを作る開発は組み込みプログラミングと呼べる
2023/04/06(木) 12:56:01.04ID:UmwXRZgB
確かにSoCや基板の事情がソフト側から見えてると
(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しておく
2023/04/06(木) 16:55:58.17ID:E/e3rQLj
>>306
値を返すイテレータも参照を返すイテレータもあるから
どちらでも不都合のない仕組みにしようとするとそうなるんじゃないの。
参照が二重になるのはごく普通のこと。

その二重の参照をどうやって剥がすかには選択肢があるけど。
2023/04/06(木) 18:19:32.48ID:ypjpS3Va
>>306 >>309
Vecのインデックスをフィルタリングしているだけだから
iter()もenumerate()もmap部分も不要
シンプルにこれだけでよい
(0..v.len())
.filter(|&index| f(v[index]))
.collect();
312デフォルトの名無しさん
垢版 |
2023/04/06(木) 18:50:13.90ID:uKOnYkHi
俺はそれやだな
313デフォルトの名無しさん
垢版 |
2023/04/06(木) 19:01:16.65ID:1W2y5liy
俺もそれはちょっと遠慮したい

でもまぁそこは論点じゃないんでしょ
iter().filter()は常に&&Tになるから**itemするのが一般的かどうかを聞いてるんだよね?
2023/04/06(木) 19:34:52.41ID:E/e3rQLj
>>311
イテレータでのアクセス (シーケンシャルアクセス) とランダムアクセスが混ざるのがなんか嫌な気持ちになる。
Vec や配列であることが分かっているときなら問題はないというか、
むしろ状況が整理された良いコードだとも思うんだけどなんか心理的な抵抗感が……。
2023/04/06(木) 21:02:27.27ID:cLuUm0Wb
またイテレータの話してる
2023/04/06(木) 22:26:13.61ID:Ejh1MMKT
>>313
into_iter()でT自体を回してるときにfilterで消費しないように&Tを使っているために
iter()で&Tを回してるときは&&Tになってしまうわけだな
3つの点
・&&Tを考える概念的なわかりにくさ
・記述と可読性
・最適化後の最終コード
それそれで不利があるのかどうか?
2023/04/08(土) 17:58:41.25ID:mPm1zhb4
イテレータおじさん.....。
2023/04/08(土) 23:26:42.03ID:JVh6Wuqn
多数の文字列をいくつでも追加で登録できて、
その登録した各文字列の参照(&str)を、
その登録オブジェクトが生きてる間は自由に使えるような機能のクレートありますか?

追加のみで削除機能がなければ安全に参照&strを返してその参照をずっと安全に使い続けられるインタフェースを提供できそうですが、
実現にはunsafeを使わざるを得ないため何かデファクトスタンダードなクレートがあるか知りたいです。
2023/04/09(日) 00:21:16.51ID:mvoikQEA
Vec<String>
2023/04/09(日) 00:32:20.15ID:optZAiB4
Vecは追加のために&mutを使うから&strを持ち続けられないか
321デフォルトの名無しさん
垢版 |
2023/04/09(日) 01:16:25.16ID:uCQZ544j
は?
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}");
コンパイルエラーだな
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
}
324デフォルトの名無しさん
垢版 |
2023/04/09(日) 01:56:50.49ID:awfxf9QU
だとしたらinterior mutabilityでやる話だね
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);
}
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年現在どれがおすすめですか?
2023/04/10(月) 10:35:11.69ID:wa5pv4tn
そんなに数多くないと思うから10~20個くらい試して何が良かったか教えてよ

オススメ聞くってことはここで挙げられるようなやつ全部試して感想聞かせてくれるってことでしょ
決めるのに好みも入ってていいんだから
なんなら「名前が気にくわない」「アイコンがダサい」くらいの理由でもいい
2023/04/10(月) 10:45:58.73ID:yiM3eSrr
規模とか構成とかでも良い選択は違うのでなんとも言いにくいな。
比較的に万能で定番なものは actix, axum, rocket あたりだと思うが。
2023/04/10(月) 12:38:17.63ID:GqegRxcS
Tide 使っとけば間違いない
2023/04/10(月) 15:48:33.90ID:4HpjR3/Y
パフォーマンスより、単純明快なwebフレームワークが知りたいな
PythonならFlask的な
どうせDBがボトルネックになるし
333デフォルトの名無しさん
垢版 |
2023/04/10(月) 18:28:14.17ID:Mdv85xt7
そういうの自分で調べられない人はもう少しエコシステムが成熟してからRustを検討した方がいいよ
2023/04/10(月) 19:05:09.35ID:sUqOZltz
どうせ○○がボトルネックになるし

こういう発想は大事
細かいところにだけ着目してvtableのコストがどうのとか
クロック数でいくらどうのとか
そういう連中よりは遥かにセンスがある
2023/04/10(月) 19:20:23.61ID:yiM3eSrr
>>334
クラウドだとCPU時間やメモリに課金されるから
「ユーザの体感速度にほんど影響がないからいいや」とはならない。
スループットだけ見てればよい時代は終わった。

ローカルでちょっとした GUI がわりにする程度ならどうでもいいけど……。
2023/04/11(火) 23:57:13.30ID:+2ozf4Lx
ディスパッチの話で負けた負け犬が遠吠えこいてんのか
337デフォルトの名無しさん
垢版 |
2023/04/26(水) 20:19:48.59ID:WZHTU1Do
Rustに限った話じゃないけど非線形(条件分岐を少なからず含む)な関数のテスト条件って普通どうやって作るの?
例えばRGB888フォーマットの色1と色2を飽和加算合成する関数を作ったのでテストしたいとする
すべてのパターンをテストすれば確実だが2の24乗もあってあまり現実的ではない
最小値と最大値と線形から非線形に移行する付近のみテストするとか?
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・・・ビット単位ならパターンはそこまで多くないし
ググっても具体的に何をテストすべきかみたいな解説はあまり出てこない気がする
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
2023/05/02(火) 12:09:31.43ID:XVCLDAkP
このままLinuxの公式言語になってしまうのだろうか?
それはそれでちょっと寂しい
2023/05/02(火) 12:15:20.08ID:GEufc0we
へぇ、Rustって知らないところで着実に市民権獲得し始めてるんやな
まぁ確かに“安全性”、“堅牢性”ってのは売りになるわな
2023/05/02(火) 12:21:25.01ID:xcMXGreF
とは言ってもパラダイムが違うものを組み合わせるのは
それはそれで色々としんどいから
新規プロジェクトからということにはなるわな。
あるいはモジュール単位で徐々に……といったところか。
2023/05/02(火) 13:10:44.65ID:SH4oCjNk
純粋に質問なのですが、Windowsだとユーザ権限プログラムから感知できない全画面確認画面(コード署名表示付き)を
手動クリックすることによって権限昇格するAPIやファイル実行オプションを用いるのですが、
Linuxのsudo、suはそういうOS提供APIの単純ラッパ以外の処理が必要なのですか?
2023/05/02(火) 14:14:52.25ID:kqtJfIHI
>>345さんの祖末なチソチソもっとよーく見たぃナ☆
>>345さん、またみんなの前でチソチソ出してくださいね☆
2023/05/02(火) 15:20:08.53ID:HqctS3p2
Qiitaで調べものをしていたらRustを広めたいというユーザーを
見かけたのですが実のあるRustの記事がありません

ここにいらっしゃるのですか?
2023/05/02(火) 16:34:54.41ID:IqyS7yAG
Rustはアマチュアがいじいじするだけの言語だから
349デフォルトの名無しさん
垢版 |
2023/05/02(火) 17:29:28.03ID:DSQza21A
Rustや情報科学みたいなものは、完全に自分の教養のためと思って勉強してるけど・・・・・
いつまで経っても実用の域に届かない
2023/05/02(火) 17:34:42.24ID:KHYt4fkx
R&D関係者と交流があるだけの人ってアマチュア?
351デフォルトの名無しさん
垢版 |
2023/05/02(火) 17:49:30.32ID:IqyS7yAG
アマチュアがあーでもないこーでもないと
持て余したヒマでいじくり回した結果
しょうもないポエムを生み出すだけ

この言語そのものというより
この言語を取り巻く状況はずっとこう
2023/05/02(火) 19:13:07.37ID:XhxCeHYa
Linux 6.3.1のtokeiしました

https://i.imgur.com/1xgblDP.png
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サロンへ入る。稼げるから
2023/05/02(火) 20:03:17.56ID:6g8Nsfp3
>>341,345
sudu-rsとsudo(original)のtokeiしました
LOCが違い過ぎて機能的に同等とは思えませんが誰か確認してください
https://i.imgur.com/wqUfNLQ.png
355デフォルトの名無しさん
垢版 |
2023/05/02(火) 22:59:03.14ID:3h/NlzQK
>>354
機能的に同等そうかどうかは
テストを比較すればいいよ
2023/05/03(水) 00:18:13.49ID:g1uPDP/x
>>355
なるほどテストを比較よろ
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はそれらしきものが全くない
2023/05/03(水) 00:49:48.46ID:CZOik0F4
>>341
これ別にsudo(sudo.ws)やsu(GNU)がRustに移行しますって発表じゃなくて
GNU grepに対するripgrep的なプロジェクトってことで合ってます?
2023/05/03(水) 08:45:46.83ID:I87taHnB
>>357
HTTPバックエンドとして使えるって話だから元々本体にRustコードは入ってないと思うけど
この辺見ればわかるけど、hyperやrustlsは別途ビルドしてるよ
https://github.com/curl/curl/blob/master/.github/workflows/linux.yml
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
移行を目指して開発するということです
2023/05/03(水) 17:41:36.60ID:gBESz1Qj
>>360
Linuxをrustで書き直して

はい、できました
364デフォルトの名無しさん
垢版 |
2023/05/03(水) 20:37:19.00ID:C/1gxzck
数千トークンの単位でしかやり取りできないって知らないんだろうな
2023/05/05(金) 20:25:46.02ID:zl0JqMlo
この手のシステムプログラミング?できる言語って何から始めたら良いんですかね
いきなりRustから入ってもいいのかそれともC言語から始めるべきなのか

シェルスクリプトで作った自作ツールをバイナリ化して動作を早くしたいとかそれくらいしか今は用途ないんですけど
いやでも、既存のツールのソースが読めるようになるから難しくてもまずCをやるべきか…
2023/05/05(金) 20:44:06.81ID:ug2cMp38
>>365
隔離スレに帰れゴミ
2023/05/05(金) 21:21:06.18ID:zl0JqMlo
>>366
ええ…単にRustで検索してたどり着いて書き込んだだけなんだけど
368デフォルトの名無しさん
垢版 |
2023/05/05(金) 21:21:49.38ID:ZIYROKTz
>>365
そういう用途ならとりあえずはGoからはじめるといいよ
目的を実現するまでにかかる時間が5倍くらいは違うと思うから

シェルスクリプトも外部ツールをうまく利用してたら実質Cに近い速度で動いてる場合もあるからCやRustで自作したからといって速くなるとは限らないよ
369デフォルトの名無しさん
垢版 |
2023/05/05(金) 21:25:04.73ID:ZIYROKTz
Rustを学ぶために事前にCを学んだほうがいいかと言えば全くそんなことはない
2023/05/05(金) 21:46:33.98ID:zl0JqMlo
>>368,369
ありがとうございます

事前にCの知識が不要であれば、既存のツールのソースを読むのに便利くらいな感じなんですかね、Cは
自作スクリプトは最初からOSに入ってるコマンドを組み合わせる形で動いていて
なのでまあ多少早くなればいいなくらいで、後は趣味兼勉強で覚えたいと思ってます

GoについてはRustと双璧で名前が出てきますね
Rustの方が使われてる印象があったんでそっちを検討してたんですけど
GoについてもRustと違いを把握できる程度で調べて、どっちかで検討してみようと思います
2023/05/05(金) 23:01:41.02ID:6VYfhEYJ
>>370
システムプログラミングというのはシステム (OS やそれに近い層) のプログラミングを
想定したもので、システムのドキュメントでの説明やツールキットに C が使われていることはそれなりにある。
アプリケーション層でも C や C++ で書かれたライブラリと結合したいこともたまにはある。
(人気のあるライブラリなら Rust 用のラッパーライブラリが提供されていると思うが。)
そういうことをしたいのなら C を多少は読み書きできないとしんどいこともあるかもね。
そうでないなら C を扱える必要はない。

大きなコンポーネントを組み合わせる程度の使い方の場合は
シェルスクリプトを他の言語に置き換えても性能はほとんど変わらない。
実行時間のほとんどがそのコンポーネント内のコードの実行に費やされることが多いので
自分が書く部分の性能が少しばかり高性能でも全体の実行時間にはそれほど大きくは影響しない。
2023/05/05(金) 23:23:10.17ID:A/rFKldr
>>365
何らかの言語経験があるならいきなりRustで大丈夫だけど
C言語の基礎レベルの知識(ポインタ、スタックとヒープ、ヒープメモリ確保と解放)の有無の差を埋めておくのはよいかもね

>>370
GoはGC(ガベージコレクション)がある言語なのでどうしてもC/C++/Rustとは決定的な違いがあるね
例えばスクリプト言語の高速なライブラリを作るといったような速さや省メモリを追及するならC/C++/Rust
373デフォルトの名無しさん
垢版 |
2023/05/06(土) 04:59:19.62ID:cJf94Ar1
C++もGC使えるけどな
2023/05/06(土) 05:26:55.29ID:ZbAqT6nN
言語システムとしてGCを必須とする言語との区別がつかないアホか
2023/05/06(土) 06:16:27.47ID:6JUtkYO4
C++マネージ拡張
プログラミング言語
376デフォルトの名無しさん
垢版 |
2023/05/06(土) 06:21:14.86ID:cJf94Ar1
文字列は動的なアロケーションが必要な場合があるだろ?
じゃあ、文字列を動的配列に入れる場合どうなる?
コピーなどは動的配列のメンバで行われるだろ?
C++は、コンテナが使用するメモリーはGC、文字列のメモリー確保はマイアロケータ、なんてことが出来る
動的配列のメンバが文字列のメンバにマイアロケータを使わせるようになるってことだぞ
377デフォルトの名無しさん
垢版 |
2023/05/06(土) 06:22:08.86ID:cJf94Ar1
>>375
標準C++で使えるぞ
2023/05/06(土) 06:47:02.36ID:BGrqS5mo
GCが不可欠な言語とライブラリでGCする話は全く異なり関係ない
2023/05/08(月) 01:15:08.03ID:4H9Xfh5A
パーサジェネレータっていろいろあるけど今だと何が良いんだ?
パースターゲットはgas風のアセンブラリスト。取り扱いは今風な方が嬉しい
2023/05/08(月) 02:27:34.26ID:6qkGyJAY
文法にも種類があって文法と解析アルゴリズムの組み合わせ次第では定義不可能なこともある。
具体的な文法を検証しないとどれを使うのが妥当かは言えない。
2023/05/08(月) 06:50:07.08ID:4H9Xfh5A
>>380
gas系のIA-32/AMD64アセンブラリスト
gccやclang等が吐くものを想定している
2023/05/08(月) 08:35:46.67ID:Kh0HUP9F
nomでいいんじゃないかな
2023/05/08(月) 10:53:50.62ID:6qkGyJAY
gas の文法なら最も素朴な文法カテゴリである LL 文法の範疇に収まるはずなので
PEG 系のパーサコンビネータライブラリが適していると思う。

でも LL 文法は再帰下降で書いてもたいした手間ではないので
凝ったツール (またはライブラリ) を導入しても劇的に楽になるってほどでもない。
コードの見通しが良くはなるかなぁ……。
2023/05/08(月) 20:28:58.82ID:4H9Xfh5A
>>383
ググるとpegってクレートが引っかかるけどこれでいいのだろうか
というかgas系の文でもISAによって使えないパーサジェネレータとかあるのかな
2023/05/12(金) 21:22:48.00ID:rQCSntAC
わび、さび
が分かる日本人↓
2023/05/13(土) 06:51:26.85ID:7jqHwrc+
滑ってるぞ
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
と思われるけどこのあたりのアセンブラリストを得るにはどうしたらいいんだろ?
388デフォルトの名無しさん
垢版 |
2023/05/20(土) 18:33:58.33ID:Sx1e1bwr
インライン化されてるだけでは?
panicだと分岐とpanicハンドラが出てくるから分からないってことはないと思うんだが
最小再現コードをgodboltにても上げてみては?
2023/05/20(土) 19:27:31.19ID:w2uVrX5O
Compiler Explorerの使い方がよくわかっていないので変だったらスマン
ttps://godbolt.org/z/nxz95xejr
こんな感じ。明示的にrip相対になっているのでコンパイラはLinux版と思われる
core::panicking::panicを呼び出していることはわかるがその中身は出てこない
390デフォルトの名無しさん
垢版 |
2023/05/20(土) 23:56:16.81ID:5KQ3IHQ1
>>389
no_stdなライブラリだと基本的に使う側がpanic_handlerを定義するので実体なくてもしょうがないような
no_stdをコメントアウトして表示される結果と比べてみれば?
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が呼ばれるはずだけどその辺も隠れているように見える
2023/05/23(火) 16:03:35.67ID:Jpx1nTNj
初心者の相談ここでいい?
RustやってみようとWin +VisualStudioCodeに 
RustAnalyzer と CodeLLDBを入れ
PythonもPath付きで入れた 
cargo newも走った

なのにデバッガが使えない 
Hello Worldにブレイクポイント一つ置いただけなのに
F5押したら帰ってこない もう一回押したら

Debugは既に開始しています 別のインスタンスを開始しますか?

なんかワクチンが悪さしてるかと思ってESETも30分止めてみたけれど同じ
誰もこんなところで躓いてないのになんでかな,,,
2023/05/23(火) 17:27:20.12ID:Jpx1nTNj
デバッグなしの実行だと Hello, world! が普通にターミナルに出力されるのに
なんで デバッガ動かないんだか,,,
2023/05/23(火) 17:30:06.95ID:QaZRkUju
>>392
下ペインの出力タブで何かエラーメッセージ出てないか確認しなさい
2023/05/23(火) 18:02:22.62ID:QWj3a5zv
>>392
launch.jsonを生成してみれば?
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とかプロセスが増えていくだけ
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 なんかおかしいのかなこれ
2023/05/23(火) 18:14:16.03ID:QaZRkUju
>>396
出力タブってそれじゃなくて[表示(V)]→[出力(O)]で出るやつね
右上のセレクタで関係ありそうなやつを片っ端から確認
2023/05/23(火) 18:26:24.50ID:Jpx1nTNj
へい
今日はもうPCから離れてしまったので
(お仕事の時間
明日の午後 出力をここに転記してみます
よろしくお願いします
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", 以下略
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
}
}
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', 以下略
2023/05/24(水) 14:17:47.42ID:r6J0oqAK
launch jsonの内容をなぞっているように見えますけれど どこが問題なんですかね
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で良い」ならそれで行きます
2023/05/27(土) 21:43:25.68ID:gMKf+OGS
何に使うかによります
2023/05/27(土) 22:55:13.87ID:A+Fg27pW
>>405
とりあえずVecで作るので良いよ
性能は別途検証しましょう

bound checkが必要になる使い方か
auto vectorizationが働く使い方か
などが差が出るポイント
408デフォルトの名無しさん
垢版 |
2023/05/27(土) 22:56:24.11ID:3vAeCl3M
ドキュメントを調べたらRawVecが良さそうなんですが
まだ安定版で早い模様
https://github.com/rust-lang/rust/blob/master/library/alloc/src/raw_vec.rs

うーむ
2023/05/27(土) 23:03:14.16ID:A+Fg27pW
Vecの中身がRawVecなんだけど
RawVecを直接使ったほうが速くなるような使い方なのかな?
410デフォルトの名無しさん
垢版 |
2023/05/27(土) 23:15:57.87ID:3vAeCl3M
数万要素の行列演算なので極力余計な処理はして欲しくない感じかな
2023/05/27(土) 23:38:53.11ID:vyw6vGV+
>>405
Cのコード見るにそんな速度にこだわり無さそうだけどw
2023/05/28(日) 00:21:22.19ID:zeE7KVbL
今のご時世に行列計算の速度を気にするならSIMD使えでFAじゃね?
413デフォルトの名無しさん
垢版 |
2023/05/28(日) 00:34:27.16ID:TDETqQQX
今の時代は普通にGPU使うのがベストだよ
ただしクラウドでやるとなると金がかかる
今こそCPUで限界まで性能を出し切ることが「男の夢」じゃあないか
マルチスレッド、ベクトル命令、メモリのプリフェッチを駆使して
GPUなしでどの程度性能を引き出せるか?という実験をやっているところ
Cなら普通に書けるのだけどRustの方が色々ライブラリも豊富だから
アプリケーション化するとき楽かなあと思った次第
2023/05/28(日) 00:34:40.65ID:druolHmT
詳しくないけどBLAS/LAPACKっていうの使えばいいんじゃないすか
そもそも行列計算するつもりなのかすら明言されていませんが
2023/05/28(日) 00:42:17.84ID:A/FYSLVX
GPUは環境依存が激しいからなぁ。自分しか計算しないならそれでもかまわないかもしれないが
不特定の環境で動かすソフト用には使いづらい
416デフォルトの名無しさん
垢版 |
2023/05/28(日) 02:13:41.27ID:TDETqQQX
とりあえず行列を適当なブロックに区切ってそれをスレッドで計算、ブロックは転置したりしてキャッシュメモリに乗るように調整する
それを最終的にreduceする
こうすればマルチノードでも実行可能

>>414
それも使ってみるよ
numpyは内部でそれを使ってるらしいけどね
ただライブラリ使ってハイ終わりってのは味気ない
そしてやってることは俺が上に書いた技術以上のことは現状ない
417デフォルトの名無しさん
垢版 |
2023/05/28(日) 18:01:21.95ID:ouzH40Jy
「The Rust Programming Language 日本語版」の日本語訳が微妙すぎる。自分は英語が苦手なのでできるだけ日本語で分かりやすくRustの使用について書いてあるドキュメントが読みたい。
だれか日本語的にもう少しちゃんとしたRustのドキュメントを作ってくれないだろうか?
418デフォルトの名無しさん
垢版 |
2023/05/28(日) 18:48:08.28ID:zw3BCEgM
>>417
しっかり学びたいならオライリー本がいいよ
2023/05/29(月) 09:19:07.96ID:THthJ00e
本家に追従できていないのは不備だがそれは単なるリソース不足だから訳者が増えないとどうしようもないし、
文章表現の中に学習に障害になるほどおかしいようなところがあるとは思えないので
分かり難いと感じる箇所は本当に翻訳由来なのか? と思う。
2023/05/29(月) 11:00:00.74ID:0py62bgw
>>417
日本語訳にそのような問題はない
2023/05/29(月) 11:14:03.62ID:Ukb2D43H
せめて具体的にどの部分かくらいは言ってくれないと
翻訳の問題なのか原文自体が417に合わなかったのかも分からんしなぁ
422デフォルトの名無しさん
垢版 |
2023/05/29(月) 11:31:04.88ID:FT7slsJB
そんなレベルじゃないだろ
あの日本語訳を普通に読めるやつって普段どんな文章読んでんだよ
2023/05/29(月) 11:43:48.21ID:NzRLe/wE
>>420
前にずっと翻訳でゴタゴタしてたのはもう解決してたんだな
知らなかった
2023/05/29(月) 11:49:14.32ID:ZdZrmK0s
日本語訳は原文読むための補助くらいの感覚がいいと思う
std含むライブラリのドキュメントは基本的に全部英語だから英語苦手とか言ってられない
MDNみたいに片っ端から翻訳されるならいいけどそんなリソースないでしょ
425デフォルトの名無しさん
垢版 |
2023/05/29(月) 13:13:50.43ID:35XvpH6w
The Book以外の入門書や入門方法を求めたり提案したりするのは構わないけど
The Book日本語訳自体はこのスレでは扱わないことになってるので
日本語訳の個別具体的な問題点についての話はGithubなど別の場所でどうぞ
2023/05/29(月) 14:20:40.96ID:iwZJC5k1
所有権の複製ですか?( ・`ω・´)
427デフォルトの名無しさん
垢版 |
2023/05/29(月) 15:10:37.76ID:O87suSPk
ぶっちゃけ非公式日本語訳より機械翻訳の方がずっとわかりやすいよ
ChatGPTのようにコンテキストを理解してくれるやつなら機械翻訳特有の不自然な言い回しはあっても誤訳は遥かに少ないから
2023/05/29(月) 16:08:06.98ID:THthJ00e
デタラメをハキハキとしゃべる人のほうが好人物に思われやすい。
人間は自然さ (流暢さ) を正しさと誤解するバグがある。
そのバグを突かれてるだけ。
2023/05/29(月) 16:51:09.81ID:wn8XGwh5
>>417
こんな感じだから、他人に期待するだけ無駄だよ。
自分でやるか、金を出してやらせるか。どちらも嫌なら諦めな。
430デフォルトの名無しさん
垢版 |
2023/05/29(月) 17:04:22.45ID:4yvEjXWf
いまだに1ページ目から誤訳盛り沢山
リソース不足というより能力不足とやる気不足
431デフォルトの名無しさん
垢版 |
2023/05/29(月) 18:20:04.93ID:Qw0OFueK
>>430
能力のある人間が英語が読めないやつのためだけにわざわざ時間を割いてタダ働きで非公式な翻訳に参加する理由がない

英語が苦手な人による英語が苦手な人のためのもの
過度な期待は良くない
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:fyU8ZoqD
>>432
元の英語が大体思い浮かぶようなやつが
誤訳だらけの日本語訳なんて読むわけないやん
435デフォルトの名無しさん
垢版 |
2023/05/29(月) 22:51:14.31ID:/vmU8chJ
アハハ バカね!嘘つくならもっとマシな嘘ついてよね・・・
2023/05/30(火) 00:04:02.24ID:/771ql8l
明瞭に「誤訳」だとわかるくらいの能力があるなら issue 立てるくらいしてくれよ。
2023/05/30(火) 11:47:11.26ID:0Tfb139m
このスレも日本語を禁止して英語だけにした方が話が早くね?
2023/05/30(火) 13:54:02.69ID:m0YhPkee
Good Idea desune〜
2023/05/30(火) 21:02:05.18ID:H+AZ7xQ9
可変変数という摩訶不思議な用語・・・・・
440デフォルトの名無しさん
垢版 |
2023/05/30(火) 21:41:45.99ID:6nHNYy1Z
おっさんになって覚えがわるいのか言語のせいなのかわからんがRust難しいなおい…
2023/05/30(火) 21:44:11.50ID:wiPQkzC+
>>436
issue も pr も放置されてる現実を見ような
442デフォルトの名無しさん
垢版 |
2023/05/31(水) 12:34:12.39ID:mN2Hu6K3
ハードウェア依存のライブラリってのはパッケージ管理ソフトが扱いづらいんだよ。
cargoがそういうの取り込むとは思えん。
2023/05/31(水) 21:01:36.14ID:YdF423Zw
>>440
どうだろ。 それは知識背景によると思う。
最初に学ぶ言語なら Rust はしんどいと思う。
ウェブ系でアプリケーションレイヤしか触ってないみたいな経歴でも Rust は異質かも?

C++ を充分に習得してるくらいなら Rust はそんなにハードルは高くないと思う。
まあ隅々まで理解しようと思うとなんだって大変だが及第点レベルまではドキュメントを読めば普通にわかる。
Rust の型システムは ML 系言語で実績があるものだからその感覚で使えるし、
唯一の面倒なところはライフタイムの管理くらいじゃないかなぁ。

そのライフタイムにしたところで参照より先にオブジェクトの寿命が終わったらダメという当たり前の根本ルールを
成立させられるように考えたら詳細を知らんでも自然に出来そう。
2023/05/31(水) 23:09:20.99ID:wcJUGwzN
>>442
xargoはもうチェックした?
見当違いだったらすまね
2023/06/02(金) 15:23:50.48ID:xBaj60Ia
>>443
用途次第でもあるんじゃね
自分なんて豪華なC程度にしか使ってなくてトレイトとか理解できていない
2023/06/02(金) 16:09:01.15ID:IDHD031H
>>445
C++ のコンセプトなんかだと無ければ無くてもなんとかなるが
Rust のトレイトは理解できてないとコンパイルが通るものを書くことすら難しくない?
2023/06/03(土) 20:44:16.65ID:oycqQ//J
>>446
簡単なプログラムだと自分で書く範囲でトレイトで抽象化するのを避けると意外と避けたまま済んじゃうんだよね。
2023/06/03(土) 23:52:21.19ID:JeZxIQ3D
新しい型を作らない程度の使い方だとトレイトの理解が不十分でも意外と何とかなっちゃうかも?
2023/06/04(日) 08:41:55.61ID:rt4nzg3U
みんなRust使って何開発してるの?
一通り勉強したけど用途が今の俺にはあまり縁が無い事に気付いた

普通のアプリならGC走って少しレスポンス遅い時があっても問題無い
Webフレームワークで早いっていっても色んな機能が無いだけ
あれもこれもそれもとフルスタックなら既存言語ので良い

結局仕事として使ったのってセンサー系だけ
確かにIoTセンサーには向いてると思った
450デフォルトの名無しさん
垢版 |
2023/06/04(日) 09:02:25.58ID:QzSyb99b
毎年の調査結果にも出てるように
Rustを使っているのが多いのはWeb
低レベルhyperの上のフレームワーク本命axumが熱い
2023/06/04(日) 09:11:57.71ID:rt4nzg3U
やっぱりWebなん?

でもWebシステムだとアレコレソレって色々必要じゃん
足りてる?
言語云々じゃ無くてミドルウェア
2023/06/04(日) 09:19:10.72ID:MHoxWKtY
今どきのウェブはクラウドに載ってることが多い。
CPU やメモリを使った分だけコストがかかるのでレスポンスタイムが問題なくても
リソース消費量を削減すれば大幅なコスト削減が見込める。

ライブラリはなんだかんだでそこそこ充実してるし、
むしろ何か足りないものってある?
具体的にこれが足りないって言える?
2023/06/04(日) 09:34:57.16ID:rt4nzg3U
そこまでガッツリとRustでWeb開発して無いから聞いてる感じかな

例えばASP.NET系でAzureAD認証だと設定しとけば勝手に認証機能付く
それこそアクセストークンがどうだのリフレッシュトークンがどうだの開発者は気にしない
勝手に内部でアクセストークンが期限切れならリフレッシュトークンで再取得して処理する
リフレッシュトークンが期限切れでも勝手に認証ページ飛んで認証したら続きから処理する

そういうミドルウェアあるんかな?
アレもコレも実装しなきゃってのは充実してない
C#ならNugetでライブラリ読み込んで設定用の数行記述したらそれで終わり
コレが充実
454デフォルトの名無しさん
垢版 |
2023/06/04(日) 09:59:54.28ID:6x+rjW9P
そういうのはない
でも俺もwebで使ってる
2023/06/04(日) 10:02:25.33ID:QzSyb99b
ASP.NETに全く興味ないので知らないが
そこまでやりたいことがはっきりしてるなら自分で調べればいいだけではないのか?
何をしようとしたが何ができなくて困っているのかをはっきりさせよ
2023/06/04(日) 10:08:15.10ID:rt4nzg3U
>>455
いやRustはWebには向いてないって思ってたから調べてさえいないよ
そして試してもいないから困ってもいない

最初に質問したように俺の感覚ではIoTとかみたいな変なタイミングでGCしちゃってみたいなのは困る場面ぐらいしか用途は無いと思ってた
だから何に使ってるのかを聞いた
コレが俺の知りたい事で既に書いてる

そこでWebで使ってると返ってきたから突っ込んで聞いてみただけよ
でもってやっぱり無理矢理使ってるだけって印象を更に深めた結果になってる
2023/06/04(日) 10:08:26.66ID:M4a45GKO
そりゃAzureADとかやりたいならC#で良くてわざわざRust使うこともないよ
でもWebのすべてがそういった要件を必要とするわけでもないし、Rustが向いてるとこに使えばいいってだけ
自分の分野で向いてるとこがないって判断ならそれでいいと思うけど
2023/06/04(日) 10:10:46.55ID:rt4nzg3U
>>457
それはその通り
規模とか使う場所によるわな

それこそルーターに組み込む管理画面のWebページ程度ならRustのWebで良いわな
今でもPHPとかで動いてるわけだし
459デフォルトの名無しさん
垢版 |
2023/06/04(日) 10:12:15.45ID:E551jt0y
俺は実用のコードを専らC#で書いていて、コンピューターサイエンスやRustの言語は単なる修行だと思って学習してるんだけどさ
10年ぐらい前に廃れたような構造でWebアプリを作ろうとする人を見ると、「年をとっても学習を止めちゃだめだ」と改めて感じたね
2023/06/04(日) 10:13:17.36ID:rt4nzg3U
ちなみに認証だけならRustでもあるぞ
本当に認証するだけで期限切れがどうとかリフレッシュトークンがどうとかは自分で書く感じ

最低限のライブラリは一応あるけどミドルウェアにはなってないって感じ
2023/06/04(日) 10:15:03.74ID:QzSyb99b
>>456
むしろWeb向き
クラウド含めたサーバは今はWebベースであり
CPUコストメモリコストが言語により数倍変わってくる
2023/06/04(日) 10:17:45.38ID:M4a45GKO
あとはWASMも結構多いかもね
Amazon Prime Videoとかディズニーの動画配信はRustで書いてたはず
2023/06/04(日) 10:18:49.32ID:rt4nzg3U
>>459
そこは難しいんじゃね

開発者の問題ってより経営者の問題
新しい技術は良いけど補償出来るの?って感じやん
他社での実績は?ノウハウは?トラブった時に解決出来る?って感じ

企業がシステムに望むのは安定稼働
なので数年前から10年前の技術が現在の主流になる
実績があってノウハウがあって技術持った人が外部にも多いから求人も楽でコンサルしてくれる所も有る

こういう要素無いと稟議通らないでしょ
2023/06/04(日) 10:20:54.57ID:rt4nzg3U
>>461
そこは思うわ
要はコスパが良いんやな
金が有れば確かにクラウド出水平分散出来るがって事やな
2023/06/04(日) 10:28:10.92ID:xOmzDhxR
複おじ共々隔離スレにお帰りくださいませ
2023/06/04(日) 10:29:49.43ID:MHoxWKtY
実行中のプロセスを実行中のままで別のサーバに移動するみたいなことも出来るしな。
負荷分散とか CDN みたいなことを考えたら WASM の利用価値は高いと思う。

ただ、逆に言えば大規模にクラウドを活用するという場合でないのなら
必要そうなものが最初から載ってるフレームワークが楽というのは確かにそう。
既存のシステムがあるなら既存のシステムでやればいい。

そうでないときが有るから新しいシステムが発明されるわけなんで。
2023/06/04(日) 10:29:57.16ID:rt4nzg3U
>>461
これビューエンジンは何使うの?
調べてみたけど貧相なテンプレート機能しかない感じだけどマジ?

Razorみたいにガッツリ中でコーディング出来ないの?
それともJavaScript系の何か使うの?
もしかしてコーディング量で言えばRustの方が少なくてJS書く方が多い?
マジ?
2023/06/04(日) 10:31:29.87ID:rt4nzg3U
>>466
動かしたまま別サーバーに移動ってAzureやらAWSじゃ普通に出来るやんw
2023/06/04(日) 11:27:05.07ID:IpWrAX+2
画面周りなんかHTMLで書いた方がだいぶ楽だろ。
470デフォルトの名無しさん
垢版 |
2023/06/04(日) 11:45:54.52ID:2fzIybDH
延々と自演してて草
2023/06/04(日) 12:12:07.87ID:rt4nzg3U
>>469
これはただの馬鹿w
2023/06/04(日) 12:29:26.42ID:ckCJmvWc
Rustってlinuxコマンドのリプレースを作るための言語だろ
2023/06/04(日) 12:33:51.42ID:+vxIFgp1
いつからそんな地位を?w
2023/06/04(日) 12:54:38.29ID:yBN53eMB
個人開発で技術力高いならコスト削減の効果があるが
エンタープライズは人件費の方が高いわけでコスト削減にそもそもならない
AWSとかマンパワーのある企業なら別だけど

このことをわかってるから、Web系企業は普通Rustを採用しない

基本はC、C++の代替言語だね
ランタイムが薄くてシステムプログラミング向け

そもそもWebサーバーをCで普通書かないから同様にRustも向いてないということになる
IT土方向け言語じゃなくてOS開発とか一部のエリート開発者向け言語
2023/06/04(日) 12:56:42.06ID:rt4nzg3U
つまりRustでWeb云々言ってる奴は小規模開発の経験しか無い土方って訳か
そりゃ意見が合わん訳だ
476デフォルトの名無しさん
垢版 |
2023/06/04(日) 13:04:09.42ID:S8P2kIF5
Rustって戦争の準備じゃないの?
サイバー攻撃に備えましょうって事とか
爆弾搭載したドローン制御するのにとか
2023/06/04(日) 13:06:29.56ID:QZNMuBNC
RustでWebっていうとCloudflareみたいにHTTP直接扱うようなのも多いしな
PHPでWebアプリ、みたいな層はターゲットではないと思う
478デフォルトの名無しさん
垢版 |
2023/06/04(日) 13:14:25.68ID:Yc44DpOp
>>474
> そもそもWebサーバーをCで普通書かないから
> 同様にRustも向いてないということになる

いえいえ
WebサーバーはこれまでCで書かれてきました
apacheもnginxもC言語で書かれています
Rustが最適な分野です

>>475
逆です
2023/06/04(日) 13:18:05.37ID:rt4nzg3U
>>478
いや言いたい事ってそういう事じゃ無いと思うよw
そこが分かってないのは技術力が無い証拠
480デフォルトの名無しさん
垢版 |
2023/06/04(日) 13:28:02.69ID:Yc44DpOp
>>479
CDNやクラウドなど含めてWebサーバーシステムの新たなものはRust製
Rustの世界的な利用調査結果からみてもWeb方面での利用が多い
この分野で現在プログラミング言語のうち最も適しているのはRust
2023/06/04(日) 13:38:27.69ID:M4a45GKO
Webにも低レイヤ(HTTP3とかSSLみたいなライブラリ)から高レイヤ(Railsで作るようなWebアプリ)まであって
まとめてWebっていうから話が合わないんだろうね
高レイヤしかやってない人はそもそも低レイヤの存在自体知らなかったりするし
Rustに向いてるのは低レイヤ側で、Railsの代わりに使えるなんて言う人はいないんじゃないかな
2023/06/04(日) 13:39:46.54ID:R98I/Q0o
実際ウェブアプリを速攻で作ってみるというなら
Railsは何でもライブラリやドキュメントが揃ってるから楽

規模が大きくなるとRubyのせいで辛いことが増えてくるけど
最初から高度なこと目指してない人には
Rustから始めるのは現状では立ち上がりの苦労が多いとは思う
483デフォルトの名無しさん
垢版 |
2023/06/04(日) 13:46:22.68ID:wTbdEHgi
俺はいわゆるwebアプリ作ってるよ
最近は重厚なフレームワークは避けられるでしょ
2023/06/04(日) 13:58:39.33ID:s0MiwY6r
高レイヤwebは形式上プログラミング言語を使っただけのお絵描きや職人芸みたいなものであって、Rustユーザーが言うプログラミングとはかなり異なる世界
2023/06/04(日) 13:59:58.35ID:YjKn3ZKa
Webブラウザサイドで重い計算処理はRustで書いてWasmにやらせている
関連するUIやviewもWasmから
486デフォルトの名無しさん
垢版 |
2023/06/04(日) 15:22:57.88ID:6x+rjW9P
楽だという理由でwebで使っているよ
2023/06/04(日) 15:26:41.80ID:rt4nzg3U
>>486
どういう部分が楽だって聞いても良い?
更に言えば同じ部分が他言語ではこういう感じで面倒的な話とか
488デフォルトの名無しさん
垢版 |
2023/06/04(日) 15:49:15.47ID:6x+rjW9P
平たくいうと品質を保つのが楽
スクリプト言語は作るのは楽だけど維持するのが苦痛すぎ
2023/06/04(日) 16:05:09.85ID:rt4nzg3U
それってJavaとかC#でも良くね?
Rustである意味はないよね
490デフォルトの名無しさん
垢版 |
2023/06/04(日) 16:06:21.66ID:6x+rjW9P
なぜそう思うの?
2023/06/04(日) 16:14:24.49ID:JwBn0wcZ
Rustを活用できないクソ雑魚が使わない理由の正当化に必死っすな
2023/06/04(日) 16:22:16.38ID:rt4nzg3U
>>490
要はスクリプト言語を排除出来れば良い訳じゃん
Rustじゃ無くても出来るよねって話
2023/06/04(日) 16:23:34.73ID:rt4nzg3U
>>491
今のところ“活用”出来てる例は出てないけど?
“使用”は出来るって話だよね
2023/06/04(日) 16:26:51.47ID:rt4nzg3U
ちなみに俺のそもそもの質問は何に使ってるのかって話なんだから“活用”出来る場所を教えてくれよ

OSやら低レイヤWeb以外でさ
495デフォルトの名無しさん
垢版 |
2023/06/04(日) 16:40:10.04ID:ydxF9Sga
RustのWebアプリ個人的にrailsより遥かにわかりやすいと思うんだけど
2023/06/04(日) 16:46:31.48ID:rt4nzg3U
シンプルな機能しか無いからだろ
2023/06/04(日) 16:46:36.28ID:3zj6xUo2
エコシステム全体が代数的データ型前提で作られていて
型宣言だけでほぼAPIの使い方がわかる、みたいな体験は他言語ではちょっとないかもね
だから一度Rust書けるようになったら全部Rustでいいじゃんってなりがち
2023/06/04(日) 16:47:18.61ID:iNT4RVPT
railsの分からなさは、どこのコードがいつ動いてるのか、分からんとこ
499デフォルトの名無しさん
垢版 |
2023/06/04(日) 16:55:53.89ID:6x+rjW9P
>>492
ジャバもダメだね
C#はちょっとしか触ってないから評価できないな
500デフォルトの名無しさん
垢版 |
2023/06/04(日) 16:59:31.44ID:6x+rjW9P
>>498
レイルズに限らずフレームワークというのはえてしてそういうものだよね
それって作る時はいいけど維持することを難しい
なので避けられるようになってきた
501デフォルトの名無しさん
垢版 |
2023/06/04(日) 17:00:30.76ID:CvW15b8Y
高レイヤーのWebアプリでもRustがつかわれるようになるよ
支配的にはならないけど
2023/06/04(日) 18:26:31.67ID:R98I/Q0o
ID:rt4nzg3Uからは議論や情報交換より
「論破」したい気持ちは強く伝わるな
2023/06/04(日) 18:31:18.83ID:rt4nzg3U
論破なんてどうでも良いです
504デフォルトの名無しさん
垢版 |
2023/06/04(日) 18:56:40.97ID:Yc44DpOp
>>493
AWS (Amazon Web Service)など様々なものがRust製になっていってる現実を受け入れられない?
もしRust製である必要がないと主張したいならばどの言語を使うのがベストなのか明確にすべき
2023/06/04(日) 19:11:40.33ID:rt4nzg3U
>>504
既に言われてるけど低レイヤーの話でしょ
そこは得意分野だろ

でお前はその低レイヤーな部分を作るの?
要はApacheもどきを自分で作るんか?
2023/06/04(日) 19:12:48.96ID:rt4nzg3U
OS開発に向いてますって言われてもOS作る開発者は一般的じゃ無いやろ
2023/06/04(日) 19:13:29.18ID:yBN53eMB
>>478
言おうとしてたのはWebサーバーじゃなくてWebアプリね

で、企業でnginxやapacheみたいなHTTPサーバースクラッチで作ってる日本の企業ってどこにあるんだ?
Webアプリ作ってるのが大半だろ?
H2Oぐらいしか知らないけどあれはほぼ個人開発だしな
なんでかって言うと既にOSSで優秀なエンジニアが作ってるから、企業でそれをやるのは意味がないから
普通のエンジニアはこういう車両の再発明的なことを業務ではやらない

だからWeb系企業にRustは普通採用されないと言ってるの

一部のエリート向けって言ったのはまさにこういうこと
nginxもredisもCで書かれてるけどほぼ一人のエリートよって作成されてるからな
Linuxカーネル書いてる人もエリートしかいないだろ
そう言う人向けの言語
2023/06/04(日) 19:13:51.05ID:rt4nzg3U
議論が出来ない馬鹿の良くある事

極論で語る

これが出てきたら無能確定
2023/06/04(日) 19:36:06.85ID:yBN53eMB
でその一部のエリートは通常C、C++を使いたがる
新しい言語自体には興味がなくメモリを自分で管理できる自信があるから

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の代わりに使うべきだと考えているプログラミング言語は何ですか?
2023/06/04(日) 22:38:12.29ID:rt4nzg3U
何でRust否定してる事になってるの?
妄想酷くねw

長々と書いてるけど的外れなんだよ
2023/06/04(日) 22:52:44.00ID:Lgm9jhwY
結局なにがしたいのかがわからん
相手にしてるやつも
2023/06/04(日) 22:57:08.43ID:YjKn3ZKa
速さ省メモリに保守性の良さからRustがベストで間違いない
2023/06/05(月) 01:02:48.45ID:G39bRhEA
この人の中ではRustの適用範囲は決まってて
他の人が範囲外の事例出すと否定のための否定を
したいだけなのが明白だから相手しても不毛
2023/06/05(月) 01:11:33.27ID:9wHuhZD9
言いたいことはこれなのだろう

>>489
> それってJavaとかC#でも良くね?
> Rustである意味はないよね

JavaとかC#である意味こそないよな
2023/06/05(月) 01:41:08.29ID:FV749zD+
まとめて隔離スレに帰れゴミカスども
2023/06/05(月) 07:49:28.36ID:GAWgQYcM
>>468
ライブマイグレーションって今でもあまり普通じゃないと思うけど。冗長化構成とって切り替えが多いだろ。
2023/06/05(月) 11:19:07.49ID:9Zk1qYqb
>>514
違うかな

逆に言うとC#でもOSは書けるし実際に有る
でもソレって無理矢理感有るでしょ

Rustも同じでやろうと思えば出来る
でもそれってRustである意味は無いよねって話

高速で動く必要があって
GCが走って一時的にレスポンスが遅くなる事態が不味い
って場面がRustの出番って事だと思うんだけどね

WebアプリについてはまさしくRustであるある必要は無い
せめて他言語のフレームワーク並みに各種ミドルウェアが充実してるならまだしもその分野では貧相としか言えない
だからこそ流行ってないとも言える
2023/06/05(月) 11:31:56.47ID:G39bRhEA
>>518
そうだねすごいね
520デフォルトの名無しさん
垢版 |
2023/06/05(月) 12:29:52.32ID:AdIugMi7
自分で考えて調べて判断を下せない人にはRustは向かない
良い悪いじゃなく適性と置かれている環境の違い
2023/06/05(月) 12:41:59.19ID:GjYw3Sbx
DiscordでGC云々ってのもGoのアップデートで解消できる内容だしな
(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#である必要もない
524デフォルトの名無しさん
垢版 |
2023/06/05(月) 13:43:03.69ID:UReP7Es5
>>521
あるよ
ここまで外部データを扱う分野もない
つまり内部でメモリアロケーションが頻発する
メモリをどうアロケートするか?で天と地の差が出るのが現代のマシンのアーキテクチャだ
キャッシュメモリに全部乗せるようにプログラムを書くのは今や常識
いちいちヒープからメモリを確保していたらページフォルトで尋常じゃないスピード劣化を招く
ましてやGCなどそんなプログラムを遅くするようなもんよく採用したな?というレベル
Webこそスタックとヒープとメモリアロケーションを明確に制御できるべき分野
2023/06/05(月) 13:46:53.65ID:UReP7Es5
>>509
何度も言うがスタック、ヒープ、ベクター化(SIMD)、キャッシュメモリなどを意識することは一昔前よりはるかに有効になっている
キャッシュメモリの速度が比べ物にならないくらい速くなっているからだ
むしろ今こそスタックとヒープを意識して「メモリをちゃんと使い回す」ことを意識すべきなんだよ
所有権ってのはマシンアーキテクチャの視点で見ると
メモリ領域をうまく使い回すための技術ともいえる
余計なアロケーションを防ぎメモリリークを防ぎ
ページフォルトを防ぎベクター化を容易にする
このような現代的なプログラミング技術についてまともに解説されることは少ないのだが
優れたプログラマは常に意識している
2023/06/05(月) 13:51:56.62ID:UReP7Es5
「Rustが速い」と言われてるのはこのようなメモリの使い方が優れているから結果として速くなっているというのが事実
これは他の言語が捨てた部分だ
他の言語は「メモリなんて富豪的でいいっしょ」と言う姿勢を貫いていた
しかし現代のアーキテクチャにおいては他の言語が捨てた部分こそが高速化の肝だったのだ
Rustの初期のメンバーがここまで意識できてたかはわからないが
メモリ安全を追求した結果現代アーキテクチャにとって最適な形になったのは偶然ではない
2023/06/05(月) 14:02:53.03ID:v+V2Ynpr
>>521
TypeScriptで型レベルプログラミングに慣れた人たちは「せめて直和型くらいは欲しい」となってしまい
移行先としてGoもJavaも対象外になって、パフォーマンスが必要なくてもRustに行くケースがよくある
Goがもっとリッチな言語機能を目指してればこういう層は全部取れたんだろうけど
528デフォルトの名無しさん
垢版 |
2023/06/05(月) 14:21:53.12ID:qHQdZEB1
アレな人とアレを複製する人のアレな議論からは
反面教師とする以外に何も得るものがないな
2023/06/05(月) 14:27:59.36ID:/xaXR3Rr
>>521
かつてはウェブの世界だと細々と切り詰めて効率化するよりスケールアウトのしやすさのほうが重要視されてた。
プログラムを改良して性能を倍に延ばすよりもサーバの数を増やしたほうが安上がりだから。
プログラムの改良はやればやるだけ性能が伸びるというわけでなくて、
どうせどこかに上限があるなら数で補えるような設計のほうが良い。
それがかつてのウェブの思想だが、クラウドが前提の世界になって一変した。

スケールアウトを簡単に出来るインフラが整ってしまったんだ。
サービスを構築する側は CPU とメモリを使いたい分だけ金を払えばスケールアウトは当たり前に出来るものになった。
サーバの準備が投資ではなく消費になってしまったとも言える。
ま、経営者にとってみれば消費は減らしたいもんだ。
故に今はミクロ的な実行効率のほうを上げようとする圧力が発生している。

そんなわけで Rust を採用する動機はある。
もちろんサービスの規模が小さいならそんなに手間かける割に合わんということも多いだろうけど、
ウェブでも Rust を採用する動機は存在するんだよ。
530デフォルトの名無しさん
垢版 |
2023/06/05(月) 14:30:23.16ID:SGaNfCKj
おっさん、Rustは学歴勝負の言語なんだよ
高卒様はC#スレに帰ってくれ
2023/06/05(月) 14:36:08.40ID:0sUVinjo
Rustの言語機能の充実さが書きやすくて堅牢でメンテもしやすいね
メモリ管理はほぼ自動で慣れだけの問題で書くこともできるし
さらに踏み込んで頑張ることもできて幅広い利用者に適してる

Rustの唯一の弱点は慣れるまでの時間が他の言語より長いことだけど
慣れてしまえば消える弱点なので現存するベストなプログラミング言語かな
2023/06/05(月) 14:45:53.25ID:DZ7CuRre
結局C++とRustってどっちが良いの? 3traits
https://mevius.5ch.net/test/read.cgi/tech/1683154196/
2023/06/05(月) 14:47:01.66ID:DZ7CuRre
他言語との比較は隔離スレでお願いします
534デフォルトの名無しさん
垢版 |
2023/06/05(月) 15:11:38.38ID:vRd9123b
ID変えないやつはNGしやすくていいけど
複オジはID変えてしかも複数人のふりして
同じ内容の長文を繰り返し繰り返し書くから
めちゃくちゃウザい
2023/06/05(月) 15:34:05.37ID:AvaxKdII
>>492
具体的にRust以外のどの言語?
2023/06/05(月) 16:59:55.04ID:4ssR4odd
単発NGを推奨する
2023/06/05(月) 17:04:06.04ID:GjYw3Sbx
Webって何に対しても上限決まってないから動的確保が基本でヒープに確保しまくるだろ
Rustですらヒープ使うしかないのに何いってんだこいつ
2023/06/05(月) 17:19:13.55ID:4NoCfZlh
どういう書き込みに対するレスかわからないが
一般的にはヒープの使用をゼロというより最小限にすることが可能な言語かどうか
バックエンドをマイクロサービス化した場合は想定外のリクエストは来ないので更に最小化できる
いずれにせよGCのある言語は論外
2023/06/05(月) 17:34:34.25ID:DZ7CuRre
>>538
他言語との比較は禁止
隔離スレに移動せよ
2023/06/05(月) 18:09:21.14ID:dww0BWyZ
論外坊を相手にしてはいけない、メモリ確保と解放を繰り返す原始的なダサい構造より搭載メモリに応じてアリーナ管理するほうが理にかなってる。Rustを使ってるのにアロケーターの自作や変更を考えたことのない子は最小の意味が分かっていない
2023/06/05(月) 18:15:03.73ID:8ZF5QBOp
ガベージコレクションのある言語はそれができず非効率だもんな
542デフォルトの名無しさん
垢版 |
2023/06/05(月) 18:29:07.02ID:tOuh49Mt
書き心地のよさや近代的なエコシステムが好きで使ってる
チームで使うと品質を安定させやすい
実行時もリソースも安定させやすい
パフォーマンス面ではどちらかとコストの低い方を選択するよう努力するするが、そこまで突き詰めて考えないよ
2023/06/05(月) 18:33:55.89ID:/S79/CE3
Rustの良い面が多面的であり
どの面を重視するかは人によって様々だが
Rustに行き着く点では同じだ
544デフォルトの名無しさん
垢版 |
2023/06/05(月) 18:54:42.77ID:M00yb3VA
まーたクソみたいな複オジ節が連投されてんなw
545デフォルトの名無しさん
垢版 |
2023/06/05(月) 20:04:46.68ID:5pPw8Ntr
>>497
>>527
他の言語の標準ライブラリでも戻り型をOptionとResultにしてほしい
2023/06/05(月) 20:12:05.32ID:sHX0h5A1
ML系言語やればいいよ思うよ
2023/06/05(月) 20:50:22.82ID:UzHiRmXo
先日のStableのリリースでやっとOnceCellが安定化されたんですね。
Lazyはまだっぽいけど嬉しい。
548デフォルトの名無しさん
垢版 |
2023/06/06(火) 02:17:44.23ID:puQ29V2U
去年から始めたけど、ここ2~3年で標準化された機能が必須に感じるので、最適なタイミングで始められたなと思う
2023/06/06(火) 07:22:24.29ID:o6YEf8qO
>>542
>書き心地のよさ
www
550デフォルトの名無しさん
垢版 |
2023/06/06(火) 07:54:49.95ID:8OPdxEUp
書き心地も良いが開発効率の高さだな
スクリプトで済むのはスクリプト言語を使うとして
プログラミングするならRust一択となった
2023/06/06(火) 10:54:53.70ID:6c57W+Lm
何の数字を比べて 開発効率が上がったと言ってるんだ?
2023/06/06(火) 11:12:32.78ID:o1s33Rlj
ありがとうRustAnalyzer
2023/06/06(火) 19:31:13.22ID:mkQOe4X2
>>545
それは反対だ。副作用がない関数コールでOptionやResultはオーバースペックで邪魔でしかない、Rustだって-> i32とか出来るのは理由があるからで意味のないResultラッピングしてしまうのは邪悪でしかない。
2023/06/06(火) 19:35:17.52ID:5BE6aCuJ
>>553
多言語で単に言語仕様の限界から来る異常を示すのに
nullとか-1とか例外とかなんとかならんかねえという
話では
2023/06/06(火) 21:19:28.43ID:n1ZdC4n5
>>553
「他の言語の標準ライブラリでも」とあるから「(Rustと同じように)」の意味だろうね
Rustで書くと戻り型がOptionやResultとなるような関数のみが対象でしょう
具体的には>>554やerrnoなど
556デフォルトの名無しさん
垢版 |
2023/06/06(火) 22:39:17.85ID:lWt7Neg4
>>553
絶対にエラーが起きない場合も含めてインターフェースの戻り型を統一しなきゃいけない時に、
Resultで統一することで非効率になるのを恐れているのだと思うけど、
エラーが起きない場合の実装のみエラー型をstd::convert::Infallibleつまり戻り型をResult<Xxx, Infallible>とすれば、
最適化されるため気にせずResultラッピングのコードを書いても大丈夫だよ
2023/06/07(水) 02:16:00.81ID:pdPmNlas
Rustは文字列やネット系のライブラリが充実しているため、書き易いと
感じるのかもしれないが、言語自体の書き心地は悪い。
2023/06/07(水) 02:25:13.42ID:VU6rdBvm
>>557
スクリプト以外でRustより書き易い言語ある?
2023/06/07(水) 02:41:53.93ID:pdPmNlas
>>558
色々有るな。例えばJavaやC#とか。
2023/06/07(水) 02:52:36.10ID:bLVp0x6K
Javaは言語が古すぎ
機能不足で書くのが苦痛
今どきの言語を知っていてJavaを書きやすいと言う人はいない
2023/06/07(水) 03:13:16.86ID:PASEDR7I
お前ら本当にシステム屋か?

“描きやすい”ってのは人それぞれで定義が曖昧やん
なぜその定義や認識の統一をせずに議論始めるん?
2023/06/07(水) 03:15:24.35ID:PASEDR7I
例えばだけどJavaは古くてというが昔からJavaやってるやつは慣れから書きやすいと感じる

Java歴15年
Rust歴1年

とかで比べたらどっちに軍配上がるか分かるやん
2023/06/07(水) 03:23:10.65ID:2dySsIAz
議論を成立させるのが無理なの分かってるから隔離スレでやれっつってるんですよ
2023/06/07(水) 03:35:20.85ID:PASEDR7I
まあ言語スレで具体的なコードも出さずに議論しちゃう馬鹿ばかりだしな

せめて○○言語じゃこう書くけどRustではこう書ける
だから書きやすいってぐらいはして欲しいもんだ
2023/06/07(水) 03:35:24.21ID:mYje0a9y
>>562
それは言語の書きやすさではなく
その個人が慣れか不慣れかだろ

言語の書きやすさはその言語に十分慣れた上で
言語の機能が不足していて書きにくい点がないかどうかなどで決まる
その比較例だとJavaとRust両方に慣れた人たちにとって全員がJavaに❌をつける
2023/06/07(水) 04:14:00.36ID:PASEDR7I
別の言語を長くやってても面倒臭いなって思う点は出てくるじゃん
例えばJavaやってるとC#のあの機能欲しい
なんでJavaには追加されないんだろとかさ
2023/06/07(水) 04:15:46.17ID:mYje0a9y
だから全員がJavaに✕をつける
568デフォルトの名無しさん
垢版 |
2023/06/07(水) 10:36:40.93ID:o7otWeXk
>>562
わかるやん、てあなたが勝手に言ってるだけですやんw
2023/06/07(水) 15:06:17.70ID:3M1fBRd0
でも、多数決では、Rustが最下位なんだよな。
2023/06/07(水) 15:44:42.75ID:3M1fBRd0
Rustの問題点を指摘すると、「それはあなたが ・・・」
「馬鹿だから」「老害だから」「じじいだから」「化石みたいな人だから」
みたいな事言って人いるけど、それは
「若くて頭のいい人々が使うんだから、老害/馬鹿は黙っとけって」ことになるが、
それでは一般人に普及する言語には成れないであろう。
そもそも、高級言語の目的とは、簡単に安全にやりたいことが出来ると言う
ことであり、しかも、一部の人を除いては簡単にも思えないようなものであっては
普及は遠い。
2023/06/07(水) 15:54:04.41ID:3M1fBRd0
>>564
あなたは、そうやって、ここで、市場調査をして、次なる改良言語のネタに
したいということですね。
帰れ。
2023/06/07(水) 16:20:31.76ID:QsxM8200
書きやすいか否かという話より、rustは意外にタイピング量は多い思想は考え直してほしい。
std::fmtなどの「::」だとか引数名・変数の後の型の「:」だとか、むろんmutも、戻り値の「->」もなぜ引数の「:」と戻り値の「->」を同じにしなかったのか?思想面が分かる人に教えてほしい。
ほかにもなぜマクロ呼び出しに「!」をいちいち付けるのかとか、関数はfnやpubで省略しているのに?アトリビュートも#[xxx]と異様に見える。なぜ@xxxでは駄目だったのか?
まあセミコロンはC/C++からの移行を重視したのだろうけど。言語をディスってる訳じゃなく完全論破されることを願う
2023/06/07(水) 16:59:17.90ID:MyTs/b4R
細かい構文は互換性やらが重視されて一定の思想が徹底してないことも多いでしょうよ
暇ならissue掘り返してみればいい

とりあえず::はC++由来でattributeはC#由来
574デフォルトの名無しさん
垢版 |
2023/06/07(水) 18:36:58.20ID:Rjy197CJ
Rustが難しいと感じるのは経験不足だと思うわ
困難に立ち向かった経験が少ない
2023/06/07(水) 18:50:18.58ID:JMx9Ekkp
>>572
マクロ呼び出しに「!」を付けるのはコンパイラと人間の両方がマクロ呼び出しをすぐに識別できるようにするため
コンパイラの実装方法によっては無くすことは不可能ではないだろうけど効率が悪くなるし実装も難しくなる

最初は俺も無いほうが良いと思ってたけど
「!」をつけないといけないから不必要にマクロを作らなくて
結果的にメンテしやすいコードにつながってるので考え方変わった
2023/06/07(水) 19:54:20.54ID:6MUTDsao
>>572
タッチタイピングできない人?
もしくはVSCode使ってない人?
文字数なんて気にするやつ初めて見たぞ

::はC++由来
->はHaskell由来だよ
マクロの!や?はおそらくRuby由来だが別の意味で使ってる
#[]はわからん
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との曖昧性が生まれる状況があるのかなと思ったが、ちょっと具体例が思いつかないので違うかも
2023/06/07(水) 21:01:38.64ID:MyTs/b4R
というかRustは元々めっちゃタイプ数気にする系言語だったんだよねむしろ
1.0以前にはreturnがretだった頃もあった
今日まで残るfnとかimplとか、比較的新しいdynもそうだが
実際かなり略したがりな言語ではあると思うよ
2023/06/07(水) 22:03:46.79ID:juXVB+W2
>>572
あらゆる言語で同じことが言えるが
基本的な文法記述方法を考え直してほしいと要求しても
今から変わるわけがないし変わったら利用者が困る
無意味な破壊的な要求をしていることになる

タイピング量が多いといってもわずかな誤差であり
ほとんどの記述方法は既存のメジャーな言語で実績があるものと同じ
現在のメモリCPU開発環境からも余裕で許容される範囲でもある
個人的に気に入らないと主張しているのと変わらない
2023/06/07(水) 22:23:55.97ID:gvoW4qh7
記述方法が気に入らないのであれば
自分で変換器を作ればいいだけなのでは?
2023/06/07(水) 22:42:25.08ID:JMx9Ekkp
>>577
>TypeScriptのごとくfn f(x: T): Uとかけないのは何故かということだろう
基本的には視認性の問題
TypeScriptも関数の型を明記するときはファットアローを使ってる
2023/06/07(水) 23:12:17.03ID:Y4/HSuwV
気に入らない部分くらいあってもいいだろうに過剰に攻撃的な人は落ち着いて欲しい
どんな人もある程度は興味があってきてるんだろうから建設的に話をしましょうよ
気に入らない部分も背景知ると納得できたりするしそういう情報知るの楽しいから書いてくれてる人はありがたい
2023/06/07(水) 23:20:10.61ID:C+WmTRhv
戻り値型指定の->には returns や maps to 的なニュアンスを感じられるから個人的には好き
2023/06/07(水) 23:44:37.64ID:ZHL7BfYm
->ってでも実際は不要でしょ?
無駄
2023/06/07(水) 23:52:00.89ID:PbTa+35j
>>572が、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
2023/06/08(木) 02:28:36.11ID:EE2g7bKF
Cと似ても似つかない。
2023/06/08(木) 02:35:35.53ID:EE2g7bKF
嘘つき大国アメリカには、良いソフトウェアは作れない。
独占によって維持するのみ。
2023/06/08(木) 02:36:59.06ID:EE2g7bKF
日本人を大量虐殺したことを反省せず、今度はウクライナとロシア人を
殺している。
そんな国に良いものは作りえない。ずるするのみ。
2023/06/08(木) 02:48:48.98ID:EE2g7bKF
平均寿命がアメリカは日本より5歳も低いことをみんな知らない。
そんな後進国を先進国扱いしている。
2023/06/08(木) 02:53:24.84ID:EE2g7bKF
特に、githubなんかは、わけの分からんソフトを作ってる人に別の左翼が
寄付する。左翼は相互扶助で虚構世界を作るのが好き。一般需要が全く無い
ソフトウェアに大金が寄付される。
このように、左翼は日本やアメリカにあってもお互いに虚構を流し合うことで
脳内で言論統制し合い虚構世界を生きている。
2023/06/08(木) 03:00:18.36ID:EE2g7bKF
アメリカのやり口:
・需要が無いのに無理やり使わせる。
・不便なのに無料化することで構造上それしか存在しない状態になっている。
・無料化することでどんなに粗悪品でも対抗製品が現れ得ないからである。
・からくりは、検索エンジンの広告料で大金を永遠と稼ぐことで、ソフトを
 無料化し、検索エンジンを持たない通常企業の参入を永久阻止しているのである。
2023/06/08(木) 03:40:00.34ID:aft4Kt1Y
うーん
やはりワッチョイなしスレは放棄する他ないか
2023/06/08(木) 03:57:30.29ID:VBjeYwpm
>>592
各プログラミング言語の本スレを無関係な話で荒らすのはマナー違反なので止めなさい
この一線だけは守りなさい
2023/06/08(木) 04:06:08.75ID:EE2g7bKF
>>594
アメリカは、基本ルールを守ってないので個別製品の話にまで進まない。
中国の知的財産権違反や著作権違反、不正コピーを言う前に、アメリカこそ、
まずは、基本ルールを守らないと。
2023/06/08(木) 04:07:01.06ID:EE2g7bKF
アメリカは基本ルールが守れて無いのに、Rustの仕様なんて語る権利が無い。
2023/06/08(木) 04:10:05.28ID:EE2g7bKF
要は、アメリカは人殺しが刑務所で書いた本が売れて億万長者になっているようなものだ。
2023/06/08(木) 07:29:01.96ID:ABj73STK
C言語の戻り型の前置記述だとC++で色々と不便なことがわかり
C++11では戻り型を"->"により後置できるようになった
ラムダ式でも戻り型を指定する時に同じく"->"で後置する
つまりC++11の時点で"->"による戻り型の後置記法が導入されている
そして>>586のようにRustとCarbonもC++11の"->"を踏襲している
2023/06/08(木) 08:51:14.64ID:9HUG8roo
他言語とか視認性置いておいても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使い始めたわ
ペチパーには辛い世界になっていくだろうな
2023/06/08(木) 09:22:42.20ID:c1TL2iD8
>>572
お爺ちゃん🥺
2023/06/08(木) 13:15:19.62ID:5t64h36a
>>599
左辺が式だと思えば筋は通るやん?
2023/06/08(木) 14:14:27.48ID:Iro3x2NJ
>>572
関数を評価した結果の型と関数の型は違うものだから表現も異なる。
同じであると誤解するような説明がどこかにあるのならそれを指摘してほしい。
2023/06/08(木) 14:32:27.10ID:5t64h36a
隔離スレにコピペしたからあとはあっちで頼むわ
2023/06/08(木) 15:00:38.73ID:ybwEaSV3
>>602
どう見ても式ではないが
仮に式っぽい何かだとしても関数宣言にだけ特別に書けるならやっぱり一貫性はないってことになるし
2023/06/08(木) 20:13:04.97ID:rV/cB3of
関数型言語から拾っただけで深い考えはないだろ
関数型言語は 引数 -> 戻り値 とか 引数 -> 引数 -> 戻り値でカリー化したら引数の数が減ったりするので意味は通じるけど…
607デフォルトの名無しさん
垢版 |
2023/06/08(木) 20:15:30.41ID:4tjPz2+B
オレオレ一貫性w
全然一貫してない
2023/06/08(木) 20:45:27.43ID:ABj73STK
「-> 戻り型」を批判してる人は先に採用したC++に対しても批判しているの?
ML系で何十年も使われて来た実績と視認性の良さからベストな記法
2023/06/08(木) 21:09:50.06ID:6OsjtmDb
ML系は関数呼び出しにかっこを使わないし
関数定義と型注釈を分けて書くし
Cスタイルとはだいぶ違う文法体系だよね
同じ記号を使っているという以外に共通点はないと思うよ

そしてx: TはPascalスタイルの型の付け方なんですね
TypeScriptの他にもScala、Kotlin、HaxeなどがPascalに従って(x: T): Uのように戻り値型注釈をつけます
参考までに
2023/06/09(金) 02:12:57.64ID:vRGkF7ww
sigplan noticeではindentationとlexical syntaxの話は禁止だったw
2023/06/09(金) 17:20:52.23ID:3c0vm8Dw
syntaxで言うならライフタイムのsyntaxは今でも違和感あるわ。
具体的に使うわけでもない変数を定義するようなのはどうにかならんかったのか。
2023/06/09(金) 18:41:37.13ID:2zdGi9Wu
>>611
型変数と同じじゃない?
あれも変数として使ってるわけじゃなく、こことここの型は同じってことを示すだけの変数なわけで
2023/06/09(金) 18:57:57.14ID:2zdGi9Wu
変数として使ってないわけじゃないな
具体的なインスタンスが生成されるときに具体的なライフタイムが代入されると思うべきか
614デフォルトの名無しさん
垢版 |
2023/06/09(金) 18:59:26.79ID:FpUIfFmd
型パラメータは変数じゃありません
2023/06/09(金) 19:10:21.66ID:9O24uU1k
違和感あるようにしてるんだぞ
Bad Partsはあえて汚くなるような構文を選んでる
2023/06/09(金) 19:42:24.19ID:9O24uU1k
>>609
Haxe草
君のバックボーンはなんとなくわかったよ
2023/06/09(金) 20:20:27.29ID:JRGzkE91
rustのstructってなんで中身をカンマで区切るんですか?
C/C++/C#/Swiftはセミコロンだし、影響受けたとされるhaskellの直積型はスペースですよね、デフォルトでメモリースペースが最小になるように再配置されるから?
でもそれだと配列のように直線的に配置されるように感じてしまう気がするのだが
2023/06/09(金) 20:32:17.49ID:j7wYaK9P
内容の列挙だからカンマの方が自然だと思うけどセミコロンが使われがちなのは
構文解析(エラー復帰)しやすいからなのかな

let Point { x; y; } = p;
だと気持ち悪いからパターンマッチと関係あるかもしれない
2023/06/09(金) 22:10:43.24ID:JRGzkE91
>>618
なるほど?構文解析が楽だからという理由はある程度は納得できるが、自然と感じる理由が個人的な嗜好で何となくなのかな?
ほかにカンマを使う場面は分割代入(destructuring)があるので、structを分解するときに対称性が良いからなのかと考えたり
2023/06/10(土) 08:59:06.95ID:gJM3u8Zc
cでエンディアン確認するとき

unsigned long x = 0x12345678;
for( int i = 0; i < sizeof(long); i++ ){
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ならどー書いたらええの>
2023/06/10(土) 09:44:12.87ID:NYFdP8Rk
それと同じこともできるけど、単にエンディアン知りたいだけならこんな感じで

if cfg!(target_endian = "big") {
// big endian
} else {
// little endian
}
2023/06/10(土) 09:56:44.54ID:gJM3u8Zc
>>622
エンディアンと書いたのは一例で
実際用意された型にバイトデータがどう格納されてるかを知りたい
ポインタキャストどー書くの?

forとかも変なことなってるけど
条件判断と goto ラベルさえあれば繰り返しは実行できるんだが,
rustにC/C++にあるgotoとかラベルってあるの?
2023/06/10(土) 10:05:08.69ID:NYFdP8Rk
>>623
その場合は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!();
2023/06/10(土) 10:13:46.29ID:udyVxmRJ
エンディアン君を、ウッカリ助平と命名したい....
2023/06/10(土) 10:25:42.92ID:gJM3u8Zc
>>624
>>625
2023/06/10(土) 10:26:30.43ID:gJM3u8Zc
>>624
>>625
わざわざありがと
勉強になります

>>626
何ソレ?
629デフォルトの名無しさん
垢版 |
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]));
2023/06/10(土) 15:12:50.25ID:PsHn2Fx3
テキストデータを画像にレンダリングして最終的に2値モノクロ画像を得たいんだけど
今だとどんなクレートを使うのがいいかな?
フォントレンダラはfont-rs・・・は放置されているしからfontdueとか?
2値化に影響するディザリングのオプションとかを指定できるとありがたい
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++よりも高速に動作するのでは?
2023/06/12(月) 13:04:11.65ID:RXOqFmSk
2023/06/12(月) 14:15:17.58ID:krlNNb+N
ちょっと何言ってるかわからない
2023/06/12(月) 16:35:03.90ID:snPhjFNJ
メモリセーフかどうかと
メモリを無駄使いしてるかどうかに直接の関係はない
2023/06/12(月) 16:47:01.05ID:/yLe7ykR
メモリ安全性とメモリの利用効率に関係はないが、
安全性のために導入したライフタイム管理が最適化に影響する部分がないとは言えない。
依存関係が明瞭だからエイリアス解析がしやすく、
結果的に効果的に最適化しやすい可能性は高い。

しかし実行時でないと安全なアクセスであるかどうか検出が不可能な場合もあるから
それも込みで考えると Rust のほうがやや不利であると言える要素もある。
全体的な性能は互角か Rust のほうがやや遅いくらいじゃないの。 知らんけど。

性能が互角くらいでより安全ならそのほうがいいじゃろ。
637デフォルトの名無しさん
垢版 |
2023/06/12(月) 18:28:52.16ID:EF0TFJgA
メモリ安全にするために過剰なコピーや長いライフタイムになる実装をしてしまうことがあり、それをコンパイラがガードしてあげるからルールに従って書いてねってのがRustの思想だと思う。
逆に適当に書いても安全にするし出来るだけメモリ効率も配慮するよってのが他のGC言語
2023/06/12(月) 18:44:13.30ID:A48fS+G5
そんな話一般論で語れる訳ないぞ
コードを出しな?
2023/06/12(月) 20:02:49.65ID:dpH2J6Rw
>>636
そんなことはなくRustも適切な方法を選べる
そのRustがやや不利でやや遅いと思っている具体的なケースのコードを出してごらん
2023/06/12(月) 21:33:36.66ID:/yLe7ykR
>>639
ここではメモリ安全性が実行効率に寄与するわけではないというのがトピックなので
安全性 (自動的な安全性の検証) を捨てることも出来るというのは話題の外。
641デフォルトの名無しさん
垢版 |
2023/06/12(月) 21:39:50.33ID:MIVgoZU9
意味のない議論がほんと好きだねー
2023/06/12(月) 21:44:05.58ID:G7kVZgOF
コードが一切出てこないのが本当不思議
2023/06/12(月) 21:45:00.87ID:dpH2J6Rw
>>640
Rustは実行効率を保ちながら安全性もある
Rustがやや不利でやや遅いと思い込んでいる具体的なケースのコードを出してごらん
2023/06/13(火) 11:32:39.43ID:dzy+ZzAL
>>639
>そのRustがやや不利でやや遅いと思っている具体的なケースのコードを出してごらん
ややどころか、大幅に遅くなるケースもあるぞ。
俺はこれ以上指摘しない。自分で分かるかどうかが技術力の試金石だ。
2023/06/13(火) 11:35:33.48ID:dzy+ZzAL
また、
 「Rustは、どんな場合でも、効率を下げずに少数の関数の中に unsafe 箇所を閉じ込められる」
というのも嘘。
2023/06/13(火) 11:43:16.69ID:+SMK6i6B
ならお前はこれ以上指摘すんなよ未来に渡って
647デフォルトの名無しさん
垢版 |
2023/06/13(火) 11:53:41.84ID:+a/cV++y
>>644
デタラメ屋さんまた来たのか
2023/06/13(火) 14:38:11.20ID:oknE//uE
>>647
俺は一般プログラマより生まれつきだいぶ頭がいいので、通常のプログラマには
分からないのかも知れない。
2023/06/13(火) 18:50:01.53ID:t3PG4UqW
>>648
ぷw
650デフォルトの名無しさん
垢版 |
2023/06/13(火) 23:11:29.90ID:/Z2+rRnG
>>648
だいぶ頭良いプログラマーはこんなとこ来ねーからw
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>の可変参照を渡す仕様
2023/06/14(水) 20:28:50.68ID:MiDa+oME
よくわからないんだけど
ライフタイムの例でよく出てくる関数の引数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の場合は逆になるので注意
2023/06/14(水) 23:20:37.20ID:yJueN6KQ
>>652
サンクス。やっぱvec<u8>が無難か
読みやすさだと構造体だけど要unsafeな上に
環境依存性も出ちゃうからな
657デフォルトの名無しさん
垢版 |
2023/06/14(水) 23:43:12.09ID:kb1QmHED
構造体とか要unsafeとか何をしたいのかわからないが
上限を決めてもよい用途ならば
ヒープを使わずともArrayVec<u8, CAPACITY>がスタック上のみで動く
2023/06/14(水) 23:49:13.19ID:yJueN6KQ
データの一部だけ可変長とかブロック構造の個数が
可変(ブロックの中身は固定)とかね
2023/06/14(水) 23:54:41.98ID:MiDa+oME
staticは消滅しないから実質参考にならんので無視して短い方をaとする
これは対象が2つだからであって
static 1
その他 2
ならその他2の長い方になると言う考えでいいのかな?
660デフォルトの名無しさん
垢版 |
2023/06/14(水) 23:58:17.85ID:CT9YbjmP
もう何言ってんだよ
2023/06/14(水) 23:59:42.49ID:hllwji0O
>>655
ライフタイムに関しては&も&mutもcovariantなので違いはありません
2023/06/15(木) 00:08:38.46ID:wST3qwRf
Tに対して&Tはcovariant
Tに対して&mut Tはinvariant
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>
2023/06/15(木) 11:48:36.10ID:7LFutjAG
トヨタの車載OSってRUSTなんだ
2023/06/15(木) 18:17:26.02ID:wrhp+okP
ライフタイムもtraitも難しすぎてマジでわからん
2023/06/15(木) 18:21:52.25ID:WlvOik+R
ライフタイムの質問してたものだけど
コードを書いてて完全に誤解していたことに気が付いた
コンパイル時に範囲をチェックするために引数のライフタイムを最小限に揃える仕組みなんだな
多分一般向けには流行らないわな
2023/06/15(木) 18:38:09.80ID:Ah9v0OFJ
ライフタイムって該当のメモリがいつまで確保されているかって話であって難しいところはなくね?
所望のタイミングまで開放してほしくないがどのようにするのが望ましいか?って話ならまだわかるが
2023/06/15(木) 18:40:44.72ID:QZKQzk+I
自明なときに省略できるせいで理解しづらくなってる気はする
2023/06/15(木) 18:44:18.80ID:WlvOik+R
日本語がおかしかった
関数では引数に依存する戻り値の寿命がわからない
それで基本的に指定した複数の引数のライフタイムの一番短い奴に合わせて解釈する
そのライフタイムを元にコンパイル時にチェックしてダングリングを防いでる

一番寿命が短い奴に合わせてチェックしたら他はそれより長いのでダングリングが起こらないだろうと
こういうふうに言う人間があまりいないのが現状
2023/06/15(木) 18:47:34.83ID:WlvOik+R
普通にコードを書いた時点でスコープや借用の関係で寿命は決まってる
それが範囲外になるかどうかボローチェックしてるんだけどそいつのためにライフタイムを明示してる

ライフタイムを明示してもコード上の寿命は伸び縮みしないけどエラーを見てコードを書いた人は修正ができる
2023/06/15(木) 18:52:46.39ID:WlvOik+R
と言う解釈なんだけど今のところ
普通に違ってるかもしれない
2023/06/15(木) 18:57:24.57ID:uU1WiW+l
OnceCellってようやく俺たちの欲しいものが来てくれたか
RefCellもCellも複雑なデータ構造作ると面倒だったからな
2023/06/15(木) 20:40:26.65ID:bvsZhoj8
Cellの 種類が増えるってのは悪い兆候だね
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のものを持つ
このように様々なケースがある
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 となった
2023/06/15(木) 22:08:16.03ID:yL2pOlPY
>>669
データフロー解析を知らないのだろうか?
2023/06/15(木) 22:11:21.57ID:R+Rv2ggs
>>666
>コンパイル時に範囲をチェックするために引数のライフタイムを最小限に揃える仕組みなんだな
この”揃える”っていう感覚になる理由がこんがらがってる原因と見た
680デフォルトの名無しさん
垢版 |
2023/06/15(木) 22:12:42.39ID:o+xWcDso
>>674
負けではない
むしろCell類は内部可変性を与えてくれる便利で良いもの

>>673
性質の異なるものを使い分けられるから良いこと
コードの自由度や可読性も上がる
681デフォルトの名無しさん
垢版 |
2023/06/15(木) 22:15:38.46ID:EOr7Ahlr
>>676
上位下位にサブタイプにsubて嫌がらせか!
2023/06/15(木) 22:39:43.11ID:WlvOik+R
>>675
まずこれは間違いだよね?
ライフタイムを省力すると全部別扱い

>>679
こんがらがってはいない
違うなら違う個所を訂正したらいいけど君には出来ないとみた

引数側のライフタイムは戻り値のライフタイムの検証のためのヒント
683デフォルトの名無しさん
垢版 |
2023/06/15(木) 23:12:41.78ID:ZgEGySwy
>>682
こんがらがってないならまずは他人に理解できる日本語とコード例を書いてくれよ
間違いを指摘するとか以前に何を言いたいのかわからないんだって
俺だけじゃなくて何人も君が何を言いたいのか分からないって書いてるでしょ?
684デフォルトの名無しさん
垢版 |
2023/06/15(木) 23:29:09.39ID:iPvlEIxp
>>682
>まずこれは間違いだよね?
>ライフタイムを省力すると全部別扱い
コンパイルエラーになるケースを含めて言えば「省略したら」全部別扱いは正しい
コンパイルエラーにならずに「省略できるのは」基本的に入出力で同じライフタイム扱いになる場合だから>>675の感覚もよくわかる
&と&mut違いで推論できる場合だけ例外
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
2023/06/16(金) 00:20:26.24ID:Ej8ifuNd
Rustのコードが'まみれになるのはそういう理由だよね
2023/06/16(金) 00:24:30.59ID:0npxuivH
>>685
> パラメーター内の省略された各ライフタイムは、別個のライフタイム パラメーターになります。
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 {
全部同じ扱いと思い込んでいる人はこの提案をコンパイラが解釈したと逆に思ってしまったのではないか
689685
垢版 |
2023/06/16(金) 01:37:43.97ID:0a1PgEj3
ほんまや申し訳ねえ
>>685はelisionのくだりは無視して明示した場合の話のつもりで読んでくだせえ
2023/06/16(金) 05:23:01.54ID:VMczRTMU
厳格な言語て嫌いでな
Verilogはなんの問題もなかったのに
VHDLはとうとう挫折した
てか予約後長いし,マクロがないのが許せなかったんだが
その意味でJavaも結局書く気にもならなんだわ
691デフォルトの名無しさん
垢版 |
2023/06/16(金) 14:09:49.37ID:J436PiNE
>>675
だけど思い込みを書いてしまってごめん
勉強になりました
2023/06/16(金) 14:58:22.19ID:KrMgX33B
水ノ都さんこんにちは
2023/06/16(金) 17:51:24.52ID:fkGXFirN
組み込み向けの解説記事でよさそうなのってない?
The Embedded Rust Bookは有名だけどSTM32ありきで書かれているしリンカとか肝心な部分の説明もないように見える
日本の人が書いているっぽいEmbedded Rust Techniquesの方がマシだがこれでも最低限か・・・
2023/06/16(金) 18:25:34.38ID:b/MZViq+
>>693
The Book以外のドキュメントなら https://docs.rust-embedded.org/ からいろいろ探せるよ
あるいはEmbedded Rust Techniquesの人が書いてる「基礎から学ぶ組み込みRust」って本とか
2023/06/16(金) 18:39:22.38ID:dwgGWWV8
Rust好きがまあまあ見てそうなこのスレでもこのレベルなんだから一般に広まるのは無理ゲーだと思うわ
2023/06/16(金) 19:23:08.87ID:PpmLuWiO
問題点を具体的に言えずに曖昧に批判してるつもりの人がいるね
2023/06/16(金) 19:40:36.76ID:dwgGWWV8
自分でスレを読めばいい

お前の足りない脳を誰かがフォローしてボローチェックまでしてくれるなんて思うなよ
2023/06/16(金) 19:42:26.19ID:QEmhRLek
言語の良し悪し以上にライブラリの分量が効いてくるんだわ。
そんでその大量にあるライブラリが利用しやすければなお良い。

やりたいことにマッチするライブラリがあるなら
自分で書かなくてよい部分が多くなるわけだし、
書く部分が少なければ少々の面倒くささなんてどうでもよくなる。

C や C++ の歴史の長さ故の物量に対抗するのは難しいけど
Rust は利用しやすさではかなり上回ってると思うので時間の問題だろ。
2023/06/16(金) 23:38:46.36ID:KXgq6I38
>>695
単に5chがオワコンなだけだぞ
2023/06/17(土) 20:33:46.40ID:pjy0GOzk
>>683
ときにアセンブラで書必要に迫られる組込でRustあ日の目をみることなんてない
2023/06/17(土) 21:26:17.31ID:iUJ74AnJ
>>694
その人は本を出していたのか。今度都内へ行ったときに見てみるか
2023/06/17(土) 23:07:17.38ID:H9lc23A5
今日たまたま本屋で見かけた
売れるんかこれと思ったけど買う人がいる
703デフォルトの名無しさん
垢版 |
2023/06/18(日) 01:17:21.64ID:PsNivFBp
Rustでlinuxに機能を追加するならどんな機能が欲しい?みんな自由に言ってみて。
2023/06/18(日) 09:07:15.46ID:JHhjqwBk
>>695
ほんそれ
2023/06/18(日) 09:08:49.10ID:JHhjqwBk
>>698
crates.io はゴミだらけのイメージ(もちろんゴミじゃないのもあるがSN比が絶望的に悪い)
2023/06/18(日) 09:13:33.05ID:JHhjqwBk
>>703
これと言って無いし今のlinuxで満足(不満もあるけどそれがRustで解決するとも思わない)
カーネルもシェルもAPIもRust化しないと意味無くね?
どうせ unsafe! unsafe!! unsafe!!!
2023/06/18(日) 09:15:13.52ID:QTU736PH
>>705
まぁそれは何を比較するかじゃない?
ディストリビューション配布のCライブラリだと厳選されてるから当然クォリティ高いけど
GitHub上から探すとC系の方がS/N悪い(そもそもビルドできないとか)と感じるし
2023/06/18(日) 10:10:46.67ID:dnSpWVpE
rustは他の言語からの移植性が著しく悪い
移植と言うより最初から作ってるのと変わらない
2023/06/18(日) 10:29:41.24ID:dnSpWVpE
c → rustの移植が楽ならほおっておいても全部rustになる
その視点が欠けてる

ライナスがLinuxやGit作ったときのようにその他の勢力がおバカさんで実質アシストしてる時と同じような状況
Cust作るためのおぜん立てをしてるようにも見える
2023/06/18(日) 10:37:34.85ID:dnSpWVpE
後世から見たらライナスはlinuxとgitとcustを作った偉人ですと言うことになるんだろう
2023/06/18(日) 12:12:13.93ID:kd/h5bzN
仮にkernelや主要コマンドが全部rustに移植されたらその部分は安全にはなるわな
しかし現状そこまで行くかはわからん
なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
つまり主要なlibも全部rustで書き変えないとunsafeからは逃れられないけどものすごい作業量になりそう
いけるのかな?
2023/06/18(日) 13:00:20.06ID:TBj+uqoQ
>>698
>Rust は利用しやすさではかなり上回ってると思うので
一部の需要に対してのみは、そういう傾向があるかもしれないとは思うが、
全般に対しては違う。
713デフォルトの名無しさん
垢版 |
2023/06/18(日) 13:12:59.30ID:aPOK9VRV
>>700
Rustはインラインアセンブリが書けてRustの変数と連動できるため困ることはない
叩く前に勉強しよう
714デフォルトの名無しさん
垢版 |
2023/06/18(日) 13:26:34.81ID:PsNivFBp
>>712
個人的にRustはあれだけの実行速度、安全性の割にはかなり文法がシンプルで好きだけどね。
2023/06/18(日) 14:02:54.81ID:TBj+uqoQ
>>714
蓼食う虫も好き好きだね。
2023/06/18(日) 16:08:38.91ID:aKqZwOD/
>>705
それ他の言語も同じだ
そういう宿命

>>708
だから安全なんだよ
2023/06/18(日) 23:54:05.72ID:V79KPNHt
>>703
その発想からしてRustのパラダイムから逸脱しており反Rust
2023/06/20(火) 17:00:50.46ID:Dvlv0UV+
>711
>なんせffiで別言語で書かれたライブラリ呼び出す時は全部unsafeやからな
これ知るとRust安全神話なんて嘘八百八町なんよね
金儲けのために保守気取ってましたーに通じる
2023/06/20(火) 19:31:43.67ID:WU95hkUv
>>718
こういう言説聞くと甘えにもほどがあるって思うけど、
そういう不満から Pure Java みたいに Pure Rust なライブラリが発展していけばいいね。
2023/06/20(火) 19:54:19.85ID:kXFGlrCh
unsafe=危険=意味なしみたいな人はRustを使うことが目的だと思っているんだろうね
安全なソフトウェアやシステムを開発することが目的ならそういう発想にはならないはずだ
721デフォルトの名無しさん
垢版 |
2023/06/20(火) 20:03:45.82ID:2T4Y6uqL
純粋なRustのライブラリはまだ完成度が微妙なんだよな。PythonとかC,C++と比べると。勿論、他言語のバインディングのライブラリは結構豊富なんだけど、それだとRustを使う意義がないからな。
2023/06/20(火) 20:20:14.97ID:IIzrqfbq
>>718
部分的にでもマシになるなら意味あるやん。
論理的な破綻がないように定理証明器をベースにした言語とかもあるけど、
そのために既存のライブラリが使えないようだとそれこそ使い物にならんだろ。

結局はバランスおじさん「結局はバランス」
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
2023/06/20(火) 20:48:07.86ID:FDgZeyem
話の流れとは直接関係無いが、豆知識:
バグと言うものは、64BIT 整数を 32BIT 整数で受けたり、符号付きを符合なし
で受けたり(その逆でも)するだけでも起きるし、メモリ関連バグだけでは無い。
2023/06/20(火) 20:50:12.42ID:FDgZeyem
例えば、OSの一度に行なえるファイル読み書きが10MBに制限
されている場合に、それを知らずにバイト数に20MBを指定して
しまったら、バグとなる。
テストでは10MBを超えるファイルを扱っていなかったら気付かない。
2023/06/20(火) 21:06:06.55ID:wgbzrV/N
>>725
テスト仕様が10MB超えるファイルを扱うパターン記載されてないなら仕様じゃん

その場合 仕様ミスではあるがバグとは呼ばない
バグってのは仕様通りに動いてない事を指すんやで
2023/06/20(火) 21:17:59.27ID:7CvaHT3W
>>724
Rustは強い型安全性が保証されるためそれらのバグも起きない

>>725
それはプログラミング言語とは独立した無関係な話
制限があるのにエラーを返さないOSがあるならそれ自体の問題でありプログラミング言語は関係ない
エラーを返すならそのエラーの対処を正しくしていればバグは起きない
728デフォルトの名無しさん
垢版 |
2023/06/21(水) 20:47:56.17ID:DnSmyfOL
Rustで最初に出したバグはデッドロックだったな
コンパイルエラーにしてくれるもんだと油断していた
2023/06/21(水) 21:05:00.78ID:W7d/0xn7
静的解析でデッドロックを検出するのは不可能
もちろんRustでも無理
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元体の計算を行うための型を自作しそれの計算を二項演算子(+),(*)を用いた表記を可能にする方法とかありますか?
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
2023/06/26(月) 19:00:39.37ID:PhkZx7XR
>>731
ありがとうございます
やってみます
2023/07/04(火) 01:09:18.95ID:2CEMaM2m
神クラス的なArcMutexのstructをごっそり差し替えし始めたらrust analyzerが糞遅くなって書くのが辛い
コード戻したくなる
助けて
2023/07/08(土) 03:39:28.67ID:kPVzZee0
キーボードの何かのキーが入力されてるか調べるけど
何もない場合は止まらずにそのまま次の処理を続けるはどうすればいいの?
2023/07/08(土) 04:25:29.10ID:hz58RfSC
>>734
C言語の時と同じ
ノンブロッキング指定するだけでなく
cooked modeではなくraw modeをICANONに指定
これでバッファリングされることなくブロックされることなく読み出せる
libc叩かなくてもtermioなど好みのクレートを使う
2023/07/08(土) 07:46:14.85ID:kPVzZee0
なるほど
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
739デフォルトの名無しさん
垢版 |
2023/07/14(金) 11:16:58.08ID:tzjfWmow
値をコピーせずに参照を切り替えてFibonacci数列を計算したい

https://ideone.com/lnMyvH

はいけるんだけど

https://ideone.com/VerTGV



error[E0658]: destructuring assignments are unstable

と怒られます
どなたか対処法わかりますか?
2023/07/14(金) 11:27:16.72ID:Jafjy1es
>>739
これでどう?
https://doc.rust-lang.org/std/mem/fn.swap.html
741デフォルトの名無しさん
垢版 |
2023/07/14(金) 12:09:03.76ID:8J2hXx2d
>>740
おお、素晴らしい
あざっす
742デフォルトの名無しさん
垢版 |
2023/07/14(金) 12:17:12.18ID:8J2hXx2d
ちなみにコレxとyの参照してる値を保持してる内容を入れ替えてませんよね?
xとyの参照してるアドレスの入れ替えをしたいんですけど
それどうやって確かめたらいいんでしょう?
743デフォルトの名無しさん
垢版 |
2023/07/14(金) 12:25:35.09ID:8J2hXx2d
そもそもうまく行ってると思ってたほうもうまくいってなかったorz

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の内容に置き換えてしまってるみたいですけどコレ何故なんでしょう?
なんとかならないんですか?
745デフォルトの名無しさん
垢版 |
2023/07/14(金) 12:57:26.91ID:KGL+WmuV
自己レス

わかりました
こうですね

https://ideone.com/sl7Q9v

ここまではうまく行った
746デフォルトの名無しさん
垢版 |
2023/07/14(金) 13:20:43.04ID:bUq24laG
そして教えていただいたsys::mem::swapで確認
うまく行ってる感じです
素晴らしい
あざっす

https://ideone.com/1pWNZ7
2023/07/14(金) 13:21:19.50ID:i4/iEcAZ
そもそもE0658がideoneのrustcのバージョンが古すぎるせいだから>>1のPlayground使ってろ
2023/07/14(金) 19:05:41.95ID:qocfo89A
亀だが
>>694
>基礎から学ぶ組み込みRust
見てきた。あの内容じゃWebの記事読んでおけば十分な感じだった
肝心の低レイヤー(CPUやペリフェラルとのインターフェイス)の解説がペラい
特に現状ではメーカーのサポートが得られない以上HALやBSPに相当する部分を
自前で用意せざるを得ないケースは少なくないと思うけど
その辺が十分に解説されているようには見えなかった
2023/07/14(金) 21:27:06.52ID:+dZRH6iE
そりゃマイナーなチップのHALを自分で作るなんて
マニアックすぎる内容で商業出版は無理だろ
そこまでやるならもう既存の実装見に行ったほうが早いよ
2023/07/17(月) 14:57:59.69ID:ckC6D+AP
期待してたけどめちゃくちゃ頼りないスタイルガイドが出てきたな
「こういう場合はこうフォーマットしましょう」だけじゃなくもう少し踏み込んで欲しかった
https://doc.rust-lang.org/nightly/style-guide/statements.html
2023/07/17(月) 15:40:03.84ID:qDsaxMYb
スタイルガイドの目的はrustfmtの挙動を文書化して開発を進めやすくするってことだから
まさに「こういう場合はこうフォーマットしましょう」のための文書だよ
752デフォルトの名無しさん
垢版 |
2023/07/17(月) 17:17:17.76ID:WT/Een/k
もう少し踏み込んで欲しかった、と言ってる人にそれを言ってもどうもならないわな
別にスタイルガイドの定義の話あなたが勝手に始めただけですよね
論破ですよね
2023/07/17(月) 17:39:41.44ID:Lx49eL3d
なにいってだこいつ
2023/07/18(火) 03:22:09.12ID:wb1VWGHJ
>>744
ポインタとポインタのポインタの違いだな

>>746
そう
ポインタのポインタをswapに渡せばポインタが書き換わる
2023/07/18(火) 03:37:10.43ID:wb1VWGHJ
>>750
従来の言語のスタイルローカルルールの乱立やルール解釈の違いなどの反省から
Rustの標準ではrustfmtを使うことに尽きるわけだがそれ以上にどんな記述を求めているのだろうか
756デフォルトの名無しさん
垢版 |
2023/07/18(火) 09:14:53.67ID:nuoH1aU3
一般的なスタイルガイドを知ってる人と知らない人の違いだね
常識だと思ってた
757デフォルトの名無しさん
垢版 |
2023/07/18(火) 13:02:43.58ID:W9LkQalw
公式のスタイルガイドはrustfmtに実装するフォーマッティング以外はスコープ外
フォーマッティングガイドラインと改名したほうがいいわな
2023/07/19(水) 11:14:31.27ID:HXkvqxP4
関数呼び出しの質問です
私の認識では
「rustは関数呼び出しは基本call by valueで呼び出され、呼び出し時の“値”は基本コピーして渡される、ただしimmutatibleな呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
であってますか?
それでお聞きしたいのはrust compilerって呼び出した関数側が実際引数を変更するかしないか判定して“immutatibleな変数を変更しようとした、なめとんかボケ”って怒ってくることがあります
コレ逆に言えば例えプログラマが変更しない変数をmutableで呼び出しを指定してもcompilerはどうせ変更されないんだからコピーもしないでいいよねと気を利かせてコピーしないとかしてくれると考えて大丈夫ですか?、
2023/07/19(水) 11:21:25.92ID:yw4UHEnD
>>758
言ってることが意味不明なので回答できない。
何か根本的に勘違いしていると思う。
コードで説明してみて。
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って指定するだけではダメなんでしょうか?
どう書いたら通してもらえますか?
よろしくお願いします
2023/07/19(水) 11:47:10.22ID:x9es5cRL
unsafe { 引数のポインタ拾って描き替えたら }
呼び出し側も描き換わってたでござる
2023/07/19(水) 11:49:41.95ID:x9es5cRL
>>760
for i in 2..100000u64 {
2023/07/19(水) 11:51:21.32ID:x9es5cRL
>>762
あと mut i: u64 の i は for では使われてないし警告出てない?
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はダメなんでしょうか?
2023/07/19(水) 12:07:25.53ID:HXkvqxP4
ideoneでもダメです
https://ideone.com/FaBKXh
766デフォルトの名無しさん
垢版 |
2023/07/19(水) 12:11:42.11ID:a/a2TjKK
エラーメッセージから「ダメ」かどうかの1ビットしか読み取らない人にプログラミングは難しい。
2023/07/19(水) 12:12:42.07ID:HXkvqxP4
あ、そもそもコレダメですね
仮にu64受け付けてくれてもダメやん
powは自作します
しかしu64版のpowってないんでしょうか?
2023/07/19(水) 12:14:10.94ID:x9es5cRL
overflowは知らん自己責任でやれ
https://ideone.com/JR2FhX
2023/07/19(水) 12:17:18.80ID:x9es5cRL
>>767
https://crates.io/crates/rust-gmp
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な呼び出しでは関数側が値を変更しないのにコピーするのは無駄なのでコピーされない」
>であってますか?
もちろん間違ってます
771デフォルトの名無しさん
垢版 |
2023/07/19(水) 12:29:53.08ID:hsqLjzEB
余りをとっているから繰り返し自乗法を適当に実装すればオーバーフローは回避できる
2023/07/19(水) 12:30:35.45ID:HXkvqxP4
>>770
間違ってるんですか?
どこが違いますか?
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
2023/07/19(水) 15:49:39.29ID:HXkvqxP4
やはりダメです
型の指定の書き方がわかりません
次のコードです
https://ideone.com/QLw12c
有限体上のFourier変換を書きたいんですけどmutの書き方がらみで怒られます
どうすれば通せますか?
2023/07/19(水) 16:22:53.10ID:HXkvqxP4
とりあえずmutを全部につけまくったら通りました
https://ideone.com/EF9EEJ
776デフォルトの名無しさん
垢版 |
2023/07/19(水) 17:34:17.58ID:g8hXxOtp
>>774
>どうすれば通せますか?
The Bookを読んで基本を身につければ通せます。
https://doc.rust-lang.org/book/
まずはplygroundとエラーメッセージの読み方から学ぶことをお勧めいたします。
2023/07/19(水) 17:52:11.79ID:HXkvqxP4
ありがとうございます
コンパイルは無事通ったんですけどstack overflowで実行できませんでしたw
どうせならどでかいのでやってみようと欲張ったらダメでしたw
まぁ縮める分には見つけたpやzetaはそのまま使えるのでまた時間ある日に続きやります
やっぱり新しい言語挑戦するのは時間かかりますね
ついでにひとつお聞きしたいんですけど、今回は「Rustの売りのなるべくstuckでやる」でやってみたんですけど流石にこのサイズはstackにとれないようです
コレ同じ事ヒープでやってもRustコンパイラはフラグメンテーションが怒らないように良きにはからってくれますよね?
コードは>>775です、まだ作りかけですけど
Fourier変換でO(n log n)で掛け算するプログラムの実装の演習の自習中です
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のデータはスタック領域に入らないのでヒープ領域に開始時に確保すればよい
2023/07/20(木) 15:25:39.14ID:6BSTmMYa
>>778
>Rustは常にcall by valueでvalueをコピーする

何でもかんでも #[derive(Copy, Clone)] 描く習慣は良くないな
780デフォルトの名無しさん
垢版 |
2023/07/20(木) 16:14:28.16ID:zz9s86Uo
古典的なcall by valueの定義におけるコピーと
そのCopyとはまた違う話

ついでに言うとRustにおけるcall by valueの定義と
古典的call by valueの定義は違うので要注意
現代では古典的定義でcall by valueかどうかを考えるのはあまり意味がない
2023/07/20(木) 19:56:50.64ID:neDY19sM
>>779
そのコピーはビットコピーの話でCopy実装型の話とは別
Copy非実装型でもムーブするとビットコピーされる
そもそもCPUやメモリにムーブなんてものは存在しなくてMOV (MOVE)命令ですらビットコピーが行われる

ただしビットコピーは最適化で消えうる
例えば別の変数にムーブしても最適化でビットコピーは消えうる
サイズの大きな値を関数でムーブ返ししてもRTO (Return Value Optimization)により呼び出し元スタックフレームに直接生成できるならビットコピーは消えうる
サイズの小さい値を関数でムーブ返しするとレジスタ返しとなる等
782デフォルトの名無しさん
垢版 |
2023/07/20(木) 22:07:49.98ID:YJW86g9/
call by valueのコピーはビットコピーなんて定義はない
ビットコピーかどうかはimplementation detail
2023/07/20(木) 22:17:52.36ID:mzA35L2k
レジスタかメモリへのビットコピー以外に渡す手段はない
現行のコンピューターでは
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のあった場所も“欠番扱い”になるんでしょうか?
2023/07/22(土) 02:40:42.91ID:htX2UcZa
>>784
アロケーションやフラグメンテーションはRustの言語システムの範囲外
例えばOSがない環境も含めてアロケータを自作もできるようになっている
普通にOSなどある環境を使うとRustはそこでの標準のアロケータをそのままグローバルアロケータとして用いる
つまり環境毎に異なるものが使われていてRustとは全く関係がない問題であることがわかる

もちろんRustでは自分でアロケータを変えることもできる
グローバルアロケータを丸ごと変える方法とBoxやVecなどで個別にアロケータを指定する方法がある
使用環境の標準のアロケータで何か問題が起きていると感じたらその例のように別のものと交換して比較してベストなアロケータを選べばよい

もう一つ全く別のアプローチとしてそれらアロケータに頼るのではなくプログラムのレベルでまとまったメモリの割り当て管理する方法もある
この方法は全て自分の制御下におけるため様々な特性のあるクレートがありもちろん自作もできる
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])
}
2023/07/22(土) 08:56:00.85ID:40PxJ+ku
やはりそうですね
Rustはヒープエリアのメモリ管理は言語システムでは提供しない、その性能については規定しない立場なんですね
なので先の質問のような場合「Rustでは必ずうまいことやってくれる」とは言えず「コンパイラ××、実行環境××で実測したらうまく行った」程度しか言えず、同じソースを別の環境に持ってやったらダメだったもありうるんですね
結局ヒープを使わざるを得ない場合には「自分でメモリ割り当てをうまいことやる」しかないんですね
今やってる例だとスタックには入らないって怒られるし、ヒープ使うなら、うまくいくかはやってみるまでわからないというのはちょっと面白くないなぁ
2023/07/22(土) 09:24:29.44ID:htX2UcZa
>>787
OS環境などが提供するアロケータ(=Rustのデフォルトのアロケータ)をそのまま使う時だけ環境依存になる
これはRustに限らずそれをそのまま使う全てのプログラミング言語で起こるためRustの問題ではない
しかもRustは次のように解決策がある言語だ

アロケータ含めて同じソースを持っていってそれを使うならば動作も同じになるので大丈夫
例えば先ほどのケースのようにjemallocをアロケータとして指定して使えば環境依存ではなくなる
よほど特殊なケースでの特殊な効率化を目指さない限り自分でアロケータを書く必要はない
2023/07/22(土) 09:54:09.20ID:JFG0S3Tm
まぁそうですね
Rustにしたら今までのプログラミング言語で常に問題視されてたアロケーション問題が魔法のように解決するなどという事があるはずはないですね
2023/07/22(土) 09:59:59.87ID:htX2UcZa
何を問題にしているのか明確にせよ
Rustはアロケータすら自由に入れ替えられる
つまり理論上可能なことはRustならば解決できる
791デフォルトの名無しさん
垢版 |
2023/07/22(土) 10:40:08.11ID:S6pKsqQS
複オジーww
2023/07/22(土) 10:45:39.31ID:xU//sEEH
問題は普通のプログラミング言語の“メモリ割り当て問題”です
別にRust特有の問題ではなく、どんなプログラミング言語でも発生する問題ですよ
Rustではどういう戦略で当たってるのかなと
もちろんこの戦略に関して“どんな場合でもうまくいくまほうのような解決策”などありません、そして多くの場合この処理は大変重たい処理でとても重大な問題を引き起こします
画像処理、動画処理、AIの機械学習の処理などで大きなデータの割り当て、更新、消去は処理中かなり頻繁に起こり、データサイズによってはフラグメンテーションが大きな問題になる事などしょっちゅうです
結局プログラマはほとんどの場合自前でアロケーション問題を解決させられるわけでそこにもはや“言語のデフォルトに任せておけばいける”幻想は抱いてません
しかしRustはどうしてるんだろうと、もしRustでやれといわれた場合があったと妄想して自分にそれができるようにしときたいなと思って自習中なんです、まぁ絶対なさそうですが
今まで色々資料読んだ範囲内だと感覚的には「Rustはメモリ管理に関しては言語内部的には頑張らない、外部環境で処理するか、可読性を犠牲にガチャガチャしろ」というスタンスで提供されてる感じはしてます
2023/07/22(土) 11:31:54.16ID:l0FUWY0y
>>792
Rustは可読性を一切犠牲にすることなく、ソースコードそのままで、グローバルアロケータ指定だけを追加すればアロケータを変更できる
この件に関してRustは最も融通が効く優れた言語の一つ
2023/07/22(土) 11:35:08.26ID:nQhdUCcc
この人はそういう人なので適当に切り上げることをおすすめします
2023/07/22(土) 11:38:03.03ID:xU//sEEH
まぁ無理です
できないことをできると言い張るのはもはや学問ではなく信仰です
2023/07/22(土) 11:49:43.86ID:YLqzZrt5
A造る
B造る
A消す
C造る
AのサイズよりCのサイズが小さいとき
A-Cのサイズ分のフラグメントが発生
2023/07/22(土) 12:06:07.26ID:24bvSiNd
>>792
>> 今まで色々資料読んだ範囲内だと感覚的には「Rustはメモリ管理に関しては言語内部的には頑張らない、外部環境で処理するか、可読性を犠牲にガチャガチャしろ」というスタンスで提供されてる感じはしてます

メモリ管理の階層の違いを理解できていなさそうだが
メモリアロケータの話ならばRustはC++と同様に交換自由でライブラリ選択可能
可読性を犠牲にガチャガチャする必要はなくRustでは#[global_allocator]で指定するだけで交換可能
2023/07/22(土) 13:41:17.13ID:7Mz5wCRP
理解できてなかったらしい
もういいや
2023/07/22(土) 13:57:51.76ID:u4m8T///
>>792はC言語でたとえるとmallocを使ったメモリ管理とmallocの中のメモリ管理の違いをわかっていない初心者かな
2023/07/22(土) 13:58:55.74ID:NWfMWzFP
そうです
初心者でした
お騒がせして申し訳ありませんでした
801デフォルトの名無しさん
垢版 |
2023/07/22(土) 14:25:05.31ID:AxAuiZIS
>>796
AのサイズよりCのサイズが大きいときは
フラグメントは発生しないのかな?
2023/07/22(土) 14:42:32.24ID:QLIAp4G5
>>801
そんなに単純じゃないよ。
確保しようとする大きさによって違う領域から割り当てるような実装も普通。
順序良く割り当てるわけではなく、
そのときの状況によって効率的になるように采配する。

仮に断片化を意図的に起こしてでも総合的に断片化の確率を減らすような
戦略を持っているのかもしれないし、
よほど深刻な場合を除いて使う側はアロケータの中なんぞ忘れておくのが吉。
2023/07/22(土) 14:54:17.36ID:NWfMWzFP
もちろん発生しますよ
どんな場合でも最高次数にうまくいく魔法のような戦略なんてありません
なのでケースバイケースで場合に応じて戦略を使い分けなければならない
しかしOSの実行環境なんかのアロケーターはプログラムの内部情報を何一つ持ってないから「開きメモリのリストを持っておいて最初に見つかったスキマにアサインする、足りなくなったらGC」以外に戦略の採りようがない、だから従来のプログラミング言語は自分でGCするわけです、少なくともコンパイラはコンパイルする時点でどれくらいの頻度でどれくらいのサイズのアロケーション要求が発生するかある程度情報が得られるからそれを利用してよりよい割り当て戦略をとれるチャンスがあるからです、なんならその情報をコンパイラに教えるnotificationをつけられるように設計する事もできる
しかしそれとて限界がある、だからRustはもうそれすらやらない、アロケーションは自分でやれ、そのためのツールはある程度は言語内部で用意する、ダメなら言語外部のツール使え、という「無理してやってもどうせ“最適”には程遠いからやらない」んでしょう
逆に言えばRustでプログラム組むとき、特にでかいデータの作成、廃棄を繰り返すような場合はプログラマはかなり練度が必要になるんでしょう
立ち位置としてそれくらいの事がこなせるユーザーをプログラマとして想定してるという事です
学習コストが高いんじゃなくてそもそもプログラマに要求されてる水準が高めなんですね
2023/07/22(土) 16:19:13.40ID:2BLjTz4O
>>803
間違い多いな
まず一般的にGCはフラグメンテーションを解決しない
特にマークアンドスイープ方式のGCや参照カウント方式のGCはフラグメンテーションは放置で関与しない

Rustについての記述は間違いだらけでなんとも言いようがない
言語外部のツール使えとはトンデモすぎて何を言ってるのかもわからない

フラグメンテーションを起こし得るメモリアロケーターについてRustはC/C++と同じ立場で同じものを使う
C/C++/Rust共通の話として同じようにjemallocなど別のメモリアロケーターを使うことができる
Rustだけ特別な方法をとったり特別な性質をもったりはしておらずフラグメンテーションについてもC/C++と同じ
2023/07/22(土) 16:41:16.06ID:NWfMWzFP
素人なものですいません
スレ汚しすいませんでした
806デフォルトの名無しさん
垢版 |
2023/07/22(土) 17:02:30.53ID:NRmzieuj
>まず一般的にGCはフラグメンテーションを解決しない
マーク&スウィープ方式は一般的にコンパクションもやってるぞ
2023/07/22(土) 17:07:41.36ID:2BLjTz4O
>>806
コンパクションをするかしないかは独立した問題
マークアンドスイープ自体はコンパクションを伴わない
2023/07/22(土) 17:59:22.96ID:QLIAp4G5
>>807
再配置できないならそもそも論外なんだから
無関係ではないだろ。
2023/07/22(土) 18:05:22.75ID:YLqzZrt5
そういえば君らのメモリ管理の会話でLinkedListの使い道思い出したわ
Rustやその他の言語側じゃなくてOS側のメモリ管理にLinkedList使われてるわ
2023/07/22(土) 18:42:28.71ID:2BLjTz4O
>>808
再配置するのはコピーGCで使用中データ全移動と全ポインタ書き換えとなる
マークアンドスイープGCはその名の通り使用中を辿りマーク付けしてマークされなかったものを再び未使用領域とする
811デフォルトの名無しさん
垢版 |
2023/07/22(土) 19:01:55.55ID:TsQs+vXV
>>807
論点は”一般的”にやってるかどうかだろ
君は一般的にやってないと言ってるわけで
JavaもC#もJavaScriptもみんなGCでcompactionやってる
2023/07/22(土) 19:18:33.46ID:2BLjTz4O
>>811
compactionをする前にマークアンドスイープGC自体は既に終わっていて独立した別の行為
実際にそれら言語では世代別GCが行われていていて新入り若手のオブジェクトはコピーGCを行なうが古いオブジェクトはマークアンドスイープのみで再配置しない方法が一般的
2023/07/22(土) 19:31:27.25ID:nB6v7J6K
隔離スレ行けアスペジジー
2023/07/22(土) 20:04:44.58ID:2BLjTz4O
再配置はデータコピーとそこへのポインタ全て書き換えでコストが大きすぎるから可能な限り避けるのが正しい
世代別GCで若手オブジェクトだけに限ってコピーGCの対象にするのも若手の大半は一時的利用でコピーしなくて済むため

Rustではそんなコストをかけないだけでなくヒープ確保解放のコストすら減らすことと一石二鳥で解決する方法も取られている
例えばbumpalo crateはまとまった領域を持って追記していくだけで個別の解放コストゼロ(=何もしない)と個別の確保コストも最小(=追記のみor足りないとまとまったお代わり)のアリーナアロケータ
つまり未使用領域の再利用をしないことで管理不要となり最高速になるとともにまとめて一気に最高速で返す
具体的にはサーバーまたはバッチ処理で各対象固有データのみそこから確保してその対象を終える時に破棄
これはフラグメンテーションを防ぐのに非常に効果的な方法
815デフォルトの名無しさん
垢版 |
2023/07/22(土) 21:33:49.24ID:kHWj4RWJ
まーた複オジが知ったかぶりして無知晒してるw
初心者かなww
816デフォルトの名無しさん
垢版 |
2023/07/22(土) 22:04:25.70ID:kdu4dn9d
Rust使うくらいならJavaかC#で良いのでは?
2023/07/22(土) 22:08:51.83ID:wR/xGD2g
RustとC#だとどっちがいいの?
2023/07/23(日) 02:44:41.28ID:lmJrnSr9
>>814
GCのないRustが速いわけだ
2023/07/23(日) 11:09:10.60ID:kMNWXVHy
>>814
C/C++でも同じアルゴリズムのアロケータあるで
2023/07/23(日) 11:10:16.97ID:dOw1chPf
>>816
🤮
2023/07/25(火) 06:32:45.09ID:7X7HwnNv
>>819
言語に関係なくそこへ行き着くんだよな
もちろん通常はフラグメンテーションなんか気にせずに普通にコードを書けばよく
稼働時間の長いプロセスでフラグメンテーションが実際に起きた時の解決策の一つ
2023/07/27(木) 13:16:19.02ID:/bGsBsBb
play-rustのコードのコピペのやり方教えて下さい
具体的にはお題スレの

https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=f627f3a5de4a0c467f015a8b1527c141

のコードコピペする方法がわかりません
よろしくお願いします
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でコンパイラの型推論の結果どういう型に決定したのか調べる方法はありますか?
2023/07/27(木) 14:28:57.60ID:p+3LvAw4
>>823
LSP 対応のエディタ (VSCode など) を使ってるならそのへんにカーソルを合わせるだけで型は見れるよ。
2023/07/27(木) 21:59:53.82ID:x4QyUuiY
>>823
安直な方法としては関数の戻り型なら -> i32と嘘の型宣言を指定すれば型不一致で正しい具体型をコンパイルエラーに表示してくれる
プログラムで表示したいならこれ
fn get_type<T>(_: T) -> &'static str {
std::any::type_name::<T>()
}
2023/07/27(木) 23:11:30.70ID:sTDTKxns
>>824
>>825
あざっす
2023/07/27(木) 23:12:33.60ID:paov2RlH
rustの型推論って曖昧なことを許容したっけ?
すべて一意にならないとならないと思ってたけど
2023/07/28(金) 19:39:32.86ID:4cjf/6GX
>>827
正しい
ジェネリックであってもパラメタは各々で必ず一意に静的に確定せねばならず
impl Traitで型宣言しても各々で一意に具体的な型に静的に確定する
特にそれが関数の引数ならば生成コードは単相化される

ただしdyn Traitはそれらが静的ではなく実行時のオブジェクト生成毎に個別に一意の具体的な型に確定する点で異なる
コンパイル時の静的な生成コードは複数の型で共有となるためvtableを持って対処している
2023/07/29(土) 16:54:29.41ID:Nh9kevR9
なるほど
Rustは最終的にコンパイルが終わって型が完全に推論が終わって単相型が決定した状態でしかわからないのかな
当然get_typeで得られるstrは推論終わって単相型が割り当てられた後の型しかわからないんやな
2023/07/29(土) 18:53:43.03ID:nTghkNr5
コードを書いた時点で型は決まるし書いた人は型を把握できる
ジェネリックな関数だとしても型パラメタ以外の部分は確定している
その関数を呼び出す側が最後のピースとして型パラメタを指定して完全確定する
2023/07/29(土) 19:01:27.37ID:mkN3FcGi
そうなんよねぇ
ML型型理論ならexpression毎に最も一般的な型が決まる
Haskellは型を指定しない場合自動的にその最も一般的な型を確定させてghciとかで調べられる
今のところ上がってる方法ではRustではそれに該当する方法はなさそう
2023/07/29(土) 19:02:57.30ID:mkN3FcGi
イヤまだvscideとかのやつは試してないな
これならできるんかな?
833デフォルトの名無しさん
垢版 |
2023/07/29(土) 20:36:12.76ID:JeVM9tS2
こいつダメだわ
ある意味複オジ2世
2023/07/29(土) 21:40:33.16ID:EPaDIYai
>>829
> Rustは最終的にコンパイルが終わって型が完全に推論が終わって単相型が決定した状態でしかわからないのかな
いやもうrustは変数宣言時に定義した型の変更を許さないのよ(基本的に)
だから型推論は変数宣言時のものを利用したり、関数の場合は返値、手打ちの数字の場合はデフォルトの型に決め打ちされて型推論されるわけ
いちいち型を調べる必要がない
ジェネリックに関しても基本的に場合分け
2023/07/29(土) 21:44:15.48ID:EPaDIYai
pythonとかjavascriptとか勝手に型を変更する(ような振る舞いをする→変更するとは言ってない)
言語なんてサイテーだと個人的には思う
2023/07/29(土) 22:05:07.65ID:2dUASh9D
>>834
どゆこと?
rustの型システムはしゃないの?
2023/07/29(土) 22:10:13.37ID:2dUASh9D
ごめん、誤字った
rustの型システムはMLじゃないの?
いわゆる型の全体と命題論理の全体を一対一に対応させる
で、その命題論理の目モデルを探す事=単相型を決定する事がMLの型推論システムで、Rustもそれ採用してるんだと思ってるんだけど
で単相型が割り当てられる“命題”に対応してるものが多相型と呼ぶんだと教えてもらった事あるけど
2023/07/29(土) 22:19:51.45ID:381IW7f/
も少し書くなら基本的にrustもhaskellも型システムは基本的な原理は同じじゃないのって話
それを説明する用語としてRust特定の説明の仕方をしてるのかもしれないけど説明の仕方や用語の使い方を変えたところでどっちもカリーハワード理論に基づく型システムじゃない?
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も同じじゃないんでしょうか?
2023/07/29(土) 23:06:20.41ID:MBm8IaU2
まずRustの数値リテラルはHaskellと違って多相な型を持たないです
2023/07/29(土) 23:25:14.79ID:I6XWshKt
>>839
分かってる気になっておかしなことを書く癖を直したほうがいいと思うが…
2023/07/29(土) 23:36:28.14ID:I6XWshKt
人間としての推論機構が間違っている

基礎を勉強してルールとしてそれを覚えてから
それを基に推論を行わないと意味がないと知るべき
2023/07/29(土) 23:51:52.56ID:nTghkNr5
>>831
最も一般的な型ではダメでRustは唯一に確定しなければならない
Rustは関数(メソッド)の引数も返り値も型宣言が必須だけど
そこでの型はジェネリックで型パラメータを持つものも多く
その型パラメータのトレイト境界などによる制約とそのトレイト実装をする型が複数あることから複数解も生じる
複数解がありうるならばコンパイルエラーとなり明示的な型指定を求められる
唯一の例外が数値リテラルの利用により数値型までは確定している時でそれが整数ならば自動的にi32型に解決される
2023/07/30(日) 00:16:28.33ID:psEFm3Dt
>>840
その説明はよくrustの解説本にあるけど多分字面通りの意味にとってはいけないんじゃないかと
だってプログラム全体を見なければ型なんか決められるはずない
ML型の型システムである限りHaskellのexpressionから定まる最も一般的な多相型持ってると思う、でなければML型型システムと呼べない
さっきあげたmysumなんかその典型、あのmusumはnum classに属するすべての型で使うことができる、もしこのような多相型を持たない理論ならすべての足し算を持つクラス全てにほとんど同じsumを定義させられることになる、それを避けられるのがML型システムの1番の売りなんだから
てか上の例のmysumに相当する書き方Rustでもできるんでしょ?
無理なん?
2023/07/30(日) 00:18:56.60ID:psEFm3Dt
ML型システムと呼べないは言い過ぎかな?
まぁ型宣言省略しても型推論してくれるならML型型システムと呼べなくはないけど、でも流石にさっきのmysumみたいな記述は許されてるんじゃないの?
2023/07/30(日) 00:19:43.44ID:dT6HJfPv
ハスケル!
ハスケル!
ハスケル!

その毎度のハスケルおじさんに構うのは止めとけよ
Rubyおじさんと変わらないんだからさあ
自覚のない荒らしだよ
2023/07/30(日) 00:19:47.09ID:psEFm3Dt
>>843
そうなん?
じゃあさっきのmysumみたいな書き方はRustではできないのあ?
2023/07/30(日) 00:21:02.70ID:dT6HJfPv
Haskellおじさんは自分の思いをここに書かないと死んじゃうの?
なんでRustをRustとして扱いたくないの?
2023/07/30(日) 00:21:05.69ID:psEFm3Dt
>>846
目障りなら無視してくれていいけど純粋に新しいプログラミング言語に挑戦してるだけだから邪魔しないでくれる?
君は一生ひRustに捧げればいいやん
2023/07/30(日) 00:22:04.96ID:dT6HJfPv
ハスケルおじさんは壁に向かってハスケルハスケル行ってればいいのに
2023/07/30(日) 00:24:01.50ID:dT6HJfPv
マクロしらんの?
2023/07/30(日) 00:24:09.72ID:psEFm3Dt
>>848
すでに習得した言語の対比して新しい言語に挑戦するのは当たり前やろ?
Haskellの型システム理解するのにどれだけの時間をかけて教科書を読み、論文を読み、プログラミングを組んでみたか、その資産を使いたいとおもうのがそんなに悪いんか?
黙っといてくれよ
2023/07/30(日) 00:24:40.66ID:dT6HJfPv
>>852
悪いに決まってるだろ?
そんなこともわからんの?
2023/07/30(日) 00:26:23.01ID:dT6HJfPv
論文読まないとプログラム言語が理解できないんだから困ったやつだろ
推論システムが変
2023/07/30(日) 00:29:41.31ID:dT6HJfPv
まずは"真面目にRust学習"しろ
そして習得しろ
そして疑問を解決しろ
2023/07/30(日) 00:32:06.97ID:psEFm3Dt
>>854
すまんけどオレは論文なんか読まなくても理解できるような天才じゃないんだよ
君は論文なんぞ読まなくても何もかもわかる天才なのかもしれんけど世の中そんな天才ばかりじゃないんだよ
オレみたいに寝食忘れて努力に努力を重ねてやっと話しが分かる鈍才もいるんだよ
鈍才が悪あがきするの邪魔せんでくれ
2023/07/30(日) 00:33:26.30ID:psEFm3Dt
>>855
もうオレに関わらないで
その方が双方幸せじゃないか?
858デフォルトの名無しさん
垢版 |
2023/07/30(日) 02:16:35.97ID:ArPWIRVu
大先生3人に共通するのは
自分は分かってるという根拠のない思い込みと
何度指摘されても全く反省せず同じことを繰り返す傍迷惑な行動
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()));
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がなければそれを定義する形になるのだろうか?
よろしくお願いします
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 ]
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以降は必要な分だけ実装すれば良い、ただし実行時エラーは覚悟しろという風に変更されてるようです(未確認、コンパイラがエラー吐かなくなったので)
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を使うしかないのでしょうか?
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では不備があればコンパイル時エラーとなり安心して安全に使うことができます
2023/07/30(日) 12:47:58.55ID:wjjxPYUe
そろそろ隔離スレ行ってろカスども
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 ではそれで困らない。

価値観が違う。
2023/07/30(日) 18:06:30.12ID:mgfeU+D6
新設の見慣れぬ演算子の種類を勝手に増やして各々が異なる意味付けすることは可読性を下げるのみで百害あって一利無し

>>862
コンパイラがエラーを吐かずに実行時エラーとなるのはマズいな
Haskellの価値観はよくない
2023/07/30(日) 19:58:32.75ID:Llc746TG
すいません、筆が滑りました
もちろんコンパイル時にエラー吐きます
以前のHaskellだと例えそのプログラムで使われてない場合でも実装しないとエラー吐いてました
しょうがないのでwhere句に使いもしないのに
_ * _ = undefined
signum _ = undefined
....
を書いてました
流石に無意味すぎて使わないのは書かなくて良いことになったようです
使ってるのに未実装はもちろんコンパイラが見つけてくれます
2023/07/30(日) 20:06:02.24ID:iwDEPHME
どうでもいいけど signum という名前を見るとヴォルケンリッターを連想してしまう……
2023/07/31(月) 08:16:09.72ID:G+nEO2Oo
どうでもいいなら・・・煽りたくなるな
2023/07/31(月) 10:23:47.98ID:8wbRk2dY
use Hoge::prelude::*; って良く観るがダサいなー
2023/07/31(月) 10:35:07.69ID:i3Lje9zm
でもまあ機能ごとにモジュールを整理しても
それとは別によく使う集合があるのも現実だし。
2023/07/31(月) 11:07:00.50ID:sgBBFIN2
global 禁止(キリっ
2023/07/31(月) 12:25:28.59ID:lZja90Kc
>>871
preludeは邪道で非推奨
自動適用される標準ライブラリのprelude以外は使わない&設けない
例えばtokio::preludeも廃止された
2023/07/31(月) 12:34:21.81ID:eCR2qI4e
Rustで、Vecに要素を追加したとき、メモリ不足で
メモリ確保に失敗した場合、どうなるんですか?
C++の場合は「例外」がthrowされますが。
2023/07/31(月) 14:38:56.18ID:uDpaCeqo
pqnic
2023/07/31(月) 16:40:54.67ID:cE0Z6rmj
ピクニック?
2023/07/31(月) 17:53:43.20ID:1dCFbVL1
fn っていちいち略さなくても function でよくない?

書き込める変数の宣言に mut ってつけるのもダサい
2023/07/31(月) 18:05:43.81ID:+bjI2PCn
mutはガチでダサい
何かいい記号はなかったのかとw
2023/07/31(月) 18:13:53.64ID:+bjI2PCn
英語圏の人たちはmut見てcoolに感じるとか日本人と感性が違う可能性がある
2023/07/31(月) 18:38:57.32ID:9nT3Yxeb
>>878
感性が古いよ
2023/07/31(月) 18:48:05.02ID:STr6yd2M
今までミュートと読んでいた
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と書く。
2023/07/31(月) 21:15:27.96ID:+bjI2PCn
BASICの頃はDEF FNと言うので関数を定義してた
2023/07/31(月) 21:25:40.03ID:4/4p/Sxt
様々なプログラミング言語があって千差万別な中
大した問題ではないキーワード名やその多少の長さに文句をつける人はダメな仕事できないやつ
仕事できる人は文法とその意味論を比べる
2023/07/31(月) 21:34:38.41ID:+bjI2PCn
ダサいのはダサい

今後何があってもbegin end区切りの言語は使わないと思う
delphiやってた時もimplementationと言うのを見てクソダサいなと感じた
Objective-Cも二度と接することはないだろう
2023/07/31(月) 22:59:44.59ID:i3Lje9zm
kotlin や swift の前で同じこと言えるの?
2023/07/31(月) 23:19:46.93ID:+bjI2PCn
implementation Point {
public function ...
890デフォルトの名無しさん
垢版 |
2023/08/01(火) 03:00:40.65ID:8wU+ches
>>880
constより2文字も短い!かっけええぇぇぇ!!!
かもな
同意しないけど
2023/08/01(火) 03:53:49.10ID:enF/Vqu1
constは定数だからコンパイル時に静的に確定する
immutableかmutableかというのはconstとは無関係な概念で実行時の変数の値が書き換わるかどうか
つまりRustの非mut (immutable)は定数ではなく実行時に値が決まる変数
2023/08/01(火) 11:16:59.87ID:AvEKEx5a
let x : u32 = 1234;

const x : u32 = 1234;
は違うんですか?
2023/08/01(火) 11:22:28.49ID:AvEKEx5a
なるほど、const = の右辺値はconst 文脈で書かれていてコンパイル時に決定できないといけないけど let = の右辺はその制約がないのか
2023/08/01(火) 17:52:49.94ID:3uGNwlqu
constはコンパイル時に値が決まる定数となり定数名は大文字で書く
letは(mutの有無に関係なく)実行時に値が決まる変数となり変数名は小文字で書く
mutの有無はその変数の値が書き換えられるかどうかだけの違い
2023/08/01(火) 18:49:11.32ID:Nt/KTAzO
自分は素人だけどそれじゃあ型に対する言及が抜けてないですか?
2023/08/01(火) 20:27:35.06ID:3uGNwlqu
型とは直交する概念なので型とは無関係
任意の型で成り立つ
2023/08/01(火) 22:08:28.57ID:YdsBZTXH
'static
2023/08/01(火) 22:38:58.55ID:Nt/KTAzO
constはシャドーイングは行われない
変数と違い型を必ず明示しなくてはならない
2023/08/02(水) 00:09:43.49ID:IOFZl0B3
>>898
なんでですか?
constシャドーイングしてなんか不都合あります?
900デフォルトの名無しさん
垢版 |
2023/08/02(水) 00:12:43.58ID:/ED8qpF1
>>892
constならROM領域に置ける
2023/08/02(水) 00:12:59.71ID:IOFZl0B3
あ、わかった
そりゃそうだ
902デフォルトの名無しさん
垢版 |
2023/08/02(水) 09:00:43.40ID:4pI1Wfnv
関数名というか関数を格納した変数?にもmut付けるときあるけど
動作中に関数を変えるのが目的?って表明以外の意味ある?
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(); }
}
2023/08/02(水) 13:23:57.98ID:MBDISWVo
そこに置かれてる値(関数ポインタ or クロージャ)が変更されるという意味では同じか
2023/08/02(水) 18:24:39.32ID:SI51iZ7R
let mut hoge; じゃなくて

むしろ let hoge = 3; と mut hoge = 3; の二種類に分ければ美しくてよ
2023/08/02(水) 19:02:02.79ID:F3jAz55G
static mut もあるし
letはパターンマッチ文だからlet (mut a, b) もあるし
if let Some((ref mut p, ref q)) もあるし
907デフォルトの名無しさん
垢版 |
2023/08/02(水) 20:18:56.34ID:/ED8qpF1
>>905
それは無い
2023/08/03(木) 07:43:41.06ID:9tsUh6Bs
速い! 安全! ださい!
2023/08/03(木) 08:17:38.34ID:8npqW66R
>>906
mutを単独キーワードに分離したRustの設計方針の勝利だな
2023/08/03(木) 10:00:57.61ID:W+hOnHrE
かわいい
北朝鮮みたい
2023/08/03(木) 21:15:21.47ID:j7849mpF
こんなスレ見てるなんてダサいぞ!
912デフォルトの名無しさん
垢版 |
2023/08/04(金) 09:07:52.99ID:XLfSEGlw
かわいい
埼玉県みたい
2023/08/06(日) 17:59:34.17ID:xBSreVT+
任意長整数型演算の実装の演習してるんですけど

・和の時には下の桁から、大小の比較の時は上の桁から順次比較するので双方からのアクセスをO(1)で行いたい
・任意長なので加法のときにover flowしたときitemの追加ができないとダメ

この場合どのcollection型が有利ですか?
ソースが難しすぎてわかりません
情報お願いいたします
2023/08/06(日) 19:27:39.64ID:3wcIZOky
自分ならVec使う
2023/08/06(日) 19:29:40.12ID:lVXXe/mp
>>913
何を問題にしているのかわからない
言語に関係なく連続体のデータ型(配列やベクタなど)の順次アクセスは
前から後ろから関係なくサイズNに対して総コストO(N)で1つあたりO(1)
それらのうち固定長ではなくサイズを伸ばせるデータ型(ベクタ)なら要素を追加できる
RustならVec
2023/08/06(日) 20:21:24.84ID:xBSreVT+
>>915
各collectionの内部構造がよくわからないんですよ
ソース全部読めてなくて
vecってLinkedLustみたいな数珠繋ぎじゃないですよね?
2023/08/06(日) 20:24:19.56ID:xBSreVT+
>>914
ありがとう
確かに片方だけ伸ばすならbecで良さそうなんですよね
しかし後でよくよく考えたら掛け算の時に一の位の方向にも伸ばせた方が便利な気もしてきて
でもそっちは絶対じゃないんですよね
なんせvecのソースがむずい
2023/08/06(日) 20:32:19.03ID:Mgx3ApDu
ソースよりドキュメントを見なよ。
図つきで解説されてるから。
Vec は必要に応じて自動で再配置する配列ってかんじ。
要素は連続して配置される。
2023/08/06(日) 20:50:29.31ID:WEauDaB9
>>918
https://doc.rust-lang.org/std/collections/index.html
とか読んだんですけどよくわからないんですよ
rust専用スレならstd::vec全部目を通せてる人いるかなと
連続して確保される領域の幅とかは指定できます?
2023/08/06(日) 20:51:36.50ID:lVXXe/mp
>>916
性質が重要なのであってよほどのことがないかぎり実装内部のソースを知る必要はない
LinkedListは極一部の用途を除きほとんどの用途で遅く不利になり今回も考える必要はない
これらは言語と関係なく一般的な話
2023/08/06(日) 21:11:21.94ID:kGEgc8zj
>>920
とりあえず今はガロアの連分数使って円周率の計算でもやってみようと思ってるんですけど、その場合計算する項のlog orderで桁数が増大していきます
でも例えばbinary splittingとかにすれば桁数の上昇具合が変わってきます
そういう用途に応じて適切なcollection型の使い分けできるようにしたいんですよ
あくまで練習なので
ソース読みはまぁ趣味みたいなもんなんですけどそもそもRustの自習が趣味なので
2023/08/06(日) 21:11:35.12ID:Mgx3ApDu
>>919
だからドキュメント読めってば。
Vec はポインタとキャパシティと長さを管理する仕組みだと書いてある。
https://doc.rust-lang.org/std/vec/struct.Vec.html#guarantees
実体が配列だからスライスの形で扱うことも出来る。
もし C++ を知ってるなら設計理念的には vectorと同じ感じとおもっていいと思う。
2023/08/06(日) 21:16:41.06ID:kGEgc8zj
>>922
まぁ実はちょっと立場上普通の人より深く知ってる事を要求されることが多いんですよ
もちろんRustを並の人より知ってると言えるには後何年か修行しないといけないんでしょうけど、そもそもRustについては趣味なのでそこまで深く理解しなくてもいいとは思ってます
まぁ趣味なのでボチボチ読みます
ありがとうございます
924デフォルトの名無しさん
垢版 |
2023/08/06(日) 21:39:48.28ID:+jzrd7Vj
Haskell君と同じ臭いがしますね〜w
2023/08/06(日) 22:09:28.45ID:lVXXe/mp
>>921
何度も書いて伝わっていると思うが各データ型の性質や各用途への向き不向きは使用言語と関係ない話
その適切なcollection型の使い分けというのが仮に必要だとしても各言語と関係なく抽象的なレベルで考えて可否を判断すべきこと
その上でベクタ型のデータ構造では何がいけないのかの問題点も見えてこない
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変換でやってみるつもりなのでその場合不定長だとメチャクチャ難しいし
2023/08/06(日) 22:59:01.67ID:lVXXe/mp
>>926
不定長なら再配置を含めてもVecが有利
再配置コストは例えば2^nから2^(n+1)へ広げる度にしか発生せず誤差となる
それよりも連続領域に配置されることによるメモリキャッシュ効果が絶対に効く
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.

とありますよ?
2023/08/06(日) 23:50:23.90ID:lVXXe/mp
それを読んで再配置があった場合でも1回あたりO(1)で済んでいることが理解できないならば
Rustの勉強でもなくプログラミングの勉強でもなくCSなどの基礎から学ぶことをおすすめする
そういう基礎を理解しないままO(1)で行ないたいと最初の質問で書いていたのもヤバい
何度も伝えているが各言語と関係なく成り立つ話なのだから各言語に立ち入る前に理解を済ませておくべき
2023/08/07(月) 00:14:34.21ID:KoOATDug
>>929
>CSなどの基礎から学ぶことをおすすめする
任意長整数型演算の実装の演習をするような人ならCSで学ぶ程度の知識はあるんじゃなのか
当然、データ構造についても一通りの知識はあると思うが
931デフォルトの名無しさん
垢版 |
2023/08/07(月) 00:41:08.66ID:Sa+WohTx
“amortized O(N)”を”1回あたりO(1)”に変換するあたりは流石オジ
でもCS基礎を学べというオジの主張に今回ばかりは同意するよ
2023/08/07(月) 00:47:42.86ID:uTLlh+jk
>>929なんでO(1)で済むんですか?
そもそもデータ全体を連続領域に確保するんでしょ?
その延長する部分のヒープがもう埋まってたらデータ全部丸写しするしかないんじゃないですか?
大体そもそもデータを連続領域に確保して前からも後ろからも関係なくアドレス1発でアクセスもできて、その上データの追加もO(1)でできるとかなら無敵じゃないですか?
そんな魔法のよなメモリ管理できるハズないのでは?
2023/08/07(月) 00:48:41.30ID:Lr/s88yL
Vecって単純過ぎてデータ構造では扱わなかったりするのかな
ならし解析では最初に出てきそうなネタだけど
2023/08/07(月) 00:50:22.19ID:uTLlh+jk
ああ、データの読み書きが一回あたりI(1)ですか
でも今データの追加は整数の桁数が一上がるごとに発生するんですよ?
あらかじめデータの桁数が不明でそれが難しいと言ってるじゃないですか
足し算のたびにコピー発生しますよ?
935デフォルトの名無しさん
垢版 |
2023/08/07(月) 00:53:46.05ID:O5oF7I6f
こいつぅ
絶対わかってないやんw
2023/08/07(月) 00:53:52.95ID:++BmxY1A
実際バイナリスプリッティングでマクローリン級数で足し算する場合とかどうやってあらかじめ必要桁数予言するの
2023/08/07(月) 00:54:45.54ID:eXrQj8ZH
実際どんな用途かも具体的に書いてるのに
2023/08/07(月) 02:21:35.00ID:pearvhja
2年くらい前の過去スレと今の状況見比べて泣いちゃった
939デフォルトの名無しさん
垢版 |
2023/08/07(月) 10:50:23.98ID:wl/Lx6N5
ここまでvecdeq無しとは
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)は誤差となる
941デフォルトの名無しさん
垢版 |
2023/08/09(水) 00:49:09.66ID:52BV6d5f
>>930
>当然、データ構造についても一通りの知識はあると思うが

今までのレス読んでそう思う?
2023/08/09(水) 18:58:03.94ID:2XWtgL1F
でも競プロでvec.insert(0, value)でタイムアウトしたけどvecdeque.pushfront(value)ではタイムアウトしなかった経験があるな
2023/08/09(水) 19:31:59.29ID:X5pmvNGk
VecDequeはring bufferだから連続性は保証されないね
VecみたいなDerefがないから&[T]に渡せない
slice未実装かと思ったら2つのsliceで返すas_slices()が実装されてて思ったより芸が細かかった
2023/08/09(水) 22:17:02.23ID:5oPtG5Gl
>>942
そのinsertはずらすコピーが毎回O(N)かかるからサイズNになるまでの累計はO(N^2)になってしまう
一方で満杯になったときの自動再配置コピーコストの方は累計でO(N)だからさほど気にしなくていい

>>943
その時の状態配置に応じて最小コピーで連続領域にしてくれるmake_contiguous()で
連続1本になった&mut [T]を得られるのでVecDeque内でのsort()なんかもできちゃうね
945デフォルトの名無しさん
垢版 |
2023/08/10(木) 04:07:06.41ID:GpbD/XFE
>slice未実装かと思ったら2つのsliceで返すas_slices()が実装されてて

He-
946デフォルトの名無しさん
垢版 |
2023/08/10(木) 04:08:51.37ID:GpbD/XFE
vecdequeはlinkedlistじゃね
2023/08/10(木) 06:08:17.32ID:74A6gUuN
vecdequeはもちろんvecで構成
linkedlistは他のデータ構造(vector, binary tree, hash table)と比較してほとんどの用途で遅く不利なため極限られた用途でしか用いられない
linkedlistが用いられる限られた用途でもlinkedlistの欠点を補うため同時にhash tableやbinary treeなどと組み合わせて用いられることも多い
2023/08/11(金) 08:01:08.13ID:4oMIZBsG
>>930
データ構造なんて知らなくてもできる
中学生の頃やってた

大学入った1年の前期でプログラム実習があってそこでも多倍長整数演算の計算をやった
配列で計算すんの
何も難しいことはない
2023/08/11(金) 08:22:37.37ID:6e7vDYNE
RustやるならCSでもまず計算モデル(特にスタックフレームモデル周辺)だろ。
2023/08/11(金) 08:37:22.11ID:/t3LBfIN
>>948
その配列というのが長さと場所を固定した連続領域を取るデータ構造なのよ
Vecは同じ連続領域だけど長さと場所は可変なデータ構造
VecDequeはVecを用いたリングバッファで連続領域を確保して使っているけど使用データ自体は最大二つの領域に分かれるデータ構造
LinkedListは連続領域を使わない連結リストといったようにいろいろあるデータ構造の中で質問者はどれを使うべきか悩んでるみたい
2023/08/11(金) 11:19:59.50ID:4oMIZBsG
最近おかしな議論が複数のスレにまたがって続いてるけど
多倍長整数というワードすら出てこないんだからなあ
2023/08/11(金) 12:40:08.98ID:v1edpQDw
複オジと厨房と二人いるのか?
それとも厨2病をこじらせた複オジか?
2023/08/11(金) 13:08:17.16ID:1cDd+Y+T
>>951
ユーザーは多倍長整数ライブラリを使えばいい
しかし彼は作る側でどのデータ構造を使って実装するとよいかの相談
Rustの話ではなく普遍的な基礎知識の話だけどな

>>913
>>任意長整数型演算の実装の演習してるんですけど
>>(略)
>>この場合どのcollection型が有利ですか?
954デフォルトの名無しさん
垢版 |
2023/08/11(金) 14:32:24.16ID:8y9raxy5
>>952
最近はこじらせてる人が3〜4人いるよ
複オジは>>953
2023/08/11(金) 14:38:02.18ID:WGGkjKOg
複オジ認定される人は複数いると思われ
2023/08/12(土) 06:55:54.99ID:H/leygs+
誰かに雇われてるのかもな
2023/08/12(土) 17:12:05.53ID:uYfXOEbY
詳しい人がいたらアドバイスをもらえると嬉しいです
やりたいこと
 入力系イベントの変換及び送出
 例えば所定のウインドウがアクティブ時にピンチインが入力されたらCtrl+「-」を送出とか
OS
 WindowsとLinux。同じコードで両OSに対応する必要はない
UI
 とりあえずCLIでも構わない
技術要素
 入力系イベントのグローバルフック。Rustではどうやる?
というか言語を問わずグローバルフックを使った新しい記事ってめっちゃ減っている気がする
現行の環境でどのような実装が良いのかよくわからない
958デフォルトの名無しさん
垢版 |
2023/08/12(土) 18:35:08.55ID:Vg3fIeNP
XY問題の上にRust関係ないな
2023/08/12(土) 20:05:24.91ID:uYfXOEbY
今でもピンチイン/ピンチアウトで縮小拡大できないデスクトップアプリは珍しくないからね
特にエンジニアリング系アプリは有名どころでもタッチやペンに対応していなかったりするし
あと今から作るならRustを使いたいけどフックなどの実装は処理系依存になりやすく
システム言語を自称するRustでどこまでできるのかという点も興味ある
2023/08/12(土) 21:12:06.35ID:ufIhf+ig
言語と関係なくね?
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
で頑張るとかになるだろうが。
962デフォルトの名無しさん
垢版 |
2023/08/12(土) 22:11:27.89ID:ecBv/yaX
アタオカがまた別のアタオカを呼ぶ
2023/08/12(土) 22:58:19.87ID:SnIoCjjg
>>957
今風のやり方は知らないが大昔にCでxlib使ってx11のイベント通知もらって何でもできた

>>959
CでできることはRustでできる
各分野についてRustだけで書かれたクレートもあれば
Cのライブラリを呼んでほぼ生で提供するクレートから
それをRustなインタフェースで提供するクレートもある
レアな分野で誰もクレート作ってなければ自分で作るのも難しいことではない
まずはcrates.ioでクレート探しからスタート
もし何を探すべきかがわからないのならばそれはRust以前の問題
2023/08/12(土) 23:35:32.02ID:pSdIUbms
まぁ仕事でRust使う人は皆無だろうからな
そして仕事でなければコンソールアプリで十分やし
家でサンデープログラミングするのにわざわざwindows sdk引っ張り出さないし
2023/08/12(土) 23:49:38.13ID:SnIoCjjg
むしろ仕事でWindowsを使わない
人それぞれだろう
2023/08/12(土) 23:52:35.31ID:3Gp8Ilch
システムプログラミング向けの言語だからデスクトップアプリでは活況ではないんじゃないかな
2023/08/13(日) 00:01:39.02ID:lcT7JkgH
そうか、サーバサイドの人は使わんわな
2023/08/13(日) 00:04:16.66ID:RW198XaM
好きにプロセス消失してもいい系のWebサーバ向けアプリには
あんまメリットないわな。
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
970デフォルトの名無しさん
垢版 |
2023/08/13(日) 11:45:17.49ID:mxfdwtiA
また現状認識ズレた人が不況に熱心なこと
2023/08/13(日) 12:47:43.44ID:tlLZmbuO
クラウドはリソース(演算能力やストレージ)を使った分だけ金がかかるという話は何度も言及されているやで
2023/08/13(日) 13:12:36.18ID:1wlKIUZg
ずっとそれ勘違いして言い続けてるよね
急になんJ民の振りしてもバレバレ
2023/08/13(日) 13:31:43.04ID:4YjHceGO
>>971
オンプレミスも同じ
遅い言語を用いていると無駄にサーバー数が必要となりその電気代が固定費となってしまう
C/C++にはtokioのような非同期並行並列でCPUマルチコアを使い切れるスケジューリング環境もないため
現状Rust一択
2023/08/13(日) 16:16:11.90ID:QszCfK1u
オンプレでも最終的にはそうなんだけど、クラウドの力でリソースの割り当てが柔軟に出来る状況になったので
「(開発初期は) まだ余っているリソースのチューニングは後回しにする」ということが出来なくなった。
余りなど存在しないので。
2023/08/13(日) 20:12:32.36ID:NbQv8fjv
費用ならjavaやc#の方が安い
利用者が多くエンジニアを集めるコストが低いので
2023/08/13(日) 21:37:06.42ID:lTJXvUOS
Webサービス分野だと小規模なサービスは人件費 > サーバー費用だからRustは早すぎる最適化になりがち。
とはいえ開発体験もかなり優秀な部類になってきたから初手でRust選ぶのが開発者のオナニーとは言い切れなくなってきてるよな。
2023/08/13(日) 22:11:07.62ID:QszCfK1u
ウェブサービスというものが根本的に手探りだった時代は
素早く変更してサービスに反映させられる言語が重要だったけど
今は部品が確立してそれを組み合わせる形に変わっているから
部品が充分に揃っていると仮定できるなら言語 (処理系) の性能差で差がつく。
2023/08/13(日) 22:21:31.33ID:26EPBWum
でも実際問題としてRustで組んだ人いる?
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」などがある。
2023/08/13(日) 22:57:04.72ID:otTwfC5P
>>979
イヤ、そうじゃなくてこういうとこで雑談するレベルの話で実際に仕事でRust使うような実例を持ってる人いるかって質問
別に煽ってるわけじゃないよ
まずそこまで流行ってないと思うしかない、仕事で実際使った人いるならどういう経緯で使うことになったのかなぁと
2023/08/13(日) 23:15:24.43ID:QyDGXVub
自分は仕事で書いてるし、直接の知り合いで仕事で使ってる人10人くらいはいるかな
なんで国内でも数十社くらいは使ってるんじゃないかと思う
2023/08/13(日) 23:48:35.51ID:iO5PvBbd
そうなんや
それは言語はなんでもいいから好きなので書いていいん?
それともRustで書くように指示された案件?
2023/08/13(日) 23:48:42.00ID:427/I8XL
> 自分は仕事で書いてる

開発の仕事じゃなさそう
くだらないウェブ記事書いてお小遣いもらってそう
2023/08/13(日) 23:51:53.47ID:6khxmh9H
うちはバックエンドの一部をRust製にした
最終的には全てRust製へ置き換えるが着実に一つずつ
2023/08/14(月) 00:03:15.79ID:SMR2domD
へぇ、意外にRust導入されてるんやな
986デフォルトの名無しさん
垢版 |
2023/08/14(月) 02:41:34.96ID:QUiVDENJ
蝦出んす
2023/08/14(月) 06:54:36.10ID:BvDmcvEg
>>982
うちの場合はC++で書かれた部分をRustに移行した感じ
開発言語は実担当者に任されてるから自分のチームの数人で話して決定
皆C++書けるからRustも結構すぐ書けるようになってた
2023/08/14(月) 08:31:01.38ID:YSmL6IQ6
こちらはNode.jsからRustへ移行だったけど
どちらもasync/awaitによる軽量タスクコードだから意外に簡単だった
2023/08/14(月) 22:05:11.92ID:VoYfevle
どれも具体性が薄すぎてニートが妄想で書いてるんかってレベルやな

何の目的があってRustが選択されたのか
他の候補として何が検討されたか
最終的に目的はどの程度達成されたのか
大きな課題としてどんなものが現れたか
その課題はどう解決したか(しなかったか)

一般論じゃなく各論で、そういう特筆すべきことはなんにもなかったんか?
2023/08/14(月) 22:08:35.90ID:NTZtQKzP
そうやって情報収集しようとするクセよくないぞ
自分でしらべろや
2023/08/14(月) 22:13:54.79ID:sy90BXR1
このスレにいる以上は Rust に関心を持っているのは当たり前なんだから
実務で使ってる事例もそれなりにあるのは全く自然なことだと思うんだが、
そう思えない理由がなんかあるか?

LISP スレですら実務の採用例がそこそこあるのに Rust で無いってこたぁない。
2023/08/14(月) 23:40:20.02ID:GBb0r4Vn
思う思わないレベルの話はいらない
2023/08/14(月) 23:49:03.15ID:h0ddCJfE
アンチの相手しなくていいんじゃないかしら
お盆に入ってからの書き込み原文ママ

「仕事でRust使う人は皆無だろう」
「サーバサイドの人は使わん」
「Webサーバ向けアプリにはあんまメリットない」
「開発の仕事じゃなさそう」
「くだらないウェブ記事書いてお小遣いもらってそう」
「どれも具体性が薄すぎてニートが妄想で書いてる」
2023/08/15(火) 00:22:56.61ID:0OuVStUx
無理やで
2023/08/15(火) 01:10:11.11ID:eHfmSxwe
>>993
君のとこでは採用してるん?
2023/08/15(火) 02:40:39.04ID:ozj7JwYA
確かにこんなところで調査しても意味ねえわ
2023/08/15(火) 03:17:19.17ID:W84SzS8v
NoSQLなデータ扱うマイクロサービス改修を機会にそこをRustにしたよ
2023/08/15(火) 08:51:26.28ID:ca01mENm
ウクライナが勝ってるよっていう情報を流すのと同じw
999デフォルトの名無しさん
垢版 |
2023/08/15(火) 22:01:38.42ID:wEreUCSS
ここで普及させようとしても意味無いでw
2023/08/15(火) 22:12:55.30ID:6mJ3MaUL
rustupが動かないので手動でクロスビルド環境を構築したいんだが
rustup target add 〜
って具体的に何やっているの?ターゲットはとりあえずthumbv7em-none-eabihfとriscv32imac-unknown-none-elfの2つ
ネイティブビルド環境は公式にあるプレビルドファイル一式を適当な場所に手動で展開すれば構築できるけど(構築済み)
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 165日 21時間 27分 27秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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