- Rust part8
274 :デフォルトの名無しさん[sage]:2020/03/25(水) 01:18:57.46 ID:COJzGufp - Rustは、コンパイラ時エラーに悩まされる反面、実行時エラーに悩まされるのを減らす
などと言われる。 しかし、コンパイル時エラーが出ると言うことは、裏を返せば、書けないアルゴリズムが存在するということだ。 直感的ではない回りくどい書き方が必要となり記述量が多くなる。 他の言語では好きな書き方が出来て、それはどれも正解だが、Rustでは正解が非常に狭くなる。 正解が狭いことがエラーを減らすなどという人がいるが、実際には、Rustは 書けるアルゴリズムが狭い、と言うことなのである。 これは言語設計の問題である。 なお、ここで言っているアルゴリズムは、全体的なものではなく、細かいミクロ的なものである。 通常の言語では、1つの仕事を細かい変数の使い方まで含めれば数万通り以上に書けるだろう。 そして、そのどれもが正解であり、結果が正しくバグも無いのだから、内のどれかが悪い書き方という ことは特にない。 ところが、Rustでは、その大部分の書き方が出来ないのである。 駄目だから敢えてできなくしているのではなく、Rustが設計上、書けないアルゴリズムがあるということに他ならない。 つまり、Rustは書けるアルゴリズムが、本来コンピュータが書けるアルゴリズムの内の、非常に狭いサブセットに限られてしまうということである。 これは、Rustの大きな欠陥である。
|
- Rust part8
275 :デフォルトの名無しさん[sage]:2020/03/25(水) 01:25:39.41 ID:COJzGufp - >>274
「駄目な書き方だからエラーにしている」 と言うのは間違いで、正しくは、 「Rustコンパイラの静的解析能力では、書き方を非常に限定しないと 正しいことを保障できなかったり、自動化できなかったりするため、 しょうがなく狭い書き方しか出来なくしている」 と言うことに他ならない。 人間には脳内の静的解析で明らかに正しいことが分かる書き方でも、 Rustコンパイラではでは同じことができないため、敢えて 変数束縛、借用、単一参照など、コンパイラでも解析できる程度の 範囲に書き方を限定して無理やり人間のプログラミングの可能性を 狭めているに過ぎない。
|
- Rustアンチスレ
45 :デフォルトの名無しさん[]:2020/03/25(水) 01:29:02.87 ID:COJzGufp - Rustは、コンパイラ時エラーに悩まされる反面、実行時エラーに悩まされるのを減らす
などと言われる。 しかし、コンパイル時エラーが出ると言うことは、裏を返せば、書けないアルゴリズムが存在するということだ。 直感的ではない回りくどい書き方が必要となり記述量が多くなる。 他の言語では好きな書き方が出来て、それはどれも正解だが、Rustでは正解が非常に狭くなる。 正解が狭いことがエラーを減らすなどという人がいるが、実際には、Rustは 書けるアルゴリズムが狭い、と言うことなのである。 これは言語設計の問題である。 なお、ここで言っているアルゴリズムは、全体的なものではなく、細かいミクロ的なものである。 通常の言語では、1つの仕事を細かい変数の使い方まで含めれば数万通り以上に書けるだろう。 そして、そのどれもが正解であり、結果が正しくバグも無いのだから、内のどれかが悪い書き方という ことは特にない。 ところが、Rustでは、その大部分の書き方が出来ないのである。 駄目だから敢えてできなくしているのではなく、Rustが設計上、書けないアルゴリズムがあるということに他ならない。 つまり、Rustは書けるアルゴリズムが、本来コンピュータが書けるアルゴリズムの内の、非常に狭いサブセットに限られてしまうということである。 これは、Rustの大きな欠陥である。
|
- Rustアンチスレ
46 :デフォルトの名無しさん[sage]:2020/03/25(水) 01:29:24.10 ID:COJzGufp - >>45
「駄目な書き方だからエラーにしている」 と言うのは間違いで、正しくは、 「Rustコンパイラの静的解析能力では、書き方を非常に限定しないと 正しいことを保障できなかったり、自動化できなかったりするため、 しょうがなく狭い書き方しか出来なくしている」 と言うことに他ならない。 人間には脳内の静的解析で明らかに正しいことが分かる書き方でも、 Rustコンパイラではでは同じことができないため、敢えて 変数束縛、借用、単一参照など、コンパイラでも解析できる程度の 範囲に書き方を限定して無理やり人間のプログラミングの可能性を 狭めているに過ぎない。
|
- Rustアンチスレ
47 :デフォルトの名無しさん[sage]:2020/03/25(水) 01:31:01.16 ID:COJzGufp - >>43
Rustは、Haskellから多くを借りてきているらしいから、Haskellと同じ 道をたどると言う予想はあながち間違ってない。
|
- Rustアンチスレ
48 :デフォルトの名無しさん[sage]:2020/03/25(水) 01:41:15.64 ID:COJzGufp - Rustは表面的に使うだけなら、まあ、C++が使えるプログラマなら、大体使えなくは無いだろう。
しかし、自分で独自にリンクリストを作ろうと思うと事態は一変する。 そこまで深く入った人ほど、Rustは難しい言語だと感じるはずで、 RustがC++程度で理解できると思ってる人は、99%、浅い所までしか使ってない と言えよう。
|
- Rustアンチスレ
50 :デフォルトの名無しさん[sage]:2020/03/25(水) 12:40:37.43 ID:COJzGufp - >>49
RAD言語ならそれで良いが、システム言語では駄目。
|
- 次世代言語18 Go Rust Elixir Kotlin TypeScript
718 :デフォルトの名無しさん[sage]:2020/03/25(水) 16:51:30.87 ID:COJzGufp - >>712
Rustは、例え一部であっても、参照カウンタも GarbageCollection もなしで、メモリ管理を目指そうとしていた。 束縛や借用を使えばStack変数に関してはそれはある程度成功する。 Heapオブジェクトの自動解放に関しては、Uniqueポインタ的な単一参照や参照カウンタ方式を使っている。 がしかし、循環参照してしまうと誰も使ってないHeapメモリーが自動解放されない現象が起きるので、循環参照を避けることはプログラマの責任で行う設計。
|
- 次世代言語18 Go Rust Elixir Kotlin TypeScript
719 :デフォルトの名無しさん[sage]:2020/03/25(水) 16:56:54.91 ID:COJzGufp - >>718
C/C++では、スタック変数を、関数の呼び出し元へ returnしたり、 引数に返したりすることが出来てしまうが、危険なので絶対やってはならないが、 Rustではそれに関してはコンパイル時にエラーが出るので防げる。 同様に関数の途中のブロックの中だけで有効なブロック変数も、ブロックの 外側にポインタ値を渡してはいけないが、これもRustでは防げる。
|
- 次世代言語18 Go Rust Elixir Kotlin TypeScript
720 :デフォルトの名無しさん[sage]:2020/03/25(水) 16:59:17.07 ID:COJzGufp - >>716
プログラムのし易さの目的には、Rustは向いていない。 例外を try, catch で囲む以上の面倒くささがあらゆる場面で伴う。
|
- 次世代言語18 Go Rust Elixir Kotlin TypeScript
721 :デフォルトの名無しさん[sage]:2020/03/25(水) 17:01:41.23 ID:COJzGufp - >>714
Pythonは、RAD系。C#も、RAD系的。 Rustは、RAD系とは正反対で、深く使いこなそうとするとCよりもC++よりもずっと難しい。
|
- 次世代言語18 Go Rust Elixir Kotlin TypeScript
722 :デフォルトの名無しさん[sage]:2020/03/25(水) 17:39:26.59 ID:COJzGufp - 海外のサイトでRustを褒めている人は実際には表面的にしか理解してない。
多くの人の投稿を見ているとC++14などの新しいC++が難しいから嫌になって その代替としてRustを使いたいと思っている。 また、うたい文句である所の「安全、ガベージコレクターなし、簡単なC統合」 などをそのまま真に受けている。 ところが現実は違う。 C++ですら複雑に感じる人は、Rustで独自のリンクリストを設計することは決して出来ないと予言しておく。 そして、それが出来ない状態でシステム作りするのは、とても危険である。 (C++が難しく感じるプログラマの99.9%は、Rustで、標準のリンクリストを僅かでも作り直すことは出来ないだろう。)
|