2

私は、プログラミング言語の機能がすべてのクラスのエラーを排除するという主張をよく見てきました。

たとえば、次のような主張を見てきました。

  • 強力な型システムは、型がサポートしていない機能を使用することによって引き起こされるクラスのエラーを排除します。

  • 自動メモリ管理により、オブジェクト/構造体に適切な量のメモリを割り当てることに関連するエラーのクラスが排除されます。

  • 必須の変数初期化により、NULL ポインターまたは NULL 参照エラーが排除されます。

  • 不変のデータ構造により、変更可能な状態の変更の影響を理解していないために発生するエラーのクラスが排除されます。

私は上記の主張が正しいかどうかを調べようとしているのではなく、自分自身で調査および評価するのに十分なほど具体的なこのタイプの主張のリストをまとめています.

エラーのクラス全体を排除すると主張されている他の特定の機能は何ですか?

これを行う機能を特定する、またはそのような機能がないことを特定するための一般的な原則または理論はありますか?

(真実であるかどうかにかかわらず、次のような明らかに漠然とした、または主観的な主張は含めないことに注意してください。

  • オブジェクト指向プログラミングは再利用性を向上させます。

  • 動的言語はプログラミングがより高速です。

  • 意味のある空白は、プログラムをきれいにします。)

4

3 に答える 3

2

不変性

同時実行

不変性により、並行システムにおけるすべての共有データの問題が軽減されます。同時実行性とキャッシングは、正しく理解するのが最も困難な 2 つの要素であり、ほとんどの人は、いずれかのタイプのコードを記述しようとして最初の数十回で間違ってしまいます。

副作用

また、不変性はコードを決定論的にします。関数への入力は、関数のスコープ内で、関数の内外を問わず変更できません。これは、副作用がないことを意味します。

Null 以外の値

変数の唯一の型として不変性をサポートするほとんどのシステムにはNull、参照が割り当てられているかどうかの概念もありません。コンパイラが文句を言って修正する必要がある場合。

finalJava では、パラメーターと戻り値に対する参照と注釈を自由に使用することで、@Nonnullほとんどすべての非ロジック ベースのエラーを排除するか、コンパイル時または実行時の非常に早い段階でエラーを表示します。

于 2014-03-05T00:42:12.193 に答える
1

ここに私の頭の上のいくつかがあります:

クラス機能の例
型エラー 単一データ型 awk
型の不一致 ユニオン型 XQuery
参照エラー No Variables sed
中括弧の不一致 中括弧なし python
ダングリング セミコロン 有意な空白 python
バッファ オーバーフロー ポインタなし 算術 Ada
ゼロによる除算 デフォルトは無限大 lua
循環参照 すべての値は不変の文字列です tcl
循環インポート 循環依存なし OCaml
あいまいな型 Hindley-Milner 型推論 OCaml
十分な引数がありません 部分的な適用 Haxe
インポート エラーの暗黙の標準ライブラリ Coldfusion
漏れやすい抽象化 条件付きロジックなし CSS
期待されるオブジェクト すべてがオブジェクトです SmallTalk
そのようなメソッドはありません 具体化 SmallTalk
無限ループ 副作用なし DSSSL
デッドロック ソフトウェア トランザクション メモリ Clojure
Namespace Conflict Stack Save/Restore PostScript
無効な引数 Stack Machine PostScript
Heisenbug Message Passing Concurrency Erlang
于 2014-03-01T08:29:58.247 に答える