SlideShare a Scribd company logo
TypeScript или JavaScript на
стероидах
author: {
name: "Сергей Пугачёв",
twitter: "@spugachev",
company: "Microsoft Россия"
};
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
Сегодня я бы хотел
рассказать о
3 продуктах Microsoft…
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
Douglas Adams
(автор «Автор автостопом по галактике»)
I've come up with a set of rules that describe our reactions to technologies:
1. Anything that is in the world when you’re born is normal
and ordinary and is just a natural part of the way the world
works.
2. Anything that's invented between when you’re fifteen
and thirty-five is new and exciting and revolutionary and
you can probably get a career in it.
3. Anything invented after you're thirty-five is against the
natural order of things.
TypeScript
Начинается с JavaScript
Весь JavaScript код является TypeScript кодом
Все JavaScript библиотеки работают с TypeScript
Опциональная статическая типизация, классы, модули
Хорошо подходит для масштабных приложений
Нет Runtime издержек. Статическая типизация исчезает в Runtime
Заканчивается на JavaScript
Компилируется в JavaScript
Запускается в любом браузере и любой ОС
TypeScript
Начинается с JavaScript
Весь JavaScript код является TypeScript кодом
Все JavaScript библиотеки работают с TypeScript
Опциональная статическая типизация, классы, модули
Хорошо подходит для масштабных приложений
Нет Runtime издержек. Статическая типизация исчезает в Runtime
Заканчивается на JavaScript
Компилируется в JavaScript
Запускается в любом браузере и любой ОС
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
Демонстрация: TypeScript
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
2. Подходы к решению всех проблем
1. Что не так с JavaScript?
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
“Никто больше не пишет на JavaScript.
Все пишут на jQuery.”
Скотт Хансельман
1
10
100
1000
2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011
Sunspiderrunsperminute(logscale)
Internet Explorer
производительность JavaScript
Закон Этвуда: всё, что может
быть написано на JavaScript, будет
написано на JavaScript.
Web page title
http://www.url.com
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
"JavaScript – это
ассемблер Web’а"
C/C++
LLVM
байткод
JavaScript
Гибкость Производительность
“Think C++”“Think Script”
Простые сайты Сложные приложения, игры
var r = 3 * "10"; // r == 300
var a = new Array();
a.push(10);
var p = {x: 0, y: 0};
p.z = 5;
p["some text"] = 1;
p[1] = 2;
eval("var s = p[1] * a[0]"); // s == 20
var r = 3 * parseInt("10");
var a = new Array(100);
a[0] = 10;
var p = new Point(0, 0, 0);
p.z = 5;
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
Демонстрация: Emscripten
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
Что мы выяснили
1. JavaScript – ассемблер Web’а
2. JavaScript сам по себе мощный язык, на котором можно
писать производительные приложения
3. JavaScript «не идеален» для создания больших проектов
2. Подходы к решению всех проблем
• Компилировать язык в JavaScript
• Создать новую виртуальную
машину вместо JS
2 подхода
var Greeter = (function () {
function Greeter(greeting) {
this.greeting = greeting;
}
Greeter.prototype.greet = function () {
return "<h1>" + this.greeting + "</h1>";
};
return Greeter;
}
)();
var greeter = new Greeter("Hello, world!");
var str = greeter.greet();
document.body.innerHTML = str;
class Greeter {
greeting: string;
constructor(greeting: string) {
this.greeting = greeting;
}
greet() {
return "<h1>"+this.greeting+"</h1>";
}
}
var greeter = new Greeter("Hello, world!");
var str = greeter.greet();
document.body.innerHTML = str;
TypeScript
var Greeter = (function () {
function Greeter(greeting) {
this.greeting = greeting;
}
Greeter.prototype.greet = function () {
return "<h1>" + this.greeting + "</h1>";
};
return Greeter;
}
)();
var greeter = new Greeter("Hello, world!");
var str = greeter.greet();
document.body.innerHTML = str;
class Greeter
constructor: (@greeting) ->
@greet -> return "<h1>" +
this.greeting + "</h1>";
greeter = new Greeter("Hello, world!");
str = greeter.greet()
document.body.innerHTML = str
CoffeeScript
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах
3. Язык TypeScript
Типы
function toNumber(numberString: string,
...theArgs: number[]): number {
var num: number = parseFloat(numberString);
return num;
}
Перегрузка
function numberStringSwap(value: number, radix?: number): string;
function numberStringSwap(value: string): number;
function numberStringSwap(value: any, radix: number = 10): any {
if (typeof value === 'string') {
return parseInt(value, radix);
}
else if (typeof value === 'number') {
return String(value);
}
}
Типы
var point: {
x: number;
y: number;
};
point = { x: 0, y: 0 }; // OK
point = { x: 0, y: 0, z: 0 }; // OK
point = { x: 'zero', y: 0 }; // Error
point = { x: 0 }; // Error
Интерфейсы
interface IPoint {
x: number;
y: number;
}
interface IPoint3D extends IPoint {
z: number;
}
var point: IPoint;
var point2: IPoint3D;
Интерфейсы
interface IPoint {
x: number;
y: number;
z?: number;
toGeo(): IPoint;
}
Generics
interface IArray<T> {
map<TU>(callback:
(value: T, index: number, array: IArray<T>)
=> TU, thisArg?: any): Array<TU>;
}
var arrayOfStrings: IArray<string> = ['a', 'b', 'c'];
var arrayOfCharCodes: IArray<number> =
arrayOfStrings.map(
(value: string): number => value.charCodeAt(0));
Классы
class Stateful extends Proxy {
constructor(kwArgs: Object) {
super(kwArgs);
}
get(key: string): any {
var getter: string = '_' + key + 'Getter';
return this[getter] ? this[getter]() :
super.get(key);
}
}
Enums
enum Style {
NONE = 0,
BOLD = 1,
ITALIC = 2,
UNDERLINE = 4,
EMPHASIS = Style.BOLD | Style.ITALIC,
HYPERLINK = Style.BOLD | Style.UNDERLINE
}
Модули
module Shapes {
export class Rectangle {
constructor(
public height: number,
public width: number) {
}
}
}
Сергей Пугачёв
@spugachev

