web-dev-qa-db-ja.com

サウンドプログラミング言語とは何ですか?

ダートのウェブサイトによると

ダートは健全な言語です。

上記の文の「音」の意味は何ですか? 「音」は「音声」と同等ですか(上記のステートメントで交換できますか)?

他の主要なプログラミング言語では、同様の概念は見つかりませんでした。誰かが健全な言語の他の例をいくつか挙げることができますか?

10
Mir-Ismaili

それはオーディオとは関係ありません。

ウィキペディアによると:「つまり、型システムが両方soundの場合(拒否することを意味します)すべての誤ったプログラム)および決定可能(プログラムが適切に型指定されているかどうかを判断するアルゴリズムを記述できることを意味します)」(cf。 https://en.wikipedia.org/wiki/Type_system

語源に関する考察については、「健全性」を参照してください。

TL; DR:この文脈では、「堅牢」、「健康」を意味します。

7
SKZ 81

ダーツの言語ガイド から引用

健全性とは何ですか?

健全性とは、プログラムが特定の無効な状態にならないようにすることです。サウンドタイプシステムは、式が式の静的タイプと一致しない値に評価される状態になることは決してないことを意味します。たとえば、式の静的型がStringの場合、実行時に、評価時にのみ文字列を取得することが保証されます。

JavaおよびC#の型システムのようなストロングモードは健全です。静的チェック(コンパイルエラー)と実行時チェックの組み合わせを使用してその健全性を強制します。たとえば、文字列をintに割り当てます。はコンパイルエラーです。asStringを使用してオブジェクトを文字列にキャストすると、オブジェクトが文字列でない場合、ランタイムエラーで失敗します。

Dartはオプションで型指定された言語として作成されたものであり、健全ではありません。たとえば、整数、文字列、およびストリームを含むリストをDartで作成することは有効です。リストがfloatのリストとして指定されていても、浮動小数点値を除くすべての型が含まれている場合でも、リストに混合型が含まれているという理由だけで、プログラムのコンパイルまたは実行に失敗することはありません。

従来のDartでは、問題は実行時に発生します。リストからストリームをフェッチしますが、別のタイプを取得すると、実行時例外が発生し、アプリがクラッシュします。たとえば、次のコードは、動的型のリスト(文字列を含む)をint型のリストに割り当てます。リストを繰り返し処理し、各項目から10を引くと、文字列に対してマイナス演算子が定義されていないため、実行時例外が発生します。

健全性の利点サウンドタイプシステムにはいくつかの利点があります。

コンパイル時に型関連のバグを明らかにする。サウンド型システムは、コードにその型について明確にするように強制するため、実行時に見つけるのが難しい可能性のある型関連のバグがコンパイル時に明らかになります。

より読みやすいコード。実際に指定された型を持つ値に依存できるため、コードが読みやすくなります。サウンドダートでは、タイプは嘘をつきません。

より保守しやすいコード。サウンド型システムでは、1つのコードを変更すると、型システムは、壊れたばかりの他のコードについて警告することができます。

事前(AOT)コンパイルの改善。強い型がなくてもAOTコンパイルは可能ですが、生成されたコードの効率ははるかに低くなります。

よりクリーンなJavaScript。ウェブアプリの場合、ストロングモードのより制限的な入力により、dartdevcはよりクリーンでコンパクトなJavaScriptを生成できます。


Dartに健全性をもたらすには、Dart言語にいくつかのルールを追加するだけで済みました。ストロングモードを有効にすると、Dartアナライザーは次の3つの追加ルールを適用します。

メソッドをオーバーライドするときは、適切な戻り値の型を使用してください。

メソッドをオーバーライドするときは、適切なパラメータタイプを使用してください。

動的リストを型付きリストとして使用しないでください。

11
Pacane