web-dev-qa-db-ja.com

GoogleのGoはタイプセーフな言語ですか?

このページ http://golang.org/doc/go_faq.html 書き込み:

goには静的な型がありますが、この言語では、型を通常の言語よりも軽量にしようとしていますOO言語

だから私の質問は、ジェネリック(C#など)で安全に型付けされているか、緩やかに型付け(javascriptなど)されているか、オプション(Vb.Netで厳密なオプションなど)であるかです。

14
Pacerier

タイプセーフは、白黒のタイプセーフではありません。それはより広い範囲であり、一部の言語は他の言語よりもmore型安全である可能性があります(逆も同様です)。ただし、C#とJavascriptで考えていることは、静的型付け(コンパイル時に型チェックが行われる)と動的型付け(実行時に型チェックが行われる)の可能性が高いと思います-確かにGo FAQが話していること.

Google Goは静的に型付けされていますが、いくつかの機能により、(少なくともいくらか)動的に型付けされているように見えます。たとえば、クラスをインターフェイスを実装するものとして明示的にマークする必要はありません。クラスのメソッドシグネチャがインターフェイスのシグネチャと一致する場合、クラスは自動的にそのインターフェイスを実装します(一種のダックタイピング)。これは、サードパーティライブラリの組み込みクラスとクラスを拡張する場合に便利です。サードパーティクラスのメソッドと一致するようにインターフェイスを作成するだけで、自動的に実装されるからです。

型安全性は、実際には型システムの別の「軸」です。たとえば、Cは静的に型付けされた言語であり、タイプセーフではありません。ポインタを使用すると、プログラムをクラッシュさせるようなものでも、ほとんどすべてのことを実行できます。 JavaScriptは動的に型付けされますが、タイプセーフでもあります。プログラムをクラッシュさせる操作は実行できません。 C#はほとんどがタイプセーフですが、unsafeであるコード領域を明示的にマークして、タイプセーフではなくなった処理を行うことができます。

Google Goは、型をいじってプログラムをクラッシュさせることができないという意味でも、型セーフです(ポインターへの直接アクセスはありません)。

27
Dean Harding

型が誤って解釈されることはありませんが、型が間違っているとプログラムがパニックになる可能性があるため、安全に型付けされます。

4
dan_waterworth