С ростом языков с динамической типизацией, поскольку они дают нам большую гибкость, очень высока вероятность того, что люди будут писать программы, выходящие за рамки, допустимые в спецификации.
На мои мысли повлиял этот вопрос, когда я прочитал ответ Бобинса:
Вопрос о методах среза и сращивания в JavaScript
Основная мысль заключается в том, что splice
в Javascript определено для использования только в определенных ситуациях, но оно может использоваться в других, и нет ничего, что язык может сделать, чтобы остановить его, как язык разработан, чтобы быть чрезвычайно гибким.
Если кто-то не прочитает спецификацию и не решит ее придерживаться, я вполне уверен, что таких нарушений много.
Это проблема или естественное продолжение написания таких гибких языков? Или нам следует ожидать, что такие инструменты, как JSLint, помогут полиции спецификации?
Мне понравился один ответ в этом вопросе, что реализация python является спецификацией. Мне любопытно, если это на самом деле ближе к истине для этих типов языков, то, по сути, если язык позволяет вам что-то делать, то это в спецификации.
Есть ли спецификация языка Python?
UPDATE:
Прочитав пару комментариев, я подумал, что я проверю метод сплайсинга в спецификации, и это то, что я нашел в нижней части страницы 104, http://www.mozilla.org/js/language/E262-3.pdf,, поэтому кажется, что я могу использовать сплайсинг на массив детей без нарушения спец. Я просто не хочу, чтобы люди увязли в моем примере, но надеюсь рассмотреть вопрос.
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.