Introduce the core conceptions of javascript, including prototype chain, constructor, execution context, variable object, scope chain, closure and this.
Хочется чего-то новенького, необычного? Тогда добро пожаловать в мир чудеc C++17:
if constexpr (auto& [number, ok] = variable; ok)
return "Hi"
else
return number + 42;
Вы услышите о новом стандарте C++, обнаружите для себя новые полезные классы, функции и возможности языка. Для каждой новинки я приведу примеры использования, расскажу о нюансах и подводных камнях.
А ещё вы узнаете о том, как проходят заседания комитета по стандартизации C++ и сможете задать интересующие вас вопросы связанные с нововведениями С++17 и С++Next.
В своих прошлых докладах (http://cpp-russia.ru/?p=198, и http://cpp-russia.ru/?page_id=1239) я рассказывал о C++ без исключений, как с эти жить, как работать. Этот доклад является продолжением этой серии. Я рекомендую освежить в памяти предыдущие доклады, чтобы наша работа была более продуктивной. Мы обсудим механизмы создания, копирования и перемещения объектов, механизмы аллокации и деаллокации памяти, а также обработку ошибок и исключений. Также мы обсудим проблемы и неудобства, которые испытывает программист, когда пишет код без исключений. В конце, я попытаюсь показать, как можно проектировать структуры данных, контейнеры для удобной работы в средах с исключениями и без исключений.
Хочется чего-то новенького, необычного? Тогда добро пожаловать в мир чудеc C++17:
if constexpr (auto& [number, ok] = variable; ok)
return "Hi"
else
return number + 42;
Вы услышите о новом стандарте C++, обнаружите для себя новые полезные классы, функции и возможности языка. Для каждой новинки я приведу примеры использования, расскажу о нюансах и подводных камнях.
А ещё вы узнаете о том, как проходят заседания комитета по стандартизации C++ и сможете задать интересующие вас вопросы связанные с нововведениями С++17 и С++Next.
В своих прошлых докладах (http://cpp-russia.ru/?p=198, и http://cpp-russia.ru/?page_id=1239) я рассказывал о C++ без исключений, как с эти жить, как работать. Этот доклад является продолжением этой серии. Я рекомендую освежить в памяти предыдущие доклады, чтобы наша работа была более продуктивной. Мы обсудим механизмы создания, копирования и перемещения объектов, механизмы аллокации и деаллокации памяти, а также обработку ошибок и исключений. Также мы обсудим проблемы и неудобства, которые испытывает программист, когда пишет код без исключений. В конце, я попытаюсь показать, как можно проектировать структуры данных, контейнеры для удобной работы в средах с исключениями и без исключений.
Недавно было открыто несколько новых метапрограмных техник в C++, позволяющих реализовать рефлексию, работающую "из коробки". В докладе я расскажу об этих техниках, покажу примеры использования и расскажу об их применимости в C++17. Желающие уже сейчас могут начать экспериментировать с рефлексией, используя библиотеку https://github.com/apolukhin/magic_get
JavaScript ist eine sehr dynamische Sprache und verhält sich zudem je nach Browser unterschiedlich. Daher sind automatisierte Tests besonders wertvoll. Dieser Vortrag zeigt, wie Cross-Browser-Tests für JavaScript entwickelt werden können.
Vortrag von der MobileTech Conference 2011
www.opitz-consulting.com/go/3-4-11
JavaScript ist eine sehr dynamische Sprache und verhält sich zudem je nach Browser unterschiedlich. Daher sind automatisierte Tests besonders wertvoll. Dieser Vortrag zeigt, wie Cross-Browser-Tests für JavaScript entwickelt werden können.
Die Java- und JavaScript-Experten Stefan Scheidt und Tobias Bosch von OPITZ CONSULTING präsentierten diesen Vortrag bei der Jax 2012 am 18.04.2012 in Mainz.
--
Sie möchten mobile Geschäftslösungen in Ihrem Unternehmen nutzen? Wir beraten Sie gerne. Lesen Sie hier mehr zu unseren Leistungen in diesem Bereich und informieren Sie sich zu unserem Workshop für die professionelle Web-App-Entwicklung mit JavaScript: www.opitz-consulting.com/go/3-4-898
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Loïc Knuchel
Vous commencez à en entendre parler de plus en plus mais vous avez encore du mal à voir ce que c’est et à comprendre de que ça change concrètement, ce talk est fait pour vous !!!
La programmation fonctionnelle est une manière de programmer basée sur les fonctions qui permet de faire du code vraiment modulaire, améliorer la qualité et limiter les bugs. Vous ne me croyez pas ? Venez voir cette session !
Наверное каждый периодически сталкивается с проблемами асинхронности и обработкой ошибок при построении своего JavaScript приложения. Рассмотрим, как фреймворк Koa поможет решить нам данные вопросы на бэкенде с помощью генераторов. Какие имеются преимущества и недостатки по сравнению с Express. Расскажу на личном опыте, стоит или не стоит переходить на данный фреймворк.
Доклад с конференции D2D Pizza JS - http://dev2dev.ru/events/8/
Семейство библиотек clang предоставляет разработчикам широчайшие возможности по реализации различных инструментов, основанных на разборе и анализе абстрактного синтаксического дерева (AST). В частности, авторы clang выпускают такой инструмент, как clang-tidy, который является мощным статическим анализатором кода. Мы разберемся, как этот инструмент применить в процессе разработки для С++ и как дополнить его собственными проверками. Попутно разберемся с некоторыми занимательными особенностями AST для С++.
Недавно было открыто несколько новых метапрограмных техник в C++, позволяющих реализовать рефлексию, работающую "из коробки". В докладе я расскажу об этих техниках, покажу примеры использования и расскажу об их применимости в C++17. Желающие уже сейчас могут начать экспериментировать с рефлексией, используя библиотеку https://github.com/apolukhin/magic_get
JavaScript ist eine sehr dynamische Sprache und verhält sich zudem je nach Browser unterschiedlich. Daher sind automatisierte Tests besonders wertvoll. Dieser Vortrag zeigt, wie Cross-Browser-Tests für JavaScript entwickelt werden können.
Vortrag von der MobileTech Conference 2011
www.opitz-consulting.com/go/3-4-11
JavaScript ist eine sehr dynamische Sprache und verhält sich zudem je nach Browser unterschiedlich. Daher sind automatisierte Tests besonders wertvoll. Dieser Vortrag zeigt, wie Cross-Browser-Tests für JavaScript entwickelt werden können.
Die Java- und JavaScript-Experten Stefan Scheidt und Tobias Bosch von OPITZ CONSULTING präsentierten diesen Vortrag bei der Jax 2012 am 18.04.2012 in Mainz.
--
Sie möchten mobile Geschäftslösungen in Ihrem Unternehmen nutzen? Wir beraten Sie gerne. Lesen Sie hier mehr zu unseren Leistungen in diesem Bereich und informieren Sie sich zu unserem Workshop für die professionelle Web-App-Entwicklung mit JavaScript: www.opitz-consulting.com/go/3-4-898
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Loïc Knuchel
Vous commencez à en entendre parler de plus en plus mais vous avez encore du mal à voir ce que c’est et à comprendre de que ça change concrètement, ce talk est fait pour vous !!!
La programmation fonctionnelle est une manière de programmer basée sur les fonctions qui permet de faire du code vraiment modulaire, améliorer la qualité et limiter les bugs. Vous ne me croyez pas ? Venez voir cette session !
Наверное каждый периодически сталкивается с проблемами асинхронности и обработкой ошибок при построении своего JavaScript приложения. Рассмотрим, как фреймворк Koa поможет решить нам данные вопросы на бэкенде с помощью генераторов. Какие имеются преимущества и недостатки по сравнению с Express. Расскажу на личном опыте, стоит или не стоит переходить на данный фреймворк.
Доклад с конференции D2D Pizza JS - http://dev2dev.ru/events/8/
Семейство библиотек clang предоставляет разработчикам широчайшие возможности по реализации различных инструментов, основанных на разборе и анализе абстрактного синтаксического дерева (AST). В частности, авторы clang выпускают такой инструмент, как clang-tidy, который является мощным статическим анализатором кода. Мы разберемся, как этот инструмент применить в процессе разработки для С++ и как дополнить его собственными проверками. Попутно разберемся с некоторыми занимательными особенностями AST для С++.
Presentation for Internet Librarian 2008 by Kevin Roddy and Margot Hanson. Highlights the University of Hawaii online information literacy tutorial and its uses for infolit assessment.
9. 构造器制造过程
F = new NativeObject()
F.[[Class]] = "Function"
F.[[Prototype]] = Function.prototype
F.[[Call]] = <reference to function>
F.[[Construct]] = internalConstructor
// if this function is created via new Function
F.[[Scope]] = globalContext.scope
// else
F.[[Scope]] = activeContext.scope;
F.length = countParameters
__objectPrototype = new Object();
__objectPrototype.constructor = F
F.prototype = __objectPrototype
return F
10. 对象制造过程
F.[[Construct]](initialParameters):
O = new NativeObject();
O.[[Class]] = "Object";
var __objectPrototype = F.prototype;
// if __objectPrototype is an object
O.[[Prototype]] = __objectPrototype
// else
O.[[Prototype]] = Object.prototype;
R = F.[[Call]](initialParameters); this === O;
// if R is a object
return R
// else
return O
11. function Engineer(name, gender) {
this.name = name;
this.gender = gender;
}
Engineer.prototype.print = function() {
alert(this.name + this.gender);
}
var shangchun = new Engineer(‘尚春’, ‘male’);
var lizhiye = new Engineer(‘李志业’, ‘male’);
12. Engineer
other properties
prototype
shangchun __proto__
name 尚春
gender male
__proto__ Engineer prototype Function.prototype
constructor <built-ins>
print fn __proto__
lizhiye __proto__
name 李志业
gender male
__proto__
Object.prototype
<built-ins>
__proto__ null
13. 代码类型
eval code
10%
global code
30%
function code
60%
15. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1
var res = eval('{ x: 1 }');
bar(); // 1
16. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
17. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
18. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
19. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
First
var bar = foo(); Function EC
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
20. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
21. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
22. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
Second
var bar = foo(); Function EC
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
23. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
24. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
25. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
Eval EC
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
26. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
27. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
28. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
Third
var bar = foo(); Function EC
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
29. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
30. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1 Global EC
var res = eval('{ x: 1 }');
bar(); // 1
31. function foo() {
var x = 1;
return function () {
alert(x);
EC Stack
};
}
var bar = foo();
bar(); // 1
var res = eval('{ x: 1 }');
bar(); // 1
33. Variable Object
// Global EC
Variable Object === this === global object
// Function EC
Variable Object === Activation Object
AO === Abstract VO +
arguments object +
formal parameters
34. Global VO
var bar = 10;
Global VO
function foo() {
var x = 1; bar 10
return function () { foo fn
alert(x);
}; built-ins
}
35. Activation Object
function foo(x, y) { AO
var z = 30;
// FD x 10
function bar() {} y 20
// FE
(function baz() {})(); arguments {0:10, 1:20}
}
z 30
foo(10, 20); bar fn
38. function foo(x, y) {
alert(x) // 1
var x = 10;
alert(x) // 10
alert(y) // function
function y() {};
}
foo(1, 2);
39. bar VO
z 30
__parent__
var x = 10;
bar.[[Scope]]
(function foo() {
var y = 20;
foo VO
y 20
(function bar() { __parent__
var z = 30;
})();
Global VO
})()
x 10
other properties
__parent__ null
bar context scope chain
42. function foo() {
var x = 10;
return function () {
alert(x);
};
}
var x = 20;
var returnedFunction = foo();
returnedFunction();
10
43. var x = 10;
function foo() {
alert(x);
}
(function(funArg) {
var x = 20;
var returnedFunction = funArg;
returnedFunction();
})(foo);
10
44. This
1. Global EC:
this === global object === global VO
2. Function EC:
2.1. 作为函数调用时,this === global object
2.2. 作为方法调用时,this === caller object
2.3. 作为构造器调用时,this === new object
2.4. 通过call/apply调用时,this === first argument
45. 参考
• The Core Dmitry Soshnikov
• ECMA-262-3 in detail Dmitry Soshnikov
• Annotated ECMAScript 5.1 es5.github.com