このページhttp://golang.org/doc/go_faq.htmlの書き込み:
Goには静的な型がありますが、言語は典型的なオブジェクト指向言語よりも型を軽く感じさせようとします
だから私の質問は、ジェネリック(C#など)で安全に入力するか、緩やかに入力する(javascriptなど)か、オプション(Vb.Netのオプションstrictなど)で安全に入力することです
このページhttp://golang.org/doc/go_faq.htmlの書き込み:
Goには静的な型がありますが、言語は典型的なオブジェクト指向言語よりも型を軽く感じさせようとします
だから私の質問は、ジェネリック(C#など)で安全に入力するか、緩やかに入力する(javascriptなど)か、オプション(Vb.Netのオプションstrictなど)で安全に入力することです
回答:
タイプセーフは、黒または白のタイプセーフではありません。それはより広範囲であり、一部の言語は他の言語よりもタイプセーフです(逆も同様です)。ただし、C#とJavascriptで考えていることは、静的型付け(型チェックがコンパイル時に行われる)と動的型付け(型チェックが実行時に行われる)である可能性が高いと思います-確かに、それはGo FAQの内容
Google Goは静的に型付けされていますが、いくつかの機能により、動的に型付けされているように見えます(少なくともある程度)。たとえば、クラスをインターフェイスの実装として明示的にマークする必要はありません。クラスのメソッドシグネチャがインターフェイス上のメソッドシグネチャと一致する場合、クラスはそのインターフェイスを自動的に実装します(一種のダックタイピング)。これは、組み込みクラスとサードパーティライブラリのクラスを拡張するのに便利です。サードパーティクラスのメソッドに一致するようにインターフェイスを作成するだけで、自動的に実装されるためです。
型安全性は、実際には型システムの異なる「軸」です。たとえば、Cは型安全ではない静的に型付けされた言語です。ポインタを使用すると、プログラムをクラッシュさせるようなことでも、好きなことをほとんど実行できます。Javascriptは動的に型指定されますが、型セーフでもあります。プログラムをクラッシュさせるような操作は実行できません。C#は主にタイプセーフですが、コードの領域を明示的にマークし、unsafe
タイプセーフではなくなったことを行うことができます。
Google Goは、型をいじってプログラムをクラッシュさせることができないという意味でタイプセーフです(ポインターに直接アクセスできません)。
型が誤って解釈されることは決してないという点で安全に入力されますが、型が間違っているとプログラムがパニックになる可能性があります。
Goのマップタイプはスレッドセーフではなく、静的に入力されます。型の継承、一般的なプログラミング、アサーション、メソッドのオーバーロード、またはポインター算術もありません。
型の安全性とメモリの安全性は長期的な目標であり、ここでは嘘です。
型安全性は、許容できるオーバーヘッドをキロバイトおよびメガバイト単位で示します。GoはMapReduceと「ビッグデータ」、エキソバイト、ペタバイトのデータで設計されており、タイプセーフでパフォーマンスの問題が発生します。
タイプセーフティは、サブタイピングとポリモーフィズム、およびアヒルタイピング(オブジェクトからオブジェクトへのキャスト)で制限される可能性があり、これにより危険が生じ、Goのような言語が大きなメリットをもたらすスペースも生まれます。C ++とJavaはGoに置き換えられていません。これは、分散プログラミングと超並列システムを支援する新しい言語です。
Bruce Eckelの大きな声明-「Goは、C ++が最初に解決することを意図していた問題のクラスにとって、はるかに理にかなっています」は議論の余地があります。C ++は非常に効率的な言語であり、MapReduceのBoost実装は非常に効率的です。
同時実行プリミティブは未来です。型の安全性は常に非常に議論の多いトピックであり、Goは20年以内に、またはAlgol以来この問題に対処した最初の言語かもしれません。