動的に型指定された言語 (Python など) は実行時に型チェックを実行するため、変数またはパラメーターは任意の型の値を参照できます。言語定義では、変数とパラメーターを型指定しない必要がありますか? 言語を変更して、変数とパラメーターに型を持たせることは理にかなっていますか?
2 に答える
この質問は、@ jon-Skeet のような誰かによって適切に保存されない限り、おそらく閉じられます。
それまでは、厳密に型付けされたプログラミングのバックグラウンドを持っている人なら誰でも、少なくとも型付けを指定するオプションについて議論するでしょう。しかし、結局のところ、言語の作成者/修正者は、型指定の可能性を可能にするために何の努力も払わないほど、型付けの要件を嫌っていました。したがって、たとえそれが本当に理にかなっているとしても、私はそれが起こるとは考えていません。
私の簡単な調査によると、python では型の指定が許可されていないようです。ただし、 isinstance http://docs.python.org/library/functions.html#isinstanceを使用してタイプを確認できます
ここで、個人的な意見の問題として、そうしない理由を述べます。問題の言語のメンテナー/作成者が、効率/言語の実際の意図を損なわない方法でそれを行うことができる場合、少なくとも、タイプを指定する機能を追加することに興味のある人を許可する必要があります。
静的型付けと動的型付けを混在させることができます。それを行う言語はたくさんあります。
object
最も単純なケースでは、 (Python の用語を使用して) をルートとするすべての型を含むクラス階層があります。すべての「型指定されていない」変数には型object
があるため、任意の変数を保持できます。他の変数は、 などのより具体的な型を持つことができますint
。
実装では実行時の型チェックを実行する必要がありますが、コンパイル時に型を判別できるチェックを最適化することができます。
Cythonは、静的型付け部分を C コンパイラにオフロードすることを除いて、同様のことを行います。
def foo():
cdef int i = 0 # statically typed variable
ham = "spam" # dynamically typed variable
while i < 10:
print(ham)
i += 1