C++の色々配慮してめんどくさい感じは好きだけど、実務になったらメモリ安全性とか考えて今後Rustに変わっていくんかな」
「うだうだ言ってないで仕事で必要なのをやればいいんだよ、趣味なら好きなのやればいい」
っていう雑談スレ。
前スレ
https://itest.5ch.net/mevius/test/read.cgi/tech/1688129795
関連スレ(マ板): Google&MS「バグの70%はC/C++。Rustにする」
https://medaka.5ch.n...cgi/prog/1619943288/
探検
結局C++とRustってどっちが良いの? 6traits
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2023/07/29(土) 15:05:46.55ID:2Hm/yplK664デフォルトの名無しさん
2023/08/18(金) 21:41:06.14ID:VmqYer8d Goのスライスは現実社会の物を表しているとも言える
1,2,3と書かれた箱が並べてあって、あるスライス(窓)が1,2を指しているとする
そのスライスに4の箱を追加されたとしたらどのようになるのが望ましいか
Goは現実世界のように1,2,4,3と箱が並ぶ
Pyothonはどこかから急に箱が表れて
1,2,4と言う並びの箱の列と1,2,3と言う並びの箱の列ができる
1,2,3と書かれた箱が並べてあって、あるスライス(窓)が1,2を指しているとする
そのスライスに4の箱を追加されたとしたらどのようになるのが望ましいか
Goは現実世界のように1,2,4,3と箱が並ぶ
Pyothonはどこかから急に箱が表れて
1,2,4と言う並びの箱の列と1,2,3と言う並びの箱の列ができる
665デフォルトの名無しさん
2023/08/18(金) 21:42:56.92ID:seEzfIxj なるほど、スライスと言われてなんとなくわからんでもない挙動には見えてきた
でもやっぱりバグを呼び込むためだけの仕様にも思える
こんな仕様にして誰か幸せになるんかな
でもやっぱりバグを呼び込むためだけの仕様にも思える
こんな仕様にして誰か幸せになるんかな
666デフォルトの名無しさん
2023/08/18(金) 21:45:59.61ID:pJm/stU2 >>665
スピードマニア、つまりgo ユーザー。
スピードマニア、つまりgo ユーザー。
667デフォルトの名無しさん
2023/08/18(金) 22:01:59.17ID:UHKUI4sz C++もRustもわかりやすい仕様だけどGoよりスピード出る
668デフォルトの名無しさん
2023/08/18(金) 22:23:22.38ID:Jp8sOWVj Goは言語設計をミスってるな
>>630
// 実験3: 要素の追加 (その1)
a = append(a, 777)
この部分は他の言語だとメソッド名こそ異なれど
a.add(777)
a.append(777)
a.push(777)
a.push_back(777)
となる
メソッド名は自由だがこの形式が正しい
Goの失敗の原点はここだ
a = append(a, 777)
>>630
// 実験3: 要素の追加 (その1)
a = append(a, 777)
この部分は他の言語だとメソッド名こそ異なれど
a.add(777)
a.append(777)
a.push(777)
a.push_back(777)
となる
メソッド名は自由だがこの形式が正しい
Goの失敗の原点はここだ
a = append(a, 777)
669デフォルトの名無しさん
2023/08/18(金) 22:31:11.69ID:7ABRPFiH 言語とライブラリを分離できないと潰しがきかない
C++の場合mallocやsjljを単なるライブラリではなく言語の一部にしたのが悪手
C++の場合mallocやsjljを単なるライブラリではなく言語の一部にしたのが悪手
670デフォルトの名無しさん
2023/08/18(金) 22:42:32.22ID:hfXr0Ior671デフォルトの名無しさん
2023/08/18(金) 23:16:43.53ID:Xs4y23Ew 手軽というのは実際はただの手抜きなんだよ
その尻拭いをさせられてきた良識ある若者が次の世代のためにRustのようなものを産み出す
それを無自覚な老害が腐す
その尻拭いをさせられてきた良識ある若者が次の世代のためにRustのようなものを産み出す
それを無自覚な老害が腐す
672デフォルトの名無しさん
2023/08/18(金) 23:38:51.82ID:H/YqNwUg >>629
標準ライブラリの範囲は言語ごとに異なる
Rustの方針は言語サポートが必要な機能を標準ライブラリとする傾向が強いため他より範囲が狭い
例えばRustの標準ライブラリに正規表現や乱数などは含まれていない
だからといってRustはそれらが扱えない、というのは正しくないように
標準ライブラリに入っているか否かはさほど重要なことではない
今回の例で言えばC++20のコルーチンもRustのasyncコルーチン(タスク)も意図的にそれ自体の機能のみを言語機能および標準ライブラリに入れている
コルーチンのスケジューリング機能など含めてほとんどの機能は標準ライブラリにない
それらは言語自体が直後サポートしなくても実装可能だからであろう
Rustの場合はデファクトスタンダードの地位を確立したtokioがあるため困ることはない
標準ライブラリの範囲は言語ごとに異なる
Rustの方針は言語サポートが必要な機能を標準ライブラリとする傾向が強いため他より範囲が狭い
例えばRustの標準ライブラリに正規表現や乱数などは含まれていない
だからといってRustはそれらが扱えない、というのは正しくないように
標準ライブラリに入っているか否かはさほど重要なことではない
今回の例で言えばC++20のコルーチンもRustのasyncコルーチン(タスク)も意図的にそれ自体の機能のみを言語機能および標準ライブラリに入れている
コルーチンのスケジューリング機能など含めてほとんどの機能は標準ライブラリにない
それらは言語自体が直後サポートしなくても実装可能だからであろう
Rustの場合はデファクトスタンダードの地位を確立したtokioがあるため困ることはない
673デフォルトの名無しさん
2023/08/18(金) 23:44:30.71ID:H/YqNwUg674デフォルトの名無しさん
2023/08/18(金) 23:52:18.58ID:H/YqNwUg >>654
RustでVecだと最初のb = aの時点でムーブとなるためその問題は起きない
ムーブではなくb = &aとして参照にしても競合防止のため書き換えできず問題は起きない
Goでaとbが異なったり同じになったりを二転三転してるのはaとbが競合してると考えてもいいのかもしれない
RustでVecだと最初のb = aの時点でムーブとなるためその問題は起きない
ムーブではなくb = &aとして参照にしても競合防止のため書き換えできず問題は起きない
Goでaとbが異なったり同じになったりを二転三転してるのはaとbが競合してると考えてもいいのかもしれない
675デフォルトの名無しさん
2023/08/18(金) 23:57:19.87ID:H/YqNwUg >>670
Rustはオブジェクト指向であってクラス継承の概念のみを排除している
だからそこではRustでもa.push(a)の形となりVec型の値(オブジェクト)が書き換わる
他の例でもイテレータはnext()する毎に値(オブジェクト)が書き換わる
Rustはオブジェクト指向であってクラス継承の概念のみを排除している
だからそこではRustでもa.push(a)の形となりVec型の値(オブジェクト)が書き換わる
他の例でもイテレータはnext()する毎に値(オブジェクト)が書き換わる
676デフォルトの名無しさん
2023/08/19(土) 00:22:06.39ID:yRRJwuXx getterだけを公開すればオブジェクト指向だが
いつどこからsetされるか分からないコードはstatic変数に近い性質
それはオブジェクト指向ではない
いつどこからsetされるか分からないコードはstatic変数に近い性質
それはオブジェクト指向ではない
677デフォルトの名無しさん
2023/08/19(土) 00:59:21.18ID:78dnv4FG >>676
「いつどこからsetされるか分からないコード」について
Rustは所有権もしくは可変参照を持たないと値を書き換えられないからコード上で明確にわかるよ
static変数については「いつどこからsetされるか分からないコード」によってデータ競合が起きうるのはその通り
しかしRustのstatic変数は(unsafeを除いて)可変(mutable)ではないため「いつどこからsetされるか分からないコード」によってデータ競合を起こすこともないよ
例えばRustのstatic変数をマルチスレッドで共有しつつ値を書き換えたいならばMutexなどによる内部可変性を与える必要がありデータ競合が必ず避けられる
「いつどこからsetされるか分からないコード」について
Rustは所有権もしくは可変参照を持たないと値を書き換えられないからコード上で明確にわかるよ
static変数については「いつどこからsetされるか分からないコード」によってデータ競合が起きうるのはその通り
しかしRustのstatic変数は(unsafeを除いて)可変(mutable)ではないため「いつどこからsetされるか分からないコード」によってデータ競合を起こすこともないよ
例えばRustのstatic変数をマルチスレッドで共有しつつ値を書き換えたいならばMutexなどによる内部可変性を与える必要がありデータ競合が必ず避けられる
678デフォルトの名無しさん
2023/08/19(土) 01:55:38.87ID:3nD/Pt3g こういう意味のない比較を少なくとも2年はずっと書き散らし続けて
何も生み出していないっていうね
何も生み出していないっていうね
679デフォルトの名無しさん
2023/08/19(土) 06:12:11.05ID:ImsjC3MV 技術板のスレなのに無能が適当なこと書き散らすだけで他人が参考にならないスレ
板違いの雑談スレなんだからせめてageるな
板違いの雑談スレなんだからせめてageるな
680デフォルトの名無しさん
2023/08/19(土) 08:18:21.33ID:7swIlm9f Rust は安全(キリっ
ですね
わかります
ですね
わかります
681デフォルトの名無しさん
2023/08/19(土) 08:30:53.11ID:EolsykgK >>672
標準ライブラリのサポートは重要だろ
ちょっとしたことをやるだけでいちいちライブラリを選定する必要があり、コンパイルが遅くなる
CICDも遅くなるし、ライセンスもいちいちクリアしなくては行けない
同じく標準ライブラリが薄いNode.js使っててnode_modules肥大化問題に悩んでいる奴は多いだろう
例えばhttpリクエストするだけでもプロジェクトによってライブラリが異なる
ライブラリが異なるのでそれぞれの使い方をいちいち覚えないといけない
こういったことは企業で開発する上で不毛なんだよ
標準ライブラリのサポートは重要だろ
ちょっとしたことをやるだけでいちいちライブラリを選定する必要があり、コンパイルが遅くなる
CICDも遅くなるし、ライセンスもいちいちクリアしなくては行けない
同じく標準ライブラリが薄いNode.js使っててnode_modules肥大化問題に悩んでいる奴は多いだろう
例えばhttpリクエストするだけでもプロジェクトによってライブラリが異なる
ライブラリが異なるのでそれぞれの使い方をいちいち覚えないといけない
こういったことは企業で開発する上で不毛なんだよ
682デフォルトの名無しさん
2023/08/19(土) 08:44:42.58ID:iXpPt34C 企業については、企業がライブラリを指定するんだし…感はある(非プロの感想です
683デフォルトの名無しさん
2023/08/19(土) 10:43:11.58ID:7swIlm9f >>681
わかります
わかります
684デフォルトの名無しさん
2023/08/19(土) 10:53:02.71ID:LtLp+SED 選定ばかりで何も生み出さない消費者を許せないってそこに書いてある
だから選択肢を増やせば増やすほど評価が高い
だから選択肢を増やせば増やすほど評価が高い
685デフォルトの名無しさん
2023/08/19(土) 14:23:54.36ID:whLCc1g8 オープンソース環境は、OSや環境に変化があるたびに、
別人が別の修正版を出してきて、少しずつ使い勝手が違う
ので、めんどくさい。
Rustもそうなる予感がするので使わない。
別人が別の修正版を出してきて、少しずつ使い勝手が違う
ので、めんどくさい。
Rustもそうなる予感がするので使わない。
686デフォルトの名無しさん
2023/08/19(土) 14:30:43.48ID:whLCc1g8 >>685
今、OSSのある開発環境を使い始めたとしよう。
・ドキュメントも不十分なので、上手く行く方法を
試行錯誤して探すのが必須。
・やっと探し出した方法でmakefileやbatファイルなどを
整備して開発できるようになる。
・数年後、試して見ると動作しなくなっている。
・それでまた、ググり調査 + 自分でテストを繰り返し、
数種類の配布物を試してやっとの思いで昔と似た
ことが出来る方法にたどり着く。その間、大部分の
環境は、来たいはずれの「試し損」となる。
・そして、makefileやbatファイルが作り直しとなる。
・ライブラリパス、インクルードパス、#includeなどの
修正も必要となる。xxx.h だったものが、sys/xxx に移って
いたり、昔 typedef されていたものが、なぜか無くなったり
別ファイルで定義し奈緒知れていたりする。
・ここまで、数日間かかり、プログラミングは全く出来ない。
経験法則から導かれたOSSの開発環境の日常の風景。
今、OSSのある開発環境を使い始めたとしよう。
・ドキュメントも不十分なので、上手く行く方法を
試行錯誤して探すのが必須。
・やっと探し出した方法でmakefileやbatファイルなどを
整備して開発できるようになる。
・数年後、試して見ると動作しなくなっている。
・それでまた、ググり調査 + 自分でテストを繰り返し、
数種類の配布物を試してやっとの思いで昔と似た
ことが出来る方法にたどり着く。その間、大部分の
環境は、来たいはずれの「試し損」となる。
・そして、makefileやbatファイルが作り直しとなる。
・ライブラリパス、インクルードパス、#includeなどの
修正も必要となる。xxx.h だったものが、sys/xxx に移って
いたり、昔 typedef されていたものが、なぜか無くなったり
別ファイルで定義し奈緒知れていたりする。
・ここまで、数日間かかり、プログラミングは全く出来ない。
経験法則から導かれたOSSの開発環境の日常の風景。
687デフォルトの名無しさん
2023/08/19(土) 14:31:48.17ID:yRurJ253 >>685
C++の新しい規格を使わないのかな?
C++の新しい規格を使わないのかな?
688デフォルトの名無しさん
2023/08/19(土) 14:35:14.63ID:yRurJ253689デフォルトの名無しさん
2023/08/19(土) 14:44:59.29ID:rWZzqTr8 2022年版年次Rust調査結果、1万超の回答 職場でRustを使う理由
https://atmarkit.itmedia.co.jp/ait/articles/2308/19/news032.html
プロフェッショナルな環境でRustを使用する主な理由としては、「バグのないソフトウェアを作成できる」という認識(86%)、Rustのパフォーマンス特性(84%)、Rustのセキュリティと安全性の保証(69%)が挙げられる。また、回答者の76%が、「Rustが楽しいと感じたから」という理由だけでRustを使い続けている(ここでは回答者が複数の選択肢を選択できるので、数値の合計が100%になるわけではない)。
仕事でRustを使用した回答者のうち、72%が「チームの目標達成に役立った」と報告し(前年比4ポイント増加)、75%は今後もチームでRustを使用し続ける計画を持っている。
一方で、職場で適用されている他の言語と同様、Rustの学習曲線は重要な考慮事項だ。専門的な立場でRustを使用している回答者の39%は、そのプロセスが「挑戦的だ」と報告している。
回答者の9%は、職場でRustを採用することで「チームの速度が低下した」と回答した。
https://atmarkit.itmedia.co.jp/ait/articles/2308/19/news032.html
プロフェッショナルな環境でRustを使用する主な理由としては、「バグのないソフトウェアを作成できる」という認識(86%)、Rustのパフォーマンス特性(84%)、Rustのセキュリティと安全性の保証(69%)が挙げられる。また、回答者の76%が、「Rustが楽しいと感じたから」という理由だけでRustを使い続けている(ここでは回答者が複数の選択肢を選択できるので、数値の合計が100%になるわけではない)。
仕事でRustを使用した回答者のうち、72%が「チームの目標達成に役立った」と報告し(前年比4ポイント増加)、75%は今後もチームでRustを使用し続ける計画を持っている。
一方で、職場で適用されている他の言語と同様、Rustの学習曲線は重要な考慮事項だ。専門的な立場でRustを使用している回答者の39%は、そのプロセスが「挑戦的だ」と報告している。
回答者の9%は、職場でRustを採用することで「チームの速度が低下した」と回答した。
690デフォルトの名無しさん
2023/08/19(土) 14:45:09.39ID:B82tdG00 >>681
Rustはデファクトスタンダードがあるからそのように困ったことないな
httpならhttpという名のクレートに基本事項が定められていて全てのhttp実装やその上の各フレームワーク等がこれを使う
httpクレート自体はhttp実装を持たずにhttpのリクエスト型やレスポンス型にURI型やヘッダ型やステータス型などだけを持つところが重要なポイント
もし新たな速いhttp実装が現れたとしてもインターフェイスはこのhttpクレートに(少なくとも今までは全て)従うため利用者が困ることはない
Rustはデファクトスタンダードがあるからそのように困ったことないな
httpならhttpという名のクレートに基本事項が定められていて全てのhttp実装やその上の各フレームワーク等がこれを使う
httpクレート自体はhttp実装を持たずにhttpのリクエスト型やレスポンス型にURI型やヘッダ型やステータス型などだけを持つところが重要なポイント
もし新たな速いhttp実装が現れたとしてもインターフェイスはこのhttpクレートに(少なくとも今までは全て)従うため利用者が困ることはない
691デフォルトの名無しさん
2023/08/19(土) 16:02:34.86ID:HZzlwK9f692デフォルトの名無しさん
2023/08/19(土) 16:07:41.17ID:HZzlwK9f693デフォルトの名無しさん
2023/08/19(土) 16:16:02.61ID:yRurJ253 >>691
適応能力に長けてないと扱うのは難しい
変化の速さがOSSの競争力の源泉の一つと感じられなければ
苦痛だろうね
オープンソースでもboostとかはほとんど変わらんやろ? 使わないの?
規格にすらあなたは新しいものにクレームつけそうだがw
適応能力に長けてないと扱うのは難しい
変化の速さがOSSの競争力の源泉の一つと感じられなければ
苦痛だろうね
オープンソースでもboostとかはほとんど変わらんやろ? 使わないの?
規格にすらあなたは新しいものにクレームつけそうだがw
694デフォルトの名無しさん
2023/08/19(土) 16:17:31.20ID:yRurJ253 >>692
仕事が遅いと言われるだろ?
仕事が遅いと言われるだろ?
695デフォルトの名無しさん
2023/08/19(土) 16:19:22.12ID:LtLp+SED debとかrpmとかバイナリパッケージを否定したら挫折するね
Windowsに依存しないだけならそこまで無理ゲーではないけど
WindowsもLinuxもどっちも認めないいわゆる「中立」が過激化するとうまくいかない
Windowsに依存しないだけならそこまで無理ゲーではないけど
WindowsもLinuxもどっちも認めないいわゆる「中立」が過激化するとうまくいかない
696デフォルトの名無しさん
2023/08/19(土) 16:36:31.92ID:HZzlwK9f697デフォルトの名無しさん
2023/08/19(土) 16:37:25.19ID:HZzlwK9f698デフォルトの名無しさん
2023/08/19(土) 17:00:00.61ID:nqM77Zy+ OSSかどうかとは関係なく現状のRustはライブラリ探しと精査に超時間がかかるのは確か
アプリケーションプログラマーから見るとこれがRustの最大の欠点
アプリケーションプログラマーから見るとこれがRustの最大の欠点
699デフォルトの名無しさん
2023/08/19(土) 17:36:47.10ID:yRurJ253700デフォルトの名無しさん
2023/08/19(土) 17:53:56.37ID:2pOprLh9 >>698
そもそもRustは低レイヤ向けでライブラリを特に必要としない用途に向いてるってことだよ
Webやクラウドなどの通常のバックエンドアプリはライブラリを多用することになるがそれは向いていないってことの証
そもそもRustは低レイヤ向けでライブラリを特に必要としない用途に向いてるってことだよ
Webやクラウドなどの通常のバックエンドアプリはライブラリを多用することになるがそれは向いていないってことの証
701デフォルトの名無しさん
2023/08/19(土) 17:57:23.73ID:Y5l+MR// ほんとに(webの上位層で)人気が出てくれば、ライブラリは勝手に揃ってくるだろうけどね
702デフォルトの名無しさん
2023/08/19(土) 18:20:48.63ID:JEXSqoZz webやるには十分よ
703デフォルトの名無しさん
2023/08/19(土) 18:58:40.44ID:nqM77Zy+ >>700
ところが低レイヤもたくさんライブラリ使うんだよ
ところが低レイヤもたくさんライブラリ使うんだよ
704デフォルトの名無しさん
2023/08/19(土) 19:13:06.91ID:ZeP/2UQc だんだんOSSがおかしいと思い始めてきた
705デフォルトの名無しさん
2023/08/19(土) 19:18:41.11ID:bDuPlb9r RHELやHashiCorpの動きはAmazonがターゲット?
706デフォルトの名無しさん
2023/08/19(土) 19:32:52.64ID:bYZ/uEmX actix-webとaxumどちらがいいのだろう
707デフォルトの名無しさん
2023/08/19(土) 19:49:03.02ID:MPHyURRb >>704-705
Mojo🔥がAmazonかGoogleに買収されてクラウドオンリーになる可能性
Mojo🔥がAmazonかGoogleに買収されてクラウドオンリーになる可能性
708デフォルトの名無しさん
2023/08/19(土) 20:17:26.90ID:ScsfkQnZ Firefoxはバクサイ開いたままにしてるとメモリー20GB、CPU100%になったりする
Chromeはそんなことにならない
そういう違いがある
Chromeはそんなことにならない
そういう違いがある
709デフォルトの名無しさん
2023/08/19(土) 20:41:53.76ID:JEXSqoZz >>706
axum
axum
710デフォルトの名無しさん
2023/08/19(土) 20:47:27.03ID:ZeP/2UQc >>707
妨害してるってこと?
妨害してるってこと?
711デフォルトの名無しさん
2023/08/19(土) 21:06:21.33ID:LtLp+SED インターネットはおかしいと最初から思ってた
でもソースコードを保存する場所はネットでもディスクでも紙でもなんでもいい
でもソースコードを保存する場所はネットでもディスクでも紙でもなんでもいい
712デフォルトの名無しさん
2023/08/19(土) 21:18:25.63ID:fB8B9G8R >>690
Python3の場合(正常に動作しかも高速)
https://paiza.io/projects/ciU5iRNbruZiSz4IAy9M4w
Rustの場合(timeoutする)
https://paiza.io/projects/xeAwQZ8M_BHwu0fvFsPLtw
Python3の場合(正常に動作しかも高速)
https://paiza.io/projects/ciU5iRNbruZiSz4IAy9M4w
Rustの場合(timeoutする)
https://paiza.io/projects/xeAwQZ8M_BHwu0fvFsPLtw
713デフォルトの名無しさん
2023/08/19(土) 21:36:12.67ID:DB+Yglwb write_allの後はflushした方いいんじゃね?
しらんけど
まあPythonの方がアマチュア向けというか面倒見がいいのは分かる
しらんけど
まあPythonの方がアマチュア向けというか面倒見がいいのは分かる
714デフォルトの名無しさん
2023/08/19(土) 21:50:51.02ID:fB8B9G8R >>697
自演がバレたなω
自演がバレたなω
715デフォルトの名無しさん
2023/08/19(土) 21:52:18.92ID:fB8B9G8R >>698
crates.io 破綻してるよな
crates.io 破綻してるよな
716デフォルトの名無しさん
2023/08/19(土) 22:20:00.98ID:DB+Yglwb crates.ioに限った話ではないけど
ライブラリ名と実装品質のミスマッチはいつも気になってる
HTTP/2用のライブラリでもhttp2よりh2の方が利用者数多いとか
オープンなレジストリの宿命として諦めるしかないのかな
ライブラリ名と実装品質のミスマッチはいつも気になってる
HTTP/2用のライブラリでもhttp2よりh2の方が利用者数多いとか
オープンなレジストリの宿命として諦めるしかないのかな
717デフォルトの名無しさん
2023/08/19(土) 22:20:55.24ID:uqHP0fTk >>644
5chでデマ垂れ流して気持ち良くなるだけのゴミ人生でしたw
5chでデマ垂れ流して気持ち良くなるだけのゴミ人生でしたw
718デフォルトの名無しさん
2023/08/20(日) 00:49:54.32ID:nxq7VYP6 損得の勝負をしてると、デマで得をする奴がいないか常に不安だよな
それなら単純に本当か嘘かで勝負すればデマと勝利は両立しないから安心安全なのでは
それなら単純に本当か嘘かで勝負すればデマと勝利は両立しないから安心安全なのでは
719デフォルトの名無しさん
2023/08/20(日) 01:54:31.51ID:xEeb34b9720デフォルトの名無しさん
2023/08/20(日) 02:56:13.90ID:shN/tp+V >>719
修正版ウブおながいします
修正版ウブおながいします
721デフォルトの名無しさん
2023/08/20(日) 06:38:03.53ID:klcvUWNp 練習に書いてみた
fn base64_encode(input: impl AsRef<[u8]>) -> String {
const TABLE: [u8; 64] = *b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
const MASK: usize = 64 - 1;
let mut input = input.as_ref();
let mut output = Vec::new();
while let [i0, i1, i2, rest @ ..] = input {
let x = u32::from_be_bytes([0, *i0, *i1, *i2]) as usize;
(0..=3).rev().for_each(|shift| output.push(TABLE[x >> shift * 6 & MASK]));
input = rest;
}
match input {
[i0, i1] => {
let x = u32::from_be_bytes([0, *i0, *i1, 0]) as usize;
(1..=3).rev().for_each(|shift| output.push(TABLE[x >> shift * 6 & MASK]));
output.push(b'=');
}
[i0] => {
let x = u32::from_be_bytes([0, *i0, 0, 0]) as usize;
(2..=3).rev().for_each(|shift| output.push(TABLE[x >> shift * 6 & MASK]));
output.push(b'=');
output.push(b'=');
}
_ => {}
}
String::from_utf8(output).unwrap()
}
fn base64_encode(input: impl AsRef<[u8]>) -> String {
const TABLE: [u8; 64] = *b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
const MASK: usize = 64 - 1;
let mut input = input.as_ref();
let mut output = Vec::new();
while let [i0, i1, i2, rest @ ..] = input {
let x = u32::from_be_bytes([0, *i0, *i1, *i2]) as usize;
(0..=3).rev().for_each(|shift| output.push(TABLE[x >> shift * 6 & MASK]));
input = rest;
}
match input {
[i0, i1] => {
let x = u32::from_be_bytes([0, *i0, *i1, 0]) as usize;
(1..=3).rev().for_each(|shift| output.push(TABLE[x >> shift * 6 & MASK]));
output.push(b'=');
}
[i0] => {
let x = u32::from_be_bytes([0, *i0, 0, 0]) as usize;
(2..=3).rev().for_each(|shift| output.push(TABLE[x >> shift * 6 & MASK]));
output.push(b'=');
output.push(b'=');
}
_ => {}
}
String::from_utf8(output).unwrap()
}
722デフォルトの名無しさん
2023/08/20(日) 07:18:09.55ID:3t1JnBWI >>663
同意
同意
723デフォルトの名無しさん
2023/08/20(日) 08:16:48.41ID:6nnys+Pw >>699
俺はOSSを使わない仕事をしているから。
俺はOSSを使わない仕事をしているから。
724デフォルトの名無しさん
2023/08/20(日) 08:21:25.95ID:6nnys+Pw725デフォルトの名無しさん
2023/08/20(日) 08:24:41.49ID:6nnys+Pw クローズドなソフトだと、古いものも維持されるかどうかは、
それぞれの企業次第で各企業の特徴が出る。
ところがOSSの場合、人類全体の傾向となるから、
どのOSSなソフトでも似たような保守の傾向となり、
制御できない。なぜなら、人類全体の傾向はいつも
ほぼ同じだから。
電力送電における「無限大母線」という言葉を思い出した。
それぞれの企業次第で各企業の特徴が出る。
ところがOSSの場合、人類全体の傾向となるから、
どのOSSなソフトでも似たような保守の傾向となり、
制御できない。なぜなら、人類全体の傾向はいつも
ほぼ同じだから。
電力送電における「無限大母線」という言葉を思い出した。
726デフォルトの名無しさん
2023/08/20(日) 09:39:15.51ID:GjiTjTDJ727デフォルトの名無しさん
2023/08/20(日) 09:56:36.27ID:GjiTjTDJ >724
なんか全体集合と部分集合を理解出来ていない様な日本語ですね
なんか全体集合と部分集合を理解出来ていない様な日本語ですね
728デフォルトの名無しさん
2023/08/20(日) 10:26:38.95ID:nxq7VYP6 人類の傾向はいつも、n=1を笑い、前例が1つもない事件事故に泣く
729デフォルトの名無しさん
2023/08/20(日) 10:50:22.50ID:1EohdLDs >>723
boostは使わないのかな?
boostは使わないのかな?
730デフォルトの名無しさん
2023/08/20(日) 11:46:34.65ID:PLGKFrd6 >>727
実際rustに限らずOSSなら必ず当てはまることなので部分と言っても意味はない。
実際rustに限らずOSSなら必ず当てはまることなので部分と言っても意味はない。
731デフォルトの名無しさん
2023/08/20(日) 11:52:30.19ID:1EohdLDs732デフォルトの名無しさん
2023/08/20(日) 12:53:04.65ID:nxq7VYP6 時間はお金で買える
ただ具体的にいくらで買えるのか誰も知らないだけ
ただ具体的にいくらで買えるのか誰も知らないだけ
733デフォルトの名無しさん
2023/08/20(日) 13:19:08.66ID:sLWYcNsZ734デフォルトの名無しさん
2023/08/20(日) 13:30:35.17ID:1EohdLDs735デフォルトの名無しさん
2023/08/20(日) 15:55:58.84ID:KkFZufKp >>712を見て思ったが
RustにもPythonのrequests/base64のようなライブラリあるんだろ
RustにもPythonのrequests/base64のようなライブラリあるんだろ
736デフォルトの名無しさん
2023/08/20(日) 15:58:19.75ID:OKeiQGdq 標準ライブラリには入ってない
737デフォルトの名無しさん
2023/08/20(日) 16:12:04.89ID:KkFZufKp738デフォルトの名無しさん
2023/08/20(日) 16:22:18.11ID:mA4FcHyW RustってSimd命令は非安定だよね?実際にSimd命令使うとどれくらい高速化できんの?
Simd命令ってCPUに応じて場合分けしてコードを書かないとならんの?
Simd命令ってCPUに応じて場合分けしてコードを書かないとならんの?
739デフォルトの名無しさん
2023/08/20(日) 16:51:39.65ID:7DmX7Wr5 >>738
CPU以外にボトルネックがないならおおよそ並列度の分だけ性能上がる
32bit + 32bitのような計算を1命令で処理してたところを256bit幅がサポートされてるハードウエア&命令を使えば約8倍
CPU以外にボトルネックがないならおおよそ並列度の分だけ性能上がる
32bit + 32bitのような計算を1命令で処理してたところを256bit幅がサポートされてるハードウエア&命令を使えば約8倍
740デフォルトの名無しさん
2023/08/20(日) 16:54:56.78ID:7qQbvCdM >>739
実際には、「お膳立て」のためのオーバーヘッドが有ることと、
SIMD命令が使える部分が少ないことで、8倍のSIMD命令を
使っても、20%位の向上にしかならないと言われている。
数値は大体。
だから、IntelはAVX512をメインストリームからは捨て
ようとした。
実際には、「お膳立て」のためのオーバーヘッドが有ることと、
SIMD命令が使える部分が少ないことで、8倍のSIMD命令を
使っても、20%位の向上にしかならないと言われている。
数値は大体。
だから、IntelはAVX512をメインストリームからは捨て
ようとした。
741デフォルトの名無しさん
2023/08/20(日) 17:01:04.61ID:7qQbvCdM スパコンが、ベクトル型が廃れてスカラー型の並列型が
流行していることからしても、SIMDは将来性の無い
ものだと個人的には思ってる。
むしろ、SIMDを捨て、コア数を増やす方が圧倒的に
高速化できる。
流行していることからしても、SIMDは将来性の無い
ものだと個人的には思ってる。
むしろ、SIMDを捨て、コア数を増やす方が圧倒的に
高速化できる。
742デフォルトの名無しさん
2023/08/20(日) 17:20:33.01ID:V1e9lq/f スパコンのコーディングは知らんけど
雑にスレッドプールにぶん投げるだけで速くなる並列処理の方が
SIMDより使いやすいなって思う
雑にスレッドプールにぶん投げるだけで速くなる並列処理の方が
SIMDより使いやすいなって思う
743デフォルトの名無しさん
2023/08/20(日) 18:05:27.72ID:a//hKKzV >>720
整理するとこれでいいみたい
use std::error::Error;
use std::net::TcpStream;
use std::io::{BufReader, BufRead, Read, Write};
use std::fmt::Write as _;
fn http_get(host_port: &str, path: &str) -> Result<Vec<u8>, Box<dyn Error>> {
let mut server = TcpStream::connect(host_port)?;
let mut http = String::new();
write!(http, "GET {path} HTTP/1.1\r\n")?;
write!(http, "Host: {host_port}\r\n")?;
write!(http, "Connection: close\r\n")?;
write!(http, "\r\n")?;
server.write_all(http.as_bytes())?;
let mut server = BufReader::new(server);
let mut line = String::new();
server.read_line(&mut line)?;
if line != "HTTP/1.1 200 OK\r\n" {
return Err("HTTP: not 200 OK".into());
}
while server.read_line(&mut line)? > 2 {}
let mut data = Vec::<u8>::new();
server.read_to_end(&mut data)?;
Ok(data)
}
整理するとこれでいいみたい
use std::error::Error;
use std::net::TcpStream;
use std::io::{BufReader, BufRead, Read, Write};
use std::fmt::Write as _;
fn http_get(host_port: &str, path: &str) -> Result<Vec<u8>, Box<dyn Error>> {
let mut server = TcpStream::connect(host_port)?;
let mut http = String::new();
write!(http, "GET {path} HTTP/1.1\r\n")?;
write!(http, "Host: {host_port}\r\n")?;
write!(http, "Connection: close\r\n")?;
write!(http, "\r\n")?;
server.write_all(http.as_bytes())?;
let mut server = BufReader::new(server);
let mut line = String::new();
server.read_line(&mut line)?;
if line != "HTTP/1.1 200 OK\r\n" {
return Err("HTTP: not 200 OK".into());
}
while server.read_line(&mut line)? > 2 {}
let mut data = Vec::<u8>::new();
server.read_to_end(&mut data)?;
Ok(data)
}
744デフォルトの名無しさん
2023/08/20(日) 18:11:30.48ID:gUvM95Xg よかったね
745デフォルトの名無しさん
2023/08/20(日) 18:25:00.43ID:MyoNrmjT >>743
え?Rustって標準ライブラリでhttpリクエストすらできないの?
え?Rustって標準ライブラリでhttpリクエストすらできないの?
746デフォルトの名無しさん
2023/08/20(日) 18:38:37.77ID:iamuQ/3/ Rsutはwebやるための言語とか言ってたような
747デフォルトの名無しさん
2023/08/20(日) 19:01:10.42ID:mA4FcHyW とりあえず1000×1000の行列の行列積dotが0.015秒弱でできるようなところまで行列ライブラリーが実装できたので、何とか0.00秒台で計算が終わる様にしたい。
今の所手を出してない最適化
1) Simd命令
2) インラインアセンブリ
3)ループアンローリング(これはRustだと自動的にやってくれてる様で自分の実験した範囲ではあまり効果がなかった。)
この中で一番効果的な最適化は何?
ちなみに今の所は以下の最適下は既に実装済み
1) ループ交換
2) キャッシュブロッキング
3) rayonによる並列処理
今の所手を出してない最適化
1) Simd命令
2) インラインアセンブリ
3)ループアンローリング(これはRustだと自動的にやってくれてる様で自分の実験した範囲ではあまり効果がなかった。)
この中で一番効果的な最適化は何?
ちなみに今の所は以下の最適下は既に実装済み
1) ループ交換
2) キャッシュブロッキング
3) rayonによる並列処理
748デフォルトの名無しさん
2023/08/20(日) 19:10:25.82ID:IxOV384F749デフォルトの名無しさん
2023/08/20(日) 19:16:55.65ID:55RG+hvj デファクトスタンダードという選りすぐりに聞こえるが
単にそれしかないだけのような...
ユーザ数少ないので
単にそれしかないだけのような...
ユーザ数少ないので
750デフォルトの名無しさん
2023/08/20(日) 19:20:14.76ID:yJmfO0+S751デフォルトの名無しさん
2023/08/20(日) 19:25:32.14ID:mA4FcHyW >>750
じゃあ基本的にはdot演算に関してはこれ以上の最適化の余地はないって感じ?
じゃあ基本的にはdot演算に関してはこれ以上の最適化の余地はないって感じ?
752デフォルトの名無しさん
2023/08/20(日) 19:26:47.41ID:MoWe6Sep グーグルとアップルが流行らせようとしてるらしいが
753デフォルトの名無しさん
2023/08/20(日) 19:44:59.22ID:sOv9anOF paiza.io の Rust は crates 使えないから
ホント使いもんにならんわ
ホント使いもんにならんわ
754デフォルトの名無しさん
2023/08/20(日) 19:47:42.13ID:rPtHvv2S じゃあGitHubのCodespacesでも使ってれば
755デフォルトの名無しさん
2023/08/20(日) 19:54:55.65ID:yJmfO0+S756デフォルトの名無しさん
2023/08/20(日) 19:58:02.59ID:U3mkt6q/757デフォルトの名無しさん
2023/08/20(日) 20:00:15.86ID:259yUXDO >>747
これに即して測ってみては(1500x1500(f64)の生成、行列積、破棄の計測)
https://github.com/kostya/benchmarks#matmul
とりあえずnumpyとの比較とか
https://github.com/kostya/benchmarks/blob/master/matmul/matmul-numpy.py
これに即して測ってみては(1500x1500(f64)の生成、行列積、破棄の計測)
https://github.com/kostya/benchmarks#matmul
とりあえずnumpyとの比較とか
https://github.com/kostya/benchmarks/blob/master/matmul/matmul-numpy.py
758デフォルトの名無しさん
2023/08/20(日) 20:00:40.96ID:pu4udaaX シミュレータなどは行列演算だけ高速化しても、全体の
高速化にはなら無い事が多い。
高速化にはなら無い事が多い。
759デフォルトの名無しさん
2023/08/20(日) 20:04:56.81ID:mA4FcHyW >>757
手元のnumpyよりは少なくとも1000×1000の行列積は2倍から3倍速、10000×10000の行列積だと約5倍から10倍速い。手元よnumpyのバックエンドはIntelMKL。
手元のnumpyよりは少なくとも1000×1000の行列積は2倍から3倍速、10000×10000の行列積だと約5倍から10倍速い。手元よnumpyのバックエンドはIntelMKL。
760デフォルトの名無しさん
2023/08/20(日) 20:07:47.30ID:mA4FcHyW まだ、行列の対角化とか逆行列の計算は実装できてない。
761デフォルトの名無しさん
2023/08/20(日) 20:20:10.35ID:259yUXDO なんかnumpyが遅くない?
1000x1000でnumpy.dot(a, b)部分だけ測ったらこんな感じだったけど
0.006215572357177734
0.005822658538818359
0.005129098892211914
0.007399797439575195
0.011432886123657227
0.008414506912231445
0.009572029113769531
0.009091615676879883
0.008922100067138672
0.007265329360961914
1000x1000でnumpy.dot(a, b)部分だけ測ったらこんな感じだったけど
0.006215572357177734
0.005822658538818359
0.005129098892211914
0.007399797439575195
0.011432886123657227
0.008414506912231445
0.009572029113769531
0.009091615676879883
0.008922100067138672
0.007265329360961914
762デフォルトの名無しさん
2023/08/20(日) 20:23:55.44ID:259yUXDO def calc(n):
n = n // 2 * 2
a = build_matrix_np(n, 1.0)
b = build_matrix_np(n, 2.0)
start = time.time()
d = matmul(a, b)
end = time.time()
time_diff = end - start
print(time_diff)
return d[n // 2][n // 2]
n = n // 2 * 2
a = build_matrix_np(n, 1.0)
b = build_matrix_np(n, 2.0)
start = time.time()
d = matmul(a, b)
end = time.time()
time_diff = end - start
print(time_diff)
return d[n // 2][n // 2]
763デフォルトの名無しさん
2023/08/20(日) 20:37:44.31ID:259yUXDO pipで入れたのでopenblasだと思うけど、こんな感じ
OMP_NUM_THREADS=1 python mutmul-numpy.py 1000
0.030291080474853516
0.029540538787841797
0.029771089553833008
0.02943873405456543
0.02980208396911621
0.03012990951538086
0.0300595760345459
0.030525922775268555
0.03243899345397949
0.02984023094177246
OMP_NUM_THREADS=8 python mutmul-numpy.py 1000
0.0073316097259521484
0.007174968719482422
0.007193326950073242
0.006682157516479492
0.006906747817993164
0.006983757019042969
0.007711172103881836
0.008562803268432617
0.007740497589111328
0.00671076774597168
>>759のnumpy計測がsingle threadになってたりしてる?
OMP_NUM_THREADS=1 python mutmul-numpy.py 1000
0.030291080474853516
0.029540538787841797
0.029771089553833008
0.02943873405456543
0.02980208396911621
0.03012990951538086
0.0300595760345459
0.030525922775268555
0.03243899345397949
0.02984023094177246
OMP_NUM_THREADS=8 python mutmul-numpy.py 1000
0.0073316097259521484
0.007174968719482422
0.007193326950073242
0.006682157516479492
0.006906747817993164
0.006983757019042969
0.007711172103881836
0.008562803268432617
0.007740497589111328
0.00671076774597168
>>759のnumpy計測がsingle threadになってたりしてる?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 橋下徹氏 外務省幹部の訪中受け「口だけ番長」へ痛烈指摘 「喧嘩は日本の完敗…なんとかっこ悪い日本か」 [冬月記者★]
- 【外国人問題】小野田紀美担当相「不法就労や不法滞在は許さない」 [シャチ★]
- 【野球】井端監督 大谷翔平、山本由伸らのWBCへの参加 「1日も早く返事ほしい」「待っててといっても、国内組が遅くなってしまう」★3 [冬月記者★]
- 経団連会長、日中は建設的対話を 経済3団体が高市首相と初会談も日中関係は話題に登らず… [BFU★]
- 中国で「クレしん」公開延期 対日報復、エンタメに波及 [蚤の市★]
- 東京株式市場 インバウンド関連株が下落 中国政府の渡航自粛要請で [バイト歴50年★]
- 5:55:55.555
- 有識者「高市総理が発言を撤回したり、辞職するしかないと言っている人は、それで日中関係が今まで通りになると思ってる?」 [834922174]
- 戦争は無くならないし殺人は起きるし女はレイプされるし子供は餓死するし
- 日経時間外、5万円割れ 垂直落下始まる [402859164]
- 高市さんに土下座してもらったら一発解決なのに何でやらないんだろ??
- 【悲報】男性人気アイドルグループJO1、中国公演中止wwwwwwwwwwwwwwwwwwwwwwwwwww
