Журнал LinuxFormat - перейти на главную

LXF98:Что за штука

Материал из Linuxformat
Перейти к: навигация, поиск

JavaScript 2?

Половина web-сайтов успешно использует JavaScript – так стоит ли чинить то, что не ломалось? Пол Хадсон объяснит, что к чему…

  • ОК, наконец-то я дождался темы, о которой еще до начала ваших объяснений мне известно все!

Правда? Стоит пожалеть деньги, выложенные за этот номер журнала! Но, признаться, я несколько удивлен: о JavaScript 2 знают пока лишь немногие.

  • JavaScript 2? Я как-то не до конца вник. Облом! И правда, о JavaScript 2 я пока ничего не слышал – прошу вас, продолжайте…

Уже лучше! Я вижу, вы многое знаете о текущей версии JavaScript, да и немудрено: JavaScript нынче повсюду. Забрались ли вы в Интернет через настольный компьютер или смартфон, работаете ли с XML-файлами или SVG с поддержкой скриптов – вам не обойтись без JavaScript.

Не секрет, что свыше половины всех web-сайтов в той или иной степени используют JavaScript, а некоторые (Google Maps, например) целиком построены на нем!

  • Да, да: акроним Ajax нынче повсюду в моде.

Вот именно, буква “J” в Ajax означает JavaScript, поэтому можно смело назвать JavaScript непревзойденным языком программирования Web 2.0. Даже для сайтов без Ajax, JavaScript сегодня вне конкуренции.

  • Погодите… зачем тогда что-то менять? Я уважаю стандарты…

Не забывайте, что JavaScript был создан десятилетие назад, когда Сеть была совсем не той, что сейчас. Тогда JavaScript занимался установкой и чтением cookies, выводом простеньких часов на экран, проверкой правильности заполнения форм и другими примитивными задачами. Теперь его основная цель – обеспечить взаимодействие пользователя с web-страницей: не желая наблюдать уныло-статические картинки, современные пользователи жаждут интерактивности: почти мгновенного обновления, общения с другими пользователями, и – вероятно, самое важное – они больше не хотят нажимать кнопку “Reload” (Обновить). Короче: JavaScript был создан для решения простых задач, и уже с трудом удерживает выстроенные вокруг него супер-сайты.

  • А разве недостаточно легкой модернизации – скажем, JavaScript 1.1, а не 2.0…

На самом-то деле, добрались уже до JavaScript 1.7! Чтобы соответствовать растущим запросам, новые функции добавляются непрерывно.

  • Почему тогда столько внимания 2.0? Рано или поздно, выход из серии 1.х на 2.0 стал бы просто логическим продолжением.

В общем, да. А еще такие значительные изменения нумерации версий обычно знаменуют обратную несовместимость – скрипты прежних версий просто не смогут работать на новой. Обычно имеется в виду вот что: «если уж пришлось пойти на слом обратной совместимости – самое время внести и другие давно назревшие изменения». А изменения назрели действительно радикальные: формальное определение классов вместо ныне существующего быстрого определения прототипов, пространства имен, примитивные типы (вместо представления всего сущего в качестве объектов), модификаторы доступа (private, public и т.п.) и многое другое. Масштабность изменений вынудила одного из критиков сказать следующее: «Предполагается, что JavaScript – высокоуровневый, абстрактный, гибкий язык. Именно этим он был хорош, таким же образом его следовало бы использовать и дальше. Если пойти по пути, предложенному JavaScript 2, то, если честно, понадобится создать новый JavaScript для выполнения тех задач, которые этот язык столь успешно решал».

  • В угоду программистам, нужно многое изменить… А чтобы сохранить преемственность, необходимо многое оставить… Возможна ли золотая середина?

Часть проблемы состоит в том, что многие не вполне представляют себе функциональность нынешнего JavaScript – поэтому, просматривая спецификацию JavaScript 2, они удивляются: «Ничего себе, сколько всего!», тогда как половина всех нововведений давно работает в JavaScript 1.7, просто они об этом не знают. Другая проблема – столкновение множества самых разных точек зрения. Брендан Эйх [Brendan Eich], технический директор Mozilla, который и создал JavaScript десять лет назад, еще работая на Netscape, назвал четыре самых распространенных совета, полученных им от самых разных людей: «оставьте язык в покое», «пересмотрите его мощно, необратимо», «чуть-чуть подправьте его (90 вариантов “чуть-чуть”)» и «не превращайте это в Java!».

  • Сделать два разных JavaScript – совсем неплохая идея!

