Rustとか言うダブスタ言語
2024/10/17(木) 08:07:52.57
値型と参照型で振る舞い変えるダブスタ言語だけど使ってるやついる?
2仕様書無しさん
2024/10/17(木) 08:12:28.58 いる
2024/10/17(木) 08:37:23.18
何がダブスタと思ってるのかわからない
何がわからないのかわからない
キミが使いこなせないのはわかった
がんばれー
何がわからないのかわからない
キミが使いこなせないのはわかった
がんばれー
2024/10/17(木) 08:46:55.28
一定の複雑さをオーバーすると発狂する低能
2024/10/17(木) 12:46:09.51
>>4
だから値型と参照型でlet a = bの振る舞いが違ってくるでしょ
値型の場合bは再度使えるけど参照型の場合bはprintfでも使えない(コンパイルエラーになる)
同じコードで
let a = str bと
let a = String::bで比べてみたらわかるよ
だから値型と参照型でlet a = bの振る舞いが違ってくるでしょ
値型の場合bは再度使えるけど参照型の場合bはprintfでも使えない(コンパイルエラーになる)
同じコードで
let a = str bと
let a = String::bで比べてみたらわかるよ
2024/10/17(木) 12:47:07.69
ちなみにわかってると思うけどstr型は値型でString::型は参照型なタコ
2024/10/17(木) 18:42:30.86
所有権の考え方ってRustやるなら変数より前に習うぐらいじゃないの?
2024/10/17(木) 18:46:57.12
すまん文法間違えてた
正しくはstrは &str
String::bは std::string bだ
正しくはstrは &str
String::bは std::string bだ
11仕様書無しさん
2024/10/17(木) 18:49:05.98 これは値型だからこいつに代入しても使える~
こいつは参照型だからもうこの変数使わないどこ~
とかやってんだろうなw
こいつは参照型だからもうこの変数使わないどこ~
とかやってんだろうなw
12仕様書無しさん
2024/10/17(木) 18:53:47.00 用途に応じて使う型を変えることの何がダブスタなんだろう・・・
13仕様書無しさん
2024/10/17(木) 18:54:00.69 単純作業で修行しなはれ
値を代入したり譲渡したり何なり
値を代入したり譲渡したり何なり
14仕様書無しさん
2024/10/17(木) 19:06:20.93 値型なんてあったかな
プリミティブ型とは違うのか
プリミティブ型とは違うのか
18仕様書無しさん
2024/10/17(木) 19:08:57.54 参照型はアドレスが入ってる
20仕様書無しさん
2024/10/17(木) 19:12:11.84 所有権の管理を俺様ではなくたかがプログラム言語ごときが勝手にやるのが気に食わないっていうのなら言ってることはわかるけど
ダブスタと言われると意味が分からない
ダブスタと言われると意味が分からない
22仕様書無しさん
2024/10/17(木) 19:14:02.74 ここで言う値型が、所有権を失ったり失わなかったりコロコロ挙動が変わるならまあダブスタだけど
参照だって定義してるんならそりゃ動きも変わるだろう
参照だって定義してるんならそりゃ動きも変わるだろう
23仕様書無しさん
2024/10/17(木) 19:17:34.52 そこまで理解していて「わからない」とか言ってるのがわからない
24仕様書無しさん
2024/10/17(木) 19:26:04.1825仕様書無しさん
2024/10/17(木) 22:33:51.75 Rustに値型と参照型という区別はないぞ
参照という概念はあるけど、これは &i32 なども作れるもので、「整数なら値型」といったものではない
どちらかというとC++に近い
let a = b でbが所有権を失うかどうかは、その型が「コピー可能かどうか」で決まる
参照という概念はあるけど、これは &i32 なども作れるもので、「整数なら値型」といったものではない
どちらかというとC++に近い
let a = b でbが所有権を失うかどうかは、その型が「コピー可能かどうか」で決まる
26仕様書無しさん
2024/10/17(木) 23:08:56.00 Rustでグラフィックやると面白い
まぁCでもC++でもいいけど
まぁCでもC++でもいいけど
29仕様書無しさん
2024/10/18(金) 00:06:57.13 例えばめちゃくちゃ誇張した表現にはなるが
fn main() {
let a=3.402823e+38;←便宜上float16の最大値とする(4byte)
Hoge(a);←Rustわかってないやつはここでaが移譲されたと勘違いする
let b=3.402823e+38;←もう一度使いたいがために宣言する
Hage(b);
.
.
.
}
↑
こんな感じのことやってたらチリ積でメモリリークしてないか?(↑の例をだと8byteのメモリリーク)
aやbが解放されないから
fn main() {
let a=3.402823e+38;←便宜上float16の最大値とする(4byte)
Hoge(a);←Rustわかってないやつはここでaが移譲されたと勘違いする
let b=3.402823e+38;←もう一度使いたいがために宣言する
Hage(b);
.
.
.
}
↑
こんな感じのことやってたらチリ積でメモリリークしてないか?(↑の例をだと8byteのメモリリーク)
aやbが解放されないから
30仕様書無しさん
2024/10/18(金) 00:08:11.83 コピーするかしないかって相当重要なポイントだと思うんだけど
なんだろうWeb系ばっかやってるとそういうのどうでもいいと思うのかね?
なんだろうWeb系ばっかやってるとそういうのどうでもいいと思うのかね?
31仕様書無しさん
2024/10/18(金) 00:14:51.0332仕様書無しさん
2024/10/18(金) 00:16:30.68 a.mcopy;とかでもいいよaはメモリコピーインターフェースを実装しているならこれが一般的な書き方になるか?
33仕様書無しさん
2024/10/18(金) 00:17:31.57 だから型を変えることで記述変えてるじゃん?
他の言語の記法が絶対正義でRust固有のものは常に間違ってるっていうなら、それはもうどうしようもない
他の言語の記法が絶対正義でRust固有のものは常に間違ってるっていうなら、それはもうどうしようもない
34仕様書無しさん
2024/10/18(金) 00:22:13.10 Rustの良いところってintやfloat,longなんかにbit数書いてるところだよね
あれたまにど忘れしちゃうときあるからみたらわかるの便利
あれたまにど忘れしちゃうときあるからみたらわかるの便利
36仕様書無しさん
2024/10/18(金) 06:24:57.1337仕様書無しさん
2024/10/18(金) 07:28:21.04 所有権はメモリだけでなくリソース管理の問題でもある
ファイルハンドルなんかが良い例で、実態はせいぜい数バイトしかないからコピー自体にコストがかかるわけではないんだけど、ファイルというリソースに絡むから所有権の管理の対象になる
あるファイルへのアクセスを行う変数が同時に複数ある状態を許容しない、ということ
共有するなら Rc や Arc などの『シェアされてる』ことを示す型でのラップが必要だし、実際にアクセスする際に Mutex などでのガードが必要になる
これらをコンパイル時に制限することでバグを生みにくい設計にしようというのがRust的な考え方
ファイルハンドルなんかが良い例で、実態はせいぜい数バイトしかないからコピー自体にコストがかかるわけではないんだけど、ファイルというリソースに絡むから所有権の管理の対象になる
あるファイルへのアクセスを行う変数が同時に複数ある状態を許容しない、ということ
共有するなら Rc や Arc などの『シェアされてる』ことを示す型でのラップが必要だし、実際にアクセスする際に Mutex などでのガードが必要になる
これらをコンパイル時に制限することでバグを生みにくい設計にしようというのがRust的な考え方
38仕様書無しさん
2024/10/19(土) 00:29:07.32 全く見たことがない言語なんだ、なんか発狂している海外のエンジニアを見るとこの言語は大丈夫なのかとは思う
39仕様書無しさん
2024/10/19(土) 02:18:52.28 名前通りだよまったく
40仕様書無しさん
2024/10/19(土) 05:07:26.68 rustではコピートレイトが実装されてる型というのがあって、基本的にはプリミティブな型がそれに相当するの。で、それらはスタックに確保されるから解放しなくていいの。コピートレイトを実装出来る条件というのがあって、デストラクタが不要な物に限るの。解放しなくていいものだけ。わかりやすいでしょ?
41仕様書無しさん
2024/10/19(土) 07:17:05.73 ヒープに確保したらどんな型だろうが開放しないといけないのでは?
42仕様書無しさん
2024/10/19(土) 08:22:30.66 i32型ならスタックに確保される。
ヒープに確保したかったらBox<i32>で、それはもう別の型。なのでコピー出来ない。
ヒープに確保したかったらBox<i32>で、それはもう別の型。なのでコピー出来ない。
43仕様書無しさん
2024/10/19(土) 08:47:12.01 わあわかりやすい
44仕様書無しさん
2024/10/19(土) 09:07:55.40 デストラクト不要のプリミティブ型は小文字で書かれてて、それ以外の型は大文字で書かれてるでしょ。
一応その辺でCopyが出来るか区別つくようにはなってる。
一応その辺でCopyが出来るか区別つくようにはなってる。
レスを投稿する
