SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
JavaScript завтра
Рубанов Сергей
Exante Limited
1
FrontendConf 2015
План доклада
• JavaScript вчера
• JavaScript сегодня
• JavaScript завтра
2
JavaScript вчера
Интерпретируемый язык
программирования для
браузера Netscape
Navigator
• валидация форм
• динамическая замена
изображений
• управление Java-
апплетами извне
Брендан Айк, создатель JS
3
JavaScript
• интерпретируемый
• основанный на
прототипном
программировании
• с динамической
типизацией
4
Экскурс в историю
• разработан в мае 1995 Бренданом Айком и получил
название Mocha
• в сентябре 1995 был интегрирован в бета-версию
браузера Netscape Navigator 2.0 уже под именем
LiveScript
• в декабре 1995 года была выпущена третья бета-версия
Netscape Navigator 2.0, в которой язык был
переименован в JavaScript (с разрешения компании Sun)
• одновременно Netscape выпустила серверную
реализацию JavaScript для Netscape Enterprise Server
5
Экскурс в историю
• в 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
Экскурс в историю
• в 2008 прекращается работа над ES4 и
начинается разработка Harmony
• декабрь 2009 — выход ES5 (strict mode, getters,
setters, JSON, Object.create и т.д.)
• июнь 2011 — выход ES5.1 (приведение
спецификации в соответствие стандартам ISO/
IEC)
7
JavaScript сегодня
JavaScript: The Good Parts vs
JavaScript: The Definitive Guide
8
• стабильная версия 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
Минусы:
• не заботится о скорости исполнения
• не совместим с ES6
• вызывает зависимость
• никогда не был "just JavaScript"
11
Популяризовал:
• rest parameters / spread operators (splats)
• destructuring assignment
• интерполяция строк
• классы
• =>
• аргументы по умолчанию
• for-of
12
Dart
• Создан 10 октября 2011.
• Позиционировался как замена JS,
страдающего от фундаментальных
изъянов, которые невозможно
исправить
• 4 июля 2014 стал стандартом
ECMA-408
• 25 марта 2015 создатели языка
объявили об остановке
разработки VM
13
Брендан Айк vs Dart team
news.ycombinator.com/item?id=9264531
14
Плюсы:
• добавляет опциональную типизацию
• аннотации
• более продвинутая система типов
• если верить разработчикам, то Dart VM
незначительно обходит V8 по некоторым
бенчмаркам
Dart
15
Минусы:
• маленькое коммьюнити
• добавляет относительно немного по сравнению
с ES6
• заставляет грустить Брендана Айка
Dart
16
PNaCl
• представлен 12 ноября 2013
• основан на NaCl
• компилирует C и C++ код в промежуточное
представление подмножества LLVM с помощью
AOT-компилятора
• исполняется в песочнице браузера
• позволяет исполнять нативный код для процессоров
архитектур Intel x86, ARM и MIPS
17
asm.js
• представлен 21 марта 2013
• представляет собой промежуточный язык
программирования из кода на языках со
статической типизацией и ручным управлением
памятью
• является строгим подмножеством JavaScript
18
asm.js
• не предназначен для написания программ
человеком, получается с помощью компиляторов
исходного кода в исходный код, таких как
Emscripten
• околонативная скорость исполнения достигается
за счет AOT-оптимизации (в V8 применяется JIT)
• с 7 мая поддерживается браузером Microsoft
Edge
19
Некоторые другие попытки
улучшить JS
• ClojureScript
• scala.js
• LiveScript
• PureScript
• Elm
• TypeScript
• и т.д.
20
JavaScript
• интерпретируемый
• основанный на
прототипном
программировании
• с динамической
типизацией
21
JavaScript
• динамически
компилируемый
• основанный на
прототипном
программировании
• с динамической
типизацией
22
JavaScript завтра
• релиз ES6 в июне 2015
• то же самое касается ECMA 402 (Intl)
• уже частично поддерживается браузерами и
серверными реализациями
• ECMAScript переходит на новую нумерацию
версий
23
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
Транскомпиляторы
• Traceur
• Babel
• TypeScript 1.5+
• JSTransform
• и другие
25
Опциональная статическая
типизация
• Closure Compiler (JSDoc)
• Flow
• TypeScript
• AtScript (был поглощен TypeScript)
26
TypeScript
• playground
• спецификация
Safe TypeScript
• обзор
• исследовательская работа
• playground
27
Типизация в 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
Sane/Stricter/Strong mode
• запрещено расширение объектов и классов
• var и необъявленные переменные запрещены
• запрещен доступ к несуществующим свойствам
• запрещены дыры в массивах
• количество параметров функций строго
определено, доступ к объекту arguments
запрещен
29
Sane/Stricter/Strong mode
• undefined не может быть переопределен
• ==, !=, for-in, + для случаев кроме пар строк и
пар числе запрещен, switch ограничен
• eval запрещен
• интероперабелен с "weak mode" (и наоборот)
30
SoundScript
• типы используются для ранней и агрессивной
оптимизации кода
• IDE могут использовать аннотации типов для раннего
обнаружения ошибок
• использование strong mode и gradual (sound) typing
позволяет сократить количество проверок во время
исполнения, а также оптимизировать их
• предлагает резервацию синтаксиса TypeScript для
последующего использования в ECMAScript
31
SoundScript challenges
• типизация должна быть эффективной, потому что
время компиляции — это время исполнения
• должна поддерживаться ленивая компиляция —
необходимо знать тип, возвращаемый функцией
до анализа ее тела
• интероперабельность, т.к. новый код может быть
добавлен в любой момент
32
Всегда ставьте на JavaScript
(Брендан Айк)
33
Вопросы?
github.com/chicoxyzzy
twitter.com/chicoxyzzy
ru.linkedin.com/in/chicoxyzzy
слайды: bit.ly/JS_frontendconf2015
34

