Отец JS и отец JSON: следующая остановка JavaScript

внешний интерфейс JavaScript TypeScript React.js
Дилан Шиманн Переводчик|Тан Юнь 11 июля в Лондоне прошла конференция FullStack 2018, на которой Брендан Эйх, отец JavaScript, присоединился к Дугласу Крокфорду, отцу JSON и автору книги «JavaScript: The Good Parts», чтобы рассказать о будущем JavaScript.

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

Эйх: Вы не должны реагировать на разработчиков

Эйх рассказывает о том, как JS изменился за эти годы и как скоро он будет обновлен. Например, JS никогда не принимал E4X, но многие пользователи React любят «E4X, лишенный плохих частей XML», или JSX.

Эйх упоминает, что самое большое сожаление при создании JavaScript заключается в том, что вскоре после выпуска первой версии JavaScript он стал удовлетворять потребности пользователей, а не думать о решении проблем, с которыми они столкнулись. Например, используйте оператор равенства == для приведения вида 12 == '12', чтобы упростить отправку данных на сервер по HTTP.

В этом выступлении Эйх также подчеркнул ценность asm и WebAssembly. asm.js — это статически типизированное подмножество JavaScript, а исходный код asm.js работает близко к нативному.

Это улучшение производительности связано с поддержкой asm перехода от JIT-компиляции к AOT-компиляции и от абстрактного синтаксического дерева (AST) непосредственно к генерации машинного кода.

WebAssembly — это более быстрая загрузка и более общая версия asm.js. WebAssembly выполняется в отдельном процессе, поэтому его синтаксис более выразителен, чем у JavaScript, но все же является неотъемлемой частью виртуальной машины JavaScript.

Предстоящие новые функции

Эйх в восторге от следующих особенностей языка, которые появятся в следующем году:

  • TC39 BigInt — новый тип значения, который может обрабатывать целые числа произвольной точности, поддерживает TypedArrays.

  • Динамический импорт () — импорт модуля ES по умолчанию статичен, динамический импорт поддерживает предварительную выборку

  • Array.prototype.flat / flatMap — Произвольное выравнивание массивов, решение для выравнивания и сглаживания.

  • Больше деструктуризации - работает с произвольными объектами и массивами

  • Класс Частные методы и контроль доступа - Eich считает, что символ префикса «#» несколько противоречивых, не должен использоваться

  • Асинхронная итерация — синтаксис for-await-of

Во время части вопросов и ответов Эйха спросили о прогрессе предложения двоичного абстрактного синтаксического дерева (binary-ast), которое находится между JavaScript и WebAssembly, которое обеспечивает двоичное синтаксическое дерево для всего JavaScript.

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

Когда его спросили о системах типов, таких как TypeScript, Эйх заметил, что динамическое программирование приносит людям много удобства, не мешая им, и является очень хорошей системой типов. Эйх отмечает: «Люди всегда привыкли использовать систему типов, которая ничего не стоит».

TypeScript очень хорош, потому что это строгий суперчарп в JS, каждая программа JS — это программа TS, а Андерс Хейлсберг — первоклассный.

Эйха спросили, будет ли стандартизирована React-подобная библиотека. Он указал, как ранние библиотеки, такие как Dojo и Prototype, перенесли свои концепции в более поздние версии JS, отметив, что «мы не стандартизируем библиотеки, такие как React». Вместо этого мы стремимся поднять основные примитивы из библиотеки до основного языка. Эйх отмечает, что слишком ранняя стандартизация может вызвать проблемы, особенно для таких решений, как системы типов.

На вопрос о том, что он думает о предложении Observables, основанном на RxJS Observables. Эйх отметил, что разработка спецификации застопорилась, и встраивание необходимой функции в язык представляет собой огромную проблему. И он также не уверен, следует ли добавлять в язык Observables. Он не упоминает, что спецификация WHATWG для потоков (https://github.com/whatwg/streams) является надмножеством Observables, возможно, конкуренция между двумя предложениями сдерживает Observables. ход предложения.

Наконец, Эйха спросили о машинном обучении, утверждая, что, хотя глубокое обучение полезно, оно ничего не говорит нам о причине и следствии, это просто усовершенствованная форма алгоритма подбора кривой.

Крокфорд: у JavaScript есть преимущества перед другими языками

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

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

Крукфорд считает, что общая проблема с языками программирования состоит в том, что они могут быть слишком сосредоточены на ремонте «плохой пластической хирургии» без четкого видения будущего.

По сравнению с тем, что было десять лет назад, я думаю, что хорошие части языка становятся все меньше и меньше, но хорошие части становятся все лучше и лучше.

На встрече Крокфорд поставил под сомнение некоторые предположения аудитории и указал, что эти предположения оказывают большое влияние на наш прогресс. Например, он утверждал, что надо начинать считать с нуля, и объяснял, почему все должно начинаться с нуля.

Крокфорд указал, что самым большим недостатком ES2015 на данный момент является отсутствие надлежащих хвостовых вызовов (tail call) или механизма оптимизации хвостовых вызовов, пока только Safari реализовал эту часть спецификации. По словам Крокфорда, хвостовые вызовы — самая важная функция ES2015, потому что эта функция помогает поддерживать хвостовую рекурсию, итерацию функциональной замены и передачу продолжения.

Крукфорд объяснил свое слово «простой», «проще стандарт, тем меньше консенсус есть и тем более вероятно, что он должен добиться взаимодействия». Используя JSON в качестве примера, он объяснил, что JSON - это синтаксис, он не имеет заявленное поведение и легко понять и использовать. Весь синтаксис JSON может быть сведен на заднюю часть визитной карточки.

Крокфорд работает над новым языком и компилятором под названием «neo», который реализует одобренные Крокфордом функции JavaScript в форме нового языка и компилирует четко определенные программы JavaScript от источника к источнику. Более подробную информацию он опубликует в книге под названием How JavaScript работает.

Ссылки по теме

https://skillsmatter.com/skillscasts/10595-opening-keynote-javascript-the-next-generation

https://skillsmatter.com/skillscasts/11232-keynote-how-javascript-works-a-preview

https://www.infoq.com/news/2018/07/eich-crockford-js-future