結局C++とRustってどっちが良いの? 5traits

レス数が1000を超えています。これ以上書き込みはできません。
2023/06/30(金) 21:56:35.52ID:PDIJ4aZy
「C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」

っていう雑談スレ。

結局C++とRustってどっちが良いの? 4traits
https://mevius.5ch.net/test/read.cgi/tech/1686046386/

関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.net/test/read.cgi/prog/1619943288/
2023/06/30(金) 22:00:04.42ID:TaBihWT0
クラウド世界トップシェアのAWSもRustで構築されているようだ

https://japan.zdnet.com/article/35183866/
AWS (Amazon Web Services)は、「Rust」を使っている大きな理由として、エネルギー効率の高さを挙げる。
AWSは早くからRustを採用し、Rust Foundationの創設にも携わった。
現在もRustの普及に熱心に取り組んでいる。

AWSのソフトウェアエンジニアで、Rustの普及に取り組む
Shane Miller氏と主任エンジニアのCarl Lerche氏の投稿によれば、
Rustはメモリー安全性を高め、セキュリティ関連の不具合を減らす役に立つだけでなく「エネルギー効率に優れている」。
Amazonは、2025年までにデータセンターの100%を再生エネルギーでまかなうという目標を掲げ、
データセンターの環境負荷の軽減に取り組んでいる。
Rustの採用はその一翼を担うという。

Rustで構築されたAWSサービスの例としては、
コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、
「Amazon Simple Storage Service(S3)」、
「Amazon Elastic Compute Cloud(EC2)」、
コンテンツ配信ネットワーク「Amazon CloudFront」、
LinuxベースのコンテナーOS「Bottlerocket」などがある。
2023/06/30(金) 22:03:50.69ID:PDIJ4aZy
布教でも反論でも、質問(C/C++チョットデキルけどRust始めました、あるいはその逆とか)でも、
関係ないようなこと(避難スレ的運用)でも、ご自由に。

>>2
記法もちょっと近かったりして、webとは相性いいみたいね
2023/06/30(金) 22:48:29.45ID:+A7yghr8
乗るしかないこの大波
5デフォルトの名無しさん
垢版 |
2023/06/30(金) 23:28:17.68ID:KO9roK1Y
非∞!!!!
頓∞!!!!!
典∞!!!!!!
項∞!!!!!!!
判∞!!!!!!!!
病∞!!!!!!!!!
2023/07/01(土) 01:50:39.23ID:ulppHLtb
俺はc言語がいいんだ
nimは試そうかと思ったけどmingw入れるのがだるくて入れなかった
エコシステムに関してはrustは素晴らしい
cargoが良く出来てる
2023/07/01(土) 02:16:26.66ID:PswK3kno
俺は見つけてしまった!!!
gccrs
2023/07/01(土) 02:18:19.44ID:PswK3kno
LinuxがRustのソースコードを受け付けるようになったって話は
コンパイラはgccrsで良いのかな?
2023/07/01(土) 03:46:54.61ID:/rHXN22N
gccは誰も使わないコンパイラ。
2023/07/01(土) 04:02:08.70ID:ulppHLtb
めっちゃ使ってる
clangもいいけど
11デフォルトの名無しさん
垢版 |
2023/07/01(土) 04:41:49.04ID:pfOq6Y2+
今、Rustでnumpyライクなライブラリを目指してるけど、行列の演算はrayonを内部にぶっこむべきだろうか。
ちなみにRustのndarrayベースで作るのはやめて一から実装している。
2023/07/01(土) 04:46:21.39ID:6lyrDsv3
ユーザが好きに選べるようにするべき
2023/07/01(土) 05:18:27.37ID:/rHXN22N
gccを使っていると言う変な人が、自分がスタンダード化の様に
偉そうに振舞えるのが匿名インターネットの世界。
2023/07/01(土) 07:08:07.40ID:oXr/pxLu
>>6
Zigがあるじゃない
2023/07/01(土) 08:15:56.69ID:TNFWMxVo
ユーザ数も指標の一つ
利用者が多ければライブラリも大量に出る
2023/07/01(土) 08:24:36.90ID:tCnNkKat
>>13
それも、この世界の下積みの一種かなって思ったり
17デフォルトの名無しさん
垢版 |
2023/07/01(土) 08:34:29.73ID:pfOq6Y2+
Rustはrust analyzerが優秀なので、何も考えずに言われた通りに修正したら何かコンパイルも通って大体挙動も正しいということが経験できる。これはC, C++では絶対ない。
2023/07/01(土) 08:59:45.18ID:tCnNkKat
C++にもチェッカはあるけど、あんまり利用が普及しないんだよね
利用が普及しないから成長も遅い それがC++の現状の弱さ
2023/07/01(土) 09:26:47.55ID:LlqqD8Ud
これすごいな
https://www.youtube.com/watch?v=0O_kqQ4RQI8
20デフォルトの名無しさん
垢版 |
2023/07/01(土) 09:31:25.82ID:LlqqD8Ud
Unreal Engine の Rust化なんて永久に来ないわ
21デフォルトの名無しさん
垢版 |
2023/07/01(土) 09:34:27.40ID:LlqqD8Ud
>>7
ggrks と似てるね
2023/07/01(土) 10:28:15.98ID:PswK3kno
>>13
Rustコンパイラに選択肢が出来ることは良いことではないか!
恐らく史上最も稼働しているカーネルをビルドしてるのがgccだよ
23デフォルトの名無しさん
垢版 |
2023/07/01(土) 10:29:07.14ID:pfOq6Y2+
Rustはゲーム製作周りのクレートとかが不足気味な気はする。でも、機械学習系の有用なRust純正クレートはかなり増えてきてるとは思う。
2023/07/01(土) 10:34:43.25ID:V94vxKDE
こんなにモダンで優れた言語があるのに今からそびえ立つ💩のシープラやる人いるのかね
2023/07/01(土) 10:38:27.78ID:PswK3kno
>>24
後方互換性なめすぎ
MSは賢かった
2023/07/01(土) 11:47:08.23ID:X7ULfVQU
>>24
>>1 にもあるとおり、仕事では、やれと言われたものをやる
SwiftでもDartでもおなじ

