Почему javascript обратно совместим с ошибкой? - PullRequest
6 голосов
/ 08 февраля 2011

В Кодеры в работе , Дуглас Крокфорд обсуждает, как ошибки в браузерах приводят к тому, что Javascript становится сложным, неуклюжим языком, и исправление его - ловушка-22. В Начиная JavaScript с использованием сценариев DOM , и Аякс Кристиан Хейлманн говорит нечто подобное: «Большое разнообразие пользовательских агентов различной технической тонкости [...] представляет большую опасность для JavaScript».

Почему у JS нет новой версии? Есть ли что-то присущее языковой структуре, когда обратная совместимость становится обязательной ?

Обновление
Почему javascript не может работать с несколькими движками параллельно? Аналогично тому, как .NET работает версии 2, 3 и 4 на одном компьютере.

Ответы [ 8 ]

4 голосов
/ 08 февраля 2011

Ленивый copypasta по запросу OP:

JavaScript это просто язык программирования : синтаксис и семантика .Он не имеет встроенной поддержки браузеров (читай: браузер DOM).Вы можете создать программу JS, которая запускается вне браузера.Вы (должны) знать, что такое API - DOM - это просто API-интерфейс JavaScript для управления HTML-страницей.Существуют другие DOM API на других языках (C #, Java и т. Д.), Хотя они чаще используются для таких вещей, как XML.Имеет ли это смысл?

Возможно, эта статья MDC может прояснить ситуацию.

3 голосов
/ 08 февраля 2011

инерция.

Внесение критических изменений может привести к поломке слишком многих сайтов, ни один поставщик браузеров не захочет иметь дело со всеми отчетами об ошибках.

И PHB будут против нацеливания на новую версию, зачем имразработчики пишут javascript для сломанного и фиксированного языков?В любом случае, их разработчикам придется написать его для неработающей версии, так что зачем использовать 2 реализации (которые с точки зрения разработчика тоже отстой, так как теперь им приходится обновлять, поддерживать и отлаживать 2 отдельных дерева).

3 голосов
/ 08 февраля 2011

На самом деле ECMAScript 5 не полностью обратно совместим по тем же причинам, которые вы упомянули.

3 голосов
/ 08 февраля 2011

Обратная совместимость важна из-за большого количества развернутых браузеров и большого разнообразия версий этих браузеров.

Если вы используете новый, несовместимый тип Javascript для старых браузеров, все они ломаются.

Если вы изобрели новый язык, который не считается Javascript в существующих браузерах, он не будет работать с большинством браузеров. Очень немногие пользователи захотят скачать новый браузер только для работы с вашим новым языком. Поэтому веб-разработчики должны продолжать писать совместимый Javascript для поддержки большинства пользователей, независимо от того, насколько хорош новый язык.

Многие люди хотели бы, чтобы браузер поддерживал что-то лучше, чем текущий Javascript, но в ближайшее время этого не произойдет. Все производители браузеров и инструментов разработки должны будут поддерживать новую вещь и продолжать поддерживать старые вещи Javascript. Многие заинтересованные стороны просто не считают, что выгода стоит затрат. Медленное развитие Javascript, кажется, единственное жизнеспособное решение.

2 голосов
/ 08 февраля 2011

Ecmascript 5 имеет «строгий» режим.Я думаю, что этот строгий режим предназначен для борьбы с упомянутой вами проблемой.В конце концов вы бы пометили скрипты как «строгие», что вы хотите использовать новый движок, все остальные будут запускаться на старой жесткой виртуальной машине или с неоптимизированными путями кода или чем-то еще.

Это похоже на IE и Mozillaбраузеры, имеющие несколько «режимов» рендеринга веб-сайтов (IE даже меняет механизмы рендеринга).

См. этот вопрос по этому поводу

2 голосов
/ 08 февраля 2011

Ну, коренное изменение сломало бы много существующих веб-сайтов, что сделало бы много людей очень злыми:)

1 голос
/ 08 февраля 2011

Javascript имеет небольшие различия в разных браузерах.Это связано с тем, что каждый производитель браузеров имеет разные наборы обязанностей перед своими пользователями для поддержки обратной совместимости (если есть).Если бы мне пришлось выбирать, я бы сказал, что самым большим препятствием на пути развития javascript являются старые версии Internet Explorer.Из-за соглашений об обслуживании с их пользователями, Microsoft по контракту обязана поддерживать старые браузеры.Даже если другие браузеры отключат обратную совместимость, Microsoft не будет.Честно говоря, Microsoft понимает, насколько ужасны их браузеры, и, надеюсь, будет очень сильно давить на IE 9.0.Несмотря на несоответствия JavaScript в разных браузерах, они достаточно тонки, чтобы сделать кросс-браузерное программирование более чем выполнимым.Резкое прекращение обратной совместимости было бы практикой, которая превратила бы веб-разработку в кошмар.Постепенное сокращение обратной совместимости для определенных аспектов javascript возможно.

0 голосов
/ 25 марта 2012

В JavaScript еще много чего не так.Вы не можете быть полностью обратно совместимыми с вещами, которые никогда не были полностью совместимы, когда они были свежими ... Скажем, длина массива [1,] сообщается как 2 по крайней мере в более старых версиях Internet Explorer.

Самая большая ошибка JavaScript в том, что он поставляется с крошечной, неполной и в значительной степени непригодной для использования стандартной библиотекой.Вот почему все отказываются от использования jQuery, Dojo, Mochikit и т. Д. - они предлагают в основном функциональность, которая должна быть частью некоторой стандартной библиотеки, включенной в браузеры, а не распространяться в тысячах копий и версий.Именно это делает .NET и Java такими популярными: язык поставляется с разумной стандартной библиотекой.С C и C ++ вам нужно самим отыскивать симпатичные библиотеки (например, Boost).

Но, кроме этого, иногда обновляется стандарт ECMAScript.

Google также пытается это сделатьсмелый шаг вперед и переделать JavaScript немного более вменяемым способом.Усилия известны как Dart: http://www.dartlang.org/ Насколько я могу судить, Dart в основном использует синтаксис JavaScript за вычетом нескольких его особенностей.Кроме того, он также более приятен для виртуальной машины и, следовательно, скорее всего будет работать быстрее (если, конечно, вы не скомпилируете Dart в Javascript и не используете виртуальную машину JavaScript; она предлагается в качестве опции совместимости).Но, конечно, любому хардкорному энтузиасту JavaScript нацистов не понравится то, что претендует на звание лучшего, чем JavaScript.В то время как для меня они не заходят достаточно далеко.В частности, они все еще не предоставляют достаточно «classpath».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...