公式
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 part23
https://mevius.5ch.net/test/read.cgi/tech/1708677472/
探検
Rust part24
■ このスレッドは過去ログ倉庫に格納されています
2024/05/27(月) 06:41:26.82ID:T4AFD1f4
713デフォルトの名無しさん
2024/07/10(水) 03:06:35.71ID:mzDH1NTP >それらインタフェースやトレイトを用いている時点でLSPの対象外となっている
間違ってるよ
インターフェースだろうがトレイトだろうがサブタイピングは成立するよ
サブタイピングが成立すれば当然LSPの対象範囲だよ
>>691の例もLSPの違反例としては合ってるよ
間違った継承の使い方の例としてよく使われてるよね
間違ってるよ
インターフェースだろうがトレイトだろうがサブタイピングは成立するよ
サブタイピングが成立すれば当然LSPの対象範囲だよ
>>691の例もLSPの違反例としては合ってるよ
間違った継承の使い方の例としてよく使われてるよね
714デフォルトの名無しさん
2024/07/10(水) 04:10:08.62ID:xXJVwGE7 >>684
>panic禁止にしました。
たとえno_std環境であろうとpanicは禁止にできない
>unsafe rustでpanicを使います。
panicを引き起こすのも扱うのもunsafeを必要としない
>panicが発生してシステムダウンしました。
panic発生がそのままシステムダウンではない
何ら特別な設定をしない標準状態でもスレッド内で起きたpanicはエラーとして返るだけで他のスレッドは動き続ける
>panic禁止にしました。
たとえno_std環境であろうとpanicは禁止にできない
>unsafe rustでpanicを使います。
panicを引き起こすのも扱うのもunsafeを必要としない
>panicが発生してシステムダウンしました。
panic発生がそのままシステムダウンではない
何ら特別な設定をしない標準状態でもスレッド内で起きたpanicはエラーとして返るだけで他のスレッドは動き続ける
715デフォルトの名無しさん
2024/07/10(水) 07:01:39.33ID:H4rrLaXL >>710
型クラスのinstanceであると宣言すればsubtypeじゃないのは自明だぜ
じゃあtraitをimplすると宣言したら
自明だった問題が突如として最先端の未解決問題に変化するのか?
しないでしょ
同じでしょ
型クラスのinstanceであると宣言すればsubtypeじゃないのは自明だぜ
じゃあtraitをimplすると宣言したら
自明だった問題が突如として最先端の未解決問題に変化するのか?
しないでしょ
同じでしょ
716デフォルトの名無しさん
2024/07/10(水) 07:02:08.59ID:HryWiaEt717デフォルトの名無しさん
2024/07/10(水) 07:35:50.92ID:1hn7S5X0718デフォルトの名無しさん
2024/07/10(水) 08:46:54.18ID:1XduDtMr719デフォルトの名無しさん
2024/07/10(水) 12:00:16.62ID:GhKm8r1f >>718
そのアンカ先は全部複オジだろ
LSPも知らない、サブタイピングも知らない、継承で起こりうる簡単な問題も知らない
にもかかわらず知ったかぶりして嘘を並び立てる
こんなやつがそうそういるわけがない
そのアンカ先は全部複オジだろ
LSPも知らない、サブタイピングも知らない、継承で起こりうる簡単な問題も知らない
にもかかわらず知ったかぶりして嘘を並び立てる
こんなやつがそうそういるわけがない
720デフォルトの名無しさん
2024/07/10(水) 12:37:44.86ID:1YSFCzN+ キチガイは1人見かけたら10人はいると思え
721デフォルトの名無しさん
2024/07/10(水) 13:29:52.02ID:kPG9kWdt >>701
そのやり方がなぜ悪いのか理解できませんので、教えてください。
例えば、C++だと、以下の様にするのも別に悪いやり方ではないような
気がするのですが。
class Number {・・・};
Number add(Number &a, Number &b);
Number mul(Number &a, Number &b);
class Integer : public Number {・・・};
class Rational : public Number {・・・};
そのやり方がなぜ悪いのか理解できませんので、教えてください。
例えば、C++だと、以下の様にするのも別に悪いやり方ではないような
気がするのですが。
class Number {・・・};
Number add(Number &a, Number &b);
Number mul(Number &a, Number &b);
class Integer : public Number {・・・};
class Rational : public Number {・・・};
722デフォルトの名無しさん
2024/07/10(水) 13:32:41.05ID:2GPD5dJ4 ChatGPTってモノシリなんですね?
723デフォルトの名無しさん
2024/07/10(水) 13:34:42.29ID:kPG9kWdt >>721
改めて見てみると、add()やmul()の戻り値にNumberの実態を返しているのがおかしい気もしますが。
IntegerやRationalにadd()やmul()を仮想関数として定義するのが良いのかもしれません。
そのような点で改良の余地が沢山ありそうです。
改めて見てみると、add()やmul()の戻り値にNumberの実態を返しているのがおかしい気もしますが。
IntegerやRationalにadd()やmul()を仮想関数として定義するのが良いのかもしれません。
そのような点で改良の余地が沢山ありそうです。
724デフォルトの名無しさん
2024/07/10(水) 13:47:33.33ID:2GPD5dJ4725デフォルトの名無しさん
2024/07/10(水) 14:42:18.00ID:H4rrLaXL 10人いると思ってる人自身が11人目になりやすいから気をつけなよ
数値の計測が抱えている問題は、そもそも計測していない人には起こらない
数値の計測が抱えている問題は、そもそも計測していない人には起こらない
726デフォルトの名無しさん
2024/07/10(水) 15:49:38.80ID:WriLZMcZ >>721
add(integer, rational)できる?
add(integer, rational)できる?
727デフォルトの名無しさん
2024/07/10(水) 16:24:23.57ID:2GPD5dJ4 ミイラとりがミイラになるのは昔から
728デフォルトの名無しさん
2024/07/10(水) 16:42:16.40ID:aw6hROvm >>712
>例外で値をキャッチできなくなることや値を返す抜け道になることを防ぐためだ
違うよ
勝手な想像でLSPを誤解釈しないで
substituteされる型Tに対して定義された仕様上(契約上)の振る舞いを
substituteする型Sが満たしてなければLSP違反
つまり仕様上panicを禁止したトレイトの関数を
panicする関数でimplしたらLSP違反
LSPではあくまで”仕様上定義された振る舞い”が問題
>例外で値をキャッチできなくなることや値を返す抜け道になることを防ぐためだ
違うよ
勝手な想像でLSPを誤解釈しないで
substituteされる型Tに対して定義された仕様上(契約上)の振る舞いを
substituteする型Sが満たしてなければLSP違反
つまり仕様上panicを禁止したトレイトの関数を
panicする関数でimplしたらLSP違反
LSPではあくまで”仕様上定義された振る舞い”が問題
729デフォルトの名無しさん
2024/07/10(水) 18:28:13.04ID:/bwWoePd730デフォルトの名無しさん
2024/07/10(水) 21:04:08.95ID:H4rrLaXL catchするという対案がない
対案との比較が抱えている問題はそもそも対案がない言語では起こらない
対案との比較が抱えている問題はそもそも対案がない言語では起こらない
731デフォルトの名無しさん
2024/07/10(水) 21:42:13.36ID:DHf/HCo5732デフォルトの名無しさん
2024/07/10(水) 22:01:49.20ID:HryWiaEt >>721
「インタフェースを定義し、それに基づいて実装する」という設計なら問題ないのだけど、
これは「あるクラスに依存していたコード群が新しいクラスでも動くようにするため」という発想になっており、大規模な開発だとこのやり方はだいたい失敗するよという話
例を書きづらいけど、例えば「A社製の装置を制御するアプリ」があったとして、
新しく「B社製の装置も制御できるようにする」という追加の開発案件があったとする。
この時点ではまだADeviceControllerは抽象化されておらず、A社装置の仕様に強く依存したクラスであるとする。
これを「ADeviceController が持つメソッドを IDeviceController として取り出し、それを BDeviceControllerにも実装させる」とすると確実に事故る。
「B社装置にだけある機能Xを呼びたい」「A社装置にあった機能YがB社装置にはない」といった違いを吸収しきえれず、インタフェースがぐちゃぐちゃになったり、「呼んでも何もしない」とかの形で誤魔化したり、呼び出し元でサブクラスの判定が必要になったりする
こうならないようにするには
a. 具体的な機器に依存しない、機器の振る舞いを適切に抽象化したインタフェースを定義する
b. 代数的データ型を使う
という方法があり、 Rust では b. の方法も使いやすいので、個人的にはそこが良いなと思う
「インタフェースを定義し、それに基づいて実装する」という設計なら問題ないのだけど、
これは「あるクラスに依存していたコード群が新しいクラスでも動くようにするため」という発想になっており、大規模な開発だとこのやり方はだいたい失敗するよという話
例を書きづらいけど、例えば「A社製の装置を制御するアプリ」があったとして、
新しく「B社製の装置も制御できるようにする」という追加の開発案件があったとする。
この時点ではまだADeviceControllerは抽象化されておらず、A社装置の仕様に強く依存したクラスであるとする。
これを「ADeviceController が持つメソッドを IDeviceController として取り出し、それを BDeviceControllerにも実装させる」とすると確実に事故る。
「B社装置にだけある機能Xを呼びたい」「A社装置にあった機能YがB社装置にはない」といった違いを吸収しきえれず、インタフェースがぐちゃぐちゃになったり、「呼んでも何もしない」とかの形で誤魔化したり、呼び出し元でサブクラスの判定が必要になったりする
こうならないようにするには
a. 具体的な機器に依存しない、機器の振る舞いを適切に抽象化したインタフェースを定義する
b. 代数的データ型を使う
という方法があり、 Rust では b. の方法も使いやすいので、個人的にはそこが良いなと思う
733デフォルトの名無しさん
2024/07/10(水) 22:15:46.44ID:b9m+kH0p 設計が悪いといえばその通りなんだけど、そのせいでインタフェースが崩壊しているプロジェクトは実際にあるし、RustやGoが継承を廃止した理由の一つでもあると思う
クラス継承だとこの問題はもっと簡単に起こりやすい
前述の例は (あくまでも見かけ上は) インタフェースを定義しており、クラスを継承してるわけではないので、Rustのトレイトでもやろうと思えば起こるけどね
クラス継承だとこの問題はもっと簡単に起こりやすい
前述の例は (あくまでも見かけ上は) インタフェースを定義しており、クラスを継承してるわけではないので、Rustのトレイトでもやろうと思えば起こるけどね
734デフォルトの名無しさん
2024/07/10(水) 22:19:25.73ID:FlmWdBd4 言語を選ぶにあたって継承の有無は選択肢に入らんし正直言ってどうでもいいわ
代替手段があるのにいつまで言ってんだ
代替手段があるのにいつまで言ってんだ
735デフォルトの名無しさん
2024/07/10(水) 22:32:22.87ID:dGMDZq55 >>729
仕様を定義するという簡単なお話がほんとにわからないのかな?
panicを例にすると頭がパニクるみたいなので
リスコフの論文にあるFIFO/LIFOの例で言い換えると
仕様としてLIFOの振る舞いを要求するトレイトの関数を
FIFOの振る舞いで実装したらLSP違反ってこと
簡単なお話でしょ?
仕様を定義するという簡単なお話がほんとにわからないのかな?
panicを例にすると頭がパニクるみたいなので
リスコフの論文にあるFIFO/LIFOの例で言い換えると
仕様としてLIFOの振る舞いを要求するトレイトの関数を
FIFOの振る舞いで実装したらLSP違反ってこと
簡単なお話でしょ?
736デフォルトの名無しさん
2024/07/10(水) 22:40:16.17ID:H4rrLaXL 既に言語を選んだのにまだ、is-aとhas-aどっちにするか選べとか
catchするかしないか選べとか
言語の内部でいつまでも選択が繰り返されるシステムが謎なんよ
いつまで言われるかといえば謎が解けるまでだよ
catchするかしないか選べとか
言語の内部でいつまでも選択が繰り返されるシステムが謎なんよ
いつまで言われるかといえば謎が解けるまでだよ
737デフォルトの名無しさん
2024/07/10(水) 23:21:18.85ID:visgGGe9 >>732
それは共通インターフェースと特定装置にしかないインターフェースをそれぞれ別で用意すべきだと思う
拡張メソッドや拡張トレイトも活用する
ただA社装置もB社装置も1つの共通したコードで扱うなら
サブクラス判定ではないにしても呼び出し元での分岐は何かしら必要
それは共通インターフェースと特定装置にしかないインターフェースをそれぞれ別で用意すべきだと思う
拡張メソッドや拡張トレイトも活用する
ただA社装置もB社装置も1つの共通したコードで扱うなら
サブクラス判定ではないにしても呼び出し元での分岐は何かしら必要
738デフォルトの名無しさん
2024/07/10(水) 23:44:27.81ID:6pwTfhEs739デフォルトの名無しさん
2024/07/11(木) 00:29:09.09ID:dTTJ6k+i クイズ
JavaScriptのプロトタイプチェーンはis-a?
それともhas-a?
JavaScriptのプロトタイプチェーンはis-a?
それともhas-a?
740デフォルトの名無しさん
2024/07/11(木) 00:30:41.75ID:sJ7PGs8/ >>732
一般的に何らかの上位層と下位層があるときに
Rustではその界面にtraitを置いて
上位層はそのtraitを利用する側
下位層はそのtraitを実装する側
とSILIDのDIP (Dependency Inversion Principle)にするのがそのa.だね
もしクラスでやるときは抽象化を徹底した上で色んな注意が必要になるところ
Rustは自然にコーディングできてありがたいね
一般的に何らかの上位層と下位層があるときに
Rustではその界面にtraitを置いて
上位層はそのtraitを利用する側
下位層はそのtraitを実装する側
とSILIDのDIP (Dependency Inversion Principle)にするのがそのa.だね
もしクラスでやるときは抽象化を徹底した上で色んな注意が必要になるところ
Rustは自然にコーディングできてありがたいね
741デフォルトの名無しさん
2024/07/11(木) 01:01:01.84ID:sJ7PGs8/ スマソ
SILIDはSOLIDのタイポ
SILIDはSOLIDのタイポ
742デフォルトの名無しさん
2024/07/11(木) 01:26:06.15ID:sLOW5r2m >>740
インターフェース知らないの?
インターフェース知らないの?
743デフォルトの名無しさん
2024/07/11(木) 01:37:36.53ID:sJ7PGs8/ >>742
インタフェースは各言語で付加仕様がバラバラ多種多様だから慎重に言うと
それ自体はフィールド変数など持たず完全に抽象化できつつ
実装必須メソッドとデフォルト実装提供メソッドがサポートされて
その中で利用可能な他のインタフェース(またはtrait)群による制約ができて
となるとどの言語が残るかな
インタフェースは各言語で付加仕様がバラバラ多種多様だから慎重に言うと
それ自体はフィールド変数など持たず完全に抽象化できつつ
実装必須メソッドとデフォルト実装提供メソッドがサポートされて
その中で利用可能な他のインタフェース(またはtrait)群による制約ができて
となるとどの言語が残るかな
744デフォルトの名無しさん
2024/07/11(木) 03:34:06.04ID:huEwUyFV それはたぶんDじゃなくてIかな……
745デフォルトの名無しさん
2024/07/11(木) 09:53:46.09ID:TzM2Jqw+746デフォルトの名無しさん
2024/07/11(木) 11:33:08.04ID:gcQpVY2c >>744
DもIも両方関係あるよ
DもIも両方関係あるよ
747デフォルトの名無しさん
2024/07/11(木) 11:36:08.08ID:gcQpVY2c748デフォルトの名無しさん
2024/07/11(木) 11:46:30.35ID:ITTQebkb ʕ◔ϖ◔ʔ
749デフォルトの名無しさん
2024/07/11(木) 12:31:18.41ID:QtPgEU0q >>747
ウソはあかん
ウソはあかん
750デフォルトの名無しさん
2024/07/11(木) 13:53:08.83ID:gabJiib7 >>747
サーバー用途で強いJavaは残るね
Kotlin/Swiftもモバイルアプリのネイティブ言語として残る
TSはJSで十分っていう風潮が漂いつつあるけどまあ残るだろう
死ぬのはC#とDartかな
サーバー用途で強いJavaは残るね
Kotlin/Swiftもモバイルアプリのネイティブ言語として残る
TSはJSで十分っていう風潮が漂いつつあるけどまあ残るだろう
死ぬのはC#とDartかな
751デフォルトの名無しさん
2024/07/11(木) 14:12:48.49ID:0oGtZVd6 LSPで嘘ばっかりついてたのがバレたから
またしょうもない話をはじめてごまかそうとしてるのか
いい加減にしろよ
またしょうもない話をはじめてごまかそうとしてるのか
いい加減にしろよ
752デフォルトの名無しさん
2024/07/11(木) 16:22:35.45ID:o6wwWo1Z LSPに書かれていることすら読まずに
RustのトレイトがLSPの対象だと言い張ってたもんな
RustのトレイトがLSPの対象だと言い張ってたもんな
753デフォルトの名無しさん
2024/07/11(木) 16:57:46.28ID:acwFdQNv PartialOrdとPartialEqの一貫性とかLSPっぽいけど
Substitution(置換)とはちょっと違うんだよな
無理矢理Sに当てるならSurrogation(代用)あたりか
これをLSPに含めるかは定義重視vs意味重視で意見が分かれそう
Substitution(置換)とはちょっと違うんだよな
無理矢理Sに当てるならSurrogation(代用)あたりか
これをLSPに含めるかは定義重視vs意味重視で意見が分かれそう
754デフォルトの名無しさん
2024/07/11(木) 17:15:40.81ID:HnhcW2rv LSPはsupertypeのインスタンス(オブジェクト)とsubtypeのインスタンスの振る舞いを比較してそこで満たすべき原則を挙げていますから
Rustのtraitをsupertypeとしてみてもそのインスタンスが存在しないため振る舞いの比較ができないですね
traitはLSPとは関係ない立ち位置にいます
Rustのtraitをsupertypeとしてみてもそのインスタンスが存在しないため振る舞いの比較ができないですね
traitはLSPとは関係ない立ち位置にいます
755デフォルトの名無しさん
2024/07/11(木) 20:33:40.77ID:eOImp5ti ごちゃごちゃ難しいこと考えてるうちにエンバグしたりなんかして。
756デフォルトの名無しさん
2024/07/11(木) 21:02:05.21ID:qBSAH7HU >>750
サーバー用途こそJavaはRustとGoに蹴散らされて終わるだろ
サーバー用途こそJavaはRustとGoに蹴散らされて終わるだろ
757デフォルトの名無しさん
2024/07/11(木) 21:30:58.09ID:wPVHCKh0 実際のところRustはサーバーサイドで使われてるの?
758デフォルトの名無しさん
2024/07/11(木) 22:25:27.54ID:A0mL7vqg 実際は派生クラスの方が支持されていたとしても基底クラスを蹴散らしてはならない
とLSPは言っている
とLSPは言っている
759デフォルトの名無しさん
2024/07/11(木) 22:35:40.65ID:Z3SFRt47 >>757
使われてないよ
使われてないよ
760デフォルトの名無しさん
2024/07/11(木) 22:47:57.53ID:Wdw77EAw761デフォルトの名無しさん
2024/07/11(木) 22:50:39.98ID:wG+w8SXo サーバーは常時稼働させるものだからねえ
762デフォルトの名無しさん
2024/07/11(木) 23:16:00.08ID:liPsU6bJ >>757
GAFAMとかCloudflareとかトラフィックの多いとこに入ってるから誰もが必ずお世話になってる程度には使われてる
日本でサーバーサイドの仕事が沢山あるか、という意味ならそんなことはない
GAFAMとかCloudflareとかトラフィックの多いとこに入ってるから誰もが必ずお世話になってる程度には使われてる
日本でサーバーサイドの仕事が沢山あるか、という意味ならそんなことはない
763デフォルトの名無しさん
2024/07/11(木) 23:24:11.59ID:b01V4j67 世界中で着実にRustへ置き換わっていってるね
特にクラウドを利用しているとランニングコストに直結するので
特にクラウドを利用しているとランニングコストに直結するので
764デフォルトの名無しさん
2024/07/12(金) 00:13:00.93ID:0qGKBZrU >>753, 754
トレイトの場合はLSPで言うsupertypeやsubtypeになるのは
トレイトを利用して作られるimpl Traitやtrait objectの型だよ
PartialOrd/PartialEqやFn/FnMut/FnOnceのように
supertrait/subtraitの関係にあるやつも便宜的にトレイトで互換性が語られるけど
実際はそれらを利用して作られる型についての話なのと同じなんだよ
トレイトの場合はLSPで言うsupertypeやsubtypeになるのは
トレイトを利用して作られるimpl Traitやtrait objectの型だよ
PartialOrd/PartialEqやFn/FnMut/FnOnceのように
supertrait/subtraitの関係にあるやつも便宜的にトレイトで互換性が語られるけど
実際はそれらを利用して作られる型についての話なのと同じなんだよ
765デフォルトの名無しさん
2024/07/12(金) 00:16:45.77ID:U8/iJiIO >>764
真面目に相手してあげるの偉いな
真面目に相手してあげるの偉いな
766デフォルトの名無しさん
2024/07/12(金) 00:19:01.43ID:iZsWh24v767デフォルトの名無しさん
2024/07/12(金) 00:19:49.06ID:iZsWh24v768デフォルトの名無しさん
2024/07/12(金) 00:47:16.73ID:KyXC0KGT トレイトにはフィールド変数が一つもなくてメソッドも各個別型で実装されるものだから事前条件・事後条件など比較もできなくてLSP適用は無理でしょ
>>764
supertrait/subtraitの場合に例えばある構造体についてそのインスタンスはどちらも同一になるからLSPの前提である二つのインスタンス間での差は論じられないでしょ
>>764
supertrait/subtraitの場合に例えばある構造体についてそのインスタンスはどちらも同一になるからLSPの前提である二つのインスタンス間での差は論じられないでしょ
769デフォルトの名無しさん
2024/07/12(金) 09:52:35.34ID:bw8b12Bg >>757
Rustは殆どどこにも使われてないよ
Rustは殆どどこにも使われてないよ
770デフォルトの名無しさん
2024/07/12(金) 10:23:09.62ID:LuKbokrL 「C言語は分かる。機械語も分かる、回路もわかる。30万払うからRustのメモリ安全のからくりをサクッとレクチャーしてくれ」
みたいなニーズがあっさり無料で満たされているべきだと思うんだ
みたいなニーズがあっさり無料で満たされているべきだと思うんだ
771デフォルトの名無しさん
2024/07/12(金) 10:57:31.20ID:KyXC0KGT 誤解は色々あるけど「努力すれば必ずゼロコストになるカラクリ」が
あると思ってるならそれが誤解だね
クイックソートやハッシュテーブルと同じく、最悪の場合のコストは低くない
あると思ってるならそれが誤解だね
クイックソートやハッシュテーブルと同じく、最悪の場合のコストは低くない
772デフォルトの名無しさん
2024/07/12(金) 11:16:56.09ID:LuKbokrL 間違ってたら指摘してくれ
メモリは唯一の所有者を持つ
所有者たる変数がスコープを抜けた時、もしくは所有者たる変数に他の値が代入された時、メモリは自動的に解放される
Rustの、メモリに関する様々な文法はひとえにレキシカルライフタイムのためである
レキシカルライフタイムすなわち字句的寿命は、プログラムを走らせなくともコンパイル時に変数の寿命が把握できる仕掛けである
メモリの使途に矛盾が発生しているとき、Rustコンパイラはエラーを吐く
メモリは唯一の所有者を持つ
所有者たる変数がスコープを抜けた時、もしくは所有者たる変数に他の値が代入された時、メモリは自動的に解放される
Rustの、メモリに関する様々な文法はひとえにレキシカルライフタイムのためである
レキシカルライフタイムすなわち字句的寿命は、プログラムを走らせなくともコンパイル時に変数の寿命が把握できる仕掛けである
メモリの使途に矛盾が発生しているとき、Rustコンパイラはエラーを吐く
773デフォルトの名無しさん
2024/07/12(金) 11:28:19.38ID:LuKbokrL そもそも動的メモリ確保一般を知っていますかって話で、
この質問にイエスと答えられる人は横着ができるべき
この質問にイエスと答えられる人は横着ができるべき
774デフォルトの名無しさん
2024/07/12(金) 13:01:13.97ID:KyXC0KGT775デフォルトの名無しさん
2024/07/12(金) 13:21:18.68ID:KyXC0KGT 唯一の所有者が存在することと所有者の情報を誰でも取得できることを
区別するのは少し難しい
大谷の家が実在することと住所を公表できることを区別できない人もいるかもしれない
区別するのは少し難しい
大谷の家が実在することと住所を公表できることを区別できない人もいるかもしれない
776デフォルトの名無しさん
2024/07/12(金) 14:02:34.71ID:HU5SDXKx 「A が Bの継承クラスであること。即ち、C++で
class A : public B {・・・};
と書くのは『A is B』である時が良い事が多いですよ」
という説が有りますけれど、
「多い」というだけだと理解してたんですが、このスレの人には、このルール
を徹底徹尾適用できる言語を夢見ておられるようですね。
class A : public B {・・・};
と書くのは『A is B』である時が良い事が多いですよ」
という説が有りますけれど、
「多い」というだけだと理解してたんですが、このスレの人には、このルール
を徹底徹尾適用できる言語を夢見ておられるようですね。
777デフォルトの名無しさん
2024/07/12(金) 14:20:30.92ID:KyXC0KGT ここでID何度か被ってきたけどポエムの人とID被ったのは初めて
>>776
クラス継承はメリットが少なくデメリットが多いと長年の共通体験で判明してそれが共通認識となっているから
様々な異なる方針のモダンな言語たちがクラス廃止の点では共通方針となっただけでしょ
>>776
クラス継承はメリットが少なくデメリットが多いと長年の共通体験で判明してそれが共通認識となっているから
様々な異なる方針のモダンな言語たちがクラス廃止の点では共通方針となっただけでしょ
778デフォルトの名無しさん
2024/07/12(金) 15:35:12.29ID:4qvv2DeJ 何気なく cargo update すると後悔する orz
779デフォルトの名無しさん
2024/07/12(金) 15:44:29.48ID:4qvv2DeJ GAFAM は存在しない
今は GAMAM
今は GAMAM
780デフォルトの名無しさん
2024/07/12(金) 15:46:16.40ID:4qvv2DeJ >>772
drop(hoge)
drop(hoge)
781デフォルトの名無しさん
2024/07/12(金) 15:49:17.77ID:4qvv2DeJ782デフォルトの名無しさん
2024/07/12(金) 17:11:30.65ID:LuKbokrL783デフォルトの名無しさん
2024/07/12(金) 20:20:08.14ID:0tYdINiS Rust製コードエディター「Zed」がLinuxにようやく対応
Windowsサポートにも期待
ttps://forest.watch.impress.co.jp/docs/news/1607906.html
Windowsサポートにも期待
ttps://forest.watch.impress.co.jp/docs/news/1607906.html
784デフォルトの名無しさん
2024/07/12(金) 20:23:46.34ID:0tYdINiS 個人利用は無償 ~JetBrainsがRust向けIDE「RustRover」を一般公開
メモリ安全性を保障したプログラミング言語「Rust」の開発に特化した統合開発環境
ttps://forest.watch.impress.co.jp/docs/news/1607747.html
メモリ安全性を保障したプログラミング言語「Rust」の開発に特化した統合開発環境
ttps://forest.watch.impress.co.jp/docs/news/1607747.html
785デフォルトの名無しさん
2024/07/12(金) 20:46:42.78ID:KyXC0KGT 別口を用意するとは?
RustらしくないRustを用意することかな
もし日本語らしくない日本語が何か成果を出したら
日本語らしさを学習したAIに都合が悪い
RustらしくないRustを用意することかな
もし日本語らしくない日本語が何か成果を出したら
日本語らしさを学習したAIに都合が悪い
786デフォルトの名無しさん
2024/07/12(金) 21:35:52.40ID:VV8L6PZC787デフォルトの名無しさん
2024/07/12(金) 22:05:28.85ID:LuKbokrL788デフォルトの名無しさん
2024/07/12(金) 22:12:50.70ID:VeLgD+zy >>781
RcやBoxは分かりやすいけどStringやVecも動的確保だよね、ということに気付いてない人もいるかも?
Rustが良いのはムーブが基本なおかげで意図せぬメモリコピーが起きないこと
所有権を他に渡す (ある構造体から別の構造体にか、あるコンテナから別のコンテナにとか移動する) 際にコストが発生しない
C++は逆で明示的に move しないと意図せぬコピーが起こる
RcやBoxは分かりやすいけどStringやVecも動的確保だよね、ということに気付いてない人もいるかも?
Rustが良いのはムーブが基本なおかげで意図せぬメモリコピーが起きないこと
所有権を他に渡す (ある構造体から別の構造体にか、あるコンテナから別のコンテナにとか移動する) 際にコストが発生しない
C++は逆で明示的に move しないと意図せぬコピーが起こる
789デフォルトの名無しさん
2024/07/12(金) 22:30:09.43ID:KyXC0KGT790デフォルトの名無しさん
2024/07/12(金) 22:37:23.69ID:LuKbokrL 電気電子板の人が、Rustの特集やってるインターフェース誌を買って読んだけどわからんかったって言ってたよ
791デフォルトの名無しさん
2024/07/12(金) 22:52:07.26ID:LuKbokrL792デフォルトの名無しさん
2024/07/12(金) 23:03:04.47ID:IhFaP3QA793デフォルトの名無しさん
2024/07/12(金) 23:08:24.73ID:LuKbokrL 参照カウンタ自体は全然新しくない
Rustがそれを無くせない理由が知りたい
Rustがそれを無くせない理由が知りたい
794デフォルトの名無しさん
2024/07/12(金) 23:24:14.35ID:LuKbokrL 複数の所有者がいる場合に参照カウンタが有効なのは分かる
難しいのは循環参照
参照カウンタで何が書け、何しか書くべきでないか
難しいのは循環参照
参照カウンタで何が書け、何しか書くべきでないか
795デフォルトの名無しさん
2024/07/12(金) 23:48:00.71ID:VeLgD+zy >>793
メモリ安全性を提供するため
オブジェクトを共有するのに「所有権は1人だけが持ち、他はそれを参照する」仕組みだと、すでに実体が消えてるオブジェクトを参照する問題が起こり得る
Rustでは、そのようなオブジェクトは参照カウンター付き (RcやArc) にするか、ライフタイムにより「寿命の短いものが寿命の長いものを参照している」ことを示さない限りコンパイルが通らないようにすることで安全性を保証している
逆にC++は参照カウンターなしでも共有できるけど正しく実装しないとメモリ関連のバグを引き起こす
この手のバグはセキュリティの問題になり得る問題を特定しにくい等の厄介さがあるから、Rustはそれをコンパイル時にできる限り防ぐという考え
メモリ安全性を提供するため
オブジェクトを共有するのに「所有権は1人だけが持ち、他はそれを参照する」仕組みだと、すでに実体が消えてるオブジェクトを参照する問題が起こり得る
Rustでは、そのようなオブジェクトは参照カウンター付き (RcやArc) にするか、ライフタイムにより「寿命の短いものが寿命の長いものを参照している」ことを示さない限りコンパイルが通らないようにすることで安全性を保証している
逆にC++は参照カウンターなしでも共有できるけど正しく実装しないとメモリ関連のバグを引き起こす
この手のバグはセキュリティの問題になり得る問題を特定しにくい等の厄介さがあるから、Rustはそれをコンパイル時にできる限り防ぐという考え
796デフォルトの名無しさん
2024/07/12(金) 23:56:48.21ID:n+FrpY/U 同一スレッド内の別タスクと共有する時にRcを使う
別スレッドや別スレッドになりうる別タスクと共有する時にArcを使う
別スレッドや別スレッドになりうる別タスクと共有する時にArcを使う
797デフォルトの名無しさん
2024/07/13(土) 00:02:12.31ID:mV5TIlCk 親子関係のようなオブジェクト間で相互参照するならWeakを使う
これはRcやArcから作るもので、「メインの所有者とそれを弱参照する共有相手」の関係になる
Weak側は相手がまだ存在することを確認できないと参照できないというもの
これはRcやArcから作るもので、「メインの所有者とそれを弱参照する共有相手」の関係になる
Weak側は相手がまだ存在することを確認できないと参照できないというもの
798デフォルトの名無しさん
2024/07/13(土) 00:46:50.81ID:UG7jOJ2R Rust の所有権システムは機械的に静的検証が可能なように設計されている。
しかし Rust のルールでの機械的静的検証で安全だと確信できないが実際には安全というケースは
ごく普通にあり、その内の典型的なものは実行時のチェックで補えるようにライブラリが整備されている。
しかし Rust のルールでの機械的静的検証で安全だと確信できないが実際には安全というケースは
ごく普通にあり、その内の典型的なものは実行時のチェックで補えるようにライブラリが整備されている。
799デフォルトの名無しさん
2024/07/13(土) 02:23:43.98ID:k/Plwdnm >>787
全てをRcで扱って渡すときはRcをclone()して渡せばライフタイムを気にしなくて済むが
参照カウンタとその増減のオーバーヘッドだけでなく
書き換えたいなら内部可変性を持ちそのオーバーヘッドも加わるとともに
スタック上で済むときも必ずヒープ利用となるオーバーヘッドもある
全てをRcで扱って渡すときはRcをclone()して渡せばライフタイムを気にしなくて済むが
参照カウンタとその増減のオーバーヘッドだけでなく
書き換えたいなら内部可変性を持ちそのオーバーヘッドも加わるとともに
スタック上で済むときも必ずヒープ利用となるオーバーヘッドもある
800デフォルトの名無しさん
2024/07/13(土) 08:49:12.36ID:zzh5ASvo zennとかqiitaとかのrust記事みてると
活発に描いてた人は2019-2022くらいで
その後更新されてないのが多い
みんな試しただけで使ってないのか
活発に描いてた人は2019-2022くらいで
その後更新されてないのが多い
みんな試しただけで使ってないのか
801デフォルトの名無しさん
2024/07/13(土) 08:51:48.91ID:zzh5ASvo802デフォルトの名無しさん
2024/07/13(土) 08:54:10.60ID:zzh5ASvo803デフォルトの名無しさん
2024/07/13(土) 08:56:33.88ID:zzh5ASvo >>790
特集のRustは知らんけど
特集じゃなかったときのインターフェースで紹介されたRustは
(インターフェース誌の読者に多いであろう)C言語利用者に判り易く説明されていた
そういうスタンスだからC知らん人にはきついのかも
特集のRustは知らんけど
特集じゃなかったときのインターフェースで紹介されたRustは
(インターフェース誌の読者に多いであろう)C言語利用者に判り易く説明されていた
そういうスタンスだからC知らん人にはきついのかも
804デフォルトの名無しさん
2024/07/13(土) 08:58:41.51ID:zzh5ASvo805デフォルトの名無しさん
2024/07/13(土) 09:03:05.94ID:UG7jOJ2R ムーブは管理上の概念で、低レイヤではコピーしてる。
Rust のムーブはカスタマイズの余地なくコピーする (最適化で消えることはある) が C++ のムーブはカスタマイズの余地 (ムーブコンストラクタの定義) があるので効率の面から考えると Rust のほうがよいとは言えない。
Rust のムーブはカスタマイズの余地なくコピーする (最適化で消えることはある) が C++ のムーブはカスタマイズの余地 (ムーブコンストラクタの定義) があるので効率の面から考えると Rust のほうがよいとは言えない。
806デフォルトの名無しさん
2024/07/13(土) 09:29:23.45ID:+smP1Ssu807デフォルトの名無しさん
2024/07/13(土) 09:38:04.64ID:4hBdJvP4 コマンドプロンプトを無くせない理由を考え続けているそこのあなた
まあいいじゃんそういうの
まあいいじゃんそういうの
808デフォルトの名無しさん
2024/07/13(土) 09:38:06.14ID:OKewYK0N >>800
当時記事書いてた一人だけど、日本語書籍も増えたしいまさら書くことないんだよね
アドベントカレンダーがあるならネタ考えるか、くらい
自分はまだRust使ってるし、当時記事書いてた人たちもRust使ってるベンチャーとかに転職してて、だいたいみんな書いてるんじゃないかな
当時記事書いてた一人だけど、日本語書籍も増えたしいまさら書くことないんだよね
アドベントカレンダーがあるならネタ考えるか、くらい
自分はまだRust使ってるし、当時記事書いてた人たちもRust使ってるベンチャーとかに転職してて、だいたいみんな書いてるんじゃないかな
809デフォルトの名無しさん
2024/07/13(土) 10:09:47.61ID:aKeOI53x Rustはカンファレンスとか見てても最近は成熟したからなのか特に目新しいものはない気がする
810デフォルトの名無しさん
2024/07/13(土) 10:11:38.51ID:CU8fyG8D vscodeにできてjetbrains製ideにできないことってある?
正直jetbrainsのヤツのほうがvscodeより使いやすい
正直jetbrainsのヤツのほうがvscodeより使いやすい
811デフォルトの名無しさん
2024/07/13(土) 10:27:13.13ID:E2vTTaV1 JetBrains製品は金払ってまで使うほどVSCodeより優れてるわけでないだけで良いIDEではある
VSCodeを何故使うかは商用利用無料だからに尽きるんだわ
VSCodeを何故使うかは商用利用無料だからに尽きるんだわ
812デフォルトの名無しさん
2024/07/13(土) 10:59:18.93ID:SqKWY/h6 >>767 >>768
>traitが実装される具体的な型は全てsubtypeに相当する兄弟同士であるため
>supertrait/subtraitの場合に例えばある構造体についてそのインスタンスはどちらも同一になるから
どちらも同じ勘違いをしてるよ
よく読もうね
What is wanted here is something like the following substitution property:
If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,
the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T
>traitが実装される具体的な型は全てsubtypeに相当する兄弟同士であるため
>supertrait/subtraitの場合に例えばある構造体についてそのインスタンスはどちらも同一になるから
どちらも同じ勘違いをしてるよ
よく読もうね
What is wanted here is something like the following substitution property:
If for each object o1 of type S there is an object o2 of type T such that for all programs P defined in terms of T,
the behavior of P is unchanged when o1 is substituted for o2 then S is a subtype of T
813デフォルトの名無しさん
2024/07/13(土) 11:00:31.54ID:l6/BNZgQ 仮にfleetが商用無料になるなら喜んでvscodeを捨てるけど金にがめついjetbrainsが商用無料で配るなんてありえない話
javaやkotlinならともかくrustなら商用無料のvscodeで十分
javaやkotlinならともかくrustなら商用無料のvscodeで十分
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国営メディア「沖縄は日本ではない」… ★2 [BFU★]
- 中国国営メディア「沖縄は日本ではない」… ★3 [BFU★]
- 高市政権にパイプ役不在…日中高まる緊張 公明党の連立離脱影響、自民内にも懸念「自分でまいた種は自分で刈り取ってもらわないと」 [ぐれ★]
- 小野田氏、”中国経済への依存“に警戒感 高市首相の国会答弁巡り [煮卵★]
- 【こんなの初めて…】民泊には既にキャンセルも 中国の渡航自粛で [ぐれ★]
- 【サッカー】独占入手 最年長JリーガーにW不倫疑惑 『お風呂覗きたいんですが笑』LINE流出も… 慰謝料トラブルを本人に直撃 [冬月記者★]
- 三嶋由紀夫ってネトウヨだったの? [633473628]
- 【画像】セクシー女優・天沢りんさん「お休み頂いてた半年間でこんな体になりました🪽🤍」👉予想通りの展開に [242521385]
- 中国国営放送「日本は琉球をただちに中国に返還せよ」 キタ━━━━(゚∀゚)━━━━!!!!! [314039747]
- SNSで米が高いと投稿すると高市ソルジャーに攻撃される模様 [931948549]
- とうすこ🏡愛され絵文字♡🤥👊😅👊👶♡
- 【高市悲報】アメリカ戦争省「あのさ、何回シミュレートしてもわーくに中国に負けちゃうんだよね🤗」 [359965264]
