- 1 名前:デフォルトの名無しさん [2023/08/15(火) 22:24:39.45 ID:xzxy4cgp.net]
- 公式
https://www.rust-lang.org/ https://blog.rust-lang.org/ https://github.com/rust-lang/rust 公式ドキュメント https://www.rust-lang.org/learn Web上の実行環境 https://play.rust-lang.org ※Rustを学びたい人はまず最初に公式のThe Bookを読むこと https://doc.rust-lang.org/book/ ※Rustを学ぶ際に犯しがちな12の過ち https://dystroy.org/blog/how-not-to-learn-rust ※Rustのasyncについて知りたければ「async-book」は必読 https://rust-lang.github.io/async-book/ ※次スレは原則>>980が立てること 前スレ Rust part20 https://mevius.2ch.net/test/read.cgi/tech/1677771928/ ワッチョイスレ プログラミング言語 Rust 4【ワッチョイ】 https://mevius.2ch.net/test/read.cgi/tech/1514107621/
- 341 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 15:53:12.11 ID:R98wQa7Y.net]
- #[derive(Copy)] 禁止
- 342 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 18:16:56.45 ID:52Xj2Gp1.net]
- >>328
他のDBMSでもプロセス間の排他制御は 出来る方法が限られているのでファイルロックを 使っている可能性が高い。 他の方法だと、mkdir 法や、名前付きパイプが あることがあるが、ファイルロックの方が便利。 一つのプロセスの中のスレッド間の排他制御は 色々な方法が有るが、プロセスを越えた排他制御 は意外と他に出来る方法が無いから。
- 343 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 18:33:23.45 ID:I55f6i4N.net]
- >>335
#[derive(Copy,Clone)]はもう試しました Rustのいいところが失われますね
- 344 名前:デフォルトの名無しさん [2023/09/20(水) 18:51:23.96 ID:o02nl+od.net]
- rustの名前の由来は?
- 345 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 19:07:11.98 ID:DDNbmZRy.net]
- https://en.wikipedia.org/wiki/Rust_(fungus)
robustな菌らしい
- 346 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 19:38:07.98 ID:I55f6i4N.net]
- OpenGLをやりたくてcrates.ioで最新版を調べてCargo.tomlに
[dependencies] bytemuck = "1.14.0" ogl33 = "0.3.0" [dev-dependencies] beryllium = "0.13.0" imagine = "0.5.1" このプログラムをビルドするとberylliumがunresolvedと出ます use beryllium::*; fn main() { let sdl = Sdl::init(init::InitFlags::EVERYTHING); } berylliumのパッケージ名が変わったりしたのでしょうか わかる人いますか
- 347 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 20:29:54.63 ID:X4X5BtpX.net]
- >>336
さすがにmutex_lock使ってるよ 乏しい経験からの妄想なんかじゃなく、ちゃんとソース見れ
- 348 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 21:48:28.31 ID:UIQvYKk8.net]
- >>331
ナチュラルキーをまともに扱えない奴はそもそも設計者失格だろう
- 349 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 22:20:31.31 ID:DDNbmZRy.net]
- >>340
単純に動かすだけならdev-dependenciesからdependenciesに移せばいいと思う テスト用の依存としてdev-dependenciesにこだわるなら use beryllium::*; の前に extern crate beryllium; を入れれば通るかな あまりdev-dependencies使わないから分からん
- 350 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 22:37:25.93 ID:I55f6i4N.net]
- >>343 ありがとうございます、動かせました!楽しい
- 351 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 23:23:26.93 ID:T1fPPHAq.net]
- dev-dependenciesについてはこの辺参照
testやbenchやexampleだけで使う依存を定義するやつ https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#development-dependencies main関数の中で必要なら普通のdependencyにしないといけない extern crateは関係ない
- 352 名前:デフォルトの名無しさん mailto:sage [2023/09/20(水) 23:35:58.10 ID:8RfwRI5f.net]
- >>331
未来永劫ユニークとノンヌルを単独ナチュラルキーで満たせればいいけど そうでないときもあるもんね >>336 プロセス間mutexやセマフォもあるよ >>337 小さいデータならCopy実装は有利
- 353 名前:デフォルトの名無しさん [2023/09/21(木) 00:37:39.43 ID:hd16Ksmk.net]
- >>336
単一ファイルでまかなうSqliteと一緒にすんな
- 354 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 02:18:25.33 ID:AFY6neVf.net]
- >>341
CreateMutex()の第三引数に名前を指定しなければ ならないが、ユニークな名前をどうやって作るか が大問題になるよね。 その点、LockFile() なら名前衝突の問題は 最初から簡単に確実に回避できる。
- 355 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 03:10:10.71 ID:2dN46EMa.net]
- 普通のDBってインターフェースを一つのサーバーで提供してると思うんだけど
名前解決が出来ない管理なんてあるの?
- 356 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 03:14:44.34 ID:AFY6neVf.net]
- >>349
なるほど。そういうことか。 SQLiteは、中央サーバー的なプロセスが無いから 事情が違うってことなんだな。
- 357 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 04:39:08.18 ID:uFUX5dn+.net]
- まずプロセスを分けるメリットがない
CPUコアスレッド数のスレッドを立ち上げれば一つのプロセスでそのマシンのリソースを使い切れる ただし通信待ちでスレッドが止まったらその分のCPUリソースを無駄にしてしまうため各スレッドで複数のタスクを動かす ただし各スレッドが抱えるタスク数は偏りがちなことが知られているため暇なスレッドは他からタスクを盗んで実行できるようにする 以上のスケジューリングをするのがRustのtokio
- 358 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 08:25:19.60 ID:CT30w3BF.net]
- https://www.sqlite.org/whyc.html
- 359 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 10:46:48.71 ID:BwXSXzYj.net]
- >>352
Rust以外の言語は完全に否定されているけど 今後Rustだけは条件を満たせば採用するとあるね
- 360 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 10:59:44.45 ID:3hJtL3Ib.net]
- mutable xor sharedはトランザクション分離レベルで言うとSERIALIZABLEだと思うけど、書き込み性能にけっこう致命的なパフォーマンス劣化が出たりしない?
あらかじめ主要な書き込み先オブジェクトの参照を保持しておくとかのオブジェクト指向の定石が利用出来ないし。
- 361 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 11:03:41.54 ID:KbwNEPLt.net]
- SQLiteは今、日本の人が一人でRustに移植してるみたいだけど?
完成度は知らない
- 362 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 13:31:34.10 ID:cACw6b27.net]
- >>351
MySQLやPostgreSQLみたいな普通のDBMSでは 単一プロセスがデーモンとして常駐してファイル更新 を一元管理するのが前提となっているが、 SQLiteでは、そのような常駐プロセスが 存在しなくて、各アプリがSQLiteのライブラリ プログラムを呼び出して、ライブラリの関数が 排他制御を行なって単一ファイルを壊さないように ロックしながら互いに強調しつつ、部分書き換えや 部分読み込みを行っている。 つまり、SQLiteは管理を担う単一の常駐プログラム がなくて、個々のアプリ(の中のライブラリ)が 協調動作するようになっている。 だから、プロセス間で同期を取る仕組みが必要となる。 しかし、CreateMutexでは、ユニークな名前が必要 となってしまい、その名前を決めるのがメンドクサイ。 一方、LockFile だとファイルのパス名で自動的に ユニークの名前に出来てしまうから、非常に簡単に 安全に正しくロックできる。
- 363 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 16:18:11.92 ID:B1OFnXUk.net]
- 3文字で言うと
- 364 名前:デフォルトの名無しさん [2023/09/21(木) 16:54:51.87 ID:2fMT8T96.net]
- SQLite便利だよ
- 365 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 17:25:46.98 ID:WBcwDy8I.net]
- sqliteは便利だけどテーブルロックなところがうんこなんだよな
begin conccurentとか予定あるらしいが
- 366 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 20:32:07.68 ID:2tR0WsIS.net]
- 複数のプロセスからアクセスしないのを前提条件に出来る場合もそれなりにあるもんな。
ちょっとしたツールでデータベースのプロセスをいちいち起動するのはわずらわしいし、 sqlite くらいの気軽さはありがたいのは確か。 sqlite みたいな方針のデータベースが他に台頭してないのが不思議なくらいだ。
- 367 名前:デフォルトの名無しさん [2023/09/21(木) 20:41:30.87 ID:PYjX2iWU.net]
- >>359
テーブルロックじゃなくデータベースロック multiple reader xor single writerはデータベース単位
- 368 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 20:59:40.19 ID:WBcwDy8I.net]
- もっとひどいデータベース単位か
https://www.sqlite.org/cgi/src/doc/begin-concurrent/doc/begin_concurrent.md これでページ単位が導入されても、select for updateみたいに明示的にロック がほしいな リトライとかだるい
- 369 名前:デフォルトの名無しさん mailto:sage [2023/09/21(木) 20:59:47.82 ID:WBcwDy8I.net]
- もっとひどいデータベース単位か
https://www.sqlite.org/cgi/src/doc/begin-concurrent/doc/begin_concurrent.md これでページ単位が導入されても、select for updateみたいに明示的にロック がほしいな リトライとかだるい
- 370 名前:デフォルトの名無しさん [2023/09/21(木) 23:58:45.91 ID:+/xN81gC.net]
- 以下のような関数(実際のものとは少し違いますが)を実装してみたのですがイテレータのメソッドチェーンの箇所で型が合っていないとコンパイルエラーが発生します
アルゴリズム自体を変更することで目的としていた処理はできましたが結局このエラーの直し方がわかりません ライフタイム周りが原因だとは考えていますがどのように修正すればよいしょうか fn hoge( func: &impl Fn((&i64, i64)) -> i64, arr: &[i64], ret: &mut Vec<impl Iterator<Item = i64>> ) { ret.push(arr.iter().zip(std::iter::repeat(arr[0])).map(func)); for i in 1..arr.len() { hoge(func, &arr[i..], ret); } }
- 371 名前:デフォルトの名無しさん [2023/09/22(金) 09:19:17.11 ID:dkRHHNCe.net]
- fn hoge(
func: &impl Fn((&i64, i64)) -> i64, arr: &[i64], ret: &mut Vec<impl Iterator<Item = i64>> ) { ret.push(arr.iter().zip(std::iter::repeat(arr[0])).map(func).collect()[0]); for i in 1..arr.len() { hoge(func, &arr[i..], ret); } }
- 372 名前:デフォルトの名無しさん mailto:sage [2023/09/22(金) 12:36:56.71 ID:E1X0qleO.net]
- lifetimeの問題もあるかもしれないがimpl Iteratorの型をとるところに関数内で生成したイテレータを渡しているのがそもそもおかしい
- 373 名前:デフォルトの名無しさん mailto:sage [2023/09/22(金) 13:53:26.70 ID:dkRHHNCe.net]
- >>360
mdb
- 374 名前:デフォルトの名無しさん [2023/09/22(金) 16:15:11.47 ID:v8mgsVW8.net]
- >>366
mapにはhogeの外から引数として関数を渡しているので再帰呼出しごとにイテレータの型は変わらないですし ``` let mut v = Vec::new(); hoge(|(&a, b)| a + b, &[1, 3, 5], &mut v); ``` という形でhogeを呼び出せばイテレータの型は自動的に推論されると思うんですが...
- 375 名前:デフォルトの名無しさん [2023/09/22(金) 18:07:36.44 ID:KH67E8jw.net]
- impl TraitはTraitを実装した型のいずれか一つを受け入れるだけで、Traitを実装した型全てを受け入れるわけではない
- 376 名前:デフォルトの名無しさん [2023/09/22(金) 18:31:55.39 ID:v8mgsVW8.net]
- >>369
mapの中に直接クロージャを渡せば確かにその制限に引っかかりますが、今回は再帰の中で一つの関数を使いまわしているのでimpl Iteratorの型は一つに固定されませんか?
- 377 名前:デフォルトの名無しさん [2023/09/22(金) 18:41:57.56 ID:v8mgsVW8.net]
- >>365
イテレータのまま保持して遅延評価させたいんです
- 378 名前:デフォルトの名無しさん mailto:sage [2023/09/22(金) 18:43:25.81 ID:8SLDLfd5.net]
- 関数定義から一意な具体型に推論されるのは戻り値型に書いた impl の話ですね
引数型に書いた impl は単にジェネリック引数を匿名化したものという扱いなので hoge は I: Iterator<Item=i64> なる任意の I で単一化できるような定義が求められます https://doc.rust-lang.org/reference/types/impl-trait.html なので引数で&mut引き回してdynも使いたくないということであれば↓になりますかね https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=32403112ac74f1a10cadf1236590744c
- 379 名前:デフォルトの名無しさん [2023/09/22(金) 19:29:43.87 ID:v8mgsVW8.net]
- >>372
コンパイル通りました!ありがとうございます! ただもう少しわがままを言うと、実際の実装で
- 380 名前:はメソッドチェーンの箇所がこれの2倍ぐらいの長さなので具体的なイテレータの型を書かずにコンパイラ任せにしたかったんですが、話を見る限りどうも無理そうですね... []
- [ここ壊れてます]
- 381 名前:デフォルトの名無しさん mailto:sage [2023/09/23(土) 08:15:26.34 ID:piK9W+al.net]
- >>373
>>372も書いてるけどimpl IteratorをBox<dyn Iterator>にする手もあるよ
- 382 名前:デフォルトの名無しさん mailto:sage [2023/09/23(土) 09:19:17.35 ID:lKOAbDFW.net]
- 可能なら dyn は避けるに越したことは無い。
dyn はトレイトオブジェクトを扱うための仕組みであって 推論を補助する仕組みではないから。
- 383 名前:デフォルトの名無しさん mailto:sage [2023/09/23(土) 09:55:40.35 ID:piK9W+al.net]
- >>375
実装の隠蔽目的でdyn使うのはそんなに変な使い方ではないと思うが
- 384 名前:デフォルトの名無しさん mailto:sage [2023/09/23(土) 09:59:36.45 ID:i9fpyxKg.net]
- Box<dyn Trait>で解決しました本当にありがとうございました
- 385 名前:デフォルトの名無しさん [2023/09/23(土) 16:36:06.31 ID:WPP4nTE5.net]
- >>364です
補足すると今回自分がわかっていなかったのは以下のような関数がコンパイルを通らないということですね ``` fn hoge<T>(a: i64, b: &mut T) { *b = a; } ``` impl Traitが単にジェネリクスの糖衣構文であるということと、 トレイト境界を満たす型をジェネリクス引数に渡した場合は合法に"ならなければならない"、トレイト境界は十分条件も満たさなくてはならないという点
- 386 名前:を解っていなかったのがポイントでした... []
- [ここ壊れてます]
- 387 名前:デフォルトの名無しさん mailto:sage [2023/09/23(土) 21:17:07.32 ID:piK9W+al.net]
- 戻り値のimpl Traitと引数のimpl Traitで振る舞い違うのは当たり前ではあるんだけど混乱しやすいポイントではあるかもね
- 388 名前:デフォルトの名無しさん mailto:sage [2023/09/24(日) 12:22:42.57 ID:2YTVyUlC.net]
- 0788デフォルトの名無しさん
2022/06/21(火) 08:59:28.38ID:vO+TReRM 俺はフロントエンドやらないからこのスレでTauriの話をしないでくれ
- 389 名前:デフォルトの名無しさん [2023/09/24(日) 12:36:49.28 ID:2YTVyUlC.net]
- こいつはどうかな
https://zenn.dev/ksilverwall/articles/2869b4c73e6327
- 390 名前:デフォルトの名無しさん mailto:sage [2023/09/25(月) 23:08:53.71 ID:OcxuhTB3.net]
- rustでdx12ってまともに使えますか?
そろそろc++は卒業したい
- 391 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 10:01:41.63 ID:q653RLNX.net]
- >>382
使えないということだな。
- 392 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 17:46:11.75 ID:WrG1pnap.net]
- 一応d3d12があるけど、これを直接使うよりwgpu経由のほうがいいんじゃないか?
- 393 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 18:52:01.41 ID:liEPyEVD.net]
- rustとgoとc#でjsonのシリアライズ、デシリアライズ実験したんだけど
rust 1ms cargo run --release go 10ms c# 40ms dotnet build -c Release こんなに違うもんなの? リリースモードでビルドしたつもりだけど WebAPIのバックエンドどれにするか悩んでたけどもうrust1択でいいやん
- 394 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:18:52.63 ID:rDjR9GdF.net]
- 最適化で計測対象の処理が丸ごと消えてないかな
どこかでデータのサイズとか集計とか出力してればいいけど
- 395 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:22:16.85 ID:sfzsNV4F.net]
- さすがそこまで速くないよね
C#ももっと速いような気がする
- 396 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:40:15.73 ID:aJs6t/KK.net]
- コードの問題かベンチマークの問題だね
- 397 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:41:15.28 ID:K0prie5d.net]
- >>385
goこのライブラリ使うとどうなる? https://github.com/goccy/go-json
- 398 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:41:38.03 ID:aJs6t/KK.net]
- >>378
>fn hoge<T>(a: i64, b: &mut T) fn hoge<T>(a: T, b: &mut T)にすればいいと思うけど 同じような解決策が>>364にあるということなの?
- 399 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:56:19.26 ID:liEPyEVD.net]
- >>385
それやってる まず、デシリアライズ1000回して シリアライズ1000回でシリアライズでバイト配列になるからそのサイズのトータル を求めてる さっきのは1回あたりの平均 >>389 それやったら7.5ms experimentalなJSON v2は13ms
- 400 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 21:59:59.97 ID:liEPyEVD.net]
- つか、goってリリースビルドないやろ?
コンパイルも一瞬でへ?ってなるわ それぞれ30行未満のコードだけど..
- 401 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 22:29:35.41 ID:liEPyEVD.net]
- https://controlc.com/77570dbc
goだとこんな感じ
- 402 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 22:43:29.67 ID:liEPyEVD.net]
- ああ、ごめんC#は嘘でしたすみません
3msになりました
- 403 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 22:55:30.68 ID:liEPyEVD.net]
- Rustは最強で
C#はメモリ使用量多いがMSが最適化ガンバッテル Goはメモリ使用量少なくて言語仕様がシンプルだがC#に負けたり...
- 404 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:05:14.16 ID:EQtG/kil.net]
- 意味のないベンチマークだね
ちなみにこういうのはNimが速いと思うよ 結局こういうのってコンパイラの最適化の勝負をしているだけだから Rustが速いというよりはLLVMが速いだけ Zigとかでも同じスピードが出るはず その代わりにコンパイル速度が遅いというデメリットがあるからこれは単なるトレードオフで、用途に応じて適した言語を選択するのが重要ってだけだね WebAPI作るならIOが結局ボトルネックになるからパフォーマンス気にするにしても別にスクリプト言語じゃないならなんでもいいのよね 好きな言語にすればいいと思う
- 405 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:08:16.82 ID:kLEETtIu.net]
- それはともかく
NimはRustに対して意味のあるアドバンテージ皆無でNimだけは要らん
- 406 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:14:09.15 ID:liEPyEVD.net]
- まぁ、データベースはおもいっきし叩くね
最初は最強言語じゃなくてわかりやすい2番あたりの言語でいこうと思ってるんだけたんだけど で、1番ははっきりRustっぽいからわかりやすいからいんだけど、 2番(C#,Go?)がはっきりしないから1番の言語でいいのかなと 最大の目的はサーバー費用を押さえられるように
- 407 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:14:24.83 ID:gNMcg380.net]
- Nimはオフサイドルールってだけで試す気にもならないんだよな…
- 408 名前:デフォルトの名無しさん mailto:sage [2023/09/26(火) 23:52:14.82 ID:lFc5NXyg.net]
- >>396
多数の非同期タスクを偏らずスレッド間でスチールしてスケジューリングできるのは現状GoとRustしかない 小規模ならGoでもよいがそれ以上だと言語機能が貧弱なGoは辛くなってきてRustの独壇場
- 409 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 00:09:38.71 ID:8IPpP98U.net]
- >>400
妄想乙 https://ufcpp.net/study/csharp/misc_task.html#thread_pool4
- 410 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 00:11:19.90 ID:8IPpP98U.net]
- この妄想も延々言ってたけどやっと黙るのかな?
470: デフォルトの名無しさん sage 2023/09/26(火) 09:57:28.51 ID:ycG3j/g+ >>469 IaaSの一部にそういうケースがありうるだけだぞ PaaS (FaaS)は基本的にメモリ使用量✕実行時間で料金が決まる メモリ使用量は少なければ少ないほどコストに優れている
- 411 名前:デフォルトの名無しさん [2023/09/27(水) 00:29:08.13 ID:MfhnDtnO.net]
- 複オジは相変わらず嘘ばっかり
成長しないね
- 412 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 00:38:28.22 ID:+nRBKi9H.net]
- AIにRust生成させてGoと比較してみたけどmarshal以外は変わらないな (goccy/json使用)
x86でやってる?ARMだと違うのかも (俺はUbuntu x86/64) https://pastebin.com/yV96KjSw $ go run ./main.go 1187 [μs] 268419000 [bytes] 467 [μs] $ cargo run --release 1347 [μs] 263672000 [bytes] 255 [μs]
- 413 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 00:56:55.88 ID:+nRBKi9H.net]
- 俺の環境だとgoccy/jsonにすることで4倍速くなったけど何が違うんだろうね
goccy/json 1129 [μs] 268419000 [bytes] 446 [μs] 標準json 4125 [μs] 268419000 [bytes] 533 [μs] go-json-experiment/json 3446 [μs] 263609000 [bytes] 745 [μs]
- 414 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 01:02:33.77 ID:+nRBKi9H.net]
- これにしたらRustより早くなったわ
結局これっていかに最適化しているかってだけだと思う https://github.com/bytedance/sonic [Go sonic json] 914 [μs] 263609000 [bytes] 209 [μs]
- 415 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 01:06:34.20 ID:8IPpP98U.net]
- 気づくのが遅い
- 416 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 01:44:16.58 ID:jtGLjNq+.net]
- >>405
お手数かけて本当にごめんなさい 自分の実行方法が問題でした >>385でgoの部分が空欄のように実行方法がわかってなく、 デバッグモードで動いていました すみません go runで動かしたら>>405のような速度になりました
- 417 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 01:51:26.25 ID:jtGLjNq+.net]
- WebAPIでgoで行く決意ができました
本当にお騒がせしました
- 418 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 04:55:49.67 ID:UdUnwuun.net]
- YouTube で有名な雑食系エンジニア・KENTA が、既に言ってる。
キャリアパスは、Ruby on Rails → Go のみ Ruby/Goの神・HashiCorp のMitchell Hashimoto がそう。 Ruby製のVagran
- 419 名前:t → Go製のTerraform。
今は、Goプログラマーしか求めていない Rust/Elixir は普及のキャズムを超えなかった。 超えたのは、Goだけ [] - [ここ壊れてます]
- 420 名前:デフォルトの名無しさん [2023/09/27(水) 17:50:20.18 ID:wGZOY1wb.net]
- まあビルド時間の重要性はちょこちょこ一人で作ってるやつは理解できんわな。
- 421 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 18:56:48.41 ID:CCaLLXi3.net]
- 仕事なら相応に強力なマシンかレンダリングサーバがあるだろ
- 422 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 21:44:37.94 ID:fWGZRw8C.net]
- レンダリングサーバーは関係なさすぎ
- 423 名前:デフォルトの名無しさん mailto:sage [2023/09/27(水) 22:03:34.78 ID:vmit0gpI.net]
- ビルドサーバーと間違えたのかもね
- 424 名前:デフォルトの名無しさん mailto:sage [2023/09/28(木) 18:29:13.32 ID:gS/5M63X.net]
- MARCHを受けるために東大の過去問を練習するような意識高い系バカ
- 425 名前:デフォルトの名無しさん [2023/10/06(金) 11:57:36.28 ID:Zl0hPCVy.net]
- 一体誰がRustを推しているのか?
中國?
- 426 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 13:12:35.08 ID:2p+njRVB.net]
- 関数型と手続き型のいいとこ取りしたいプログラマだろ
情報科学の先進国なら中国に限らず一定数いるはず
- 427 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 16:38:53.65 ID:AJI+rgso.net]
- ネットインフラが次々とRust製になっていってる
>【CDN世界トップシェアCloudflare】 >https://www.publickey1.jp/blog/22/cloudflarenginxrusthttppingoracdncpu31.html >CDNプロバイダのCloudflareは、同社のグローバルなCDNの基盤として長らく利用してきたNGINXに代えて、 >同社自身がRust製のHTTPプロキシである「Pingora」を開発し利用していることを明らかにしました。 >【クラウド世界トップシェアAWS】 >https://japan.zdnet.com/article/35183866/ >Rustで構築されたAWSサービスの例としては、 >コンテナーアプリ用のサーバーレスプラットフォーム「Lamba」を支える「Firecracker」、 >「Amazon Simple Storage Service(S3)」、 >「Amazon Elastic Compute Cloud(EC2)」、 >コンテンツ配信ネットワーク「Amazon CloudFront」、 >LinuxベースのコンテナーOS「Bottlerocket」などがある。
- 428 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 20:34:57.35 ID:hdhWn3/E.net]
- 関数型の良いとことるの諦めた言語って感じだけどw
初期の頃はocamlでコンパイラ作られてたらしいのに MLの匂いさえ残ってない単なる手続き化型言語だわ
- 429 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 20:35:16.84 ID:hdhWn3/E.net]
- 関数型の良いとことるの諦めた言語って感じだけどw
初期の頃はocamlでコンパイラ作られてたらしいのに MLの匂いさえ残ってない単なる手続き化型言語だわ
- 430 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 21:14:33.58 ID:b1wSOXuc.net]
- スタックフレームに着目したのはプラスだけど、下手にスタックフレームを隠そうとしているのはマイナス。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
- 431 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 21:15:11.56 ID:b1wSOXuc.net]
- スタックフレームに着目したのはプラスだけど、下手にスタックフレームを隠そうとしているのはマイナス。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
- 432 名前:デフォルトの名無しさん [2023/10/06(金) 23:16:24.42 ID:tE7CLicd.net]
- mut 入れたのが間違いなんだろ
- 433 名前:デフォルトの名無しさん mailto:sage [2023/10/06(金) 23:30:10.29 ID:hdhWn3/E.net]
- 関数型に関してはscalaのほうがよっぽど意欲的だよ
def qsort(list: List[Int]): List[Int] = list match case Nil => Nil case pivot :: tail => val (smaller, rest) = tail.partition(_ < pivot) qsort(smaller) ::: pivot :: qsort(rest) たとえば↑こういうのとか
- 434 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 00:34:46.36 ID:Hyqci1qG.net]
- 関数型というよりはリスト型言語だな
- 435 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 01:56:24.14 ID:a3LzK6ia.net]
- システムプログラ
- 436 名前:~ングのための言語なので純粋に関数型な要素だけを求めるなら別の言語を当たった方が良い []
- [ここ壊れてます]
- 437 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 02:12:44.80 ID:QajUcOD9.net]
- リスト型つまりLinkedListをメインにすると利便さと引き換えに遅い問題とガベージが出まくる問題がある
Rustはリスト型メインにしなくて正解
- 438 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 04:42:48.81 ID:+bTugVnw.net]
- GCを前提にしない仕様の上に積み上げなくてはならないという側面から見ると、わりかしよくやっている方なんじゃなかろうか……知らんけど
- 439 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 06:29:51.58 ID:GJ9LXcgc.net]
- 自称情強底辺者「Rustでhello worldかける俺カコイイ」
真の成功者「スイカゲームでボロ儲けしました」
- 440 名前:デフォルトの名無しさん mailto:sage [2023/10/07(土) 06:46:44.80 ID:bWLG2vp7.net]
- mut無しとはこういうことか
https://play.rust-lang.org/?version=stable&mode=release&edition=2021&gist=a5753729862ae878a1cf011314e90f3e fn qsort<T: Copy+Ord>(list: &[T]) -> Vec<T> { match list { [pivot, ..] => { let (smaller, rest): (Vec<T>, Vec<T>) = list[1..].iter().partition(|&i| i < pivot); [qsort(&smaller), vec![*pivot], qsort(&rest)].concat() }, _ => vec![] } } fn main() { let list = [9, 0, 7, 3, 6, 1, 2, 4, 8, 5]; println!("{:?}", list); println!("{:?}", qsort(&list)); }
- 441 名前:デフォルトの名無しさん [2023/10/07(土) 09:44:47.17 ID:WqNjBTZw.net]
- まあ今時ランタイム速度でそこまで差がつくことはないわな。
ガベコレの実行タイミングが問題になることは結構あると思うけど。
|

|