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

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2023/07/29(土) 15:05:46.55ID:2Hm/yplK
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/
2023/08/18(金) 13:14:44.19ID:Es7nSkHo
>C++20コルーチンやRustのタスクはスタックレスコルーチンなので、
>個別スタック領域を必要とせず

Goルーチンは個別のスタック領域を必要としてしまうね
2023/08/18(金) 13:25:35.72ID:ygIBI33X
chatGPTは何で作ってるんだろ?
2023/08/18(金) 13:58:06.66ID:ISPaueS8
>>626
“気軽”にできるといってるわけだが本当に気軽にできるの?
標準ライブラリでサポートしているの?

データ競合に関してはチャネルを使えばある程度は回避できるしrace detectorもあるのでさほど問題にはならない
race conditionに関してはRustでもGoでも検出はできないから結局プログラマの技量になるわけだけど
Rustにしたからといってあらゆる並行並列処理のバグが回避できるものじゃないぞ
そもそも難しいものなんだから
2023/08/18(金) 14:08:17.74ID:oVN8QNav
Goはこんな基本操作でも恐ろしい挙動で驚いた

14 デフォルトの名無しさん 2023/07/28(金) 03:06
その話ならばGoという最悪の言語があって直感と常識を裏切る挙動をしてくる
しかも理解できたと思ったら二転三転と次々と裏切りの挙動をしてくる

// まず [1 2 3] をaに作ってbに代入するところからスタート
a := []int{1, 2, 3}
b := a
// 実験1: 途中要素の書き換え
a[1] = 222
fmt.Println("a =", a) // → [1 222 3]
fmt.Println("b =", b) // → [1 222 3]
// aもbも書き換わってしまった!同じものを指しているのだろうか?

// 実験2: 末尾要素の削除
a = a[:len(a)-1]
fmt.Println("a =", a) // → [1 222]
fmt.Println("b =", b) // → [1 222 3]
// aだけ削除された!aとbは別なのだろうか?

// 実験3: 要素の追加 (その1)
a = append(a, 777)
fmt.Println("a =", a) // → [1 222 777]
fmt.Println("b =", b) // → [1 222 777]
// aとbは再び同じになってしまった!なぜだ??

// 実験4: 要素の追加 (その2)
a = append(a, 999)
fmt.Println("a =", a) // → [1 222 777 999]
fmt.Println("b =", b) // → [1 222 777]
// aだけ追加された!また裏切られた!!
631デフォルトの名無しさん
垢版 |
2023/08/18(金) 14:24:07.82ID:tXbZhR4S
>>629
>race conditionに関してはRustでもGoでも検出はできないから結局プログラマの技量になるわけだけど
そこでChatGPTですよ!
2023/08/18(金) 14:31:02.70ID:KUMKpnb5
>>629
Rustで発生するrace conditionてどういう前提?
普通は発生しないと思うけど
633デフォルトの名無しさん
垢版 |
2023/08/18(金) 15:25:39.40ID:JLPPn6Yw
>>626
5chなら知ったかできて気持ちいいよねw
良かったね
2023/08/18(金) 16:16:34.73ID:7ABRPFiH
常識的に考えれば気持ちいい方が合理的だよ
常識を疑えば、自分が損をしてでも何かを成し遂げるみたいな
合理性のない人間が増えてくる
2023/08/18(金) 16:27:02.47ID:v1tgQeKG
>>630
この話広げるのもなんなんだけどこの挙動はどう説明されるの?
2023/08/18(金) 16:30:59.19ID:ISPaueS8
>>632
race conditionの意味でググってこいよ
機械で検出できない高レベルの競合のことで、並行並列処理するときは常にこれと向き合う必要がある

Rustで検出できるのはdata raceでこれはGoでもランタイムだが検出できるわ
637デフォルトの名無しさん
垢版 |
2023/08/18(金) 16:37:05.86ID:tXbZhR4S
そこでChatGPTですよ!
2023/08/18(金) 16:55:50.42ID:cMwm5CSc
ChatGPTは、捨て垢で使えるようになってから来いよ。。