問題は、自分用の推し言語
俺はもうちょっとC++でいく Rustの知見をC++に持ち帰るんだ
2023/07/01(土) 14:19:14.54ID:Ou05Fmyx
同じく仕事で必要なものを使う。
今はC、C#、C++/CLI、Python。
Rustをまずは趣味で始めたいが時間が取れないのと、C++/CLIで作りたいものがある。
2023/07/01(土) 14:28:25.90ID:6lyrDsv3
えっ
C++/CLIはもう……
2023/07/01(土) 14:37:04.32ID:8lOSkeAQ
C++/CLIは、C++20くるよ (ぐぐると、使えないっていう記事があがってくる
https://devblogs.microsoft.com/cppblog/cpp20-support-comes-to-cpp-cli/

C++やっててC#もやってたら、十分射程に入る
2023/07/01(土) 14:42:28.74ID:Z5Xk75uh
持ち帰るも何もRustにはできてC++ではできないことなんかないやろ
匙加減の問題でしかない
C++ではスマポ限定の所有権、ライフタイムの設定を全オブジェクトに適用した
文法的に厳しくした
プログラムの制限が増えたせいでコンパイラがプログラマのミスを発見できる範囲が増えただけ
C++で同じ事ができるようになるとすればコンパイラオプションで
“-strict_variable_management”みたいなオプション新しく作ってRustスタイルの厳密な変数管理でコンパイルできるコンパイラが出てこないと無理、そして結局それ使うならrustスタイル(=スマポスタイル)の変数管理法を勉強しないといけない
そもそももうすでにポインタ使うならC++でもc++11以降のスマポの利用推奨で非推奨の方法避けるなら、これからは所有権とライフスタイルの概念勉強するのが不可避になってる
2023/07/01(土) 14:56:45.83ID:PswK3kno
勉強するってほどの御大層なものでもあるまいw
32デフォルトの名無しさん
垢版 |
2023/07/01(土) 15:36:05.30ID:HnAv4FCA
匙加減ww
バカにつける薬は無いとは良く言ったもの

複オジもたいがいバカだと思うが
C++に執着してるやつが輪を掛けてバカだから
このスレはいつ見てもサル山の争い
2023/07/01(土) 15:42:32.57ID:Agv00JYF
この文章読んでc++を擁護してると読めるのはどこまで日本語力ないんやろ
プログラミング能力どうこう言う以前の知能しかない
2023/07/01(土) 15:44:12.22ID:vSBdii75
できることが多いイコール優れているってのが間違い
RDBからカラム制約を外してエクセルのように使って幸せになれるか?
2023/07/01(土) 15:48:16.48ID:Agv00JYF
まぁこの手の論争スレで人の意見を“敵か味方か”に2値で分類して絡んでくるんやろ
そう言う行為がみっともないと考える知能もない
便所の落書きだからこんなもんなんなも知らんどな
36デフォルトの名無しさん
垢版 |
2023/07/01(土) 16:16:02.46ID:fFzDLWcL
RustよりHaskellのほうが安全で速い
2023/07/01(土) 16:51:31.78ID:DYHMlldq
そもそも、STLなんて後から入ったものだから、それを使うことは
強制されて無いのに、STLの欠点がC++の言語としての欠点に
勝手にみなされてっしまってる。
これまでずっと、C++はBetter Cとして使うのが好まれていたのに、
Better Cとして使うのは時代遅れなんていっておきながら、
STLならではの欠点を指摘して、だから、C++を使うのは馬鹿なんだ、
と言ってくる。
Better CとしてSTLではないライブラリを使っている限り、
その欠点は入ってこないにもかかわらず。
2023/07/01(土) 16:58:20.28ID:DYHMlldq
そもそも、C++でもsmart pointerを使うのが必須、などと言っているが、
むしろ、そうすることが煩わしさを生む。
そうすることによって、むしろめんどくさくなったり、分かりにくくなったり
することがあるのだ。
勝手に smart pointer を使うのが必須であるとして、それがとても使いにくい
ことがC++の欠点だと昇華され、だから、Rustでないとダメなんだと。
しかし、smart pointer を大々的に使おうとしたことが煩わしさの根本で
あることに気づいてない。
また、速度比較などでも、伝統的な Better C としての C++ ならば、
STL も smart pointer も使ってなかったから、Rustより速いにもかかわらず、
勝手に「最新のC++のやり方」とその人が思っていものを使って、
遅い結果にしてしまって、それをC++の「最高の結果」だと勝手に断定
してしまう。
世の中には「改悪」という現象がある事をその人は知らない。
2023/07/01(土) 17:04:31.83ID:HHzlehAK
C#でWindowsフォームアプリで作成中にWin10では別途.net coreを配る面倒な事がわかってショックだわ。
Windowsフォームアプリケーション (.NET Framework)にしたいのだが作り直ししか無い?
2023/07/01(土) 17:07:45.38ID:HHzlehAK
>>39
すまん誤爆しました。m(..)m
2023/07/01(土) 17:31:35.89ID:DYHMlldq
マイクロソフトのMFCも欠点が指摘されやすいが、しかし、STLより便利なところもある。
MFCにはなかった問題点をSTLは沢山入れてしまった。
MFCはSTLと距離を置いている。
そして、デファクトスタンダードとしては、現代においてC++を使うとは
MFCを使うことに他ならない。ということは、STLはほとんど使われていない。
にも関わらず、教科書に書いて有るようなSTLの非常に煩わしいやり方を持ってして
C++が使いにくい、と言ってくる。
C++が愛されてきたのは、MFCのせいであってSTLのせいではないことを知るべきである。
2023/07/01(土) 18:38:56.14ID:PswK3kno
プログラマなのによくこんな駄文書けるな
ChatGPTで水増しさせた?
2023/07/01(土) 18:41:37.69ID:Ij0EQZmJ
偏見を承知で言うと
マイクロソフト依存症の人はそんな人が多い
2023/07/01(土) 19:01:28.94ID:kqCQiy8S
C#使いなよ
2023/07/01(土) 19:03:32.57ID:DYHMlldq
C#は絶対嫌だ。
2023/07/01(土) 19:05:40.48ID:ulppHLtb
>>14
Zig使ったこと無いけどエコシステムが整ってるなら使ってみたいな
2023/07/01(土) 19:08:35.56ID:DYHMlldq
そもそもSTLがC++のメインライブラリなどと思っている人は、
C++をまともに使ったことが無い人だ。
2023/07/01(土) 19:17:18.65ID:ulppHLtb
boostだろメインライブラリは
2023/07/01(土) 19:18:04.10ID:X54p6y1Z
C++のテンプレートは理想(言語仕様)と現実(コンパイラ実装)が乖離してたからな
module導入で多少はマシになるかもしれないけどnamespace残したままだからカオス度が増してしまった
2023/07/01(土) 19:23:55.22ID:DYHMlldq
MFCは問題が有ったが、それは主にWin32のWindow関連の
APIとの連携においての話。
STLはそれ以前の問題で書き方がおかしい。
現実にプログラミング経験が少ない人が勝手に考えた感じだ。
2023/07/01(土) 20:02:19.26ID:l24kSvWl
>>36
ライブラリがな
2023/07/01(土) 20:20:46.38ID:uVimT7AM
>>36
HaskellがCやRustより速いとマジで言ってるの?
53デフォルトの名無しさん
垢版 |
2023/07/01(土) 21:49:33.99ID:jAprZXCn
>>39
>昇華
doubt
54デフォルトの名無しさん
垢版 |
2023/07/01(土) 22:14:34.22ID:jAprZXCn
>>38
全体は同意
2023/07/02(日) 01:00:29.09ID:jzpBLYtw
C#に慣れるとMFCでGUIは二度と書きたくない
56デフォルトの名無しさん
垢版 |
2023/07/02(日) 01:02:51.98ID:ieCgx+H2
行列のサイズがでかくなるとシングルスレッドよりもrayonによる並列演算の方が速くなってくるな。
2023/07/02(日) 06:54:41.92ID:jdLDLriS
そもそもMFCはfull freeにならんから
ちょっと前まではそうだった、今もそうだよな

自分用なら、コンソール+C#(OSに同梱の古い枯れたやつ)でいいし
2023/07/02(日) 09:53:50.16ID:UHuzldRb
>>55
開放するの忘れてリークしまくる。
2023/07/02(日) 13:18:42.16ID:Xyim1/0J
GUIがかんたんになったのはここ10年くらいでしょ
それ以前は何を選んでも面倒で難しかった
2023/07/02(日) 13:20:54.90ID:Xyim1/0J
IDEの性能や極まったポトペタ感で昔より作りやすくなってる
言語そのものじゃなくその周辺が作りやすさを決めてるだけじゃないか?
2023/07/02(日) 13:53:16.00ID:Xyim1/0J
RustのGUIってそんなに作りやすいか?
2023/07/02(日) 14:19:07.95ID:fG7MSDtE
GUI用のDSL(マークアップ)がある言語に比べればまだまだでしょ
Rustもマクロ使えばDSLくらいは組めそうだけど
最近は内部ブラウザみたいな代替技術があるから需要が少なそう
63デフォルトの名無しさん
垢版 |
2023/07/02(日) 15:12:58.96ID:BV1CApnr
>>59 難しいと思ったことは一度も無いな
>>61 Tauri は糞
2023/07/02(日) 15:49:02.90ID:OihXi6HP
TauriやElectronはGUIといっても
・マルチプラットフォームでスマホ対応も進行中
・Webと同じ知識技術で作れる
・Webアプリへとの共有や移行が容易
と大きなメリットがあり
VSCodeなどこの方式で成功しているアプリが多数ある
2023/07/02(日) 15:52:44.86ID:nM9kee/9
Rustで全てが非同期かつコンポーネントベースのGUIライブラリを作る機運が生まれてる
描画から全部自前でやる本当のネイティブ版Reactのようなもの
2023/07/02(日) 18:19:31.18ID:owOvhd2B
GUIをC++やRustでやる意味とは
UEだけだろ意味あるの
2023/07/02(日) 18:40:53.06ID:nM9kee/9
>>61
全てがasyncでコンポーネント化されている
これこそ次世代のGUIライブラリとなる
これを作れるのはrustのみ
2023/07/02(日) 19:45:01.65ID:l4k0OEWm
すべてasyncとか死ぬほどめんどくさそう
2023/07/02(日) 19:49:14.43ID:T91CalxQ
いやGUIだとそれが普通なんだよ
UIスレッドでブロッキングAPI使えないのだからその設計が普通
今までのライブラリの設計がミスってた
2023/07/02(日) 19:55:13.31ID:T91CalxQ
このライブラリがかなり理想に近い
https://wishawa.github.io/posts/async-ui-intro/

見てもらえればわかるがほぼReactだ
しかも全てが非同期なので非常に速い
71デフォルトの名無しさん
垢版 |
2023/07/02(日) 20:01:17.15ID:OihXi6HP
そもそもJavaScriptが非同期に動き並行プログラミングだからね
2023/07/02(日) 21:45:39.87ID:aMd0Z/JA
C#もそんな感じだろ
メッセージポンプスレを止めちゃいけないからとか聞いた、そういやそうだよな
モダンだね
2023/07/02(日) 21:52:34.41ID:T91CalxQ
C#は残念ながらブロックする処理を書く場合はスレッドを立てなきゃいけなくて遅い
さらにUIスレッドへの同期コンテキストが必要でその分さらに遅い
2023/07/02(日) 21:59:34.59ID:jzpBLYtw
結局のところOSの描画API呼び出すから、
最終的にUIスレッドに描画任せないといけないのはどのライブラリでも変わらん
2023/07/02(日) 22:04:50.40ID:OihXi6HP
>>74
それは違うんじゃないか
例えばファイル読み書きもOS呼び出すけど
並行プログラミングができていれば
シングルスレッドでもファイル読み書きでブロックされず
待ち時間に他の作業をできるよ
そこにマルチスレッドや描画専用スレッドの必要性はない
2023/07/02(日) 22:08:24.86ID:jzpBLYtw
OSの仕組み理解してなさそう
2023/07/02(日) 22:27:06.93ID:ajw2MJiV
>>76
OSの仕組みを理解していないのは君だ
Linuxならepollなど
WindowsならIOCPなどを勉強しなさい
2023/07/02(日) 22:31:37.38ID:T91CalxQ
なぜ非同期が良いか?
UIスレッドが呼び出しても何の問題もないことが保証されてるから
これはnode.jsが気が付かせてくれたパラダイムシフトだよ
2023/07/02(日) 22:49:45.19ID:OihXi6HP
>>76
並行プログラミングの基本はOSをノンブロッキングで呼び出すところにある
例えばシングルスレッドでもファイルを読み書きしつつ10000個のクライアントと通信するサーバーも作れる
これが並行プログラミング
具体的には>>77のepoll等やあるいはそれらを用いてマルチプラットフォーム対応したlibuvライブラリ等を使う

>>78
Node.js以前から行なわれてきている
Node.jsはそのイベントループ構造部分を内蔵していて
その核心部分をプログラミングできない人でもJavaScriptを書くだけで使える点は大きいね
2023/07/02(日) 22:54:55.66ID:aMd0Z/JA
C++にもco_awaitきてるけど、ああいうのこそ、所有権とか来たらラクに書けるだろうな
コルーチンおもろいぞ、C++erもいっぺん経験してみるべき
2023/07/02(日) 22:59:35.55ID:mbYcfrVi
フロントエンドならRustが活躍できるんだな
2023/07/02(日) 23:07:43.48ID:FpcWXL3u
いいGUIライブラリを使いなさい
2023/07/02(日) 23:09:15.57ID:OihXi6HP
Rustは昔からmioクレートがマルチプラットフォーム対応していて
| OS | Selector |
|---------------|-----------|
| Android | [epoll] |
| DragonFly BSD | [kqueue] |
| FreeBSD | [kqueue] |
| iOS | [kqueue] |
| illumos | [epoll] |
| Linux | [epoll] |
| NetBSD | [kqueue] |
| OpenBSD | [kqueue] |
| Windows | [IOCP] |
| macOS | [kqueue] |
こんな感じ

現在はmioを直接使わなくても
mioの上に並行並列スケジューラを構築しているtokioを使えばよい
2023/07/02(日) 23:47:03.38ID:jzpBLYtw
>>79
ファイルの話じゃなく描画の話をしてるんだが
2023/07/02(日) 23:57:38.16ID:aMd0Z/JA
最近ちょっと(GUIまわりから)離れてるけど、GUIのメッセージキューがメインスレッドに付いてるから、
処理をとっととワーカスレッドに移しちゃうってのは、古くて新しいテーマだよな
2023/07/03(月) 00:14:59.36ID:uVoNxoEf
>>84
ファイルだろうがネット通信だろうが描画だろうが全てソケットに抽象化されているので同じ
2023/07/03(月) 00:21:47.27ID:f710ZASI
C言語が、あるいはそれに連なるC++が業界標準の地位を確立したのって何ともANSI Cの存在が大きい気がします
言語が流行るためには何はともあれ“人が作ったプログラムが自分の環境で試せる”と言うのは大きい。それをちょっと変えてみたらどうなるかとか試してみて学んだりできるのって大きい気がします
今の“業界標準のRust”ってどこが取り仕切っているんですか?
そしてその“業界標準Rust”に収録されてる“標準ライブラリ”の一覧のようなものはどこかで一覧の形で見れますか?、
2023/07/03(月) 00:25:47.65ID:t+8O8Mfo
epollって並列待機処理でそもそもの待機側を開放したい
async/awaitとは別の話題だと思うんだが
2023/07/03(月) 01:22:18.45ID:5E3kHz23
>>87
https://www.rust-lang.org/ja/governance

Rustユーザがもっと増えて
gccrsのように他にもコンパイラが出てきたら
規格が必要になってくるかもね
2023/07/03(月) 01:36:25.99ID:uVoNxoEf
>>88
同じ
(スレッドを使う並列でななく)並行処理を行なうコードを自分で書いてみるとわかる
I/Oを非同期多重化することになる
ためselect/poll/epoll/kqueueを用いたイベントループがスケジューラ相当として核をなす
それを直接使う未分化な原始的な利用から始めて、
次にコールバック方式による単純分離、
さらにpromise/futureによる抽象化、
そしてasync/awaitによる糖衣構文、
と進むことになるが核部分はもちろん同じ
2023/07/03(月) 01:37:43.68ID:7CVvhqQm
>>89
thx
92デフォルトの名無しさん
垢版 |
2023/07/03(月) 02:06:46.42ID:bFZG83Bf
サイズの大きい配列って結構コピーの部分で時間が取られるのかねえ?GUI周りの話ではないが。Rustでnumpyライクなライブラリを作っているからそこら辺は気になる。
2023/07/03(月) 02:28:24.34ID:+YxiNHjZ
>>88
async/awaitって元はただのブロックしないコールバック付きの関数だよ
2023/07/03(月) 03:05:22.10ID:3IqJ4QRg
と言うかRustの利点はそこにあるんやろ
特に返り値のとき
返り値に大きいサイズのObjectを返すときが問題
その場合Cでは返り値のどデカい構造体を呼び出し側のスタック領域にコピーする手間がどうしてもかかってしまう
それを避けるには
・返り値をヒープに領域確保して返す
・呼び出し側で受け取りようの空の構造体領域を呼び出し側スタックエリアに確保してその参照を渡して返り値をそこに書き込んでもらう
くらいしかない
しかしヒープにわざわざ永続的には存在する必要のないデータの受け渡しのためエリアをとるとフラグメンテーションの原因になるし、呼び出し側が返り値の大きさをあらかじめ計算してから領域確保して呼び出さないといけないのはメチャクチャ手間がかかってしまう
Rustなら返り値の構造体をダイレクトに呼び出し側のスタックエリアに確保できる(と思う、未確認)のでそこでパフォーマンスの優位性が出る(ハズ)
今のC,C++にはこのメカニズムを実現する方法はないと思う
2023/07/03(月) 03:22:41.96ID:+YxiNHjZ
>>94
別にそこに関しては今やRustもC++も大して変わらんぞ
今のC++はreturn時に余計なコピーをしないようになってる
2023/07/03(月) 03:24:05.61ID:5E3kHz23
RVO?
2023/07/03(月) 03:37:51.42ID:80Y4MX+q
>>95
そうなんだ
CとかC++は必ずコピーが発生するからどうやって回避するかでの定石習ったけどな
今はコピー回避できるんだ
2023/07/03(月) 04:29:45.61ID:+YxiNHjZ
>>97
今のC++コンパイラはめちゃくちゃ賢くなってて
最適化できる処理はほぼ全て最適化する
特にreturn時や引数に渡す場合の処理で最適化して問題ないと判断されるとほぼ最適化される
2023/07/03(月) 04:35:39.10ID:+YxiNHjZ
>>92
めちゃくちゃ遅くなるよ
現代のアーキテクチャでは無駄なアロケーションやコピーが1番遅くなる要因
1番速いのは当然同じ領域を使い回してそこに書き込むようにすること
キャッシュも効くし無駄なアロケーションが発生しない
ただし副作用と可読性の低下という犠牲を払う
速度と安全性はまさに水と油
2023/07/03(月) 04:46:33.55ID:mO9TuvlK
>>98
その“コピー回避”の方法は“ヒープを利用して回避”ではなくて“呼び出し側のスタック領域を利用する”で回避してるんですか?
ソースあります?
2023/07/03(月) 04:48:48.70ID:+YxiNHjZ
>>100
https://cpprefjp.github.io/lang/cpp17/guaranteed_copy_elision.html
2023/07/03(月) 04:56:04.09ID:+YxiNHjZ
prvalueとかxvalueとかの値のカテゴリについてはこちらが詳しい
https://cpp.rainy.me/037-rvalue-reference.html#%E6%A6%82%E8%A6%81
2023/07/03(月) 05:46:02.09ID:6xMIl2cM
>>102
thx
でもコレやっぱりこの機能をスタック領域でやってるのかどうかの明言はないですね
上の方で誰かが言ってたんですけどC++のスマポ絡みは全部ヒープでやってるって話があったのでどうなんだろと
この問題はとても難しくて私勉強してた頃は解決できてなかったんですよ
例えば

object theFunc(){
object a,b;
.......
if comp( a, b) {
return( a );
} else {
return( b );
}
}

のようなコードの場合コンパイラは実際に変数aかbかのどちらが返り値として返されるのか決定する事はできません
もうこのような場合にはほとんど必然的にコピーするしかなくなります
回避する唯一の方法はobject a,bの両方を呼び出し側のスタックに確保して使わなかった方のobjectは呼び出し側スタックの穴として我慢します
もちろん一時的にスタックに穴が開きますがその呼び出し側の処理が終われば全部御破算にされるので目を瞑る作戦です
なんか聞こえは悪いですがスタック領域中に使われる変数でほんの一瞬しか使われない変数なんか山のように出るものなのでそれを一々気にしてたらキリがありません、問題視しないといけないのは永続的に残るヒープ領域のフラグメンテーションです
じゃあいつでも何でもかんでも呼び出し側のスタックに返り値を受け取る領域確保すればいいのかといえばそれもウソでほんの数バイトの情報しかないならいる分だけコピーしていらないデータは綺麗さっぱり消してしまった方がいい時もあって、どちらが良いかコンパイラは判断する方法がCでは中々解決できないみたいな事習った記憶があります
Rustならできるのかはまだ勉強中なのでよく分からないですけど
2023/07/03(月) 06:42:22.66ID:YLpV4/YA
スタックの穴ってなんのことぞや

関数等の行き返りで、intptr_t以上のものを受け渡ししようっていうのが、そもそもの無理筋感があるんだよな
rvalueを渡すなんていうのは、渡しているのやら、いないのやら

C++時代は、自信のないことはしない、だったんだ
2023/07/03(月) 06:49:45.31ID:YLpV4/YA
>>102
どうせならこっち https://github.com/EzoeRyou/cpp-intro/blob/master/037-rvalue-reference.md
2023/07/03(月) 08:24:46.39ID:Pxa6JMwc
最適化しすぎるが故に、未定義を踏むとこういう事も起きてしまうという
https://cpplover.blogspot.com/2014/06/old-new-thing.html
107デフォルトの名無しさん
垢版 |
2023/07/03(月) 08:42:15.29ID:bFZG83Bf
何かRustだとreturn時にコピーが行われてるような気がする。
2023/07/03(月) 08:58:28.64ID:gVPXZxAL
std::move() もそうだが、最低限のコピーはしないといかんぞどうせ
生成コードみてみろよ C++ならそうするので、取るべき行動は同じ
109デフォルトの名無しさん
垢版 |
2023/07/03(月) 09:05:18.13ID:XqdEtb//
要はAddAssignとAddだと計算結果は同じでもAddAssignの方が圧倒的に速いという現象が起こったりすることがある。これはAddだとコピーをリターンするのに対してAddAssignだとselfの値は同じメモリ上で書きかえられてreturnによるコピーがないから。
2023/07/03(月) 09:32:31.64ID:XuaWdgM7
確かに WideCharToMultiByte/MultiByteToWideChar は毎回

容量確認で1回目呼び出し

確保して

容量指定して2回目呼び出し

面倒だと思ってた
2023/07/03(月) 09:54:04.75ID:gVPXZxAL
毎回書くからだろ、ライブラリ(コードスニペット)にしちゃえw
2023/07/03(月) 10:05:14.03ID:kK4jJ7eL
コンパイラが吐き出すコードなんて意図通りにならない
疑い深いなら細かくチェックしながらアセンブラで書くしかない
ループ内の重要な変数はレジスタを使っているか
無駄なコピーが無いか
ループ部分に無駄な関数呼びだしが無いか
実際のメモリに読み書きしやすい順序でデータが並んでいるか
最初に必要なメモリを一括でOSから取得しているか
最適な命令を使っているか
キャッシュ汚染が無いか
2023/07/03(月) 10:10:50.88ID:gVPXZxAL
アセンブラで書いてすら、意図通りにならないくらいに思っとけってばっちゃんが言ってた
(適当に分割して、複数パイプラインに流し込まれたりするから)
2023/07/03(月) 11:59:58.23ID:fwYpLKgv
>>96
RVOだよなぁ
2023/07/03(月) 16:06:04.98ID:+YxiNHjZ
>>103
その場合はムーブコンストラクタ実装しとけば良い
参照でない値のリターンは自動で右辺値参照となる
2023/07/03(月) 16:10:20.37ID:+YxiNHjZ
このようにC++は色々複雑すぎてもはや普通の人が理解できるものではなくなったので
素直にrust使おうよという振りなんだけどね
2023/07/03(月) 16:16:32.89ID:5E3kHz23
Rustだとどうなるの? ソースで例示プリーズ
2023/07/03(月) 16:53:27.10ID:uVoNxoEf
たとえば64bit二つ分を返すと

#[derive(Default)]
struct Foo { a: u64, b: u64, }
impl Foo {
fn new(a: u64) -> Self {
let mut foo = Foo::default();
foo.a = a;
println!("foo: 0x{:p}", &foo);
foo
}
}

fn main() {
let fff = Foo::new(123);
println!("fff: 0x{:p}", &fff);
}

レジスタ返しができる範囲なので両者のアドレスは異なる
foo: 0x0x7ffc3e73a6d8
fff: 0x0x7ffc3e73a740

一つ増やして64bit三つ分を返すと
struct Foo { a: u64, b: u64, c: u64, }

レジスタ返しではなくなり
いわゆるRVO (Return Value Optimization)
呼び出し元main()のスタックフレームに直接書き込むため両者のアドレスは同じになる
foo: 0x0x7ffc03863d78
fff: 0x0x7ffc03863d78
2023/07/03(月) 17:12:42.36ID:uVoNxoEf
前者のアドレスが異なる場合というのは
レジスタ上だけで済むところを敢えてアドレス表示させているため
実際にはスタックを使わずレジスタのみの利用に成りうることを意味してることに注意
2023/07/03(月) 18:59:43.08ID:MgkFcxqO
なるほどrustは呼び出し元スタックに直接値返せるのね
コレはC++でできるんですか?
2023/07/03(月) 20:50:38.98ID:5E3kHz23
$ cat test.cpp
#include <iostream>
#include <cstdint>
using namespace std;
struct Foo {
uint64_t a;
uint64_t b;
static Foo new_ (uint64_t a) {
Foo foo; foo.a = a;
cout << "foo: " << &foo << '\n';
return foo;
}
};
int main () {
auto fff {Foo::new_ (123)};
cout << "foo: " << &fff << '\n';
return 0;
}
$ g++ -O0 -std=c++20 -o test test.cpp
$ ./test
foo: 0x7fff0bbf3540
foo: 0x7fff0bbf3560
$ g++ -O3 -std=c++20 -o test test.cpp
$ ./test
foo: 0x7ffed05f53a0
foo: 0x7ffed05f53a0
2023/07/03(月) 21:12:04.60ID:MgkFcxqO
>>121
それは呼び出し側のスタックですか?
2023/07/03(月) 21:12:23.79ID:5E3kHz23
NRVOなのでいつも効くとは限らない?
2023/07/03(月) 21:15:14.72ID:5E3kHz23
>>122
0x7fff0bbf3560と0x7ffed05f53a0は呼び出し側のスタックなのでは?
2023/07/03(月) 22:09:08.78ID:+q7z5VN1
たったそれだけのことを
ヒープから確保してガベージコレクションで解放する重い遅いプログラミング言語がほとんどの中
C++とRustが優秀すぎるハイレベルな戦い
2023/07/03(月) 23:25:23.71ID:MgkFcxqO
>>724
そうなんですか?
厳密にいえば>>118のコードにしても関数側の変数のアドレスと返されたアドレスが同じである事の確認に過ぎず、つまり値を返す時にコピーがされてない事の確認にすぎません
それがヒープなのか、呼び出し側のスタックなのかは分からない
ただRustの場合は>>118の場合呼び出し側のスタック領域が利用される、その技術をRVOと呼ぶとアナウンスされているのに対してC++の方では今の所そのような情報ないので分からないのでは?
単にヒープに確保してるだけかもしれない
2023/07/03(月) 23:28:41.59ID:MgkFcxqO
あ、いや、今ググったらC++でもRVO実現してるみたいですね
失礼しました
しかし本当にそのアドレスの数値が一致していることだけでRVOが効いてる事の証明にはならないとは思います
2023/07/03(月) 23:31:27.59ID:MgkFcxqO
あ、よくよく読んだら「RVOとは戻り値返す時にコピーしない技術のこと」であって「呼び出し側のスタックを利用するかどうか」は別問題のようですね
まぁだからC++もRustも両方ヒープ使ってRVOしてるだけかもしれない
2023/07/03(月) 23:46:31.39ID:uVoNxoEf
ヒープが勝手に使われることはない
ヒープとスタックは空間を通常分けてありアドレス値も見ればわかるくらい異なる値を使っている
単純なローカル変数のアドレス値との比較からスタックのアドレス値かどうかすぐわかる
2023/07/03(月) 23:47:11.84ID:5E3kHz23
>>128
根拠までは示せんが
俺はC/C++とやってきて
関数にnewを直接/間接に呼び出さなずにインスタンスを作れば
スタックに確保されるという認識だな
なのでRVO効いてれば呼び出し側のスタックに作成されるという風に考えている
131デフォルトの名無しさん
垢版 |
2023/07/04(火) 00:03:31.80ID:axzJnblJ
Rustはリターンの場合は多分コピーしてると思いますよ。なぜならサイズの大きい配列の計算において返り値ありときとポインタから直接いじる返り値なしの場合で返り値なしの方が圧倒的に実行速度が速かったから。
2023/07/04(火) 00:16:23.10ID:Z5BWnaiC
推測するな
逆アセンブリ読め
2023/07/04(火) 00:36:27.02ID:+0TfLuMN
少なくとも>>118,>>121ともにRVOが効いててコピーはされてないようには見えますね
ヒープかスタックかは今上がってる実験だけからはなんともいえませんね
この“コンパイラの実装問題”はどんな言語の話でも突っ込んだ話すると必ず出てきますね
言語のregulationで「こういう場合はRVOか働いてコピーはされない、ヒープも使われることなく呼び出し側スタックが確保される事が保証される」みたいな文章が言語のregulationの中に有れば話早いんですけど大概書いてなくてコンパイラの実装依存だったりするしなぁ
2023/07/04(火) 00:36:48.56ID:zEsCcd3F
>>131
コピーしない
>>121のRustコード例のように呼び出し元のスタックフレームへ直接書き込む

もし遅くなっているなら別の要因だろう
たとえば未定義の値を使うことによるバグを一般的に防ぐためにRustは初期化をする
もし初期化をせずとも常に計算値で全て埋めることを保証できれば
unsafeな未初期化を用いてsafeな関数を作り出せる
そして初期化しない分だけ速くなる

もちろん他の要因もありえるためその遅いコードを見ない限り原因はわからない
2023/07/04(火) 01:08:19.71ID:+0TfLuMN
Rustのコンパイラがどういう方法でRVOを実現してるかは多分実装依存で「可能な限りやるようにしろ、プログラマはRVOが働いてくれると期待していい」くらいまでは書いてあるんかもしれないですね
実装としては予想ですけど

・関数のスコープ内でローカルに作られた変数(左辺値?)は原則スタック領域に確保されて関数の処理終了時点で全て解放される
・しかし関数の戻り値として呼び出し側の変数にバインドされて生存期間が伸びた変数は消去されず呼び出し側スタックに残す
・もちろん>>103のような例でコンパイル時点でobject a, object bのどちらを残すか決定できないなら両方残して返り値として使われなかった方のメモリは穴として諦める、どのみちその“呼び出し側の関数”が終了する時点で解放される穴なので諦める

みたいな実装なんでしようかねぇ?
私アセンブラ読めないので確かめられませんけど
2023/07/04(火) 01:50:19.31ID:T/PNhAd4
もし怪しい点があるとすれば>>121のC++側
コンパイルを同じコードに対して最適化レベルを変えて-O0と-O3で比較している
これでは例えば-O3の場合にinlIne化による最適化が起きただけかもしれない
したがってC++側はRVOの証明になっていない

一方>>118のRust側は返す値の大きさの違いで比較して挙動が変わっている
Rust側はRVOの証明になっている
2023/07/04(火) 02:24:25.89ID:H9LDX83D
関数がインライン展開されたら関数間の変数のコピーは省略される
レジスタ変数は参照を取得出来ない
逆にいうと参照を取得したらレジスタではなくメモリ変数(非レジスタ変数)になる

Rustではよく所有権の借用のための参照取得をするけれどそれが
C++ほど最適化されるのでしょうか
2023/07/04(火) 02:44:11.87ID:+0TfLuMN
>>118
の追試

https://ideone.com/6g3Ne2

関数内で2つのFoo型を作ってどっちを返すかコンパイル時には分からない(はす)のコードで実現

fn whichFoo ()-> Foo {
let a = Foo::new(456);
let b = Foo::new(789);
if( true ){
a
}else{
b
}
}
この関数を2回呼んで返り値のアドレスと比較
結果びっくりした

a 456 foo: 0x0x7ffff3242cd0 // 1階目の1項目(返す方)
a 789 foo: 0x0x7ffff3242c98 // 1階目の2項目(捨てる方
fff: 0x0x7ffff3242cd0 // 返り値、1個目と一致
a 456 foo: 0x0x7ffff3242cb0 // 2階目の1項目(返す方)
a 789 foo: 0x0x7ffff3242c98 // 2階目の2項目(捨てる方
fff: 0x0x7ffff3242cb0 // 返り値、1個目と一致

で2回呼んで2回とも1個目のアドレスと一致でRVOが効いてる
のみならず1回目で捨てた方のアドレスが2回目のすてる方のアドレスとして再利用されてる
コレはどうやってんの?
全く予想外
2023/07/04(火) 02:53:28.80ID:ZPezMZV3
そんな気になるなら生成されたコード見たら?
2023/07/04(火) 03:12:41.98ID:w64gVUS7
>>137
最適化される
参照はその値自体を必要としなければ最適化で消え得る

>>138
レジスタ割り当て再利用と同じ
それ以降に使われていなければ領域の再利用の最適化ができる
2023/07/04(火) 03:23:48.80ID:H9LDX83D
>>140
thxです
2023/07/04(火) 07:50:54.82ID:+0TfLuMN
>>141
イヤそれをどうやってんのって話
オレが当然こういうimplementだろうと思ってたのはこう

whichFooが呼ばれてstackが割り当てられる(でもおそらくそのプロセスに割り当てられてるスタックのスタックポインタの上端もらってくるだけだと思うけど)
もらったstackに上から詰めてFoo型のaとbができる
普通に考えて上端から順にaのための領域、bのための領域
この2つは返り値として使用される可能性があるからmainのstackの下端のすぐ下に作ってはおくけどどちらが使われるかは不定

①呼び出し前(♪がsp)
[  未使用域  ]♪| [mainのstack ]
②1回目呼び出し直後
[未使用域]♪[ b ][ a ]| [mainのstack ]

実行時に[a]が返される事が確定、bは破棄されて[a]の真下にspを戻してmainの再開から2回目呼び出されて同じく[a],[b]が作られる

③2回目呼び出し直後
[  未使用域  ]♪[ a ]| mainのstack ]
④2回目の変数領域確保
[未使用域]♪[ b ][a'][ a ]| [mainのstack ]
⑤2回目の変数領域確保
[ 未使用域 ]♪[a'][ a ]| [mainのstack ]

となると予想したら違った
2023/07/04(火) 07:51:01.03ID:+0TfLuMN
今のは運良く最初に確保したaの方が返り値として使われたので簡単に領域bが再利用できるけど、もちろん一般には分からない、なのでコンパイラのできることといえば返り値になるかもしれないbの領域はスタック上端に確保しておいてなるべくフラグメンテーションが起きても被害最小に止めるくらいかなと思ったら違った
(ちなみに残す方と捨てる方逆にしても結果は同じ)
確保されたアドレス見るにコンパイラは最初からaが返されるのを見越して[a]の領域だけをmain側のstackに割り当ててるように見える、1回目も2回目も、そして1回目終了時に回収されたbのためのエリアが再利用されてる
レジスタの場合と徹底的にに違うのはメモリの場合「空いてたら使う」を実現するには“未使用域を完全に把握して新しく領域を確保する時未使用域をなるべく活用する”がかなり難しい事
普通は使用してる下端と未使用の上端の境界にsp置いとくくらいが限界
「使用してるのは①〜②、③〜④、....」なんてできるはずない、できるハズないからフラグメンテーション問題が発生する
もちろんこの“できるはずない”事をやってれば実験結果みたいになって不思議ないんだけど流石に無理じゃないかと
2023/07/04(火) 07:56:44.61ID:+0TfLuMN
でも可能性はあるのかな
プロセス全体で共有されるヒープ全体の使用状況なんか全部管理できないけどローカルの関数に割り当てられたスタックなんてしれてるから使用域、未使用域全部管理してるのかな?
145デフォルトの名無しさん
垢版 |
2023/07/04(火) 09:22:16.43ID:X5jhzPkA
Rustで標準的なチャート生成(グラフ描画)ツールは何ですか?
2023/07/04(火) 10:49:51.72ID:0JerF0m8
>>136,137
なるほどー
Rustはinline展開しないの?
2023/07/04(火) 11:02:31.68ID:XZOUnAWZ
>>142
話は単純
>>138のifでtrueで恒真だから最適化で消えた
2023/07/04(火) 11:18:09.81ID:XZOUnAWZ
>>146
Rustもinline展開される
それとは独立にRustの基本動作として常にRVOが起きる

>>118のコードを
debug mode ← cargo run
release mode ← cargo run -r
の2種類で実行すると

➀debug modeでstruct Foo { a: u64, b: u64, }の場合
 → fooとffiは別アドレス
このdebug modeではinline最適化はされていない
レジスタ返しできる範囲であるため別アドレス

➁release modeでstruct Foo { a: u64, b: u64, }の場合
 → fooとffiは同じアドレス
これはrelease modeでinline最適化がされたため同じアドレスとなった

➂debug modeでstruct Foo { a: u64, b: u64, c: u64 }と大きいサイズの場合
 → fooとffiは同じアドレス
これは➀によりinline最適化はされていない
レジスタ返しできる範囲を超えてるためmain()スタックフレームに直接アクセスしている
2023/07/04(火) 11:53:43.89ID:0JerF0m8
>>121を-fno-inlineをつけてビルドしてみた
$ g++ -O3 -fno-inline -std=c++20 -o test test.cpp
$ ./test
foo: 0x7fffb2b5ee40
fff: 0x7fffb2b5ee40
-fno-inlineでインライン展開されていないとするならRVOが効いている
2023/07/04(火) 13:35:05.06ID:sBWOwVL+
global optimizationがかかったら、どっちにしても、いいようになるのかもしれない
いいようになってくれと思って書くのがいい これはC++もRustも同様
151デフォルトの名無しさん
垢版 |
2023/07/04(火) 15:10:09.42ID:X5jhzPkA
Why you shouldn't learn Rust
https://www.youtube.com/watch?v=kOFWIvNowXo
2023/07/04(火) 15:58:19.26ID:Ot1h7oR2
良いまとめ

Why You Should Learn Rust
https://zerotomastery.io/blog/why-you-should-learn-rust/
2023/07/04(火) 17:54:17.35ID:fS9gKmDv
>>147
せやね
かなぁとは思ってたんやけど時間なくて試せなかった
whichFoo()の条件式を時間のsystem時間の下一桁が奇数か偶数かで決めるように変項したら当たり前みたいにRVOが聞かなくなった

https://ideone.com/T6QJKv

まぁそりゃそうかもね、aかbかどっちが返されるか分からないのに両方とも呼び出し側stackに領域確保してまでRVO効かす事はしないみたいやね
もちろん「フラグメンテーション上等、ローカルスタックに穴開いてもその処理終わるまでなんやから無視、無駄コピーしない事最優先」って実装もできたんやろうけどそうはなってないみたいやな
多分この辺は実装依存なんやろ
154デフォルトの名無しさん
垢版 |
2023/07/04(火) 18:53:05.89ID:axzJnblJ
Rustはなんでsimd命令を安定版で使えないんだろうか。
2023/07/04(火) 19:16:47.25ID:Z5BWnaiC
A-simdラベルつきのissues一通り読んでくれば
2023/07/04(火) 21:51:42.30ID:SetT7x0B
>>145
いろいろある
"Rustでグラフをplotするライブラリのまとめ"
157デフォルトの名無しさん
垢版 |
2023/07/05(水) 01:56:15.57ID:jiFtnYl0
多次元配列の実装ってブロードキャストのところが結構ムズいな。今かなり苦労してるわ。とりあえずnumpyのメジャーな機能はすべて実装したものをrust純正で作りたいか。
2023/07/05(水) 05:24:25.09ID:QQHh6K/1
足りない次元を前から詰めていくだけでは?
それでうまく揃えられなかったらエラー
2023/07/05(水) 08:04:26.42ID:y+DtViwf
rustってマスコットも可愛いし
全てが完璧だよな
2023/07/05(水) 08:08:30.35ID:BYWVWFg9
golang なんてマスコットがきもすぎて皆逃げだしたもんな
2023/07/05(水) 10:16:26.75ID:zDnJAWSM
あれは何周回っても逆に良いとはならないのがすごい
2023/07/05(水) 15:06:58.72ID:5Lz4OcyC
>>145
https://github.com/plotters-rs/plotters
2023/07/05(水) 19:58:33.55ID:p4qutnW6
ʕ◔ϖ◔ʔ < 呼んだ?
164デフォルトの名無しさん
垢版 |
2023/07/05(水) 20:49:18.89ID:jiFtnYl0
とりあえず、Rustで多次元配列の実装自体は大分進んできたけど、配列の値は構造体の中にVec型で持つべきかそれとも他の配列構造体においても同じデータをコピーせずに使い回せるようにするために&Vec型で持たせるべきか悩んでるんだよね。&Vec型だとライフタイムの指定とか複数の可変参照について考えなくちゃいけないからだるいんだけど、一つのデータから複数の配列構造体がコピーなしで作れるんだよな。どうするべきか。
2023/07/05(水) 21:19:29.23ID:Svd9YdDH
Rustの基礎常識
長さを変えうる場合を除いて&Vecや&mut Vecの受け渡しをしない
166デフォルトの名無しさん
垢版 |
2023/07/05(水) 21:46:41.90ID:jiFtnYl0
>>165
配列構造体、ここではNdarray構造体と呼ぶことにする。Ndarray構造体に多次元配列のデータを持たせる。ただし、Ndarray構造体は配列の中身の情報をVec型で保持してるとするこれをdata属性と言うことにする。すると、Ndarray構造体の2つインスタンスに共通のdata属性を持たせることがムズいんですよ。キャッシュの効率的に共通したメモリを占有するdataを持たしたいときがかなりあるのでそこで悩んでいるんですね。
2023/07/05(水) 21:50:12.76ID:drWGyPEK
データ構造体をコードで示すべし
2023/07/05(水) 21:59:42.44ID:SEWIBrGC
なにも考えたくなければRc<[T]>でも使ってれば
2023/07/05(水) 22:02:51.53ID:ZkaWWEhA
一応pytorchの例だと_で終わるメソッドはin-placeで配列を書き換える
170デフォルトの名無しさん
垢版 |
2023/07/05(水) 22:06:34.58ID:jiFtnYl0
Ndarray構造体は簡単に書くと以下のような感じになる。
struct Ndarray<T> {
pub data: Vec<T>,
pub shape: Vec<usize>,
pub stride Vec<usize>,
}
実際のコードではTに関する制約条件も入ってるけどここでは本質的ではないので書かないことにする。
Ndarray構造体を多次元配列の要素に関する情報をdataに持っている。shapeには多次元配列の形状に関する情報が入ってる。ここで、2つのNdarrayインスタンスに同じdataを共有しているような感じにしたいんですよ。勿論、dataのコピーはキャッシュの効率的になしということで。
2023/07/05(水) 22:27:08.29ID:Svd9YdDH
途中で伸び縮みするのか否か
途中で値が書き換わるのか否か
2023/07/05(水) 22:30:04.73ID:QQHh6K/1
いやいや数値計算のライブラリでデフォルト共有とかまずないからコピーで実装してくれ
2023/07/05(水) 22:39:25.32ID:Svd9YdDH
>>164で&Vecを渡そうとしていたから何も書き換わらないと判断すると
コピーするのは無駄
2023/07/06(木) 01:08:51.91ID:sds/6LG1
当面コピーでよくね?
numpyの値受け渡しもcall by valueで毎回コピーしてるんじゃないの?
2023/07/06(木) 01:17:08.65ID:FeGm4Src
コピーするメリットがない
普通に&[T]渡し
2023/07/06(木) 01:38:49.41ID:EXYiMe2p
お前らエロ画像ぶっこ抜くときもRust使ってんの?
2023/07/06(木) 02:02:58.99ID:aaYD2+pH
Rustならエロも安全さ
178デフォルトの名無しさん
垢版 |
2023/07/06(木) 03:18:32.83ID:pKHb2iZt
>>172
計算効率の向上のためですね。よく使うような奴はコピーにする様に動くようにしたいですね。
>>171
途中で伸び縮みはしないと思う。
途中で中身が書きかえられたらすごい都合が良い。出来れば途中で中身が書きかえられるようにしたい。
179デフォルトの名無しさん
垢版 |
2023/07/06(木) 03:21:51.88ID:pKHb2iZt
>>175
Rustは構造体の使用的に属性に参照渡しするのが結構ダルいのではと思っています。正直、自分はライフタイムの`aとかいう感じの修飾子に関してあまり理解できてない
180デフォルトの名無しさん
垢版 |
2023/07/06(木) 03:30:31.36ID:pKHb2iZt
>>174
Numpyはデフォルトでは浅いコピー、要は参照で渡してるっぽいです。自分が調べてみた感じでは。
2023/07/06(木) 04:40:27.15ID:ZBNoJ3oS
スレチですが、
k0 レジスタを、opmask レジスタとして predicate
としては使用できない、ということで正しいのでしょうか?
つまり、
EVEX.512.0F.W0 5E /r
VDIVPS zmm1 {k1}{z}, zmm2, zmm3/m512/m32bcst{er}
と書いてある場合、{k1} の部分は、{k2}や{k3}
などを指定できて、EVEX.aaa の部分には、2や3など、
1〜7 の数値が指定できますが、0 だけは指定できないのでしょう
か? しかし、それだと、k0 のビットが常に全て 1 である
という便利な性質が利用できない気がします。
もしかして、たとえば、k2 レジスタに k0 レジスタの値を
代入してから、{k1}の部分を{k2}と書け、と言うことなんで
しょうか。
だとすれば、なぜ、そんな回りくどい事を。
2023/07/06(木) 05:15:09.86ID:FeGm4Src
>>178
書き換えありの場合
同時共有しないなら単純に&mut [T]渡し
共有するならスレッド内かスレッド間か排他制御の粒度や種類はどうかなどで分かれる
例えばスレッド間で共有しつつ書き込みありで排他制御の粒度はスライス全体で読み込み複数同時可ならばArc<RwLock<&mut [T]>>など
2023/07/06(木) 06:11:31.90ID:FeGm4Src
すまん&mutはもちろん不要
Arc<RwLock<[T]>> ね
配列からでなくVecからなら
Arc<RwLock<Vec<T>>> か
長さ変わらないならBox化して
Arc<RwLock<Box<[T]>>>
2023/07/06(木) 08:06:47.31ID:pjKGVGBZ
>>179
それは例えると
「私はC言語を書けますがポインタを使えません」
と言ってるのと同じでマズいな
2023/07/06(木) 12:21:28.35ID:zocpc7Jo
>>164
lifetime 付けたくないなら
struct Ndarray<T> {
pub data: Option<&Vec<T>>,
pub shape: Option<&Vec<usize>>,
pub stride Option<&Vec<usize>>,
}
2023/07/06(木) 12:24:16.16ID:zocpc7Jo
>>176
初めてのRustはエロ収集scrapingツールだった
2023/07/06(木) 14:30:31.20ID:aQspz1Zu
ネタにマジレスですまんが、スクレーピングみたいのってRust得意なんけ
188デフォルトの名無しさん
垢版 |
2023/07/06(木) 14:53:35.46ID:3Kmo4orY
得意かは知らないが非同期io機能が充実しててやりやすい
2023/07/06(木) 17:09:56.98ID:rXBnP+Dg
rustに全てを置いてきた
2023/07/06(木) 21:21:05.78ID:fNr5Fd/6
>>185
ないわw
2023/07/06(木) 21:34:07.17ID:24F0wnkd
シャローコピーってスライス代入と普通の代入の時だけでしょ?
ディープコピーは...演算子を使う
さらにin-place演算子(+=など)は変数を書き換える
それ以外は全てコピーを作って返す
これがnumpy
2023/07/06(木) 21:39:43.66ID:24F0wnkd
ndarrayはスライスをマクロで定義している
さらにスライスはArrayViewを返す
これは真似た方が良い
あとはslice_mut...assignという書き方を踏襲するかどうか
193デフォルトの名無しさん
垢版 |
2023/07/07(金) 02:03:56.84ID:dzAVAX7p
>>192
自分は初学者でも分かりやすいように気本的に配列に関する全ての操作はNdarray構造体に押し込みたいんだよね。
2023/07/07(金) 03:34:18.30ID:LxI5CxNo
ダメそう
195デフォルトの名無しさん
垢版 |
2023/07/07(金) 04:58:02.59ID:puo7kNQ2
オプソのするつもりならRustに反対しないが
オプソにするつもりの無いプロジェクトなら
迷わずC/C++ジャマイカ?
196デフォルトの名無しさん
垢版 |
2023/07/07(金) 11:05:05.39ID:dzAVAX7p
RustでNumpyライクなクレートを制作中だけど、ある程度形になったら公開するつもりだよ。OSSにするつもりだし。
2023/07/07(金) 12:30:09.61ID:98SFipJR
>>193
rust使いに初心者がいるとは思えないのだが
ということはやはりRcで持つということになるんかね
chainerのarrayの実装もshared_ptrで持ってる
https://github.com/chainer/chainer/blob/master/chainerx_cc/chainerx/array_body.h
2023/07/07(金) 13:01:06.40ID:8V8sPKbL
まぁでも実際には難しいやろな
かつてプログラミングの世界を席巻していたPascalを駆逐してCが覇権を握ったのは多分基本的な関数の呼び出し方式をcall by refference からcall by valueね変更したのが大きい
cpuの性能が上がるにつれ整数型とか浮動小数点型の受け渡し時程度なら毎回値をコピーする実装にしてもそれで落ちるパフォーマンスの低下はやはりcall by valueの持つ“読みやすさ、組みやすさ”の優位性が際立ってきた
でもとはいえ毎回呼び出しのたびに値をコピーするcall by valueに全統一するのは無理なので文字列やベクトル処理についてはcall by refferenceをえらべるようなよくいえば柔軟、悪くいえば場当たり的な実装にしたのがCが覇権を握った最大の要因かもしれない
しかし今日さらにプログラミング言語の研究が進んでRVO技術などを利用して"call by valueの文法なのにコピーしない"という事が可能になってきて話が違ってきたのは事実、この先この技術がさらに発展すれば“call by valueを使わないベクトル処理ライブラリ”なんてものが出てきてもおかしくはない
でもこのRVOはまだまだ使いにくい、Rustの資料色々読んでも「関数の戻り値の受け渡しの際必ずしもコピーが発生するわけではない」程度の話しか出てこない、この辺は今現在開発がどんどん進んで行っててまだまだ“企画”としてまとめられる段階にないんやろ
だとすると現状“ベクトル処理ライブラリ”をまとめるならcall by refferenceを使う他ない
問題はその際発生するlife time注釈をどうするかの問題、しかしコレもRustの版が進むにつれ変化している“開発途上”の立ち位置で“注釈の省略”の機能を了して“一才注釈なしで使える”はちょっと難しいかも
199デフォルトの名無しさん
垢版 |
2023/07/07(金) 13:05:19.96ID:ESNGSxIs
>>197
初心者がRustに参入しやすくなるようなライブラリを作ることが目標だから。私自身も初心者に毛が生えたようなレベルだし。
同じ可変参照を持つ構造体のインスタンスが複数作られることを考慮してるからRxとかArcを使うことになる可能性は高い。
2023/07/07(金) 13:17:59.91ID:98SFipJR
いや高いじゃなくてw
201デフォルトの名無しさん
垢版 |
2023/07/07(金) 13:29:06.48ID:UaYcujNV
>>198
馬鹿には無理
2023/07/07(金) 15:12:40.92ID:ex1cRp2w
>>198
パフォーマンス?なんか思い込み主導のでたらめな話が書かれてるな
PASCALは教育用の言語でCは高級アセンブラみたいな実用言語
比べるほうがおかしい

pascalはPコードを吐く
Cは実行ファイルを吐く
パフォーマンスを考えるならそこから考えろよ
もともとpascal自体の活躍の場がない

移植性でCがドンドン実用化されてすそ野が広がった
Pascalはほぼ教育分野が主な活動の場であって大学などで2000年代初頭まで主に使われた

1990年中ぐらいから言語自体より何が出来るかの方が重要視されだした
UNIXがらみのCのツール(yacc lex)などを使う実用の方が教育の中心となりPascalが使われなくなった
2023/07/07(金) 16:10:55.60ID:LxMJB/uy
やりたいことが
・変更されない間は同じデータを共有する
・変更が必要になったらそこで自分専用に複製する
であれば一般にcopy-on-writeとかclone-on-write(cow)って呼ばれるパターン

RustにもCowって型があるけどこれは原本がはっきりしてる場合じゃないと使い難くて
全てのデータが対等というか原本が特定できない状況ならRc、Arcのmake_mutで似たようなことができる

ndarray使ったことないけどドキュメント見た感じだとArcArrayが似たようなことしてそう
2023/07/07(金) 16:21:09.69ID:LxMJB/uy
補足というかドキュメント読めば分かるけど
自分以外が参照してない場合は複製しないでそのまま変更するから余計なコピーは発生しない
2023/07/07(金) 16:23:08.62ID:kooiOW/g
>>195
その他にも、英語で検索すると、Rustが向いて無い分野の事を指摘
する人が多い。
この板とは全然違う。
2023/07/07(金) 16:24:54.69ID:kooiOW/g
RustがC/C++と比べて向いてない分野は沢山指摘されているが、
・ゲーム
・GUI
・大規模プログラム
・IDEが使いたい人
・パソコン用アプリ

Rustが向いているかもしれない分野は
・CUIの小規模プログラム
・サーバーサイドプログラム
2023/07/07(金) 16:44:26.36ID:+Wkjm5FQ
やべえ全く同意できねえ
パソコン用プログラムってどういうことだよせめてデスクトップアプリとかマシな言い方有るだろ
2023/07/07(金) 16:47:26.05ID:/zlan1BL
>>206はいつものデタラメ君
2023/07/07(金) 16:48:41.65ID:Mh36zzjY
Delphiってpascalじゃなかったっけ?
2023/07/07(金) 16:53:58.33ID:BfxSXh+T
>>208
デタラメに感じないんだけど
2023/07/07(金) 17:30:40.15ID:/zlan1BL
>>210
C/C++とRustは同じ特性(ネイティブコンパイル・GC必要なし・低レベル記述可など)の言語
向いてる向いていないの大きな差異はない
違いとしてはC/C++はこれまでの様々な蓄積(ライブラリや既存システムに書ける人員など)を活かせることがメリット
Rustは後発言語のため言語自体に便利な機能や高度な機能が備わっており開発効率の高さなどがメリット
2023/07/07(金) 17:45:59.16ID:eATRBaQE
Swift・Dartと並んで、LLVMに載ってる最新世代の言語だからな
いろいろと不可能が可能にもなるだろ

ただし、処理系自体がクソデカ
これはclangも同罪
213デフォルトの名無しさん
垢版 |
2023/07/07(金) 18:09:19.57ID:ESNGSxIs
>>203
基本的にはこの感じでNdarray構造体を開発しようと思ってる。変更なしの間はデータを共有。変更時には他のインスタンスとデータを共有している場合は自分用にデータをクローンしてから変更。
2023/07/07(金) 18:11:47.12ID:98SFipJR
>>203
CowArrayというのを内部で使ってるね
Cowと類似したやり方で普遍のスライス配列と所有配列を両方表すことができるとコメントにある
2023/07/07(金) 18:21:22.66ID:98SFipJR
ndarrayよくできてんな
これでいい気がしてきたw
216デフォルトの名無しさん
垢版 |
2023/07/07(金) 18:39:25.19ID:QJ6jblsM
crates.ioとかゴミだらけ
cargo clean すると何GBもゴミが使ってることが判る
2023/07/07(金) 18:46:24.16ID:2SE8uAkh
何GBとかTBの時代に大したことないのでは?
218デフォルトの名無しさん
垢版 |
2023/07/07(金) 21:11:30.29ID:dzAVAX7p
RcとかArcってメモリ安全性が完全じゃないの?
2023/07/07(金) 21:43:23.63ID:98SFipJR
メモリ安全性が完全とは?
220デフォルトの名無しさん
垢版 |
2023/07/07(金) 21:59:23.68ID:dzAVAX7p
>>219
所有権と借用のシステムが完璧に守られること。
2023/07/07(金) 22:26:56.09ID:98SFipJR
>>220
それは変わらんよ
ただ循環参照という厄介な問題が増える
2023/07/07(金) 22:58:09.40ID:i9okElHY
そこはC++でもRustでも同じで巡回参照にならないよう幹をツリー型にして巡回は弱参照にする
2023/07/07(金) 23:39:19.49ID:fK6p0z7V
>>202
TurboPASCALやDelphiを知らないのか?
2023/07/07(金) 23:54:40.55ID:ex1cRp2w
>>223
知ってる何なら両方使ってた
2023/07/08(土) 01:05:12.94ID:Snxto99T
Rustは開発効率が低い。
226デフォルトの名無しさん
垢版 |
2023/07/08(土) 01:06:47.91ID:aF1ddcQd
とりあえずNdarray構造体はArcとMutexを使ってもう一度書き直すことにしたわ。
2023/07/08(土) 01:08:55.16ID:N1xp7KcT
C++と比べてRustの開発効率の高さは誰もが体感できる
2023/07/08(土) 01:12:13.79ID:Snxto99T
使いたい人は使えばいいよ。俺は知らん。自己責任。
229デフォルトの名無しさん
垢版 |
2023/07/08(土) 02:06:58.40ID:aF1ddcQd
C, C++の方がRustに比べて制約が少ない分、ある意味楽に自分の考えてることをコードに落とし込めてたのはあるな。その代わり安全性はあれな訳だったのだけれど。
2023/07/08(土) 02:21:17.48ID:Snxto99T
new や delete も実はとても安全で単純で理解し易い。
void func()
{
 BYTE *p = new BYTE[100];
 (p に対する処理);
 delete [] p;
}
のように単純明確で、最初に new、最後に delete を書くだけ。
そして複雑な場合のケアレスミスを防ぐため、class のコンストラクタと
デストラクタが発明された。それもとても簡単で
class CSome {
protected:
 BYTE *p;
public:
 CSome() { p = new BYTE[100];}
 ~CSome() { delete [] p;}
};
と書くだけでいい。これは定型みたいなもので、何も難しいことは無い。
2023/07/08(土) 02:31:43.22ID:tRB3lUB8
>>230
the rule of 5/3/0違反
ザコ
2023/07/08(土) 02:38:47.91ID:Snxto99T
本当は頭が良い人なら問題なく使える。
馬鹿だからミスや論理間違いを犯すのでnewやdeleteは使うな、
となる。
おおっぴろげに言わないだけで馬鹿な人対策に過ぎない。
なのに、むしろ、頭のいい人を馬鹿な人が馬鹿にする。
馬鹿な人が行く会社や学校では、危険だから禁止、となる。
しかし、頭のいい人が行く会社や学校では何も言われない。
そういうことがある。むしろ、効率を高めるため使うべきで
ある場合があるからだ。
2023/07/08(土) 02:41:12.58ID:Snxto99T
なぜ禁止にするかと言えば、
「おまえらは馬鹿が多いから、禁止にしないとミスばっかり犯すから。
 おまえらはザコ要員として雇っているに過ぎないのに、
 頭がいい人限定の仕組みを使っていいわけない。」
と上の人は心の中にあるからだ。
そして決してそのことには触れない。
2023/07/08(土) 02:43:21.56ID:Snxto99T
普通の学校では「ゲームセンター禁止」となっていただろうが、
頭のいい人しか入れない学校では、別に行ってもいいですよ、
と言われたりしたものだ。
それと同様。
235デフォルトの名無しさん
垢版 |
2023/07/08(土) 03:00:11.97ID:VdwsFu6Q
間違わなければ間違わない
というのはエンジニアの考え方ではないね
2023/07/08(土) 03:09:09.66ID:Snxto99T
要は会社や学校では本当の事を言わないで、「禁止」とだけいうから
それが誰にでも当てはまることだと思って、掲示板に書いてしまう
人が多い。
ところが、それは秀才が集まる組織では当てはまらない。
秀才が当てはまる組織では、「あなたたちにだけ言う、
他の学校/組織には当てはまらない」
から話が始まる。
普通の人達が集まる組織では、そのことには絶対に触れない。
2023/07/08(土) 03:10:02.90ID:Snxto99T
>>235
それ言い出したら、難しいプログラムは出来ない。
速度もRustがC++と同じと言うのは嘘。
しかし、ここの人の知能では理解できない。
2023/07/08(土) 03:12:22.92ID:Snxto99T
>>235
だったらC#やJavaScriptでも使ってなさいな。
2023/07/08(土) 03:15:35.36ID:4uosm6dj
>>230
メモリを確保した関数でそのメモリを解放する簡易なプログラムならばその通り
しかし現実には確保したメモリが他のデータ構造に組み込まれて最終的に解放されるのは別の複数の関数であったり
そこへの参照(ポインタ)が解放時に残っていないことを満たさなければいけなかったり
複数のスレッドで共有することもある
それらが複雑に組み合わさって全てのケースを細かく人間がミスなく管理しきれるかというと無理だ
そしてメモリ管理バグを日々どこかで量産され続けている
2023/07/08(土) 03:16:15.71ID:Snxto99T
>>238
以下の様に訂正する:
「うん。じゃあ、そういう人は Rust を使っていればいいよ」
2023/07/08(土) 03:16:56.52ID:Snxto99T
>>239
そのためにクラスの概念が発明されたんだよ。
242デフォルトの名無しさん
垢版 |
2023/07/08(土) 03:18:11.94ID:VdwsFu6Q
優秀なエンジニアは性善説に頼ったりはしない
2023/07/08(土) 03:19:59.66ID:Snxto99T
頭のいい人にとって便利な方法と、凡人にとって便利な方法とは異なる。
前者にとっては、後者用の方法はメンドクサく、
利便性が損なわれ、記述が長くなり、コーディングに時間がかかる。
頭がいいので、別にバグも入らない。
道具とはそういうものだ。
2023/07/08(土) 03:20:54.59ID:Snxto99T
>>242
程度問題だ。
利便性が損なわれすぎる場合は、安全性が高くても意味が無い。
2023/07/08(土) 03:21:57.34ID:4uosm6dj
>>241
色んな基礎知識を欠いているだけでなく
まともなプログラミング経験がほとんどなさそう
2023/07/08(土) 03:24:16.15ID:Snxto99T
馬鹿な人は、自分と、自分の周囲に人を基準にしか考えられない。
「人間とは沢山ミスをするものだ」
「ミスするとそれを見つけ出して直すのにとても苦労するものだ」
などと。
実は優秀な人は、ミスもとても少ないし、ミスしても短時間で
根本原因を探り当てて、根本治癒できる能力がある。
凡人はそれが出来ないから、Rustが輝いて見えるらしい。
2023/07/08(土) 03:24:55.50ID:Snxto99T
>>245
俺は実世界ではとても優秀だと評価されている。
248デフォルトの名無しさん
垢版 |
2023/07/08(土) 03:25:04.83ID:VdwsFu6Q
>>244
性善説に頼るあなたは下手くそプログラマー
2023/07/08(土) 03:33:15.30ID:Snxto99T
>>248
そんなことない。
人によって能力に大差があるのに、一律に安全性だけを
重視する方がおかしい。
だから日本はプログラミング産業が大成しなかった。
絵と音楽と運動能力だけが才能だと見なし、
生まれながらの知的能力の差は認めない。
そして実験ばかり重視して理論軽視。
この板も、何かと言えば、測定しろ、ばかり。
測定せずに、イマジネーションを働かせて思考実験する
風土が育ってない。
250デフォルトの名無しさん
垢版 |
2023/07/08(土) 03:35:32.85ID:VdwsFu6Q
性善説に頼るという判断ミスはプログラミング以前の問題
エンジニアとしての資質がない
2023/07/08(土) 03:44:16.18ID:Snxto99T
>>250
むしろ、どんなプログラマも同じ制約やレギュレーションに従わなければ
ならないと考えるのは、まさに左翼的な考え。
左翼は個人差を認めず、みんなが同じ様に低め合おうとする。
能力が高ければ十分に安全に使えるのに、その方法を使ってる
人を軽蔑したりする。
「マシン語を直接使っている人は安全軽視だから能力が低い」
などと考えるのか、ということになる。
それは評価軸が間違っている。
252デフォルトの名無しさん
垢版 |
2023/07/08(土) 03:50:33.97ID:VdwsFu6Q
安全でないのはC++ではなくあなた
経験値が足りないのだろう
2023/07/08(土) 03:59:42.63ID:Snxto99T
>>252
違う。
IQと地頭の良さの違い。
2023/07/08(土) 04:08:07.96ID:Snxto99T
アメリカ生まれの「Security 詐欺」という経営方法が有り、
このスレの人はそれを使っている。
「C++は危ないんだから、それを使ってる人は馬鹿、愚か、無能」
と。
Securityの事を言われるとそれに従わざるを得なくなる人間心理を
悪用し、商売に結びつける詐欺商法。
マイクロソフトがOS Updateしない人を悪人扱いするのは、
UpdateのたびにOSを遅くして、新しいOSを買わせる手段。
255デフォルトの名無しさん
垢版 |
2023/07/08(土) 04:12:16.47ID:VdwsFu6Q
エンジニアは願望ではなく事実に基づいて判断する
これは難しいことではないが、向かない人もいる
2023/07/08(土) 04:44:39.71ID:hz58RfSC
>>229
制約していく点はどちらもほぼ同じ
C++てもRustでもメモリ安全や競合に対応するため自分で律して正しく制約してプログラミングする
自分で律して正しく制約できなかった時に違いが出る
C++はコンパイルが通って実行時にミスに気付くかあるいは気付かないまま完成したと思い込む
Rustはコンパイルエラーとなりすぐに必ず気付くことでこの点でも開発効率が高い
2023/07/08(土) 04:52:36.07ID:mpe+rXny
まあ、使わないのは自由なんだよ

所有権。あれはいいものだ
はよC++にも来い
大げさだなと思うような超小コードには使わなきゃいいだけ
2023/07/08(土) 05:07:23.17ID:Snxto99T
>>256
それで開発効率が高くなるかどうかは人による。
2023/07/08(土) 05:54:00.44ID:hz58RfSC
>>258
C++は実行時デバッグとなるため開発効率が低くなる
さらにレア発生のため気付かぬまま実運用に入ってから発覚するとペナルティコストも大きい
早期にコンパイルエラーとなるRustはそれらのコストが不要となる
2023/07/08(土) 05:56:31.34ID:Snxto99T
>>259
メモリ関連バグ以外のバグはRustでも残り得て、それがレア発生
のため気付かぬまま実運用に入ってから発覚することも有り得る。
2023/07/08(土) 06:26:49.21ID:m4s2ktM0
>>246

> 馬鹿な人は、自分と、自分の周囲に人を基準にしか考えられない。

これを言ってるお前が「自分を優秀だと思い込んでる実は馬鹿な人」だと考えると成立するよな
2023/07/08(土) 07:59:41.56ID:hz58RfSC
>>260
C++とRustで同条件の話を持ち出しても反論になっていないよ
2023/07/08(土) 08:44:23.04ID:knIeRqDp
シープラ使ってるハゲって自己評価高いな
2023/07/08(土) 09:35:05.64ID:M6MMYA5O
>>230
virtual 忘れるなよ
2023/07/08(土) 09:39:11.12ID:M6MMYA5O
>>239
>それらが複雑に組み合わさって全てのケースを細かく人間がミスなく管理しきれるかというと無理だ

これまさに
馬鹿には無理
2023/07/08(土) 09:45:26.32ID:M6MMYA5O
>>254
>アメリカ生まれの「Security 詐欺」という経営方法が有り、
>このスレの人はそれを使っている。
>「C++は危ないんだから、それを使ってる人は馬鹿、愚か、無能」
>と。
ほんそれ

>Securityの事を言われるとそれに従わざるを得なくなる人間心理を
>悪用し、商売に結びつける詐欺商法。
その通り
USO800認証取得で金も時間も掛かるとか能率を下げさせる攻撃がまかり通ってる

>マイクロソフトがOS Updateしない人を悪人扱いするのは、
>UpdateのたびにOSを遅くして、新しいOSを買わせる手段。
これは言い過ぎ(気持ちは判る)
2023/07/08(土) 09:48:22.81ID:ONcKyxOd
>>265
どんなに優秀な人たちでもミスを必ずする

Google&Microsoft「セキュリティ脆弱性バグの70%はC/C++のメモリ管理ミスが原因。それがRustを採用した理由だ。」
https://xtech.nikkei.com/atcl/nxt/column/18/00692/042700054/
2023/07/08(土) 09:48:50.55ID:M6MMYA5O
>>259
>>258
>C++は実行時デバッグとなるため開発効率が低くなる
うそ
>さらにレア発生のため気付かぬまま実運用に入ってから発覚するとペナルティコストも大きい
判る
>早期にコンパイルエラーとなるRustはそれらのコストが不要となる
言い過ぎ
269デフォルトの名無しさん
垢版 |
2023/07/08(土) 09:50:07.66ID:M6MMYA5O
>>261
お前モナ
2023/07/08(土) 09:51:51.79ID:M6MMYA5O
>>267
それはC/C++の責任ではない
馬鹿プログラマーに描かせてるのが原因
2023/07/08(土) 09:56:21.11ID:z6h9kmb4
>>270
と、これが馬鹿の思考です
2023/07/08(土) 09:57:58.69ID:ONcKyxOd
>>270
C++の欠陥のせいでセキュリティ脆弱性が多発している現実の記事
C++はメモリ管理ミスを検出すらできないためコンパイルエラーにすることができない
致命的な欠陥のあるC++を今後は捨てていこうという話
2023/07/08(土) 10:49:35.84ID:PpTTWe5V
Rustの次の言語に期待
2023/07/08(土) 11:04:17.25ID:fNvohE+k
メモリ確保と開放位置をきっちり考えて書けないような奴がそれをプログラム言語のせいにしてるだけだな
ここからここまでがどうなってとか理論的に構造を考えれない奴に限って言語が悪いと責任転嫁をする
そういう奴がプログラム書くな
メモリ関連だけじゃなくバグだらけのプログラムしかできない
275デフォルトの名無しさん
垢版 |
2023/07/08(土) 11:10:07.92ID:VdwsFu6Q
間違わないやつは間違わない
は論理的ではない
エンジニアの考え方ではない
2023/07/08(土) 11:12:56.26ID:tRB3lUB8
まあ、>>230のコードが即メモリバグを起こすかというと、そうではない
CSomeは自分しか使わない、自分はその使い方を間違えない、という条件ならたしかにおかしなことは起きない

ID:Snxto99TはこのCSomeをどう「誤用」すればメモリバグが起きるか説明できる?
できないならやっぱりザコだよ
2023/07/08(土) 11:14:38.03ID:7APnxgwh
間違う間違わない以前の問題として理論的に構造を考えて書けないでそれ言語せいにする奴
こうい奴はプログラムを書くな
2023/07/08(土) 11:23:49.72ID:gK2vRDVX
話は簡単で
優秀なプログラマーはC++でもRustでも難なく使いこなすことができる

一方で事実として
C++はうっかりメモリ管理やメモリ競合でミスをしてもコンパイラが通してしまう欠陥を抱えた古い言語
Rustはその場合でもコンパイラがエラーにしてくれる点やC++にない様々な高機能を持つ進んだ言語

結論として
優秀な人たちはどちらも使いこなせるので高機能で便利なRustを使っている
高機能な言語を使いこなせない人たちがC++のみに拘る
2023/07/08(土) 11:35:04.80ID:hU6KuhT0
>>232
>馬鹿だからミスや論理間違いを犯すのでnewやdeleteは使うな、
>となる。
make_uniqueとmake_sharedが規格に入ったから
newとdeleteを直接呼ぶ必要がなくなったから
280デフォルトの名無しさん
垢版 |
2023/07/08(土) 11:35:37.79ID:VdwsFu6Q
優秀なエンジニアは間違わないエンジニアではなく、間違わない方法を考え、選択するエンジニア
2023/07/08(土) 11:48:14.94ID:/jSq4Gja
fn clever_choice() {unsafe {...}}
2023/07/08(土) 12:05:38.94ID:EB0iRg5v
優秀な人しか使えないんでは何時までたっても普及しないのでわ
2023/07/08(土) 12:31:12.90ID:0dKdZ1v3
現在の選択肢ベースで考えれば十分普及してるでしょ
米しかなかった時代の米食の普及率でも目指してんの?
2023/07/08(土) 12:33:13.38ID:777Hyqek
オレはアホなのでアホでも使える方を選びます
285デフォルトの名無しさん
垢版 |
2023/07/08(土) 13:41:39.02ID:0jPiV6IB
開放と解放を間違えるような人が「俺は間違えない!」とか言っても無自覚バカ宣言にしか聞こえないわな
2023/07/08(土) 13:56:46.11ID:p+sO9/0D
ある意味あってるな

有名私立は服装も自由でピンク頭金髪可でピアスも開け放題
一方の馬鹿学校は制服で校則も厳しい
2023/07/08(土) 14:11:41.74ID:Gy8EoznK
>>266
>>マイクロソフトがOS Updateしない人を悪人扱いするのは、
>>UpdateのたびにOSを遅くして、新しいOSを買わせる手段。
>これは言い過ぎ(気持ちは判る)
そんなことない。
「計画的陳腐化」や
「薬物売人の経営論()drug buyer business economics」
などを使っていると言われている。
2023/07/08(土) 14:17:48.79ID:Gy8EoznK
>>279
古いコンパイラは対応して無い。
新しいコンパイラをまともな速度で使おうとすると、
最新パソコンに買い替えが必要となり、OSも全入れ替えが必要
となり、今まで便利に使えていたアプリの大部分が動かなくなる。
そしてアプリは廃版になっていて新しいバージョンも出てない
から買い換えることも出来ない。
Win10にすると、WinXP時代のアプリが動かなくなったりする。
もっと古いものも持ってるし。
だから新しいハードウェアは買わない。
2023/07/08(土) 14:21:53.18ID:M4Y1POjO
セキュリティアップデートなんて商売に関係なく
フリーソフトウェアでもあるだろろうがw
リスクがある状況でUpdateしない奴は悪人だよ
2023/07/08(土) 14:25:44.35ID:Gy8EoznK
>>289
パソコンが遅くなる原因の大部分は、Updateにあるんだが。
Updateしなければいつまでも高速なので買い換えないで済む。
そうするとマイクロソフトが倒産する。
2023/07/08(土) 14:31:35.48ID:Gy8EoznK
言葉だけではどっちが本当の事を言っているのか分からない。
実際のRustのコードを見れば、汚さが分かるし、
CやC++と全く似て無いことも分かる。
汚いと言うのは論理では表しにくいので、言葉では表現しにくいので
あたかも言葉だけではRustには欠点が無いかのように見えてしまう。
292デフォルトの名無しさん
垢版 |
2023/07/08(土) 14:32:02.14ID:M4Y1POjO
>>288
踏み台にされたら皆にご迷惑が掛かるとか考えないのね
人と一切関わっては駄目だよ
ネットワークに接続しても駄目
293デフォルトの名無しさん
垢版 |
2023/07/08(土) 14:33:34.46ID:M4Y1POjO
>>291
俺はC++ユーザだが
make_uniqueもmake_sharedもないお前のC++とは一緒にされたくない
2023/07/08(土) 14:34:51.65ID:Gy8EoznK
Rustの本を見てみたら、冒頭のOS環境として
Linux
MacOS
Windows 10
の順序で書いてあった。
まさに、オープンソースカルト左翼であることを目の当たりにした。
295デフォルトの名無しさん
垢版 |
2023/07/08(土) 14:46:14.76ID:M4Y1POjO
>>294
じゃその「カルト」を支援しないように
「カルト」の製品は使わずに生きて下さいね?
2023/07/08(土) 14:49:30.87ID:Gy8EoznK
>>295
個人が望まなくても使わざるを得なくされてる。
個人には実質的な投票権が無い。
2023/07/08(土) 14:56:05.98ID:p+sO9/0D
ある意味この人は保護対象じゃないのかと思った
2023/07/08(土) 15:08:40.55ID:suNzn+84
>>296
40年前くらいの生活をすれば良い
40年前にも人は生活していた
批難するなら依存してはいけない
甘えるな
2023/07/08(土) 15:14:57.62ID:Gy8EoznK
>>298
オープンソースが無かったころの方が日本は豊かだったし、
将来も輝いており、経済も優秀だった。
オープンソースカルトが流行るに従って没落していった。
2023/07/08(土) 15:19:13.13ID:suNzn+84
>>299
だからその日本が輝かしかった時代の水準で
生活してね
それと相関と因果の違いは理解してね
2023/07/08(土) 15:19:27.20ID:/jSq4Gja
俺らと話しても薬物治療の代わりにはならないよ
2023/07/08(土) 15:22:48.26ID:Gy8EoznK
悔しいのお。左翼どもよ。いくら頑張っても
Rustは流行らないと言う事実は変わらないよな。
2023/07/08(土) 15:32:10.56ID:suNzn+84
>>302
お前はC++20の開発環境を用意しろ
304デフォルトの名無しさん
垢版 |
2023/07/08(土) 15:37:47.72ID:409zOGbF
日本はIT技術者が少ないんだから、これからは世の中のOSSではない外国製のソフトからは多めに税金を取るくらいの姿勢でよい。
OSSはIT弱小国家にとっては唯一の活路でしょ。今の中央集権の先駆者総取りのIT業界は残念ながら日本には不利だ。
305デフォルトの名無しさん
垢版 |
2023/07/08(土) 16:06:29.07ID:409zOGbF
Ndarray構造体を全てArcとMutexで書きかえたけどそんなに実行速度が落ちなかった。
2023/07/08(土) 16:08:46.88ID:b8BxfChJ
>>302
大学でちゃんとソフトウェア工学なりプログラミング言語なり勉強した経験はあるん?
2023/07/08(土) 16:14:43.78ID:C0afRZOI
>>305
スレッド間で試した?
2023/07/08(土) 16:18:14.17ID:auRxfwEH
>>306
俺の話は置いとけ。
Rustを作り始めた筆頭プログラマは、大学の専攻はバイオで
真菌を研究しており、真菌の生命力に見せられてRustの名は
真菌の一種から採ったんだそうだぞ。
そしてそのような工学とは縁もゆかりもない人が作った
言語を有りがたそうに崇拝しているのがRust信者なんだぞ。
2023/07/08(土) 16:19:44.04ID:auRxfwEH
Rustの速度の見積もりが間違っているのが前から謎だったが、
数学とは縁が無い人が作ったからだったんだな。
2023/07/08(土) 16:23:14.66ID:auRxfwEH
>>306
俺はそんなpopularな学科には行って無い。
311デフォルトの名無しさん
垢版 |
2023/07/08(土) 16:25:41.23ID:409zOGbF
>>307
まだ、スレッド間は試してない。
とりあえずArcとMutexが単スレの時にオーバーヘッドが出ないかが個人的に懸念だった。
2023/07/08(土) 16:34:49.31ID:auRxfwEH
>>304
しかし、OSSには「水源枯渇問題」が有る。
消費者の財布を水源に見立て、山の上流に置いて有る様に見立てる。
OSSが蔓延すれば、その水源が枯渇するのだ。
313デフォルトの名無しさん
垢版 |
2023/07/08(土) 16:41:49.73ID:aF1ddcQd
水源とは何か良く分からんが、OSSでアメリカの大手ITをぶっ潰せるような仕組みを作れば日本には大きな得がある。出遅れた日本にとれる選択肢は少ない。
ビットコインのような非中央集権型のシステムを日本はITの全分野で押し進めていくべき。
2023/07/08(土) 16:43:47.67ID:gK2vRDVX
優秀でないから様々なオープンソースソフトウェアを使いこなせないのだろう
Rustのアンチ活動をしている人のレベルの低さを知った
2023/07/08(土) 16:44:42.96ID:u2zK5bfH
>>310
大学では何やってたん?
2023/07/08(土) 16:47:18.72ID:svPDr0rA
情報系産業は資本代替性が高いとは言うが殆どそれは資本力勝負となりアメリカには勝てない
なので別の方法で勝負しないといけない
流石にここまでのビッグテック支配は居心地が悪い
2023/07/08(土) 16:49:51.85ID:auRxfwEH
>>316
技術と言うより金の問題になっている気がするな。
金で優秀な人や企業を吸収したり、あるいは、検索エンジン用や
AI用のスパコンみたいなものを持っていたり。
いまのITは大量のプログラマやデータセンターが無いと成り立たない様になってきている。
318デフォルトの名無しさん
垢版 |
2023/07/08(土) 16:56:40.99ID:aF1ddcQd
>>317
パブリッククラウドを国家が無償で日本国民に開放するべきだと思う。日本はアメリカの様に大規模な資本家がいないので政府主導で計算資源を国民に開放してくべきだと思う。
2023/07/08(土) 16:57:28.70ID:svPDr0rA
AIなんかも結局はぶん回し勝負ってことで電気エネルギーを如何に大量に安価に調達出来るかが勝負となってきている
なのでマイクロソフトやGoogleは核融合発電の研究開発に躍起になっている
資本さえあればなんとでもなる世界になってしまった
2023/07/08(土) 16:59:21.48ID:auRxfwEH
左翼がオープンソース化を進めた結果、ソフトウェアを個人で作って
売れる時代が終わってしをいました。
2023/07/08(土) 17:01:20.34ID:auRxfwEH
>>318
沢山の人が使うと一人当りの計算リソースが減ってしまって、
使い物にならなくなる。
2023/07/08(土) 17:01:33.20ID:DfgvMNWU
ID:auRxfwEHは自分で優秀と言うくらいだから
少なくともドクター取ってるんやろね
あれだけ自分で言っててまさか学部生ってことはあるまい

でも
発言からはアカデミックな香りを感じさせないのよね
数学や工学のバックグラウンドが見えないと言うか
文系かまったく畑違いなとこから来てるのかな?
2023/07/08(土) 17:10:00.07ID:p+sO9/0D
NECや銀行とかでメインフレームを触ってた70代のおじいちゃんでしょ
2023/07/08(土) 17:18:52.84ID:DfgvMNWU
なんか山に籠もって一人でPC触ってるアマチュアって感じなんだよ正直

仕事からも学問からも遠いっていうか
自分たった一人でおうちで夢見ながら喋ってるような
批判や競争や責任からすごく遠いところに引きこもってるような
325デフォルトの名無しさん
垢版 |
2023/07/08(土) 17:58:46.48ID:M4Y1POjO
>>320
そもそもゼロコストで無限に複製できるものを
製造個数に比例してコストが掛かる有体物であるかのように
扱っているマネタイズ方法に無理がある
俺は価格が適正値に近づいただけだと思うね
2023/07/08(土) 18:05:27.13ID:C0afRZOI
急にどうした?
発狂してからに
支離滅裂で会話が成立してないぞ
まずは強いお薬を飲め
2023/07/08(土) 18:06:54.48ID:C0afRZOI
>>311
スレッド間じゃないなら最適化されちゃうよ
2023/07/08(土) 18:18:03.03ID:SdplvoMh
Rustのライフタイムの型注釈についてちょっと真面目に資料読んでみたいんだけど「こういう時困る、だからこうしよう」的な文章しか転がってない
ちゃんと論文レベルで解説してる文章とかないですかね?
2023/07/08(土) 18:32:09.99ID:p+sO9/0D
ありませんね
次の患者さんどうぞー
2023/07/08(土) 18:41:14.61ID:Yg5OnBqY
>>328
現状の公式ドキュメントとしてはたぶんNLLのRFCが一番詳しいと思う
2023/07/08(土) 18:43:49.70ID:gK2vRDVX
>>327
確認したことないからわからないけどSendしていないからといってそんな最適化するかな?

まずまったく異なる型のArcをRcへ変えてしまう無茶はしないはず
ではArcの中身のAtomicUsizeをusizeにしてしまう最適化をするだろうか
その両者の速度差はndarrayの計算覧ハと比べて微々bスる誤差にすぎbネい話だと思う
Mutexについても同様で最適化するとしたら丸ごと無くすことになるがそれは考えにくい

一方でスレッド間テストをすれば競合時のlockのwaitが起きるなどで少し遅くなる可能性はあるが
それはどのようにコードを書いても必須で避けられない正しい行為
2023/07/08(土) 18:51:22.44ID:SdplvoMh
>>330
そうなんですか?
探してみます
ともかく“ライフタイム注釈”って“コンパイラが決定(推論)できないライフタイムを注釈する必要がある”というものらしいけど、どんな時は推論できてどんな時は推論できないのかさっぱり分からない
普通のHindley–Milner (HM) type systemとかだと論文レベルで解説文書がネットに転がっててわかるんですけど、ライフタイム注釈についてはどんな範囲では推論が可能なのかとか資料がひとつも見つからない
2023/07/08(土) 18:52:33.75ID:auRxfwEH
日本の工学系は教授ですらIT技術の良し悪しを語る資格は無いのに。
2023/07/08(土) 19:03:14.40ID:x767qEv3
このスレは各言語の特徴的なキーワードだけを参考にしている。
どっちが優れているとかどっちがゴミだとかという話は全く参考にならない。
2023/07/08(土) 19:11:01.12ID:p+sO9/0D
>>332
論文レベルじゃないと理解できないのは困りものですね
2023/07/08(土) 19:11:09.06ID:Yg5OnBqY
>>332
lifetime elisionは別に推論じゃないぞ
borrowckとしてはライフタイムは必ず事前に注釈されなくてはならない
一部のよくあるパターンで省略を許可する、人間のためのルールがelision rules
337デフォルトの名無しさん
垢版 |
2023/07/08(土) 19:11:28.76ID:VdwsFu6Q
Rustについて安全であるということだけを切り取って議論しているのは、現場も現実も知らない阿呆
2023/07/08(土) 19:16:23.21ID:gK2vRDVX
>>332
考え方が逆
ライフタイム注釈はコンパイラにとって常に必要
だからライフタイム注釈するのが基本しかしそれを省略することができる状況が多々あって
その省略された時にコンパイラが省略を補う規則が定められている
https://doc.rust-lang.org/book/ch10-03-lifetime-syntax.html#lifetime-elision
lifetime elision rules
The first rule is that
The second rule is that
The third rule is that
2023/07/08(土) 19:18:56.60ID:auRxfwEH
>>337
それ。
2023/07/08(土) 19:19:42.70ID:7vcICBIU
>>332
推論せんよ
だから自分で書く必要がある
2023/07/08(土) 19:32:01.59ID:p+sO9/0D
ここで説明しても無駄だよ
彼は論文レベルじゃないと理解できないんだから
2023/07/08(土) 19:44:44.75ID:SdplvoMh
みなさまありがとうございます
ちょっと私まだ疑問が解決してないです
私の認識書いてみます
私の認識だとrustの“ライフタイム”はコンパイラが確保したメモリを解放するタイミングを決定するために必須のものだと考えています
何故なら効率のためにrustは複数の参照が同じオブジェクトを参照する事を許す“参照の貸与”のシステムを導入してるからです
なので所有権を持ちその参照が切れる前に全ての“貸与”していた全ての参照の“ライフタイム”が切れていなければなりません
コンパイラは貸し出された参照のライフタイムが所有権を持つ参照のライフタイムより長いものが有ればそれを検出し、貸借規定違反としてコンパイル時にそれを検出する事でダングリング参照の発生を防ぐシステムだと認識してます
その“参照のライフタイム”はユーザーが宣言するものではなくて本来ならコンパイラが自動的に拾うべきものだと思ってます
何故ならばrustの参照のライフタイムが「プログラマが好き勝手に自由に設定していい」ものなら結局それは“コンパイラがダングリング参照の発生を未然に検出する”システムになど到底ならないからです
少なくともユーザーが“この関数の返り値のライフタイムは引数のこのライフタイム以前に切れる”と宣言してもその宣言の妥当性をコンパイラが検証しないなら意味がありません、もちろん検証すると思います、具体的には返り値として用意された値のライフタイムがその値を作成した右辺値に現れる参照のライフタイムより長ければその時点で不当なライフタイムの宣言を検出できてそれでコンパイラは不適切なライフタイム注釈を検出できると思います
分からないのはそれなら結局コンパイラはライフタイムをやろうと思えば自分で推論できるのではないかという事です、実際rustの初期のコンパイラでは必須だったライフタイム注釈はいくつかの推論可能なケースでは省略可能になっているようです
じゃあいつダメなのか?いつどんな時なら推論がうまくいかないのかの基本的な理論がよく分からないんです
2023/07/08(土) 19:52:23.40ID:7vcICBIU
>>342
>私の認識だとrustの“ライフタイム”はコンパイラが確保したメモリを解放するタイミングを決定するために必須のものだと考えています

ちゃうよ
2023/07/08(土) 19:53:38.62ID:p+sO9/0D
長文しか掛けんのかこいつは

全部関数など使わないで書けばライフタイム自体は一目瞭然
だが不注意な人はブロックから抜けて死んでる物を参照して使おうとする

それをコンパイラが阻止する
ライフタイムは基本的はこれだけ

これが前段階
2023/07/08(土) 19:59:31.52ID:7vcICBIU
多分GC言語しか使ったことがないのだろう
参照がある限り値が生き続けるというぬるま湯に浸かってるから理解できない
2023/07/08(土) 19:59:33.99ID:mgDMV1th
すいません、私が知りたい事説明するのにこれ以上短くできませんでした
2023/07/08(土) 20:00:38.48ID:p+sO9/0D
それが途中で関数が使われてると戻り値のライフタイムがわからなくなる
入力した引数と戻り値のライフタイムが関連付けられるならその様にしなければならない

仮に a とbが与えられて戻り値がどちらかになるのであれば

「寿命が短い方を共通の寿命」と考えることが必要になる
そうしないと死んでる奴を参照しちゃうから

それを元にライフタイムの範囲を判定してはみ出てたらコンパイルエラーにする
2023/07/08(土) 20:00:57.02ID:7vcICBIU
発想を逆転させな?
「変数が生きている間しか参照は存在できない」
2023/07/08(土) 20:08:08.08ID:gK2vRDVX
>>342
コンパイラはライフタイム注釈の推論をしていない
>>338に公式ソースを示したから読もう!
ライフタイム注釈は原則としてプログラマーが与えるべきもの
ただし例えば1対1に対応しているような、与えなくても自明な場合に省略できる
そして省略されている時にコンパイラが機械的に補うルールが定められている
結果的にプログラムは全てライフタイム注釈されていることになる

つまりコンパイラが推論することはなく
コンパイラがすることは省略を機械的に補うことと
ライフタイム注釈がすべて揃ったプログラムに対してのジャッジ
2023/07/08(土) 20:08:44.10ID:7vcICBIU
参照というのは実体がないと生きられないの
関数の引数や戻り値が参照だけだと実体がどれだけ生きてるかわからんでしょ?
2023/07/08(土) 20:13:07.67ID:p+sO9/0D
ライフタイム自体はコードが書かれた時点で決まってる
それがおかしくないか判定するときのヒントがライフタイム注釈
2023/07/08(土) 20:22:47.98ID:mgDMV1th
>>349
はい、rustは型推論をしないのは知ってます
しかしそれが何故なのか分からないんです
例えばHaskellなら一才の型注釈は省略が可能です
全ての型は全てコンパイラによって推論され、型注釈を入れてコンパイルできるプログラムは型注釈を全消ししても(ただし効率のためにmtoplevel monomorphism restrictionというシステムが邪魔してくれますけどそれ外せば)必ずコンパイラが正しく推論してコンパイルしてくれます、その推論メカニズムの理論的根拠は論文として寄稿されネットにいくらでも転がってます
知りたいのはRustのライフタイム注釈は推論して省略可能だけどいつもいつも省略可能なわけではないのは、
・そもそもいつでも推論可能なわけではないので基本宣言させる、コンパイラが推論可能な限られたケースでは可能としている
・いつでも推論可能(私にはそう思える)のだけど効率を考えてそうしない(Haskell の toplevel monomorphic restrictionと同じように)
のどっちなんだろうと
そしてその話をtegulationに求めないのは必ずしもregulationは最新の研究を反映しているわけではないからです
つまり“現在のregulatinでは推論しない”という現状が必ずしも“そもそも推論などできない”を必ずしも意味しないからです
私ちょっとプログラミング言語論齧ってた事がありましてその辺の理論的背景どうなってるのかちょっと知りたいもので
2023/07/08(土) 20:36:53.33ID:7vcICBIU
お前のお気持ち表明はいらん
2023/07/08(土) 20:42:31.52ID:gK2vRDVX
>>352
Rustは型推論します
非常に便利です

ただし間違った型推論の連鎖を起こす混乱やニワタマ問題などを避けるために
関数の引数値と返値については(ジェネリックを除き)
敢えてプログラマーに明確に型宣言させています
つまり型推論が可能な領域はもっと広いけど
意図的にRustは一定の範囲内に抑えていることになります

ライフタイム注釈についても同様で
推論可能な領域は確かに存在するけれど
意図的にRustは推論をせずに機械的な省略補完ルールの適用のみに抑えていることになります
2023/07/08(土) 20:52:23.19ID:gK2vRDVX
そして明確に型宣言することが基本である関数の引数値と返値についても
ジェネリックな型とそのトレイト境界による制限を用いることで個別の型宣言をさけることができるし
さらに型宣言の位置に「impl トレイト名」という形で静的なopaqueな型指定をしたり
「dyn トレイト名」という形で動的な型指定をすることで
幅広い型を受け付ける関数を書くこともできたり
複雑な型を返す時にそれを明示せずに済むなど
Rustでは型推論とは別のアプローチで利便性と可読性の向上に役立っています
2023/07/08(土) 21:00:55.19ID:p+sO9/0D
ChatGPTみたいなレスだな…
2023/07/08(土) 21:01:52.49ID:CoFTghq/
>>354
そうですね
一般的には“コンパイラにできないわけではない”場合でもユーザーにあえて“注釈をつけさせる”事が非常に便利な場合があります
多分Rustのライフタイム注釈もそれだと思ってはいるんですけど、ほんとにそれで間違い無いのか文書でまとめられたものがないか確認したいんです
HaskellやRustの型推論システムはもう論文でいくつか読んだ事があるのでそのメカニズムもまぁわかります
Rustのライフタイム注釈の場合も多分同じ事ができそうだとは思ってるんですけど敢えてか何故かやってない、それが“できそう”と思ってる自分の勘違いなのか、やはり“できるけど敢えてやってない”のか、あるいは現時点の最新研究でどこまではできることが確認されているのかとかその辺の情報持ってる人いないかなと
2023/07/08(土) 21:16:10.37ID:p+sO9/0D
いやいや
関数を使う人間側が推論不可だろ
2023/07/08(土) 22:06:00.43ID:7vcICBIU
NGでスッキリ
2023/07/08(土) 22:07:59.43ID:p+sO9/0D
ググったら理由が出てきた

基本的に関数シグネチャが変わるような事態を避けたいようだ
関数内部を変更したら推論されるライフタイムを含んだシグネチャも変わってしまう事態が起こりうる

変更で呼び出した側であちこちにボコボココンパイルエラーが出るのはプログラマ的にうれしくないので避けてる
呼び出し規約は人間が決めてそれをコードを書く側が守ると言うこと
2023/07/08(土) 22:12:52.52ID:0dKdZ1v3
Rustは関数単位で色んなチェックしてるけど
その関数が「どこでどう使われているか」を材料にして検証とか推論はしないし
最初からそんなつもりはないと思う

関数を全部インライン展開して1つのmain関数にできれば理論的には全部推論できそうだけど
関数ポインタとかdyn traitを使った動的な呼び出しが絡むと多分無理
Haskellレベルの推論は動的な呼び出しが存在しない参照透過性?が前提にあるはず
2023/07/08(土) 22:13:25.29ID:p+sO9/0D
推論されたライフタイムを含むシグネチャと人間側が思ってる必要なシグネチャ(ライフタイム)と違うことが起こりうる

例えば他人が作ったライブラリのコードが変わって自分のところに波及してきたら嫌だろ?
従来のはそのままで別のシグネチャの関数を作れと思うだろ?
2023/07/08(土) 22:19:22.93ID:+KTtE1Ht
イヤ、ライふタイム注釈の推論に“使われる場所”まで検証する必要はないですよ
関数の返り値を作成してる右辺値を調べればそれで十分だと思います
その単位で返り値のライフタイム注釈が決定されれは、返り値が解放後に参照されるエラーが発生するか否かはその返り値を利用する呼び出し側関数のコンパイル時点で検出できると思います
364デフォルトの名無しさん
垢版 |
2023/07/08(土) 22:20:56.17ID:ugEehqjn
>>332
論文を探す前にチュートリアルを読みましょう
2023/07/08(土) 22:24:17.70ID:p+sO9/0D
せっかくググって答えを見つけてきたのにガン無視されてる…
366デフォルトの名無しさん
垢版 |
2023/07/08(土) 22:24:38.70ID:892HfYmC
いい感じにゴミ集積所になりつつあるな
2023/07/08(土) 22:27:06.38ID:7vcICBIU
ゴミクズ荒らすなよ
2023/07/08(土) 22:30:55.58ID:p+sO9/0D
最初は実質ライフタイムの使い方がわからないと言うのが徐々に軌道修正されて変なところまでたどり着いた
2023/07/08(土) 22:33:04.65ID:5IIZUoQE
>>382
コンパイラが推論する型と人間が想定する型が違うなんてもちろん日常茶飯事ですね
Haskell使ってて:tで推論した型表示させたら「うおーなんじゃこりゃ」と思うことなんてしょっちゅうです
コンパイラは右辺値(haskellでは表現)が提供可能な“最大に一般的な型”を与えようとします、そしてその「提供可能な最大の多層型」の中に関数の利用者が要求する利用可能ないずれかの型が含まれるかどうかを確認して可能ならその単相型を導出し、無理ならコンパイルエラーを吐きます
そして同じメカニズムは多分Rustのライフタイム注釈でも可能なはずです
しかしいくつか当たったRustのライフタイム注釈の解説文書のなかにはあたかも「それは不可能なのでプログラマに注釈をつけさせる」という類の説明がついてることが多いんです
それ見てホントかと、しかもその手の文書についてる例では明らかに推論可能でそれくらいコンパイラが自分でできるやろというくだらない作業をプログラマに強いてるだけの例がついてる事が多いんですよ
それがRustの“仕様”であるならそれはそれでいいんですけど、それを強いる理由が「推論することが不可能だから」と説明してるのがおかしいなと、何か自分の気付いてない勘違いしてるのかなと
2023/07/08(土) 22:34:33.60ID:p+sO9/0D
>>369
コンパイラから外されて実装してないから不可能だろ
それも事実を表してる
2023/07/08(土) 22:34:40.18ID:7vcICBIU
わかったから消えろ
2023/07/08(土) 22:38:51.77ID:p+sO9/0D
完全に推論可能かは知らないが実害があるのでそもそも実装されていない

ただあからさまな場合は省略可能

コンパイラも楽だろ
戻り値のライフタイム覚えておいて型を返す場所でチェックするだけだし
2023/07/08(土) 22:51:32.65ID:5IIZUoQE
>>372
そうですね、多分コンパイラが楽だからがホントの理由な気がします
推論するには最低限その関数の関数定義が終了する時点まで読まなければならないですからね
しかし実際には関数の終わりの時点まで読んだ段階で完全に決定してその1回目の読み、ワンバス目で終わる気はします、少なくともコンパイラの世界の暗黙の了解「線形オーダーで解決しなくてはいけない」はクリアするとは思います、(勘ですけど)
まぁそれでも「必ず宣言するように、異論は認めない」が仕様ならそれはそれで結構なんですけどそれを「できないから宣言するしかないんです」という説明はある程度以上を勉強するつもりの人が読むと多分混乱招くと思うんですよ
初学者が余計な気を回さないように「できない、信じろ、なので宣言しろ」は初学者向けの説明でありかなとは思わないではないんですけどね
そこでちゃんとした論文ないもんかと
2023/07/08(土) 22:58:05.15ID:Yg5OnBqY
もしかして、クロージャなら式から推論してるのかな
関数のシグネチャはフルで書かなきゃいけないってだけで
2023/07/08(土) 23:59:50.01ID:PWdcv54p
クロージャは型推論してくれるからそういう用途に使える
集合としてみてもfnよりFnを満たす集合の方が大きい
逆にクロージャでも型指定を要求されることもある
2023/07/09(日) 02:18:11.28ID:/JDwe3nB
いずれにせよ、Rustは、自由と民主主義をベースとする西側諸国
の価値観には合わず、中国と同じ社会主義的な東側諸国の価値観
に合っている。この言語が成功することはIT産業が壊滅状態になる
ことを意味する。
2023/07/09(日) 02:21:16.31ID:/JDwe3nB
自分達の作った言語を普及させるためには、無料にして、他の業者
がどれだけ迷惑を被っても構わないというスタンスをとる。
このことは、世界の中心でありもっとも進んだ国であるところの
中国の価値観を広めるためには、人民の犠牲もいとわない、
他国がどれだけ苦しんでも構わない、むしろ歓迎する、などという
中国のスタンスと共通する。
2023/07/09(日) 02:24:03.48ID:/JDwe3nB
もっとも優れた政治経済思想であると事の中国流社会主義を
世界に広めるためには、どんな犠牲もいとわず、どんな
人権侵害も環境破壊もいとわず、経済ルールを無視して独自
ルールを徹底し、言論統制し本当の情報を流さない、
という中国のスタンスと、Rust信者達が行っているスタンスは
そっくりである。
2023/07/09(日) 02:26:49.94ID:/JDwe3nB
中国人は洗脳の結果、自分達が世界最高の政治体制を持つ偉大な
国家であり、その思想と政治体制を世界中に教えてあげなければ
ならないと思っている。
そしてアジアの最高の先進国は中国であり、日本より上回っている
と勝手に思い込んでいる。
この状況とRust信者の脳内心理はそっくりである。
380デフォルトの名無しさん
垢版 |
2023/07/09(日) 04:44:46.78ID:KDx9Q8HN
>>376
IT産業の壊滅とか最高じゃん。一番損をするのは覇権国のアメリカ、一番得するのは出遅れた日本だからねぇ。
ちなみにOSSとITの民主化は中国などのレッドチームを追い詰めることに繋がると思うぞ。お得意の世論統制が難しくなるからね。
2023/07/09(日) 07:41:46.99ID:xOIWVRNM
>>376
お前誰からも必要とされてないから消えて
2023/07/09(日) 07:46:09.21ID:4eXZ8lBD
>>381
可哀想だからそんなこと言ってあげるな
病気なんだから
居場所はどこにもないんだよ
2023/07/09(日) 08:32:03.98ID:kMeOQgn0
マシな流れからまたクソな流れになってきそうだな
384デフォルトの名無しさん
垢版 |
2023/07/09(日) 09:19:07.63ID:KDx9Q8HN
RustはDynamicRustみたいな感じのRustコンパイラ上で動くスクリプト言語が有っても面白いかもな。
2023/07/09(日) 11:03:32.10ID:BH58EEOI
頭のおかしいネトウヨがアンチrust側で良かった
386デフォルトの名無しさん
垢版 |
2023/07/09(日) 11:23:19.56ID:KDx9Q8HN
>>385
ネトウヨって何?
ここはRustとC,C++の比較及びその他プログラミング系の話をする板であり君の様な差別主義者は別の板に行きなよ。
387デフォルトの名無しさん
垢版 |
2023/07/09(日) 12:20:32.66ID:r53YpIy/
>>379
>この状況とRust信者の脳内心理はそっくりである。
お前さんの言動は統合失調症の患者さんとそっくりだよ
2023/07/09(日) 13:41:10.77ID:3PS2GvjM
効きすぎだろw
2023/07/09(日) 14:20:00.41ID:5sT0qDGq
Rustなら失敗しなかったと思う割とマジで
https://www.youtube.com/watch?v=XDy0dqZrbN4
2023/07/09(日) 14:21:39.84ID:jB1Be+SF
だれもRustの使用を強制してないのに強制されてると思い込んでるあたりが危険だな…

どこかの大臣が「Rustの利便性向上のためにC++コンパイラを廃止します」とか言い出したら騒いでもいいけど
391デフォルトの名無しさん
垢版 |
2023/07/09(日) 14:30:11.62ID:5sT0qDGq
>>337
Rustが安全であるという考え方が最も危険である
2023/07/09(日) 15:40:54.31ID:LeWNN8mE
>>308
それが本当なら水虫言語じゃん
2023/07/09(日) 15:57:49.89ID:4eXZ8lBD
糖質だから仕方ない
誰からも必要とされてないことすら気がつかないのだから
2023/07/09(日) 16:23:35.82ID:JjLC50DJ
RustがC/C++に似ているとか、構文が便利だとか本気で思っている
方が統合失調症だ。病院で見てもらえ。
395デフォルトの名無しさん
垢版 |
2023/07/09(日) 18:47:10.60ID:KDx9Q8HN
Rustが爆発的に飛躍するには何が足りないの?
2023/07/09(日) 19:01:36.68ID:/ahYiZL6
学習コスト低減、ライブラリ作成支援
何よりもRustの案件・求人の増加
2023/07/09(日) 19:08:06.34ID:4eXZ8lBD
誰からも必要とされてない人
今日もよく喋るな
2023/07/09(日) 19:43:24.19ID:JWK25eUy
せいぜい、人から必要とされまくって楽しい人生を謳歌しろよ。
ww
399デフォルトの名無しさん
垢版 |
2023/07/09(日) 20:02:58.84ID:KDx9Q8HN
行列積ってマルチスレッドで実装すべき?それとも、キャッシュやコピーを減らすためにシングルスレッドの方が良いのかな?
2023/07/09(日) 20:44:21.03ID:To34JzcQ
GPUに投げるべき
2023/07/09(日) 20:46:14.43ID:To34JzcQ
真面目な話するとプロファイル取ってサイズで分岐すればいいんじゃないすかね
2023/07/09(日) 21:34:02.14ID:xOIWVRNM
>>399
parallel=trueみたいなオプションをどこかに書けばスレッド使うようにする
403デフォルトの名無しさん
垢版 |
2023/07/09(日) 21:55:27.03ID:KDx9Q8HN
>>400
GPUを使った並列演算処理を提供するRustのクレートで良いのは何?できれば、GPUのデバイスによらずに操作が抽象化されてるものが良いな。
2023/07/09(日) 23:36:02.19ID:wAJ5czLT
四次元ポケットがあるかのような話だな…
2023/07/09(日) 23:43:54.14ID:e+9JuWWy
C++にはあるんじゃね?
406デフォルトの名無しさん
垢版 |
2023/07/09(日) 23:57:17.50ID:KDx9Q8HN
rust-gpuとかいうクレートはどうなの?これはcudaがないと動作しない感じ?
2023/07/10(月) 00:29:46.98ID:fziS9tUP
CUDAとかOpenCLとか書かれているから、CUDAでなくても動くんじゃね?
2023/07/10(月) 01:25:56.97ID:h4dg/BEy
GPUは考えなくて良いと思う
まずはCPUのシングルノードで性能を出すことが大事
GPU使えるなら現状は生のCUDAやpytorch使うので
2023/07/10(月) 02:08:14.76ID:gFGbWr8l
どうしてOSSの人って自分が良い事してると思ってるのか。
競合企業には悪魔なのに。
410デフォルトの名無しさん
垢版 |
2023/07/10(月) 08:11:40.21ID:ZGeN7ohp
慈善でやってると思ってる阿呆
411デフォルトの名無しさん
垢版 |
2023/07/10(月) 10:33:54.78ID:Xcne1xaV
>>408
現状ではnumpyではCPUってどれくらい効率的に使用できてるの?
2023/07/10(月) 11:38:27.06ID:ikEhHQu8
>>409
OSSはOSSの仲間に寄与してるんであって、
おそらく適価でソフトを売ってくれないだろう競合企業とはなんら関係を持たないからね
2023/07/10(月) 11:50:27.92ID:g81ZTmTB
>>409
お,無根拠なOSS批判だ
414デフォルトの名無しさん
垢版 |
2023/07/10(月) 12:17:50.81ID:6RMJuu71
>>320
「料理を自由にやられたら料理人が困るだろ!」
「レシピを共有するやつはカルトだ!左翼だ!」
って言ってるようなもの
料理人は家庭では難しい料理をつくるなり
サービスで付加価値をつけるなり
マネタイズ方法はいくらでもある
2023/07/10(月) 13:15:01.70ID:5iSLO28B
>>356
ChatGPTωには無理ωωω
416デフォルトの名無しさん
垢版 |
2023/07/10(月) 13:36:14.40ID:5iSLO28B
>>395
信者が足りない
逆に多過ぎるのはcrates.io
もっと整理するべき
417デフォルトの名無しさん
垢版 |
2023/07/10(月) 13:37:15.38ID:5iSLO28B
>>400
それ
418デフォルトの名無しさん
垢版 |
2023/07/10(月) 13:38:07.30ID:5iSLO28B
>>403
NdArray
BLAS
2023/07/10(月) 15:10:35.46ID:h4dg/BEy
>>411
君の言う効率的の意味が単純に速度ということなら
全てin-place演算子かつ同じメモリを使い回すような書き方をすればキャッシュヒット率が高くなり
ベクトル演算を使うので生のCで書くより速い
rustでこの速度と同等まで持っていくのはなかなかしんどいが
非同期IOやスレッドを組み合わせることで
大規模な演算では上をいける可能性はなくはない
2023/07/10(月) 15:36:45.51ID:Y/mmaJD9
例えばメモリに乗らないようなクソでかい行列の積が上げられる
MMLなどの学習時に使われる多次元配列は普通にやるとメモリに乗らないので
ファイルに吐くことになる
その時非同期IOやスレッドを駆使できるrustの方が速くなるのではないかと思う
2023/07/10(月) 16:19:14.48ID:ikEhHQu8
普通にやるとメモリに乗らないので、モンスターマシンを使う、とかじゃないん。
2023/07/10(月) 16:28:12.83ID:K2YeESBC
ファイルなら無限大
2023/07/10(月) 16:33:34.04ID:h4dg/BEy
>>421
それをやれるのは一部の企業のみ
LLMは推論だけでGPUメモリが数百G必要だからね
424デフォルトの名無しさん
垢版 |
2023/07/10(月) 20:18:27.95ID:Gb5m/Q1F
Rustで5ちゃんみたいな掲示板作れないの?
2023/07/10(月) 20:35:07.61ID:B9xklitj
当然作れるけど言語に関係なく
無数にSNSがある状況で宣伝資本がなければ集客が無理
さらに犯罪予告から怒涛の妨害書き込みへの対処が面倒
426デフォルトの名無しさん
垢版 |
2023/07/10(月) 21:19:10.81ID:HuRNpvAr
とりあえずrust純正の多次元配列の実装の以下の感じでやって行こうと思う。

シングルスレッドでの多次元配列の演算の実装
         ⬇
CPUベースのマルチスレッド(rayonとtokioを主に使用)での演算の最適化の実装
         ⬇
requires_gradの実装(これもマルチスレッドでの計算最適化を適用。)
         ⬇
余裕があればGPUベースの並列演算機能も実装。これはできればcudaがなくともGPUの種類によらない計算ができるようにしたい。
427デフォルトの名無しさん
垢版 |
2023/07/10(月) 22:41:22.83ID:HuRNpvAr
Numpyは多次元配列の中身を1次元配列に変換して持っているけど、多次元インデックスから内部の配列の対応するインデックスを一々計算してるのかなぁ?
2023/07/10(月) 23:45:11.15ID:nKw3UH6a
行とか列に沿って数値処理する計算ならインデクスを一定間隔でずらせばいいでしょ
ランダムアクセスならどうしようもないけど
2023/07/11(火) 00:08:55.75ID:hvAV/O5o
>>423
そんな状態では、学習に莫大な時間が掛かり、
恐らく結果が10年後とかになる。
2023/07/11(火) 00:10:24.53ID:hvAV/O5o
それと、数100Gバイト 位なら、スパコンならRAMにおいて
問題ないだろう。
2023/07/11(火) 00:13:54.90ID:ZJ6seY0P
M*Nの巨大なメモリを一気に確保できる範囲内ならばそれが可能だけど無理な場合もありそう
例えばM=N=100万とすると
1要素64bitとして1列分は64MBだけど
行列全体は64TBだね
2023/07/11(火) 00:21:06.99ID:hvAV/O5o
>>414
それとはかなり違う。
料理の場合:
1. 本当に優れた料理人のレシピは公開されて無い。
(もし公開されている、とされていても、本物かどうか分からない。)
2. レシピがあっても、腕が無いと作れない。
3. 仮に作れても、手間がかかるので料金を払ってでも、作ってもらって
 食べたい人が大勢いる。

ソフトウェアの場合、特に 3 の部分が全く違っていて、
簡単にコピーできてしまう特徴がある。
2023/07/11(火) 00:28:20.56ID:hvAV/O5o
>>431
どうやってるんだろうな。
熱力学や統計力学などの物理学や数学を駆使してるんだろう。
恐らく、幾何学的に距離が遠すぎる結合は 0 と仮定しているんじゃなかろうか。
脳もそうだろうし。
2023/07/11(火) 02:04:14.13ID:pWql3Z3H
>>429
複数ノード使えばなんの問題もない
今のスパコンはほぼそれ
俺が普段やってる流体や量子化学計算も
32コア程度のマシンを複数台で1週間計算したりしてる
今のpytorchはasync使ってないから行列計算を並行してできるところも全てブロックしてる
GPUへの転送もブロックする処理をしてる
シングルノードで超高性能のGPUで力技で計算するというのは普通の企業では難しい
クラウド使っても費用が半端ない
CPUでの高速化を実現しコストを下げることができれば次のステージへ行ける

なんか運営でゴタゴタが起きてるらしく
スレの読み込みができなくなったから改善しないと今後は書き込まないかも
2023/07/11(火) 02:39:20.70ID:ZJ6seY0P
>>434
専ブラ何使ってる?
各種スレ読み込み方法見つかってるよ
例えばchmateならばこうするらしい
設定メニュー→URLを指定して開く
http://mevius.5Ch.net/tech/
※注意 5chが大文字で5Ch
2023/07/11(火) 03:35:24.17ID:pWql3Z3H
とりあえずスクリプトで書き込めるので雑に書く
シングルノードで性能を出すのは意外と難しい
コア数=スレッドという単純なものではないから
OSのスレッドや他のアプリも多数のスレッドが動いている
コア数を最大限活かすというのはとにかく計測することでしか最適解を出せない
最近のCPUはハイパースレッディングという技術があり
これを使うと各コアで一つ以上のスレッドを動かすことができる
このようにCPUはまだまだ無限の可能性を秘めている
ベクトル演算もこれまで全く活用されてこなかった
さらに非同期IOを組み合わせればさらに待ち時間を減らせる
いまCPUが熱い
437デフォルトの名無しさん
垢版 |
2023/07/11(火) 07:16:15.54ID:VTWwffnW
コピペルナーV6
2023/07/11(火) 11:18:17.20ID:heSsZz8c
>>433
その能力では重力波観測出来ないな
2023/07/11(火) 11:34:55.16ID:heSsZz8c
>>435
https://agree.5ch.net/test/read.cgi/operate/9240230711/
440デフォルトの名無しさん
垢版 |
2023/07/11(火) 16:25:11.26ID:pWql3Z3H
テスト
441デフォルトの名無しさん
垢版 |
2023/07/11(火) 17:19:00.53ID:QLD1ZTwR
>>299
おまえが生まれてから日本が没落していった。
つまり、全部おまえのせいだよ。
2023/07/11(火) 18:29:18.59ID:dW46lKMj
>>441
俺の影響力はそんなに大きくないが、オープンソースの影響力は
大きいから、日本没落の原因は後者である可能性は有るが、
俺の影響である可能性は無いだろう。
2023/07/11(火) 19:54:59.41ID:UcX6nu3h
jane styleはOSSをクローズにしてやりたい放題やって
こんなに迷惑をかけている
2023/07/11(火) 20:33:49.40ID:FPwSRARi
確かこんな経緯だっけ?

Janeは元々オープンソースのおかげで便利な特徴ある亜種が豊富にある閲覧ブラウザ

Jane Styleはその亜種の中の一つだがソース非公開

当時2ch/5chは各スレのデータが*.datファイルとしてオープンデータなAPIだったので自由に多種多様な閲覧ブラウザが作られていた

ところがある時Jane Style側が5chにクローズドなAPI化で広告必須にして儲ける提案を持ちかけた

Jane Style側が管轄する5ch APIが誕生しJane Style側と契約しない多くのブラウザが締め出されStyle以外の各種Janeは全滅

数年間経過

Jane Style側が5ch APIを突如閉鎖して新掲示板Talkへ誘導

5chは対抗処置として各スレの*.datファイルを再びオープンデータとし自由な閲覧ブラウザの参入を呼び掛け
2023/07/11(火) 22:45:13.05ID:IUx5aYIs
>>444
なるほどー
そういうことだったのか
2023/07/11(火) 22:55:33.99ID:0HX/1I5L
5chは終わりだな
talkに移住したほうが良さげ
2023/07/11(火) 23:05:48.32ID:IUx5aYIs
Jane Styleがユーザー数一番多いのかな?
ざっと何%くらいなんだろう?
448デフォルトの名無しさん
垢版 |
2023/07/11(火) 23:11:31.90ID:8n82Mx+O
>>446
向こうは誰もいない
向こうでもこのスレ立ってるが書き込み無し
449デフォルトの名無しさん
垢版 |
2023/07/12(水) 00:52:13.10ID:NJFIcEQ6
>>433
統計力学と熱力学の勉強を大学でやったけど、これをメモリに応用する方法とか全く検討つかないんだけど、どうやんの?
450デフォルトの名無しさん
垢版 |
2023/07/12(水) 01:12:01.30ID:w0UvOxDC
>>432
掲示板のマネタイズはどう考えてるのかな?
プログラマは掲示板のソースコードを書いているのだから
掲示板は会員制にして課金しなければ
その「水源」とやらは「枯渇」しないのかな?w
451デフォルトの名無しさん
垢版 |
2023/07/12(水) 06:44:12.72ID:GThgJXoz
.try_into().unwrap()
なにこれ超めんどくさいんだけど

だっさ
452デフォルトの名無しさん
垢版 |
2023/07/12(水) 07:27:41.45ID:40CzoJJP
課金したら閲覧者が枯渇
2023/07/12(水) 13:39:50.28ID:JEmfvhKm
>>449
今回は、AIの機械学習の話だから、ニューラルネットワーク限定。
シナプス結合が、「ほぼ 0」とみなせるようなニューロン対が
有るのだと思われる。
それを理論的に見つけるために熱力学や統計力学が使えるのではないかと
思われる。
実際、最近の機械学習では熱力学からヒントを得ていると聞いている。
2023/07/12(水) 13:47:41.55ID:JEmfvhKm
>>450
ソフトウェア自体を販売する場合の水源が枯渇すると言っている
のであって、(広告料を収入源とすることが多い)オンラインサービス
のことは言って無い。
2023/07/12(水) 14:03:47.08ID:75WTF1Df
大工の源さんは枯渇したよ
2023/07/12(水) 16:36:21.89ID:EH/jRxPW
すっかり人が減ったな
イーロンマスクがいかに優秀だったかわかるな
ひろゆきの言うようにtwitterは致命的な状態にはなってないんだよ
457デフォルトの名無しさん
垢版 |
2023/07/12(水) 16:43:02.15ID:V7YD2kGE
統計学や熱力学とは別に
統計熱力学という分野があって量子力学のツールになっている
458デフォルトの名無しさん
垢版 |
2023/07/12(水) 16:48:07.57ID:eYJFNCYr
>>454
そんなとこに水は既にないのだから
雨乞いなどせずに水源を探せ
情けない
2023/07/12(水) 16:49:01.89ID:EH/jRxPW
>>453
もうそれとっくに発明されてるぞ
ボルツマンマシンとか統計力学から生み出されたニューラルネットワークだ
もう現在ではほぼ使われてない
2023/07/12(水) 18:25:50.72ID:IrwEnPUh
>>458
問題は、需要はあるのに生産できないことに有る。
2023/07/12(水) 18:27:53.63ID:IrwEnPUh
>>460
需要はあり、しかも、技術的は生産可能。しかし、OSS
とGoogleが邪魔するせいで生産できない。しかし、
現在は存在せず。人々は欲しいのに商品が無い。しかし、
商品は技術的には製造可能。しかし、邪魔する人のせいで
製造不可能。
2023/07/12(水) 18:29:50.07ID:IrwEnPUh
OSSの問題点は、需要があるのに、全く生産されないか、
または、生産されてもちゃんとしたものではない。
しかし、ちゃんとしたものを生産すると、すぐにそれを真似て
無料化したものが出てくるから、ちゃんとしたものを生産できない
というジレンマが生じていること。
それが悪循環になっている。
2023/07/12(水) 19:11:00.67ID:l4X7BbNV
で、クローズドでマネタイズしようとした5chとかjanestyleはどうなりましたか?
2023/07/12(水) 20:33:00.31ID:j8K/hPwF
コードとサービスをごっちゃにしてて草
465デフォルトの名無しさん
垢版 |
2023/07/12(水) 23:01:21.25ID:NJFIcEQ6
OSSの開発者はそれ単体でマネタイズしようとか基本的に考えてないだろう。自分の事業への資金の呼び水にしたいとかとか、キャリアアップに利用したいとか、純粋にボランティアとか色々事情があるだろ。
466デフォルトの名無しさん
垢版 |
2023/07/12(水) 23:20:30.70ID:w0UvOxDC
自分が多様な世界に適応する能力がないのを
多様な世界に原因がある
世界は一様であるべきと言っているだけだよ
よくある症状だよ
467デフォルトの名無しさん
垢版 |
2023/07/12(水) 23:51:54.82ID:NJFIcEQ6
Ndarray構造体に演算を実装しているんだけどバグがあった。具体的には
nar += &narとか nar = &nar * &nar
が所有権の関係でできないことが分かった。
ndarrayクレートではこれってどうやって解決してんの?
2023/07/13(木) 00:26:15.94ID:6kUdjFSi
ほれはよRust製の専ブラ作れよ
それともRustってRADには不向きかな?
2023/07/13(木) 01:26:33.09ID:UHgHd+Ew
>>467
ndarrayの実装は知らないけど標準ライブラリ(std::ops)を参考に

AddAssignの方は
impl AddAssign<Self> for Foo
impl AddAssign<&Self> for Foo
を両方実装する
(impl AddAssignだけだとデフォルト(<Rhs=Self>)で1番目になってる)
1番目の実装の処理は2番目の実装に丸投げできるはず

Mulの方は
impl Mul<Foo> for Foo
impl Mul<&Foo> for Foo
impl<'a> Mul<Foo> for &'a Foo
impl<'a> Mul<&Foo> for &'a Foo
を全部実装する
上の3つは1番下の実装に丸投げできるはず

forward_ref_binopとかいうマクロがあるらしいけどCopy型前提みたいだから使えなそう
(Copy型だと下の3つを1番上の実装に丸投げできる)
MulとかFooのバリエーションが多くなると丸投げ部分のコードをマクロで生成しないとしんどい
2023/07/13(木) 02:25:19.98ID:XmwQUPfG
>>467
そのものズバリの演算子はない?
Zipを使えば以下のようにできるみたい

let mut vec = Array1::from_elem(10, 1.);
Zip::from(&mut vec).for_each(|vec| {
*vec += *vec;
});
2023/07/13(木) 02:38:27.81ID:XmwQUPfG
このfor_eachがベクトル演算を使ったループになれば良い感じかも
ただ泥臭過ぎて面倒だな
2023/07/13(木) 07:43:06.44ID:kV5XLHA0
Announcing Windows 11 Insider Preview Build 25905
https://blogs.windows.com/windows-insider/2023/07/12/announcing-windows-11-insider-preview-build-25905/

Rust offers advantages in reliability and security over traditional programs written in C/C++. This preview shipped with an early implementation of critical kernel features in safe Rust. Specifically, win32kbase_rs.sys contains a new implementation of GDI region. While this is a small trial, we will continue to increase the usage of Rust in the kernel. Stay tuned!
2023/07/13(木) 08:55:33.76ID:Oq+5RtyL
おいおい昨日25393落としたばっかだぞw (まだ入れてない
早速覗いてみるかな、(最終的に)pdbどうなってるんかしらん

C++にもunsafe{ }はよ
2023/07/13(木) 10:59:52.32ID:nV7PXIXO
Rust AIすげー
https://www.youtube.com/watch?v=mYmWimr0Jd4
2023/07/13(木) 13:28:05.75ID:GXWOfs8o
予言しよう。Rustは絶対流行らない。
2023/07/13(木) 13:54:46.62ID:GXWOfs8o
>>466
それは、技術系をやめて、営業や農業で食っていけばいい的な発想。
ネットサービスだけでは日本は没落する。
477デフォルトの名無しさん
垢版 |
2023/07/13(木) 13:59:36.78ID:aSyZRdNR
>>476
そもそも、IT技術では日本はアメリカに比べて環境的に圧倒的にゴミで、技術者の数も少なくて、技術自体もアレなのに、IT技術で日本再興とか非現実的だろ。IT技術は蓄積なんで、一回周回遅れになった日本がITで没落を避けれる訳ないじゃん。君は何を目指してんの?
2023/07/13(木) 14:09:35.65ID:GXWOfs8o
いまだにトヨタ車一本で未来までいけるとでも思ってるんだろうか、
この人は。
479デフォルトの名無しさん
垢版 |
2023/07/13(木) 14:15:03.35ID:aSyZRdNR
日本は得意な量子コンピューターとかに注力すれば良いじゃん。間違いなく次世代のゲームチェンジャー的技術だし。日本の量子コンピューターの技術はアメリカと比べてもかなり悪くない位置にいると思うよ。
2023/07/13(木) 14:18:09.38ID:Oq+5RtyL
>>475
webのほうでは十分生き残りそう、なんとなくね
2023/07/13(木) 14:22:14.94ID:GXWOfs8o
>>479
そういう国家レベルで行なわれるようなものはアメリカに抜かれる。
2023/07/13(木) 14:22:54.04ID:GXWOfs8o
>>480
多くてもシェア10%未満。
2023/07/13(木) 14:35:24.76ID:GXWOfs8o
量子コンピューターも、お金がないと勝てません。
ITでお金を稼げなかった日本には財源がありません。
2023/07/13(木) 14:36:26.57ID:GXWOfs8o
>>477
水源が枯渇したので、こつこつ稼ぐ機会が無かったからね。
485デフォルトの名無しさん
垢版 |
2023/07/13(木) 14:39:43.08ID:1jqNvhNL
>>476
営業しなけりゃ食って行けないのは当たり前やろw
自分何年生きてきたん?
2023/07/13(木) 15:03:07.65ID:GXWOfs8o
経済はこつこつ稼ぐことが重要。
ITの実績がほとんど無い国が量子コンピューターで巻き返しなんて
不可能だと思うぞ。
こつこつ稼がないと基盤ができない。
小銭から集めていかなければ目をどんどん大きく成長させられない。
いきなり大事業なんて不可能。
2023/07/13(木) 15:08:03.96ID:GXWOfs8o
トヨタも恐らく駄目になる。
なぜなら太陽光発電は欧米では適地が沢山有るため激安になる
公算が大きいから。
2023/07/13(木) 15:21:31.64ID:Oq+5RtyL
こつこつって大事だけどね、その間成果ゼロ扱いになるんよね
2023/07/13(木) 15:23:34.91ID:GXWOfs8o
>>488
こつこつ稼ぐ、ということだぞ。100円でもいいから粗利を
得ることが大切。
2023/07/13(木) 16:17:23.89ID:nV7PXIXO
100円稼ぐのに何円の経費がかかるかって指数があるよね
営業係数というのかな
きっと100以上になるはず
2023/07/13(木) 16:32:54.73ID:1MkvLWgX
OSSがなくなると日本のITがアメリカに勝てるようになるのか?
んなわけねーだろ
2023/07/13(木) 17:32:37.80ID:GXWOfs8o
>>491
少なくともOSSが有ると、「芽」が育つには不利な状況にはなるね。
どんなに潜在ポテンシャルの高くても、巨木が芽に光を当てない
ずるい状況生じている。
光さえ当てれば、既存の巨木を越える育つかも知れなくても。
2023/07/13(木) 17:33:16.14ID:GXWOfs8o
>>491
なるよ。
494デフォルトの名無しさん
垢版 |
2023/07/13(木) 18:14:57.97ID:aSyZRdNR
>>492
芽に光を当てるに既存の巨木を伐採しまくらないといけないけど、どうすんの?
アメリカの大企業に資本でも技術力でも人材でも何にも太刀打ちできる要素ないじゃん。
コツコツ積み上げて云々ができるのは中国みたいに協力に自国の産業が守れる国だけ。戦後体制的に日本にはそんなことは許してもらえないよ。現実的な戦略はOSSとITの民主化以外ない。
2023/07/13(木) 18:25:29.18ID:GXWOfs8o
>>494
OSSなんて推進したら、ますます足を引っ張るだけだぞ。
496デフォルトの名無しさん
垢版 |
2023/07/13(木) 18:29:50.99ID:6Dc0Fr5K
オープンソースの話はあまりにもスレ違い過ぎて長期に続いているから別スレへ分けようよ
C++もRustも他のプログラミング言語もほとんどがOSSに支えられていてそこに対立点はない
2023/07/13(木) 18:30:51.58ID:GXWOfs8o
RedHatなんて何やってるのかさっぱり分からん会社なのに、
自分では技術系の会社だと言い張ってるだろ。
実体は、単なるテレホンサポートみたいなもんだろ。知らんけど。
技術なんて有るわけ無いのに嘘ばっか。
OSSを推進すると言うことは技術を捨てると言うことだ。
技術立国にはなり得ない。
資源や面積の少ない日本では技術しか頼るものは無いんだから、
アメリカと同じようには出来ない。
2023/07/13(木) 18:32:41.13ID:GXWOfs8o
アメリカのソフトは品質が悪くてね。
それなのにはびこってるのは独占と資金的体力のおかげ。
PC-9801時代の日本製のソフトはもっとちゃんとしてた。
2023/07/13(木) 18:39:53.57ID:GXWOfs8o
>>494
育ってしまった巨木には税金を沢山かけて、新しい
芽にチャンスを与えなくてはならない。
アメリカ以外の国ガ税金を沢山取る。
そのための法律がOECDかなんかで計画されていて、
2025年くらいに施工される予定だとか。
アメリカは反発するだろうが、無視しなければならない。
アメリかはペナルティーを受けるべきだ。
500デフォルトの名無しさん
垢版 |
2023/07/13(木) 19:18:07.22ID:aSyZRdNR
>>496
同意。流石にスレ違いのOSSの話題が長くなりすぎた。
2023/07/13(木) 19:19:05.46ID:1MkvLWgX
PC98にはアメリカ製のMS-DOSが同梱してただろボケ
2023/07/13(木) 19:24:10.58ID:GXWOfs8o
>>501
同梱はしてなかった。
ROM-BASICが使えたから。
2023/07/13(木) 19:26:34.50ID:GXWOfs8o
MS-DOSはとてもシンプルで、Diskの読み書きと
stdin, stdout と exe の実行だけを受け持っていた
ようなもの。
BootSelector は NEC 独自のものだったらしく、
今の Windows より遥かに使い勝手が良かった。
DOSもsubstやjoinのような便利なコマンドが有ったのに、
Windowsでは使えなくなってしまった。
機能低下、改悪。
2023/07/13(木) 19:55:49.31ID:MEfo9A9S
ずっとOSSの話してていいよ
俺が許可する
2023/07/13(木) 19:57:24.07ID:1MkvLWgX
>>502
同梱はセットで売ることだからしてるだろ

>>503
ブートローダーとOSを比較するアホ

もう十分荒らして満足だろ?そろそろ帰ってくれ
2023/07/13(木) 20:08:49.45ID:XmwQUPfG
アスペキチガイまた来たのか
こっちは中身のある話してるんだから消えろ
お前は誰からも必要とされてないんだよ
507デフォルトの名無しさん
垢版 |
2023/07/13(木) 20:30:11.47ID:UfjzNeJr
適応能力が低いのは仕方ないからさ
それを周りの環境が変わったせいにするのは見苦しいぞ
皆適応している
508デフォルトの名無しさん
垢版 |
2023/07/13(木) 20:59:52.95ID:BNsnAvS4
>>503
substはWindowsでも使えるし、joinはWindowsのシンボリックリンクで似たようなことができるぞ。
2023/07/14(金) 01:42:39.92ID:+CmAzkzF
Rustを使うということは回りまわってプログラマーの首を
締めることになることが分かるのも使われない一因となる。
その他、オープンソースの負のブランディング力による
ところも大きい。OSS=メンドクサイ、時間がとられる、
いつも途中で上手く行かなくなる、などの経験法則
により、安物低品質のブランドとなっているから。
2023/07/14(金) 01:55:46.33ID:+CmAzkzF
Rust信者は自分の頭の悪さ故にメモリーバグを起こしている
に過ぎないのに、それをC++言語のせいにし、Rustを
救世主だと思っている。
511デフォルトの名無しさん
垢版 |
2023/07/14(金) 03:10:54.16ID:g6nYUGzr
Arc<Mutex<>>でラッピングしている要素を持つ構造体にIndaxトレイトが実装できなくて困ってる。具体的には以下の様な構造体。

struct Ndarray<T> {
data: Arc<Mutex<Vec<>T>>,
shape: Vec<usize>,
strides: Vec<usize>
}
512デフォルトの名無しさん
垢版 |
2023/07/14(金) 03:11:52.10ID:g6nYUGzr
>>511
Indax →Indax
513デフォルトの名無しさん
垢版 |
2023/07/14(金) 03:13:03.22ID:g6nYUGzr
>>512
すまん、二度ミスった。
Indax➡Index
2023/07/14(金) 07:25:05.69ID:swOUTbdF
>>510
Rustを使えば、頭の悪い奴(俺含む)を現場に投入できるってロジックも成り立つぞ
515デフォルトの名無しさん
垢版 |
2023/07/14(金) 10:10:28.88ID:w/+GEdt2
>>510
というかメモリリークが問題になるような仕事をしてる気配が全くない。
どこまで行ってもファッションでしかない。
2023/07/14(金) 10:10:59.03ID:3uixgQAa
シープラ(ハゲ、爺)の自己評価の高さって世界的ですよね
517デフォルトの名無しさん
垢版 |
2023/07/14(金) 11:43:24.47ID:zaiMDtK3
>>497
>RedHatなんて何やってるのかさっぱり分からん会社なのに、
>自分では技術系の会社だと言い張ってるだろ。
>実体は、単なるテレホンサポートみたいなもんだろ。知らんけど。
>技術なんて有るわけ無いのに嘘ばっか。
若くはなさそうだしこの世間知らずは引きこもりなのか?
518デフォルトの名無しさん
垢版 |
2023/07/14(金) 12:03:50.01ID:MdAXDHyo
>>515
自分の場合は、C, C++で開発してるとコンパイル通っても予期しない動作をすることが結構あるんだよね。そういう点ではRustは非常に優秀だと思う。ただ、所有権の制約がキツくて一部のコードは複雑化しやすい点は問題だとは思う。
2023/07/14(金) 12:32:45.81ID:8YyBZiGG
ここなら知ってる人居そうなので教えてくれ
昨日木曜の22時頃からNHKBSでコズミックフロントの
天文学シミュレーションの歴史みたいなのやってて
その中で何度か画面中のコンソールにソースファイルが映されたんだけど
HDLのようなRustのようなC/C++ではない何かの言語だったが
なんの言語か判る?定番なんかな?
最新のGRAPE用なのかどうかは判らん
来週再放送ありそう
2023/07/14(金) 12:47:40.84ID:x3sVtKWK
>>487
だから日本は地熱頑張るべきなんだけどなぁ。
太陽光とか中国パネル前提だから、デカップリングでどうなるかわからん。

エネルギーは純国産を目指すべきかと。
2023/07/14(金) 12:50:37.89ID:x3sVtKWK
>>500
そんなの前スレでもさんざん言われているからな。

このネタ自体へのレスはアラシ。
NGして無視すべき。
2023/07/14(金) 13:41:45.73ID:8YyBZiGG
unsafe {
やばいなこれ
きっとOSSのせいだ
https://www.youtube.com/watch?v=0xYP1eHJMFw
}
2023/07/14(金) 15:20:18.19ID:qBV+KWq7
>>516
俺、自己評価最低だけど、C++サイコー!って思ってるよ
推しだよ推し
Rustに抜かれてるのは認めるが、早く巻き返してくれっても思ってる
2023/07/14(金) 17:25:19.68ID:Jf6zu8AW
c+にも素直なヤングマンおるんやな
2023/07/14(金) 17:30:00.04ID:NM5pG7go
C++とRustって見た目結構違うのになんでライバルみたいな扱いになってんの?
2023/07/14(金) 17:32:55.85ID:NqLHzajz
>>523
一部では抜いていることは事実だろうな。
それは認めよう。
527デフォルトの名無しさん
垢版 |
2023/07/14(金) 17:46:18.19ID:l3lWzNaZ
>>525
たしかに言語としては仕様も機能も何もかもC++は劣っているけれど
これまでのコードと人員の蓄積でC++が圧倒しているため
現時点ではC++とRustのライバルバランスが成り立っている
528デフォルトの名無しさん
垢版 |
2023/07/14(金) 17:47:04.57ID:+4BZA0bd
そこまで言うんならテレサポ以外の具体的な仕事を教えてあげたらいいのに
2023/07/14(金) 18:02:16.86ID:tvaXDSEz
>>511
Indexは保持データの指定された位置の参照を返すためのtraitだけど
内部でロックしてる間しかアクセスできないデータの直参照は返せないよ

dataがどのスレッドからも変更されないことが保証されてるなら
1.ロック中にVecのas_ptrとlenでポインタと長さを取り出す
2.ロック解除後にunsafe slice::from_raw_partsでスライスを復元(ライフタイムはselfに合わせる)
3.復元したスライスから指定された位置の参照を返す
でいけるかな

unsafeの安全条件はdata内のVecがどのスレッドからも変更されないこと
2023/07/14(金) 18:03:58.67ID:NqLHzajz
>>527
>たしかに言語としては仕様も機能も何もかもC++は劣っているけれど
君は理解が浅い。
2023/07/14(金) 18:16:49.52ID:zaiMDtK3
>>527
>現時点ではC++とRustのライバルバランスが成り立っている
C++ユーザからしたら成り立ってないと思う
Rustの有している機能は素晴らしいと思うがまだ実績がなさ過ぎ
普及したRustカーネルのOSが欲しいね
カーネルに関してはC++というよりもCだけども
2023/07/14(金) 18:18:36.50ID:NqLHzajz
>>531
>Rustの有している機能は素晴らしいと思うが・・・
個人差有り。
2023/07/14(金) 18:31:00.85ID:NqLHzajz
>>520
古代遺産を守ろうとした国は必ず衰退するから
温泉を潰して発電し、富士山にソーラーパネルを置き、
京都の寺を潰してソーラーパネル化する、ということが
日本復活に必要なことかもしれない。
富士山をぴかぴかのピラミッド様にすれば、観光資源にもなり、
一石二鳥。
富士山一つだけで凄いでんりょくがまかなえるだろう。
自然破壊にもなりにくいし。
2023/07/14(金) 18:39:33.76ID:NqLHzajz
京都の五重の塔や姫路城を太陽光パネル化し、
渡月橋の歩くところに強化ガラス版の太陽光パネルを
敷く、などすれば、経済効率が上がるかも知れない。
古代遺産は現代の経済には余り恩恵ももたらさない
ことがおおい。現に京都は観光客は多いのにお金は
落ちず、日本の中でも貧乏県だそうだ。
なんと、遥かに田舎の隣の滋賀県よりも貧乏なんだとか。
人口も利便性も都会レベルも京都の方が上なのに、
なぜなんだろうか。
古代遺跡を守ろうとしているからだろう。
高さ制限も、空が広くて明るくて快適ではあるが
経済的にはマイナスなんだろうな。
新宿は暗くて寒くて空が狭いが、経済的には日本一
なんだろう、知らんけど。
535デフォルトの名無しさん
垢版 |
2023/07/14(金) 18:45:13.58ID:s39u3Dpn
何の話?
2023/07/14(金) 18:52:21.06ID:Jf6zu8AW
こういう人がc+書いてるからunsafeだねって話
2023/07/14(金) 18:58:00.49ID:FuHeClZX
アスペ気狂いよ
お前の居場所はどこにもない
諦めろ
2023/07/14(金) 19:02:03.78ID:4pnOt+dl
C++が後発の言語に張り合うとか絶対やめたほうがいいわ
できるだけはやく死んだほうがいい
2023/07/14(金) 19:20:10.52ID:kdVvbi01
Rustじゃ何も出来ない。
2023/07/14(金) 20:52:49.41ID:FuHeClZX
それはお前
2023/07/14(金) 20:55:28.55ID:PohABDSE
まあどちらにしても不思議だね
実際にここにいる人たちがコードや書いたりアプリを作ってるとは思えない

今週自分は専ブラ作ったり画像解析などのアプリ作ったりしてた
2023/07/14(金) 20:56:58.23ID:at4d1W3f
C++に対しては「メモリーエラーを起こしえるのは
言語の欠陥に過ぎない」などと言っているんだから、
Rustの守備範囲が狭いのも言語の欠陥であると考える
のが公平と言うもの。
2023/07/14(金) 21:00:54.94ID:PohABDSE
RustにしろC++にしろ大体メモリリークの対策なんて本質じゃないもんな
メモリリーク対策がしたくてコード書いてる人間などいない

どちらとも快適な開発とは程遠い
2023/07/14(金) 21:07:43.24ID:FuHeClZX
C++のことを欠陥などと言ってるのはお前だけだよ
2023/07/14(金) 21:08:39.31ID:i4/iEcAZ
まともにRustで開発してる人はとっくに5chなんて見限ってるし、こんなゴミスレには絶対に常駐しない
2023/07/14(金) 21:14:53.97ID:tvaXDSEz
Rustが対処してるのはメモリリークじゃなくダングリングポインタ
segfaultでプロセスが即死するだけならいいけど脆弱性の要因にもなったりする
メモリリークは割と気にしてない
2023/07/14(金) 21:30:06.52ID:at4d1W3f
>>545
開発と言う定義が、多くのプログラマとRust信者の間では
異なって認識されているようだ。
Rust信者は売れないアプリや実用性の無いアプリを
作る事を開発と呼んでいる。
作った事を報告して褒めてもらう事を目的にしているようだ。
2023/07/14(金) 21:33:50.95ID:at4d1W3f
githubもその狂った定義が徹底されており、
実用性が無ければ無いほどSTARが付く傾向が有る。
全く無意味なプログラムが賞賛され、楯まで送られてくる。
集団幻覚カルトであることが判明した。
549デフォルトの名無しさん
垢版 |
2023/07/14(金) 21:37:30.55ID:zaiMDtK3
まーた始まった
2023/07/14(金) 21:42:45.43ID:at4d1W3f
集団幻覚なので、自分達が正しくて周囲の人が間違って
いるように見えているらしい。
2023/07/14(金) 23:20:38.82ID:sYqKfQlj
>>511
Arc<Mutex<Vec<T>>>は
Vec<T>を同時に読み書きするやつを
実行時チェックで1つに限定したい場合に使うもの
Indexトレイトを実装したいというなら用途が違うんじゃないの?
552デフォルトの名無しさん
垢版 |
2023/07/15(土) 02:42:09.83ID:PGpnn5Sq
多次元配列の計算ライブラリの実装頑張ってるけど、ndarrayクレートはやっぱりすごいんだなって実感するわ。マジで、高速さと利便性を追求するほど所有権の壁の高さを感じる。
2023/07/15(土) 03:02:17.38ID:ZPSM1SGK
もう諦めるんか
2023/07/15(土) 03:03:41.55ID:UVmcINwt
>>541
今週はライブラリの勉強だった、それもGC系のやつ

がっつりじゃないけど推しはC++/Rustみたいな人間が溜まりやすいのかもね
あ、そろそろC++の作業もやる
555デフォルトの名無しさん
垢版 |
2023/07/15(土) 03:13:03.77ID:PGpnn5Sq
>>553
諦めないぞ。今、上手く行く方法を悩んでいる所。何とか形にしたい。
2023/07/15(土) 07:34:20.50ID:7Sjd/b2U
>>548
いくら泣き叫ぼうがお前に居場所はない
誰からも必要とされてない
ただの邪魔者
もう一回言うぞ
お前の居場所はどこにもない
このスレにもどこにもな
557デフォルトの名無しさん
垢版 |
2023/07/15(土) 08:39:36.95ID:cA9bBYoN
Rustは失敗だったんだよ
次に期待しようよ
2023/07/15(土) 09:10:39.04ID:qHTh8sAi
Google開発者1000人が答えた「Rustのウワサ」、習得に6カ月以上かかる? 実は遅い? は本当か
Rustに関する5つの洞察
https://atmarkit.itmedia.co.jp/ait/articles/2307/15/news039.html
2023/07/15(土) 11:25:30.28ID:UiYhW/dJ
>>558
Goolgeに入れる開発者がすでに優秀という話ではないのか?

それと確かな講師がいてしっかり仕事で教えてくれると言うのも重要
わからなくなったらわかってる人が教えてくれる…
これが重要
560デフォルトの名無しさん
垢版 |
2023/07/15(土) 12:22:16.61ID:cA9bBYoN
ウワサかあ
2023/07/15(土) 12:38:05.76ID:FawF2Viq
>>534
>なんと、遥かに田舎の隣の滋賀県よりも貧乏なんだとか。
>人口も利便性も都会レベルも京都の方が上なのに、
>なぜなんだろうか。

共産党のせいだよ
2023/07/15(土) 12:40:23.41ID:FawF2Viq
>>534
>高さ制限も、空が広くて明るくて快適ではあるが

京都の空が広いとは思わないな
空の広さで言えば圧倒的に東京の方が空が広いと感じる
京都が盆地で東京が関東平野だからだろう
ビルの高さはあんまり関係無いよ(規制のための建前かもな)
景観の観点から言えば規制には賛成の立場
2023/07/15(土) 12:47:31.81ID:FawF2Viq
>>558
指導者がいれば一ヶ月もかからないだろうね
C/C++の経験は先に有った方が良い
2023/07/15(土) 13:25:15.50ID:UMGmc4KY
Wasmをやりたいと思ったとき、EmscriptenよりRust
の方が便利そうと言うことでRustの方を選ぶと、
なんのためにWasmをやっているのか分からずやめてしまう
法則。その心は、RustはJSより不便だから。
C++でやってこそ、Wasmの良さが分かる。そもそもWasmが
作られた理由はC++を使いたかったのだから。
2023/07/15(土) 16:27:57.06ID:7Sjd/b2U
スクリプト言語しか使ったことない人にとったら6ヶ月くらいかかるかもね
下手したら永遠に書けない可能性もある
2023/07/15(土) 16:44:43.04ID:mPrtICz3
>>565
頑張れば書けてもそれほどの意味を感じなければ馬鹿馬鹿しくてやめてしまう。
Wasm化にRustを選んで
「速度が思ったほど速くならなくて」
と言っている人が目立つのはそのせい。
2023/07/15(土) 17:11:08.01ID:7Sjd/b2U
>>566
現時点ではwasmなんかよりV8ランタイムの方が速いからね
数値計算ならある程度速くできそうだけど現時点では遅い
まずスタックマシンというのもどうなのか
モダンな最適化しにくいし
今設計するならレジスタマシンだろう
2023/07/15(土) 17:16:08.85ID:+MrrJBXN
wasmなんて自分が書き慣れた言語でいいよ
Cに慣れてるならCを選べばいいしRustに慣れてるならRustを選べばいい

ただRustのbindingはお節介というか本来jsでやるべき処理までRustで書けるようにしてるから
素人向けでないかもしれない。全部Rustで書きたい人もいるんだろうけど
個人的には数値計算とか複雑な処理だけwasmに投げてDOM操作はjs/tsで書きたい
569デフォルトの名無しさん
垢版 |
2023/07/15(土) 17:52:08.10ID:cjFspWyo
>>564
>> RustはJSより不便だから。
>> C++でやってこそ、Wasmの良さが分かる。

JavaScriptよりRustが不便だと主張しつつC++でWasmの良さがわかる??
もしC++で便利になる状況ならRustでさらに便利になるだろう

>>566
Wasm化にRustを選んで速度が速くならない??
C++を選ぶと同じことが速くると主張したいのか?

Wasm化で速くなる遅くなるの正解はこれ
・WasmでDOM操作メインならオーバーヘッドの分だけJavaScriptより少し遅くなる
・Wasmで何かを算出するなどの処理をしてオーバーヘッド分を取り戻すと当然JavaScriptより速くなる
これだけの話でこの速さ問題はWasm⇔JavaScriptのオーバーヘッド分を超える作業をWasmにやらせているかどうかだけ
C++かRustかなんて話は当然関係ない

>>567
>> wasmなんかよりV8ランタイムの方が速い

それだとWasmの存在意義が全くないことになる
正解はWasm⇔JavaScriptのオーバーヘッドを取り戻せるか否かで決まる
2023/07/15(土) 18:16:24.19ID:xjlkhkqt
>>569
>もしC++で便利になる状況ならRustでさらに便利になるだろう
そうでないことが、RustでWasm化して分かると言う事例。
571デフォルトの名無しさん
垢版 |
2023/07/15(土) 18:27:33.72ID:cjFspWyo
>>570
RustによるWasm化自体に問題は何もない
だからWasm記述言語シェアNo.1がRust
2023/07/15(土) 18:32:32.92ID:xjlkhkqt
>>571
これ以上言わないわ。自分で考えろ。
2023/07/15(土) 18:33:47.39ID:xjlkhkqt
こんなに馬鹿なにされて、正しい情報を伝授する義務は
俺には無い。貴重な情報なのに。
いつまでも幻覚の中で生きてろ。
2023/07/15(土) 18:55:27.98ID:dbngzqa+
Wasmを使うためにRustを使うのは環境も整っているしGCも必要ないしベストだろな
実際にRustが一番使われているし問題点を聞いたこともない

一方でRustと全く関係ない話としてJavaScriptのWasm化が無意味な場合がある
ほとんどがGUI処理ならWasmより直接操作できるJavaScriptが速くなってしまう
もちろんC++でWasmを書こうが遅い
2023/07/15(土) 18:56:54.92ID:xjlkhkqt
RustでWasm化した人は、思っていたのと違ってすぐやめる
のに対し、C++でWasm化した人は、良いものを手に入れた
と思って二度とJSに戻らない法則。
576デフォルトの名無しさん
垢版 |
2023/07/15(土) 19:02:14.15ID:cjFspWyo
>>575
その書き込みでJavaScriptもWasmも書いたことがない人だとわかる
2023/07/15(土) 19:04:24.33ID:7Sjd/b2U
>>569
だから今のところほとんど価値がない
実際速ければ全てのライブラリがwasmになってると思う
2023/07/15(土) 19:07:37.18ID:7Sjd/b2U
俺の観測範囲だとフロントエンドの人たちがrustに飛びついたがほとんどの人がまともに書けずに挫折して
TypeScriptに戻っていった
そして今Reactがサーバーサイドコンポーネントという銀の弾丸を持ってきた
これでwasmはますますいらなくなった
2023/07/15(土) 19:16:47.79ID:7Sjd/b2U
wasmの目的としてポータブルでデータが小さいからJSよりサイズを小さくできるという狙いがあったが
もうRSCによりサーバーサイドに先祖返りしたので
フロントエンド側で頑張って何かやる必要性はゼロ
言語もRustでよろしい
2023/07/15(土) 19:20:05.38ID:xjlkhkqt
そうでなくて、Rustで書くから馬鹿馬鹿しくなるだけなんだ。
JSとの比較で言語としての魅力が無いので速度比較だけになってしまうから。
2023/07/15(土) 19:22:27.92ID:xjlkhkqt
RustでWasm化してみた人はみんな、速度が余り
速くならないから、思っていたのと違う、と書いている。
JSと比較してRustには魅力が無いからそうなってしまう。
2023/07/15(土) 19:22:39.42ID:dbngzqa+
>>577
今はWasmにも対応しているライブラリが多いよ
特にno_std対応のものはWasmにも向いてる

>>578
ユーザーインターフェースのためのフレームワークを中心に使うならJavaScriptが速いよ
その場合はWasmで書いてもJavaScript部分との大量のやりとりが生じるためC++を使おうがRustを使おうが遅くなる
しかし計算処理が多いものはWasmが速くなるためWasmが使われてるよ
2023/07/15(土) 19:30:39.78ID:QsJkwQGV
>>581
Rust叩きしてるやつは知的レベルが低いんだな
皆が書いてるJSとWasmの話も理解できないとはかなりヤバい低能
2023/07/15(土) 19:32:53.27ID:xjlkhkqt
Wasm化するのは速度の問題だけじゃないんだよ。
C++は言語として魅力があるからWasm化して便利になる。
ところが、Rustは言語として問題が多すぎるから
Wasm化するとJSに比べてめんどくさすぎると言うことだ。
2023/07/15(土) 19:39:27.04ID:QsJkwQGV
>>584
Wasmを使ったことがないだけでなく
どういうものなのかも理解できてなくてヤバいぞ
2023/07/15(土) 19:39:47.20ID:xjlkhkqt
Mozillaとかの脳内では、高速化が必要な部分だけ
Wasm化する、というものだ。ところがこの考え方は
馬鹿馬鹿しい。というのは多くのサイトではFrontの
高速化が必要ないからだ。
一方、全面的にC++化した場合は、飛躍的に利便性
がアップする。この方針だとJSは、ブラウザのAPI呼び出し
担当だけにとどまり、出来る限り使用しないことになる。
こうすると、JSやHTML5より遥かに楽にアプリが書ける様になる。
2023/07/15(土) 19:46:08.86ID:epSo72Qu
wasmってなんか難読化したいときに使うんちゃうん(偏見
2023/07/15(土) 20:07:04.46ID:gEsF2Ccb
>>586
Web関係を一度もやったことないとバレバレやな
何か作ったことあるならそんな間違いしない
589デフォルトの名無しさん
垢版 |
2023/07/15(土) 20:12:10.30ID:4taGP2gD
まぁ高級言語であるjsより“楽に書ける”なんではずはないし、そもそも「HTML5で楽にアプリが書ける」とは何言ってるか意味すらわからん
2023/07/15(土) 20:17:44.08ID:xjlkhkqt
Rustなんかでフロント書くのはHTML5+JS以上に地獄。
2023/07/15(土) 20:19:25.95ID:xjlkhkqt
SNSでRustの自作あぷりを話題にしてるのは、
「こんなんできますよ」をやってるだけで、それを
成長させて売る気は無い連中ばかり。
2023/07/15(土) 20:25:18.59ID:xjlkhkqt
Rustで自作アプリをSNSで話題にしてる人は、
最後まで使う気は無いが、上から目線で「教えてやる」
をやってる。本の著者などが多いようだ。
2023/07/15(土) 20:45:16.50ID:gEsF2Ccb
なぜIT大手も含めて各社がRustへと舵を切っているのか理解できていないのか
2023/07/15(土) 20:47:28.14ID:xjlkhkqt
>>593
そんなん、Rubyへ舵切ってたのに急転回して別言語に
全面書き直しされたし。
2023/07/15(土) 20:47:39.94ID:33/evfg+
まあwasmが何かもわかってないアスペ
みんなにバカにされとるw
596デフォルトの名無しさん
垢版 |
2023/07/15(土) 20:48:31.69ID:wfhnDtnz
>>593
「舵を切っている」ってのは言い過ぎ
社内の好き者がテストしたものが成果として現れ出したに過ぎない
誇大広告と言う
2023/07/15(土) 20:50:04.45ID:dbngzqa+
>>586
サーバーサイドとブラウザサイドの区別ができてなさそうな書き込みですね
基本的にはC++もRustも立ち位置は同じですが『全面的にC++化した場合は、飛躍的に利便性がアップする。』とはどういう意味でしょう?
サーバーサイドにしても並行並列環境の書きやすさの差で今はRustが有利でしょう
598デフォルトの名無しさん
垢版 |
2023/07/15(土) 21:22:03.75ID:0NaOek0L
そもそも業界用語すら使えてない
599デフォルトの名無しさん
垢版 |
2023/07/15(土) 21:38:22.36ID:TEO9VBDe
またアホなオジとアホな複オジの争いかぁ
コリンナぁ
600デフォルトの名無しさん
垢版 |
2023/07/15(土) 21:41:32.60ID:33/evfg+
>>586
マジで支離滅裂で草
2023/07/15(土) 22:04:03.50ID:+MrrJBXN
586を読み解くとおそらくwasmをブラウザのプラグインの類だと考えてる
かつて存在したActiveXと呼ばれる秘術と重ねてるかもしれない
602デフォルトの名無しさん
垢版 |
2023/07/15(土) 22:20:40.59ID:7Sjd/b2U
待て待て待て待て
俺にも分析させろ
まず全面的にC++化した場合というのはどういう意味だろう?
現時点でブラウザで生のC++を使うことはできないのだけど
2023/07/15(土) 22:24:47.11ID:33/evfg+
おそらくブラウザで使える言語をC++にしろと言った趣旨なのでは?
2023/07/15(土) 22:49:01.00ID:epSo72Qu
結局これでいく 造作かけさせやがって。。
00285FA8: 74 EB
605デフォルトの名無しさん
垢版 |
2023/07/15(土) 22:52:16.76ID:cA9bBYoN
Rustって大企業が奴隷に使わせたい言語ナンバー1って感じなんじゃね?
2023/07/15(土) 22:54:26.52ID:33/evfg+
HTML5()とかいう化石用語を使ってるのほんま草
今誰も使ってないぞ
2023/07/15(土) 23:31:12.84ID:epSo72Qu
ぐぐっても出てこないなと思ったら、専用スレではもうちょっと手前で切ってた
自力で解けたのでまあ満足かな
2023/07/15(土) 23:55:02.92ID:YbymSuZE
算数100点マン最近はオープンソースで暴れていたが今日はウェブで無知っぷりかよ
2023/07/16(日) 02:18:30.87ID:ziCJMtw+
なんか特徴的な文体してるよなーとはずっと思ってたけどやっと分かったわ
話し言葉と書き言葉が一文の中で妙な混ざり方してるんやな

アスペは方言と標準語を使い分けるのがむずかしいらしいけど、話し言葉と書き言葉の区別もそうなんかね
2023/07/16(日) 02:24:41.19ID:ziCJMtw+
ていうか数学大先生とOSSに親を殺されたおじさんは本当に同一人物でええんか?
2023/07/16(日) 02:49:49.28ID:pJdN2MUj
アスペは頭の中に絵があってそれを想像しながら文章書いたり喋ったりするらしい
だから文章だけ見ると訳がわからない
2023/07/16(日) 02:50:52.44ID:ZBlSMNK8
>>600
言語面でRustがC++より優れていると言う思い込みが
理解を難しくしているんだよ。
2023/07/16(日) 03:31:31.48ID:pJdN2MUj
>>610
こんな異常者が2人といると思うか?
2023/07/16(日) 03:57:18.45ID:ziCJMtw+
>>610
ずっと2人おるやん
複おじと大先生
OSSアンチおじさんが別人ならこれで異常者3人目や
2023/07/16(日) 06:24:47.74ID:zD7t6MWN
過去のある時点の成果を使用することを許さないRsut はクソ
2023/07/16(日) 09:26:55.11ID:nur2cn9Y
特殊学級の子ってたぶん
外の世界を知らないから幼児的万能感を保ってるんよ
だから自分は算数が世界一得意だし
OSSを批判する権利が自分に唯一あると思ってる
2023/07/16(日) 10:53:53.92ID:FXAuZXSV
権利ねえ
2023/07/16(日) 13:19:04.88ID:OAJoWucZ
Rustは頑張ってるけど、地頭やIQが低い、または、
学業成績がよく無かった人に人気が高い傾向がある。
海外では酷評されている。
2023/07/16(日) 13:27:48.61ID:+r3oKLPQ
>>618
根拠は?
2023/07/16(日) 13:44:44.00ID:OAJoWucZ
>>619
reddit や Quora を見れば、Rustの欠点が大量に指摘
されている。
2023/07/16(日) 13:53:10.77ID:+r3oKLPQ
>>620
1文目の根拠は?
2023/07/16(日) 14:02:51.68ID:OAJoWucZ
>>621
地頭がよければ、生 new を使いまくった大規模アプリを
作っても、ダングリングポインタなんてほとんど発生
しないから。
623デフォルトの名無しさん
垢版 |
2023/07/16(日) 14:13:01.23ID:aonKa36p
>>568
jsはもううんざり
624デフォルトの名無しさん
垢版 |
2023/07/16(日) 14:22:22.92ID:aonKa36p
>>575
ほんそれ
ハードルが低いことに幸せを感じる人は特にそう
625デフォルトの名無しさん
垢版 |
2023/07/16(日) 14:27:41.93ID:aonKa36p
>>581
むかしJavaでjsが描ける謳い文句のGWTなるものが流行って廃れたがそれに似てる
626デフォルトの名無しさん
垢版 |
2023/07/16(日) 14:28:12.55ID:aonKa36p
>>580 だった
むかしJavaでjsが描ける謳い文句のGWTなるものが流行って廃れたがそれに似てる
627デフォルトの名無しさん
垢版 |
2023/07/16(日) 14:29:23.29ID:+r3oKLPQ
>>622
>地頭がよければ、生 new を使いまくった大規模アプリを
>作っても、ダングリングポインタなんてほとんど発生
>しないから。

から

>>618
>Rustは頑張ってるけど、地頭やIQが低い、または、
>学業成績がよく無かった人に人気が高い傾向がある。

が帰結できるの?
628デフォルトの名無しさん
垢版 |
2023/07/16(日) 14:35:13.61ID:aonKa36p
>>613
45人はいる
629デフォルトの名無しさん
垢版 |
2023/07/16(日) 14:36:25.41ID:aonKa36p
>>618
それだ
630デフォルトの名無しさん
垢版 |
2023/07/16(日) 14:38:34.26ID:aonKa36p
>>627
的確な判断力が無いまたは物差しが自分基準の人
つまり低学歴低IQにありがちってことと理解したが
631デフォルトの名無しさん
垢版 |
2023/07/16(日) 15:10:10.88ID:AUjDi11I
そもそも「メモリの解放をシステムが自動でやってくれる」事を「解放し忘れ防止」のためだけだと思ってる時点でズレてるやろ
もう他から参照されないと確定した領域は残しとく意味がないんだから解放する、それもシステムが自動で解放してくれるならコードにその事書く必要がなくなる、するとプログラムはコンパイラに“自動的にやってはくれない本質的な処理”だけを書く事が可能になり可読性が向上する
“オレは天才、全てのプログラムはオレが組む”というなら好きにすればいいとは思うがね
仕事にならんわ
632デフォルトの名無しさん
垢版 |
2023/07/16(日) 15:41:03.27ID:GsKHBEDi
ダングリングポインタは設計の問題であって、言語の問題ではないのだが
ここがわかっていないといろいろ難しいだろな
生きていくのとか
2023/07/16(日) 15:41:23.51ID:D3FCtl3z
>>631
如何にも正しそうなことを書くので、実際に使うまで
は若い人は騙されるんだろうな。実際に使ってみると
そういうことだけではないことが分かるはず。
634デフォルトの名無しさん
垢版 |
2023/07/16(日) 15:48:53.70ID:GsKHBEDi
C++には長年の経験が詰め込まれているので、C++の流儀、経験則に従っていれば問題なくトップグループに存在できる
635デフォルトの名無しさん
垢版 |
2023/07/16(日) 15:50:34.37ID:GsKHBEDi
>>633
素人の考えは素人にとって受け入れやすい
そして極めた人はほんの一握りしか存在せず、素人は圧倒的に多い
それが問題
636デフォルトの名無しさん
垢版 |
2023/07/16(日) 15:51:47.46ID:GsKHBEDi
>>633
> そういうことだけでは
ここにすべてが集約されてるな
2023/07/16(日) 16:00:23.68ID:aonKa36p
lifetimeは面倒だからいちいち描かなくても良きに計らって欲しい
2023/07/16(日) 16:20:18.23ID:D3FCtl3z
Rust lang demerit
でググるだけでも問題点が色々出てくる。
実際はこんなもんだけじゃなく、技術的に根深い問題を
沢山抱えている。
2023/07/16(日) 16:22:17.40ID:D3FCtl3z
おっと、くれぐれも英語モードで検索するんだぞ。
日本語モードではダメだぞ。
640デフォルトの名無しさん
垢版 |
2023/07/16(日) 16:29:18.14ID:pitMVxoQ
てかソフトウェア工学なんか1ミリも勉強した事ないんやろ?
なんでそんな自信満々なん?
自分は神に選ばれた天才とか思ってるん?
2023/07/16(日) 16:30:36.28ID:D3FCtl3z
人格攻撃が来たぞ。
642デフォルトの名無しさん
垢版 |
2023/07/16(日) 16:59:15.24ID:yvzYaA8q
イヤ、人格攻撃とひとつ非難する前にまず自分の発言見直そうよ
自分が今自信満々に述べてるその主張はもちろん自分の知見に基づいてるんだよね?
その知見はその発言内容に見合うほどのソフトウェア工学に対する勉学に基づいていると自分に対してじしんを持って言えるん?
2023/07/16(日) 17:12:24.84ID:F+/xoE5c
>>642
コンピュータ言語の良し悪しについてのソフトウェア工学の
具体的な名称をあげてみよ。
2023/07/16(日) 17:38:12.30ID:Zu8bZnXc
>>638
>Rust lang demerit
英語を勉強したほうがいいぞ
2023/07/16(日) 17:44:50.01ID:pJdN2MUj
自分が無能でソフトウェア工学も知らない
知識が15年前でとまってる無職アスペおじさんなのに
偉そうにソフトウェアやRustについて語る
虫唾が走る
2023/07/16(日) 17:48:04.71ID:MXLn+eQD
こうは言える
Rustはまだまだ進化の余地を残しており、飛びつくには時期が悪いw

例によって、自分用言語ね 仕事で指定されたら>>1 のとおり
少なくとも、このスレで見聞きした知見で、自分用のC++コードは見直してるよ
2023/07/16(日) 17:54:55.66ID:Zu8bZnXc
コンピュータサイエンスと違ってソフトウェア工学ってのは実践知だから
それほど体系だってもないし理論的でもなくて座学で頑張って学ぶような類のものじゃないぞ
どういうイメージを持ってるのか知らんが
2023/07/16(日) 18:10:52.59ID:pJdN2MUj
学ぶべきものだぞ
どういうイメージ持ってるのか知らんが
2023/07/16(日) 18:45:02.36ID:am83Lv+X
C++はオワコン
はっきりわかんだね
2023/07/16(日) 18:48:37.90ID:am83Lv+X
RustについていけないC++erの阿鼻叫喚を見ればいかにRustが脅威かわかるね
仕事奪われるもんね
もうC++erはいらなーいって首切られるよね
残念だね
悲しいね
2023/07/16(日) 19:34:28.69ID:8Py6r9io
ははその前に彼らは定年(あと数年)迎えるから大丈夫さ
652デフォルトの名無しさん
垢版 |
2023/07/16(日) 20:12:11.04ID:PXTHgxNo
できれば、pythonとC, C++の関係みたいにRustコンパイラで動く有力なスクリプト言語が欲しい。
2023/07/16(日) 21:48:38.53ID:MXLn+eQD
自分用言語だから、(世間評価が)どうなろうとかまわんぞ
廃れすぎてコンパイラがなくなるとかまでいくと困るが…そこまではないだろ…haha
2023/07/17(月) 04:32:46.63ID:6nWUTG61
しかし実際は、日本語プログラミング言語なでしこ
の作者みたいな恐らく高齢者がRust信者で
あったりするのだよなぁ。
2023/07/17(月) 09:43:25.24ID:tnTatiuh
Rustは難しいと文句言う人はwebでスクリプトしか書いてこなかったひと
https://zenn.dev/helloyuki/scraps/94c1dd0822c54f
https://zenn.dev/mabe/articles/936b788cd2b4d4
フーン
https://zenn.dev/khale/articles/rust-beginners-catchup
2023/07/17(月) 09:45:14.52ID:tnTatiuh
>>643
コンピュータサイエンス:科学的&理系
ソフトウェア工学:言語比較分類学&文系&ドカタ
>>647
ほんそれ
657デフォルトの名無しさん
垢版 |
2023/07/17(月) 09:46:49.09ID:tnTatiuh
>>650
そんな心配は unsafe {} で全て解決
2023/07/17(月) 09:47:54.55ID:tnTatiuh
>>652
そんなにスクリプトが好きなら
Python + Rust で充分強力
2023/07/17(月) 10:03:55.54ID:afOmWYlK
マスク氏がAI規制しようとしたのも有名人が匿名性を規制しようとするのも
自分が持ってない力を他人が持つことを最優先で規制したいんだろうと思う
だからリスクの大きさと優先順位は比例しない
自信の大きさにも比例しない

しかし誰でもコピーできるオープンソースについては
自分が持ってないと感じた物は一体何なんだろう
660デフォルトの名無しさん
垢版 |
2023/07/17(月) 10:18:03.63ID:j0Vw12Lc
>>654
それはただの偏見では?自分は学生だけど、Rustは大好きですよ。と言っても必要に応じて別の言語も普通に使うけど。絶対的に嫌いなのがJavaですかね。なぜか全く好きになれなかった。C, C++はまあ、嫌いではないですよ。
2023/07/17(月) 10:33:38.53ID:1MjL2U0C
>>654
あの人の本だいたい中身薄いよな…
クイープ訳と同じくらい著者で敬遠するわ
662デフォルトの名無しさん
垢版 |
2023/07/17(月) 11:20:26.14ID:8CmoCsnZ
浅く広くさくっと読みたい初心者向けの本の方が売れるんだよ
一般書店に並ぶから
2023/07/17(月) 12:14:44.74ID:galtzlSN
普通は公式ドキュメントか、ソースからだよな
クリエイティブツールだと、ようつべで操作してんのみたりもせんではないけど
2023/07/17(月) 14:41:33.79ID:+IbP7SE4
日本語プログラミング言語なでしこ作者、クジラ飛行机:
「手軽に音データを扱えるのもRustの魅力です。
Rustで自作シンセ開発ブーム到来目前?!」
と書いてるけど、いわゆるブーム捏造なんじゃないの。
665デフォルトの名無しさん
垢版 |
2023/07/17(月) 14:49:29.12ID:tRotVpCU
あいつのはどれも30分立ち読みで十分な内容だからタイパがいい
まとめサイトみたいなもの


買わないけどね
666デフォルトの名無しさん
垢版 |
2023/07/18(火) 02:50:07.52ID:ArV4bzaH
苦心して漸く多次元配列構造体のイテレータやインデックスとか大体の演算が実装できた。ただし、今の所、全くマルチスレッド対応ではにいし、GPUの抽象化もできてない。
requires_gradも実装できてない。まだ、大分、長い道のりって感じだわ。
2023/07/18(火) 04:44:55.78ID:20jZ4czG
オープンソースは、暴力と同じ。
暴力を振るうことは人間の能力の一つではあるが、
それだと社会が成り立たなくなるので近代社会では禁止
されているのと同様、オープンソースは禁止すべきだ。
2023/07/18(火) 04:47:39.80ID:20jZ4czG
>>667
発展途上国で低賃金でミシン労働者を使うのは搾取なので
禁止すべきと言われているが、それとオープンソースは同じ。
逆に、ミシンの方だけ禁止してオープンソースは許容
するのは差別。
LGBTやジェンダーだけ問題視するのもおかしい。
オープンソースは人権侵害だ。
2023/07/18(火) 08:55:35.36ID:D1xcke2e
情報工学系ニキに聞いてみたい
volatileと書いたら、ついついatomicも付いてくると考えがちなのは、何の誤謬なのかな
2023/07/18(火) 10:13:13.27ID:xpmB4AL6
イメージとしては両者は逆だな
volatileはIOメモリなどアクセスのためメモリ直接演算の最適化せずに律儀に値の読み込み→値の演算→値の書き込み
atomicはマルチスレッドなど競合に対処するためアトミック指定のメモリ直接演算
2023/07/18(火) 11:09:47.82ID:8SlkaJNb
>>667
口先だけで禁止する自由は既にある
もっと現実的にするために暴力を使って実現する自由はない
現実主義を禁止すれば平和になる
672デフォルトの名無しさん
垢版 |
2023/07/18(火) 14:01:35.52ID:Jy8oOC40
高速に動くプログラムを作るには極力if文を減らす、コピーを減らす等のキャッシュ効率の向上、+=, -=, *=, /=等の演算子でできるだけ四則演算を回していく。ここら辺か。
Rustでこの様な工夫をしたところ、かなりサイズの大きい配列の計算が速くなった。
2023/07/18(火) 15:28:04.66ID:FdSfzeLG
>>672
本当はどんなマシン語(アセンブリコード)になるかを
知っていないと十分な高速化は難しいことがある。
それと、それ以上にアルゴリズムの
O(1)、O(log N)、O(N)、O(N logN)、
O(N^2)などの違いの方が遥かに重要だったりする。
数学が出来ない人は、後者が理解できない。
B.J.Stroustrup 氏もその辺が全く理解できて無い。
674デフォルトの名無しさん
垢版 |
2023/07/18(火) 15:40:09.79ID:Jy8oOC40
>>673
アルゴリズムの最適化は当然だろ。それはやった上での話だよ。
2023/07/18(火) 15:42:48.20ID:FdSfzeLG
>>674
ところが、重鎮のStroustrup氏は全く理解できてないので、
権威なため彼を信じた不幸な若い人は集団でデタラメな
理解になってしまっている。
676デフォルトの名無しさん
垢版 |
2023/07/18(火) 15:55:20.63ID:Jy8oOC40
>>675
Stroustrupって誰だよ。自分は全然知らないな。普通はアルゴリズムの最適化を行い、プログラム自体の最適化を行うもんだろ。
677デフォルトの名無しさん
垢版 |
2023/07/18(火) 16:06:28.75ID:fggT64M6
遅くなるの判ってても
.clone() しまくりたくなる誘惑
678デフォルトの名無しさん
垢版 |
2023/07/18(火) 16:12:19.35ID:Jy8oOC40
>>677
できる限り参照返しにしてる。
2023/07/18(火) 16:23:03.42ID:fggT64M6
>>673
>O(1)、O(log N)、O(N)、O(N logN)、
O(N^2)などの違いの方が遥かに重要だったりする。
数学が出来ない人は、後者が理解できない。

ほんそれ
2023/07/18(火) 16:26:10.43ID:fggT64M6
>>678
hoge.clone() したくなる場面(というかRustcがシレっとhoge.clone()しろって薦めてくるとき)
&hoge[..] とするだけで済むケースが結構あるけどこれ速くなってるよね?
681デフォルトの名無しさん
垢版 |
2023/07/18(火) 16:53:51.58ID:fFSHFUc1
仕事でやってるやつでアルゴリズムの単純なオーダーを理解できないやつなんていないだろ
amortizedを理解できないとかそういう話ならまだわからなくもないが
2023/07/18(火) 17:12:16.37ID:FdSfzeLG
>>681
アメリカ人は学者ですらちゃんと理解できて無い。
683デフォルトの名無しさん
垢版 |
2023/07/18(火) 18:33:02.09ID:ArV4bzaH
>>680
多分速くなってると思う。
気になるなら実際計測してみれば分かるのでは?
2023/07/19(水) 00:05:33.03ID:OLP4lycj
>>676
StroustrupはC++を作った人で少し前にその人の書いた記事が話題になってた
要約すると↓みたいな流れだったと思う

記事(英語)の内容
ファームウェアみたいにメモリアクセスが高価な環境では多少非効率でも
vectorを使った方がキャッシュ等の関係でパフォーマンスがよくなる
実測データでも数万件程度(うろ覚え)ではvectorが優位だった

記事に対するこのスレでの批判
何にでもvectorを使うように推奨するのはアルゴリズムを理解できてないからだ
685デフォルトの名無しさん
垢版 |
2023/07/19(水) 00:22:21.27ID:A8l3aPdJ
算数100点大先生がcache localityを理解できないという話をまたやるのか
2023/07/19(水) 00:38:56.49ID:BVUrsxWl
>>680
どういうコードでhoge.clone()をお勧めされるんですか?
2023/07/19(水) 01:09:55.37ID:uHB1pLL3
ハッシュテーブルが遅くなる攻撃を思いつくような奴は確率を信じてない
というかこのラインをこえたら信じないというローカルルールがある

そもそもローカルがグローバルより劣っているみたいな考えは数学で扱わないので
そんなものを信じる義理はない
2023/07/19(水) 01:44:50.95ID:I9n1c/oL
>>685
理解できて無いのはこのスレの馬鹿どもとStroustrup氏の法だ。
2023/07/19(水) 04:04:32.47ID:hoAEd/Nt
文脈が全くわからないのだがStroustrupの記事ってどれ?
2023/07/19(水) 08:41:42.67ID:fSe9gnNy
>>684
ほとんどの用途でベクターが有利というその主張で合っている
実際の各ユースケースで計算量の償却解析してみればわかる
691デフォルトの名無しさん
垢版 |
2023/07/19(水) 09:52:37.73ID:R6hIykH/
ハゲは>>684記事で実測を示したんでしょ?
692デフォルトの名無しさん
垢版 |
2023/07/19(水) 11:34:57.60ID:x9es5cRL
>>676
C/C++ スレでハゲと描かれていたらそいつのことだ
693デフォルトの名無しさん
垢版 |
2023/07/19(水) 11:37:33.24ID:x9es5cRL
>>684
>ファームウェアみたいにメモリアクセスが高価な環境では

それこそ「何にでも」なんて言ってない限定してる
2023/07/19(水) 12:59:18.29ID:j0DQe/l9
>>690
「ほとんどの」というのが嘘だ。
2023/07/19(水) 13:00:42.03ID:j0DQe/l9
この板は馬鹿ばっかりで、それで納得してしまうのかも
知れんが、海外のサイトだと、ちゃんと、リンクリストが
有利な場合が沢山あげられている。
696デフォルトの名無しさん
垢版 |
2023/07/19(水) 13:04:59.13ID:R6hIykH/
>>695
ハゲは>>684の記事で実測を示したんでしょ?
2023/07/19(水) 13:07:03.89ID:j0DQe/l9
>>696
そんなもん、実験条件と解釈がめちゃくちゃなので
証拠にならない。
理論や理屈を理解していなければ実験しても無駄な例。
698デフォルトの名無しさん
垢版 |
2023/07/19(水) 13:15:37.13ID:R6hIykH/
>>697
実験条件と解釈を読んだのかな?
内容をおせーて
2023/07/19(水) 14:05:33.79ID:uHB1pLL3
価値観を押し付け合うのは実は平和的だよな
相手の価値観に合わせる柔軟なタイプが最も危険で
相手が戦争嫌いではないと知ったら嫌いになるまで戦争をやめない
2023/07/19(水) 14:24:01.78ID:+s9cgmAB
Stroustrup師って、一人でさらさらって書いて出しちゃう御仁なのかな
こーゆうツッコミが入るのはわかるだろうにね やっぱ原著見ないとか
701デフォルトの名無しさん
垢版 |
2023/07/19(水) 14:45:35.26ID:x9es5cRL
>>699
なるほど折伏ですね判ります
702デフォルトの名無しさん
垢版 |
2023/07/19(水) 15:39:26.34ID:ZB5rrH9Z
https://www.tiobe.com/tiobe-index/
ruby抜けそう
Goくらいは抜いてほしいものだ
2023/07/19(水) 16:11:16.93ID:KlTfFVa+
>>702
惜しい
swiftが挟まってなければRRRだったのに
2023/07/19(水) 16:21:05.94ID:izSWunkt
やっぱりこうなるね
https://mevius.5ch.net/test/read.cgi/tech/1683600652/509-510
2023/07/19(水) 20:59:38.09ID:OLP4lycj
興味ある人のためにStroustrup氏の記事のリンク(Rust本スレのPart18で議論されてた)
https://www.stroustrup.com/Software-for-infrastructure.pdf

URLからも分かるけど記事のタイトルは「Software Development of Infrastracture」で内容は少しハード寄り
2023/07/19(水) 21:18:14.58ID:Ss9DWb65
>>702
スゲーCOBOLに勝ててるんじゃん
707デフォルトの名無しさん
垢版 |
2023/07/19(水) 21:21:56.85ID:L5673Vn2
>>705
ハゲの言うinfrastructure softwareはハードよりかどうかは関係ない
2023/07/19(水) 22:58:56.01ID:hoAEd/Nt
俺はハゲに同意かな
LinkedListはもはや古いデータ構造だと思う
現代のアーキテクチャにおいてはキャッシュメモリに乗せることがめちゃくちゃ重要なんだよ
LinkedListは挿入や削除を繰り返すとメモリアドレスがめちゃくちゃになりがちだし
ポインタを辿るという操作もページアウトなどを引き起こす
普通にポインタ配列のvectorが良い
もちろんreallocのコストが無視できない環境だと有効であるのは間違いない
2023/07/19(水) 23:21:25.02ID:hoAEd/Nt
キャッシュメモリがゴミカスレベルのサイズ
もしくは存在しないレベル
メモリアロケーションのコストが高い
追加削除が頻繁に起きまくるようなソフトウェア

これらの場合はLinkedListで良いかも
710デフォルトの名無しさん
垢版 |
2023/07/19(水) 23:33:20.68ID:/VZakDHW
コンパイラとかもろもろ最適化して計測するとndarrayクレートのArrayのイテレータよりも自分の作った多次元構造体のイテレータの方がまだ10倍くらい遅い。nextメソッドで呼び出される自作の外部関数の呼び出しがコストになってるっぽい。
2023/07/20(木) 02:38:53.91ID:w+pPERAN
馬鹿な人ほど、LinkedListを嫌う傾向がある。
2023/07/20(木) 02:50:37.46ID:o+4teY+W
ほとんどのケースでLinkedListが使われないのは遅いしメモリも余分に食うためだ
次の位置のアドレスを得るためにメモリアクセスが必要となり遅い
Vectorなら次の位置のアドレスはインクリメントするだけだ
前の位置も辿りたいならLinkedListだと双方向リンクでさらにメモリ使用量も増える
2023/07/20(木) 03:04:02.05ID:w+pPERAN
>>712
マシン語レベルで見ると、インクリメントと
次のアドレスを得るのはどちらも mov 命令1つで、
どちらも1クロックで時間に差は無い。
2023/07/20(木) 03:09:08.59ID:w+pPERAN
>>713
>次のアドレスを得るのはどちらも mov 命令1つで、
>どちらも1クロックで時間に差は無い。
間違えた。
正しくは、
「インクリメントは、add、次のアドレスを得るのは movだが、
 どちらも1クロックで必要時間に差は無い。」
2023/07/20(木) 03:15:52.51ID:zPjslGgC
いやだからメモリアクセスが支配的になるという話なのだが?
キャッシュメモリに乗ってないと致命的な速度低下となる
2023/07/20(木) 03:18:02.86ID:o+4teY+W
>>713
メモリアクセスに時間がかかることすら知らないならコンピューターの入門レベルからやり直せ
2023/07/20(木) 03:22:57.78ID:w+pPERAN
>>716
キャッシュメモリに乗っている場合の話だ。
乗っていない場合には、もちろんペナルティーが発生する。
ただ、ArrayListは、途中への挿入や削除がO(N)かかるが、
LinkedListは、O(1)だから、Nが10万の時には10万倍
の時間差となる。
一方、キャッシュのペナルティーは15(ns)くらいだから、
現在のCPUでは、45クロック位。
これだと、最悪のケースでも9倍程度だから、圧倒的に
LinkedListの方が時間的に安定。
2023/07/20(木) 03:25:15.25ID:w+pPERAN
はっきりいって、ここの数学的才能の無い連中にも
俺は説得できる説明が出来る自信は有るが、敢えて
やってない。なぜなら、それを論文にしてステップアップ
に利用すると言うずるがしこい連中を多く見てきた
からだ。
2023/07/20(木) 03:29:46.06ID:w+pPERAN
この板の人は、数学的才能の無い人ばっかなので
異常に馬鹿丁寧に説明しないと理解できない。
今回の説明でも馬鹿丁寧だが、経験上、この程度の
丁寧さでは理解できないだろう。
もっとアセンブリコードまで徹底して書いて、
キャッシュとメインメモリの関係の図を書いて、
大量の比較コードを提示して、やっと僅かに理解できる人が
一人現れる程度だ。
それなのに、自分は賢いと思い込んでいる。
また、文書が読めない人が多い。
音声で言わないと理解できないらしい。
だから、掲示板では無理。
2023/07/20(木) 05:22:45.38ID:ShEsV12p
はよ賢い人たちに説明しにいって、出禁にされてこい
2023/07/20(木) 06:31:51.97ID:zPjslGgC
>>717
LinkedListがO(1)なのは先頭に挿入する場合だけだぞw
サーチが必要な場合は当然O(n)
数学だけじゃなくCSも正しく理解できていないようだ
2023/07/20(木) 06:47:19.72ID:WN56tjQW
LinkedListすらまともに作れない言語ってどうなんだろうなw
2023/07/20(木) 07:29:26.02ID:o+4teY+W
>>717
キャッシュメモリに載っていてもいなくてもメモリアクセスのペナルティが発生する
キャッシュに載っていないメインメモリならレジスタの数百倍
L3キャッシュに載っていればレジスタの数十倍
L2キャッシュに載っていればレジスタの十数倍
L1キャッシュに載っていてもレジスタの数倍かかる
メモリアクセスはこのようにとても遅い

したがってレジスタのインクリメントだけでアドレスを得られるVectorの方が有利になる
さらにVectorなら次の要素はほぼ必ずL1キャッシュに載っている恩恵も加わる
ほとんどのケースでVectorが速いのはこれらメモリアクセスの観点も効いている
2023/07/20(木) 08:26:57.52ID:uyFqK2iH
ランダムアクセスになる場合なんかはlinkedlistなんかメチャクチャ遅くなる
例えばバッファサイズが8のフーリエ変換だと
1-5,2-6,3-7,4-8,
1-3,2-4,5-7-6-8,
1-2,3-4,5-6,7-8
とアクセスする
頭から読んでいくとものすごいコストがかかる
2023/07/20(木) 08:40:23.30ID:WN56tjQW
そのレベルで速度気にするんならCやC++の方がよくね?
2023/07/20(木) 09:05:41.95ID:o+4teY+W
全員がプログラミング言語に全く依存しない話をしてるところで唐突だな
2023/07/20(木) 09:35:16.93ID:2+rEEHlb
>>719
速度に影響を与え得る全ての要因を把握してれば理論的に予測できる
しかし多くの人は全把握していないことが実測の反例1つで明らかとなる
ハゲは>>684の記事で反例を示したってことなんでしょ? (俺は読んでないよ)
測定条件も恐らく1つではなくグラフの横軸に振って速度に与える影響を
示したんじゃないのかな?
728デフォルトの名無しさん
垢版 |
2023/07/20(木) 11:05:22.25ID:397DPwdK
ハゲの書いてることは00年代中盤にはCSでは一般常識化してた内容
実測すれば答えすぐ出るから
2023/07/20(木) 12:39:51.73ID:OPngbi2z
>>720
出禁にされた結果がこのスレや
2023/07/20(木) 12:47:25.92ID:6BSTmMYa
cargo は便利だけど crates.io の複数のモジュール同時使用で衝突するケースがあるよな
それぞれ単独で使うと問題起きないのに組み合わせて使うと死ねる
それぞれの開発者はたぶんお互いを認知してないかあるいは
どうなろうと知ったこっちゃないんだろ
2023/07/20(木) 12:56:38.69ID:6BSTmMYa
>>713-714
そういう問題じゃなくて
リンク先がキャッシュに乗ってなかったら大変コストが増える
って話だろ
2023/07/20(木) 13:00:04.58ID:6BSTmMYa
>>717
だからそれぞれの利点欠点を把握した上で使い分けようという話をしてるんだよな
ハゲは(ほぼ)全部Vectorとか極端だから馬鹿だと言われてるって話だよな
2023/07/20(木) 13:03:06.20ID:6BSTmMYa
>>721
明らかに君が可笑しい
2023/07/20(木) 14:30:33.52ID:LhjzUCmo
バランスを考えるのをやめろ
両極端の宗派はそのままにしておけ
統一するな
2023/07/20(木) 15:21:54.49ID:zPjslGgC
>>733
サーチが必要な場合、LinkedListはO(1)ではなくO(n)
どういう勘違いをしたのかも含めて教えてもらえるとありがたい
2023/07/20(木) 15:33:00.56ID:E8mUVG43
横からだけど
>>735

> >>717
> LinkedListがO(1)なのは先頭に挿入する場合だけだぞw

これじゃね?明らかに間違ってる
2023/07/20(木) 15:43:18.38ID:7U3pGa9H
LinkedListが一直線のリンクで実現してるのか、二分木とか赤黒木とかまで含んでるのかで話が変わる
2023/07/20(木) 15:51:48.08ID:zPjslGgC
>>736
うーん、じゃあもういいやw
739デフォルトの名無しさん
垢版 |
2023/07/20(木) 16:09:51.27ID:+MYe1bAK
同じO(N)でも性能は全く違うって話なのは理解してる?
2023/07/20(木) 16:12:38.55ID:zPjslGgC
このスレではLinkedListは常にO(1)ってことにしようw
よし使いまくるぞ!w
2023/07/20(木) 17:35:21.34ID:E8mUVG43
>>740
本当はしまったと思ってるけど開き直って違うことをかいてるんでしょう
みじめですね
2023/07/20(木) 18:03:33.53ID:7Xbf5imk
なおRust標準ライブラリのLinkedListの扱い
https://doc.rust-lang.org/std/collections/index.html

Use a `LinkedList` when:
* You want a `Vec` or `VecDeque` of unknown size, and can't tolerate amortization.
* You want to efficiently split and append lists.
* You are *absolutely* certain you *really*, *truly*, want a doubly linked list.
2023/07/20(木) 18:32:16.87ID:zPjslGgC
>>741
ほんと惨めやね
>>719のような人間は自分だと自ら証明してしまった訳だ
せめてid変えとけよって思うわw
2023/07/20(木) 18:57:14.98ID:KJVi0UK+
1. ソートされた状態でデータを管理したい
2. 走査は激遅でいいけどキーに対応する値1件の取得/挿入/削除は高速に行いたい
3. 取得/挿入/削除時に先頭末尾以外位置はリストにアクセスしなくても分かる
これらを満たしてる場合にのみLinkedListが候補の1つに上がる
2023/07/20(木) 20:29:35.29ID:2+rEEHlb
数学の人とオープンソースの人はひょっとして同じ人?
746デフォルトの名無しさん
垢版 |
2023/07/20(木) 21:52:17.16ID:aEdleXCL
ひょっとしなくても同じやつだろ
2023/07/20(木) 21:57:32.90ID:neDY19sM
>>744
>> 3. 取得/挿入/削除時に先頭末尾以外位置はリストにアクセスしなくても分かる

それはLinkedList全ての要素へのポインタ一覧を持っていないと無理だな
それをベクタで持つならその削除問題が発生してLinkedList利用の唯一の利点が消える
別のLinkedListで持つなら再び激遅な走査問題が起きる
2023/07/20(木) 23:49:45.08ID:KJVi0UK+
>>747
一般的にはLinkedListとHashMapを組み合わせる
一部の言語に実装されてるLinkedHashMap/OrderedDictionaryや
基本的なLRUキャッシュの実装でその組み合わせが使われてる
2023/07/21(金) 00:53:33.35ID:JyRjpbQR
一般的なLinkedListはともかくとしてRustに標準に実装されてる
use std::collections::LinkedList;
は前後のノードへのポインタで実現してるらしい
赤黒木がどうこうとかいうものではとてもなさそう
ランダムアクセスなんか劇遅やろ
そもそもLinkedListのくせに
「リストの中間地点に要素を追加したり、削除する操作が効率的にできるのも連結リストの特徴ですが、Rust1.26の時点では、そのような操作のためのメソッドが用意されていません」
とはどういうつもりなんやと
https://qiita.com/garkimasera/items/a6df4d1cd99bc5010a5e
2023/07/21(金) 02:25:21.34ID:bXmgkOZk
LinkedList単体で使おうとするとベクタ系での実装に対するアドバンテージがほとんどのケースで存在しない
またソートを維持したいならLinkedListよりもBTreeMapが有利
他にもそれぞれ目的別に有利なデータ構造がある

>>748
Rustにも毎日10万ダウンロードされているLinkedHashMapがある
https://crates.io/crates/linked-hash-map
2023/07/21(金) 02:46:28.99ID:yV1TyWhB
アルゴリズムやデータ構造の性能を評価する上で、
よく使われてきた計算量という指標の実用性も微妙になっちゃったな
2023/07/21(金) 03:01:04.83ID:2VYXkkOH
>>724
そのように番号で場所にアクセスするような
事に使用するにはArrayが有利。
単純なLinkedListは、番号でアクセスする用途には向いていない。
LinkedListを効率よく利用するには番号ではなくアドレスでアクセスする。
アドレスとは、ノードに付けられた唯一無二の名前。
この板の人達はその概念が全く理解できず、
いつまでも番号によるアクセスから頭が切り替えられないでいる。
753デフォルトの名無しさん
垢版 |
2023/07/21(金) 03:38:53.42ID:uRvhRVMm
ndarrayクレートはイテレータの高速化のためにZip構造体を使ってるって聞いたんだけど、Zip構造体ってどんなことやってんの?誰か教えて。
2023/07/21(金) 03:40:00.01ID:bXmgkOZk
>>752
それをしようとするとLinkedListの各要素のアドレスを持つもう一つのデータ構造が必要となる
さらにそのもう一つのデータ構造に対しても挿入や削除の処理が必要となる
2023/07/21(金) 03:49:23.59ID:bXmgkOZk
>>753
今一瞬しか見ていないがndarray::Zipは単なるタプル化
2023/07/21(金) 08:45:47.57ID:JJPP05HL
これがRustの実力だ

FirefoxがついにChromeよりも高速なブラウザに
https://gigazine.net/news/20230720-firefox-surpassed-chrome-speedometer/
2023/07/21(金) 09:30:46.83ID:wvgr6UMJ
そろそろ、(Rust世代の知見を組み入れた新世代の)C++でフルスクラッチが試みられてもいい頃合だな
2023/07/21(金) 09:59:32.61ID:7DNLJ1Kp
>>756
記事にはRustのRの字もないのだが本当に早くなった要因なの?
2023/07/21(金) 10:11:38.01ID:QmRMHzGa
まぁそんな結論出せるわけない
その結論出すにはFireFoxと同じアルゴリズムで別の言語で組み直して実測するしかない
そんな事誰もしない
しかしRustは他の言語に比べて抽象度はやや高め(C++等とでは)だから速度面とかでは不利になるはず
しかしそのディスアドバンテージが跳ね返されるくらいの性能がある事は実証されたとしていいやろ
2023/07/21(金) 10:27:50.89ID:AI3linaX
>>751
指標やハッシュ値や非可逆圧縮や浮動小数点数はある意味現実の劣化コピーだから
現実とお花畑の対立を煽れば煽るほど劣化コピーという身分が固定されてしまう
761デフォルトの名無しさん
垢版 |
2023/07/21(金) 11:44:03.63ID:wjGhTghi
>>751
絶対的性能を評価するためのものではなくて
要素数の変化に対する性能変化の次数(order of growth)を分かりやすく把握するためのもの
“計算量”という誤った訳語から受ける印象に引きずられてはいけない
762デフォルトの名無しさん
垢版 |
2023/07/21(金) 11:51:22.56ID:7DNLJ1Kp
トータルの消費時間を決定する要因は複数なんだから
律速段階も見極めずに最適化しても意味はない
2023/07/21(金) 14:00:29.86ID:7qvd6Y5g
>>759
抽象度が高いことによる速度面の不利はコンパイル時間の方で吸収してると思う
2023/07/21(金) 14:39:47.78ID:73tgjVOL
FireFoxは糞ブラ

Rustは糞言語

C/C++勝利
2023/07/21(金) 15:20:14.46ID:a1CVw2PP
>>763
2023/07/21(金) 16:03:44.31ID:JG1QJO7i
>>754
それが必要ない場合もある。
頭の良し悪しが問われる。
2023/07/21(金) 19:13:00.15ID:EuuKLcB1
フィールズ賞を受賞してる日本人で広中さんって人がいるよな
広中さんは「自分は鈍才だが、森君は天才」と言ってるそうな(wikipedia調べ)
このスレで数学の才能がどうのと言ってる人はこれもう
ひょっとしたら森さんなのかもしれんな
森さんって人も、フィールズ賞受賞してる数学の天才

このスレすげーな
768デフォルトの名無しさん
垢版 |
2023/07/21(金) 19:42:37.78ID:LLLiYepM
日本は30年以上フィールズ賞出てない
韓国は数年前出てる
しかもヲタ属性の好青年
2023/07/21(金) 19:48:10.45ID:EuuKLcB1
広中さんほどの人でも鈍才ってことなんだから
自分で数学の才能をアピってくるやつって
なんか凄い賞とか受賞してたりするんやろな
そうやって世界に認められてるんやろな
2023/07/21(金) 20:26:35.88ID:xlwh4aD5
そんなことよりLinkedListとO記法の勉強しろよw
2023/07/21(金) 20:45:01.52ID:7DNLJ1Kp
フィールズ賞で思い出したけどモッチーはどうなった?
宇宙際タヒミューラー理論(調べずに記憶をもとに書いてるw)
はどうなった?
2023/07/21(金) 20:50:46.81ID:AI3linaX
作品に罪はないと三回唱えれば
受賞が目標だった人もいつの間にか無罪が目標になってる
2023/07/21(金) 21:00:24.54ID:xlwh4aD5
>>771
タイヒミュラーな
フィールズ賞受賞で世界で3本の指に入る天才のショルツからの反論がなくなったのでもっちーの勝ち
2023/07/21(金) 21:05:46.80ID:EuuKLcB1
世の中には凄い天才がいるもんですねえ
2023/07/21(金) 21:08:55.93ID:7DNLJ1Kp
>>773
そうそうタイヒミュラー
そうなんだモッチー勝ったんだ
若かったらこの人も取ってたと聞いたことある
2023/07/21(金) 21:10:02.45ID:EmQ2vqLD
もうつべですら名前出なくなった
ここくらいやろ
2023/07/21(金) 22:04:13.55ID:xlwh4aD5
>>775
勝ったは勝ったが人格否定レベルの反論論文を出してしまったので
世界的に認められることはなさそう
2023/07/21(金) 22:30:59.27ID:1a4kRuD0
もしかしたら今数学板で暴れ回ってるアホここまで進出してるんかな
2023/07/21(金) 22:49:21.36ID:xlwh4aD5
そいつが同一人物なのか知らないがそれだったら皮肉だな
LinkedListの間違いを指摘し俺は数学科出身だ
2023/07/21(金) 23:04:33.44ID:/OSxXnE2
モッチーが勝ちと言ってる時点で数学科卒の面汚しとわかる
2023/07/21(金) 23:12:54.88ID:s5ilNDrf
たまたま間違い指摘されたやつが数学科とかw
こうなるともう数学にマウントを取られ続ける人生だな
宿命というべきか
2023/07/21(金) 23:32:01.38ID:AI3linaX
大衆の反逆とか、下民に足を引っ張られる問題に詳しい人がいて
じゃあ逆に上からマウントすれば問題ないよねって思いついたハッカーがいて
マウントが流行した
2023/07/21(金) 23:35:54.82ID:xlwh4aD5
安心しろ俺も数学は挫折した
ゼミの時の代数幾何の教科書で完全に心折れた
得意だったプログラミングの方に逃げただけだ
2023/07/22(土) 00:15:00.79ID:zZd5vg4P
mojo🔥が完成したらrust失速する?
2023/07/22(土) 00:25:44.41ID:GoncfkXA
本当に理想的な速度が出るならわからないが
まあ難しいと思う
同じ作者のswiftが速度的にはObjective-Cに比べると負けまくってる事実からそうそう簡単ではない
2023/07/22(土) 00:28:58.77ID:GoncfkXA
Rustのようにゼロコスト抽象化を踏まえた言語デザインをしないと難しいでしょう
pythonに型を指定しただけで速くなるなら
とっくに速くなっている
2023/07/22(土) 00:32:22.74ID:zZd5vg4P
そっか~
色々RustからパクってるみたいだけどPythonが多少マシになるならいいけど
2023/07/22(土) 00:44:48.84ID:htX2UcZa
Mojoの設計は積極的にC++とRustを批判してるもんな

>> C++とRustは、デフォルトで値を渡す方法についてプログラマと奇妙な戦いを始めたことに注意してください。
>> テンプレートは通常、コピーを避けるために const& を使用しますが、これは int のような単純な型を渡すには非効率的な方法です。
>> 私たちは、直接アドレス指定する型レベルのアノテーションを提案します。これにより、言語内の引数に対してより広範囲に借用を使用できるようになります。

>> 値のデストラクターを定義する方法ができたので、それを自動的に呼び出す必要があります。
>> ローカル値バインディングのデストラクターはどこで呼び出すのでしょうか? 主な選択肢は 2 つあります。
>> 私は Swift モデルに従うことを推奨します。これによりメモリの使用量が削減され、実際に問題が発生するのを見たことがありません。
>> これに関するトレードオフは、これによりC++ プログラマーが驚くべき可能性があるということです。
2023/07/22(土) 01:08:17.00ID:GoncfkXA
>>787
SIMDがLLVMベースで自動で最適化されたり
ムーブ代入できたりモダンな要素はあるけどね
2023/07/22(土) 01:08:28.87ID:htX2UcZa
Mojoにはsafeエリアが無さそうだな
つまりプログラム全体がunsafeエリアであるC++と同じ方針をとっているのか
Rustのようにコンパイラがなにもかも保証してくれるsafeエリアを設けないと対抗できないよな

>> Mojoにはまだ適切なライフタイムマーカーのサポートがありません。
>> つまり、返された参照を推論できないため、Mojoはそれらをサポートしていません。
>> 明示的なポインタを渡すことで、安全でない参照を返したり保持したりできます。

>> Mojo は、オブジェクトを破壊できると判断するとすぐにオブジェクトを破壊します。
>> つまり、安全でない参照があるオブジェクトの有効期間を手動で延長する必要があります。

>> 左辺値が返されないということは、適切なライフタイム生涯サポートが構築されるまで、
>> 特定のパターンを実装するにはマジックキーワードが必要であることも意味します。
>> そのようなパターンの1つは、オブジェクトから安全でない参照を取得することです。
2023/07/22(土) 01:30:10.61ID:psW1WegU
Pythonは何しろユーザー数多いからね
それを取り込んじゃう戦略
Rustより有望かもね
792デフォルトの名無しさん
垢版 |
2023/07/22(土) 08:35:49.24ID:YLqzZrt5
Rustが馬鹿向けという評価には全く同意である
だからと言ってRustが馬鹿専用かというとそうでもない
上級者も馬鹿向けのRustを利用しては逝けないという障壁は全く無いのだから

きみらにとって現在はC/C++の習得コストは0かも知れないが
過去に初見からのC/C++の習得コストがどうだったか思い出して欲しい
2023/07/22(土) 08:44:04.68ID:YLqzZrt5
>>767
広中さんはMac使ってたけどコンピュータに関してはかなり音痴な方だった
数学能力と情報処理能力は必ずしも比例しない
2023/07/22(土) 08:46:08.53ID:YLqzZrt5
>>767
>広中さんは「自分は鈍才だが、森君は天才」と言ってるそうな(wikipedia調べ)
wikipedia 観たけど「森君は天才」なんてどこにも書いてないぞ
森君ってひょっとして森毅のことか
2023/07/22(土) 08:46:16.17ID:OpWxnY6j
>>792
俺はすごく時間かかったけど、普通は・モチベがあれば速いんじゃねーの
他人をバカにしてはいけない
2023/07/22(土) 09:07:15.86ID:eFQEbPGf
>>794
森重文の人物の欄に書いてる

> 広中平祐は「自分は鈍才だが、森君は天才」という[8]。
> 8. ^ 「気鋭の数学者 京大数理研に集う」、『日本経済新聞』2015年9月2日朝刊。
2023/07/22(土) 09:16:42.85ID:eFQEbPGf
>>247
> 俺は実世界ではとても優秀だと評価されている。

これってフィールズ賞のことだったのか?
そりゃ優秀だわ
2023/07/22(土) 10:52:28.80ID:wzDYyI8z
自己評価高すぎる爺って周りから煙たがられてそう
2023/07/22(土) 12:47:34.51ID:tvxxAvU4
キャッシュメモリ云々の話は解決したの?
2023/07/22(土) 14:05:46.99ID:o1deZ1gA
それより病気の治療が先
2023/07/22(土) 14:17:40.70ID:j4FWBx/w
トポロジー理論を極めると細かい差異が見えなくなってドーナツとコーヒーカップが同じになるとか言うし
数学の才能があってアルゴリズムを極めた人間には実世界で計算量のオーダに付随する係数も見えなくなるんだろう
だから(1000000×N)と(3×N^2)は常に(3×N^2)の方が大きく見えるようになるし
それに違反する実測結果もすべて(高々有限個の)例外にしか見えなくなる

話が通じない場合も多々あるけど我々とは見えてる世界が違うと思って諦めるしかない
2023/07/22(土) 14:27:29.52ID:psW1WegU
そもそも数学が極まってる人にはとても見えないのだが...
2023/07/22(土) 14:27:59.80ID:eFQEbPGf
ここにいるやつらって基本、数学できるやつだと思うんよ
子供の頃から算数も数学も別に苦手としてなかっただろ?
全科目サボってた割に数学物理は点取りやすかっただろ?
だから理系の理学部、理工学部、工学部に進んだりしただろ?

でも
その時周りに「数学の才能がある」とか自らアピってるやつおった?
一体どれだけの才能に恵まれたら自らアピりだすんだろうな
2023/07/22(土) 15:49:30.96ID:YLqzZrt5
>>801
>数学の才能があってアルゴリズムを極めた人間には実世界で計算量のオーダに付随する係数も見えなくなるんだろう

簡単な例だと nCr の公式
Σ(n!/(r!(n-r)!))
馬鹿正直にこの通りにloopすると無駄な計算が多い
2023/07/22(土) 16:16:53.88ID:kAWTuV72
なんかのAAに見えてしまう俺(ry
2023/07/22(土) 16:38:56.50ID:j4FWBx/w
シグマつけるとnCrの公式じゃなく2^nになるな
2023/07/22(土) 16:52:58.46ID:NWfMWzFP
普通にかけて行ってO(nklog(n))くらいはすぐ思いつくけどもっと早い方法あるん?
2023/07/22(土) 16:59:32.04ID:NWfMWzFP
もちろん固定長レジスタで桁数の増大分も込めてO(knlog(n))ね
桁数の増大無視、純粋な掛け算、割り算回数なら掛け算2k-2回、割り算一回で2k-1回の四則演算で出せる
桁数がO(n)だから一回の乗算、除算はn×log(n)前後
もっと早くできる?
2023/07/22(土) 17:08:56.89ID:GoncfkXA
>>801
N→∞に飛ばすんだよ?
1000000より遥かに大きい数がNと考えても良い
係数なんか意味なくなるでしょ
2023/07/22(土) 17:11:59.52ID:NWfMWzFP
あ、わかった
Binetの公式で少し早くなるのかな?
2023/07/22(土) 17:20:36.85ID:j4FWBx/w
>>809
工学上実用的なNの範囲では係数が大きな意味を持つ場合もあるんだけど
そうやってすぐに係数を捨てちゃうから話が通じなくなるってこと

と言っても通じないから結局諦めるしかないんだけどね…
2023/07/22(土) 17:36:20.37ID:GoncfkXA
>>811
O記法は実用的な話はしてないよ
あくまでアルゴリズムの計算量だけに特化したもの
実際はNが支配的じゃないような場合は多々ある
そういう理解をしておくべき
2023/07/22(土) 17:37:57.59ID:GoncfkXA
まあとはいえそんな係数だけが大きい定数となるケースはほとんどないのでだけどね
そのような場合は間違いなくNが関与していることが多い
2023/07/22(土) 17:41:04.50ID:GoncfkXA
数学が苦手な人はこのように基本的な定義とか定理をきちんと理解してないことが多い
それなのにこの場合はおかしい!と言う
定義に戻ってみるとそんな場合のことは言ってないことが多い
2023/07/22(土) 17:46:37.41ID:GoncfkXA
O記法はnを無限大に持って行った時の話
o記法はnを無限小に持って行った時の話
きちんと定義を確認しよう
これらは大学の微積でやるよ?
ちな数学での定義は厳密に書かれているから分かりにくいが直感的な理解の仕方を自分で考えるのが良い
2023/07/22(土) 17:55:32.12ID:XFIdOXKk
ちゃうで
https://ja.m.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%80%E3%82%A6%E3%81%AE%E8%A8%98%E5%8F%B7
2023/07/22(土) 18:03:08.40ID:GoncfkXA
厳密に書くとそうなるだけだよ
無限大や無限小を正確に表すにはイプシロンデルタや上界下界の定義が必要
ただこれらはプログラマにとってはオーバースペックなので俺のいう上の直感的な定義を理解しとけばよろしい
2023/07/22(土) 18:07:40.13ID:GoncfkXA
数学がある程度出来る人は正確な定義と
理解するための直感的な考え方を持ってる
しかし教科書ではその直感的な考え方を書くと同業者から不正確だ!って突っ込まれるので書きにくい
だから勉強しにくい
ほんと困ったものです
2023/07/22(土) 18:16:40.96ID:GoncfkXA
O記法やo記法はnを無限大/無限小に持って行った時
どういう関数になるのか?を表しているだけなのです!
どん!ね、簡単でしょ
2023/07/22(土) 18:20:17.39ID:sToEtmK8
京大の数学専攻に行った人知ってるけどまあひどいありさまだよ

中学の担任がまずそれで暴力教師
社会に出てあった人はうつ病で施設を行ったり来たり
もう一人は中退して地元帰ってきてギャンブルにのめりこんで今もパチプロみたいな生活してる
2023/07/22(土) 18:23:18.53ID:kAWTuV72
確率計算がさくっとできちゃうからパチプロできるんだったりして

雀士とかいうのも聞いたことある マンガとかでだけどw
2023/07/22(土) 18:38:00.93ID:sToEtmK8
一般生活でも自然現象を見て脳内でモデル作って偏微分の境界条件とか気になる人が数学が出来る人
2023/07/22(土) 18:46:30.74ID:sToEtmK8
その人たちの共通点は一つ

本人が理不尽だと感じることには絶対妥協しないで最後まで食い下がってくる
狂気を感じた
2023/07/22(土) 20:16:03.51ID:DM7c04yB
>>819
わかりやすくて草
この理解でいいね
2023/07/22(土) 20:38:27.64ID:bCf8Jd0F
O記法o記法に無限小は出てこない。

>>816が参照出しているんだから少しは読めよ。
2023/07/22(土) 20:53:08.15ID:tvxxAvU4
沢山数式暗記してても馬鹿は馬鹿なんだよな
2023/07/22(土) 21:00:51.86ID:XFIdOXKk
>>817
イヤ厳密に言ったらも何も全く意味が違う
完全に誤解してる
2023/07/22(土) 21:06:42.21ID:YhxH2f1t
>>818
ぼやけたjpegも圧縮率が高ければ文句言われない
不正確でも短ければ良い
長文は悪い
829デフォルトの名無しさん
垢版 |
2023/07/22(土) 21:50:16.59ID:kdu4dn9d
>> テンプレートは通常、コピーを避けるために const& を使用しますが、これは int のような単純な型を渡すには非効率的な方法です。

な?C++20便利だろ?
2023/07/22(土) 22:36:24.52ID:nB6v7J6K
計算量でスモールoとか使う場所あるの
831デフォルトの名無しさん
垢版 |
2023/07/22(土) 23:22:57.00ID:kdu4dn9d
そういえばJAXAに居たとき使ってたわ
2023/07/22(土) 23:43:43.06ID:pjILcF77
ロケットが失敗続きな理由がなんとなくわかった
833デフォルトの名無しさん
垢版 |
2023/07/22(土) 23:47:22.27ID:kdu4dn9d
俺が辞めたからだろ?
2023/07/23(日) 08:32:47.35ID:YG1/7f33
マジレスすれば、いかに優秀でも一人抜けたくらいで…といったところだが、
人材流出ネタを聞くたびに、ひょっとして…と思ってしまう自分が情けない
835デフォルトの名無しさん
垢版 |
2023/07/23(日) 09:44:20.13ID:mLgzCYW9
ロブ・パイクの「プログラミング5カ条」

ルール2:処理速度を測定すること。測定して、コードのある部分が他の部分を圧倒しない限り、速度の調整をしてはいけない。

ルール3:派手なアルゴリズムは、入力値のnが小さいと処理が遅い。そして通常、nは小さい。派手なアルゴリズムは大きな定数を持っている。nが頻繁に大きくなることがないなら、派手なアルゴリズムは使わないようにすること。(nが大きくなっても、まずルール2を適用すること)


https://gigazine.net/news/20200817-rob-pike-5-rules-programming/
2023/07/23(日) 09:55:53.38ID:DSw9DmtI
LinkedListの挿入削除は常にO(1)!だから最強!


オーダ記法を最近覚えて得意げに使ってそう
Javaの入門本でもArrayListとLinkedListの使い分けはこういう用途でやりましょうって書いてあるよねw
2023/07/23(日) 10:58:23.71ID:bnyHswx7
給料もらってるのに辞めるとか、課金してもサービス終了するようでは
フリーソフトに対する優位性がなくなってしまう
2023/07/23(日) 11:19:29.58ID:kMNWXVHy
>>804 の実装で一番早いのは
パスカルの三角形で縦に足して行くやり方の気がする
2023/07/23(日) 11:39:51.12ID:kMNWXVHy
>>818
CS用語って量子化とかエントロピーとか変に数学とか物理の用語借用してるのがまずいんだよな
全然関係無い概念で混乱する
2023/07/23(日) 11:43:20.98ID:NhS1+0R5
クライマックスシリーズはまだはやい
2023/07/23(日) 11:48:32.16ID:kMNWXVHy
>>832
>>832
打ち上げの動画で今のロケット責任者の頭抱えてる姿観るとあれじゃだめ感
842デフォルトの名無しさん
垢版 |
2023/07/23(日) 11:49:16.91ID:kMNWXVHy
>>834 だった
2023/07/23(日) 11:51:24.56ID:kMNWXVHy
>>836
挿入削除だけで参照も検索もしないなら高速だね
四次元ポケット欲しいな
2023/07/23(日) 12:06:43.78ID:GuX7KEu3
>>838
ネタなのかマジなのか分からんけど高速な実装を考える前に
とりあえず(1+a)^nを展開して両辺のaに1を代入してみよう
2023/07/23(日) 14:11:34.49ID:OiBoM91I
Rustは、コンパイル速度が遅いと言う噂があるが、
VC++(msvc、precompiled header利用時)と比べると
どうなんだ。
2023/07/23(日) 14:12:51.60ID:OiBoM91I
コンパイル速度は、本を見てるだけでは分からない事
の一つだな。そして大規模開発には物凄く重要となる。
2023/07/23(日) 15:04:02.22ID:ILZNl6Xo
さすがにそこは、clangと比べるべきでは
2023/07/23(日) 15:47:54.37ID:kMNWXVHy
>>844
それがどうかしましたか?
849デフォルトの名無しさん
垢版 |
2023/07/23(日) 15:55:24.23ID:ZTC84cTM
let hoge = "a";
println!("{:2}後ろ",hoge);
let hoge = "あ";
println!("{:2}後ろ",hoge);
表示幅を揃えたいのですが上のやり方だと
後者の「あ」と「後ろ」の間にスペース1文字入ってしまいます
hogeに「あ」か「a」かどちらが入るか不定の時
どうするのが定石?
2023/07/23(日) 16:38:44.72ID:bnyHswx7
traitを作る
とりあえず定石無視でimplする
2023/07/23(日) 16:40:47.70ID:OMFtuUSH
>>849
unicode_widthとかで表示幅を求めて調整する
調整したい文字列集合の最大値ベースの調整だけでいいか
1行で表示したい最大長ベースの調整も必要かは用途次第
2023/07/23(日) 18:04:59.73ID:hD/uYp9Y
メモリ安全性は大規模開発時に有利に働く特徴なのだが、
コンパイル速度の遅さなど、Rustにはそれとは逆の特徴も
持っており、ややこしいぞ。
2023/07/23(日) 21:22:05.78ID:lmJrnSr9
幅曖昧問題は指定するしかない
https://www.unicode.org/reports/tr11/images/tr11.h1.jpg
https://www.unicode.org/reports/tr11/images/tr11.h2.jpg
2023/07/23(日) 22:53:08.93ID:bnyHswx7
コストカットに取り憑かれたら
文字列cloneしてスペースを付け足して返すコストも
許可がないと支払えない人間になったりして
知らんけど
2023/07/24(月) 03:35:04.61ID:tlNrTE5b
C++だと、ライブラリが大きくなってもコンパイル速度が
遅くなることは無い。異常に大きくなった場合には
リンク速度が遅くなることが有る程度だが、通常は
遅さを感じることが無い程度に留まる。
Rustだと、crateが大きくなったりcrateの個数が増えると
コンパイルが遅くなったりするの?
2023/07/24(月) 04:35:03.66ID:8nghHebx
ブラウザにはJSがあるから
C++やRustのコード修正と再コンパイルをすることなくJSのコードを修正すればいい
これが大規模開発ではないというなら小規模で十分
2023/07/24(月) 07:01:01.92ID:E3S0vo4U
どうやろ?
コンパイラの暗黙の了解でサイズに対して処理は線形にならなければならないというのがある
流石にその範囲ではあるんじゃないの?
ただ線形は線形でも係数がでかいんかな
それだけならコンピュータが早くなれば体感的には改善していくはず
2023/07/24(月) 08:50:15.20ID:b4teMFwb
Rustのcratesの依存関係でcargoが予期せぬものをいっぱいダウンロードするから
遅い回線だと(一回目の)コンパイル(というかコンパイルの準備)は超遅くなる
2023/07/24(月) 11:25:58.22ID:Jt1K3EYN
デフォルトが全部静的リンクだからそれが遅いのもある
2023/07/24(月) 11:35:01.87ID:DOk3bTYa
>>858
その「遅い回線」って何?
2023/07/24(月) 13:30:21.48ID:LicyyNi9
>>860
時間帯によっては遅いことがある。
技術や能力の差ではなく、お金持ちかどうかで出来ることが
違ってくるのはおかしい社会。
862デフォルトの名無しさん
垢版 |
2023/07/24(月) 13:34:38.77ID:DOk3bTYa
>>861
>技術や能力の差ではなく、お金持ちかどうかで出来ることが
>違ってくるのはおかしい社会。
お前それ左翼の発想そのものじゃねーかwww
863デフォルトの名無しさん
垢版 |
2023/07/24(月) 13:36:23.66ID:DOk3bTYa
通信インフラってのは
ソフトウェアの複製がゼロコストなのと違って
コストが掛かるんだよ
2023/07/24(月) 13:39:12.35ID:LicyyNi9
>>862
左翼は能力の差まで無視しようとするで。
2023/07/24(月) 13:51:35.63ID:DOk3bTYa
>>864
典型的にはいわゆる「優秀」な人を
民意を無視して登用するシステムと理解しているが?
政治家として優秀かはさておき
日本でも共産党って学歴偏重でしょ?
2023/07/24(月) 13:59:42.61ID:7fuealYq
自分用には、そこそこ全体がコンパクトな方が好きかなあ

仕事用には、回線も装置も会社のものだから兎も角なんだが
2023/07/24(月) 14:04:31.32ID:LicyyNi9
「コンパイル速度が遅い」という噂が立ってるんですが、
実際は、crateのダウンロード速度が遅い、ということなんですか?
2023/07/24(月) 14:05:59.45ID:LicyyNi9
>>865
明らかに能力の無い女性を、最も能力の高い男性しか
就けない役職に無理やり入り込ませようとするのも
左翼なんだけど。
869デフォルトの名無しさん
垢版 |
2023/07/24(月) 14:07:33.73ID:1ixoDG3j
>>868
例えば? 煽りではなく
2023/07/24(月) 15:00:19.41ID:056Z4jSG
イヤちゃうやろ
流石にそれはコンパイラの作業量が純粋に多いから遅いでしょ
そりゃC++と比べて早くなるわけない
チェックしてる事多いんだから
871デフォルトの名無しさん
垢版 |
2023/07/24(月) 15:30:37.55ID:9sf7J+PW
>>861
それはプログラム板で主張することじゃないやろ
2023/07/24(月) 16:03:16.33ID:7fuealYq
C++派だが、C++もたいがい遅いだろ
pchとか使うのが習慣化してるけど

そういや、結構前からmoduleってのが使えるけど、きちんと使ったことないな。。
2023/07/24(月) 17:44:58.93ID:u3xro2aJ
>>869
能力が低い女性を政治的圧力で無理やり色々な場所に
押し込んできたから日本はこんなにめちゃくちゃに
なってるのに。
2023/07/24(月) 18:20:23.66ID:dGeJrBxo
10人必要っぽい場所に20人投入すればいいのに
10人投入してめちゃくちゃになってから10人追加するやつって何なの?
戦力の逐次投入なの?
875デフォルトの名無しさん
垢版 |
2023/07/24(月) 18:51:49.12ID:DOk3bTYa
>>873
何の話だ?
ちゃんとスレを遡って文脈を把握してから書いてくれ
2023/07/24(月) 21:47:00.51ID:Zw6srC2c
>>874
20人必要そうなら最初から20人要求しろよ。

10人で合意しているのに20人にして予算倍増させた責任は誰が取るんだよ。
2023/07/24(月) 22:22:14.29ID:dGeJrBxo
自己責任ってあれほど言ったのに
自己とは誰なのか
誰も知らないんだよな
878デフォルトの名無しさん
垢版 |
2023/07/25(火) 01:43:34.89ID:bta56IUp
多次元配列のライブラリの演算スピードがまだnumpyより倍くらい遅い。また、速くできる要素は利便性の観点から悩ましい。rayonを使えばnumpyの倍速くらいにはできるようになった。
2023/07/25(火) 03:35:47.01ID:w8nK1FpQ
>>878
それはライブラリを改良すれば今後良くなっていくだろう問題
なので、余り気にすることは無い。
それより、今後も改善しにくい問題のほうが問題。
Rustにも色々な問題が有るようだ。
2023/07/25(火) 08:41:35.71ID:UPZxbC6+
スピードが必要な部分だけRustを使わないようにすれば解決
2023/07/25(火) 08:54:51.87ID:k8WJtY+U
そういえば君らのメモリ管理の会話でLinkedListの使い道思い出したわ
Rustやその他の言語側じゃなくてOS側のメモリ管理にLinkedList使われてるわ
2023/07/25(火) 09:01:07.57ID:k8WJtY+U
>>874
デスマは人数増やしても解決しない
ステマは露出増やすと賞賛される
2023/07/25(火) 09:02:56.16ID:k8WJtY+U
>>880
unsafe {} 便利ですね判ります
2023/07/25(火) 09:03:45.28ID:P1fUbQNp
まぁ調べてみると確かに行列配列系の計算は“生rust”だと難しいんやろな
でかいデータを高速に捌くには“参照”をうまく使いこなしてなるべく“コピー”の回数を減らすくらいしかアルゴリズムの改善は見込めない
しかしrustは安全性の観点からC++のそれより所有権、生存期間の抽象度、制約を一段引き上げてる
だからそれでも速度が欲しいならunsafeで囲って危ない橋を渡るしかない、実際rcとかarcのソース読むとundafeだらけやしな
逆に言うとユーザーがその“危ない橋”を渡らなくても済むようにライブラリがあるとも言える
885デフォルトの名無しさん
垢版 |
2023/07/25(火) 13:32:44.33ID:cCDBQCCP
>>884
ArcやRcは使用はやめた。マルチスレッド化の時にだるいことが多いから。仕方ないのでreshapeメソッドとかでは配列をクローンすることにした。
886デフォルトの名無しさん
垢版 |
2023/07/25(火) 13:34:21.22ID:cCDBQCCP
あと、行列の計算とかでループのスピードを速くするために次元はconst N: usizeを使ってる。
2023/07/25(火) 13:51:24.76ID:nk58GX8+
海外のサイトを見ていたら、Rustは、インクリメンタル
ビルドが遅いらしい。だから、ソースを細かく分けすぎると
遅くなるのかも知れない。しかし、ビルドの高速化の
ために発明されたのがインクリメンタルビルドだった
のだから、本末転倒の厄介な問題だ。
なんでも、リンクに10秒くらいかかるのだとか。
ある人によれば一時間くらいかかったと言う。
888デフォルトの名無しさん
垢版 |
2023/07/25(火) 13:53:33.03ID:nk58GX8+
>>887
crateの初回使用の時にフルコンパイルされる
ので遅いのは、それはそれで困るが、ギリギリセーフ
だとしても、それ以上に厄介なのは、自分のソースを
少しいじってビルドしなおしても、リンクはどうしても
必要だから、そこで10秒もかかってしまっては
開発は非常にストレスがかかってしまうことだ。
2023/07/25(火) 13:58:22.63ID:nk58GX8+
中くらいの大きさのプロジェクトで、
structの中の一行を変えるだけで、5分かかって
困っていると言う報告も見つけた。
890デフォルトの名無しさん
垢版 |
2023/07/25(火) 14:00:01.53ID:uSv6E5ak
>>888
リンカーは共通だろうからC/C++と差はないと思うのだが?
891デフォルトの名無しさん
垢版 |
2023/07/25(火) 14:15:10.14ID:nk58GX8+
https://www.reddit.com/r/rust/comments/11vrzme/help_me_love_rust_compilation_time/

Hey all, I've been writing software for about 15 years, Started from VB, .NET (C#), Java, C++, JS (Node), Scala and Go.

I've been hearing about how Rust is great from everyone ! But when I started learning it one thing drove me nuts: compilation time.

Compared to Go (my main language today) I find myself waiting and waiting for the compilation to end.

If you take any medium sized OSS project and compile once, it takes ages for the first time (3,4 minutes, up to 10 !) but even if I change one character in a string it can still take around a minute.
892デフォルトの名無しさん
垢版 |
2023/07/25(火) 14:31:37.57ID:iTChcdyR
cargo 使ってるときに rust にリンカオプション教える方法教えて
2023/07/25(火) 14:32:50.71ID:nk58GX8+
海外のサイトを見ていて考えられる要因の候補
・マクロの使いすぎ。Rustのマクロは乱用すると遅いらしい。
・メモリー不足で仮想記憶が働いてしまっている?
2023/07/25(火) 14:37:55.45ID:nk58GX8+
Rustは、ファイル単位でなく crate 単位でコンパイルするらしい。
だから、あるソースファイルの1行を直してもcrate全体の
コンパイル時間が必要となる。
C++が、ファイル単位でコンパイルするのと対照的となる。

Q: Does Rust compile fast?
A: For incremental builds, Rust will take longer to compile
than C++ (i.e. C++ wins).
This is because Rust compiles one crate at a time,
rather than one file at a time like in C++,
so Rust has to look at more code after each small change.
Jan 5, 2023
2023/07/25(火) 14:41:52.08ID:MikqYz6X
でcrateってのは複数ファイルに跨ることが多いわけ?
それとも1ファイルに複数のcrateが実装されることが多いわけ?
2023/07/25(火) 14:49:22.82ID:nk58GX8+
>>895
前者だろう。
2023/07/25(火) 14:54:39.48ID:MikqYz6X
>>896
なるほどー
で触ってないファイルもコンパイルし直すのでクソだって話ね
直せるのでは? 少なくともC/C++の水準には出来るはず
2023/07/25(火) 14:55:34.04ID:iTChcdyR
create の document の comment coverage てやっぱり判りにくいな
2023/07/25(火) 17:54:05.55ID:eTFG8/xx
Rustもまだまだだなー

Rustを始めるにはまだ早いな(時期が悪いおじさん式
2023/07/25(火) 18:01:39.24ID:UOy+ke99
incremental buildはcodegen unit単位
開発者が明示的にリビルドを指示できるのはcrate単位

incremental buildなら変更が不要なcodegen unitはリビルドされない
codegen unitは1モジュールで2つ(non-genericとgeneric)
デフォルトでは1crateにつきcodegen unitの上限は256なのでそれを超えるようならマージされる

モジュール単位なのでファイル単位よりも細かい
2023/07/25(火) 19:11:44.72ID:nk58GX8+
難しいね。
2023/07/25(火) 23:14:21.10ID:PfWx6dVw
Cの (shared) objectファイルには型情報がない
というかアセンブラの出力と同じ形式にしないとアセンブラを使いにくい
型を無視すればリンクが速い

ヘッダファイルを厳密に管理し、なおかつヘッダを変更しまくれば
C++やRustと似たような遅さになるかもね
2023/07/26(水) 03:55:53.44ID:lJlGHJrp
ああだから良く判らないcratesが乱立してるのか
cratesに分割すればするほど効率は上がる
crates.ioは氾濫して収拾付かなくなる
904デフォルトの名無しさん
垢版 |
2023/07/26(水) 12:19:34.24ID:kTr42gXw
>>902
C++はRustほど遅くない
2023/07/26(水) 14:36:33.56ID:+VPKYlg4
cast するにも int x から (long long)x でコンパイルされるのと
x: i32 から x as i64 でコンパイルされるのと天と地ほどの時間差がありそう
2023/07/26(水) 18:02:28.67ID:oS2bmI+b
コンパイル時間かかるのは多相型から単相型を導出するとこじゃないの?
2023/07/26(水) 18:32:17.02ID:JPp8jJPL
rust好きだけどJS/TSエコシステム並みにcrateの粒度が小さいのはちょっと厳しいよな。
apacheみたいなのに集約するのはもう時代じゃないんだろうけどさ。
908デフォルトの名無しさん
垢版 |
2023/07/26(水) 18:57:07.57ID:jPIzcFjy
いつのまにかWindowsでAndroidアプリが動くようになってる
これは便利
2023/07/26(水) 20:27:27.27ID:fbe27uY+
>>906
Foo<Bar>がn回導出されたらコンパイル時間がn倍になるかどうか
Foo<Bar>とFoo<Baz>が導出されたらBar==Bazの判定にどれだけ時間がかかるか
2023/07/27(木) 00:57:46.43ID:as7IkMsZ
型パラメータの候補が複数見つかったらすぐに諦めて競合エラー吐いてる印象
cargo checkだけだと割と軽いからジェネリクスの実体化(コード生成)が重いのかもしれない
型ごとに使ってる処理を割り出して必要な分だけ生成してそうだし
911デフォルトの名無しさん
垢版 |
2023/07/27(木) 02:10:00.11ID:+a559wq5
>>907
私はnumpy並みにデカいパッケージを作ろうと思ってますよ。
2023/07/27(木) 08:24:40.27ID:mogDSubD
>>909
ウソかホントか知らんけど上の方の話だとRustのコンパイルが遅いのはファイル跨ぎの再コンパイルをやらされるからとか
なぜファイル跨ぎの再コンパイルが多発するかといえばやはり多相性の問題じゃないの?
posix系のアーカイバは分割コンパイルを可能とするために関数呼び出しの方法を標準化してる、すなわち呼び出し引数の数と種類が与えられた時、その引数を関数側のローカルスタックに順にセットして呼び出す、そのルールがわかっていれば呼び出し側、呼び出され側は引数の種類と順番がわかっていれば分割してコンパイルできる、たとえはCだとそれを実現するために呼び出し側は関数側の内容全部をしらなくてもよいが引数の種類だけはコンパイラに教えないといけない、それがプロトタイプ宣言
ところが多相型を利用する言語では呼び出し側と呼び出され側の内容が相が多相型だとposix標準ではリンクの方法が定められてないからこのシステムを使う事ができない
なのでHaskellではファイルにまたがる最上位の多相型は明示しないと行けない、明示しない物はコンパイラが勝手に単相化すると言う単相制限(monomorphism restriction)をつけて対処する
一方でRustはその手の制限は設けない、好きにやれと言う立場で単相型決定に必要な“型方程式”に関わるものがファイルを跨いで巨大化する事を禁止しない、その代わりコンパイルが遅くなるのは我慢しろと言う立場なんでしょ?
913デフォルトの名無しさん
垢版 |
2023/07/27(木) 08:30:54.30ID:+a559wq5
>>912
Rustはライブラリとかのバージョン管理を徹底しているからでない?実際、すべてのライブラリのバージョンはCargo.tomlに明記されてるし、rustのエディションもここに明記されてる。この結果コードの一部を変えただけでもまずCargo.tomlの中身に変更がないかコンパイラが見ないといけない。その後、Cargo.tomlに記載されたライブラリを使ってるすべてののファイルのライブラリ使用に関してチェックしないといけなくなり、これによって少しの変更でもクレート全体の再コンパイルに繋がっているのでは?
2023/07/27(木) 08:54:12.15ID:GoQM94Wc
>>912
Nimはもっと良いぞ
2023/07/27(木) 08:54:59.21ID:xfctCHbO
>>913
イヤ、ライブラリのタイムスタンプが違えばとかいうのはCでもC++でも同じ、それで言語間の差はない
C,C++とRust,Monomorphism restriction外したHaskellに差があってコンパイル上の、特に分割コンパイル絡みの差がどこで出てるかの話なんだから
2023/07/27(木) 08:57:49.70ID:4+9enMhq
GC無し最速動作のできないNimは論外でスレ対象外
2023/07/27(木) 09:05:43.60ID:xfctCHbO
一例はお題スレで出てた答え
https://itest.5ch.net/mevius/test/read.cgi/tech/1668333636/969

このfooという関数の型はこのソースだけでは決定できない
呼び出した側がvec<i8>とかvec<i32>とか呼び出した側の要求に応じて初めて単相型が決まる、その時点で初めてスタックに何がどんな順番で積まれるのかが決まる
なのでこの場合posix標準のライブラリ管理の方式では呼び出し側と呼び出され側を別々に分割コンパイルできない

抜粋 (全角スペース使用)
fn foo(input: u32) -> impl Iterator<Item = u32> {
 let table: Vec<u32> = bits_iter(input)
  .map(|p| 1 << p)
  .collect();
 (0..(1 << table.len())).map(move |bits| {
  bits_iter(bits)
   .map(|p| table[p as usize])
   .sum()
 })
}
2023/07/27(木) 09:12:08.48ID:xfctCHbO
おっと、この例は中身はu32固定だったな
多相性はiteratorのところだった
まぁ本質同じ、呼び出され側が多相型の場合、呼び出し側の要求と折り合いをどこでつけるのか決定するには両方のソースの型情報が必要、そしてこのような多相型の標準化はposixのライブラリシステムにはない
2023/07/27(木) 09:14:53.79ID:4+9enMhq
>>917
そのfooにジェネリック無いだろ
2023/07/27(木) 09:28:11.91ID:4+9enMhq
>>918
そのIteratorにも多相性はない
型は確定している
2023/07/27(木) 09:48:28.92ID:GoQM94Wc
>>917-918
ωωω
2023/07/27(木) 10:03:28.53ID:+SEMblDr
>>916
分割コンパイルの効率を考えるのにGCあるなしは関係ない
勝手に対象から外すな
2023/07/27(木) 10:12:31.52ID:+SEMblDr
>>917
C++のtemplateだとヘッダに実装を全て書けば同じ問題が生じることになるが
明示的実体化することでこの問題は避けられる
2023/07/27(木) 10:26:22.29ID:8yXVmnx7
だからu32のとこ読み替えてって言ってるやん
2023/07/27(木) 10:32:44.98ID:xpSIuq71
アレ?
rust の impl trait が返り値に指定されてるのは多相型じゃなかった?
Haskellの

( Num A ) -> [ A ]

とかの糖衣表現でしょ?
上のはstd::iter::Iteratorのtraitのインスタンスは全部取れるんじゃないの?
2023/07/27(木) 10:40:56.55ID:xpSIuq71
>>923
そう、この問題を従来のposixのライブラリ管理で無理クリ実現するには関数側が提供できる可能性のある多相型をあらかじめ“全部”用意しといてlinkerが適切な関数を選んでも使うくらいしかない
まあしかしそんな事実際不可能
結局多相型が別ファイルにまたがる場合全ファイルの提供側の多相型と右辺値で現れる制限との型方程式を全部集めて解くしかない
おそらく将来的にはML型の多相型を使う言語全体で多相型の型を分割コンパイルが自由にできるようになるには言語を跨って多相型のインターフェースの規格なりなんなりが定まってこないと無理
当面それは難しいからHaskellはデフォルトで使用禁止、Rustは遅いの我慢しろにしてるんやろ
2023/07/27(木) 10:58:53.97ID:Ak2CsEEh
>>925
引数のimpl traitはその関数にとってどんな具体型がやってくるかわからないから多相であり具体型ごとに単相化される
返すimpl traitはその関数にとって具体型が確定しているから多相ではない
2023/07/27(木) 11:13:06.60ID:WdhxKs44
>>927
上の例だと返り値は確定してるんですか?
返り値はItem=u32のiterator型なら何でも取れるのでは?
vec<u32>でもLinkedList<u32>でも
呼び出し側の注釈でas vec![u32]なり何なりでいくらでも返り値変えられるのでは?
2023/07/27(木) 11:18:43.07ID:WdhxKs44
Item = u32であるIterator traitのインスタンスね
上の例は返り値がItem=u32のiterator traitを持つ任意の型を返り値にとれる
じゃないの?
2023/07/27(木) 12:01:34.76ID:GoQM94Wc
collect correctly
2023/07/27(木) 12:03:41.01ID:as7IkMsZ
関数の戻り値が
(0..(1 << table.len()).map(...)
だから戻り値の型はMap<Range<usize>, F<Output = u32>>
(Fはラムダ式の型でコードでは表現できない)
これをimpl Iterator<Item = u32>で代替表記してる

関数の戻り値を変えれば別の型にもできるけど
関数内で分岐して複数通りのIterator実装型を返すのはimpl traitでは無理なはず
2023/07/27(木) 12:04:36.92ID:Ak2CsEEh
>>929
その通り
しかし関数が返す型はその関数にジェネリックパラメータがないなら常に具体的な型が確定していて多相ではない
今回の>>917のfooならrangeに適用のmap()を返しているからstd::iter::Map型
2023/07/27(木) 12:08:33.21ID:Ak2CsEEh
>>931
同じことを被った乙
関数内で分岐しても別の型を返すなら返し型を静的なimpl traitにできず動的なdyn traitになる
2023/07/27(木) 12:15:53.12ID:/bGsBsBb
でも確かに昔のweb情報見てるとできないって書いてるページあるけど

----
impl Traitは異なる型を返せない

impl Traitは静的ディスパッチなので異なる型を返すことはできません。このコードはコンパイルエラーになります。

fn foo(x: u32) -> impl Iterator<Item=u32> {
if x == 0 {
Some(0).into_iter()
} else {
0..x
}
}
----
https://qiita.com/taiki-e/items/39688f6c86b919988222より

しかし実際上の例ではコンパイル通ってるのでは?
2023/07/27(木) 12:19:18.73ID:/bGsBsBb
具体的に上の例ではIterator<item = u32>は何か単相型に決まってしまうんですか?
[u32]とかvec<u32>とか勝手にコンパイラが決めてしまうんですか?
それ以外の型で使おうとしたらコンパイルできないの?
ホント?
2023/07/27(木) 12:45:27.87ID:/bGsBsBb
Haskellの例だと下のコードは通ります

https://ideone.com/VQHxZ9

sqTo100 :: ( Enum a, Num a ) => [ a ]
sqTo100 = [ n^2 | n<-[1..10]]

main = do
print $ ( sqTo100 :: [ Int] )
print $ ( sqTo100 :: [ Float] )

5行目ではsqTo100は[Int]型を返す関数として、6行目では[Float]型を返す関数として“臨機応変に”使い分けてくれます
ただしこのような“多相型を返す関数”はPosix標準のLinkerが準拠していないのでHaskellではファイル毎という制限がありますけど
(monomorphism restriction)
rustではできないんですか?
2023/07/27(木) 12:47:44.86ID:mFFFavmH
複おじの好きそうな話題
よかったな
2023/07/27(木) 14:12:15.53ID:+SEMblDr
>>926
>まあしかしそんな事実際不可能
不可能でない場合も結構多いけども? C++で話をすると
templateパラメータでPOD型しか取り得ない場合は結構ある
POD型なんて限られているので全部明示的インスタンス化しておけば
ビルド時間は短縮できる
2023/07/27(木) 14:38:15.87ID:V6/hbrNj
>>935
impl Traitはargument positionの場合はgenericと同じだけど
return positionの場合は呼び出し内容によって実装が変わるわけではないのでmonomorphizeされる

>>917の例だとMap<Range<u32>, closure>
closureはFnMut(u32) -> u32に近いもの
2023/07/27(木) 14:56:22.32ID:V6/hbrNj
思いっきりガイシュツやった
なんで同じこと何回も聞いてるんだよ
2023/07/27(木) 21:42:00.32ID:x4QyUuiY
>>935
関数の戻り型は未定のgeneric parameterを含まなければその関数のコードにより型が一つに定まっている
そしてIteratorは型ではなくtraitなので具体的なtrait実装型が関数のコードにより定まっている

一方で具体的なtrait実装型の中でもparameterとして他の型が含まれると記述が長く指定も面倒になってくる
例えば型parameterに入る他の型にも型parameterが付いて多段になることもよかある
コンパイラはそれらの複雑な指定の具体型を推論で確定できるが人間が記述するのは面倒で可読性も悪い
そのため具体型ではなくimpl traitと具象型を書くことで記述性と可読性を向上できる
2023/07/27(木) 21:43:40.45ID:x4QyUuiY
クロージャは具体型を書くことができない
各クロージャは全て異なる型が自動付与されるがコード上でそれを記述する方法がないためだ
その場合を具象型としてimpl Fn/FnMut/FnOnceを指定できる
2023/07/27(木) 23:16:49.96ID:383XGmyH
すいません
全然わかりません
結局Rustでは>>936のような多相型の返り値を返す関数はかけないんですか?
944デフォルトの名無しさん
垢版 |
2023/07/27(木) 23:27:43.84ID:5YX5RIhz
単にジェネリック使えばいいだけだろ
Haskellやっててここまで頭悪いやつ見たの初めてだわ
2023/07/28(金) 09:03:31.47ID:3WCp+Y82
このスレは、Rust嫌いな人も集まるスレなんだぞ。
そして、Rustの欠点を書いているのは改良してもらいたいから
ではなく、Rustに退場してもらいたいからだ。
2023/07/28(金) 10:46:00.43ID:Zgvcm9f5
そ、うそだったのか
2023/07/28(金) 13:34:05.05ID:plp8L3in
>>944
イヤ、上の方で「Rustの返り値にimpl traitをとった場合それがジェネリックにならない理由」を述べてる人いるやん?
それが関数返り値に多相型を取れない理由になるならRustの関数返り値は常に単相型になってしまう、でもそんな事ないでしょつて言ってるんですよ
ともかくRustの説明てそういう理屈に合わない説明をする人かなりいるから困るんですよ
頭わるいのは認めますよ

頭わ悪くてすいません
2023/07/28(金) 13:45:48.26ID:/QxH2HMp
すいません
結論としてRustでは>>936のような「呼び出し側の都合に合わせて返し値を返す関数」は型変数使って書けば書けるけどimpl traitの書式だと書けない、理由は仕様、でいいんですか?
2023/07/28(金) 13:57:57.50ID:muXw35+Y
総称型と部分型をどっちも単に多相って呼んでるから訳分からなくなってるんでは?
2023/07/28(金) 14:02:06.50ID:K+Na1vWv
>>949
それかもしれません
説明していただけますか?
Haskellの多相型にはそんな区別はないと思います
それはRustで定義された用語ですか?
2023/07/28(金) 14:07:57.62ID:muXw35+Y
>>950
やだよ
TaPL読んでろ
2023/07/28(金) 14:10:58.16ID:GMHqUp+Z
impl traitの中にgenericsの型パラメータ含めればいい
936をRustで実装すると↓みたいになる
(RustにはEnumクラスもNumクラスもないからFrom<u8>で代用してる)

fn iter_sq_to_100<T>() -> impl Iterator<Item = T>
where
T: Copy + From<u8> + std::ops::Mul<Output = T>,
{
(1u8..=10u8).map(|v| {
let t = T::from(v);
t * t
})
}

fn main() {
// 戻り値を受け取る側からTの型を指定
println!("{:?}", iter_sq_to_100().collect::<Vec<u32>>());
println!("{:?}", iter_sq_to_100().collect::<Vec<f32>>());

// 関数を呼び出す側からTの型を指定
println!("{:?}", iter_sq_to_100::<u32>().collect::<Vec<_>>());
println!("{:?}", iter_sq_to_100::<f32>().collect::<Vec<_>>());
}

ただしこれは型パラメータで戻り値が多相的になってるだけでimpl traitでそうなってるわけではない
多相型もジェネリクスも一緒だと思うけどHaskellとの対比だとクラスをBoundに置き換えればいいのかな
2023/07/28(金) 14:40:11.65ID:g7faSWJw
>>952
すいません、やっぱりわたしの疑問とは違っています
わたしの理解では「impl traitは引数、返り値に一般型をとるが特定のtrait 境界を持つものを指定する場合の糖衣構文」だと思っていたのです
つまり先の例impl Iterator<Item = u32>であれば
①まず

 fn myF(××) -> impl T {...}

の記法でTはtypeではなくてtraitである(ここにtraitが来る事が impl trait 記法の呼び名の理由、この記法は

fn myF(××) -> impl A, where A;T{...}

の糖衣構文で「myFはtrait Tのimplementを持つ任意の型を返す関数」を意味する
と思っていて、よって先の例
fn foo1(input: u32) -> impl Iterator<Item = u32> {...
ではfooはItemがu32であるIterator traitを持つ任意の型を返り値として持てる関数だと思っていました、もちろん自分で好きなクロージャ作ってそれにIterator<Item = u32>をimplementすればそれを返り値に持てると思っているんです
しかしそれは違う、fooは単相型、型は決定しており返り値のサイズも配置も決定しているので分割コンパイルできる(そもそも分割コンパイルの話の中で出てきた話なのでここでの多層性はもちろんこの意味)というツッコミが入ったのでホントかと、もうこのソースでRustはfooの返り値の型を完全に決定してて別のファイルからfooを呼ぶ場合にも別々にコンパイルしてposixの標準のリンカが使えるのかなんてことができるのかと
少なくともHaskellではできないはずです
2023/07/28(金) 15:00:21.91ID:GMHqUp+Z
少なくともfooを呼ぶ側はfooの実装とリンクされるまで
返されるimpl traitのサイズも実際の型も分からないから
完全に分割コンパイルが可能とは言えないね
型が分からないと呼ぶべき関数の実装も分からないから標準(?)のリンカは使えない
traitを実装しててその関数が存在することだけは分かるけど

ただfooの戻り値のimpl traitの型は(型パラメータがなければ)
fooの実装側で完全に決定される
「正体が分からない単相型」って感じ
2023/07/28(金) 15:13:12.73ID:GMHqUp+Z
リンク時に外から型サイズを指定できるオブジェクト形式だと頑張れば分割コンパイル可能なのかな
あまりこの辺は知識がない
2023/07/28(金) 15:26:38.94ID:orZ7jJno
なんかよう分からないけど、この数日のスレ見てても
imp,trait,whereなど知らない概念が多すぎてRustは難しすぎる。
2023/07/28(金) 15:55:11.46ID:CGNQVLgE
>>953
間違った思い込みをしてる
まずは公式ドキュメントを読みましょう
https://doc.rust-lang.org/reference/types/impl-trait.html
2023/07/28(金) 16:22:37.19ID:cNvH/3YC
>>957
間違ってますか?
結論的に
impl Iterator<Item = u32>
を返り値として持つ関数をFile Aで定義して事前コンパイル、その後File Bで独自のIterator <u32> のinstanceを持つ型を作った場合、rust compilorはcompile済みのfile Aをlinkするだけでいいんですか?
2023/07/28(金) 16:33:53.87ID:2BokdQo2
具体的にはどうするんですか?
file AにはItemとしてどんなサイズの型を指定されるかわからないわけですけどcompilorは各引数を受け取る時スタックのどこに第××引数が格納されてると決定できるんですか?
昔のweb情報では「impl traitが静的にアクセスするアドレスを決定できるように多相な型にするには oxで囲まないとダメ」とありました
Boxedである事を要請すれば確かに事前にアドレスを決定できます
しかし先の例ではBoxedてないので呼び出し側が要求する返り値のサイズが決まっていなければ生でスタックに並べられたら呼ばれた関数は引数を読み出せないんじゃないですか?
もちろん動的に呼び出す時に引数のサイズ与えればできますけどRustはアクセスすべきアドレスをコンパイル時に静的に決定してるんじゃないんですか?
2023/07/28(金) 16:45:41.21ID:4cjf/6GX
関数の返し型を具体的に書くかimpl Traitと書くかの違いはもちろん明瞭にある
簡単な例で説明する

// まず実験用のおもちゃ(5ずつ増えるイテレータStepFive)を用意
pub struct StepFive { n: i64 }
impl StepFive {
 fn new(init: i64) -> Self { StepFive { n: init } }
 pub fn cur_value(&self) -> i64 { self.n } // 注意: イテレータには不要な追加機能
}
impl Iterator for StepFive {
 type Item = i64;
 fn next(&mut self) -> Option<Self::Item> { self.n += 5; Some(self.n) }
}

// このおもちゃイテレータを返す関数を二つ用意する
// 返し型を具体的に StepFive と書くケース
pub fn step_five_1(init: i64) -> StepFive { StepFive::new(init) }
// 返し型を impl Trait の形で書くケース
pub fn step_five_2(init: i64) -> impl Iterator<Item = i64> { StepFive::new(init) }

fn main() {
 // イテレータとしてはどちらも当然機能する
 assert_eq!(vec![5, 10, 15], step_five_1(0).take(3).collect::<Vec<_>>());
 assert_eq!(vec![5, 10, 15], step_five_2(0).take(3).collect::<Vec<_>>());

 // しかしイテレータにない機能を使うと違いが明瞭に出る
 assert_eq!(123, step_five_1(123).cur_value()); // コンパイル通る
 assert_eq!(123, step_five_2(123).cur_value()); // コンパイルエラー method not found in `impl Iterator<Item = i64>`
}
2023/07/28(金) 16:46:14.77ID:4cjf/6GX
>>960の続き

つまり返し型を具体的に StepFive と書けばその型の機能をフルに活用できる
しかし返し型を impl Iterator<Item = i64> と書けばイテレータとしての機能のみが使える

後者はコンパイル時に StepFive の実装を知る必要がなくなる
つまり後者は next() で Option<i64> が返るという「impl Iterator<Item = i64>」の一般的知識のみでコンパイルできることになる
その代わり後者は StepFive にcur_value() というイテレータとは別のメソッドがあっても使えないという違いが出てくる
2023/07/28(金) 16:49:54.59ID:GMHqUp+Z
>>956
C++20もconceptとかrequireとか言い出してるから心配しなくていいよ
そのうち追い抜く

>>959
リンク時に確定する呼び出しも「静的に決定される」扱いでいいんじゃないのか
リンク時にアドレスの書き換えとかすると思ってたけど
どこまでがコンパイルでどこからがリンクなのか分からん
2023/07/28(金) 17:13:12.78ID:CGNQVLgE
>>958
コンパイルエラーになるよ
まずは基本的なドキュメント読んで出直してよ
今の段階ではここでやり取りしてもお互いに時間の無駄
964デフォルトの名無しさん
垢版 |
2023/07/28(金) 17:40:24.39ID:sn3bIpOK
>>962
>C++20もconceptとかrequireとか言い出してるから心配しなくていいよ
最近のC++に問題が多数混入したことは知られているが、
人気が絶頂だったころのC++はシンプルで分かり易かったぞ。
2023/07/28(金) 17:59:52.30ID:gdkptAW0
>>964
今はそれより高機能なのにシンプルなRustがベターだね
traitと(代数的データ型である)enumの二つだけ追加で覚えれば済むから
2023/07/28(金) 18:02:55.59ID:GMHqUp+Z
人気が絶頂だったころのC++っていつのC++だ
C++17あたりかな

まさかC++98とは言わんよな…(当時は言語の選択肢が少なかったと思うけど)
2023/07/28(金) 18:26:18.74ID:sn3bIpOK
C++98位が絶頂。
968デフォルトの名無しさん
垢版 |
2023/07/28(金) 19:04:47.55ID:Ih8SBU9O
>>956
流石にそれはRustへの知識が足らんだろ。impl, trait, whereは全てRustでは必要不可欠な概念だぞ。ここら辺がわかってないとなると構造体に関する理解も怪しいだろ。
2023/07/28(金) 19:33:09.89ID:sn3bIpOK
>>968
でも覚えたくないから。
2023/07/28(金) 20:29:08.19ID:rzH+uNMJ
>>956
traitの概念と用法だけ覚えればよくてimplとwhererは一般的な言葉と同じ

implは単なる「実装」
「impl Trait」が型指定の位置に来れば「Traitを実装」している型の意味
「impl Trait for 型」は「その型にTraitを実装」宣言
「impl 型」は「その型を実装」宣言

whereは説明を後置する関係副詞と同じ
型に対してtraitによる境界(制約)などを指定
2023/07/28(金) 20:33:57.60ID:rDj5FSnq
>>967
そっからは…JavaScriptなんかが本気で伸びていった時期か。
2023/07/28(金) 23:59:27.11ID:GMHqUp+Z
C++アンチの大半はC++98を嫌々使ってた世代だろ
C++0xが16進数のBになるとは思わなかった
2023/07/29(土) 02:08:00.81ID:MBm8IaU2
ポコチンファイト
2023/07/29(土) 03:40:53.45ID:yFHJJQio
C++は、98年頃、非常に人気であった。
それが、どんどん人気を失い、現状に至っている。
2023/07/29(土) 05:56:52.93ID:oT83Ayc0
人気があったのはあくまでc とかの古い言語に対してだろ。

当時もperl5とかのスクリプト言語の方が人気だったし。
2023/07/29(土) 10:55:11.31ID:m3e/8XSV
>>965
its true👍
2023/07/29(土) 12:15:13.32ID:mCbo+dID
>>975
C++は、C++11以後、改悪された。
2023/07/29(土) 12:34:34.52ID:XwXxiU6u
>>974
最近また順位を上げてきてるって記事見るよ

>>977
廃止された機能はほとんどないので
C++11が好きならC++11の範囲で使えば良い
その意味では改悪ってことはない
2023/07/29(土) 12:37:22.94ID:mCbo+dID
C++以後とはC++11自体も含む。
C++11が改悪の最初。
2023/07/29(土) 12:42:47.89ID:mCbo+dID
C++11が最良と思っている人はC++が最悪の言語に
見えることだろう。そしてそういう人がRustを礼賛
しているように見える。
ちなみに、Stackoverflow の Most Loved Language
は、実際に使用した上で好き嫌いを表明した人を分母
とした上での好きな人の比率に過ぎないので、
たとえば、
C++ : 好き=50:嫌い=50, 愛され率 50%
Rust : 好き=7:嫌い=3, 愛され率 70%
のようになっているに過ぎない。
この場合、C++好きはRust好きの7倍以上居るが、
比率的には愛され率が50%になってしまって、
Rustより愛されて無い、という結果になってしまうが
それは統計上の一応の数値に過ぎない。
981デフォルトの名無しさん
垢版 |
2023/07/29(土) 12:56:18.62ID:XwXxiU6u
>>979
じゃC++-98使ったら?
moveなしなんて俺は考えられん
2023/07/29(土) 12:56:58.78ID:mCbo+dID
新しいものが良いものだという固定観念は間違い。
C++は、C++98が最良で、C++11で改悪されごちゃごちゃに
なった。
C++を愛する人はC++98を愛した人。
C++11以後を見ると改悪された後なのでごちゃごちゃになった
醜態を見る事になり、C++が大嫌いになる。
そして、そういう人がC++を完全に避けるようになり、行き場所を
失い、Rustを礼賛している。
983デフォルトの名無しさん
垢版 |
2023/07/29(土) 12:58:15.78ID:XwXxiU6u
>>982
相変わらず不勉強な人だな
適応できないとうよりおまいさんは単なる怠惰なんだよ
2023/07/29(土) 12:58:56.51ID:mCbo+dID
>>981
moveは、std::vectorをメインコンテナに位置づけたから
必要となった概念に過ぎない。LinkedListをメインコンテナ
にすれば、不要となる。そして、ここでいうLinkedListとは
本来のLinkedListの事であり、std::listのことでない。
C++委員会は馬鹿ばっかっりなので、本来のLinkedList
を全く理解できて無い。
985デフォルトの名無しさん
垢版 |
2023/07/29(土) 12:59:13.66ID:XwXxiU6u
>>982
moveなしのC++なんよく使う気になるね
986デフォルトの名無しさん
垢版 |
2023/07/29(土) 12:59:23.06ID:mCbo+dID
>>983
違う。
常識が間違っている。
2023/07/29(土) 13:01:23.60ID:mCbo+dID
>>985
数学や右脳的IQが低い人にはLinkedListは理解が難しい
概念とされているため、LinkedListを使わない人に
とって、moveは必須となってしまうが、バグの温床と
なっている。
そのために出てきたのがRust。
何もかもが間違っている。
988デフォルトの名無しさん
垢版 |
2023/07/29(土) 13:02:06.55ID:XwXxiU6u
>>984
>moveは、std::vectorをメインコンテナに位置づけたから
>必要となった概念に過ぎない。
違うだろwww
std::vectorの高速化にも役立つが
vectorのために作られた概念では断じてない
989デフォルトの名無しさん
垢版 |
2023/07/29(土) 13:03:53.63ID:XwXxiU6u
>>987
moveの導入はstd::vectorとは関係ありません
std::vectorでも役に立つってだけ
990デフォルトの名無しさん
垢版 |
2023/07/29(土) 13:06:10.18ID:XwXxiU6u
>>986
いや怠惰だよ
オープンソースを嫌う理由も書いているのを読んだ
適応障害かな?と思っていたが単なる怠惰だよ
991デフォルトの名無しさん
垢版 |
2023/07/29(土) 13:09:29.91ID:XwXxiU6u
この人の行動パターンは新しいことを学習することを極度に嫌うんだな
それ自体は当人の自由だが
「俺が覚えたくない新しいことは間違ってるのでおまいらも覚えるな
おまいらは馬鹿だ」って考え方はどうなのよ?
2023/07/29(土) 13:10:49.76ID:mCbo+dID
はっきりいって、std::vectorとそれに類するデータ構造
以外では、moveはほとんど役立ってない。
2023/07/29(土) 13:11:57.95ID:mCbo+dID
もちろん、意味が有るケースもあるが、コンピュータでは、
「率」が重要となる。
重箱の隅をつつくような事を重視して、優先順位の高い
ことを疎かにすれば、良い結果にはならない。
2023/07/29(土) 13:15:00.69ID:mCbo+dID
コンピュータの世界では何かの概念を導入すると、
必ずと言っていいほど、別の何かとはトレードオフに
なってしまう。
だから、優先順位や使用率、遭遇率、出現確率などを
常に考慮し続けなければならない。
その配慮に欠けているのが(C++11も含む)C++11以後。
そして、Rustは優先順位が間違ったC++11の悪いものを改良して
しまったから、汚い最悪の言語となってしまっている。
センスの悪い言語と言える。
995デフォルトの名無しさん
垢版 |
2023/07/29(土) 13:39:52.19ID:XwXxiU6u
>>992
>はっきりいって、std::vectorとそれに類するデータ構造
>以外では、moveはほとんど役立ってない。
お前のくそコードがそうなのは否定しないよw
996デフォルトの名無しさん
垢版 |
2023/07/29(土) 13:41:30.10ID:XwXxiU6u
>>994
>コンピュータの世界では何かの概念を導入すると、
>必ずと言っていいほど、別の何かとはトレードオフに
>なってしまう。
トレードオフの結果moveによって失われたものを述べよ
2023/07/29(土) 13:44:38.55ID:XwXxiU6u
>>984
>本来のLinkedListの事であり、std::listのことでない。
何が違うの?
2023/07/29(土) 13:51:09.21ID:5uFTVg8T
その人small oの意味間違ってた人?
あの数学力見るととても言ってるほど賢いと思えない
2023/07/29(土) 14:01:34.25ID:mCbo+dID
>>998
俺はそんな間違いはしない。別人だろう。
1000デフォルトの名無しさん
垢版 |
2023/07/29(土) 14:04:41.52ID:mCbo+dID
>>997
手短に言えば、本来の使い方をするためのインターフェースだな。
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 28日 16時間 8分 6秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


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

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

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

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

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