公式
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/
探検
Rust part21
■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
2023/08/15(火) 22:24:39.45ID:xzxy4cgp331デフォルトの名無しさん
2023/09/20(水) 12:17:55.14ID:1SabZs8d >>317
むしろナチュラルキーにして詰んだりバグってる
むしろナチュラルキーにして詰んだりバグってる
332デフォルトの名無しさん
2023/09/20(水) 13:53:51.14ID:56axJTdd ナチュラルキーがプロジェクトの最後までユニーク保障されたことなんかマジで無いズラ
サロゲートキーは必須ズラ
サロゲートキーは必須ズラ
333デフォルトの名無しさん
2023/09/20(水) 14:13:13.56ID:I55f6i4N 今日入門した。ツアーやったらサンプルプログラムが80個ぐらいできた
fn a(i: i32){ println!("{}",i) }
fn main(){ let x = 10; a(x); a(x) }
これは10が2回出力される
構造体引数だと2回よべずにエラーが出たけど
プリミティブ型?なら所有権がどうのとかなくてスタックにコピーされるだけであってる?
fn a(i: i32){ println!("{}",i) }
fn main(){ let x = 10; a(x); a(x) }
これは10が2回出力される
構造体引数だと2回よべずにエラーが出たけど
プリミティブ型?なら所有権がどうのとかなくてスタックにコピーされるだけであってる?
334333
2023/09/20(水) 14:30:53.92ID:I55f6i4N 別のチュートリアル始めて理解した
コピートレイトが実装されてるからなのか
コピートレイトが実装されてるからなのか
335デフォルトの名無しさん
2023/09/20(水) 15:53:12.11ID:R98wQa7Y #[derive(Copy)] 禁止
336デフォルトの名無しさん
2023/09/20(水) 18:16:56.45ID:52Xj2Gp1 >>328
他のDBMSでもプロセス間の排他制御は
出来る方法が限られているのでファイルロックを
使っている可能性が高い。
他の方法だと、mkdir 法や、名前付きパイプが
あることがあるが、ファイルロックの方が便利。
一つのプロセスの中のスレッド間の排他制御は
色々な方法が有るが、プロセスを越えた排他制御
は意外と他に出来る方法が無いから。
他のDBMSでもプロセス間の排他制御は
出来る方法が限られているのでファイルロックを
使っている可能性が高い。
他の方法だと、mkdir 法や、名前付きパイプが
あることがあるが、ファイルロックの方が便利。
一つのプロセスの中のスレッド間の排他制御は
色々な方法が有るが、プロセスを越えた排他制御
は意外と他に出来る方法が無いから。
337デフォルトの名無しさん
2023/09/20(水) 18:33:23.45ID:I55f6i4N338デフォルトの名無しさん
2023/09/20(水) 18:51:23.96ID:o02nl+od rustの名前の由来は?
339デフォルトの名無しさん
2023/09/20(水) 19:07:11.98ID:DDNbmZRy340デフォルトの名無しさん
2023/09/20(水) 19:38:07.98ID:I55f6i4N 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のパッケージ名が変わったりしたのでしょうか
わかる人いますか
[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のパッケージ名が変わったりしたのでしょうか
わかる人いますか
341デフォルトの名無しさん
2023/09/20(水) 20:29:54.63ID:X4X5BtpX342デフォルトの名無しさん
2023/09/20(水) 21:48:28.31ID:UIQvYKk8 >>331
ナチュラルキーをまともに扱えない奴はそもそも設計者失格だろう
ナチュラルキーをまともに扱えない奴はそもそも設計者失格だろう
343デフォルトの名無しさん
2023/09/20(水) 22:20:31.31ID:DDNbmZRy >>340
単純に動かすだけならdev-dependenciesからdependenciesに移せばいいと思う
テスト用の依存としてdev-dependenciesにこだわるなら
use beryllium::*;
の前に
extern crate beryllium;
を入れれば通るかな
あまりdev-dependencies使わないから分からん
単純に動かすだけならdev-dependenciesからdependenciesに移せばいいと思う
テスト用の依存としてdev-dependenciesにこだわるなら
use beryllium::*;
の前に
extern crate beryllium;
を入れれば通るかな
あまりdev-dependencies使わないから分からん
344デフォルトの名無しさん
2023/09/20(水) 22:37:25.93ID:I55f6i4N >>343 ありがとうございます、動かせました!楽しい
345デフォルトの名無しさん
2023/09/20(水) 23:23:26.93ID:T1fPPHAq dev-dependenciesについてはこの辺参照
testやbenchやexampleだけで使う依存を定義するやつ
https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#development-dependencies
main関数の中で必要なら普通のdependencyにしないといけない
extern crateは関係ない
testやbenchやexampleだけで使う依存を定義するやつ
https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html#development-dependencies
main関数の中で必要なら普通のdependencyにしないといけない
extern crateは関係ない
346デフォルトの名無しさん
2023/09/20(水) 23:35:58.10ID:8RfwRI5f347デフォルトの名無しさん
2023/09/21(木) 00:37:39.43ID:hd16Ksmk >>336
単一ファイルでまかなうSqliteと一緒にすんな
単一ファイルでまかなうSqliteと一緒にすんな
348デフォルトの名無しさん
2023/09/21(木) 02:18:25.33ID:AFY6neVf >>341
CreateMutex()の第三引数に名前を指定しなければ
ならないが、ユニークな名前をどうやって作るか
が大問題になるよね。
その点、LockFile() なら名前衝突の問題は
最初から簡単に確実に回避できる。
CreateMutex()の第三引数に名前を指定しなければ
ならないが、ユニークな名前をどうやって作るか
が大問題になるよね。
その点、LockFile() なら名前衝突の問題は
最初から簡単に確実に回避できる。
349デフォルトの名無しさん
2023/09/21(木) 03:10:10.71ID:2dN46EMa 普通のDBってインターフェースを一つのサーバーで提供してると思うんだけど
名前解決が出来ない管理なんてあるの?
名前解決が出来ない管理なんてあるの?
350デフォルトの名無しさん
2023/09/21(木) 03:14:44.34ID:AFY6neVf351デフォルトの名無しさん
2023/09/21(木) 04:39:08.18ID:uFUX5dn+ まずプロセスを分けるメリットがない
CPUコアスレッド数のスレッドを立ち上げれば一つのプロセスでそのマシンのリソースを使い切れる
ただし通信待ちでスレッドが止まったらその分のCPUリソースを無駄にしてしまうため各スレッドで複数のタスクを動かす
ただし各スレッドが抱えるタスク数は偏りがちなことが知られているため暇なスレッドは他からタスクを盗んで実行できるようにする
以上のスケジューリングをするのがRustのtokio
CPUコアスレッド数のスレッドを立ち上げれば一つのプロセスでそのマシンのリソースを使い切れる
ただし通信待ちでスレッドが止まったらその分のCPUリソースを無駄にしてしまうため各スレッドで複数のタスクを動かす
ただし各スレッドが抱えるタスク数は偏りがちなことが知られているため暇なスレッドは他からタスクを盗んで実行できるようにする
以上のスケジューリングをするのがRustのtokio
352デフォルトの名無しさん
2023/09/21(木) 08:25:19.60ID:CT30w3BF353デフォルトの名無しさん
2023/09/21(木) 10:46:48.71ID:BwXSXzYj354デフォルトの名無しさん
2023/09/21(木) 10:59:44.45ID:3hJtL3Ib mutable xor sharedはトランザクション分離レベルで言うとSERIALIZABLEだと思うけど、書き込み性能にけっこう致命的なパフォーマンス劣化が出たりしない?
あらかじめ主要な書き込み先オブジェクトの参照を保持しておくとかのオブジェクト指向の定石が利用出来ないし。
あらかじめ主要な書き込み先オブジェクトの参照を保持しておくとかのオブジェクト指向の定石が利用出来ないし。
355デフォルトの名無しさん
2023/09/21(木) 11:03:41.54ID:KbwNEPLt SQLiteは今、日本の人が一人でRustに移植してるみたいだけど?
完成度は知らない
完成度は知らない
356デフォルトの名無しさん
2023/09/21(木) 13:31:34.10ID:cACw6b27 >>351
MySQLやPostgreSQLみたいな普通のDBMSでは
単一プロセスがデーモンとして常駐してファイル更新
を一元管理するのが前提となっているが、
SQLiteでは、そのような常駐プロセスが
存在しなくて、各アプリがSQLiteのライブラリ
プログラムを呼び出して、ライブラリの関数が
排他制御を行なって単一ファイルを壊さないように
ロックしながら互いに強調しつつ、部分書き換えや
部分読み込みを行っている。
つまり、SQLiteは管理を担う単一の常駐プログラム
がなくて、個々のアプリ(の中のライブラリ)が
協調動作するようになっている。
だから、プロセス間で同期を取る仕組みが必要となる。
しかし、CreateMutexでは、ユニークな名前が必要
となってしまい、その名前を決めるのがメンドクサイ。
一方、LockFile だとファイルのパス名で自動的に
ユニークの名前に出来てしまうから、非常に簡単に
安全に正しくロックできる。
MySQLやPostgreSQLみたいな普通のDBMSでは
単一プロセスがデーモンとして常駐してファイル更新
を一元管理するのが前提となっているが、
SQLiteでは、そのような常駐プロセスが
存在しなくて、各アプリがSQLiteのライブラリ
プログラムを呼び出して、ライブラリの関数が
排他制御を行なって単一ファイルを壊さないように
ロックしながら互いに強調しつつ、部分書き換えや
部分読み込みを行っている。
つまり、SQLiteは管理を担う単一の常駐プログラム
がなくて、個々のアプリ(の中のライブラリ)が
協調動作するようになっている。
だから、プロセス間で同期を取る仕組みが必要となる。
しかし、CreateMutexでは、ユニークな名前が必要
となってしまい、その名前を決めるのがメンドクサイ。
一方、LockFile だとファイルのパス名で自動的に
ユニークの名前に出来てしまうから、非常に簡単に
安全に正しくロックできる。
357デフォルトの名無しさん
2023/09/21(木) 16:18:11.92ID:B1OFnXUk 3文字で言うと
358デフォルトの名無しさん
2023/09/21(木) 16:54:51.87ID:2fMT8T96 SQLite便利だよ
359デフォルトの名無しさん
2023/09/21(木) 17:25:46.98ID:WBcwDy8I sqliteは便利だけどテーブルロックなところがうんこなんだよな
begin conccurentとか予定あるらしいが
begin conccurentとか予定あるらしいが
360デフォルトの名無しさん
2023/09/21(木) 20:32:07.68ID:2tR0WsIS 複数のプロセスからアクセスしないのを前提条件に出来る場合もそれなりにあるもんな。
ちょっとしたツールでデータベースのプロセスをいちいち起動するのはわずらわしいし、 sqlite くらいの気軽さはありがたいのは確か。
sqlite みたいな方針のデータベースが他に台頭してないのが不思議なくらいだ。
ちょっとしたツールでデータベースのプロセスをいちいち起動するのはわずらわしいし、 sqlite くらいの気軽さはありがたいのは確か。
sqlite みたいな方針のデータベースが他に台頭してないのが不思議なくらいだ。
361デフォルトの名無しさん
2023/09/21(木) 20:41:30.87ID:PYjX2iWU362デフォルトの名無しさん
2023/09/21(木) 20:59:40.19ID:WBcwDy8I もっとひどいデータベース単位か
https://www.sqlite.org/cgi/src/doc/begin-concurrent/doc/begin_concurrent.md
これでページ単位が導入されても、select for updateみたいに明示的にロック
がほしいな
リトライとかだるい
https://www.sqlite.org/cgi/src/doc/begin-concurrent/doc/begin_concurrent.md
これでページ単位が導入されても、select for updateみたいに明示的にロック
がほしいな
リトライとかだるい
363デフォルトの名無しさん
2023/09/21(木) 20:59:47.82ID:WBcwDy8I もっとひどいデータベース単位か
https://www.sqlite.org/cgi/src/doc/begin-concurrent/doc/begin_concurrent.md
これでページ単位が導入されても、select for updateみたいに明示的にロック
がほしいな
リトライとかだるい
https://www.sqlite.org/cgi/src/doc/begin-concurrent/doc/begin_concurrent.md
これでページ単位が導入されても、select for updateみたいに明示的にロック
がほしいな
リトライとかだるい
364デフォルトの名無しさん
2023/09/21(木) 23:58:45.91ID:+/xN81gC 以下のような関数(実際のものとは少し違いますが)を実装してみたのですがイテレータのメソッドチェーンの箇所で型が合っていないとコンパイルエラーが発生します
アルゴリズム自体を変更することで目的としていた処理はできましたが結局このエラーの直し方がわかりません
ライフタイム周りが原因だとは考えていますがどのように修正すればよいしょうか
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);
}
}
アルゴリズム自体を変更することで目的としていた処理はできましたが結局このエラーの直し方がわかりません
ライフタイム周りが原因だとは考えていますがどのように修正すればよいしょうか
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);
}
}
365デフォルトの名無しさん
2023/09/22(金) 09:19:17.11ID:dkRHHNCe 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);
}
}
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);
}
}
366デフォルトの名無しさん
2023/09/22(金) 12:36:56.71ID:E1X0qleO lifetimeの問題もあるかもしれないがimpl Iteratorの型をとるところに関数内で生成したイテレータを渡しているのがそもそもおかしい
367デフォルトの名無しさん
2023/09/22(金) 13:53:26.70ID:dkRHHNCe >>360
mdb
mdb
368デフォルトの名無しさん
2023/09/22(金) 16:15:11.47ID:v8mgsVW8 >>366
mapにはhogeの外から引数として関数を渡しているので再帰呼出しごとにイテレータの型は変わらないですし
```
let mut v = Vec::new();
hoge(|(&a, b)| a + b, &[1, 3, 5], &mut v);
```
という形でhogeを呼び出せばイテレータの型は自動的に推論されると思うんですが...
mapにはhogeの外から引数として関数を渡しているので再帰呼出しごとにイテレータの型は変わらないですし
```
let mut v = Vec::new();
hoge(|(&a, b)| a + b, &[1, 3, 5], &mut v);
```
という形でhogeを呼び出せばイテレータの型は自動的に推論されると思うんですが...
369デフォルトの名無しさん
2023/09/22(金) 18:07:36.44ID:KH67E8jw impl TraitはTraitを実装した型のいずれか一つを受け入れるだけで、Traitを実装した型全てを受け入れるわけではない
370デフォルトの名無しさん
2023/09/22(金) 18:31:55.39ID:v8mgsVW8 >>369
mapの中に直接クロージャを渡せば確かにその制限に引っかかりますが、今回は再帰の中で一つの関数を使いまわしているのでimpl Iteratorの型は一つに固定されませんか?
mapの中に直接クロージャを渡せば確かにその制限に引っかかりますが、今回は再帰の中で一つの関数を使いまわしているのでimpl Iteratorの型は一つに固定されませんか?
371デフォルトの名無しさん
2023/09/22(金) 18:41:57.56ID:v8mgsVW8 >>365
イテレータのまま保持して遅延評価させたいんです
イテレータのまま保持して遅延評価させたいんです
372デフォルトの名無しさん
2023/09/22(金) 18:43:25.81ID:8SLDLfd5 関数定義から一意な具体型に推論されるのは戻り値型に書いた 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
引数型に書いた 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
373デフォルトの名無しさん
2023/09/22(金) 19:29:43.87ID:v8mgsVW8 >>372
コンパイル通りました!ありがとうございます!
ただもう少しわがままを言うと、実際の実装ではメソッドチェーンの箇所がこれの2倍ぐらいの長さなので具体的なイテレータの型を書かずにコンパイラ任せにしたかったんですが、話を見る限りどうも無理そうですね...
コンパイル通りました!ありがとうございます!
ただもう少しわがままを言うと、実際の実装ではメソッドチェーンの箇所がこれの2倍ぐらいの長さなので具体的なイテレータの型を書かずにコンパイラ任せにしたかったんですが、話を見る限りどうも無理そうですね...
374デフォルトの名無しさん
2023/09/23(土) 08:15:26.34ID:piK9W+al375デフォルトの名無しさん
2023/09/23(土) 09:19:17.35ID:lKOAbDFW 可能なら dyn は避けるに越したことは無い。
dyn はトレイトオブジェクトを扱うための仕組みであって
推論を補助する仕組みではないから。
dyn はトレイトオブジェクトを扱うための仕組みであって
推論を補助する仕組みではないから。
376デフォルトの名無しさん
2023/09/23(土) 09:55:40.35ID:piK9W+al >>375
実装の隠蔽目的でdyn使うのはそんなに変な使い方ではないと思うが
実装の隠蔽目的でdyn使うのはそんなに変な使い方ではないと思うが
377デフォルトの名無しさん
2023/09/23(土) 09:59:36.45ID:i9fpyxKg Box<dyn Trait>で解決しました本当にありがとうございました
378デフォルトの名無しさん
2023/09/23(土) 16:36:06.31ID:WPP4nTE5 >>364です
補足すると今回自分がわかっていなかったのは以下のような関数がコンパイルを通らないということですね
```
fn hoge<T>(a: i64, b: &mut T) {
*b = a;
}
```
impl Traitが単にジェネリクスの糖衣構文であるということと、
トレイト境界を満たす型をジェネリクス引数に渡した場合は合法に"ならなければならない"、トレイト境界は十分条件も満たさなくてはならないという点を解っていなかったのがポイントでした...
補足すると今回自分がわかっていなかったのは以下のような関数がコンパイルを通らないということですね
```
fn hoge<T>(a: i64, b: &mut T) {
*b = a;
}
```
impl Traitが単にジェネリクスの糖衣構文であるということと、
トレイト境界を満たす型をジェネリクス引数に渡した場合は合法に"ならなければならない"、トレイト境界は十分条件も満たさなくてはならないという点を解っていなかったのがポイントでした...
379デフォルトの名無しさん
2023/09/23(土) 21:17:07.32ID:piK9W+al 戻り値のimpl Traitと引数のimpl Traitで振る舞い違うのは当たり前ではあるんだけど混乱しやすいポイントではあるかもね
380デフォルトの名無しさん
2023/09/24(日) 12:22:42.57ID:2YTVyUlC 0788デフォルトの名無しさん
2022/06/21(火) 08:59:28.38ID:vO+TReRM
俺はフロントエンドやらないからこのスレでTauriの話をしないでくれ
2022/06/21(火) 08:59:28.38ID:vO+TReRM
俺はフロントエンドやらないからこのスレでTauriの話をしないでくれ
381デフォルトの名無しさん
2023/09/24(日) 12:36:49.28ID:2YTVyUlC382デフォルトの名無しさん
2023/09/25(月) 23:08:53.71ID:OcxuhTB3 rustでdx12ってまともに使えますか?
そろそろc++は卒業したい
そろそろc++は卒業したい
383デフォルトの名無しさん
2023/09/26(火) 10:01:41.63ID:q653RLNX >>382
使えないということだな。
使えないということだな。
384デフォルトの名無しさん
2023/09/26(火) 17:46:11.75ID:WrG1pnap 一応d3d12があるけど、これを直接使うよりwgpu経由のほうがいいんじゃないか?
385デフォルトの名無しさん
2023/09/26(火) 18:52:01.41ID:liEPyEVD rustとgoとc#でjsonのシリアライズ、デシリアライズ実験したんだけど
rust 1ms cargo run --release
go 10ms
c# 40ms dotnet build -c Release
こんなに違うもんなの?
リリースモードでビルドしたつもりだけど
WebAPIのバックエンドどれにするか悩んでたけどもうrust1択でいいやん
rust 1ms cargo run --release
go 10ms
c# 40ms dotnet build -c Release
こんなに違うもんなの?
リリースモードでビルドしたつもりだけど
WebAPIのバックエンドどれにするか悩んでたけどもうrust1択でいいやん
386デフォルトの名無しさん
2023/09/26(火) 21:18:52.63ID:rDjR9GdF 最適化で計測対象の処理が丸ごと消えてないかな
どこかでデータのサイズとか集計とか出力してればいいけど
どこかでデータのサイズとか集計とか出力してればいいけど
387デフォルトの名無しさん
2023/09/26(火) 21:22:16.85ID:sfzsNV4F さすがそこまで速くないよね
C#ももっと速いような気がする
C#ももっと速いような気がする
388デフォルトの名無しさん
2023/09/26(火) 21:40:15.73ID:aJs6t/KK コードの問題かベンチマークの問題だね
389デフォルトの名無しさん
2023/09/26(火) 21:41:15.28ID:K0prie5d390デフォルトの名無しさん
2023/09/26(火) 21:41:38.03ID:aJs6t/KK391デフォルトの名無しさん
2023/09/26(火) 21:56:19.26ID:liEPyEVD392デフォルトの名無しさん
2023/09/26(火) 21:59:59.97ID:liEPyEVD つか、goってリリースビルドないやろ?
コンパイルも一瞬でへ?ってなるわ
それぞれ30行未満のコードだけど..
コンパイルも一瞬でへ?ってなるわ
それぞれ30行未満のコードだけど..
393デフォルトの名無しさん
2023/09/26(火) 22:29:35.41ID:liEPyEVD https://controlc.com/77570dbc
goだとこんな感じ
goだとこんな感じ
394デフォルトの名無しさん
2023/09/26(火) 22:43:29.67ID:liEPyEVD ああ、ごめんC#は嘘でしたすみません
3msになりました
3msになりました
395デフォルトの名無しさん
2023/09/26(火) 22:55:30.68ID:liEPyEVD Rustは最強で
C#はメモリ使用量多いがMSが最適化ガンバッテル
Goはメモリ使用量少なくて言語仕様がシンプルだがC#に負けたり...
C#はメモリ使用量多いがMSが最適化ガンバッテル
Goはメモリ使用量少なくて言語仕様がシンプルだがC#に負けたり...
396デフォルトの名無しさん
2023/09/26(火) 23:05:14.16ID:EQtG/kil 意味のないベンチマークだね
ちなみにこういうのはNimが速いと思うよ
結局こういうのってコンパイラの最適化の勝負をしているだけだから
Rustが速いというよりはLLVMが速いだけ
Zigとかでも同じスピードが出るはず
その代わりにコンパイル速度が遅いというデメリットがあるからこれは単なるトレードオフで、用途に応じて適した言語を選択するのが重要ってだけだね
WebAPI作るならIOが結局ボトルネックになるからパフォーマンス気にするにしても別にスクリプト言語じゃないならなんでもいいのよね
好きな言語にすればいいと思う
ちなみにこういうのはNimが速いと思うよ
結局こういうのってコンパイラの最適化の勝負をしているだけだから
Rustが速いというよりはLLVMが速いだけ
Zigとかでも同じスピードが出るはず
その代わりにコンパイル速度が遅いというデメリットがあるからこれは単なるトレードオフで、用途に応じて適した言語を選択するのが重要ってだけだね
WebAPI作るならIOが結局ボトルネックになるからパフォーマンス気にするにしても別にスクリプト言語じゃないならなんでもいいのよね
好きな言語にすればいいと思う
397デフォルトの名無しさん
2023/09/26(火) 23:08:16.82ID:kLEETtIu それはともかく
NimはRustに対して意味のあるアドバンテージ皆無でNimだけは要らん
NimはRustに対して意味のあるアドバンテージ皆無でNimだけは要らん
398デフォルトの名無しさん
2023/09/26(火) 23:14:09.15ID:liEPyEVD まぁ、データベースはおもいっきし叩くね
最初は最強言語じゃなくてわかりやすい2番あたりの言語でいこうと思ってるんだけたんだけど
で、1番ははっきりRustっぽいからわかりやすいからいんだけど、
2番(C#,Go?)がはっきりしないから1番の言語でいいのかなと
最大の目的はサーバー費用を押さえられるように
最初は最強言語じゃなくてわかりやすい2番あたりの言語でいこうと思ってるんだけたんだけど
で、1番ははっきりRustっぽいからわかりやすいからいんだけど、
2番(C#,Go?)がはっきりしないから1番の言語でいいのかなと
最大の目的はサーバー費用を押さえられるように
399デフォルトの名無しさん
2023/09/26(火) 23:14:24.83ID:gNMcg380 Nimはオフサイドルールってだけで試す気にもならないんだよな…
400デフォルトの名無しさん
2023/09/26(火) 23:52:14.82ID:lFc5NXyg >>396
多数の非同期タスクを偏らずスレッド間でスチールしてスケジューリングできるのは現状GoとRustしかない
小規模ならGoでもよいがそれ以上だと言語機能が貧弱なGoは辛くなってきてRustの独壇場
多数の非同期タスクを偏らずスレッド間でスチールしてスケジューリングできるのは現状GoとRustしかない
小規模ならGoでもよいがそれ以上だと言語機能が貧弱なGoは辛くなってきてRustの独壇場
401デフォルトの名無しさん
2023/09/27(水) 00:09:38.71ID:8IPpP98U402デフォルトの名無しさん
2023/09/27(水) 00:11:19.90ID:8IPpP98U この妄想も延々言ってたけどやっと黙るのかな?
470: デフォルトの名無しさん sage 2023/09/26(火) 09:57:28.51 ID:ycG3j/g+
>>469
IaaSの一部にそういうケースがありうるだけだぞ
PaaS (FaaS)は基本的にメモリ使用量✕実行時間で料金が決まる
メモリ使用量は少なければ少ないほどコストに優れている
470: デフォルトの名無しさん sage 2023/09/26(火) 09:57:28.51 ID:ycG3j/g+
>>469
IaaSの一部にそういうケースがありうるだけだぞ
PaaS (FaaS)は基本的にメモリ使用量✕実行時間で料金が決まる
メモリ使用量は少なければ少ないほどコストに優れている
403デフォルトの名無しさん
2023/09/27(水) 00:29:08.13ID:MfhnDtnO 複オジは相変わらず嘘ばっかり
成長しないね
成長しないね
404デフォルトの名無しさん
2023/09/27(水) 00:38:28.22ID:+nRBKi9H 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]
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]
405デフォルトの名無しさん
2023/09/27(水) 00:56:55.88ID:+nRBKi9H 俺の環境だと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]
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]
406デフォルトの名無しさん
2023/09/27(水) 01:02:33.77ID:+nRBKi9H これにしたらRustより早くなったわ
結局これっていかに最適化しているかってだけだと思う
https://github.com/bytedance/sonic
[Go sonic json]
914 [μs]
263609000 [bytes] 209 [μs]
結局これっていかに最適化しているかってだけだと思う
https://github.com/bytedance/sonic
[Go sonic json]
914 [μs]
263609000 [bytes] 209 [μs]
407デフォルトの名無しさん
2023/09/27(水) 01:06:34.20ID:8IPpP98U 気づくのが遅い
408デフォルトの名無しさん
2023/09/27(水) 01:44:16.58ID:jtGLjNq+409デフォルトの名無しさん
2023/09/27(水) 01:51:26.25ID:jtGLjNq+ WebAPIでgoで行く決意ができました
本当にお騒がせしました
本当にお騒がせしました
410デフォルトの名無しさん
2023/09/27(水) 04:55:49.67ID:UdUnwuun YouTube で有名な雑食系エンジニア・KENTA が、既に言ってる。
キャリアパスは、Ruby on Rails → Go のみ
Ruby/Goの神・HashiCorp のMitchell Hashimoto がそう。
Ruby製のVagrant → Go製のTerraform。
今は、Goプログラマーしか求めていない
Rust/Elixir は普及のキャズムを超えなかった。
超えたのは、Goだけ
キャリアパスは、Ruby on Rails → Go のみ
Ruby/Goの神・HashiCorp のMitchell Hashimoto がそう。
Ruby製のVagrant → Go製のTerraform。
今は、Goプログラマーしか求めていない
Rust/Elixir は普及のキャズムを超えなかった。
超えたのは、Goだけ
411デフォルトの名無しさん
2023/09/27(水) 17:50:20.18ID:wGZOY1wb まあビルド時間の重要性はちょこちょこ一人で作ってるやつは理解できんわな。
412デフォルトの名無しさん
2023/09/27(水) 18:56:48.41ID:CCaLLXi3 仕事なら相応に強力なマシンかレンダリングサーバがあるだろ
413デフォルトの名無しさん
2023/09/27(水) 21:44:37.94ID:fWGZRw8C レンダリングサーバーは関係なさすぎ
414デフォルトの名無しさん
2023/09/27(水) 22:03:34.78ID:vmit0gpI ビルドサーバーと間違えたのかもね
415デフォルトの名無しさん
2023/09/28(木) 18:29:13.32ID:gS/5M63X MARCHを受けるために東大の過去問を練習するような意識高い系バカ
416デフォルトの名無しさん
2023/10/06(金) 11:57:36.28ID:Zl0hPCVy 一体誰がRustを推しているのか?
中國?
中國?
417デフォルトの名無しさん
2023/10/06(金) 13:12:35.08ID:2p+njRVB 関数型と手続き型のいいとこ取りしたいプログラマだろ
情報科学の先進国なら中国に限らず一定数いるはず
情報科学の先進国なら中国に限らず一定数いるはず
418デフォルトの名無しさん
2023/10/06(金) 16:38:53.65ID:AJI+rgso ネットインフラが次々と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」などがある。
>【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」などがある。
419デフォルトの名無しさん
2023/10/06(金) 20:34:57.35ID:hdhWn3/E 関数型の良いとことるの諦めた言語って感じだけどw
初期の頃はocamlでコンパイラ作られてたらしいのに
MLの匂いさえ残ってない単なる手続き化型言語だわ
初期の頃はocamlでコンパイラ作られてたらしいのに
MLの匂いさえ残ってない単なる手続き化型言語だわ
420デフォルトの名無しさん
2023/10/06(金) 20:35:16.84ID:hdhWn3/E 関数型の良いとことるの諦めた言語って感じだけどw
初期の頃はocamlでコンパイラ作られてたらしいのに
MLの匂いさえ残ってない単なる手続き化型言語だわ
初期の頃はocamlでコンパイラ作られてたらしいのに
MLの匂いさえ残ってない単なる手続き化型言語だわ
421デフォルトの名無しさん
2023/10/06(金) 21:14:33.58ID:b1wSOXuc スタックフレームに着目したのはプラスだけど、下手にスタックフレームを隠そうとしているのはマイナス。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
422デフォルトの名無しさん
2023/10/06(金) 21:15:11.56ID:b1wSOXuc スタックフレームに着目したのはプラスだけど、下手にスタックフレームを隠そうとしているのはマイナス。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
計算モデルをスタックフレームにするぐらい割り切れば良かったのに。
423デフォルトの名無しさん
2023/10/06(金) 23:16:24.42ID:tE7CLicd mut 入れたのが間違いなんだろ
424デフォルトの名無しさん
2023/10/06(金) 23:30:10.29ID:hdhWn3/E 関数型に関しては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)
たとえば↑こういうのとか
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)
たとえば↑こういうのとか
425デフォルトの名無しさん
2023/10/07(土) 00:34:46.36ID:Hyqci1qG 関数型というよりはリスト型言語だな
426デフォルトの名無しさん
2023/10/07(土) 01:56:24.14ID:a3LzK6ia システムプログラミングのための言語なので純粋に関数型な要素だけを求めるなら別の言語を当たった方が良い
427デフォルトの名無しさん
2023/10/07(土) 02:12:44.80ID:QajUcOD9 リスト型つまりLinkedListをメインにすると利便さと引き換えに遅い問題とガベージが出まくる問題がある
Rustはリスト型メインにしなくて正解
Rustはリスト型メインにしなくて正解
428デフォルトの名無しさん
2023/10/07(土) 04:42:48.81ID:+bTugVnw GCを前提にしない仕様の上に積み上げなくてはならないという側面から見ると、わりかしよくやっている方なんじゃなかろうか……知らんけど
429デフォルトの名無しさん
2023/10/07(土) 06:29:51.58ID:GJ9LXcgc 自称情強底辺者「Rustでhello worldかける俺カコイイ」
真の成功者「スイカゲームでボロ儲けしました」
真の成功者「スイカゲームでボロ儲けしました」
430デフォルトの名無しさん
2023/10/07(土) 06:46:44.80ID:bWLG2vp7 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));
}
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));
}
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否 [夜のけいちゃん★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★5 [ぐれ★]
- 映画「鬼滅の刃」の興行収入急減、日本行き航空券大量キャンセル…中国メディア報道 [蚤の市★]
- 【音楽】Perfume・あ~ちゃんの結婚相手「一般男性」は吉田カバンの社長・吉田幸裕氏(41) 高身長で山本耕史似 [Ailuropoda melanoleuca★]
- 「タワマン天国」に飛びつく若者…SNSに転がる「成功体験」に続けるのか 湾岸エリアの業者が語った現実 [蚤の市★]
- フランス「G7に習近平主席を呼びたい」ドイツ「良い考えだ」 高市さん...? [237216734]
- 麻生太郎氏、高市政権と距離を置きはじめる(´・ω・`) [399259198]
- 自閉症が「んなっしょい」と連呼するお🏡
- 【悲報】中国営業に熱心な日本人タレントたち、中国のイベントが続々と中止に… まだ予定中のアイドルとか歌手とかたくさんいるけど [452836546]
- 【悲報】高市効果で「1ドル=160円」が相場へwwwwwwwwwwwwwwwwwwwwwwwwwwwww 止まらぬ高市円安💥💥 [871926377]
- 生活保護ぼく、お金がない😨
