Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JavaScript завтра / Сергей Рубанов (Exante Limited)

620 views

Published on

За последние несколько лет в мире js-разработки особое внимание получили такие проекты как AtScript, TypeScript, SoundScript, Flow, Traceur, Babel, каждый из которых пытается предоставить разработчикам некую "улучшенную" версию JavaScript. Комитет TC39 также стал очень активен и разработал стратегию развития стандарта ECMAScript с более частыми релизами. Движки JavaScript стремительно приближаются к полной поддержке ES6. Огромное количество JS-фреймворков и библиотек выбирают следующую версию стандарта уже сегодня. Это означает, что необходимо уже сегодня обратить внимание на происходящее в мире JavaScript-разработки и разобраться, что ждет язык завтра.

В своем докладе я постараюсь дать ответы на следующие вопросы:
- почему такие фреймворки и библиотеки как Angular, Ember, React начали активно и кардинально меняться;
- почему новая версия стандарта языка ES6 так долго внедряется вендорами браузеров и как TC39 решил ускорить процесс стандартизации и внедрения последующих версий ECMAScript;
- почему CoffeeScript больше не "just JavaScript", и действительно ли он сделал такой значимый вклад в следующую версию JavaScript;
- почему были созданы AtScript, TypeScript, Flow, чем каждый из них отличается от остальных, и как они влияют на дальнейшее развитие JavaScript;
- что такое Strong Mode и SoundScript;
- как начать писать ES6+ код уже сегодня.

Published in: Engineering
  • Be the first to like this

