公式
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:xzxy4cgp318デフォルトの名無しさん
2023/09/19(火) 22:44:03.77ID:5k6OZf8O >>310
>楽観的排他制御を用いることができる現実的ケースが狭い
MVCCやCASが楽観的制御
分散非同期が前提の世界では楽観的制御がデフォルト
じゃないとスケールしないから
Rustがコンパイル時悲観的制御にしてるのは実行時の管理を無くしたいからであってポインタだとshared xor mutableが必須だからではない
トランザクショナルメモリがその一例
>楽観的排他制御を用いることができる現実的ケースが狭い
MVCCやCASが楽観的制御
分散非同期が前提の世界では楽観的制御がデフォルト
じゃないとスケールしないから
Rustがコンパイル時悲観的制御にしてるのは実行時の管理を無くしたいからであってポインタだとshared xor mutableが必須だからではない
トランザクショナルメモリがその一例
319デフォルトの名無しさん
2023/09/19(火) 22:57:59.75ID:cyrWzrEE DBMSをプログラムする場合には当然関係ある
でも1行ずれたら大変とかいう下手くそは任されないので関係ない
でも1行ずれたら大変とかいう下手くそは任されないので関係ない
320デフォルトの名無しさん
2023/09/19(火) 23:03:17.25ID:BGD+Lo74321デフォルトの名無しさん
2023/09/19(火) 23:06:22.84ID:r+harKS8 可変参照と不変参照に対してMVCCなんて使えないよ
それはデータをコピーすることと同じになってしまう
ソフトウェアトランザクショナルメモリはどの環境でも使用可能なのに不利だからほぼ使われていない
さらにRustのshared xor mutableはそれらと独立した話であり共存できる話なのでshared xor mutable必須は問題ない
それはデータをコピーすることと同じになってしまう
ソフトウェアトランザクショナルメモリはどの環境でも使用可能なのに不利だからほぼ使われていない
さらにRustのshared xor mutableはそれらと独立した話であり共存できる話なのでshared xor mutable必須は問題ない
322デフォルトの名無しさん
2023/09/20(水) 01:44:31.66ID:16Zt41/R 会話のドッジボール
323デフォルトの名無しさん
2023/09/20(水) 09:31:56.94ID:R98wQa7Y >>303
マイニャンバーですね判ります
マイニャンバーですね判ります
324デフォルトの名無しさん
2023/09/20(水) 09:33:37.66ID:R98wQa7Y325デフォルトの名無しさん
2023/09/20(水) 09:37:31.04ID:R98wQa7Y >>313
いやいやωωω
いやいやωωω
326デフォルトの名無しさん
2023/09/20(水) 09:39:49.95ID:erhjcmms327デフォルトの名無しさん
2023/09/20(水) 09:41:04.74ID:erhjcmms328デフォルトの名無しさん
2023/09/20(水) 10:30:52.85ID:jgkdiTgC SQLiteはファイルロックに頼らざるを得ない仕組みなのでDBとしては特殊
329デフォルトの名無しさん
2023/09/20(水) 11:17:52.24ID:InZb605T 俺が高校生だった25年前頃、志木駅で500円分ぐらいのパンを買ったら4000円ぐらい請求されたぞ
330デフォルトの名無しさん
2023/09/20(水) 11:46:41.00ID:UfpBE+4Y まあ他のバグが減ればその分本質的な問題に注力出来るわな
そういうのはテストケースも綿密に行う必要がある
そういうのはテストケースも綿密に行う必要がある
331デフォルトの名無しさん
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 関数型と手続き型のいいとこ取りしたいプログラマだろ
情報科学の先進国なら中国に限らず一定数いるはず
情報科学の先進国なら中国に限らず一定数いるはず
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【中国外務省】日中関係悪化は高市氏に責任と名指しで非難… [BFU★]
- 外務省局長は無言で厳しい表情…日中の高官協議終了か 高市首相“台湾”発言で中国が強硬対応 発言撤回求めたか…★2 [BFU★]
- 政府、株式の配当など金融所得を高齢者の医療保険料や窓口負担に反映する方針を固めた [バイト歴50年★]
- 【維新】吉村知事「中国人観光客だけに頼るビジネスモデル変えていかないといけない」「高市総理の発言は撤回する必要はない」 [Hitzeschleier★]
- 「すごいアイドル出てきた」「かわいすぎる」ラヴィット初登場の美女に視聴者驚き ≠ME櫻井もも [ヴァイヴァー★]
- バービー、 台湾有事の発言の波紋で「たまったもんじゃない」「高市さんに真意は聞きたい」「国民に向けて説明してほしい」 [muffin★]
- 中国高官と話す外務省局長の表情、やばい [175344491]
- 日本政府「高市総理の発言は問題ないと伝え、中国総領事のSNS投稿は問題があると中国に伝えました😊」 [931948549]
- 【高市速報】小野田キミ「中国依存はリスク」断交を示唆か [931948549]
- 【んな専🏡】なんG 姫森ルーナ(・o・🍬)総合スレ🏰【ホロライブ▶】
- 【悲報】高市早苗周辺「支持層が離れるので今更発言を撤回できない」 [935793931]
- 高市早苗、岸田政権(当時)に「台湾有事は日本の有事か」という質問をしていた [175344491]
