Rustとか言うダブスタ言語 (173レス)
1-

38: 2024/10/19(土)00:29 AAS
全く見たことがない言語なんだ、なんか発狂している海外のエンジニアを見るとこの言語は大丈夫なのかとは思う
39: 2024/10/19(土)02:18 AAS
名前通りだよまったく
40: 2024/10/19(土)05:07 AAS
rustではコピートレイトが実装されてる型というのがあって、基本的にはプリミティブな型がそれに相当するの。で、それらはスタックに確保されるから解放しなくていいの。コピートレイトを実装出来る条件というのがあって、デストラクタが不要な物に限るの。解放しなくていいものだけ。わかりやすいでしょ?
41: 2024/10/19(土)07:17 AAS
ヒープに確保したらどんな型だろうが開放しないといけないのでは?
42: 2024/10/19(土)08:22 AAS
i32型ならスタックに確保される。
ヒープに確保したかったらBox<i32>で、それはもう別の型。なのでコピー出来ない。
43: 2024/10/19(土)08:47 AAS
わあわかりやすい
44
(1): 2024/10/19(土)09:07 AAS
デストラクト不要のプリミティブ型は小文字で書かれてて、それ以外の型は大文字で書かれてるでしょ。
一応その辺でCopyが出来るか区別つくようにはなってる。
45
(1): 2024/10/19(土)09:39 AAS
米ホワイトハウス「ソフトウェアはメモリ安全でなければならない」との声明を発表:「C」「C++」よりも「Rust」などのプログラミング言語を推奨
https://atmarkit.itmedia.co.jp/ait/articles/2403/18/news045.html

米国国防総省のDARPA、CからRustへのコード変換を自動化する「TRACTOR」プログラムを開始
https://atmarkit.itmedia.co.jp/ait/spv/2408/14/news045.html
46: 警備員[Lv.11][芽] 2024/10/19(土)11:35 AAS
>>36
だからmain関数で宣言してたらソフト終了するまでメモリ解放されないだろアホ
>>44
でもメモリコピーするクラスというか型は各々作れるよね?そのときどうすんの?
俺は素直に変数.mcopyで良いと思うが
47
(1): 2024/10/19(土)12:02 AAS
struct Point {
x: i32,
y: i32.
}

例えばこのようなPoint構造体を作ったら。それは新しい型であってデフォルトではCopy出来ない。

もしこの構造体の所に
#[derive(Copy,Clone)]
という指定を付けるとCopyトレイトが実装されるのでコピー出来るようになる。ただ慣習的には構造体は暗黙的にコビーされるのは良くないので、Cloneだけ実装して明示的にCloneしてねというのが推奨。
48: 警備員[Lv.11][芽] 2024/10/19(土)12:05 AAS
>>47
だったらはなから変数.mcopyでいいだろ
49
(1): 警備員[Lv.11][芽] 2024/10/19(土)12:06 AAS
それつけなかったらプリミティヴも移譲にするでいいじゃん
そっちのほうがはるかに神言語のそれだろ
50: 2024/10/19(土)12:10 AAS
let p1 = Point { x:100, y:200 };
let p2 = p1; // copy が実装されてる場合
let p3 = p1.clone(); // 明示的な clone
51: 2024/10/19(土)12:20 AAS
C言語から来た人は型をメモリのサイズで捉えてる人が多いよ。関数型言語で言うところの型というのは機能や文脈や制限や寿命やら色々な情報を含むもので全部区別すべきもの。これが凄い便利機能なわけ。
暗黙的な型変換をする言語は型の力を利用出来ないのでバグる。
52
(1): 2024/10/19(土)12:33 AAS
あと勘違いしてるかもしれないけど、プログラム上の変数のスコープの範囲と、実際の寿命の範囲は別物だよ。
Rustコンパイラは変数が使われている所を全て把握しているので用が済んだ変数はスコープ抜けなくても最適化で消されてる。
定数になるものなら変数の領域すら確保されない。
53: 2024/10/19(土)12:46 AAS
fn main() {
// 整数型
let a: i32 = 42;
let b = a.clone();

// 浮動小数点型
let c: f64 = 3.14;
let d = c.clone();

// ブール型
let e: bool = true;
let f = e.clone();

// 文字型
let g: char = 'A';
let h = g.clone();
}

明示的に書いたほうが分かり易いという人は全部 clone って書いてもいいんですよ。
54
(1): 警備員[Lv.11][芽] 2024/10/19(土)12:46 AAS
>>52
それ君らが嫌いなガベコレとなにが違うの?
55: 2024/10/19(土)12:51 AAS
ガベコレは用が済んだタイミングで即解放されるんじゃなくて、GCを走らせたタイミングで解放です。
なのでメモリを倍ぐらい余分に確保しとかないと足らなくなることがある。
56: 2024/10/19(土)15:46 AAS
無職ってすぐ人に聞こうとするよな
だから無職なんだろうけど
57: 2024/10/19(土)16:17 AAS
>>54
ガベージコレクション(GC)は
・「ガベージ=ゴミ=使われなくなったメモリ」がどんどん溜まっていく
・そのため実行中のあるタイミングで溜まってきたゴミをまとめて収集(コレクション)する
・ゴミかどうかは実行中に使われなくなったかどうかを何らかの方法で追跡して判断する
・このGCを判断実行できるように冗長なメモリ管理をすることとゴミが溜まるためメモリ消費量が多い
・これらの処理を行なえるようGCランタイムと呼ばれるプログラムが必ず内蔵される

このGCにメモリ管理を依存する言語がGC言語と呼ばれている
C/C++/Rustは依存しないため非GC言語
1-
あと 116 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.017s