Команда Google JavaScript предлагает “сильный режим”


Достаточно ли строгого режима для JavaScript? Команда Chrome V8 предлагает расширение для строгого режима, которое будет называться сильным режимом, который позволяет вносить более значительные изменения в язык, чем это возможно при требовании обратной совместимости.

Команда V8 приводит две причины для дальнейшего ограничения гибкости JavaScript:

Оптимизировать производительность JavaScript сложно

Юзабилити JavaScript приносит с собой много неожиданностей и сложное неявное поведение

Проблемы с производительностью, похоже, нацелены на asm.js Mozilla, а удобство использования включает в себя типизированные вариации JavaScript, такие как TypeScript.

Вместо определения более эффективного подмножества, такого как asm.js, или надмножества, которое может быть скомпилировано в JavaScript, например TypeScript, Google предлагает новый «режим» – Strong Mode. Звучит впечатляюще.

Интересно, что строгий режим заявлен как истинное подмножество JavaScript, и любая программа, которая работает правильно с включенным строгим режимом, должна работать под неограниченным JavaScript. Сильный режим также включает строгий режим.

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

Список удаляемых функций велик, но следующие моменты дают вам некоторое представление о том, как ведет себя сильный режим:

вы больше не можете удалять свойства – использование delete является синтаксической ошибкой

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

функции должны вызываться со всеми используемыми параметрами

объявления функций – это неизменяемые привязки

eval запрещен, и использование eval является синтаксической ошибкой

ошибка типа выдается, если операнды любого числового оператора не являются числами

Как видите, цель состоит в том, чтобы удалить все, что может сбивать с толку.

Если режим Strong – это очистка JavaScript, то второе предложение более радикально. Команда V8 планирует реализовать SoundScript – типизированную версию JavaScript, основанную на TypeScript.

Если у нас есть TypeScript, зачем нам SoundScript?

Команда V8 утверждает, что нам нужна дополнительная типизация, встроенная в виртуальную машину. Это позволит использовать типы в интерактивной среде разработки, а виртуальная машина может использовать типы для реализации оптимизации и проверки типов во время выполнения. Поскольку TypeScript скомпилирован в JavaScript, он не может достичь ни одной из этих целей. SoundScript делает возможным и более эффективным режим Strong – оба рассматриваются как подходящие друг другу и улучшающие друг друга.

Так это хорошие идеи?

И да и нет.

Во-первых, это всего лишь предложение Google, и поэтому нет гарантии, что какой-либо другой движок JavaScript примет режим Strong и SoundScript.

Есть намерение включить обе эти функции в следующий стандарт ECMAScript, но еще предстоит увидеть, какой прием встретит этот план.

Наиболее интересным является следующий FAQ:

В: Чем SoundScript отличается от asm.js?

О: У них разные цели: asm.js – это низкоуровневый язык, предназначенный для компиляции других (в основном низкоуровневых) языков. SoundScript – это система типов, ориентированная на пользователя, для прямого использования JavaScript как языка высокого уровня. Оба дополняют друг друга, оба полезны, и V8 стремится к обоим.

Несмотря на это заверение, вы можете рассматривать предложения Google как встречное предложение Mozilla (а теперь и Microsoft) asm.js.

Наконец, есть сомнения, даже команда V8 признает, что это исследование, что JavaScript можно модернизировать с помощью системы типов, реализованной в виртуальной машине, без появления задержек, вызванных JIT-компиляцией.

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


Добавить комментарий