こう煩いとRust布教されるほうがマシw
2023/08/18(金) 17:08:33.27ID:tXbZhR4S
デッドロック検出できるのって画期的なことだと思うよ
2023/08/18(金) 17:38:45.64ID:KUMKpnb5
>>636
data race関係ないrace conditionを言語で検知してほしいケースなんてあるの?
2023/08/18(金) 17:39:23.48ID:S+r2DpMo
過ぎたるはなんとかってやつか
しつこ過ぎるとダメって事やな
2023/08/18(金) 17:47:16.72ID:ISPaueS8
>>640
Rust信者が何でもコンパイル時に検出できるとか絶対安全!だとか吹聴しているから訂正しているだけだよ

データ競合ならGoでもランタイム時に検出できるわ
2023/08/18(金) 17:47:46.99ID:JBAxLOor
>>640
むしろロックフリーデータ構造は
data raceあり
race conditionなし
の良く出来た高速アルゴリズム
2023/08/18(金) 18:03:31.02ID:ER8wa9uU
実際にGoで作ってるところは有名どころでも並行処理関連のバグ量産してるからRustとはリスクレベルが全く違うわな
2023/08/18(金) 18:43:48.21ID:31/+TCtY
>>636
>>642
データ競合が運用時に検出できても手遅れ
しかもデータ競合を検出するために実行オーバーヘッドを伴うため悪い選択肢となる
この件でも静的にコンパイル時点でデータ競合を検出できるRustが大きく有利だろう
2023/08/18(金) 18:47:47.02ID:7ABRPFiH
ハイリスクハイリターンのように、リスクとリターンの差に意味がある
リスクとリスクの比較や、リターンとリターンの比較は合理的ではないと思う
2023/08/18(金) 19:17:38.70ID:ISPaueS8
>>645
だけど気軽にできないよね
標準の機構で並行並列処理できないよね
async await使うだけでアホみたいに大量の依存をダウンロードしてきてコンパイル爆遅だよね

GoはCとかの手続き型言語を知っていたら、すぐマスターできるけど
Rustで並行並列処理までマスターするのに一体どれだけ時間がかかるんだろうねw
2023/08/18(金) 19:22:26.53ID:Kl/zN5NU
>>635
C++のvectorに相当するのがその>>630のGoのスライス
その挙動は明らかに常識外れで理不尽だがGoの仕様通りの挙動
Goはあちこち設計がおかしい

>>644
このためGoで本格的なプログラミングをすべきではない風潮になってきた
もともと貧相な仕様をシンプル簡素と積極的に評価してきたが無理があった
2023/08/18(金) 19:40:10.54ID:e3KbknBC
>>630
これ挙動わかってるのにわからんないみたいに書いてあるでしょ
配列とスライスのデータ構造はシンプルだからそれを調べれば自明にわかるだろ
他の言語でも

実験2でそんなこと考える奴はいないよね
2023/08/18(金) 19:44:32.36ID:JiE5FPq0
>>630,648
GoのスライスをC++のvector相当、ってのが早とちり過ぎる
Goのslice header, backing memoryの理解をすっ飛ばしただけじゃんw
2023/08/18(金) 19:50:41.88ID:yS5HHAxP
>>630
そんな妙な動きをするプログラミング言語はGoだけだな
2023/08/18(金) 20:23:05.08ID:/GsC+n7c
C++erに無視されてきてつまらなくなってきたので今度はGoをタゲるおじさん
2023/08/18(金) 20:29:00.75ID:VmqYer8d
>>630
使いやすいかどうかは謎だけどスライスだから当然の挙動かなと

実験1 スライスは配列そのものじゃなく参照と長さなのでそういうもの
実験2 aは新しく作った別のスライスを代入してるので当然
実験3 スライスaの末尾に対してappendしてるので当然
実験4 3と同じ スライスaとbの長さが違っているので当然


結論
スライスすら使えない奴は馬鹿
2023/08/18(金) 20:36:58.94ID:ISPaueS8
てかこれを理解できないのであればRustは習得できないんじゃないかね
Rustできるならわかるだろ
2023/08/18(金) 20:38:53.30ID:pJm/stU2
>>653
嫌なら配列使え、ということかね。