More Related Content

PDF
Модули на C для Ruby
racoons
 
PDF
Wordpress Cron
versusbassz
 
PDF
CSSO — сжимаем CSS
FDConf
 
PPTX
JavaScript на сервере, 1ms на трансформацию (Андрей Сумин)
Ontico
 
PPTX
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
 
PDF
2014-11-01 03 Николай Линкер. Open your clojure
Омские ИТ-субботники
 
PPTX
PowerShell
GetDev.NET
 
PDF
Reform: путь к лучшему ORM
Badoo Development
 
Модули на C для Ruby
racoons
 
Wordpress Cron
versusbassz
 
CSSO — сжимаем CSS
FDConf
 
JavaScript на сервере, 1ms на трансформацию (Андрей Сумин)
Ontico
 
Как устроена MySQL-репликация / Андрей Аксенов (Sphinx)
Ontico
 
2014-11-01 03 Николай Линкер. Open your clojure
Омские ИТ-субботники
 
PowerShell
GetDev.NET
 
Reform: путь к лучшему ORM
Badoo Development
 

What's hot (19)

PDF
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
PDF
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Ontico
 
PPT
Цена абстракции, Андрей Аксёнов (Sphinx)
Ontico
 
PDF
Нейронные сети на JS
Vsevolod Rodionov
 
PDF
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Ontico
 
PDF
7 убийц производительности WordPress
Konstantin Kovshenin
 
PPT
Эффективный AJAX
Alexander Shurkayev
 
PDF
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Coub
 
PDF
WordPress Cron API
versusbassz
 
PDF
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Badoo Development
 
PDF
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
PDF
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Unigine Corp.
 
PDF
pgconf.ru 2015 avito postgresql
Михаил Тюрин
 
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Ontico
 
PPT
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Unigine Corp.
 
PDF
Барнаул15
Михаил Тюрин
 
PPTX
Как устроен поиск / Андрей Аксенов (Sphinx)
Ontico
 
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)
Ontico
 
Цена абстракции, Андрей Аксёнов (Sphinx)
Ontico
 
Нейронные сети на JS
Vsevolod Rodionov
 
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Ontico
 
7 убийц производительности WordPress
Konstantin Kovshenin
 
Эффективный AJAX
Alexander Shurkayev
 
Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяе...
Coub
 
WordPress Cron API
versusbassz
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Badoo Development
 
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
Как впихнуть утро в сосновом лесу в 4 килобайта. Иван Авдеев. UNIGINE Open Ai...
Unigine Corp.
 
pgconf.ru 2015 avito postgresql
Михаил Тюрин
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Ontico
 
Низкоуровневые оптимизации. Андрей Аксенов. Unigine Open Air 2013
Unigine Corp.
 
Барнаул15
Михаил Тюрин
 
Как устроен поиск / Андрей Аксенов (Sphinx)
Ontico
 
Ad

Similar to CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах (20)

PPTX
Зачем нужна Scala?
Vasil Remeniuk
 
PPT
Javascript
Vasya Petrov
 
PPTX
Javascript 1
Andrey Dolinin
 
PDF
msumobi2. Лекция 1
Глеб Тарасов
 
PPTX
Intro to Swift techitout
Alexandr Graschenkov
 
PDF
Scala for android
Alexander Rusin
 
PDF
Как выглядит современный фронтенд
Timophy Chaptykov
 