Допускаю, но аргументы в пользу унификации еще убедительнее: JavaScript – одно из немногих понятий, однозначно воспринимаемых разными браузерами. Да, совместимость несовершенна – например, подружить Opera с Gmail удалось не сразу. В остальном же способность JavaScript примирять самые разные браузеры и платформы поразительна.

  • А если взять да и обновить все разом до JavaScript 2?

Надежда есть – по крайней мере, с годами. Понадобилось немало лет, чтобы JavaScript достиг нынешнего уровня, и хотя Mozilla, Konqueror, Opera и Safari не заставят себя долго ждать, на адаптацию Internet Explorer может уйти несколько лет. Тем временем многие сайты будут просто отказываться работать под ним, а пользователи будут испытывать неудобства.

  • А разве нельзя подготовить одну версию страницы для JavaScript 2, а другую – для версии 1.7?

Можно, но ведь разработчику сайта понадобится написать, отладить и поддерживать вдвое больше кода – едва ли это будет способствовать увеличению продуктивности, обещанному JavaScript 2! Но ходят разговоры о создании конвертора с JavaScript 2 на JavaScript 1.7, то есть программирование будет выполняться на JavaScript 2, а эквивалент для версии JavaScript 1.7 сгенерирует компьютер.

  • Звучит разумно. А если точнее, о каких новых функциях идет речь?

Схематично я уже описал основные отличия новой версии, и похоже на то, что все эти нововведения войдут в финальный стандарт. С другой стороны, одна из целей – максимально упростить переход на JS2. Может быть, стоит более подробно остановиться на новшествах…

  • Имеет смысл. Начните с пространств имен — хоть что-то знакомое…

Да, да, пространства имен и их близкие друзья-пакеты есть в C++, Java, C# и Perl, и вполне могут однажды возникнуть в PHP. «Пространство имен» в терминологии программистов означает набор использованных ключевых слов. Например, Scriptaculous API предоставляет десятки эффектов и DOM-инструментарий для сборки. Если воспользоваться ими, да еще парочкой других API, то скоро проявятся конфликты между различными именами классов и функций, определенных разными API – гляди в оба, чтобы не ошибиться. Пространство имен позволяет сказать: «В этом скрипте под словом Effect я подразумеваю Scriptaculous Effect».

Улавливаете? Конечно, пространство имен касается лишь крупных сайтов с множеством разнообразных компонентов. Есть понятия попроще: JavaScript 2 будет способен различать объекты, массивы, функции, логические переменные, целые числа, числа с плавающей точкой, десятичные числа, строки, даты, регулярные выражения и ошибки. Версия 1.7 втиснула целые числа, числа с плавающей точкой и десятичные числа в упрощенный тип данных “number”, но в JavaScript 2 все будет иначе.

  • Хм… А разве десятичное число – это не число с плавающей точкой?

Числа с плавающей точкой обладают известной неточностью – например, вы думаете, что имеете дело с числом 0,1, а на самом деле оно 0,99999999 или 0.10000001. А значит, даже простая арифметика может вылиться в проблему. Возьмем маленькую команду: alert((0.1+0.7)*10). Это означает: «сложить 0,1 с 0,7, умножить результат на 10, затем показать это в окне сообщения». Вы ожидаете, что в окне выведется 8, а увидите 7.99999999.

  • Но… но это же плохо!

Во-во, полная фигня.

  • Э-э… как-то вы уж очень по-простому.

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

  • И будет строгая типизация данных?

Нет, не совсем. Но программисты получат возможность строго определять некоторые типы данных, а также сообщать, какой тип данных ожидается на возврате из функции. Все это похоже на “type hints” в PHP.

  • Стойте – для меня это уже слишком. Не могли бы вы объяснить в общих чертах?

ОК. JavaScript 2 взял итераторы и слайсинг от Python, перегрузку операторов от C++, ключевое слово let из Basic. Получилось некоторая мешанина, но в итоге JavaScript 2 обещает вобрать в себя лучшие черты других популярных языков программирования.

  • Звучит так необычно… Не опасно ли внедрять так много нового сразу?

Верно. Именно поэтому JavaScript 1.7 (поставляемый с Firefox 2.0) уже обладает многими из заявленных свойств – например, let уже там, итераторы тоже. JavaScript 1.9, выпуск которого планируется совместить с выходом Firefox 3.0, будет обладать еще большим количеством нововведений. После этого переход на JavaScript 2.0 уже не будет потрясением.

  • Надо полагать. Ой! Кажется… утюг! Я забыл выключить утюг – скорее, дайте мне URL, мне надо бежать!

Давать-то пока нечего, JavaScript 2.0 настолько новое понятие, что нет еще ни книг, ни учебников, ни howto и, уж конечно, никаких примеров для загрузки. Сожалею!

Эх, уже убежал…
Персональные инструменты
купить
подписаться
Яндекс.Метрика