配列とスライスの表記に問題があるとは思うけど。[]と[1]で別物というのはやりすぎだわな。
2023/08/18(金) 20:40:40.07ID:VmqYer8d
余談
初期の開発中のC言語にはポインタは int* じゃなくてint[]だった
2023/08/18(金) 20:51:02.38ID:NqAD2XrU
>>630
Goの何がおかしいのかわかった
C++やRustや他の普通の言語ならば
bがaのコピーならばその実験1~4すべてでaとbは異なる
bがaを参照しているならばその実験1~4すべてでaとbは同じになる
その二つのケースどちらかになる
Goは実験を進めるごとにaとbが異なったり再び同じになったり再び異なったりおかしい
2023/08/18(金) 20:54:15.45ID:VmqYer8d
わざと言ってるよねwそれw
2023/08/18(金) 21:01:52.15ID:fjgGWx1p
なぜGoだけがそんな変な仕様にしちゃったの?
新旧の言語を見回してもそんな変な仕様の言語は存在しないよ
2023/08/18(金) 21:20:15.18ID:VmqYer8d
スライス自体は他も似たり寄ったりだよ
pythonは3で多分新しい配列を作る
多分appendの時に新しい配列をコピーしてそっちに代入するはず

元の実態を明確にコピーすると言わずにコピーするかどうかと言う設計理念の違いだろう
pythonは初心者向けだからそうしたgoはしなかった
2023/08/18(金) 21:24:30.15ID:VmqYer8d
配列の箱が並んだ絵でも書いてスライスは別のところに書いてポインタの矢印と長さでも書いてみれば理解しやすい
2023/08/18(金) 21:36:19.25ID:ISPaueS8
>>659
GoはC言語に近い言語だから
Cでmallocとかreallocとかを使って配列を扱ってたらよく理解できるはず

無駄なコピーを避けつつ、細かいメモリ操作も行えるようにして最適化の余地を残しているのがGoの特徴なので
2023/08/18(金) 21:36:31.10ID:pJm/stU2
>>659
スライスはrangeみたいなもので、スライスそのものはそんなに変なものではない。

問題はそこではなくて、
・スライスに「可変長なだけの配列」に見えるような表記を割り当てた
・真に「可変長なだけの配列」(vectorみたいなの)が存在しない
なので、スライスと配列を混同して使わざるを得ない言語設計が問題。

素直にCOWスライスを用意すればまだ良かったんだけどね。
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と言う並びの箱の列ができる
2023/08/18(金) 21:42:56.92ID:seEzfIxj
なるほど、スライスと言われてなんとなくわからんでもない挙動には見えてきた
でもやっぱりバグを呼び込むためだけの仕様にも思える
こんな仕様にして誰か幸せになるんかな
2023/08/18(金) 21:45:59.61ID:pJm/stU2
>>665
スピードマニア、つまりgo ユーザー。
2023/08/18(金) 22:01:59.17ID:UHKUI4sz
C++もRustもわかりやすい仕様だけどGoよりスピード出る
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)
2023/08/18(金) 22:31:11.69ID:7ABRPFiH
言語とライブラリを分離できないと潰しがきかない
C++の場合mallocやsjljを単なるライブラリではなく言語の一部にしたのが悪手
2023/08/18(金) 22:42:32.22ID:hfXr0Ior
>>668
go はオブジェクト指向じゃないからなぁ。

純関数にしやすいように、仮引数自体は変更しない設計にしたんじゃない?Rustも似たような思想だろ。
671デフォルトの名無しさん
垢版 |
2023/08/18(金) 23:16:43.53ID:Xs4y23Ew
手軽というのは実際はただの手抜きなんだよ
その尻拭いをさせられてきた良識ある若者が次の世代のためにRustのようなものを産み出す
それを無自覚な老害が腐す
2023/08/18(金) 23:38:51.82ID:H/YqNwUg
>>629
標準ライブラリの範囲は言語ごとに異なる
Rustの方針は言語サポートが必要な機能を標準ライブラリとする傾向が強いため他より範囲が狭い
例えばRustの標準ライブラリに正規表現や乱数などは含まれていない
だからといってRustはそれらが扱えない、というのは正しくないように
標準ライブラリに入っているか否かはさほど重要なことではない

