Rust part21

レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
垢版 |
2023/08/15(火) 22:24:39.45ID:xzxy4cgp
公式
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/
423デフォルトの名無しさん
垢版 |
2023/10/06(金) 23:16:24.42ID:tE7CLicd
mut 入れたのが間違いなんだろ
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)

たとえば↑こういうのとか
2023/10/07(土) 00:34:46.36ID:Hyqci1qG
関数型というよりはリスト型言語だな
2023/10/07(土) 01:56:24.14ID:a3LzK6ia
システムプログラミングのための言語なので純粋に関数型な要素だけを求めるなら別の言語を当たった方が良い
2023/10/07(土) 02:12:44.80ID:QajUcOD9
リスト型つまりLinkedListをメインにすると利便さと引き換えに遅い問題とガベージが出まくる問題がある
Rustはリスト型メインにしなくて正解
2023/10/07(土) 04:42:48.81ID:+bTugVnw
GCを前提にしない仕様の上に積み上げなくてはならないという側面から見ると、わりかしよくやっている方なんじゃなかろうか……知らんけど
2023/10/07(土) 06:29:51.58ID:GJ9LXcgc
自称情強底辺者「Rustでhello worldかける俺カコイイ」

真の成功者「スイカゲームでボロ儲けしました」
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));
}
431デフォルトの名無しさん
垢版 |
2023/10/07(土) 09:44:47.17ID:WqNjBTZw
まあ今時ランタイム速度でそこまで差がつくことはないわな。
ガベコレの実行タイミングが問題になることは結構あると思うけど。
2023/10/07(土) 11:17:12.27ID:fuWtUzBR
アロケートしまくリングやな
2023/10/07(土) 12:06:59.60ID:pov02R//
ランタイムサポートが極まってきたからこそ
極めきれない部分の差が目立ってきたんだよ。
2023/10/07(土) 14:19:35.27ID:koj+veBs
XYZ座標みたいな単純だけどプリミティブでない大量のデータの配列を作りたいときに
1つ1つをオブジェクトにしないといけないGC言語は放り投げたくなる
座標なら最悪プリミティブに分解して自分で並べれば済むけど型が混ざると詰む
2023/10/07(土) 15:18:57.75ID:AO4ZOvxF
>>424
>>430
なるほど

美しいコードはスッキリうんこみたいに気持ち良い
まるで脳が洗われるようだ
普段いかに毒に浸かってるかが判るな
2023/10/07(土) 15:43:47.56ID:Ozx346pn
Rustのはmutなしにした場合の問題提起のための悪い例だろ
2023/10/07(土) 15:51:39.94ID:O3XDw4H3
>>434
Rustでも1つ1つオブジェクトにする
何の問題もないどころかむしろ好ましいやり方
2023/10/07(土) 16:42:12.14ID:2ow1Jojj
ocamlだとこんな感じかな?
let rec qsort = function
| [] -> []
| pivot :: tail ->
let smaller, rest = List.partition ((>) pivot) tail in
qsort smaller @ pivot :: qsort rest

>>424 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)

scalaすごい頑張ってると思うわ
2023/10/07(土) 23:59:36.96ID:QajUcOD9
>>430
RustはそのようにOCamlやScalaと同等に書くことも容易な点がいいな
同時にその方法によりRustで記述すると大量にVec(またはリストを実現する何か)を使い捨てていることが見える
つまりGC言語ではガベージが大量に出る
2023/10/08(日) 02:42:17.66ID:9NUoKPD/
くすくす
2023/10/08(日) 08:07:41.64ID:WAd1DVRF
同等に書けてないでしょw
2023/10/08(日) 09:57:45.64ID:ShBUnVvx
同等というより>>438>>430は全く同じだな
空でなければpartitionでsmallerとrestに分けて
それぞれを再帰でqsortしてconcatenate
443デフォルトの名無しさん
垢版 |
2023/10/08(日) 10:16:57.79ID:CrdCteTP
次はHaskellまたはErlangでおながいしまつ
2023/10/08(日) 10:38:24.03ID:lCt9aeoq
in-placeなqsort書いてよ
2023/10/08(日) 10:39:23.48ID:WAd1DVRF
>>443
Haskell
qsort [] = []
qsort (x:xs) = qsort [y | y <- xs, y < x] ++ [x] ++ qsort [y | y <- xs, y >= x]

Erlang
qsort([]) -> [];
qsort([X|Xs]) ->
qsort([ Y || Y <- Xs, Y < X]) ++ [X] ++ qsort([ Y || Y <- Xs, Y >= X]).
2023/10/08(日) 12:06:58.68ID:3KZ70qk+
複オジは常にヒープアロケートするGC言語しか知らないのかな?
特定の言語の機能不足をGC言語の制約のように語るのはやめような
2023/10/08(日) 14:27:21.60ID:1klr8jB1
rustより高度なライフタイム管理する言語ってないの?
2023/10/08(日) 14:53:30.59ID:33/5YUgE
高度なライフタイム管理のベクトルがわからん
全データに参照カウンタをもたせて参照→存在を保証してるGC言語ならたくさんあるし
処理過程を生成する(書かせない)ことでライフタイムを意識させない関数型言語もある
2023/10/08(日) 14:57:14.95ID:lcllyLaE
>>442
ScalaのListもOCamlの[]も単方向リストであってべクタではないのに唯一気付いていないおじさん
2023/10/08(日) 15:04:22.44ID:KeQMELAC
それはそれとしてScalaのcase classはRustにも欲しいと思うことあり
2023/10/08(日) 15:32:16.97ID:1klr8jB1
>>448
rustを置き換え可能な言語で
つまりゼロコスト抽象
大学の研究レベルのものとかでないのかな
2023/10/08(日) 16:37:56.79ID:lCt9aeoq
ランタイムコストなしのライフタイムチェックはシステムプログラミング言語だから必要な話で、そうでない言語ならGCで良い

shared xor mutableの静的な保証はGC言語でも嬉しい性質だと思うが、他の言語で採用例はあるのかね?
2023/10/08(日) 18:19:11.05ID:WAd1DVRF
enumのリストで書いてみたわ
rust不慣れだから所々おかしいかも
https://ideone.com/0Ro48L
enum List<T> {
Cons(T, Box<List<T>>),
Nil,
}
impl<T: Copy + PartialOrd> List<T> {
// 略
fn qsort(&self) -> Self {
match self {
List::Nil => List::Nil,
List::Cons(pivot, tail) => {
let (smaller, rest) = tail.partition(|x| *x < *pivot);
smaller.qsort().concat(&rest.qsort().prepend(*pivot))
}
}
}
}
fn main() {
let list = List::<i32>::nil().prepend(4).prepend(8).prepend(8).prepend(3).rev();
list.each(|n| print!("{}", n));println!("");
list.qsort().each(|n| print!("{}", n));println!("");
}
2023/10/08(日) 19:36:48.46ID:e3limdE9
>>449
目的はソートなので、
単方向リストを用いるかベクタを用いるかは実装方法の問題だから些細な話かな。
実用上もベクタで十分だから単方向リストの出番は滅多にないよね。
2023/10/08(日) 20:05:18.10ID:lCt9aeoq
で、みなさんは単方向リストを使う綺麗だけどクソ遅いコードを並べて何がしたいんですか?
2023/10/08(日) 20:14:55.63ID:BgGDjECm
そんなの用途次第だろ
ど素人かよ
2023/10/08(日) 20:19:50.77ID:QzGY7mJQ
>>454
>>439がガベージがどうこう言ってるのについてはどう思う?
2023/10/08(日) 20:59:00.53ID:e3limdE9
>>457
リストはガベージと裏表一体ですが何を問題にしていますか?
リスト化する時にconsセルの割り当てが発生します。
そしてリストから取り出す時に空のconsセルがガベージとして発生します。
2023/10/08(日) 22:12:35.86ID:nH9KI4I/
赤っ恥オジの言い訳草
2023/10/08(日) 22:57:55.16ID:1kYUOs3M
入れもの(メモリ)はどのデータ構造でも不可欠だからいずれもゴミが発生するのは仕方ない
ただしリスト(各セル|ノード)に比べてベクタは以下の点で有利
・まとめて確保解放ができる
・next pointer(の容量と処理)が不要
・リニアスキャンが速い
・ランダムインデックスアクセスも速い
そのためRustでもほとんどの用途でベクタが使われリストは少ない
2023/10/08(日) 23:00:08.12ID:Li9tDqQF
今どきはCPUキャッシュが効くかどうかが問題だから
2023/10/08(日) 23:38:45.90ID:F0i6/5MC
三連休使ってrustの勉強してるけど、ようやく慣れてきた
某openGLの本をMacでやっててDSL2のインストールに四苦八苦、、、
なんかこいつだけCargo.tomlの書き方が、、、
急ぎ足せずrustのとこにある蟹表示するやつ写経してクレートの追加覚えた
先は長いね、、、
頑張る
463453
垢版 |
2023/10/09(月) 01:16:03.20ID:VBg3Yonc
>>444
>>455
https://ideone.com/Q0LqWM
これでクイックソートになってるはず?
なってなくても笑って許してほしい
2023/10/09(月) 01:21:45.86ID:L6ciWwId
>>456
ソート済み配列のソートの計算量が最悪になるqsort実装の活用方法わかんないです
どういうときに有効なんですか?
標準ライブラリのソートアルゴリズム使った方が良いのでは
2023/10/09(月) 01:24:15.18ID:TA+AoWAa
リストと配列比較してるやつ全員馬鹿です
466デフォルトの名無しさん
垢版 |
2023/10/09(月) 13:24:27.74ID:gMk1hFfQ
そんな香具師いたか?
2023/10/09(月) 18:01:30.12ID:416rm9Ab
appendできないListってダサい
2023/10/09(月) 18:16:49.87ID:TA+AoWAa
おるやん!
2023/10/11(水) 15:06:20.59ID:UxaO0GW9
Rust検索したらゲームの方が出てきてお前じゃないってなって情報収集が捗らない
2023/10/11(水) 15:25:39.99ID:kTxLNWR8
それで困ったこと今まで一度もないんだがどういう検索でそうなるの?
普段からゲーム関係の検索したりサイト閲覧してたりする?
2023/10/11(水) 16:05:36.62ID:jfZ9hs4j
ゲームの方もやってますね
Rust初心者が簡単なゲーム作ろうとしてまして
(Pythonのpygameでブロック崩し作れる程度)
検索方法がまずいのかもしれませんね
描画したり、画像をはったり、それを縦横動かしたいだけなのですが
icedか?eguiか?みたいなとこまで来てるけど、まだ使い方がよくわからんですね
どこの関数が初期設定の一発実行で、どこの関数が60fpsの毎回実行なのかとか
プロではなく趣味なので言葉選びが毎回曖昧です
2023/10/11(水) 17:42:19.71ID:Pu4uPjjn
なるほどそういう感じなのか

検索ワードに”game”とかも含んでるなら
月並みだけどprogrammingを足してみたりゲームの方にだけ特徴的なワード(surviveやsurvivalとか)を除外してみたりするといいんじゃないかな
2023/10/11(水) 20:52:08.31ID:OZznE1k0
>>471
https://arewegameyet.rs/resources/tutorials/
とりあえずこの辺のチュートリアルから選んでやってみては?
2023/10/11(水) 23:18:11.74ID:vJm7EO/F
>>441
>>430がVec使用だから同等でないという話ならばRustにもリンクリストがあるよ
リンクリストに特化したパターンマッチング構文や結合構文はないけれど
例えばTをCopyせずそのまま使うならば

use std::collections::LinkedList;

fn qsort<T: PartialOrd>(mut list: LinkedList<T>) -> LinkedList<T> {
 if let Some(pivot) = list.pop_front() {
  let (smaller, rest): (LinkedList<T>, LinkedList<T>) =
   list.into_iter().partition(|x| x < &pivot);
  // concat
  list = qsort(smaller);
  list.extend([pivot]);
  list.extend(qsort(rest));
 }
 list
}

fn main() {
 let list = LinkedList::from([9, 0, 7, 3, 6, 1, 2, 4, 8, 5]);
 println!("{:?}", list);
 println!("{:?}", qsort(list));
}
2023/10/11(水) 23:57:55.35ID:2xINBvCy
はあ
馬鹿なんですね
476デフォルトの名無しさん
垢版 |
2023/10/12(木) 11:14:39.52ID:u59ybXeV
たしかに Rust ゲーム 造り方 で検索するとゲームの方ばっかり出る罠
2023/10/12(木) 11:17:21.26ID:u59ybXeV
>>474
mut 使ったら負け
2023/10/12(木) 12:51:53.05ID:5Y8Kw2UP
>>477
そんな表層的なことを問題にするのは愚か

例えばmutを表層的に使っていない>>430はそこで呼び出しているpartitionとconcatそれぞれのなかでmutを使っている
当たり前だがデータを組み立てたり書き換える処理は全てmutにたどりつく

>>474でも表層的にmutを無くしたいだけならば同様にconcat関数を作りその中でmutを使えばいい
2023/10/12(木) 12:52:32.93ID:5Y8Kw2UP
>>477
そんな表層的なことを問題にするのは愚か

例えばmutを表層的に使っていない>>430はそこで呼び出しているpartitionとconcatそれぞれのなかでmutを使っている
当たり前だがデータを組み立てたり書き換える処理は全てmutにたどりつく

>>474でも表層的にmutを無くしたいだけならば同様にconcat関数を作りその中でmutを使えばいい
2023/10/12(木) 13:19:12.59ID:SguY35qe
mut使ったら負けとは俺は思わないが断じて表層的なことではない
本質的に重要な違いだからこそRustでは明確に区別してるわけなので
それにconcatもpartitionもmut使ってない
2023/10/12(木) 13:31:42.25ID:IQy1JHL6
単方向リストと両方向リストの区別もついていない馬鹿だからしょうがないね
2023/10/12(木) 14:04:37.89ID:29Fh0rnH
標準ライブラリのソース見たら
concatもpartitionもmut使ってるな
最終的にあらゆるmutになるのか
2023/10/12(木) 14:35:37.70ID:+nxBPiMF
すべてがmutになる 森鴎外
2023/10/12(木) 14:56:18.33ID:oQimRC1z
「ボクの考えた最強の汚コードを批判するな!」
2023/10/12(木) 14:58:53.27ID:X9LcShxS
>>482
ネタじゃなくマジで言ってるならRustは辞めとけ
絶望的に向いてない
2023/10/12(木) 15:06:20.95ID:pri3rXDa
複オジが劣化したのだろうか
それとも複オジ劣化版が新たに出現したのだろうか
2023/10/12(木) 15:24:09.95ID:VkfPx0C5
mutを使わずにできることは読み出しとムーブとコピーだけ
488453
垢版 |
2023/10/12(木) 19:51:44.10ID:viHBcoi7
今度はDartで書いてみた
3.0でパターンマッチがちょっと強化されたらしい?
3.0新登場のスイッチ式の=>の右側には式だけしか書けない?
dartにはそもそもpartitionはない?
というわけで>>445のHaskell方式で書いてみた(程遠いけど)

List qsort(List list) {
return switch (list) {
[] => [],
[var pivot, ...var rest] => qsort(rest.where((x) => x < pivot).toList()) + [pivot] + qsort(rest.where((x) => pivot <= x).toList())
};
}
489453
垢版 |
2023/10/12(木) 23:01:31.11ID:viHBcoi7
こういう書き方もできた
こっちのほうが雰囲気出てるかな?

List qsort(List list) {
return switch (list) {
[] => [],
[var x, ...var xs] => qsort([for (var y in xs) if (y < x) y]) + [x] + qsort([for (var y in xs) if (x <= y) y])
};
}
2023/10/13(金) 08:06:18.09ID:q0Ayf65Z
>>482
RustはCと同じ高速で動作する手続き型言語だから少なくとも最下層はmutが基本になる
たとえばイテレータからVecへcollectする場合
特殊ケースはunsafe最適化
一般ケースはlet mut vec = Vec::new();してextend

その一方でプログラミングする時はその最下層を意識しなくても知らなくてもいい
mutを必要としないiter.collect()と抽象的に書ける
2023/10/13(金) 08:24:52.90ID:NdZOKZ+T
最強Rust始めたわい
mutの話が出てるから質問
シャドーイングっていう性質使えばmutなくても書けそうな気がしてる(まだ書けてない)んだけど
シャドーイングしたときと、mutではメモリの動き何か変わるのかな?と

シャドーイング
let z = x + y;
その後z使って処理
let z = x - y; // z宣言して前回のz上書き
その後z使って処理
492デフォルトの名無しさん
垢版 |
2023/10/13(金) 12:19:34.60ID:tPfYbY0d
>>491
それを1億行書いたとする。たぶんスタック溢れるんじゃね?
2023/10/13(金) 12:43:08.68ID:zQ1dnjfM
1億行書く意味が分からんが
そんな問題ではないだろw
2023/10/13(金) 18:31:34.80ID:Q91zX7Uf
ドロップしないの?
2023/10/13(金) 19:31:02.96ID:/Zwm785x
ちょっと前にJSONシリアライズでの最適化の話出たけど
goは空気感が不安になるよな

rust->システムプログラミングよりの言語で、速度やらいろいろうるさそうなやつが
集まってて、そんなやつらの作るライブラリだからパフォーマンスとか心配しなくてよさそう

C#->.NET開発チームが毎年長文ブログでがんばってるアピール