PDF
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Yandex
 
PDF
Пояснения к статье про Copy-Paste
Tatyanazaxarova
 
PDF
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
 
PDF
Большой брат помогает тебе
Tatyanazaxarova
 
PPTX
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov
 
PDF
Android: Как написать приложение, которое не тормозит
Elena Kotina
 
PPTX
course js day 2
Georgyi Grigoryev
 
PPTX
Статический анализ: вокруг Java за 60 минут
Andrey Karpov
 
PDF
Цена ошибки
Platonov Sergey
 
PPTX
Цена ошибки
Andrey Karpov
 
PDF
CSS глазами машин
Roman Dvornov
 
PDF
static - defcon russia 20
DefconRussia
 
Зачем нужна Scala?
Vasil Remeniuk
 
Javascript
Vasya Petrov
 
Javascript 1
Andrey Dolinin
 
msumobi2. Лекция 1
Глеб Тарасов
 
Intro to Swift techitout
Alexandr Graschenkov
 
Scala for android
Alexander Rusin
 
Как выглядит современный фронтенд
Timophy Chaptykov
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Yandex
 
Пояснения к статье про Copy-Paste
Tatyanazaxarova
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
 
Большой брат помогает тебе
Tatyanazaxarova
 
Принципы работы статического анализатора кода PVS-Studio
Andrey Karpov
 
Android: Как написать приложение, которое не тормозит
Elena Kotina
 
course js day 2
Georgyi Grigoryev
 
Статический анализ: вокруг Java за 60 минут
Andrey Karpov
 
Цена ошибки
Platonov Sergey
 
Цена ошибки
Andrey Karpov
 
CSS глазами машин
Roman Dvornov
 
static - defcon russia 20
DefconRussia
 
Ad

More from CodeFest (20)

PDF
Alexander Graebe
CodeFest
 
PDF
Никита Прокопов
CodeFest
 
PPTX
Денис Баталов
CodeFest
 
PDF
Елена Гальцина
CodeFest
 
PDF
Александр Калашников
CodeFest
 
PDF
Ирина Иванова
CodeFest
 
PDF
Marko Berković
CodeFest
 
PDF
Денис Кортунов
CodeFest
 
PDF
Александр Зимин
CodeFest
 
PDF
Сергей Крапивенский
CodeFest
 
PDF
Сергей Игнатов
CodeFest
 
PDF
Николай Крапивный
CodeFest
 
PDF
Alexander Graebe
CodeFest
 
PDF
Вадим Смирнов
CodeFest
 
PDF
Константин Осипов
CodeFest
 
PDF
Raffaele Rialdi
CodeFest
 
PDF
Максим Пугачев
CodeFest
 
PDF
Rene Groeschke
CodeFest
 
PDF
Иван Бондаренко
CodeFest
 
PDF
Mete Atamel
CodeFest
 
Alexander Graebe
CodeFest
 
Никита Прокопов
CodeFest
 
Денис Баталов
CodeFest
 
Елена Гальцина
CodeFest
 
Александр Калашников
CodeFest
 
Ирина Иванова
CodeFest
 
Marko Berković
CodeFest
 
Денис Кортунов
CodeFest
 
Александр Зимин
CodeFest
 
Сергей Крапивенский
CodeFest
 
Сергей Игнатов
CodeFest
 
Николай Крапивный
CodeFest
 
Alexander Graebe
CodeFest
 
Вадим Смирнов
CodeFest
 
Константин Осипов
CodeFest
 
Raffaele Rialdi
CodeFest
 
Максим Пугачев
CodeFest
 
Rene Groeschke
CodeFest
 
Иван Бондаренко
CodeFest
 
Mete Atamel
CodeFest
 