今回の例で言えばC++20のコルーチンもRustのasyncコルーチン(タスク)も意図的にそれ自体の機能のみを言語機能および標準ライブラリに入れている
コルーチンのスケジューリング機能など含めてほとんどの機能は標準ライブラリにない
それらは言語自体が直後サポートしなくても実装可能だからであろう
Rustの場合はデファクトスタンダードの地位を確立したtokioがあるため困ることはない
2023/08/18(金) 23:44:30.71ID:H/YqNwUg
>>647
気軽にの意味が多様だがRustでもGoルーチンのように気軽にタスクをspawnできる
もちろんチャネルも使えてGoスタイルのプログラミングをしたければそれも簡単にできる
2023/08/18(金) 23:52:18.58ID:H/YqNwUg
>>654
RustでVecだと最初のb = aの時点でムーブとなるためその問題は起きない
ムーブではなくb = &aとして参照にしても競合防止のため書き換えできず問題は起きない
Goでaとbが異なったり同じになったりを二転三転してるのはaとbが競合してると考えてもいいのかもしれない
2023/08/18(金) 23:57:19.87ID:H/YqNwUg
>>670
Rustはオブジェクト指向であってクラス継承の概念のみを排除している
だからそこではRustでもa.push(a)の形となりVec型の値(オブジェクト)が書き換わる
他の例でもイテレータはnext()する毎に値(オブジェクト)が書き換わる
2023/08/19(土) 00:22:06.39ID:yRRJwuXx
getterだけを公開すればオブジェクト指向だが
いつどこからsetされるか分からないコードはstatic変数に近い性質
それはオブジェクト指向ではない
2023/08/19(土) 00:59:21.18ID:78dnv4FG
>>676
「いつどこからsetされるか分からないコード」について
Rustは所有権もしくは可変参照を持たないと値を書き換えられないからコード上で明確にわかるよ
static変数については「いつどこからsetされるか分からないコード」によってデータ競合が起きうるのはその通り
しかしRustのstatic変数は(unsafeを除いて)可変(mutable)ではないため「いつどこからsetされるか分からないコード」によってデータ競合を起こすこともないよ
例えばRustのstatic変数をマルチスレッドで共有しつつ値を書き換えたいならばMutexなどによる内部可変性を与える必要がありデータ競合が必ず避けられる
2023/08/19(土) 01:55:38.87ID:3nD/Pt3g
こういう意味のない比較を少なくとも2年はずっと書き散らし続けて
何も生み出していないっていうね
2023/08/19(土) 06:12:11.05ID:ImsjC3MV
技術板のスレなのに無能が適当なこと書き散らすだけで他人が参考にならないスレ
板違いの雑談スレなんだからせめてageるな
680デフォルトの名無しさん
垢版 |
2023/08/19(土) 08:18:21.33ID:7swIlm9f
Rust は安全(キリっ
ですね
わかります
2023/08/19(土) 08:30:53.11ID:EolsykgK
>>672
標準ライブラリのサポートは重要だろ
ちょっとしたことをやるだけでいちいちライブラリを選定する必要があり、コンパイルが遅くなる
CICDも遅くなるし、ライセンスもいちいちクリアしなくては行けない

同じく標準ライブラリが薄いNode.js使っててnode_modules肥大化問題に悩んでいる奴は多いだろう

例えばhttpリクエストするだけでもプロジェクトによってライブラリが異なる
ライブラリが異なるのでそれぞれの使い方をいちいち覚えないといけない
こういったことは企業で開発する上で不毛なんだよ
2023/08/19(土) 08:44:42.58ID:iXpPt34C
企業については、企業がライブラリを指定するんだし…感はある(非プロの感想です
683デフォルトの名無しさん
垢版 |
2023/08/19(土) 10:43:11.58ID:7swIlm9f
>>681
わかります
2023/08/19(土) 10:53:02.71ID:LtLp+SED
選定ばかりで何も生み出さない消費者を許せないってそこに書いてある
だから選択肢を増やせば増やすほど評価が高い
2023/08/19(土) 14:23:54.36ID:whLCc1g8
オープンソース環境は、OSや環境に変化があるたびに、
別人が別の修正版を出してきて、少しずつ使い勝手が違う
ので、めんどくさい。
Rustもそうなる予感がするので使わない。
686デフォルトの名無しさん
垢版 |
2023/08/19(土) 14:30:43.48ID:whLCc1g8
>>685
今、OSSのある開発環境を使い始めたとしよう。
・ドキュメントも不十分なので、上手く行く方法を
 試行錯誤して探すのが必須。
・やっと探し出した方法でmakefileやbatファイルなどを
 整備して開発できるようになる。
・数年後、試して見ると動作しなくなっている。
・それでまた、ググり調査 + 自分でテストを繰り返し、
 数種類の配布物を試してやっとの思いで昔と似た
 ことが出来る方法にたどり着く。その間、大部分の
 環境は、来たいはずれの「試し損」となる。
・そして、makefileやbatファイルが作り直しとなる。
・ライブラリパス、インクルードパス、#includeなどの
 修正も必要となる。xxx.h だったものが、sys/xxx に移って
 いたり、昔 typedef されていたものが、なぜか無くなったり
 別ファイルで定義し奈緒知れていたりする。
・ここまで、数日間かかり、プログラミングは全く出来ない。

経験法則から導かれたOSSの開発環境の日常の風景。
687デフォルトの名無しさん
垢版 |
2023/08/19(土) 14:31:48.17ID:yRurJ253
>>685
C++の新しい規格を使わないのかな?
688デフォルトの名無しさん
垢版 |
2023/08/19(土) 14:35:14.63ID:yRurJ253
>>686
>・数年後、試して見ると動作しなくなっている。
あなたのOSSとの付き合い方の問題点は上記に集約される
常に追っていかなくてはおいてきぼりにされる
あなたには向いていないので使わないこと
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を採用することで「チームの速度が低下した」と回答した。
2023/08/19(土) 14:45:09.39ID:B82tdG00
>>681
Rustはデファクトスタンダードがあるからそのように困ったことないな
httpならhttpという名のクレートに基本事項が定められていて全てのhttp実装やその上の各フレームワーク等がこれを使う
httpクレート自体はhttp実装を持たずにhttpのリクエスト型やレスポンス型にURI型やヘッダ型やステータス型などだけを持つところが重要なポイント
もし新たな速いhttp実装が現れたとしてもインターフェイスはこのhttpクレートに(少なくとも今までは全て)従うため利用者が困ることはない
2023/08/19(土) 16:02:34.86ID:HZzlwK9f
>>688
うん。だから、OSSは大嫌いだし、出来る限り使わない。
Linuxを含めて色々試したが、ごく一部のものを除いては
結局駄目だった。
2023/08/19(土) 16:07:41.17ID:HZzlwK9f
>>691
ちなみに、俺は、自分で何から何まで作るのが好きなので、
人が作った環境に追いまくられるのが大嫌い。
693デフォルトの名無しさん
垢版 |
2023/08/19(土) 16:16:02.61ID:yRurJ253
>>691
適応能力に長けてないと扱うのは難しい
変化の速さがOSSの競争力の源泉の一つと感じられなければ
苦痛だろうね

オープンソースでもboostとかはほとんど変わらんやろ? 使わないの?
規格にすらあなたは新しいものにクレームつけそうだがw
694デフォルトの名無しさん
垢版 |
2023/08/19(土) 16:17:31.20ID:yRurJ253
>>692
仕事が遅いと言われるだろ?
2023/08/19(土) 16:19:22.12ID:LtLp+SED
debとかrpmとかバイナリパッケージを否定したら挫折するね
Windowsに依存しないだけならそこまで無理ゲーではないけど
WindowsもLinuxもどっちも認めないいわゆる「中立」が過激化するとうまくいかない
2023/08/19(土) 16:36:31.92ID:HZzlwK9f
>>692
むしろ逆で、今までみたことがないくらい仕事が
物凄く速いと言われていたぞ。
研修時の記録も塗り替えた伝説も持っている。
2023/08/19(土) 16:37:25.19ID:HZzlwK9f
>>696
アンカーミスした。
正しいアンカーは >>694
2023/08/19(土) 17:00:00.61ID:nqM77Zy+
OSSかどうかとは関係なく現状のRustはライブラリ探しと精査に超時間がかかるのは確か
アプリケーションプログラマーから見るとこれがRustの最大の欠点
699デフォルトの名無しさん
垢版 |
2023/08/19(土) 17:36:47.10ID:yRurJ253
>>696
仕事が速い人がOSSに適応できないわけないじゃんw
>>686に「・ここまで、数日間かかり、プログラミングは全く出来ない。」
と自分でも書いてるし

boostは使わないのかい?
700デフォルトの名無しさん
垢版 |
2023/08/19(土) 17:53:56.37ID:2pOprLh9
>>698
そもそもRustは低レイヤ向けでライブラリを特に必要としない用途に向いてるってことだよ
Webやクラウドなどの通常のバックエンドアプリはライブラリを多用することになるがそれは向いていないってことの証
2023/08/19(土) 17:57:23.73ID:Y5l+MR//
ほんとに(webの上位層で)人気が出てくれば、ライブラリは勝手に揃ってくるだろうけどね
702デフォルトの名無しさん
垢版 |
2023/08/19(土) 18:20:48.63ID:JEXSqoZz
webやるには十分よ
2023/08/19(土) 18:58:40.44ID:nqM77Zy+
>>700
ところが低レイヤもたくさんライブラリ使うんだよ
2023/08/19(土) 19:13:06.91ID:ZeP/2UQc
だんだんOSSがおかしいと思い始めてきた
2023/08/19(土) 19:18:41.11ID:bDuPlb9r
RHELやHashiCorpの動きはAmazonがターゲット?
2023/08/19(土) 19:32:52.64ID:bYZ/uEmX
actix-webとaxumどちらがいいのだろう
2023/08/19(土) 19:49:03.02ID:MPHyURRb
>>704-705
Mojo🔥がAmazonかGoogleに買収されてクラウドオンリーになる可能性
708デフォルトの名無しさん
垢版 |
2023/08/19(土) 20:17:26.90ID:ScsfkQnZ
Firefoxはバクサイ開いたままにしてるとメモリー20GB、CPU100%になったりする
Chromeはそんなことにならない
そういう違いがある
709デフォルトの名無しさん
垢版 |
2023/08/19(土) 20:41:53.76ID:JEXSqoZz
>>706
axum
2023/08/19(土) 20:47:27.03ID:ZeP/2UQc
>>707
妨害してるってこと?
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
2023/08/19(土) 21:36:12.67ID:DB+Yglwb
write_allの後はflushした方いいんじゃね?
しらんけど

まあPythonの方がアマチュア向けというか面倒見がいいのは分かる
714デフォルトの名無しさん
垢版 |
2023/08/19(土) 21:50:51.02ID:fB8B9G8R
>>697
自演がバレたなω
715デフォルトの名無しさん
垢版 |
2023/08/19(土) 21:52:18.92ID:fB8B9G8R
>>698
crates.io 破綻してるよな
2023/08/19(土) 22:20:00.98ID:DB+Yglwb
crates.ioに限った話ではないけど
ライブラリ名と実装品質のミスマッチはいつも気になってる
HTTP/2用のライブラリでもhttp2よりh2の方が利用者数多いとか
オープンなレジストリの宿命として諦めるしかないのかな
717デフォルトの名無しさん
垢版 |
2023/08/19(土) 22:20:55.24ID:uqHP0fTk
>>644
5chでデマ垂れ流して気持ち良くなるだけのゴミ人生でしたw
2023/08/20(日) 00:49:54.32ID:nxq7VYP6
損得の勝負をしてると、デマで得をする奴がいないか常に不安だよな
それなら単純に本当か嘘かで勝負すればデマと勝利は両立しないから安心安全なのでは
2023/08/20(日) 01:54:31.51ID:xEeb34b9
>>712
HTTPを知らないなら素直にライブラリを使えよ
そのRustコード汚すぎるがそこに正しくHTTPヘッダを一行加えたら動いたぞ
サイン曲線GIFが表示されている
2023/08/20(日) 02:56:13.90ID:shN/tp+V
>>719
修正版ウブおながいします
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()
}
722デフォルトの名無しさん
垢版 |
2023/08/20(日) 07:18:09.55ID:3t1JnBWI
>>663
同意
2023/08/20(日) 08:16:48.41ID:6nnys+Pw
>>699
俺はOSSを使わない仕事をしているから。
2023/08/20(日) 08:21:25.95ID:6nnys+Pw
>>698
>OSSかどうかとは関係なく現状のRustはライブラリ探しと精査に超時間がかかるのは確か
いや、それはOSSだとほぼ必ず起きる現象。
OSS自体が持つ欠点の一つだから。
2023/08/20(日) 08:24:41.49ID:6nnys+Pw
クローズドなソフトだと、古いものも維持されるかどうかは、
それぞれの企業次第で各企業の特徴が出る。
ところがOSSの場合、人類全体の傾向となるから、
どのOSSなソフトでも似たような保守の傾向となり、
制御できない。なぜなら、人類全体の傾向はいつも
ほぼ同じだから。
電力送電における「無限大母線」という言葉を思い出した。
2023/08/20(日) 09:39:15.51ID:GjiTjTDJ
>>720
>>712 もう治ってる
>>719 thx
■ このスレッドは過去ログ倉庫に格納されています