Contenu connexe

Tendances

Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
jskonst
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Yandex
 
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
GeeksLab Odessa
 
использование .Net framework
использование .Net frameworkиспользование .Net framework
использование .Net framework
jskonst
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
Yandex
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
MoscowJS
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
OdessaFrontend
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
ITCrowd Almaty
 

Tendances (20)

Как анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузерКак анимировать тысячи объектов на карте и не подвесить браузер
Как анимировать тысячи объектов на карте и не подвесить браузер
 
Platypus platform ivbit
Platypus platform ivbitPlatypus platform ivbit
Platypus platform ivbit
 
Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.Современный фронтенд за 30 минут.
Современный фронтенд за 30 минут.
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демонов
 
JavaScript завтра
JavaScript завтраJavaScript завтра
JavaScript завтра
 
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
Frontendlab: Cравнить Несравнимое  - Юлия ПучнинаFrontendlab: Cравнить Несравнимое  - Юлия Пучнина
Frontendlab: Cравнить Несравнимое - Юлия Пучнина
 
использование .Net framework
использование .Net frameworkиспользование .Net framework
использование .Net framework
 
Gradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для AndroidGradle. Новый уровень автоматизации для Android
Gradle. Новый уровень автоматизации для Android
 
"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27"Доклад не про React", Антон Виноградов, MoscowJS 27
"Доклад не про React", Антон Виноградов, MoscowJS 27
 
Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?Современный фронтенд -- как не утонуть в море хайпа?
Современный фронтенд -- как не утонуть в море хайпа?
 
Иван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проектаИван Крутов - Автоматизация сборки Java-проекта
Иван Крутов - Автоматизация сборки Java-проекта
 
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид ШирмановКомпонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
Компонентная разработка на Stylus, Jade, Typescript - Леонид Ширманов
 
