動的型付け言語の成長に伴い、柔軟性が向上するため、人々が仕様で許可されている以上のプログラムを作成する可能性が非常に高くなります。
ボビンスの回答: A question about JavaScript's slice and splice methodsを読んだとき、私の考えはこの質問の影響を受けました。
基本的な考え方はsplice
、Javascript では、特定の状況でのみ使用するように指定されていますが、他の状況でも使用でき、言語は非常に柔軟に設計されているため、言語がそれを止めるためにできることは何もないということです。 .
誰かが仕様を読み、それに従うことに決めない限り、そのような違反が数多く発生していることは確かです。
これは問題ですか、それともそのような柔軟な言語を書くことの自然な延長ですか? それとも、JSLint のようなツールが仕様の警察に役立つと期待すべきでしょうか?
この質問の中で、python の実装が仕様であるという 1 つの回答が気に入りました。それがこれらのタイプの言語の真実に実際に近いかどうか、私は興味があります。基本的に、言語で何かを実行できる場合、それは仕様に含まれています。 Python 言語仕様はありますか?
アップデート:
いくつかのコメントを読んだ後、仕様の splice メソッドを確認しようと思いました。これが、104 ページの下部にあるhttp://www.mozilla.org/js/language/E262-3 で見つけたものです。 pdfであるため、仕様に違反することなく子の配列で splice を使用できるようです。私の例で人々が行き詰まることを望んでいませんが、うまくいけば、質問を検討してください。
The splice function is intentionally generic; it does not require that its this value be an Array object.
Therefore it can be transferred to other kinds of objects for use as a method. Whether the splice function
can be applied successfully to a host object is implementation-dependent.
更新 2: これは JavaScript に関するものではなく、言語の柔軟性と仕様に興味があります。たとえば、Java の仕様ではインターフェイスにコードを配置できないと規定されていると思いますが、AspectJ を使用して頻繁に実行しています。これはおそらく違反ですが、作成者は AOP を予測しておらず、JVM が Scala と Clojure に対しても十分に柔軟であるのと同様に、ツールはこの用途に曲げられるほど柔軟でした。