go->言語機能とかほぼ完成しちゃってるんだろうが
アピールもない、この空気感
2023/10/13(金) 19:35:26.71ID:/Zwm785x
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/
今年の.netのパフォーマンス改善はこれ

goはシンプル言語で標準ライブラリも最小限だから
もうあまりやることないのか?
2023/10/14(土) 14:19:51.05ID:MfcWhKX5
>>491
不使用領域は再利用されるから単純な順次処理ならシャドーイングで十分

mutが欲しくなる理由の1つは繰り返し処理だな(長さ不定のリストの集計とか)
関数型言語みたいに再帰使えばmutなしでも何とかなるけど慣れないとややこしい

あとは全部作り直すのが不合理なデータの部分的な書き換えでもmut使いたい
2023/10/14(土) 19:31:37.47ID:FeWBHDoO
for文で値を変えるカウンタとかフラグとかもmutじゃないと書けないな。
まぁ for 文より iter で書けという一派も多いかもしれんけど。
2023/10/14(土) 19:57:12.00ID:jlnlui4T
モジュールの内部では (性能上の理由で) mut を使っても、
外側に見せるインターフェイスは
(不自然ではない範囲で) mut を避けるのは自然な方針だと思う。
2023/10/15(日) 09:39:38.68ID:M8zy/AR3
Cで書いたプログラムを Rustで書いたらこうなります
っていうのをひたすら集めた本がほしい
2023/10/15(日) 10:09:58.67ID:Xnkvwbkm
全銀システムでJavaの信頼が失墜した今こそrustのチャンスだな
2023/10/15(日) 11:00:17.07ID:2BZrn9hr
全銀はまだCOBOLだろ
ほんといつもいつも嘘ばっかりだな
503デフォルトの名無しさん
垢版 |
2023/10/16(月) 10:19:13.28ID:kgcCjrnK
>>500
似たような動機で描かれた本とかブログは観たことあるけど
Rustっぽくないコードばっかりでうんざりする面もある
504デフォルトの名無しさん
垢版 |
2023/10/16(月) 10:21:08.50ID:kgcCjrnK
全銀協のフォーマットって今も変わってないんだろうけど
半角カタカナだらけでRustで扱うのは大変かも知れないね
2023/10/16(月) 10:35:49.58ID:enUIFRpv
扱う文字については適当なライブラリを整備すればそんなに問題にならなさそうに思うが
506デフォルトの名無しさん
垢版 |
2023/10/16(月) 11:26:02.88ID:SeIR9j3q
>>505
>扱う文字については適当なライブラリを整備すれば

外字ばかりとかでそれが大変なんじゃないの?知らんけど
507デフォルトの名無しさん
垢版 |
2023/10/16(月) 12:22:46.59ID:SkmcjqYw
半角しかないのに外字とは
508デフォルトの名無しさん
垢版 |
2023/10/16(月) 13:30:20.84ID:kgcCjrnK
今のうちに Rust でハンカクカタカナ自由自在な crate 造っておけば
将来ライセンス料でシッポリ儲かりますか?
509デフォルトの名無しさん
垢版 |
2023/10/17(火) 11:40:48.89ID:xDsy3kB7
Rustに慣れるとCのifで()付け忘れたわ
2023/10/19(木) 14:52:32.31ID:rcYEOPS6
Vec の iter() と into_iter() の違いは?
2023/10/19(木) 14:53:04.92ID:rcYEOPS6
Vec の iter() と into_iter() の違いは?
2023/10/19(木) 15:12:31.11ID:V7scna43
>>510
引数に着目するといい。
into_iter はムーブするが iter は借用する。
2023/10/20(金) 01:20:11.96ID:/f3Rr7gK
>>500
その発想がすでに間違ってる
根本が違うから同じようには書けない
2023/10/20(金) 06:13:09.90ID:3+q+Er7L
Cで安全に書いたときと同じ生成コードにはなるけどRustでは抽象度の高い表現をするからなあ
例えばメモリのある範囲の領域を順に読み取る(書き込む)というC言語だとポインタをインクリメントしていくだけの場合でも
Rustだとまずメモリの領域をスライスという安全な抽象表現で扱い可変性もライフタイムも付随してスライスが指す元の安全に確保されている領域(配列やベクタなど)も必須というところからスタート
そのうえでスライスのイテレータにより必ずその範囲内のみを順に安全に指し示す参照(または可変参照)が次々と得られて順に読み取る(書き込む)ことが達成される
さらにRustではこれをfor文ではなく抽象度の高いイテレータメソッドチェーンで書くことも多いからCコードとの対応はますます難しくなるね
515デフォルトの名無しさん
垢版 |
2023/10/20(金) 06:56:18.50ID:/M3RKJCH
unsafe {
Rust で C ポインタやりたいなら
let p = *mut hoge;
p+=1;
std::slice::from_raw_part(p. 1)[0] = hage;
}
2023/10/20(金) 09:04:11.56ID:6mF1sPPt
>>513
同じように書けないからこそ対比したものが欲しいと言う話だろうに
2023/10/20(金) 09:27:32.12ID:/M3RKJCH
>>516
クソでたらめだが真面目に実装するとマジ面倒
>>515 方式だと
#[derive(Debug)]
struct Hoge {a: u8, b: u8, c: u8}
impl Hoge {
pub fn new(a: u8, b: u8, c: u8) -> Self {Hoge{a, b, c}}
}