CodeFest 2014. Пугачев С. — Язык TypeScript или JavaScript на стероидах

  • 1. TypeScript или JavaScript на стероидах author: { name: "Сергей Пугачёв", twitter: "@spugachev", company: "Microsoft Россия" };
  • 3. Сегодня я бы хотел рассказать о 3 продуктах Microsoft…
  • 5. Douglas Adams (автор «Автор автостопом по галактике») I've come up with a set of rules that describe our reactions to technologies: 1. Anything that is in the world when you’re born is normal and ordinary and is just a natural part of the way the world works. 2. Anything that's invented between when you’re fifteen and thirty-five is new and exciting and revolutionary and you can probably get a career in it. 3. Anything invented after you're thirty-five is against the natural order of things.
  • 6. TypeScript Начинается с JavaScript Весь JavaScript код является TypeScript кодом Все JavaScript библиотеки работают с TypeScript Опциональная статическая типизация, классы, модули Хорошо подходит для масштабных приложений Нет Runtime издержек. Статическая типизация исчезает в Runtime Заканчивается на JavaScript Компилируется в JavaScript Запускается в любом браузере и любой ОС
  • 7. TypeScript Начинается с JavaScript Весь JavaScript код является TypeScript кодом Все JavaScript библиотеки работают с TypeScript Опциональная статическая типизация, классы, модули Хорошо подходит для масштабных приложений Нет Runtime издержек. Статическая типизация исчезает в Runtime Заканчивается на JavaScript Компилируется в JavaScript Запускается в любом браузере и любой ОС
  • 17. 2. Подходы к решению всех проблем
  • 18. 1. Что не так с JavaScript?
  • 21. “Никто больше не пишет на JavaScript. Все пишут на jQuery.” Скотт Хансельман
  • 22. 1 10 100 1000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 Sunspiderrunsperminute(logscale) Internet Explorer производительность JavaScript
  • 23. Закон Этвуда: всё, что может быть написано на JavaScript, будет написано на JavaScript.
  • 28. Гибкость Производительность “Think C++”“Think Script” Простые сайты Сложные приложения, игры var r = 3 * "10"; // r == 300 var a = new Array(); a.push(10); var p = {x: 0, y: 0}; p.z = 5; p["some text"] = 1; p[1] = 2; eval("var s = p[1] * a[0]"); // s == 20 var r = 3 * parseInt("10"); var a = new Array(100); a[0] = 10; var p = new Point(0, 0, 0); p.z = 5;
  • 32. Что мы выяснили 1. JavaScript – ассемблер Web’а 2. JavaScript сам по себе мощный язык, на котором можно писать производительные приложения 3. JavaScript «не идеален» для создания больших проектов
  • 33. 2. Подходы к решению всех проблем
  • 34. • Компилировать язык в JavaScript • Создать новую виртуальную машину вместо JS 2 подхода
  • 35. var Greeter = (function () { function Greeter(greeting) { this.greeting = greeting; } Greeter.prototype.greet = function () { return "<h1>" + this.greeting + "</h1>"; }; return Greeter; } )(); var greeter = new Greeter("Hello, world!"); var str = greeter.greet(); document.body.innerHTML = str; class Greeter { greeting: string; constructor(greeting: string) { this.greeting = greeting; } greet() { return "<h1>"+this.greeting+"</h1>"; } } var greeter = new Greeter("Hello, world!"); var str = greeter.greet(); document.body.innerHTML = str; TypeScript
  • 36. var Greeter = (function () { function Greeter(greeting) { this.greeting = greeting; } Greeter.prototype.greet = function () { return "<h1>" + this.greeting + "</h1>"; }; return Greeter; } )(); var greeter = new Greeter("Hello, world!"); var str = greeter.greet(); document.body.innerHTML = str; class Greeter constructor: (@greeting) -> @greet -> return "<h1>" + this.greeting + "</h1>"; greeter = new Greeter("Hello, world!"); str = greeter.greet() document.body.innerHTML = str CoffeeScript
  • 43. Типы function toNumber(numberString: string, ...theArgs: number[]): number { var num: number = parseFloat(numberString); return num; }
  • 44. Перегрузка function numberStringSwap(value: number, radix?: number): string; function numberStringSwap(value: string): number; function numberStringSwap(value: any, radix: number = 10): any { if (typeof value === 'string') { return parseInt(value, radix); } else if (typeof value === 'number') { return String(value); } }
  • 45. Типы var point: { x: number; y: number; }; point = { x: 0, y: 0 }; // OK point = { x: 0, y: 0, z: 0 }; // OK point = { x: 'zero', y: 0 }; // Error point = { x: 0 }; // Error
  • 46. Интерфейсы interface IPoint { x: number; y: number; } interface IPoint3D extends IPoint { z: number; } var point: IPoint; var point2: IPoint3D;
  • 47. Интерфейсы interface IPoint { x: number; y: number; z?: number; toGeo(): IPoint; }
  • 48. Generics interface IArray<T> { map<TU>(callback: (value: T, index: number, array: IArray<T>) => TU, thisArg?: any): Array<TU>; } var arrayOfStrings: IArray<string> = ['a', 'b', 'c']; var arrayOfCharCodes: IArray<number> = arrayOfStrings.map( (value: string): number => value.charCodeAt(0));
  • 49. Классы class Stateful extends Proxy { constructor(kwArgs: Object) { super(kwArgs); } get(key: string): any { var getter: string = '_' + key + 'Getter'; return this[getter] ? this[getter]() : super.get(key); } }
  • 50. Enums enum Style { NONE = 0, BOLD = 1, ITALIC = 2, UNDERLINE = 4, EMPHASIS = Style.BOLD | Style.ITALIC, HYPERLINK = Style.BOLD | Style.UNDERLINE }
  • 51. Модули module Shapes { export class Rectangle { constructor( public height: number, public width: number) { } } }