Visual Studio Team Services /TFS helps doing devops
Visual Studio Team Services /TFS helps doing devops Visual Studio Team Services /TFS helps doing devops
Visual Studio Team Services /TFS helps doing devops
 
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
Частые ошибки при разработке фронтенда | Odessa Frontend Meetup #17
 
About emacs
About emacsAbout emacs
About emacs
 
Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
#12 "Создание двух desktop приложений на node-webkit и Electron” Михаил Реенко
 
Разработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервисаРазработка API для большого, нагруженного сервиса
Разработка API для большого, нагруженного сервиса
 
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проектаКолёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
Колёса: Раньше и сейчас. Как поменять архитектуру высоконагруженного проекта
 

En vedette

CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest
 
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Ontico
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Ontico
 
Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)
Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)
Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)
Ontico
 

En vedette (15)

Назад в будущее! …и другие мысли о подготовке программистов в ВУЗах
Назад в будущее! …и другие мысли о подготовке программистов в ВУЗахНазад в будущее! …и другие мысли о подготовке программистов в ВУЗах
Назад в будущее! …и другие мысли о подготовке программистов в ВУЗах
 
Функциональное программирование в браузере / Никита Прокопов
Функциональное программирование в браузере / Никита ПрокоповФункциональное программирование в браузере / Никита Прокопов
Функциональное программирование в браузере / Никита Прокопов
 
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
CodeFest 2013. Прокопов Н. — Зачем вам нужна Clojure?
 
Построение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascriptПостроение мультисервисного стартапа в реалиях full-stack javascript
Построение мультисервисного стартапа в реалиях full-stack javascript
 
2014.12.06 05 Антон Плешивцев — Разбираем естественные языки на Lisp'е
2014.12.06 05 Антон Плешивцев — Разбираем естественные языки на Lisp'е2014.12.06 05 Антон Плешивцев — Разбираем естественные языки на Lisp'е
2014.12.06 05 Антон Плешивцев — Разбираем естественные языки на Lisp'е
 
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScriptТрансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
Трансдюсеры, CSP каналы, неизменяемые структуры данных в JavaScript
 
Алексей Романчук «Реактивное программирование»
Алексей Романчук «Реактивное программирование»Алексей Романчук «Реактивное программирование»
Алексей Романчук «Реактивное программирование»
 
JavaFX GUI architecture with Clojure core.async
JavaFX GUI architecture with Clojure core.asyncJavaFX GUI architecture with Clojure core.async
JavaFX GUI architecture with Clojure core.async
 
FlatGUI: Reactive GUI Toolkit Implemented in Clojure
FlatGUI: Reactive GUI Toolkit Implemented in ClojureFlatGUI: Reactive GUI Toolkit Implemented in Clojure
FlatGUI: Reactive GUI Toolkit Implemented in Clojure
 
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
Классические архитектуры во фронтенде / Александра Шинкевич (LOVATA)
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
Как мы адаптировали более 150 сайтов по технологии Dynamically-served JavaScr...
 
Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)
Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)
Amazing threesome, rrr... React. Redux. Real world / Ростислав Галкин (Babo)
 
"Content Security Policy" — Алексей Андросов, MoscowJS 18
"Content Security Policy" — Алексей Андросов, MoscowJS 18"Content Security Policy" — Алексей Андросов, MoscowJS 18
"Content Security Policy" — Алексей Андросов, MoscowJS 18
 
Monte carlo simulation
Monte carlo simulationMonte carlo simulation
Monte carlo simulation
 

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

Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальностьДенис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
ScrumTrek
 
JavaScript сегодня: React, Redux и новая реальность
JavaScript сегодня: React, Redux и новая реальностьJavaScript сегодня: React, Redux и новая реальность
JavaScript сегодня: React, Redux и новая реальность
Denis Izmaylov
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
Alex Chistyakov
 
