Обновленный синтаксис Getters/Setters в IE8Источник: thevista
Как программный менеджер, мне нравится писать спецификации функций (это требование есть даже в описании должности!). В каждом отдельном случае программный менеджер взвешивает все за и против каждого проектного компромисса, основываясь при этом на пользовательских предпочтениях, данных обратной связи и телеметрии и так далее. На базе всех этих данных мы строим определенные предположения о том, какие функции реализовывать и как именно. Несмотря на все наши усилия при планировании, мы знаем, что некоторые из наших предположений, сделанных в ранних версиях спецификаций, могут измениться в любой момент разработки. И наиболее часто меняются, пожалуй, веб-стандарты, поэтому мы заранее запланировали дополнительное время на повторную проверку поддержки стандартов и внесение необходимых изменений. Сгеагировать на изменения, внесенные в веб-стандарт в середине цикла разработки новой версии продукта, бывает достаточно сложно по ряду причин. Если говорить с точки зрения разработки, то изменения в работе функции не даются бесплатно - эти изменения влекут за собой шлейф ошибок, на поиск и исправление которых необходимо время. Другие изменения также рискованны, так как стандарты, на которых они основаны, могут измениться в любой момент. Каждый раз, когда мы рассматриваем вопрос внесения изменений, мы должны четко взвесить все возможные последствия. В данной статье я хотел бы рассказать о важном событии в эволюции одного ве-стандарта и том, как мы среагировали на него в Internet Explorer 8. Я думаю, что данная статья даст вам уникальную возможность увидеть сложности, связанные с необходимостью реагировать на внесение изменений в принятый веб-стандарт во время цикла разработки программы. ECMAScript 3.1 ECMAScript 3.1 включает в себя массу расширений для JavaScript, которые упрощают и ускоряют веб-разработку. Одной из таких функций является поддержка JSON и мы тут же решили, что встроенная в IE8 поддержка JSON API должна быть такой же, как в черновике ECMAScript 3.1. Еще одной функцией из этого черновика, которая тут же привлекла мое внимание, была поддержка синтаксиса Getters и Setters. Макеты DOM До появления ревизии 3.1 ECMAScript не включал концепцию свойств getters/setters, но некоторые реализации JavaScript ее поддерживали, используя API, которые поддерживаются несколькими основными браузерами и системами программирования. Когда мы начали работать над поддержкой макетов DOM, мы решили реализовать поддержку этого API. В спецификации ECMAScript 3.1 свойства getter/setter включены, но используя более гибкий API, а не фактический. Это решение было принято в разрез со всеми основными производителями браузеров, учитывая тех, которые уже поддерживают оригинальный getter/setter API. Учитывая, что разработка ECMAScript 3.1 в самом разгаре, а в данный процесс вовлечены разработчики основных браузеров, нам необходимо принять очень важное решение: реагировать ли нам на это неожиданное изменение и заниматься реализацией getter/setter API для DOM от ECMAScript 3.1 или же выпускать IE8 с тем, что у нас есть сейчас, а ECMAScript 3.1 API реализовать в будущем релизе? В действительно ответ зависит от того, что лучше для веб-разработчиков. Им нужно интероперабельность, а если мы обеспечим поддержку getters/setters по ECMAScript 3.1, то мы гарантировать наличие интероперабельности нашего браузера в течение обозримого будущего. Учитывая, что на тот момент мы находились всего лишь в нескольких неделях от выпуска Beta 2, мы не хотели подвергать опасности качество данного релиза, и что важнее выпустить существующую реализацию (фактический getters/setters), чтобы дать разработчикам возможность протестировать данную функцию и найти серьезные ошибки, вместо того, чтобы убрать ее из Beta 2 и оставить для RC1. Поэтому у нас было достаточно времени, чтобы среагировать на те проблемы с совместимостью, на которые в ином случае времени могло и не хватить . Первым делом стандарты Я безумно рад, что IE8 обзавелся этой функцией! Чтобы помочь начинающим веб-разработчикам, я написал несколько вводных статей по макетам DOM и getter/setters, а также новому синтаксису, который станет доступен в RC-сборке.
|