[過去ログ] Rust part24 (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
35
(1): デフォルトの名無しさん [sage] 2024/06/02(日) 12:55:11.71 ID:vGgRDkgp(1) AAS
接続相手の仕様が形式化されたデータとして存在すれば
Rust 上の関数との対応付けを自動化できることもあると思うけど
形式化されたデータは誰かが準備しないといけないことには変わりないからなぁ。

Windows では API の仕様記述を WinMD と呼ばれる形で標準化してるけど
それだって WinRT (ちょっと高級な API) が前提になっているのでそんなに万能ではない。

あらゆる仕様を記述できるほど自由度 (複雑さ) のあるフォーマットにしたら結局は
プログラムを書くのとそんなに変わらんようになるので自動化できる部分は自動化して
ややこしい場合は手書きするという割り切りしないと仕方ない。
319: デフォルトの名無しさん [sage] 2024/06/23(日) 22:32:11.71 ID:CiIX8R/B(1) AAS
>>318
318(1): デフォルトの名無しさん [sage] 2024/06/23(日) 21:00:39.70 ID:GCEM9Zx1(1) AAS
Rustツアー
外部リンク[html]:tourofrust.com

説明が簡潔すぎてモヤモヤが増えていくばかり。
しかも終盤は翻訳されていない。
翻訳が進んでないのはともかくとして、説明が簡潔なのはそういうもんだわ。
チュートリアルでもつっかえるやつはいっぱいいるのに雑なツアーだけで理解できるわけないだろ。
複雑なところに立ち入る前に概略を見るってのと
それをすぐさま実行して確かめれらる環境がくっついてるってのがコンセプトなので
細かいことは The Rust Programming Language を見るのが前提。

こういった種類の学習は各項目を完璧に理解してから次の項目に進むってのは出来ない。
色んな言語機能は絡み合っていて綺麗な順番には出来ない。
全体を大雑把につかんでから解像度を高めていく形になる。
その一番最初のおおざっぱなところを担当する形の資料ってこと。
402
(1): デフォルトの名無しさん [sage] 2024/06/27(木) 12:27:57.71 ID:OTNDZ+yC(4/4) AAS
>>399
399(4): デフォルトの名無しさん [sage] 2024/06/27(木) 11:20:07.91 ID:veLj9zg3(1/4) AAS
よくわかんないんだけどスタック上に確保したメモリの所有権を外に移して関数は終了してスタックが縮んじゃうとかさ
「そんなわけないだろ」って思うんだけど
>「そんなわけないだろ」
その感覚は正しい
Rustを広めたいために勢い余ってデマを流してる香具師が一定数いる

>>401
401(1): デフォルトの名無しさん [sage] 2024/06/27(木) 12:00:05.74 ID:TDzAch9x(3/6) AAS
>>399
関数が値を返す場合にサイズが小さければレジスタで返す
サイズが大きい場合は呼び出し元のスタックフレームに領域を確保してそこへ直接書き込んでいる
つまり暗に可変参照を渡す最適化が行われている
それはサイズの大きい値を返す関数呼び出しが多段でも同じなので一番最初の関数のスタックフレームに直接書き込まれる
が正しい
440: デフォルトの名無しさん [sage] 2024/06/28(金) 07:54:27.71 ID:diDidYCE(1) AAS
>>422
422(1): デフォルトの名無しさん [sage] 2024/06/27(木) 23:40:56.83 ID:ZCM59EGi(1) AAS
C/C++の方こそ誤魔化しているぜ
そのため未定義動作だらけだ

Rustはわかりやすく抽象的に明確だ
そして未定義動作もない
unsafeを無視しちゃいかんよ。
574
(2): デフォルトの名無しさん [] 2024/07/03(水) 09:04:55.71 ID:TWMTGehv(1) AAS
rstkはどうなの?
625: デフォルトの名無しさん [sage] 2024/07/07(日) 13:43:23.71 ID:7CPxEWjC(1/2) AAS
interfaceはおっけー、abstractは隠蔽されるからだめってことだよ
継承全てが悪というわけではない
713: デフォルトの名無しさん [sage] 2024/07/10(水) 03:06:35.71 ID:mzDH1NTP(1) AAS
>それらインタフェースやトレイトを用いている時点でLSPの対象外となっている
間違ってるよ
インターフェースだろうがトレイトだろうがサブタイピングは成立するよ
サブタイピングが成立すれば当然LSPの対象範囲だよ

>>691
691(7): デフォルトの名無しさん [] 2024/07/09(火) 22:57:23.83 ID:/lHavWP5(1) AAS
>>685
リスコフの置換原則は設計的な原則だから言語仕様で違反を防ぐことはできないぞ
悪名高い長方形・正方形の問題はトレイトがあっても起こり得る

trait Rectangle {
 fn set_width(&mut self, width: i32);
 fn set_height(&mut self, height: i32);
 fn width(&self) -> i32;
 fn height(&self) -> i32;
 fn area(&self) -> i32 { self.width() * self.height() }
}

struct Square { len: i32 }

impl Rectangle for Square {
 fn set_width(&mut self, width: i32) { self.len = width; }
 fn set_height(&mut self, height: i32) { self.len = width; }
 fn width(&self) -> i32 { self.len }
 fn height(&self) -> i32 { self.len }
}

fn func(x: &mut impl Rectangle) {
 x.set_width(3);
 x.set_height(4);

 // xが長方形であれば以下が成り立つはずだが、Square型を渡された場合に失敗する
 assert!(x.area() == 12);
}
の例もLSPの違反例としては合ってるよ
間違った継承の使い方の例としてよく使われてるよね
776
(1): デフォルトの名無しさん [] 2024/07/12(金) 14:02:34.71 ID:HU5SDXKx(1) AAS
「A が Bの継承クラスであること。即ち、C++で
class A : public B {・・・};
と書くのは『A is B』である時が良い事が多いですよ」
という説が有りますけれど、
「多い」というだけだと理解してたんですが、このスレの人には、このルール
を徹底徹尾適用できる言語を夢見ておられるようですね。
795: デフォルトの名無しさん [] 2024/07/12(金) 23:48:00.71 ID:VeLgD+zy(2/2) AAS
>>793
793(2): デフォルトの名無しさん [sage] 2024/07/12(金) 23:08:24.73 ID:LuKbokrL(8/9) AAS
参照カウンタ自体は全然新しくない
Rustがそれを無くせない理由が知りたい
メモリ安全性を提供するため
オブジェクトを共有するのに「所有権は1人だけが持ち、他はそれを参照する」仕組みだと、すでに実体が消えてるオブジェクトを参照する問題が起こり得る
Rustでは、そのようなオブジェクトは参照カウンター付き (RcやArc) にするか、ライフタイムにより「寿命の短いものが寿命の長いものを参照している」ことを示さない限りコンパイルが通らないようにすることで安全性を保証している

逆にC++は参照カウンターなしでも共有できるけど正しく実装しないとメモリ関連のバグを引き起こす
この手のバグはセキュリティの問題になり得る問題を特定しにくい等の厄介さがあるから、Rustはそれをコンパイル時にできる限り防ぐという考え
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 1.547s*