Компонент-платформа / Александр Лобашев (Avito)
Компонент-платформа / Александр Лобашев (Avito) Компонент-платформа / Александр Лобашев (Avito)
Компонент-платформа / Александр Лобашев (Avito)
Ontico
 

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

Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальностьДенис Измайлов, JavaScript сегодня: React, Redux и новая реальность
Денис Измайлов, JavaScript сегодня: React, Redux и новая реальность
 
JavaScript сегодня: React, Redux и новая реальность
JavaScript сегодня: React, Redux и новая реальностьJavaScript сегодня: React, Redux и новая реальность
JavaScript сегодня: React, Redux и новая реальность
 
Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)Фронтенд для миллионов (Орёл)
Фронтенд для миллионов (Орёл)
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 
WebAssembly
WebAssemblyWebAssembly
WebAssembly
 
Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)Cеминар в Виннице (22.03.2014)
Cеминар в Виннице (22.03.2014)
 
Net core and linux in production
Net core and linux in productionNet core and linux in production
Net core and linux in production
 
DevOps для Legacy-продуктов
DevOps для Legacy-продуктовDevOps для Legacy-продуктов
DevOps для Legacy-продуктов
 
Design Platform FrontendConf
Design Platform FrontendConfDesign Platform FrontendConf
Design Platform FrontendConf
 
Елизавета Голенок Переходим на mono или как это было
Елизавета Голенок  Переходим на mono или как это былоЕлизавета Голенок  Переходим на mono или как это было
Елизавета Голенок Переходим на mono или как это было
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработке
 
Daemons In Web on #devrus
Daemons In Web on #devrusDaemons In Web on #devrus
Daemons In Web on #devrus
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
Компонент-платформа / Александр Лобашев (Avito)
Компонент-платформа / Александр Лобашев (Avito) Компонент-платформа / Александр Лобашев (Avito)
Компонент-платформа / Александр Лобашев (Avito)
 
Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016Rust - GDG DevFest Siberia 2016
Rust - GDG DevFest Siberia 2016
 
Objective J
Objective JObjective J
Objective J
 
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
Как развивать библиотеку компонентов, не ломая ее / Артур Удалов (Mail.Ru Group)
 
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs..."How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
"How to build powerful CI / CD based on GitLab and Docker", Aleksandr Matkovs...
 
Михаил Трошев — Инструменты веб-разработки
Михаил Трошев — Инструменты веб-разработкиМихаил Трошев — Инструменты веб-разработки
Михаил Трошев — Инструменты веб-разработки
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 

