История JavaScript 5

Feb 21, 2010 21:36

Если кто не знает, JavaScript (точнее, ECMAScript) 4 должен был получить такие замечательные возможности, как специальный синтаксис для нерасширяемых классов, пространств имен (namespace), свойств и прочие атрибуты "нормального объектно-ориентированного языка". В общем, из скриптово-функционального рая он должен был превратиться в огороженный ад, подобие настоящей Java. Названная причина - классическим пацанам не хватает мозгов, чтобы отойти от привычной статической парадигмы.

Все уже обо всем договорились - Mozilla, Adobe, Opera и даже Microsoft вроде была не против. Да что там Microsoft - автор JavaScript Брендон Эйч был руками и ногами за (видимо, он так и не понял, что с первого раза ему случайно удалось создать шедевр, и скрещивать его с монструозными мегаязыками совершенно не нужно). К этому моменту Adobe уже реализовала все планируемые фичи в своем Flash поделии, не дожидаясь официального принятия стандарта.

За спасение чистоты языка мы должны благодарить великого мессию Дугласа Крокфорда, который попал в комитет по стандартам от имени компании Yahoo. Будучи единственным в этом комитете человеком, который реально писал на JavaScript большие веб-сайты, он начал крутые разборки и макание теоретиков в практику. Вскоре он обнаружил, что представителю Microsoft на самом деле тоже очень не нравится происходящее, но он тихо молчит себе в тряпочку, т.к. боится, что Microsoft как всегда обвинят в том, что она не стремится развивать веб-стандарты и вставляет конкурентам палки в колеса. Как в воду глядел. После того, как Дуглас убедил товарища поддержать правильную точку зрения, начались большие и грязные разборки, в ходе которых как всегда все палки достались Microsoft, а Yahoo скромно постоял в сторонке. Итогом разборок стало то, что великую и ужасную переделку JavaScript решили чуть-чуть отложить, а сначала сделать промежуточную версию 3.5, в которой исправить самые необходимые вещи.

Пока Крокфорд сотоварищи занимались разработкой реальных улучшений, великие теоретики по прежнему работали над особо продвинутой версией. Однако на этом счастливом моменте у них наконец-то появилось время на то, чтобы обсудить мегакрутые нововведения со своими собственными разработчиками JavaScript-машин. Выяснилось, что на пути светлого будущего встала жестокая реальность - реализовать все теоретические идеи было очень не просто. Фактически отлаженные и более-менее оптимизированные JavaScript-движки пришлось бы переписывать заново с добавлением кучи дополнительно мусора, а потом со всем этим г. на борту пытаться взлететь на не очень крутых пользовательских нетбуках, мобильниках и прочих веб-девайсах.

Итог был совершенно закономерен - JavaScript 4 был успешно похоронен, версия 3.5 была переименована в 5, компания Adobe конкретно обломалась со своими нововведениями во Flash-е и теперь вынуждена поддерживать абсолютно ни с чем не совместимый язык, а на репутации Microsoft появилось очередное черное пятно. Что мы получили в новом релизе:

1. Возможность включения строгого режима (Strict mode). В этом режиме нельзя использовать необъявленные переменные, переопределять eval, кроме того, часть ошибочных и проблемных ситуаций перестанет молча проглатываться и будут вызывать исключение.

2. Свойства. Теперь к любому объекту можно добавить свойство, т.е. пару методов для чтения и записи значения.

3. Встроенная поддержка JSON. Обеспечивает улучшенную производительность. Кстати, автором JSON является тот самый Крокфорд.

4. Возможность привязки функций к event-ам без подмены this. Лично для меня одно из самых ожидаемых новшеств.

5. Много новых методов у Object для поддержки reflection. Кроме того, добавлена возможность заморозить объект, запретив добавление новых полей, свойств и всего прочего. Наверное, единственная фича, навеяная попыткой огораживания JavaScript в стиле статических языков. Надеюсь, авторы библиотек и API не станут ей пользоваться.

Большинство новых фич имеют обратную совместимость. Т.е. уже сейчас можно поставить флаг, включающий строгий режим - он будет игнорироваться на старых версиях браузеров. Многие новые методы можно сэмулировать на самом JavaScript. Например, встроенная поддержка JSON совместима со библиотекой json2.js, аналогичные библиотеки люди пишут и для других новых фич. Впрочем, частично функционал пятерки уже поддерживается во всех современных версиях браузеров. Так что еще каких-нибудь пять лет на изничтожение старых версий - и мы сможем смело творить на новой версии стандарта.

P.S. Единственная большая гадость, которую так и не поправили в JavaScript 5 - это уродский синтаксис для объявления анонимных функций. function (a, b, c) {} - это слишком длинно для функционального программирования. Однако на ближайшие лет десять мне придется с этим смириться.

программирование, javascript

Previous post Next post
Up