fn main() {
let hoge: Vec<Hoge> = vec![Hoge::new(1, 2, 3), Hoge::new(4, 5, 6), Hoge::new(7, 8, 9)];
println!("{:?}", hoge);
let mut p = &hoge[0] as *const Hoge as usize;
p += 2 * std::mem::size_of::<Hoge>();
unsafe { std::slice::from_raw_parts_mut(p as *mut Hoge, 1)[0] = Hoge::new(8, 3, 1); }
println!("{:?}", hoge);
}
>>514 方式だと
let p = &hoge[0] as *const Hoge as *mut Hoge;
unsafe { std::slice::from_raw_parts_mut(p, 3)[2] = Hoge::new(8, 3, 1); }
でちょっとマシになるくらい
518デフォルトの名無しさん
垢版 |
2023/10/20(金) 09:40:03.83ID:2W9ATkqE
マクロでウヒヒ
2023/10/20(金) 11:03:08.72ID:+Ixb2Hv2
近代的な言語の仕組みってのは大規模なプログラムをどうやってまとめるかという方向で進歩してるから
小さなサンプルで比較しても設計理念は身につかんのだ。
2023/10/20(金) 13:13:02.21ID:iA9G36tB
設計理念を身につける話なんて誰もしとらんだろw
2023/10/20(金) 15:12:25.73ID:+Ixb2Hv2
してないから問題だと述べてるんだが。
俺が学生のときに英語の長文の全ての単語の横に(単語ごとに!)日本語の単語を書いてたやつがいたことを思い出したわ。
本に載る程度の規模(ひとつあたり数ページくらい?)のプログラムを対比するってのはそういうことだよ。
言語の設計理念に基づいた構造こそが重要で、構造を論じるほどの規模にならないならたいした違いは見えてこない。
522デフォルトの名無しさん
垢版 |
2023/10/20(金) 16:07:06.67ID:/M3RKJCH
CでもPythonでもRustでも全部の行にあほみたいなコメント描く香具師はうざいけど
Rustのcrateでdocsにcomment100%達成するためにはアホなコメント描かされてダサい設計思想だと思う
2023/10/20(金) 16:34:14.75ID:HySp0Cr6
>>521
日本語の設計理念wが身についてないみたいだなw
2023/10/20(金) 17:24:55.57ID:/f3Rr7gK
unsafe使うならCでいいんだよなw
2023/10/20(金) 19:40:13.76ID:3+q+Er7L
>>524
それは違う
unsafeを使ってsafeなインターフェースを提供する部分だけ人間が安全性を保証すれば
それ以外の部分はすべてRustが安全性を保証してくれる
その方針でRustの標準ライブラリやunsafeを用いる一部クレートが作られている
2023/10/20(金) 20:06:04.22ID:9sHhryb+
>>525
もちろん品質が保証されてるライブラリは使うよ
現時点でここまでライブラリが揃ってるから自前でunsafeを書く必要は感じない
527デフォルトの名無しさん
垢版 |
2023/10/21(土) 12:29:35.28ID:sf7W/HH9
関数型最強(キリω
ですねわかります
2023/10/21(土) 21:43:10.75ID:sGOhbjn7
Linuxでも、結局のところ「C言語でいいじゃん」という結論になりそうよね
リーヌスもなんかやっぱRustはなぁ・・・ってトーンダウンしてきてるし
2023/10/22(日) 00:35:28.61ID:GiKl9Asx
>>528
カーネルなんて低レイヤーのポインタ操作とかビット演算しかしないからな
2023/10/22(日) 00:50:06.85ID:n0l+NFKj
Linux カーネルの中にだって Rust が適している場所も
あるといえば有るだろうけど現時点でそれなりに検証が済んで
安定して動いているものを「置き換え」するほどではないだろうな。

適しているからといって各部を別の言語で書いたりすると
接続箇所で面倒になったりもするし。
2023/10/22(日) 11:49:16.17ID:IKvVj0uW
カーネルで流行らないならもう流行るところないんじゃ…
2023/10/22(日) 19:50:36.55ID:NN1UsPSx
どの言語からどの言語への場合でも既に動いているものを別の言語に移植するだけだとコストがかかる
それでもスクリプト言語からRustへ置き換えるなら実行速度と省メモリの効果がコストを上回りやすいためよく行われている

一方でC/C++からRustへ換えても実行速度と省メモリの効果はない
だからシステム設計を変えるなど大きな更改タイミングでRust化することが多い
特にマイクロサービス化されているものは個別に更改できるためシステム全体の一部Rust化に向いている

最も向いておらずハードル高いのがモノリシックになっているOSカーネル
その場合でも分離されているデバイスドライバは最近のデバイス複雑化と更新対応の多さからもRust化が向いているため進んでいる
2023/10/22(日) 19:58:13.61ID:fijCTFBo
>>531
もうちょっと上位のレイヤーなら良いと思うけどね
Cでバッファオーバーランするようなプログラムって
結局Rustでもunsafe使わざる終えないような処理なので
2023/10/22(日) 21:57:00.47ID:xV2fKCwr
構造体をキャストするものでも、hoge_storage_t みたいに最大サイズを規定するパターンと
char foo[0]; を積極的に利用するパターンと 真っ二つにわかれるしねぇ
後者はRustでどうすんだろ
2023/10/22(日) 22:15:56.13ID:fijCTFBo
結局構造体もパケットのバイト列にパックするからね
その時unsafeを使うことになる
2023/10/22(日) 22:45:30.49ID:EpprGwAf
構造体はunsafeいらん
タグ無し共用体はunsafe
2023/10/22(日) 23:15:20.26ID:HWj9itUZ
流行るから価値ある、流行らないから価値なしって評価基準はジャパニーズカルチャーのガラパゴス
2023/10/22(日) 23:23:05.72ID:/1lQw0Ls
>>534
後者も普通に表現できるしCとのFFIも可能
2023/10/22(日) 23:28:57.61ID:zUgjdRO9
Redox(https://www.redox-os.org/)みたいなRust製のUnix系OSプロジェクトならもうあるし
無理してLinuxに食い込む必要はないと思うんだけどLinux開発者でもRust使いたい人はいるんでしょ
Linuxは一部のモジュールがRust製になる程度で中核は最後までCで通すと思う
というかRustで置き換えるなら名前変えてほしい
2023/10/23(月) 00:13:38.68ID:tCssLiBK
>>539
まあカーネルで使ってる基本的なデータ構造(赤黒木、ハッシュテーブル、双方向リスト)
kref(リファレンスカウント)などは外せないからね
無理に組み合わせるとかえってキツい気がする
2023/10/23(月) 05:58:05.37ID:3382hDjx
>>533
実際にはCでもバッファオーバーランしないからRustでは、unsafe必要ないでしょ
2023/10/23(月) 06:59:33.53ID:8gpCEC0e
>>533
>使わざる終えない

昔こんな誤字よく観たな
543453
垢版 |
2023/10/24(火) 00:55:17.36ID:Ei0IGfb9
>>500
今度は逆にrustで書いたもの>>453をcで書いてみた
https://ideone.com/j5KR8Y
・参照透過性は考慮していない
・型のパラメータ化?には挑戦してない
・パターンマッチ再現?にも挑戦してない
・クロージャが欲しいところには呼び出し元の文脈を手渡して誤魔化す
・グローバル変数一個使ってノードの再利用を試みてる
・とにかくlist_qsort内部がそれっぽい感じの手順になってたらヨシ
struct node {
int value;
struct node *next;
};
struct node *list_qsort(const struct node *list) {
int pivot;
struct node *sorted = 0, *tail, *smaller, *rest, *a, *b;
if (list) {
pivot = list->value, tail = list->next;
list_partition(&pivot, less_than_context, tail, &smaller, &rest);
sorted = list_append(a = list_qsort(smaller), b = list_cons(pivot, list_qsort(rest)));
list_available_push_all4(smaller, rest, a, b);
}
return sorted;
}
2023/10/24(火) 13:32:38.68ID:oyxcPsiu
スレチ
2023/10/24(火) 16:02:23.69ID:ju9L4gE1
cargo 経由で rustc にコンパイルオプションを渡したいとき
RUSTFLAG=hogehoge
で成功はしたのですがパッケージ全体が再コンパイルされて遅いです
特定のファイルだけにコンパイルオプションを適用したいのですが
cargo にはそういうオプションはありませんか?
2023/10/24(火) 18:21:38.30ID:u/7eM1yW
>>545
ありません
2023/10/24(火) 20:07:58.68ID:dncTx+4h
大文字小文字が混在する言語って気持ち悪い
548453
垢版 |
2023/10/24(火) 22:19:05.86ID:yQ/jFyOv
>>543 c
https://ideone.com/yYGR7x
・ノード再利用やめた
・若干の整理
2023/10/25(水) 09:06:18.67ID:9oOV85NF
>>545
試してないけど
やるとしたら
cmdとかterminal(shell)を2つ以上別ウィンドウで開いておいて
それぞれ別のRUSTFLAG=を設定しておく(環境毎に独立なはず)
片方でbuildしたあと適用したいファイルだけ修正してもう片方でbuildするとうまくいかんかな
2023/10/25(水) 10:10:31.38ID:p3+NCv68
特定のファイルにだけ適用したいコンパイルオプションて何なの?
2023/10/25(水) 10:43:36.55ID:dKf07X6i
crateで分割したらいけるんじゃね
2023/10/25(水) 11:35:23.44ID:CN7zqSRs
そらそうやろと言いたいところだが
今はcrate単位の指定はできなくてパッケージ単位のみ
2023/10/25(水) 13:57:15.42ID:0w7kqvd/
crate で別れてる前提で
その crate を使う2つの bin (まあまあそっくりな main) を造って
それぞれをそれぞれの RUSTFLAGS= で build したら
うまく使い別けられました
とりあえず速度は気にならないからしばらくこれで逝く
アイディア呉れた人thx
554デフォルトの名無しさん
垢版 |
2023/10/26(木) 14:45:03.06ID:6bJ9rmmH
しつもんです
cargo publish のときに
warning: package `hoge vN.N.N` in Cargo.lock is yanked in registry `crates-io`, consider updating to a version that is not yanked
って警告が出てて意味は判るんだが
cargo clean してやり直しても package 'hoge vN.N.N' が最新のものに切り替わらない
自分自身の Cargo.toml の dependencies には hoge は描かれていない
どの crate が原因で hoge を要求してるのか知るにはどうすれば良い?
その crate を最新のものにすれば hoge の yank されてないものを取って来てくれるとも限らない訳だが
555デフォルトの名無しさん
垢版 |
2023/10/26(木) 15:53:54.89ID:wO29ziTZ
cargo treeを使うといいよ
2023/10/26(木) 21:41:03.08ID:pAbfpEYj
Rust で書かれた WebAssembly/Canvas 上の
FlashPlayer のエミュレータ Ruffle の実装が
凄い勢いで進んでるけど
世界の凄腕プログラマも参戦してるみたい。

このスレで貢献してる人ひょっとしている?
エミュレータ実装て武者修行になるのかな。
2023/10/26(木) 23:18:45.93ID:oN20rU1J
エミュレーターを作り始めるスタートは完全な仕様の資料を手にいれることで、それがないことも良くあることだから調査がしんどいんだよ。
そんで実装は仕様通りにやるだけのひたすらに地道な作業だからあまり面白味はない。
動くだけじゃなくて性能を出そうと思ったら色々と工夫の余地はあるんだけど……
2023/10/27(金) 10:08:58.42ID:d8VwEqUV
古いゲーム機のエミュレータを書いたことがあるが結構面白いぞ
昔のソフトはクロックタイミングに依存することも珍しくないから、性能だけでなく再現精度にも気を配らなくちゃいけない
腕試しとしてはちょうどいいと思うよ
559デフォルトの名無しさん
垢版 |
2023/10/27(金) 12:30:38.77ID:xuiID3+p
もっと良いサイトあったんだけど消滅してる?
http://sunlight.cocolog-nifty.com/sunlight/2005/08/post_1ff6.html
http://www.sm.rim.or.jp/~shishido/tick.html
2023/10/27(金) 22:25:37.09ID:2hH60kIl
>>557 >>558

そうですね、面白さと言う点では

当時は無かった WebGPU等の現代的な技術を
積極的に取り入れて
本家 FlashPlayer の単なるエミュレータに留まらず

ブラウザWASM上の本格ゲーム・アニメプレーヤーに
なりそうな所が興味を引きます。

取り敢えずは日本人として
縦書きCJK 2バイト文字列の動的表示等の
検証報告で協力できたらと考えております。
(和風ゲームのイベント表示など)
2023/10/27(金) 22:44:06.00ID:nnq2nBUF
web上で再発明するの好きなやつ多いよね
でも失敗率高めじゃないか?
2023/10/28(土) 14:23:38.78ID:AMpKEF3U
自己鍛錬で再発明するのは好きにすればいいがそれでサーチエンジンの上位を占拠するのはマジ迷惑だ
563453
垢版 |
2023/10/28(土) 18:50:08.51ID:U0JINWpQ
>>548 c
https://ideone.com/Rp476I
・ノードへのポインタとしてリストを表現していた(>>548)のを廃止
・共用体でリストを表現したことによりBoxの位置?がRust版(>>453)と同じに
・特に意味もなくループ文を再帰に置き換え
564デフォルトの名無しさん
垢版 |
2023/10/29(日) 12:47:29.07ID:IsQ6p7Vf
uBlacklist が猿人検出阻止してくれるそうだ
sejuku とか techacademy とか KENTA とか入れると良い
2023/11/03(金) 14:51:57.32ID:fSSaeY5g
=== 複製おじさん(通称複おじ)について ===
Rustスレを中心に活動し、2023年4月現在で1年以上ム板に住み着くRustacean。無自覚な荒らし。

Rustスレでは、基本的に他住民の意見を聞いて糧とすることなく、自らのコードが最善であると、ID変更自演を交えいつまでも主張し続ける。
同スレで「所有権が複製される」という違和感のある表現を、「違和感がある」とする他住民の意見をすべて否定してしつこく擁護し続けたことから、「複製おじさん」というあだ名が付けられた。
それ以外のム板スレでは、基本的に他住民の意見を聞いて糧とすることなく、Rustこそが最善であると、ID変更自演を交えいつまでも主張し続ける。
その基本戦術は、「GC言語は遅い」の一声でC/C++/Rust以外の言語を否定し、残ったC/C++は安全ではないので、Rustが最善であるとするもの。

しかしながら、Rust以外の言語に関しては、正当な批判を展開するのに十分な知識を持っているとは言いがたい。
本スレPart1では、C++の問題点を指摘しようとして多数の誤り・知識不足を露呈することとなった。特にしつこく食い下がったのが「動的ディスパッチ」に関する誤解である。
https://mevius.5ch.net/test/read.cgi/tech/1677286186/786-799(ID:Evbafc70とID:RiLc+pIfが複製おじさんであると考えられている)
要約すると、通常「条件分岐」と呼ばれるものを「動的ディスパッチ」と呼ぶのが正しいと主張し続けたのである。
常識的にはあり得ない誤解だが、提示されたC++のコードが自らの主張(C++にはパターンマッチが無い)に不都合であると感じたためか、C++のコードを正しく読み解くことができないにもかかわらず脊髄反射的に否定してしまい、その根拠として誤った論理をこじつけてしまったものと思われる。

ちなみにこの後、同種の誤解を持って書き込むID:wHEiYRW7(これはID使用歴的に複製おじさんとは考えにくい)に対して、正しい理解に基づく指摘を行う単発IDが複数出現するが、この中にも複製おじさんが多数含まれていると考えられている。
このように自分の誤りを認識した場合、それを認める書き込みは決して行わず、別人の振りをして最初から正しく理解していた体を装うのも複製おじさんの特徴である。
2023/11/03(金) 20:56:04.34ID:uUmiO3VU
Generatorはコードがごちゃっとしてたからgen fn/blockはありがたいな
2023/11/03(金) 22:49:04.51ID:Q6dMbwrG
2024 editionから?
568デフォルトの名無しさん
垢版 |
2023/11/04(土) 04:29:37.91ID:xhYE5yZM
Rustの学習を始めたが、所有権面倒くさい。まあでも安全性は高められそうな感じはする。
2023/11/04(土) 12:29:53.92ID:eFHrirh7
Better C的なRustが欲しい
C++と張り合って仕様が複雑になってる
2023/11/04(土) 12:45:03.68ID:whQSHNtc
>>569
それはZigじゃない?
とはいえ、所有権いい感じに見てくれない言語を今更betterと言えるかというと微妙か。
2023/11/04(土) 13:26:02.22ID:ocaBqo/v
Rust は別に C++ と張り合ってなんかいないよ。
現実に使うものはどうやったってどこかで汚くなるってだけ。
綺麗なものは使われてないものだ。
572デフォルトの名無しさん
垢版 |
2023/11/04(土) 14:22:45.66ID:nDDUhOSB
>>569
Odinはいかが?
https://odin-lang.org/
2023/11/05(日) 00:55:20.60ID:Frni44mO
>>569
Carbon
2023/11/05(日) 13:27:00.92ID:bq/z7Mod
>>567
「gen」予約keyword化はそうだね
575デフォルトの名無しさん
垢版 |
2023/11/09(木) 15:19:57.39ID:j64EPVX0
すまんが、VSCode上から/examples下にあるものをデバッグしたい場合ってどうやんの?
他人の作ったクレートのコードを読む上で、これを楽にできると個人的にはありがたいんだけど・・・・
2023/11/09(木) 22:37:41.41ID:vNSbYVSe
バージョンと拡張機能によりそうだけど自分の環境(Windows)だと
examples内でもfn main()の上に
|> Run | Debug
みたいなinlayが表示されてとりあえずそこからデバッグ実行できた
設定作ればほかの起動方法もあるはず

たぶんrust-analyserの機能だけどデバッガは環境依存だからわからん
2023/11/12(日) 02:38:23.29ID:O0gb6uIB
gen はいわゆる協調スレッドなのか。
言語機能として取り込むにはちょっと豪華すぎる気もするな。
2023/11/12(日) 04:55:58.85ID:2kP6dQwH
genはasyncと同じでコルーチンだよね?
そしてasyncと同じく単純な状態マシンで実装だよね?
579デフォルトの名無しさん
垢版 |
2023/11/12(日) 07:45:09.87ID:sBWcqg0h
>>576
ありがとう!バッチリできたぜ!!!
580あぼーん
垢版 |
NGNG
あぼーん
2023/11/12(日) 11:30:27.32ID:cviedAAA
>>580
既にやってるよ
582デフォルトの名無しさん
垢版 |
2023/11/14(火) 12:58:29.06ID:SRCspH78
https://crates.io/search?q=arete

0なんだが
583デフォルトの名無しさん
垢版 |
2023/11/19(日) 15:31:52.34ID:J3g/JpQ/
rust初心者です。
cだとポインタに対してキャストすることで完全にプログラマ任せのキャストが出来ます。
例えば文字列を参照するポインタを強引に数値として解釈させるなど、好きなように出来ます。
rustでは簡単に調べたところparse().unwrap()などが必要だそうです。
rustはcのようにバイナリフォーマットをプログラマ任せにして自由にキャストさせる習慣はないということでしょうか?
584デフォルトの名無しさん
垢版 |
2023/11/19(日) 16:23:14.27ID:/G2k3fWt
あるよ
585デフォルトの名無しさん
垢版 |
2023/11/19(日) 16:29:48.57ID:eJPqaRZx
#[repr(C)]
as *const T
as *mut T
as usize
bytemuck
slice::from_raw_parts
2023/11/19(日) 16:46:38.60ID:ib2hIQe1
バイナリや文字列と内部表現・の相互変換(シリアライズとデシリアライズ)ならば
Rustではdeser crateファミリーを使って専業分離することが多いね
2023/11/19(日) 18:17:50.06ID:b3b61WiC
シリアライズ関連のクレートを使った方が楽だし、もうちょっと簡易的にやる場合でも from_le_bytes などの組み合わせで安全にやれるから不必要にプログラマの責任で管理するべきではないよ。
C でもいまどきは高レイヤのプログラムならそんなに気軽に未定義の型変換はしない。(もっとも、高レイヤではあまり C を使わないけど)
2023/11/19(日) 18:43:57.48ID:ib2hIQe1
ごめん、アホなスペルミスしてる
deserでなくてserde
あとserde_bytesやbincodeを併用
589デフォルトの名無しさん
垢版 |
2023/11/19(日) 23:58:07.78ID:J3g/JpQ/
少し調べてより明確に言語化出来ました。
Rustはゼロコストのserderができますか?

Cだとしばしばそれができます。構造体の要素次第ですが。
で、調べてみるとrkyvというフレームワークが近いことを可能にしているようです。
ゼロコピーと謳っていますが、何らかの演算コストが生じているのかどうか。
Cなら構造体を注意深く設計すればキャスト一発で実行時コストゼロでserderが完了するのです。
590デフォルトの名無しさん
垢版 |
2023/11/20(月) 02:05:15.84ID:ilBq5gGe
>>589
>Cなら構造体を注意深く設計すれば

なんでそのコストを無視するんだい?
591デフォルトの名無しさん
垢版 |
2023/11/20(月) 02:16:16.40ID:UjbzCz3W
>>590
実行時コストじゃないからです。
例えばRustのゼロコスト抽象化という概念もあくまで実行時コストがゼロであることを意味しているはずです。
2023/11/20(月) 02:16:45.62ID:K0+PyRHv
#[repr(C)]付けてstruct/enum/unionをCと同じ使い方すればC互換のレイアウトになるはず
2023/11/20(月) 06:49:29.19ID:dNsGQu4G
>>589
Cと同じことがしたいだけならrepr(C)で構造体定義して
std::mem::transmuteでキャストすればいい
rkyvみたいなフレームワークはもっと高度なデータ型(ハッシュマップとか)で同じことをやるためのもの
2023/11/20(月) 08:53:23.51ID:LwcosZwN
抽象度の高いレイヤを挟んでもかなり最適化で消えるよ。
逆に自由なキャストのコストはゼロではない。
ハードウェアの癖、処理系の癖を理解している人がうまくチューニングすれば性能はあがることも多いけどキャストして直接に読み替えたら実行時コストが低くなるとは限らない。
2023/11/20(月) 13:51:58.80ID:MS7hPbOQ
>抽象度の高いレイヤを挟んでもかなり最適化で消えるよ。

それはもちろん判ってて
その上で厳密にゼロじゃないから問題視してんじゃん
2023/11/20(月) 15:34:39.51ID:JXHwx0JF
具体的にRustを使うメリットよりデメリットが上回る例があるならそれを出さないと話がわからない
色んなバイナリプロトコルもRustで実装されて問題になっていない
2023/11/20(月) 17:27:20.27ID:cTETCu/a
transmuteだとalign合わせるためにコピーする場合がありそうだから
本気でCと同じゼロコストで読み替えするならポインタ(参照じゃない)をとって
as *const T(as *mut T)で目的の型にキャストして参照(&T, &mut T)に戻す感じかな
どうせunsafeだからunion使う方がいいかもしれないけど
2023/11/20(月) 17:54:17.33ID:PG0EBfXZ
Cから移植する場合でtagged unionをうまく移植する方法はないだろうか
unsafe使わずに

struct tagged_value {
enum tag t;
union {
hoge h;
fuga f;
} u;
};

みたいなの
2023/11/20(月) 18:11:32.44ID:NaWZknyA
>>598
enumで
2023/11/20(月) 18:17:00.50ID:ieYqPgSw
>>595
最適化の話は「どちらにしてもゼロとは限らない」という話のための前ふり。
仮にその場所に限ってはゼロになったとしても周囲の最適化の足を引っ張ることもある。
総合的な速さを出すには諸々を加味したチューニングが必要なので単純にキャストしたほうが速いとは考えるなというのが主旨。
もちろん諸々を考慮して検証した上で実際に速くなることが確かめられるならそれを否定したりはしないよ。割に合うことは少ないとも思うけど。
601デフォルトの名無しさん
垢版 |
2023/11/20(月) 21:13:04.59ID:ojqzhkRS
ちゃんと考えるよ。
角度とか
2023/11/20(月) 23:02:22.90ID:QHUUbGYT
重要なのは、Rustで書くと遅くなる(コストがかかる)パターンを、実際に発見できたのかどうか?

もしそのようなパターンを発見できて、(Cによる)速い方法でも安全性に問題がないのならば、
Rustの歴史ではそれを(必要なら)unsafeで記述してライブラリの中に安全に閉じ込めてきた
そのためRustで一般プログラマーがunsafeを使わずに記述しても、ほとんどのケースでCと同等の速さが出る
603デフォルトの名無しさん
垢版 |
2023/11/21(火) 04:05:24.41ID:60zWiP9n
個人的な懸念点は処理のゼロコピー化においてCに劣るのか?という点
Rust界隈でゼロコピーフレームワークが色々あるがどういう工夫が行われているのか
調査は時間がかかりすぎるからやらないw
604デフォルトの名無しさん
垢版 |
2023/11/21(火) 04:13:54.83ID:60zWiP9n
データ転送はCPU上の演算と比較してかなり遅い処理なので
ゼロコピーで劣ると一部の処理でかなり遅くなる
そしてベンチマーク系のプログラムではゼロコピーはあまり問題にならない。
605デフォルトの名無しさん
垢版 |
2023/11/21(火) 04:16:28.76ID:60zWiP9n
ゼロコピーが問題になるのはserder、通信
あとたぶんOSの実装でも問題になるはず
だから数学的計算というよりはシステム間の垣根を超えるようなところで問題になる
RustがベンチマークでC並といっても、あくまで数値計算系の話
2023/11/21(火) 08:42:33.89ID:UPhRR3yr
ゼロコピーってのはオリジナルのバッファ以外には追加でヒープアロケーションをせずに処理をするという意味
2023/11/21(火) 10:07:46.27ID:ZzleWc4x
ウザイからttf_parserのコードでも読んでくれば
2023/11/21(火) 11:00:12.68ID:HSO31doi
unsafe という名前が誤解の元になってる
unsafe に描く内容って結局安全な内容しか描いてはいけない訳だ
そして unsafe は使ってはいけない機能ではなくむしろ積極的に使って良い機能
2023/11/21(火) 11:55:27.06ID:pNsPVZam
こういうやつがいるからこそunsafeという名前に価値があるんだよな
2023/11/21(火) 12:57:54.74ID:4vFkathr
>>605
それらRustで書くことで遅くなった事例がない
むしろ例えばCDN世界トップのCloudflareは
Cで書かれたnginxを全面的にRustで作り直すことで
CPUリソースとメモリリソースを1/3に削減することに成功している
2023/11/21(火) 15:25:53.24ID:OibZ9mzY
Cloudflareのやつはnginxがスレッドベースで処理をブロッキングしてしまう(CPU時間とメモリを占有してしまう)から
マイクロスレッドで作り直した=基本設計を大きく変更したというだけで、Rustだからパフォーマンスが向上したというわけではない
2023/11/21(火) 16:18:31.31ID:Pb5WKpvw
stdをunsafeで検索するとUnsafeCellしか出てこなくて
unsafeな関数の名前がほとんどuncheckedなのは
let x = unsafe { do_something_unsafe() };
だとアホっぽいからかな
2023/11/21(火) 18:24:54.78ID:Fzh9NpIU
検索方法が間違ってる
そしてuncheckedはunsafeとは意味が違う
2023/11/21(火) 23:10:58.28ID:lumDzvUR
>>611
そこではなく
杞憂の>>603が言うところのゼロコピーやゼロコストはCとRustで同様に実現できているから
新たなシステムはCを使わずにRustで書いたという話ではないか
2023/11/21(火) 23:28:16.17ID:u3FDf3nL
外部入力をtransmuteとか地雷臭がハンパない
どうぞご安全に〜
2023/11/21(火) 23:39:45.33ID:lumDzvUR
transmute使わなくてすむsafeなライブラリ関数が揃ってるからね
2023/11/25(土) 09:15:59.95ID:rKTwm3uz
Rust って同じ変数名なのに違う型に出来るよね?
同じスコープで再定義出来ると言うか上書き出来る
名前が変わらないから便利って思うかも知れないが
気を付けてソース観ていないと途中で型が変わってるやん!ってなる
なかなか嫌な構文だね
可読性低下しない?勘違いしそう
2023/11/25(土) 09:18:00.86ID:rKTwm3uz
あと上書きされたとき前のリソースは上書きされたタイミングで消えてない
明示的に drop していれば消えるがしなかったら実は生きたまま
迷惑仕様じゃないかな
2023/11/25(土) 10:20:51.65ID:ytuM+CNS
>>618
同じスコープ内でシャドウィングする時は意味的に同じものを入れるようにする

前のリソースがすぐにドロップされないのはシャドウィング時にそのリソースへの参照を使う事で不要なアロケーションを避けられるから
2023/11/25(土) 12:38:39.68ID:EEEndPKs
シャドウイングされた時に勝手に消える方が迷惑仕様だな
その時点で他から参照されてるかもしれないし
2023/11/25(土) 13:46:10.54ID:V6cVkJ+M
>>617
Rustはプログラマーに優しい強い静的型付けの言語だから型が違えばエラーになるため混乱もなく大丈夫
また、型変換するたびに別の変数名にしなければいけなかった言語よりも便利でプログラミングも快適だよ
2023/11/25(土) 16:27:51.72ID:81rqCYd0
Rustの欠点は誰も使ってない所だけ
2023/11/25(土) 17:24:40.07ID:4EAT4Ovg
>>622
どうしてそんな悲しいこと言うの!
2023/11/25(土) 18:44:41.46ID:vlc4nTzz
誰も使ってないのってカッコいいな
2023/11/25(土) 23:55:37.33ID:B979bnCG
俺だけが知っている
2023/11/26(日) 09:12:21.52ID:k38CbPq9
ユーザーが少ないのはアドバンテージだってポール・グレアムも言ってる。
2023/11/26(日) 09:20:04.49ID:OE1+8Rl8
GAFAMで使われるようになった時点で言語として消え去る可能性は十分下がったし
別にこれ以上使う人増えなくてもいいんじゃないかな
日本のSIerにまで広まるなんてまずないだろうし
2023/11/26(日) 10:05:44.56ID:Deg4O8Si
言語じゃないけどBlenderみたいにいつの間にか覇権を取ってたりすることもあり得る
629デフォルトの名無しさん
垢版 |
2023/11/26(日) 11:39:45.82ID:d/KzVdDP
おまえが使ってるのに誰も使ってないって可笑しなことを言うのな
もしかしておまえも使ってないだろ?正直に言え
2023/11/26(日) 11:42:35.06ID:Deg4O8Si
「俺の周りじゃ」
631デフォルトの名無しさん
垢版 |
2023/11/26(日) 12:18:50.10ID:d/KzVdDP
ぼっちってこと?
2023/11/26(日) 12:23:12.23ID:oOwLuMql
Rust「きゃー、私のために争わないで
2023/11/26(日) 12:32:50.97ID:iMOX0Yuj
クズがこっちに移動してきたか
まかせろ
2023/11/26(日) 13:04:33.25ID:oOwLuMql
crateのバージョンが1.0になってないのが多いから、まだまだだなーって思う
2023/11/27(月) 02:23:02.91ID:hnitA9Px
ぼっちざRust
2023/11/27(月) 03:19:17.53ID:shAL5QFI
>>635
ちょっとかっこいいじゃん
637デフォルトの名無しさん
垢版 |
2023/11/27(月) 10:05:45.61ID:7/k6/GSg

https://www.youtube.com/watch?v=i-fbsgTWM5Q
https://www.youtube.com/watch?v=AVKkhpGsXoI
https://www.youtube.com/watch?v=ylxlLa9X_O0
https://www.youtube.com/watch?v=LqmtSQ8tmzg
2023/11/28(火) 08:31:02.24ID:t7+ip2Xg
Rustって名前が良くない
2023/11/28(火) 08:45:48.68ID:ruCnqVCc
Cナントカじゃそれこそカビが生えてる
2023/12/03(日) 08:34:26.30ID:JMjzgwiz
>>638
go-langよりはマシ
2023/12/03(日) 18:40:27.28ID:kcDV2U5x
go は何が駄目といってネーミングがクソすぎるからな
あとマスコットがキモすぎる
2023/12/03(日) 20:05:06.19ID:KItL/kTG
ogleとセットで売り出せていれば多少は救われたかもしれない
文字型runeの中二感は好きなんだけど
643デフォルトの名無しさん
垢版 |
2023/12/08(金) 13:43:21.24ID:QsZXn/jV
VSCodeのrust_analyzerが、全く関係のないC#のプロジェクトでも勝手に動き始めるようになっちゃった
みんなのところどう?他の言語とか使ってたら起動しちゃったりしてる???
2023/12/08(金) 15:21:20.43ID:FH+GH+Zi
>>641
ネーミングが死ぬほどクソなのは同意だけど
マスコットはかわいいじゃん!
2023/12/10(日) 04:46:02.96ID:RGphax9G
ʕ◔ϖ◔ʔ < お呼びですか?
2023/12/10(日) 11:57:04.81ID:1MxEINjf
つべでrust検索するとゲームばっかり出る
2023/12/21(木) 16:58:33.82ID:HvDn5p2W
GAFAMで使われてるから廃れることないし、
コミュニティに変な人が入って来ない方が居心地が良いまである
2023/12/21(木) 17:12:16.21ID:JI0UYSEL
gopher はちいかわと同じヤバみを感じる
2023/12/21(木) 17:13:31.75ID:HvDn5p2W
言語のマスコットネタは寒いよなあ
2023/12/22(金) 13:35:06.75ID:lJtOGqn+
カニのフェリスも割りと一般的な名前
2023/12/25(月) 09:35:30.12ID:734EcmtL
「Rust」言語向けの“ビジュアルタイムトラベルデバッガー”「FireDBG」が公開
https://forest.watch.impress.co.jp/docs/news/1557204.html
2023/12/25(月) 10:28:47.95ID:7mXOqNeO
タイムトラベル?使い物になるのか?
2023/12/25(月) 12:40:39.37ID:Sk+Bp6T/
タイムトラベル知らんのか
654デフォルトの名無しさん
垢版 |
2023/12/26(火) 01:14:24.20ID:79CvGGY2
>>652
CやC++やJavaでも昔からコールスタックは遡れたけど、あれのビジュアル良くしたやつとは違うのかね?
2023/12/26(火) 01:58:52.00ID:DHuhCQvi
>>654
違う
状態の変遷を戻ったり進めたりできる
つかググればすぐ出てくるやろ
2023/12/26(火) 04:22:44.20ID:hadQuCYF
>>634
コミュニティに入るPGのレベルが全体的に高すぎて
俺の実装でversionを1.0にするのはおこがましい的な萎縮が働いてそう
2023/12/26(火) 04:22:50.25ID:hadQuCYF
>>634
コミュニティに入るPGのレベルが全体的に高すぎて
俺の実装でversionを1.0にするのはおこがましい的な萎縮が働いてそう
2023/12/26(火) 08:35:59.69ID:P1ddGMJS
>>656
セマンティックバージョニングのせいだよ。
バージョンナンバーの付け方は基準があって互換性が維持されるときとされないときで数値の上げかたが違う。
しかしメジャーバージョンがゼロのときは基準の適用外で勝手にしていいことになってる。
初期は試行錯誤があって当然だからね。
キッチリした管理なんかしたくないからまだまだ初期だという体裁でゼロのままにしたほうが楽なんだよ。
2023/12/26(火) 08:50:16.75ID:RJv1OlmX
>>658
これやな
オレオレライブラリ作る時とか
絶対に1系まで上げない
2023/12/26(火) 09:58:50.36ID:4qW9SvtE
Rustの要であるfutures futures-coreなども0.3のままだな
hyperは先月ようやく正式1.0になり先週1.1になった
h2が0.3から0.4に上がった
2023/12/26(火) 10:02:59.91ID:QVgSLMrU
どうでもいいな
662デフォルトの名無しさん
垢版 |
2023/12/26(火) 11:10:33.20ID:rdxjbOn3
メジャーバージョンが0のライブラリなんて怖くてよう使わん
Julia並みの破壊的変更が来ても文句言えんからな
2023/12/26(火) 11:17:02.90ID:RJv1OlmX
そういう日が来たら全部壊して書き直した方が早いよ
自分の書いてる所の効率も洗練されて良くなるし
664デフォルトの名無しさん
垢版 |
2023/12/26(火) 11:53:58.51ID:druMhfTB
まあこういう感じの真面目にサポートとかする気のない人しか使ってない言語なんだろうな
2023/12/26(火) 12:09:12.16ID:aCwAChA1
>>656
それ他の言語でも散見されるぞ
1.0は枯れ切った後に出て実質でかい機能追加は行わなくなったところでつけることが多い
大抵凄腕の人のライブラリに多いような気がする
SemVerが浸透する前からこの状態だったし
2023/12/26(火) 15:06:21.44ID:iSUEMnuj
Inkscapeは一生1.0に上がらないと思ってた
2023/12/26(火) 16:49:51.67ID:KvBUmVJg
GitHub Issueが2627件あるZigはどうするつもりなんだろう
2023/12/26(火) 17:19:43.95ID:Y/g/LC26
どうでもいいな
ライブラリの質はSemverで測るものじゃないから
669デフォルトの名無しさん
垢版 |
2023/12/26(火) 17:33:22.23ID:E/z8PERd
ライブラリの質にsemver考慮しない人間、仕事にRust使う気がなさそう
趣味プログラムで一年も生かす気がないコードならまあわかる
仕事で限られた工数で長期サポートするならsemver気にしないはありえん

まあRustなんて所詮趣味プログラミング向けなのかもな
まともな仕事には使えん
2023/12/26(火) 17:36:00.58ID:APrQ9KVs
個々のバージョンにおいて出来が良いかどうかはともかくとして、
長期的な互換性に対する姿勢を測る指針のひとつにはなる。
2023/12/26(火) 17:43:23.74ID:AKSTTleD
帰れゴミカスども
https://mevius.5ch.net/test/read.cgi/tech/1701997063/
2023/12/26(火) 18:34:35.78ID:6dPf9R/w
ライブラリを選ぶときや使うときには当然Semverは気にする
でもそれは質を測るものではない
その違いが分からないとか理解に苦しむ

ま、どうでもいいけど
2023/12/26(火) 18:42:19.39ID:krXurI2c
rustを使う人は、みんな凄腕で無ければ自分で実装するイメージ。
674デフォルトの名無しさん
垢版 |
2023/12/26(火) 20:02:46.87ID:E/z8PERd
>>672
質って品質って意味だろ?
品質にはサポート品質は当然含まれるだろ
2023/12/26(火) 20:12:35.91ID:RJv1OlmX
出来たばっかりの言語にやってきて
1系になってるライブラリまるでない使えねー!

お前はJavaに帰れ
676デフォルトの名無しさん
垢版 |
2023/12/26(火) 20:20:41.08ID:E/z8PERd
>>675
古いって言ってももう開発開始から17年なんだよな
Javaリリースから27年であり、正直そこまで差はないだろ
正式リリースからは8年だけど、リリースが遅かったことを評価することは出来んし、正直そこまで差はないと思わざるを得ない
正直、いつまで新しい言語みたいな顔してるんだよって気持ちだ

まるで自分を若いと勘違いしているおっさんみたいだ
677デフォルトの名無しさん
垢版 |
2023/12/26(火) 20:30:47.94ID:rdxjbOn3
しかしJavaに帰れってのも悲しい発言だな
結局仕事ならJavaって>>675も思ってるってことなんだもんな
2023/12/26(火) 20:34:34.53ID:4qW9SvtE
他の言語と比較したい人は言語比較スレへ
アンチ活動したい人はアンチスレへ
2023/12/26(火) 22:38:40.65ID:ewLNJPek
>>674
メジャーバージョンが1.0以上かどうかはサポート品質を測る指標にならないんだよ
実際にいろんなライブラリをきちんと調べて使った経験があれば誰にでもわかる常識的なこと

エアプで批判だけしたかったのだとしたらもう少し別の観点から攻めた方がいい
680デフォルトの名無しさん
垢版 |
2023/12/26(火) 23:11:29.12ID:exfh4uMB
>>679
いや仕様が安定しているというのはオープンなライブラリが提供可能な最大のサポートだが

まあでもそう思わない分野があるのは理解できるよ
多分君の業界では一度書いたコードが1年以上使われることはないのだろう
そういう業界ではライブラリが変わりまくって新機能が追加されることをサポートと呼ぶだろうし、それはまあわからんではない

でも0.9で止めるみたいな、特に新機能付けるわけでもないけどfixする気もありません。好きな時に変えたいですみたいなのはサポートとは程遠いよね?
681デフォルトの名無しさん
垢版 |
2023/12/26(火) 23:13:25.69ID:exfh4uMB
0.9は関係なかったな
2023/12/27(水) 00:41:46.65ID:3CBetLUr
>>680
まとめると
仕様の安定度を知りたいんたけど
よくわかんないから1.0未満は不安定
1.0以上なら安定だと判断してるってことだね
君の業界では

ご愁傷様です
683デフォルトの名無しさん
垢版 |
2023/12/27(水) 00:49:37.20ID:JhhYq7wG
>>682
書いてないことを読み込んで妄想で勝手にまとめる読解力すごいな
2023/12/27(水) 00:53:03.07ID:6D5uPlZV
>>682
まぁワッチョイスレから逃げ回ってるような荒らしなんだから構うのはやめとこうぜ
2023/12/27(水) 05:17:40.43ID:/OnGyPrY
そこまでNGされるのが嫌なのか
2023/12/27(水) 21:49:50.71ID:feQ9KdG1
自然淘汰とかいうけど
それを人為的にやったらただの私刑じゃないかね
2023/12/27(水) 22:20:54.47ID:/OnGyPrY
改行NGにすれば全部消えるよ
俺は一時期それにしてたけどおもちゃが見えなくなるのは寂しいからやめた
どうしても消したい場合はそれ推奨
2023/12/27(水) 22:55:48.52ID:+Ixmj89w
Polonius期待
2023/12/28(木) 08:10:24.28ID:7EmcMJDG
1.0 出てても信頼できるかどうかは結局のところ内情ちゃんと見ないとわからないからなぁ。
パッチバージョンで破壊的な事するOSSはとても多い。
2023/12/28(木) 08:35:00.47ID:uitX+xsl
>>689
Rustならば
①バージョン上がろうがバージョン指定のまま使い続けられる
➁ソース内のテスト及びカバレッジの仕組により意図しない破壊的ミスを防げる
➂意図した破壊的変更は1.xから2.0へ上げるルールが守られているため①により1.*指定で安心して使える
2023/12/28(木) 09:01:37.54ID:JG4/aLYi
そのルールが厳格に守られてなんかいないって話なんやが。
692デフォルトの名無しさん
垢版 |
2023/12/28(木) 09:05:11.24ID:tRLYlD1D
1.0を超えたら信頼出来るなんて言ってる奴は居ないんだよな
1.0を超えてないのは問題外だが
2023/12/28(木) 11:02:26.82ID:TCyyQhqN
>>692
1.0を超えてなくてもAPI仕様が安定していて信頼できるのも普通にある
1.0を目安にしちゃうのは中身を判断する術を持たないマヌケだけ
694デフォルトの名無しさん
垢版 |
2023/12/28(木) 11:34:37.14ID:PHYdezLP
>>693
仕様が安定しているなら1.0にすれば良い
それをしないのは使用を固定したくないという甘えの意思表示
実態として変わらないとしても、人に使ってもらうことについて真面目に考えていない心の現れ
695デフォルトの名無しさん
垢版 |
2023/12/28(木) 11:35:52.30ID:PHYdezLP
お前が勝手に信頼しているだけで、開発者も想定していない信頼を受けて困っているだろう
696デフォルトの名無しさん
垢版 |
2023/12/28(木) 11:47:36.08ID:PHYdezLP
普通に考えて欲しいんだが、自分がライブラリ開発者の立場だったとして、1.0に上げていないライブラリを安定してて信頼できるものとして使うユーザーがいたら「ちょっと待って」って思うだろ
2023/12/28(木) 11:54:18.66ID:jeZ/sYb6
使わせてもらってる立場から、使ってやってるに増長するキッズ
文句言うならサポート契約でも結んでからにしろクズ
2023/12/28(木) 11:58:34.84ID:uitX+xsl
Rustと関係ない話なら他のスレでやれ
ここで話すなら具体的にRustのどのクレートの話か示せ
2023/12/28(木) 11:59:02.76ID:N5v1piyg
バージョン関係なくTHIS SOFTWARE IS PROVIDED "AS IS"なライセンスのライブラリでなに勘違いしてんだろこいつとは思う
2023/12/28(木) 12:00:19.07ID:N5v1piyg
>>698
ここを新しい雑談スレにするか
今決めた
701デフォルトの名無しさん
垢版 |
2023/12/28(木) 12:00:19.20ID:PHYdezLP
開発者の意思表示を正しく読めよ
1.0になってないものを勝手に信頼するな
それはユーザーの心構えが出来ていない
702デフォルトの名無しさん
垢版 |
2023/12/28(木) 12:02:39.92ID:jJTXzrLr
>>699
それは法の話だろ
法とは別に、法的な責任を取らないとしてもどの程度信頼して欲しいかがあるだろ
2023/12/28(木) 12:07:24.88ID:N5v1piyg
>>702
特定の機能のサポートは不十分ですとかそういうのならREADMEに書くけど
漠然と程度とだけ言われてもなんのことだろう……
704デフォルトの名無しさん
垢版 |
2023/12/28(木) 12:09:48.59ID:x4URU/48
>>693
>>695
705デフォルトの名無しさん
垢版 |
2023/12/28(木) 12:15:29.31ID:PHYdezLP
>>703
不十分なのが特定の機能だけなら全体を1.0に上げてからその機能をexperimentalとして提供して良いだろ
だから特定の機能が不安定とかはバージョンニングと独立では?
俺なんか勘違いしてるか?
2023/12/28(木) 12:19:43.58ID:uitX+xsl
具体的にどのクレートの話か出せない時点で机上の空論
2023/12/28(木) 12:25:11.39ID:N5v1piyg
>>705
具体的な領域の限定や条件の明示なく絶対的な「信頼」が存在すると思っている
それがv1リリースで示されると思っている、ってあたりを勘違いしてるんじゃないかな……

セキュリティを語るときに「この前提が崩れない限り」安全としか語れないのと似ている
708デフォルトの名無しさん
垢版 |
2023/12/28(木) 12:30:33.09ID:PHYdezLP
>>707
それはお前の勘違いだな
俺はv1になっていないと信頼出来ないとは書いたが、
v1リリースで示されるとは一言も書いていない。

対偶は成立するが、裏は成立しない。高校で習っただろ
2023/12/28(木) 12:35:25.46ID:N5v1piyg
>>708
なるほどな、「『俺は』信頼できない」か
「信頼できる」と呼ぶに値する主観的絶対的基準があるんだな
それが何かは明文化できる?
2023/12/28(木) 12:35:38.49ID:ySYWG+kx
お前まともにRust使ったことないだろう
なんでこのスレにいるの?
2023/12/28(木) 12:39:55.64ID:9fQ265/7
仕様の安定度を知りたいなら1.0未満かどうかなんてゴミのような基準使わなくても他にいくらでもマシな方法があるだろうに
712デフォルトの名無しさん
垢版 |
2023/12/28(木) 12:43:17.71ID:PHYdezLP
>>709
「俺は」は「書いた」にかかっている
複数通りの解釈が可能な文書を書いたことを謹んでお詫び申し上げる
2023/12/28(木) 12:46:56.09ID:N5v1piyg
>>712
なら要旨は変わらないよ
絶対的信頼などない

せいぜいcargo-crevでも参考にするがいい
https://web.crev.dev/rust-reviews/
714デフォルトの名無しさん
垢版 |
2023/12/28(木) 12:49:05.73ID:PHYdezLP
>>713
絶対的な信頼が可能なものなど存在しないのが当たり前なので俺はこれまで話題にも上げなかったが、どうしてもその話をしたいようなので、そんなものはないという点については当たり前のこととして同意することをここに記す
2023/12/28(木) 12:50:06.29ID:3VbosFG3
ほんとにどうでもいい話だったな
2023/12/28(木) 12:52:12.25ID:DH0jKNBE
最近のMicrosoftやApple、Googleなんて安定しているとはいいがたく商用でも責任なんて取らないがみんな使っている
717デフォルトの名無しさん
垢版 |
2023/12/28(木) 14:56:05.00ID:PHYdezLP
ほんとうにどうでも良い話だったな
俺に噛みついてきた人間、逆裏対偶理解していない数IA未履修者と、わざわざ1.0未満で止めているものを勝手に信頼し始めるやべー奴しかいなかった
2023/12/28(木) 15:03:10.32ID:13cJB/jM
やっぱりワッチョイは必要だという結論しか出て来ない
ワッチョイ無しは荒らしに構うから伸びてるだけだわ……
2023/12/28(木) 15:54:11.64ID:uitX+xsl
>>718
必要な人はこちらへ住み分け

プログラミング言語 Rust 4【ワッチョイ】
https://mevius.5ch.net/test/read.cgi/tech/1514107621/
2023/12/28(木) 17:10:51.72ID:QN4uwoNP
>>717
清々しいほどの負け犬の遠吠えだな
クスッと笑えたので㌧クスッと
721デフォルトの名無しさん
垢版 |
2023/12/28(木) 20:36:54.93ID:JQwnhIVp
>>679
あなたがたまたまそうだっただけ
はい、光の速さで論破
2023/12/29(金) 08:33:17.51ID:CCwb5Mxd
バージョン0.9は「信頼してはいけない」という解釈が可能
複数通りの解釈を発生させた戦犯は謝罪するべきという解釈も可能
2023/12/29(金) 08:38:26.10ID:sHM61QvB
0.1.234 みたいにパッチバージョン爆発させてる OSS は継続性という点でわりと信頼感がある。
2023/12/29(金) 09:12:11.91ID:a+GKJrq8
たしかに234.0.0と0.1.234なら1.0未満とはいえ後者のほうがいいな
2023/12/29(金) 09:59:51.90ID:CCwb5Mxd
セマンティックだから1通り以上の解釈がある
無意味かつ無リスクな数字にすれば0通り
2023/12/29(金) 10:19:20.55ID:DHnfEKbi
>バージョン0.9は「信頼してはいけない」という解釈が可能
じゃ0.10にすればいいんですねww
2023/12/29(金) 10:25:18.94ID:f2oltWq4
>>723
誰もがお行儀良くone by oneでincrementしてるとは限らないよ
2023/12/29(金) 10:30:28.27ID:CUdroGt9
ライブラリを選ぶときは過去にリリースしたバージョン数、期間、頻度、メンテナンス状況、リリースノートの内容、ドキュメントの内容、Dependencies、Dependentsあたりの基本的項目くらいはみんな確認するよね?

バージョン番号だけで評価しようとする意味がわからない
2023/12/29(金) 10:36:02.78ID:0cvltfsQ
>>728
「だけで」と言ってるやつはいないよ。
その上でバージョンナンバー自体に対してはこういう基準で見るというのが現在のトピック。
730デフォルトの名無しさん
垢版 |
2023/12/29(金) 11:52:32.00ID:fWvRNSV1
急に「だけで」みたいな条件を脳内補完し始める人間、数IA未履修者っぽい気配がする
2023/12/29(金) 11:57:48.80ID:gPoT6KCM
>>728
むしろ採用クレート比較の際にバージョン番号で判断したことはない
それらの項目に加えてダウンロード数とその変化も見る
2023/12/29(金) 12:12:05.81ID:PikwmNJc
番号見てあれこれ想像してないで受け入れテスト書けよ
2023/12/29(金) 12:18:04.06ID:pF6WWzLY
>>732
ほんとそれ
あちこちに直接組み込んだら
別ライブラリ使いたいの度に全部書き直しやんけ

自前のちょっとしたラッパー書いて
同プロジェクトから呼ぶときはラッパー通せば良くね?

一度バージョン上げてみてテスト通らないので、時間出来るまで見送りですねーってやれば終わり
734デフォルトの名無しさん
垢版 |
2023/12/29(金) 12:42:41.12ID:1/HEfF20
ちょっとH2とH2に依存しているライブラリの使っている機能全てのラッパー書いてラッパーのメンテナンスしてくれる人いるー?

できれば別ライブラリ使いたくなった時も対応してくれるいいなー
2023/12/29(金) 12:45:01.14ID:gPoT6KCM
>>733
破壊的変更があるバージョンへと上げる必要はない
セキュリティ問題への対応のためバージョンアップが必要、かつ、破壊的変更バージョンしかない、という状況は極めて稀
稀な状況のみ追随すればよい
2023/12/29(金) 13:03:50.04ID:ymW7FjRY
>>735
セマンティクバージョンの話なんだからそれは当たり前やろ
マイナーやパッチの場合の判断や
2023/12/29(金) 13:50:41.57ID:CCwb5Mxd
標準ライブラリのたぐいを自作ライブラリでラップするのは
自己肯定感というか個人主義の成功体験がないと難しいんじゃないか
2023/12/29(金) 14:08:03.03ID:5mnDPveJ
ぽまいらGRUBも使ってなかったの?
あれなんかあんな便利なのにずーっと0.9だったでしょ
あんなに人類に役立つソフトなかなかないで
2023/12/29(金) 14:12:05.35ID:gPoT6KCM
ラップすることは本質ではなくただ単にラップするのは本末転倒
抽象化のために自分側の関数をそれぞれ作ってその中に外部ライブラリを閉じ込めるのが一般的
結果的にラップの一形態となっているにすぎない
740デフォルトの名無しさん
垢版 |
2023/12/29(金) 14:12:37.90ID:Y5pppiMt
GRUBの仕様が変わったら面倒って状態になったことないので流石に別の話では
2023/12/29(金) 16:21:20.54ID:GcW4fAIp
>>731
だよな
それが常識的な考え

バージョン番号から勝手な推測をしたところで
他から得られる情報ですべて上書きされるだけだからライブラリ選択においては全く意味がない
2023/12/29(金) 16:40:37.66ID:fjXA5V8+
>>729
>「だけで」と言ってるやつはいないよ。
「だけで」と言ってるやつはいないけど「だけで」判断してるマヌケはいるよね?
まぁほぼ君だけなんだけどさ↓

「メジャーバージョンが0のライブラリなんて怖くてよう使わん」
「0.9で止めるみたいな、特に新機能付けるわけでもないけどfixする気もありません。好きな時に変えたいですみたいなのはサポートとは程遠い」
「1.0を超えてないのは問題外」
「1.0に上げていないライブラリを安定してて信頼できるものとして使うユーザーがいたら「ちょっと待って」って思うだろ」
「1.0になってないものを勝手に信頼するな」
「わざわざ1.0未満で止めているものを勝手に信頼し始めるやべー奴しかいなかった」
2023/12/29(金) 18:22:07.42ID:v1Foeynd
確かにどう見てもバージョンナンバーだけで判断してるな
744デフォルトの名無しさん
垢版 |
2023/12/29(金) 19:11:58.37ID:fWvRNSV1
俺が書いた内容がID透視によって別の人の書き込み扱いになっていて笑っちゃった
ごめんよ>>729

それはそうと、>>742>>743も裏と対偶の区別がついていない中卒の主張かな?
「バージョン1未満」と「信頼出来る」でベン図を書いてみて、俺の主著の領域と「バージョンだけで判断」の領域に色をつけてみて欲しい
745デフォルトの名無しさん
垢版 |
2023/12/29(金) 19:28:31.50ID:fWvRNSV1
ああ、それとも「仕様が安定していて信頼出来る」と「あるプロダクトの依存として採用する」の方が良いかな
2023/12/29(金) 19:32:39.94ID:0cvltfsQ
関連しそうなクレートを全て精査するのは無理なんだから分かりやすい基準で足切りラインを設定するのは普通の処置なんじゃないの。
それがバージョンナンバーでも作者でもダウンロード数でもいいけど、バージョンナンバーでマシそうなのを選出してから細かい絞り混みをするのはそんなに不自然なこととは思わないけどな。
クレートを使う側の選出では偽陰性が増えてでも疑陽性が少ないほうが絞り混みやすいわけだし。
2023/12/29(金) 20:54:47.18ID:CCwb5Mxd
ベン図も三角関数も
何の役に立つのかを分かりやすく示さなければ足切られる側なんだよな
2023/12/29(金) 21:21:00.48ID:qZkdUj+g
>>746
そこでバージョンナンバーを考慮することはない
例えば比較の片方が1.xでもう片方が0.3.xだとして何の判断材料にもならない
749デフォルトの名無しさん
垢版 |
2023/12/29(金) 21:52:37.44ID:fWvRNSV1
バージョンナンバーを考慮することはないって意見、同意はしないけど逆裏対偶みたいな基本的な誤りはないのでまあ分野によってはそうかもって感じ
俺も年単位でサポートする気がない書き捨てに近いプログラム書くときはそうだし
2023/12/29(金) 23:21:04.71ID:QVcmgKmp
バージョンおじさん見苦しい
2023/12/30(土) 00:00:54.19ID:xE8SJEDn
所有権の複製のときといっしょの流れになってない?w
しょーもないところで食い下がってゴールポスト動かして居座るやつ
752デフォルトの名無しさん
垢版 |
2023/12/30(土) 00:42:52.50ID:slhZof7h
対偶と裏の違いがわかってないから変なゴールポストを幻視してしまうのでは?
2023/12/30(土) 01:02:25.15ID:CdBdHENn
『「バージョン1未満」は「信頼出来ない」と判断しているが「バージョンだけで判断」していない』

複製オジさんもビックリしてそう
754デフォルトの名無しさん
垢版 |
2023/12/30(土) 01:56:09.99ID:slhZof7h
>>753
はい中卒
>>751
居座るというか、俺へのレスがあるからお返事書いてあげているだけなんだよな
どっちかというと召喚されている
2023/12/30(土) 04:10:17.11ID:+VY2mXpj
>>754
具体的にどのクレートをバージョンナンバーにより採用した採用しなかったのかを書きなさい
756デフォルトの名無しさん
垢版 |
2023/12/30(土) 04:20:00.71ID:slhZof7h
>>755
人にものを聞く態度か? それが?
「しなさい」とか言う奴に対してまともな返事を書く気はない
757デフォルトの名無しさん
垢版 |
2023/12/30(土) 04:25:37.61ID:slhZof7h
いやそれはそれと俺が選ばなかったライブラリの話、真面目に答えると結構ちゃんと選ばないと分野がバレるな
2023/12/30(土) 04:26:52.37ID:+VY2mXpj
>>756
一度も具体的な話を書けないエアプログラマーはこのスレから去れ
759デフォルトの名無しさん
垢版 |
2023/12/30(土) 04:56:11.37ID:slhZof7h
>>758
自分もそうだろ
ブーメラン得意か
760デフォルトの名無しさん
垢版 |
2023/12/30(土) 05:03:26.73ID:slhZof7h
不毛な話に返信している自覚はあるので、俺に言及する奴が消えたら俺も書かなくはなるんだよな
ID:+VY2mXpjが具体的な話をしてくれたらそっちに話題が移るんじゃないだろうか
2023/12/30(土) 05:10:37.63ID:+VY2mXpj
>>759
バージョンナンバーで選んだことはないためそんな具体例は当然ない
バージョンナンバーで選んでいるおまえが具体例を出せ
762デフォルトの名無しさん
垢版 |
2023/12/30(土) 05:19:08.00ID:slhZof7h
>>761
「出してください」な
763デフォルトの名無しさん
垢版 |
2023/12/30(土) 05:21:27.73ID:slhZof7h
まあちゃんと「出してください」って言われても俺の分野がバレない奴があったか悩ましいが
764デフォルトの名無しさん
垢版 |
2023/12/30(土) 05:28:06.55ID:slhZof7h
こういうのは具体的を出すということ自体が結構難しいんだよな
>>761が使っているライブラリでバージョンが1未満のものを上げるとかしてくれたら話が早い
2023/12/30(土) 06:29:39.39ID:GnED1sKw
Rust勉強中。アノテーション注釈が出てきたところで流行らない理由をなんとなく察する
ヌルポとメモリーリークを防げるから個人開発で使う分にはいいけど。会社で広める気にはならない
学習コスト高いわ
2023/12/30(土) 10:07:43.55ID:bcJEqtzR
async traitが安定化されてる!!!
https://blog.rust-lang.org/2023/12/28/Rust-1.75.0.html
2023/12/30(土) 10:32:04.21ID:QGv3PFfa
>>765
アノテーション注釈ってなんやねん
無駄にラーニング学習コスト費用高い資料読んでね?
768デフォルトの名無しさん
垢版 |
2023/12/30(土) 11:16:50.31ID:kCUZZSzY
>>765
ライフタイム注釈ってタイプしたつもりで全然ちがう文字を打ち込んでた
the bookを読んでるだけだよ。疲れてたんだ…
2023/12/30(土) 11:33:27.15ID:d4YZn3CY
the book はきついよね
2023/12/30(土) 11:41:42.24ID:scaDM36O
staticを自粛する言語はみんな高コスト
チェリーピッキングみたいに最高値の近辺だけが高いという指摘はうさんくさい
2023/12/30(土) 12:22:34.64ID:WjlNag1n
>>768
非公式翻訳版を読んでるだろ
あれで学習したやつは例外なく使えないのが出来上がるからやめとけよ
772デフォルトの名無しさん
垢版 |
2023/12/30(土) 18:18:48.80ID:Ycw4kjfb
>>759
自分が具体的なことを書いていないという指摘は否定しないw
2023/12/31(日) 05:11:31.11ID:15iRFp/+
>>765
ライフタイム注釈はたいてい一意に定まりその時は省略できるから面倒にならないよ
省略できず明示的にライフタイム注釈を指定しないといけない場合は
例えば複数の参照を受け取り参照を返す関数などでそれら参照間の関係を指定する
2023/12/31(日) 10:19:28.53ID:kd8WxVq5
>>765
>ヌルポとメモリーリークを防げるから
メモリリークは防げない
ヌルポとメモリリークが防げればいいだけならNull Safetyを備えたGC言語で十分
775デフォルトの名無しさん
垢版 |
2023/12/31(日) 10:35:21.39ID:NOiZF6ke
なまじライフタイムを省略できるせいでライフタイム未修得でも書けてしまう言語なので、いざライフタイム省略出来ない時が来た時に脳がバグる
2023/12/31(日) 11:15:14.55ID:sbs7ggSq
ライフタイムの記述は省略できることはあっても常にライフタイムを意識しながら書かなきゃいけない
それに省略できない場面にも日々遭遇するから「省略できるから面倒にならない」みたいな初心者釣りはやめた方がいい

暗黙的に意識しなきゃいけないC++に比べればある意味面倒ではないという程度
2023/12/31(日) 11:24:54.37ID:rKdc/qeD
マクロやFFIのようなやや高度な機能を除いた基本機能の中ではライフタイムが一番難しくて一番面倒
性能と引き換えに受け入れなければいけない面倒臭さ
778デフォルトの名無しさん
垢版 |
2023/12/31(日) 12:07:26.58ID:8Uv46fmp
ライフタイム意識しなくても良いと騙されて書き始めた人間のがライフタイムに恐れを抱いて迂回しながら書いた至る所でcloneして値渡するコード
2023/12/31(日) 13:31:13.38ID:K3mMRoqD
まあ C++ と比較するとおおよそ良くなってると思うが C++ で不都合なく寿命管理できる能力があるなら Rust でライフタイムを明記するのを面倒と感じることはあるだろうな。
人類は駄目なので実際には頻繁に問題を起こすという現実があるんだけどさ。 わかってても間違うのが人類。
2023/12/31(日) 13:50:46.98ID:PS1jMjj+
お金を賭ければ失敗することもあるけど賭けなければどうということはない
どっちも現実なんだけどリスク回避=現実逃避だと思ってるのが人類あるある
781デフォルトの名無しさん
垢版 |
2023/12/31(日) 14:00:16.32ID:8Uv46fmp
C++で不都合なく寿命管理出来る能力があったらライフタイム管理なんて数文字タイプが増えるだけになのでは
2023/12/31(日) 14:02:49.07ID:JAX3toXP
>>779
Rustで性能&安全性優位になるのは積極的にスタックに積んで参照使いまくった場合だろうけど、c++だとスマートポインタとアロケータで最適化しとけという話になるからなぁ。

どんくらい性能差あるのかわからん。
2023/12/31(日) 14:05:38.66ID:K3mMRoqD
>>781
出来ると思ってるが実際には出来てないって話さ
2023/12/31(日) 16:01:28.24ID:r3ulhjhy
もうRustじゃ無理なんだよ
2023/12/31(日) 17:31:22.31ID:15iRFp/+
>>784
Rustが有利という話の流れの中で唐突にRustが何か無理なことある?
2023/12/31(日) 18:02:32.92ID:K3mMRoqD
プログラミング出来ない人は本当に出来ない。
C++ を使えているくらいの人なら Rust を (良いと思うかどうかは別として) 真面目に学べば使いこなせるだろうけど、初心者が最初に学び始めるには全く向いてないなぁと思うくらいのハードルの高さはあると思う。
2023/12/31(日) 18:29:47.72ID:15iRFp/+
プログラミング出来ない人にRustはハードルが高いという主張か
2023/12/31(日) 19:12:47.61ID:SnRIdEnt
ゴミには何触らせてもゴミ
2023/12/31(日) 20:25:01.01ID:d6XbubcX
>>786
単に最近のスクリプト言語が簡単過ぎるだけだと思うけどね
ブイブイ言わせてる()モダンなスクリプト言語使いが
俺たちRustも書けるっしょwみたいなノリで挑戦して
書けなくて諦めるというのを何度も見てきた
本来プログラミングってのはこの程度は難しいものよ
2023/12/31(日) 20:41:56.95ID:Asz1BteV
Rustを書けず断念するような低レベルの人ならば
他の言語でもまともなプログラムは書けないと思うけどな
2023/12/31(日) 22:03:37.75ID:682wQwxe
バージョンおじさんの次はスクリプトコンプおじさんか
2023/12/31(日) 22:07:53.39ID:fB+p+szm
ライフタイムは関数に渡すときborrowするだけなら何も難しいことはないんだが型に参照を含めていろんな操作をしたり持ち回ったりし始めると複雑度が急上昇する
2023/12/31(日) 22:22:03.06ID:Asz1BteV
そこは同じ
型に含まれてる参照のライフタイムがその型にも付くだけ
2024/01/01(月) 00:50:09.76ID:X6Py91w/
あけましておめでとうございます
ライフタイム面倒なので捨ててstaticにしたいそんな貴方へ魔法の関数プレゼント!

fn to_static_str(input: &str) -> &'static str {
  input.to_owned().leak()
}
2024/01/01(月) 19:58:44.82ID:SMFNndU8
the book で勉強中だけど覚えること多いなあ
構文を覚えるだけで70時間はかかりそう
デザインパターンの勉強は必要なさそうだけど
実践投入するには読経も20時間分ぐらい必要だろうな
2024/01/01(月) 22:17:40.22ID:nmIunYxl
90時間でも約11日稼働ならオンボーディングで
極端に辛いというほどじゃなくね
2024/01/01(月) 22:29:17.37ID:pmJAVvpO
>>795
Rustの構文は諸言語のバリエーション範囲内でほとんど同じ
強力なパターンマッチングとその構文が新規なくらいですぐ習得できる
798デフォルトの名無しさん
垢版 |
2024/01/02(火) 00:14:27.39ID:SHn+5kOU
Rustの勉強が大変なら勉強なんかせんでええ
Copilotに書かせてコンパイル通ればOKや!
2024/01/02(火) 08:32:02.80ID:xTyEZXhx
copilot は予測変換の賢いやつって感じ。
個々の場面では思ったよりも賢くて使い物になるが全体を構成するのに人の思考がいらないほど、全部丸投げ出来るほどではない。
出来る人が楽をするツールであって、できない人が使ってもまともなものは作れない。
800デフォルトの名無しさん
垢版 |
2024/01/02(火) 22:18:53.42ID:3cCPTdjI
>>792
どっちかというとそういうもち回しによる複雑な操作するなってのがrustの思想だろ
2024/01/03(水) 00:45:56.91ID:cT5UAedN
他の言語の習慣を捨てないとなかなか実践できないと思う
しばらく使ってるとRust特有のプラクティスが見えてくるけど
802デフォルトの名無しさん
垢版 |
2024/01/03(水) 00:58:25.14ID:WEsHc8Hy
全体を構成する部分が問題になってRustにノータイムで移行できない人間が書くスクリプト言語で書かれたプログラム、読みたくなさすぎる
2024/01/03(水) 18:10:43.49ID:AJuUFyM+
VSCodeとrust-analyzerでrustを書いている人にちょっとお聞きしたいんだけど、
rustのコード補完で、必ずabc順になっちゃうんだけど
直前に使用したメソッドを優先的に上位に表示させることってできないの?
VSCodeのエディタの設定でrecently usedを設定してもabc順でしか表示さない
InteliJIdeaでは学習した結果、使用頻度の高いものを上位に表示してくれてたのに・・
804デフォルトの名無しさん
垢版 |
2024/01/03(水) 23:00:13.67ID:parSgmbo
質問の仕方が間違っているぞ
そういう時は「補完もまともに出来ないクソ言語」って言えば信者が頑張って探してくれる
2024/01/04(木) 17:30:55.33ID:mYBU2Jpa
InteliJでは出来てたって書いてあるの読めない人なのかな?
こういう人がテストケースとか書いてると思うと怖くてたまらんね
2024/01/04(木) 17:56:16.02ID:dLQyUrS8
>>804は頭の弱いRustアンチの人だから無視しとけ
2024/01/04(木) 18:21:30.81ID:mYBU2Jpa
ごめんよ
rustが難しくて理解できない可愛そうな人だったか
808デフォルトの名無しさん
垢版 |
2024/01/04(木) 19:32:15.16ID:lFo5UMLf
誰も問題解決出来てなくて草
マジで糞言語なのか?
VSCodeでもPythonなら出来るぞこれ
809デフォルトの名無しさん
垢版 |
2024/01/04(木) 20:05:26.49ID:9Tnu7Lk1
>>776
これはそう思うわ。
そこが面倒ならそもそもrust使うことが面倒だろって気にしかならん。
2024/01/04(木) 20:44:14.40ID:5w1EWT82
普通にバグ報告すればいいのに
2024/01/04(木) 20:47:26.53ID:mYBU2Jpa
>>808
あらためてVSCode再起動したら普通に直近に選択したメソッドや変数が上位に表示されるようになった
ごめんね ぺこり

ちなPythonは入れ子のループの内側から外側のbreakができないから嫌い
2024/01/04(木) 21:51:07.65ID:dt0a6v34
InteliJ は rust-analyzer 使ってないんじゃなかった?
開発支援機能の基盤が違えば細かい挙動が一致しないのなんて当たり前過ぎて何が言いたいのかわからない。
2024/01/04(木) 22:28:32.21ID:4GGvVaU9
>>795の読経って何?
2024/01/05(金) 08:39:06.77ID:wSd1e+VK
>>813
https://github.com/BurntSushi
この人のリポジトリひとつ読んだら実装に移るわ
2024/01/05(金) 09:40:39.59ID:K2XmLAOd
Rustで書かれたLinux互換OS「Maestro」が爆誕
https://softantenna.com/blog/rust-maestro/
2024/01/05(金) 09:43:03.49ID:QSnLODWj
>>814
ああ、コードを読むのを読経と言ってるのか。ありがとう。
817デフォルトの名無しさん
垢版 |
2024/01/05(金) 13:58:06.60ID:p8td/CWz
読経なんかせんでええ
GPTに書かせろ
2024/01/05(金) 14:50:07.45ID:5Ddnqo9+
ソースはお経じゃねえぞ
2024/01/05(金) 16:26:15.51ID:qm5+loRz
写すと写経
読むと読経か

般若心経に波羅蜜多という単語が出て来る
修行の意味だが、修行を行った量という意味でもあり
英単語のparameterと同語源だという
引数か

ヤシの木palmとparameterも同語源って説がある
palmは手の平の意味だが手の指で文字を数えるとも繋がる
これがまた修行の量とか引数って概念に繋がる
またヤシの葉で分厚いパルミラヤシと呼ばれるものは経文を書くのに使われていた
経文を書いた量がまた修行のパラメーターとなった

ナツメヤシのことをdateというが日にちも数えるもの、デートも日にちを重ねて交流を深めるものとされた
ヤシの葉と修行と日にちと引数は常に数えるものとされた

一方で波羅蜜、パラミツというスイカの5倍くらいある果物もある
果実を輪切りにするとアナログ時計のように果肉が並び
時間を象徴するものだから?という話があるが、パラミツと波羅蜜多は特に関係がないという方が多い

インドにRust外注したら動くものは帰ってくるのかどうか
2024/01/05(金) 17:09:23.62ID:FktlJzQH
parameterのpara-はギリシア語由来の「離れている」では
parallel(平行)のpara-
2024/01/05(金) 19:03:58.53ID:kJ7MyVdE
>>815
爆誕出来てないじゃん。
仮に互換するにした場合、バグも再現するんかね?
822デフォルトの名無しさん
垢版 |
2024/01/06(土) 15:29:56.82ID:NPThFXTg
無理にひねくれたこと書かんでよろしい
2024/01/07(日) 02:08:36.16ID:eqr3i2HS
rustちょっと書いたけどなんかハマらんな
つまんない
刺激が少ない
俺は別に言語に安全性なんて求めてないんだ
刺激がほしいんだ
824デフォルトの名無しさん
垢版 |
2024/01/07(日) 02:15:40.93ID:k7dl9y2N
>>823
お前のチームのバグ出しまくる同僚に使わせたら?
825デフォルトの名無しさん
垢版 |
2024/01/07(日) 02:41:23.33ID:KA2Mqlfb
プログラミングそのものに刺激を求めるんじゃない
刺激はプログラミングで実現したいものに求めろ
826デフォルトの名無しさん
垢版 |
2024/01/07(日) 09:36:48.73ID:qkYZiPZe
rustはコンパイラにムチを打たれながらコーディングする性癖ドM言語だよ
自身の性癖と合う言語を使ってけ
827デフォルトの名無しさん
垢版 |
2024/01/07(日) 15:48:04.06ID:ujkX2rEF
Rustがムチ打つかレビューでムチ打つかの違いでしかないんだよな
誰にも見せないコードなら関係ないけど
2024/01/07(日) 16:53:56.32ID:FD9BMc1I
男は黙ってSegmentation Fault
829デフォルトの名無しさん
垢版 |
2024/01/07(日) 21:59:04.51ID:k7dl9y2N
>>827
レビューは体裁しか見ないやついるからな。内容読まないとかレビューになってねーから。
コンパイラにチェックさせたほうがマシ。
2024/01/08(月) 12:20:12.43ID:JTfbpR0w
刺激ってメモリリークでクラッシュとか、ストレージフォーマットとかか?
2024/01/08(月) 20:41:35.20ID:6GvPzxXI
スマートポインタについて勉強中。強い参照、弱い参照という概念が出てきて目が回る
RefCell……所有権の共有が発生する参照……参照???
言葉遊びが過ぎないか。。。
832デフォルトの名無しさん
垢版 |
2024/01/08(月) 21:50:36.68ID:VjyRCTjd
何書いてるかによるけど、出来ればスマートポインタ使わずに書きたい
2024/01/08(月) 21:56:10.69ID:a9mjVCEv
>>831
強い参照、弱い参照はRustやC++だけでなくJavaやC#、PythonやJavaScriptでさえ出てくる一般的な概念だぞ

RefCellは所有権の共有じゃないぞ

スマートポインタや参照という言葉もRustの定義を理解した上で学ぶ必要があるんだけどちゃんとした資料で勉強してるか?
834デフォルトの名無しさん
垢版 |
2024/01/08(月) 22:02:17.92ID:6GvPzxXI
>>833
目が回って頭が混乱してた。Rcのことです
the bookを読んでます。英語版と日本語版を読み比べならが進めてます
835デフォルトの名無しさん
垢版 |
2024/01/08(月) 22:04:58.02ID:6GvPzxXI
>>832
FSTという決定木を呼び出す実装を書く予定なんだよね
どこまで既存のクレートを使えるか次第だけど。たぶんスマートポインタ必須だろうなあ……胃が重い
2024/01/08(月) 22:45:23.91ID:U+1fQP74
>>831
説明するのには言葉を使うしかしょうがないだろう。
それとも小難しい記号だらけの操作的意味論を読み解くほうがマシとでもいうか?
2024/01/08(月) 22:56:58.99ID:DdO69zqE
>>835
まず前提環境が重要になる
たとえば並行はあるのか?並列はあるのか?両方あるのか?
あるとしても共有が必要なそれらの範囲はどこまでなのか?
それとは別の話で参照の共有と所有権の共有についても前者だけで済むのか後者も必要なのか?
など
2024/01/09(火) 00:03:40.70ID:8DV95bbu
>>835
木構造は普通にポインタ使うと地獄だよ
Nodeにポインタを持たせる実装ならRefCellとRcとOptionの組み合わせでゴニョゴニョやることになる
2024/01/09(火) 00:15:41.68ID:nS4EcHpr
配列にどんどん詰め込んでいって
ポインタのかわりにインデックスで管理するという方法も取れなくはない。
Rust で参照の取り扱いが面倒くさくなったときは割とよく使われる。
2024/01/09(火) 00:41:55.42ID:p6fXuzFt
Rustだから面倒になるのではなく
同じ方針ならばC/C++でも同じようになる
そしてどの言語でも同じく色んな方針を取ることができる
たとえばプログラム終了まであるメモリを解放しない&しなくてよい状況と方針ならば
CだけでなくRustでもそのようにプログラミングすることで簡単になる
2024/01/09(火) 00:48:52.81ID:71QF1ibn
Array/VecとMapでやる方が普通

てかスマートポインタで胃が重いとか言ってる人にFST実装させようとするのはどうなのか
学生さんの宿題ならいいんだけど
2024/01/09(火) 13:46:52.23ID:cAvIdAYQ
>>815
windowsこそrustで書き直して欲しい
2024/01/09(火) 14:29:03.17ID:ZeSQ9HCg
いやWindowsは消滅してくれ
Windowsのパス区切り文字がバックスラッシュだと面倒くさいんだよ
いつになったら他のOSのようにスラッシュになるんだ
2024/01/09(火) 14:42:13.51ID:W90zSzbf
そこでいまどき困るか?
ライブラリで吸収してくれるだろ
2024/01/09(火) 15:03:46.95ID:mDjH0FU9
困るのはそんなポイントではないわな
2024/01/09(火) 15:51:14.16ID:LmJT0Ko+
UNIX
https://learn.microsoft.com/ja-jp/cpp/c-runtime-library/unix

プログラムを UNIX に移植する場合は、次のガイドラインに従ってください。

・引数としてパスとファイル名を表す文字列を実行するルーチンでは、UNIX と互換性のあるパス区切り記号を使用します。 UNIX は、この目的でスラッシュ (/) のみをサポートしますが、Win32 オペレーティング システムでは、円記号 (\) とスラッシュ (/) の両方をサポートします。
2024/01/09(火) 16:00:24.31ID:OfKvL6VZ
WindowsはWSL2のおかげで立ち位置を少し取り戻した感ある
Docker×WSL最強なんだ
848デフォルトの名無しさん
垢版 |
2024/01/09(火) 16:26:04.96ID:dEgljR3a
Rustを学習していてよくわかんないんだけど、なんで&mut演算子って=の右側に書くの?
演算子を分けて&を右でmutを左にすべきことじゃないのか
2024/01/09(火) 16:31:10.75ID:T7+wXIHZ
>>848
変数がmutなのと参照がmutなのと意味が違うでしょ
2024/01/09(火) 16:38:48.96ID:7APTEGxI
不変なT型 T
不変な不変参照 &T
不変な可変参照 &mut T

可変なT型 mut T
可変な不変参照 mut &T
可変な可変参照 mut &mut T
2024/01/09(火) 16:51:10.28ID:/HMizx3H
それ複オジがよく書いてたやつだけど
そうやって書くと型の違いと変数のmutabilityの違いを混同しちゃうから良くないんだよね
2024/01/09(火) 16:57:39.62ID:FRUFivso
fn main() {
let mut foo = String::from("foo");
let mut bar = String::from("bar");

let a1 = &foo;
// a1の値も参照先(foo)も変更できない
// a1.push('o'); // 不可
// a1 = &bar; // 不可
println!("{a1}"); // foo

let a2 = &mut foo;
// a2の値は変更できないが参照先(foo)は変更できる
a2.push('o');
// a2 = &mut bar; // 不可
println!("{a2}"); // fooo

let mut a3 = &foo;
// a3の値は変更できるが参照先(foo)は変更できない
// a3.push('o'); // 不可
a3 = &bar;
println!("{a3}"); // bar

let mut a4 = &mut foo;
// a4の値も参照先(foo)も変更できる
a4.push('o');
a4 = &mut bar;
println!("{foo} {a4}"); // foooo bar
}
2024/01/09(火) 17:54:54.96ID:yDV9ZPsZ
>>815
先にfirefox互換のブラウザをRustで作れよ
2024/01/09(火) 20:29:20.32ID:OfKvL6VZ
>>815
ついにRustで書き切ったカーネルが出たか
素晴らしい😎
2024/01/09(火) 21:43:46.90ID:ba97u6j0
JythonみたいにRinuxとか呼ばれる様になるんかね
856デフォルトの名無しさん
垢版 |
2024/01/09(火) 23:30:54.91ID:kFOi0b9p
>>847
わかる
857デフォルトの名無しさん
垢版 |
2024/01/09(火) 23:33:35.76ID:kFOi0b9p
>>850
>可変な不変参照 mut &T
>可変な可変参照 mut &mut T

そこは
mut& T
mut& mut T
のほうが良くないか?
2024/01/09(火) 23:44:10.92ID:VWF/HjAU
>>857
なんでmut& Tやmut& mut Tのほうがいいと思うの?
2024/01/10(水) 00:26:25.61ID:50jzIioV
変数は不変 参照先も不変
【Rust】 let ptr: &i32 = ...
【C/C++】 const int* const ptr = ...

変数は可変 参照先は不変
【Rust】 let mut ptr: &i32 = ...
【C/C++】 const int* ptr = ...

変数は不変 参照先は可変
【Rust】 let ptr: &mut i32 = ...
【C/C++】 int* const ptr = ...

変数は可変 参照先も可変
【Rust】 let mut ptr: &mut i32 = ...
【C/C++】 int* ptr = ...
2024/01/15(月) 07:32:23.77ID:GWa8/EJ0
プログラミングをしていて最も出現頻度が高いのがその4つのうちこのパターンだな

>変数は不変 参照先も不変
>【Rust】 let ptr: &i32 = ...
>【C/C++】 const int* const ptr = ...

したがって可変部分のみmutを付加するRust方式が理に適っている
2024/01/15(月) 09:26:21.36ID:87NFfbL3
C/C++のconstとRustのletを対比するなよ
コンパイル時の定数と変数は違うから
2024/01/15(月) 10:46:44.96ID:6ZDKWey9
C/C++のconstはコンパイル時の定数とは限らない

> 変数は不変 参照先も不変
C++はconst int*で定義した変数経由では参照先を変更出来なくても他から参照先が変更されることがあるので「参照先が不変」とは言えない
2024/01/15(月) 11:01:12.76ID:AliX8x8r
>>861
コンパイル時の定数は
Rustではconst
C/C++ではconstexpr
2024/01/15(月) 11:06:03.10ID:YtourOsv
C/C++のconstはコンパイル時の定数となることもあるのがややこしいところ
constexprはそれを矯正するもの

1対1の単純な比較では抜け落ちるものが多すぎる
2024/01/15(月) 18:27:24.64ID:8IhMbXbn
イミュータブルの観点でこの対応は合ってる。
Rust: let foo: &i32 = ...
C++: const int* const foo = ...
ただし違いとしては、
Rustではfooが生きている間は参照先が(内部可変性を除いて)真に書き変わらない保証がある点が異なる。
2024/01/17(水) 18:48:37.40ID:6S0S7+zy
この件はC++と比較しても刺激が少ない
mutがない関数型言語と比較するほうがいい
2024/01/17(水) 19:39:11.45ID:gS91WelD
ミュータブルを無くすと美しく見える反面
ガベージコレクションが多数発生し効率が悪くなる
アルゴリズムも制約を受けてしまい効率が悪くなる
2024/01/17(水) 19:42:50.91ID:NPS8JVAZ
Linuxカーネルについに実用的なコードが
マージされたと話題になってるな
2024/01/17(水) 20:07:47.38ID:ouelKdFS
>>868
新規追加するドライバにだけ採用とか前に言ってなかったっけ?
2024/01/17(水) 21:08:18.79ID:6S0S7+zy
>>867
ガベコレが多数発生することをRust風に言うと、
実行時の参照カウントが激しく増減する
2024/01/17(水) 21:16:06.79ID:gS91WelD
>>870
ミュータブルがない関数型言語との比較の話だから
ミュータブル非導入で起きていることは使い捨て一時ガベージの大量発生
2024/01/17(水) 23:31:19.01ID:6S0S7+zy
cloneに似た処理をしてからオリジナルをdropするんだよね
2024/01/18(木) 04:18:08.52ID:p4+mv2Ay
RustはカーネルやOSコアの開発で存分に活躍してくれ🙏
2024/01/18(木) 06:21:12.49ID:vxth9lRp
ぺたんこおっぱい
ぽっこりおなか
つるつるわれめ
875デフォルトの名無しさん
垢版 |
2024/01/19(金) 01:46:37.00ID:qsekRxP5
プログラミング言語利用実態調査でRustが急落
https://www.nikkei.com/article/DGXZQOUC223M10S3A221C2000000/
876デフォルトの名無しさん
垢版 |
2024/01/19(金) 08:43:59.73ID:q7Fi5Auv
>>875
それ日本だけのアンケートじゃん
2024/01/19(金) 08:55:08.16ID:v7odrc0V
登録が必要な記事貼るとか
2024/01/19(金) 10:17:52.92ID:9hGbEahh
>>875
日本でもクソ言語ってバレ始めてるなw
2024/01/19(金) 10:49:32.99ID:Z0EBK6tx
そもそもrustを使う場面があるか?って話
wasmは始まる前からオワコンだし、組み込みシステム開発してる人なんて割合で見ればプログラマの中でごく一部だし
2024/01/19(金) 11:13:07.05ID:vjpbBz8R
>>879
ごく一部だというのが仮に事実だとしても、少ないからって要らないってわけでもないだろ。
そこそこの規模だと C よりは Rust のほうがいいわ。
2024/01/19(金) 11:19:17.56ID:EYCY+PGA
>>875
ちゃんとリンク貼れ無能

スキルアップしたい言語はPythonとJavaScript、不動の不人気言語はCOBOL
安藤 正芳 日経クロステック/日経コンピュータ
https://xtech.nikkei.com/atcl/nxt/column/18/02670/112900003/
2024/01/19(金) 11:27:47.52ID:uugkJRQ7
「実際に仕事で使われているプログラミング言語」(2023)
https://qiita.com/mmake/items/b346cb32ccc3bcb5d03f

日本でのRustの使用実態が全く見られないの笑えるな
883デフォルトの名無しさん
垢版 |
2024/01/19(金) 11:34:00.68ID:EoDClT2o
Rustは業務で使用する言語ではない
2024/01/19(金) 11:36:55.28ID:arzVgFZ3
使われてる言語ランキング見てると、CやC++、Rustみたいな組み込み開発用言語は全体から見ればもはやプログラミングの中でもマニアックな分類なんやね
ブログラマといえばWebサービス関連の人ってイメージになっちゃった
2024/01/19(金) 11:48:30.00ID:vjpbBz8R
とはいえそれを支えるホスト環境 (OS) や処理系は大抵の場合に C とかで書かれてるんだけどな。
2024/01/19(金) 11:49:23.47ID:pW7O4nZv
RustがC/C++の代わりになるのは間違いないのだけれどね
富士通さんはRustの普及をもっと頑張ってくれよ
2024/01/19(金) 12:01:24.14ID:pW7O4nZv
>>885
C/C++からRustへの書き換え作業は大変だからね
脆弱性の解消のために徐々にRustへの置き換えが進んでるから2030年頃にはだいぶ完了してるっしょ
2024/01/19(金) 12:05:10.29ID:pW7O4nZv
有名どころだと
ProssimoがsudoやzlibのRust実装を頑張ってるよね
https://github.com/memorysafety
2024/01/19(金) 12:05:22.87ID:vjpbBz8R
デバイスドライバとかは C のほうが楽だけど
言語処理系くらいのレイヤだと大部分は Rust で書いたほうが楽そうだなーとは思う。
2024/01/19(金) 12:26:38.25ID:CZFLW0PQ
そろそろ実装に入れそうだけど。Rustを勉強したことを少し後悔ぎみ
オブジェクト指向言語しか触ったことなかったから取得するのにガチで一ヶ月(130時間)かかった
chatgptに聞いた感じだと、これでも割と早い方らしい。おとなしくC/C++を使えばよかった
891デフォルトの名無しさん
垢版 |
2024/01/19(金) 12:33:55.04ID:3hcnICbb
【AI】Googleの医療面接特化AI「AMIE」は人間よりも正確な診断が可能&患者への印象に優れるという研究結果 [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705583722/l50
【AI】Google DeepMindが数学オリンピックレベルの幾何学問題を解けるAIを発表、人間の金メダリストに近い性能を発揮 [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705583476/l50
【AI】大学入試共通テスト、3つのチャットAIに解かせてみたら? GPT-4はバケモノだった [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705585402/l50
【ナゾロジー】「株価の変動を粒子の振動として理解」量子力学で株式市場の法則を読む! [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705583580/l50
【AI】NTT、自分の分身AIを低コストで作る技術。自分の合成音声を簡単に作れる技術も [すらいむ★]
https://egg.5ch.net/test/read.cgi/scienceplus/1705583313/l50

ボイス・トォ・スカルのコアプログラムの一部は上記を統合している
2024/01/19(金) 13:26:04.84ID:eEzmAF9q
>>890
130時間はサンクコストなので0時間の時点における正解は現時点でも正解
ってAIは教えてくれなかったの?
2024/01/19(金) 13:41:00.69ID:CZFLW0PQ
C/C++, java, pythonの経験があるから、Rustを取得するのに50時間かからないだろうと思ってた時期が僕にもありました
ヌルポが怖いからRustを使うけど……歯を食いしばって捻出した130時間を投資回収できるかは神のみぞ知る
2024/01/19(金) 13:47:10.87ID:vjpbBz8R
C/C++ の経験があってそんなに時間かかるか?
「習得」というのがどの程度の基準で見るかにもよるけど
いわゆる the book を一通り読んだ後なら
コンパイラがあまり助けてくれないところ (unsafe) を除けば
マニュアルを見ながら書けばだいたいなんとかなる程度には使えそうなもんだと思うんだが。
2024/01/19(金) 13:56:01.98ID:arzVgFZ3
C/C++を適当にやってたせいでRustでつまづくってのはありそう
2024/01/19(金) 14:12:09.59ID:CZFLW0PQ
>>894
最近はpythonで仕事する機会が多くて、C/C++を4年ほど触ってなかったのと、
仕事の後に疲れた頭で勉強したから体力的にキツかったのと。。。
the bookを読むだけで90時間はかかったわ。検索モジュールを開発しようと思ってるんだけど
いきなり実装に入るより読経した方がマシな感じで、regexのコードを読んでる
既に10時間読経に捧げて、あと10時間は追加の読経が必要な感じ
この後、形態素解析エンジンのコードも読む必要があるから、追加で20時間はお勉強する予定であわせて130時間
……重いです
2024/01/19(金) 14:23:24.55ID:arzVgFZ3
>>896
おつかれよくがんばった
2024/01/19(金) 14:50:46.17ID:tvouuqwU
>>896
the bookでの90時間の中身がわからないので何とも言えないかな
bookだけを読んだのか
それともdocsやreferenceと行き来して読んだのか
サンプルコードくらいのことを書けるようになっただけなのか
それとも各機構や機能を本質的に理解したのでdocsなど見ればbookに書かれてないことも書けるようになったのか
などピンキリだよね
2024/01/19(金) 15:08:45.88ID:IG9zAVYP
>>890
一般的にですが、
自分が使いたい新たな言語の学習で、辛いとかキツいとか後悔とか感じる人はプログラマーに向いていません。
プログラマーに向いてる人たちにとっては、新たな学習や会得はワクワク楽しくてその時間を後悔することもありません。
900デフォルトの名無しさん
垢版 |
2024/01/19(金) 15:23:39.42ID:w30sYh7E
>>899
禿同だな
901デフォルトの名無しさん
垢版 |
2024/01/19(金) 15:25:17.10ID:1KLWZB9m
件の人は質問がどれもバカっぽかったから習得からは程遠い印象
2024/01/19(金) 16:19:14.85ID:vjpbBz8R
Rust の個々の機能が難しいとは感じないけど
綺麗に噛み合うように全体を設計するのは C++ とは違う感覚が要るから
大きいプログラムを綺麗に設計しようとしたら最初はしんどいかも。
ボトムアップ的なスタイルで書いていくのをオススメする。
2024/01/19(金) 16:39:45.44ID:8qrrLmZj
逆かな
みんなリファクタリングが機能しないからRustだとボトムアップじゃだめだと分かっかんだよ
2024/01/19(金) 16:40:26.29ID:Rx8gKVuk
the book自体の難しさがあるというか
2024/01/19(金) 17:22:29.33ID:5TL7zSTv
the bookを頭から読むやつなんているんだ
大してわかりやすくもないし
説明が冗長な感じだからChatGPT使った方が良いぞ
2024/01/19(金) 17:23:51.53ID:vjpbBz8R
初心者にとって知らんことが書いてあるんだからそんなにスラスラとは読めないのは当たり前だし、文章自体に問題があるようには感じないな。
改善すべき点がゼロなわけではないが、少なくとも C++ を分かっているくらいの人が最初に読むには十分すぎるほどに良書じゃないの。
2024/01/19(金) 17:34:10.12ID:vjpbBz8R
説明対象がもつ難易度より分かりやすい説明があったとしたらその説明は嘘であるか不足しているってことだ。
本来の難易度は後にならないと分からないから学習者本人には見分けられない。
2024/01/19(金) 17:55:40.81ID:88sLHWJm
ガリ勉完璧主義者ほど隅から隅まで理解しようとするけど
要領よくChatGPTを使いこなすチャラ男に天然GPTとしてカモられている
2024/01/19(金) 18:00:19.70ID:88sLHWJm
天然GPT本人はマウントして気持ち良くなりたいから他のみんなと勉強会じゃなくて家でガリ勉なんだ
2024/01/19(金) 18:05:32.43ID:5TL7zSTv
作りたいものを決めてそれを実現するための知識をChatGPTで調べるというやり方のほうがはるかに効率が良いよ
多少間違ったこと教えてきたり
古かったりするけどそれはもう気にしてたら仕方がないので
無視してどんどん手を動かすほうが良い
911デフォルトの名無しさん
垢版 |
2024/01/19(金) 18:15:21.92ID:1hwMDgMT
The Bookは簡潔にまとめるために説明をやや端折り気味
書いてる内容自体が難しいわけじゃないけど深い理解には至らないから腹落ち感を得にくい

あんまり期待しすぎず無料で読める基本チュートリアルとして捉えておくべき
2024/01/19(金) 18:26:39.26ID:OWRF5bQs
ところでこのスレには組み込み開発でRustを使ってる人はいるの?
913デフォルトの名無しさん
垢版 |
2024/01/19(金) 18:38:50.67ID:5qNxVIXw
組み込みは頭おじいちゃんが支配してるからRust使える人いないよ
2024/01/19(金) 18:49:19.87ID:AbS8PLZw
そう組み込みも重要な分野だから、これにRustが皆無な時点で大手では大々的に採用されていないって事、せいぜい窓際
「実際に仕事で使われているプログラミング言語」(2023)
https://qiita.com/mmake/items/b346cb32ccc3bcb5d03f
2024/01/19(金) 18:52:09.31ID:wGMq60ju
そうだ窓際追い出し目的でおじいちゃんにRustやらよう
2024/01/19(金) 18:53:27.57ID:wGMq60ju
そうだ窓際追い出し目的でおじいちゃんにRustやらせよう
本当にあるな
2024/01/19(金) 18:54:40.94ID:75Zji/CQ
今時の組み込みって何使ってるんだろ?
2024/01/19(金) 18:55:15.30ID:Nlxayr7x
>>903
Rustでもリファクタリング前提で書き始めるのがいいよ
早すぎる構造決め打ちや早すぎる最適化などはせずリファクタリングで対応
2024/01/19(金) 19:00:48.51ID:SK8TlxrV
>>899
んなアホな。
一般的というなら「石の上にも三年」とも「下手の横好き」とも言うから、嫌いだからと言って不向きとは言えない。
2024/01/19(金) 19:08:03.87ID:pqBZI8v7
格言おじいちゃん、窓際組み込み?
2024/01/19(金) 19:08:58.61ID:pqBZI8v7
格言は説得力とは真逆だと思うの
2024/01/19(金) 19:10:50.73ID:+7/a4sFt
自分がこうだから他人もこうあれ
って考えは時代にそぐわない老害感がある
2024/01/19(金) 19:11:44.46ID:pqBZI8v7
論理的でもなく屁理屈にも劣ります
2024/01/19(金) 19:12:08.48ID:SK8TlxrV
>>896
Rustは絶壁の学習曲線だから、段階的な学習は難しい。少なくともスタックフレームの動きを意識できないとキツイと思う。

Rustを使った開発も、小さく始める段階的開発とかきついんじゃない?ひたすらスクラップ&ビルド繰り返しそう。
2024/01/19(金) 20:04:18.16ID:U1u9K+K0
>>924
スタックフレームはコンピュータの基礎知識であってC言語でも必須でありそれをRustの問題にする人はいない
段階的開発がキツいという主張もそんなことはなく根拠もない
2024/01/19(金) 21:01:18.97ID:vjpbBz8R
全体を綺麗に構成することはしづらくても小さなモジュール単位でならそれなりに構成できるからそれを繰り返せばいい。
全体の構成を考えてから作るよりは汚いだろうけど、綺麗な全体の構成を考えるなんていう出来もしないことをやるよりはそういうボトムアップ方式のほうが少なくとも途中まではまあまあに出来る。

もちろんちゃんと全部をまともに構成できるだけの能力を身に付けられるならそれに越したことはないよ。
でも実際問題として初心者にはできないじゃんと思ったからボトムアップ方式のほうが(初心者の内は)よさそうと考えてる。
2024/01/19(金) 21:22:17.40ID:U1u9K+K0
他の言語と同じ
そこにRust固有の問題はないな
2024/01/19(金) 22:20:52.17ID:5TL7zSTv
>>924
意識するのはヒープじゃないか?
スタックフレームは解放されるんだから意識しないで良いんだぞ
2024/01/19(金) 22:39:11.81ID:vjpbBz8R
変数の寿命と連動するから意識するよ。
C/C++ の世界だと当たり前のことだから意識してる自覚すらないレベルで自然に考えてるけど。
2024/01/19(金) 22:39:43.86ID:eEzmAF9q
人格をもたない書物は効率が悪いという風潮は面白い
人格がなければ報酬とか私刑とかができないってことだろうか
2024/01/19(金) 22:43:52.06ID:Hr4uH45j
進行が早くなったのでいつもの
次スレはなしで既存のワッチョイスレにしよう
過疎るのは既定路線なので頃合いでしょ
2024/01/19(金) 23:05:04.70ID:Rx8gKVuk
「スタックフレームを意識する」というのはどの程度を指してるんだろう。
どれがスタックに積まれるかとどうスタックに積まれるかは違うわけで。
933デフォルトの名無しさん
垢版 |
2024/01/19(金) 23:24:13.49ID:LbAGY+B7
>>924
スタックフレームの動きってプログラミング初心者でも何の問題もなく理解できるやろ
学習曲線めちゃ緩やかじゃん
2024/01/19(金) 23:35:33.58ID:QqY+6sl7
オラから『Rustの練習帳』って新刊が出るんだね
タイトルがエモい
2024/01/19(金) 23:44:43.13ID:NtpPLEep
ワクワクすっぞ
2024/01/20(土) 00:29:37.21ID:zhjwtCng
オライリーをオラと略す人は初めて見た
2024/01/20(土) 00:46:25.56ID:B5JkVzvF
そう?
オラの村では普通だでね
938デフォルトの名無しさん
垢版 |
2024/01/20(土) 01:10:08.13ID:ppE6WkEJ
都会は進んでるなあー
2024/01/20(土) 01:16:50.20ID:zhjwtCng
ミスチルはわかるんだ
ミスター・チルドレンは長いから
サザンもサザンオールスターズは長いからわかる
マクドもマクドナルドは長いからギリわかる

オライリーをオラは無いだろ
たかが2文字略すなと思った

ま、どうでもいいんだがな
2024/01/20(土) 01:51:39.52ID:HZE0SdTu
スクリプト言語出身者が増えたせいだよ
スタックフレームやヒープなんてCSやってりゃ習うでしょ
コンパイラかコンピュータアーキテクチャでやる
スクリプト言語はスタックフレームの開放も全てGCがやることになるから
全く意識しないんだよな
2024/01/20(土) 01:55:10.81ID:ppE6WkEJ
スクリプト言語に限らず、C/C++を書かなければそこら辺に気を使う機会はないよ
2024/01/20(土) 07:57:38.44ID:lqSANakz
>>937
公式にオラの村ってのがあるよね
2024/01/20(土) 08:33:10.42ID:QXcnqV7m
GCありでパフォーマンスも関係ないなら、スコープだけ気にしていれば困らないしね。
2024/01/20(土) 08:49:07.11ID:G76ZEaWY
>>939
マクドじゃなくてマックね
2024/01/20(土) 09:18:20.17ID:viZi/CYZ
webサービスまわりは全部スクリプト言語かGCランタイム付き言語だもんなあ
2024/01/20(土) 11:01:53.93ID:ppE6WkEJ
最近は組み込みもC/C++を使う理由がないことが多い
947デフォルトの名無しさん
垢版 |
2024/01/20(土) 11:38:27.03ID:lE+lj03S
オラは「Rust for Rustaceans」の訳書出さないな
本格的にRustやるなら必読書なんだけどな
948デフォルトの名無しさん
垢版 |
2024/01/20(土) 11:42:02.65ID:o5qofGYG
スクリプト言語はともかく静的にコンパイルする言語ならGC言語でもスタック/ヒープは意識するけどね
2024/01/20(土) 12:07:36.77ID:KBzblFQB
>>945
CPU時間(ミリ秒)あたりで課金されるからこそのRustだよ
2024/01/20(土) 12:23:09.39ID:+uoYRouQ
オンプレミスでも同じ
Rustで書くかスクリプト言語で書くかでサーバーやメモリの必要量が何倍も変わる
電気代も節約できRustはエコにも貢献
2024/01/20(土) 12:30:18.74ID:KBzblFQB
そう、CO2排出量を考えたら、Rust以外で書くのは社会にとっての悪
2024/01/20(土) 12:33:36.69ID:wJQgtkwZ
昔は全体の性能に余裕があって I/O (ストレージと通信) が極端に足を引っ張る状況だったから言語処理系の動作速度は問題にならなかったけど今は全ての性能をギリギリまで絞り出す勝負に変わってる感じだね。
2024/01/20(土) 12:46:54.29ID:+pH1NoHl
Rust言語は
・タイプセーフ、メモリセーフによる高い安全性
・並列プログラミング処理設計
・ガベージコレクタのようなランタイム無しに動作
だから、これらを活かせる製品に採用したらいいんじゃないかな
いまどきそんなのは組み込みロボットとかカーネルやエンコーダデコーダくらいしかないような気がするけど
2024/01/20(土) 12:56:12.54ID:UT8XEnd7
>>953
その条件ならウェブに向いてるね
そして実際に使われてるね
2024/01/20(土) 13:15:54.83ID:KWXCbsaH
ウェブっていうかwasmじゃね?
rustじゃないけどffmpegのwasm実装は使ったことある
2024/01/20(土) 13:17:39.73ID:NDqmkpk/
>>954
Webって言っても大規模なユーザーがいるようなものじゃない?

大した事無いサービスで、スペック高い人が必要なRustはまだまだ辛い気がする。Javascript並みに誰でも使えますって世の中になったらRust一択でも良いのかもしれないけれど。
2024/01/20(土) 13:22:10.20ID:KBzblFQB
AWSもGCPもサーバーレス環境とかのランタイムや下周りがだいたいRustで書いてある
958デフォルトの名無しさん
垢版 |
2024/01/20(土) 13:22:24.95ID:lxegQoou
CO2排出量は難しいな
Rust書けない人間がCO2排出するだけのうんこ生産機になってしまうのもあんまエコじゃない気がする
2024/01/20(土) 13:24:24.78ID:tKcafxZR
actix-webはどうなん?自分はよく知らんのだが使ってる人いるんけ?
2024/01/20(土) 13:24:56.70ID:NDqmkpk/
>>958
そんなこと言ってると、Rustへのリスキリング時のco2排出量もRustのコストって言われちゃうぞ。
2024/01/20(土) 13:27:59.09ID:KBzblFQB
CO2排出量を考えて、コンパイル中は息を止めている
962デフォルトの名無しさん
垢版 |
2024/01/20(土) 13:34:01.02ID:vYJJrZqN
JavaがOracle事件で終わって脱SpringでRustのActixがついに普及するかなと思ったらC#のASP.NETにみんな行っちゃった
2024/01/20(土) 13:39:08.81ID:tKcafxZR
>>962
そうなんか…
2024/01/20(土) 13:57:32.93ID:ngmk9luX
Javaが脱Springなんて馬鹿げた事言い出してるのかと見間違えたが
脱Javaの話か

Rustは学習コスト高いからJavaでやってた様な大人数プロジェクトには向かんだろう
2024/01/20(土) 14:59:14.28ID:ppE6WkEJ
みんな経済合理性でRustを選択するんだよな
2024/01/20(土) 15:49:27.64ID:w9m16ZcP
>>952
特に機械学習ではその方向が顕著
MLIRみたいにSIMDやGPUを使う前提でIRが設計されてる

Node.jsが切り開いた非同期IOの登場もでかい
これによってIOの比重が高いプログラムでもIO待ちがなくなり
さらにマルチコア、GPUを活かせる環境が整った

一方Rustはtokioなどの非同期IOを実現できるフレームワークが山のようにある
さらにSIMD命令を直接使える仕様も整備されてきている
(LLVMの最適化によって勝手に使われることも多いが)
マルチスレッドは言わずもがな
他の言語でこれらを全てサポートしている言語はない

現在の最先端の環境を活かせる言語は他に選択肢がない
2024/01/20(土) 16:00:45.48ID:tKcafxZR
RustのWebアプリケーションは未履修だけどぜひやりたいなあ
2024/01/20(土) 18:46:27.21ID:PTOG17pe
>>954
Webで使うにはTokioなどの重量級ランタイムが必要
ただ利用するだけなら難しくはないけどエコシステム含めそこまで安定しているものじゃないのでランタイム含め自力で修正できる力が必須
969デフォルトの名無しさん
垢版 |
2024/01/20(土) 18:55:33.87ID:I+Fu8n3P
>>964
90年代後半にコボラーがJavaでWebアプリを作れるようになるための学習コストに比べればRustの学習コストは断然低い
2024/01/20(土) 19:12:06.87ID:6DBgVQg4
>>969
その時期にいた純粋コボラーって定年間際のジジイじゃん。そりゃ学習コスト高いわ。
2024/01/20(土) 19:21:51.44ID:w9m16ZcP
httpclientもそれぞれのイベントループに対応したものをつかわないとダメだから割と面倒なんだよね
使い方もフレームワークによってかなりクセが違っていて面倒だし
ぶっちゃけWebはGoやpythonでいいんじゃねーかって思う
2024/01/20(土) 19:26:03.92ID:tKcafxZR
Goでいいは分かる
2024/01/20(土) 19:56:32.80ID:k6CjZuQW
Go のランタイムサポートは分厚めだがどうせ要るもの(やること)と考えればそんなに速度的に不利なわけではないよな。
2024/01/20(土) 20:11:15.24ID:u/fg5YR1
速度的にはGoで十分なんだけど型とか貧弱すぎるんだよな…
sumタイプとパターンマッチくらいは欲しい
2024/01/20(土) 20:17:19.49ID:tNrs3Odf
>>968
tokioは他言語と比べて大きくない
そして安定している

>>971
各言語に複数のイベントループライブラリがあってその通りだが
Rustはデファクトスタンダードがあるためそこで困ることはない
2024/01/20(土) 21:17:45.54ID:w9m16ZcP
>>975
いやデファクトがあるのは良いけど
例えばコマンド実行1つとっても
tokio::process::commandとか使わなきゃいけなくてなんだかなあと
非同期版じゃないのと区別しなきゃいけなくて嫌気が刺す
まあpythonもasync使えば同じことなのだけど
2024/01/20(土) 21:24:03.71ID:w9m16ZcP
まあ俺はRust信者だから使うのだけど普通の人はなかなか辛いんじゃないかなーと
その点Goは何も考えなくて良いしpythonもasync使わなけりゃ同期的に書けるし
2024/01/20(土) 21:48:04.29ID:USm4U3n4
>>976
PythonもasyncはそうだしJavaScript(Node)も同期execと非同期exec分かれているし
動作が異なるのだから別になるのは当たり前

もちろんRustでも同様で
そもそも関数の返り値が異なる
だから関数が分かれているのは正しい
したがって一番下位のライブラリが別であることに何ら問題はない

一方で中位ライブラリ作成側の視点に立つと
同期か非同期かだけの違いでasync/awitを除いて全く同じ構造の関数を作ることになる
そのため『?async』キーワードによるジェネリック化がRustでは進められている
期待しているのはこの話でよいのか?
2024/01/20(土) 23:05:04.71ID:w9m16ZcP
>>978
いや見た目は似ててもpythonとはだいぶ違うよ
まずpythonでのasync defは単なるコルーチンオブジェクトなので非同期とか関係ない
これにより恐ろしい柔軟性を持ってる
さらにWebにおいてはASGIという非同期Webフレームワークが満たすべき仕様をまず決めた
その仕様を満たしさえすればどのような実装でも非同期の機能を満たせるような仕様となっている
そこにはもうイベントループなどの概念は消え去っている
さらに同期版と同居できる仕様となっている
なのでdjangoなどは同期版と非同期版の切り替えが可能となっている
このように明らかにユーザーフレンドリーな姿勢を貫いている
2024/01/20(土) 23:17:14.31ID:wyzQTwgG
>>979
Rustのasyncもコルーチンだぞ
まずは理解してから出直して来い
2024/01/20(土) 23:26:48.19ID:HZE0SdTu
>>980
コルーチンではないでしょ
2024/01/20(土) 23:49:39.00ID:nUH4CzWh
Rustのasyncはstackless croutineでstate machineとなっている
個別stackのresouceもswitchingも不要なため軽くて有利
2024/01/20(土) 23:50:29.43ID:u/fg5YR1
Rustのasyncは(スタックレス)コルーチンである
Rustのasyncは(スタックフル)コルーチンではない
どっちも正しいとは思うけど
984デフォルトの名無しさん
垢版 |
2024/01/21(日) 10:13:23.50ID:VnWGTEfZ
>>977
Rustが活きるのってやっぱり軍事系じゃないかな
兵器の制御とかGCなんてもってのほかだし速度も必要
メモリリークも起こせない
2024/01/21(日) 11:18:24.63ID:JCOE1HZY
DAD御用達?
2024/01/21(日) 11:24:54.33ID:8LqvrPkW
物理攻撃にソフトウェアを活用するってある意味「お花畑」だよな
987デフォルトの名無しさん
垢版 |
2024/01/21(日) 11:29:12.59ID:7K9itJgV
パパ活か?DoDだろ
DoD御用達はAdaだぞ
988デフォルトの名無しさん
垢版 |
2024/01/21(日) 11:46:34.67ID:VnWGTEfZ
やっぱりAdaしかないか
プリプロセッサ使うのもNGだからマクロがダメなんかな
2024/01/21(日) 11:59:39.08ID:dFB+Bg2+
とはいえF-35はC++だったんだし、そのうちRust採用されてもおかしくはないけどな
2024/01/21(日) 12:09:12.81ID:4CYZ0hXB
The Book読んでコード打ち込んだりしたが理解できた気がしない
次はどうすればいいの
2024/01/21(日) 13:24:30.49ID:8LqvrPkW
仕様の次は実装とか
いま極端なところにいる奴は次はもう一方の極端に行けばいいし
ちょうどいい位置にいる奴は一生そこに居続ければいいのでは?
992デフォルトの名無しさん
垢版 |
2024/01/21(日) 14:20:11.30ID:sCtD39A+
>>990
理解できてないと感じるのがunsafeやasyncやマクロ辺りならそこは一旦放置して小さいCLIツールをいくつか書いて実践経験を一度積むほうがいいかもしれない

逆にownership/reference/lifetime/generic/traitといったコアなところが理解できてないと感じるならオライリー本など別の入門書をすすめる
993デフォルトの名無しさん
垢版 |
2024/01/21(日) 15:14:08.20ID:eSjvKxMy
>>989
Rustは使われない
ISOプロセスは産業界の評価が高い
994デフォルトの名無しさん
垢版 |
2024/01/21(日) 15:15:15.91ID:eSjvKxMy
F-15は50年以上空を飛んでいることを思い出してほしい
Rustは50年後存在しない
2024/01/21(日) 15:44:39.63ID:cX88PWDV
>>993
Rustのスポンサー欄を見ればわかるけど将来Rustが使われるのは確定されたことだぞ
アンチさんどんまい
2024/01/21(日) 15:46:08.09ID:4rk7TZPC
統計学的に会社や国家、生物種の存続見込みを解析した例を見たことが有るな。
これまでの歴史が長いものはこれからも長く続く可能性が高い。
2024/01/21(日) 15:50:57.32ID:eziZnnQK
>>996
Javaみたいにホストがアホなことするとすぐ廃れるけどな
2024/01/21(日) 16:55:47.23ID:4CYZ0hXB
>>992
ありがと
2024/01/21(日) 19:43:22.00ID:/dcZ0aWP
次スレ
Rust part22
https://mevius.5ch.net/test/read.cgi/tech/1705760500/
2024/01/21(日) 20:22:28.74ID:mpR7a4j6
>>994
C++みたいに、色々な実装がでてくれは、50年後にも生きてるんじゃない?
10011001
垢版 |
Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 158日 21時間 57分 50秒
10021002
垢版 |
Over 1000Thread
5ちゃんねるの運営はUPLIFT会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《UPLIFT会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
4 USD/mon. から匿名でご購入いただけます。

▼ UPLIFT会員登録はこちら ▼
https://uplift.5ch.net/

▼ UPLIFTログインはこちら ▼
https://uplift.5ch.net/login
レス数が1000を超えています。これ以上書き込みはできません。
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況