Plus de Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Plus de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

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

  • 2. План доклада • JavaScript вчера • JavaScript сегодня • JavaScript завтра 2
  • 3. JavaScript вчера Интерпретируемый язык программирования для браузера Netscape Navigator • валидация форм • динамическая замена изображений • управление Java- апплетами извне Брендан Айк, создатель JS 3
  • 4. JavaScript • интерпретируемый • основанный на прототипном программировании • с динамической типизацией 4
  • 5. Экскурс в историю • разработан в мае 1995 Бренданом Айком и получил название Mocha • в сентябре 1995 был интегрирован в бета-версию браузера Netscape Navigator 2.0 уже под именем LiveScript • в декабре 1995 года была выпущена третья бета-версия Netscape Navigator 2.0, в которой язык был переименован в JavaScript (с разрешения компании Sun) • одновременно Netscape выпустила серверную реализацию JavaScript для Netscape Enterprise Server 5
  • 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. Экскурс в историю • в 2008 прекращается работа над ES4 и начинается разработка Harmony • декабрь 2009 — выход ES5 (strict mode, getters, setters, JSON, Object.create и т.д.) • июнь 2011 — выход ES5.1 (приведение спецификации в соответствие стандартам ISO/ IEC) 7
  • 8. JavaScript сегодня JavaScript: The Good Parts vs JavaScript: The Definitive Guide 8
  • 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
  • 11. Минусы: • не заботится о скорости исполнения • не совместим с ES6 • вызывает зависимость • никогда не был "just JavaScript" 11
  • 12. Популяризовал: • rest parameters / spread operators (splats) • destructuring assignment • интерполяция строк • классы • => • аргументы по умолчанию • for-of 12
  • 13. Dart • Создан 10 октября 2011. • Позиционировался как замена JS, страдающего от фундаментальных изъянов, которые невозможно исправить • 4 июля 2014 стал стандартом ECMA-408 • 25 марта 2015 создатели языка объявили об остановке разработки VM 13
  • 14. Брендан Айк vs Dart team news.ycombinator.com/item?id=9264531 14
  • 15. Плюсы: • добавляет опциональную типизацию • аннотации • более продвинутая система типов • если верить разработчикам, то Dart VM незначительно обходит V8 по некоторым бенчмаркам Dart 15
  • 16. Минусы: • маленькое коммьюнити • добавляет относительно немного по сравнению с ES6 • заставляет грустить Брендана Айка Dart 16
  • 17. PNaCl • представлен 12 ноября 2013 • основан на NaCl • компилирует C и C++ код в промежуточное представление подмножества LLVM с помощью AOT-компилятора • исполняется в песочнице браузера • позволяет исполнять нативный код для процессоров архитектур Intel x86, ARM и MIPS 17
  • 18. asm.js • представлен 21 марта 2013 • представляет собой промежуточный язык программирования из кода на языках со статической типизацией и ручным управлением памятью • является строгим подмножеством JavaScript 18
  • 19. asm.js • не предназначен для написания программ человеком, получается с помощью компиляторов исходного кода в исходный код, таких как Emscripten • околонативная скорость исполнения достигается за счет AOT-оптимизации (в V8 применяется JIT) • с 7 мая поддерживается браузером Microsoft Edge 19
  • 20. Некоторые другие попытки улучшить JS • ClojureScript • scala.js • LiveScript • PureScript • Elm • TypeScript • и т.д. 20
  • 21. JavaScript • интерпретируемый • основанный на прототипном программировании • с динамической типизацией 21
  • 22. JavaScript • динамически компилируемый • основанный на прототипном программировании • с динамической типизацией 22
  • 23. JavaScript завтра • релиз ES6 в июне 2015 • то же самое касается ECMA 402 (Intl) • уже частично поддерживается браузерами и серверными реализациями • ECMAScript переходит на новую нумерацию версий 23
  • 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. Транскомпиляторы • Traceur • Babel • TypeScript 1.5+ • JSTransform • и другие 25
  • 26. Опциональная статическая типизация • Closure Compiler (JSDoc) • Flow • TypeScript • AtScript (был поглощен TypeScript) 26
  • 27. TypeScript • playground • спецификация Safe TypeScript • обзор • исследовательская работа • playground 27
  • 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. Sane/Stricter/Strong mode • запрещено расширение объектов и классов • var и необъявленные переменные запрещены • запрещен доступ к несуществующим свойствам • запрещены дыры в массивах • количество параметров функций строго определено, доступ к объекту arguments запрещен 29
  • 30. Sane/Stricter/Strong mode • undefined не может быть переопределен • ==, !=, for-in, + для случаев кроме пар строк и пар числе запрещен, switch ограничен • eval запрещен • интероперабелен с "weak mode" (и наоборот) 30
  • 31. SoundScript • типы используются для ранней и агрессивной оптимизации кода • IDE могут использовать аннотации типов для раннего обнаружения ошибок • использование strong mode и gradual (sound) typing позволяет сократить количество проверок во время исполнения, а также оптимизировать их • предлагает резервацию синтаксиса TypeScript для последующего использования в ECMAScript 31
  • 32. SoundScript challenges • типизация должна быть эффективной, потому что время компиляции — это время исполнения • должна поддерживаться ленивая компиляция — необходимо знать тип, возвращаемый функцией до анализа ее тела • интероперабельность, т.к. новый код может быть добавлен в любой момент 32
  • 33. Всегда ставьте на JavaScript (Брендан Айк) 33