JavaScript завтра / Сергей Рубанов (Exante Limited)

  1. 1. JavaScript завтра Рубанов Сергей Exante Limited 1 FrontendConf 2015
  2. 2. План доклада • JavaScript вчера • JavaScript сегодня • JavaScript завтра 2
  3. 3. JavaScript вчера Интерпретируемый язык программирования для браузера Netscape Navigator • валидация форм • динамическая замена изображений • управление Java- апплетами извне Брендан Айк, создатель JS 3
  4. 4. JavaScript • интерпретируемый • основанный на прототипном программировании • с динамической типизацией 4
  5. 5. Экскурс в историю • разработан в мае 1995 Бренданом Айком и получил название Mocha • в сентябре 1995 был интегрирован в бета-версию браузера Netscape Navigator 2.0 уже под именем LiveScript • в декабре 1995 года была выпущена третья бета-версия Netscape Navigator 2.0, в которой язык был переименован в JavaScript (с разрешения компании Sun) • одновременно Netscape выпустила серверную реализацию JavaScript для Netscape Enterprise Server 5
  6. 6. Экскурс в историю • в 1996 Microsoft выпускает IE 3 с JScript • в 1996 Netscape, не добившись поддержки консорциума W3C, обращается к компании ECMA, при которой создается TC39 и выпускаются спецификации ES1 (июнь 1996) и ES2 (июнь 1998) • в декабре 1997 выходит редакция ES3 (обработка исключений, регулярные выражения, switch, do-while и другие улучшения) • 18 февраля 2005 Джесси Джеймс Гаррет выпускает статью "Ajax: A New Approach to Web Applications" 6
  7. 7. Экскурс в историю • в 2008 прекращается работа над ES4 и начинается разработка Harmony • декабрь 2009 — выход ES5 (strict mode, getters, setters, JSON, Object.create и т.д.) • июнь 2011 — выход ES5.1 (приведение спецификации в соответствие стандартам ISO/ IEC) 7
  8. 8. JavaScript сегодня JavaScript: The Good Parts vs JavaScript: The Definitive Guide 8
  9. 9. • стабильная версия 1.0.0 вышла 24 декабря 2010 • Золотое правило CoffeeScript: "It's just JavaScript" • добавляет синтаксический сахар вдохновленный Python, Ruby и Haskell • конструкции if, switch, for являются выражениями • используется компаниями Dropbox, GitHub и многими другими, добавлен в Ruby on Rails 3.1+ 9
  10. 10. Плюсы: • позволяет не писать точки с запятой 10
  11. 11. Минусы: • не заботится о скорости исполнения • не совместим с ES6 • вызывает зависимость • никогда не был "just JavaScript" 11
  12. 12. Популяризовал: • rest parameters / spread operators (splats) • destructuring assignment • интерполяция строк • классы • => • аргументы по умолчанию • for-of 12
  13. 13. Dart • Создан 10 октября 2011. • Позиционировался как замена JS, страдающего от фундаментальных изъянов, которые невозможно исправить • 4 июля 2014 стал стандартом ECMA-408 • 25 марта 2015 создатели языка объявили об остановке разработки VM 13
  14. 14. Брендан Айк vs Dart team news.ycombinator.com/item?id=9264531 14
  15. 15. Плюсы: • добавляет опциональную типизацию • аннотации • более продвинутая система типов • если верить разработчикам, то Dart VM незначительно обходит V8 по некоторым бенчмаркам Dart 15
  16. 16. Минусы: • маленькое коммьюнити • добавляет относительно немного по сравнению с ES6 • заставляет грустить Брендана Айка Dart 16
  17. 17. PNaCl • представлен 12 ноября 2013 • основан на NaCl • компилирует C и C++ код в промежуточное представление подмножества LLVM с помощью AOT-компилятора • исполняется в песочнице браузера • позволяет исполнять нативный код для процессоров архитектур Intel x86, ARM и MIPS 17
  18. 18. asm.js • представлен 21 марта 2013 • представляет собой промежуточный язык программирования из кода на языках со статической типизацией и ручным управлением памятью • является строгим подмножеством JavaScript 18
  19. 19. asm.js • не предназначен для написания программ человеком, получается с помощью компиляторов исходного кода в исходный код, таких как Emscripten • околонативная скорость исполнения достигается за счет AOT-оптимизации (в V8 применяется JIT) • с 7 мая поддерживается браузером Microsoft Edge 19
  20. 20. Некоторые другие попытки улучшить JS • ClojureScript • scala.js • LiveScript • PureScript • Elm • TypeScript • и т.д. 20
  21. 21. JavaScript • интерпретируемый • основанный на прототипном программировании • с динамической типизацией 21
  22. 22. JavaScript • динамически компилируемый • основанный на прототипном программировании • с динамической типизацией 22
  23. 23. JavaScript завтра • релиз ES6 в июне 2015 • то же самое касается ECMA 402 (Intl) • уже частично поддерживается браузерами и серверными реализациями • ECMAScript переходит на новую нумерацию версий 23
  24. 24. JavaScript завтра • ECMAScript 2015 • github.com/lukehoban/es6features • за исключением Module Loader API • черновик (Release Candidate #4, 3.04.2015) • ECMAScript 2016+ • github.com/tc39/ecma262 • github.com/tc39/ecma262/blob/master/stage0.md 24
  25. 25. Транскомпиляторы • Traceur • Babel • TypeScript 1.5+ • JSTransform • и другие 25
  26. 26. Опциональная статическая типизация • Closure Compiler (JSDoc) • Flow • TypeScript • AtScript (был поглощен TypeScript) 26
  27. 27. TypeScript • playground • спецификация Safe TypeScript • обзор • исследовательская работа • playground 27
  28. 28. Типизация в ECMAScript • 28 января 2015 TC-39 обсудил некоторые вопросы типизации на уровне JavaScript VM (Sane Mode и SoundScript) • 1 февраля 2015 Дмитрий Ломов представил Stricter Mode и SoundScript на конференции The Rolling Scopes в Минске • SoundScript как альтернатива аннотаций asm.js • реализация в Traceur и Chrome Canary • страница V8 experiments (Strong Mode и SoundScript) • strawman proposal 28
  29. 29. Sane/Stricter/Strong mode • запрещено расширение объектов и классов • var и необъявленные переменные запрещены • запрещен доступ к несуществующим свойствам • запрещены дыры в массивах • количество параметров функций строго определено, доступ к объекту arguments запрещен 29
  30. 30. Sane/Stricter/Strong mode • undefined не может быть переопределен • ==, !=, for-in, + для случаев кроме пар строк и пар числе запрещен, switch ограничен • eval запрещен • интероперабелен с "weak mode" (и наоборот) 30
  31. 31. SoundScript • типы используются для ранней и агрессивной оптимизации кода • IDE могут использовать аннотации типов для раннего обнаружения ошибок • использование strong mode и gradual (sound) typing позволяет сократить количество проверок во время исполнения, а также оптимизировать их • предлагает резервацию синтаксиса TypeScript для последующего использования в ECMAScript 31
  32. 32. SoundScript challenges • типизация должна быть эффективной, потому что время компиляции — это время исполнения • должна поддерживаться ленивая компиляция — необходимо знать тип, возвращаемый функцией до анализа ее тела • интероперабельность, т.к. новый код может быть добавлен в любой момент 32
  33. 33. Всегда ставьте на JavaScript (Брендан Айк) 33
  34. 34. Вопросы? github.com/chicoxyzzy twitter.com/chicoxyzzy ru.linkedin.com/in/chicoxyzzy слайды: bit.ly/JS_frontendconf2015 34

×