短い答え:いいえ、チューリングの等価性のため。
長い答え:この男はトロールです。型システムが「サブセットに限定する」のは事実ですが、そのサブセットの外側のものは、定義上、機能しないものです。
チューリング完全なプログラミング言語(汎用プログラミング用に設計された言語であり、そうでないものも多数あります。クリアするのは非常に低く、チューリングになるシステムの例がいくつかあります。意図せずに完了)他のチューリング完全プログラミング言語で実行できます。これは「チューリング等価」と呼ばれ、正確に言うことを意味するだけです。重要なのは、他の言語でも同じように簡単に他のことを行えるということではありません。そもそも新しいプログラミング言語を作成することの第一の目的だと主張する人もいます。既存の言語が吸い込むもの。
たとえば、すべての変数、パラメーター、および戻り値を基本Object
型として宣言し、リフレクションを使用して内部の特定のデータにアクセスすることで、動的な型システムを静的なOO型システムの上でエミュレートできます。静的言語ではできない動的言語でできることは文字通り何もないことがわかります。しかし、そのようにするのはもちろん大きな混乱です。
引用からの男は、静的型があなたができることを制限することは正しいが、それは重要な機能であり、問題ではない。道路上の線は、あなたの車でできることを制限していますが、それらを制限したり、役立つと思いますか?(車が反対方向に進み、運転している場所に来ないように指示するものが何もない、混雑した複雑な道路を運転したくないことを知っています!)明確に線引きするルールを設定することにより無効な動作と見なされ、それが発生しないことを確認すると、厄介なクラッシュが発生する可能性が大幅に減少します。
また、彼は反対側の特性を誤っています。「書きたいすべての興味深いプログラムが型として機能する」ということではなく、「書きたいすべての興味深いプログラムが型を必要とする」ということです。特定のレベルの複雑さを超えると、2つの理由から、型システムなしでコードベースを維持することが非常に難しくなります。
まず、型注釈のないコードは読みにくいためです。次のPythonを検討してください。
def sendData(self, value):
self.connection.send(serialize(value.someProperty))
接続のもう一方の端にあるシステムが受信するデータはどのように見えると思いますか?そして、それが完全に間違っているように見える何かを受け取っている場合、どうなっているのかをどのように把握しますか?
それはすべての構造に依存しvalue.someProperty
ます。しかし、それはどのように見えますか?良い質問!何を呼んでいsendData()
ますか?それは何を通過していますか?その変数はどのように見えますか?それはどこから来たの?ローカルでない場合は、value
何が起こっているかを追跡するために、履歴全体を追跡する必要があります。someProperty
プロパティを持っている他の何かを渡しているかもしれませんが、それはあなたが思っていることをしませんか?
Boo言語で見られるように、型注釈を付けて見てみましょう。これは、非常に類似した構文を使用しますが、静的に型付けされています。
def SendData(value as MyDataType):
self.Connection.Send(Serialize(value.SomeProperty))
何か問題が発生した場合、突然デバッグの仕事が桁違いに簡単になりましたMyDataType
。!の定義を調べてください。さらに、同じ名前のプロパティを持つ互換性のない型を渡したために不正な動作が発生する可能性が、ゼロになります。これは、型システムがその間違いを許さないためです。
2番目の理由は最初の理由に基づいています。大規模で複雑なプロジェクトでは、多くの場合、複数の貢献者がいます。(そうでない場合、あなたは長い間自分でそれを構築しています。これは本質的に同じです。私を信じないなら、3年前に書いたコードを読んでみてください!)これは、何がわからなかったかを意味しますあなたがそこにいなかった、またはずっと前にあなた自身のコードだったかどうか覚えていないので、彼らがそれを書いた時にコードのほとんどすべての与えられた部分を書いた人の頭を通り抜けます。型宣言があると、コードの意図が何であるかを理解するのに役立ちます!
引用の男のような人は、ほとんど無制限のハードウェアリソースが年々重要性を低下させている世界では、静的型付けの利点を「コンパイラを支援する」または「効率について」と誤解することがよくあります。しかし、私が示したように、これらの利点は確かに存在しますが、主な利点は人的要因、特にコードの可読性と保守性です。(追加された効率は確かに素晴らしいボーナスです!)