SlideShare una empresa de Scribd logo
1 de 25
Descargar para leer sin conexión
prof.js
ECMAScript 262-5th based JavaScript
       Dynamic TypeSystem.
 with Trace and Profiling functions
function mm_each(data, // @arg Object/Function/Array/Hash: data
                 fn) { // @arg Function: callback function
                       // @help: mm.each
                       // @desc: each object
//{@debug
    mm.allow(data, "Object/Function/Array/Hash");
    mm.allow(fn,   "Function");
//}@debug

    typeof data.each === "function" ? data.each(fn)
                                    : Object_each(data, fn);
}
function mm_each(data, // @arg Object/Function/Array/Hash: data
                 fn) { // @arg Function: callback function
                       // @help: mm.each
                       // @desc: each object
//{@debug
// mm.allow(data, "Object/Function/Array/Hash");
// mm.allow(fn,    "Function");
//}@debug

    typeof data.each === "function" ? data.each(fn)
                                    : Object_each(data, fn);
}




//{@debug
prof.add(
    "mm.each(data:Object/Function/Array/Hash, fn:Function"
);
//}@debug
Aspect-Oriented Programming)
•
    –
    –
    –
    –
        •
        •
•
    –
•
    –
mm.each = function() {
    switch (引数の数) {
    case 3: mm.allow(arguments[2], "2番目の引数の型");
    case 2: mm.allow(arguments[1], "1番目の引数の型");
    case 1: mm.allow(arguments[0], "0番目の引数の型");
    }
    console.group("関数名");

     var now = Date.now();
     var rv = org_mm_each.apply(mm, arguments);
     _tm[path].time += (Date.now() - now);
     _tm[path].count++;

     console.groupEnd();
     mm.allow(rv, "戻り値の型");
     return rv;
};
mm.each = function() {
    switch (引数の数) {
    case 3: mm.allow(arguments[2], "2番目の引数の型");
    case 2: mm.allow(arguments[1], "1番目の引数の型");
    case 1: mm.allow(arguments[0], "0番目の引数の型");
    }
    console.group("関数名");

     var now = Date.now();
     var rv = org_mm_each.apply(mm, arguments);
     _tm[path].time += (Date.now() - now);
     _tm[path].count++;

     console.groupEnd();
     mm.allow(rv, "戻り値の型");
     return rv;
};
mm.each = function() {
    switch (引数の数) {
    case 3: mm.allow(arguments[2], "2番目の引数の型");
    case 2: mm.allow(arguments[1], "1番目の引数の型");
    case 1: mm.allow(arguments[0], "0番目の引数の型");
    }
    console.group("関数名");

     var now = Date.now();
     var rv = org_mm_each.apply(mm, arguments);
     _tm[path].time += (Date.now() - now);
     _tm[path].count++;

     console.groupEnd();
     mm.allow(rv, "戻り値の型");
     return rv;
};
mm.each = function() {
    switch (引数の数) {
    case 3: mm.allow(arguments[2], "2番目の引数の型");
    case 2: mm.allow(arguments[1], "1番目の引数の型");
    case 1: mm.allow(arguments[0], "0番目の引数の型");
    }
    console.group("関数名");

     var now = Date.now();
     var rv = org_mm_each.apply(mm, arguments);
     _tm[path].time += (Date.now() - now);
     _tm[path].count++;

     console.groupEnd();
     mm.allow(rv, "戻り値の型");
     return rv;
};
•
    –
    –
•
      –
      –

// ライブラリ(lib)のAPIの型情報を登録
prof.add(
    'lib.fn1()',
    'lib.fn2(a:Integer/String = ",", b:Object):Object',
    'lib.fn3(...:Mix):Array',
    'lib.fn4(a:Mix):Boolean'
);
// ネイティブオブジェクトの動的な型チェックも可能
prof.add(
    'String#hoge(a:Mix,b:Mix,c:Mix):String'
);
<script src="debug/prof.js"></script>
<script src="mm.js"></script>
<!-- mm.js は
  mm.allow で動的な型チェックを使う場合に必要 -->

<script>
prof.add("…");
</script>
• mofmof.js
   – http://code.google.com/p/mofmof-js/


• prof.js
   – http://code.google.com/p/mofmof-
     js/source/browse/trunk/js_src/debug/prof.js

Más contenido relacionado

La actualidad más candente

Understanding Python decorators
Understanding Python decoratorsUnderstanding Python decorators
Understanding Python decoratorsJosipKatalinic
 
[170510 4주차]C언어 A반
[170510 4주차]C언어 A반[170510 4주차]C언어 A반
[170510 4주차]C언어 A반arundine
 
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Loïc Knuchel
 
โปรแกรมย่อยและฟังก์ชั่นมาตรฐาน
โปรแกรมย่อยและฟังก์ชั่นมาตรฐาน โปรแกรมย่อยและฟังก์ชั่นมาตรฐาน
โปรแกรมย่อยและฟังก์ชั่นมาตรฐาน knangsmiley
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3Platonov Sergey
 
Effective java 摘選條目分享 2 - 泛型
Effective java   摘選條目分享 2 - 泛型Effective java   摘選條目分享 2 - 泛型
Effective java 摘選條目分享 2 - 泛型Kane Shih
 
6. separation, namespace, error
6. separation, namespace, error6. separation, namespace, error
6. separation, namespace, errorVahid Heidari
 
6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классовDEVTYPE
 
The Flavor of TypeScript
The Flavor of TypeScriptThe Flavor of TypeScript
The Flavor of TypeScriptDmitry Sheiko
 
Form Pemesanan Tiket dengan Java NetBeans
Form Pemesanan Tiket dengan Java NetBeansForm Pemesanan Tiket dengan Java NetBeans
Form Pemesanan Tiket dengan Java NetBeansAldila Putri
 

La actualidad más candente (19)

Understanding Python decorators
Understanding Python decoratorsUnderstanding Python decorators
Understanding Python decorators
 
[170510 4주차]C언어 A반
[170510 4주차]C언어 A반[170510 4주차]C언어 A반
[170510 4주차]C언어 A반
 
Convert bilangan
Convert bilanganConvert bilangan
Convert bilangan
 
How
HowHow
How
 
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
Comprendre la programmation fonctionnelle, Blend Web Mix le 02/11/2016
 
ikp213-06-template-c++
ikp213-06-template-c++ikp213-06-template-c++
ikp213-06-template-c++
 
โปรแกรมย่อยและฟังก์ชั่นมาตรฐาน
โปรแกรมย่อยและฟังก์ชั่นมาตรฐาน โปรแกรมย่อยและฟังก์ชั่นมาตรฐาน
โปรแกรมย่อยและฟังก์ชั่นมาตรฐาน
 
Zadatak
ZadatakZadatak
Zadatak
 
Алексей Кутумов, C++ без исключений, часть 3
Алексей Кутумов,  C++ без исключений, часть 3Алексей Кутумов,  C++ без исключений, часть 3
Алексей Кутумов, C++ без исключений, часть 3
 
Img1
Img1Img1
Img1
 
Effective java 摘選條目分享 2 - 泛型
Effective java   摘選條目分享 2 - 泛型Effective java   摘選條目分享 2 - 泛型
Effective java 摘選條目分享 2 - 泛型
 
6. separation, namespace, error
6. separation, namespace, error6. separation, namespace, error
6. separation, namespace, error
 
Librerias de c++
Librerias de c++Librerias de c++
Librerias de c++
 
6.1 Шаблоны классов
6.1 Шаблоны классов6.1 Шаблоны классов
6.1 Шаблоны классов
 
Project
ProjectProject
Project
 
The Flavor of TypeScript
The Flavor of TypeScriptThe Flavor of TypeScript
The Flavor of TypeScript
 
Jslunch1
Jslunch1Jslunch1
Jslunch1
 
Form Pemesanan Tiket dengan Java NetBeans
Form Pemesanan Tiket dengan Java NetBeansForm Pemesanan Tiket dengan Java NetBeans
Form Pemesanan Tiket dengan Java NetBeans
 
1
11
1
 

Destacado (18)

アホロートルエンジニアから見た特許
アホロートルエンジニアから見た特許アホロートルエンジニアから見た特許
アホロートルエンジニアから見た特許
 
Certificates rugby tat
Certificates rugby tatCertificates rugby tat
Certificates rugby tat
 
EF presentation 1 - Paris meeting
EF presentation 1 - Paris meetingEF presentation 1 - Paris meeting
EF presentation 1 - Paris meeting
 
EF FCP presentation - Rugby meeting
EF FCP presentation - Rugby meetingEF FCP presentation - Rugby meeting
EF FCP presentation - Rugby meeting
 
Certificates gdynia tat
Certificates gdynia tatCertificates gdynia tat
Certificates gdynia tat
 
Interactive didactics
Interactive didacticsInteractive didactics
Interactive didactics
 
Dissemination nl
Dissemination nlDissemination nl
Dissemination nl
 
From Kinkara Tea
From Kinkara TeaFrom Kinkara Tea
From Kinkara Tea
 
EF FCP workshop - Rugby conference
EF FCP workshop - Rugby conferenceEF FCP workshop - Rugby conference
EF FCP workshop - Rugby conference
 
Identifeye ar game documentation 12-14
Identifeye ar game documentation 12-14Identifeye ar game documentation 12-14
Identifeye ar game documentation 12-14
 
Identifeye ar game documentation 8-11
Identifeye ar game documentation 8-11Identifeye ar game documentation 8-11
Identifeye ar game documentation 8-11
 
Talk @bramalkema 031214
Talk @bramalkema 031214Talk @bramalkema 031214
Talk @bramalkema 031214
 
JavaScript And Keywords
JavaScript And KeywordsJavaScript And Keywords
JavaScript And Keywords
 
JavaScript And Debug
JavaScript And DebugJavaScript And Debug
JavaScript And Debug
 
X3
X3X3
X3
 
Paris meeting TAT - Minutes
Paris meeting TAT - MinutesParis meeting TAT - Minutes
Paris meeting TAT - Minutes
 
Flow.js
Flow.jsFlow.js
Flow.js
 
Pokolenie F
Pokolenie FPokolenie F
Pokolenie F
 

Prof.js

  • 1. prof.js ECMAScript 262-5th based JavaScript Dynamic TypeSystem. with Trace and Profiling functions
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11. function mm_each(data, // @arg Object/Function/Array/Hash: data fn) { // @arg Function: callback function // @help: mm.each // @desc: each object //{@debug mm.allow(data, "Object/Function/Array/Hash"); mm.allow(fn, "Function"); //}@debug typeof data.each === "function" ? data.each(fn) : Object_each(data, fn); }
  • 12.
  • 13. function mm_each(data, // @arg Object/Function/Array/Hash: data fn) { // @arg Function: callback function // @help: mm.each // @desc: each object //{@debug // mm.allow(data, "Object/Function/Array/Hash"); // mm.allow(fn, "Function"); //}@debug typeof data.each === "function" ? data.each(fn) : Object_each(data, fn); } //{@debug prof.add( "mm.each(data:Object/Function/Array/Hash, fn:Function" ); //}@debug
  • 14.
  • 16.
  • 17. – – – – • • • – • –
  • 18. mm.each = function() { switch (引数の数) { case 3: mm.allow(arguments[2], "2番目の引数の型"); case 2: mm.allow(arguments[1], "1番目の引数の型"); case 1: mm.allow(arguments[0], "0番目の引数の型"); } console.group("関数名"); var now = Date.now(); var rv = org_mm_each.apply(mm, arguments); _tm[path].time += (Date.now() - now); _tm[path].count++; console.groupEnd(); mm.allow(rv, "戻り値の型"); return rv; };
  • 19. mm.each = function() { switch (引数の数) { case 3: mm.allow(arguments[2], "2番目の引数の型"); case 2: mm.allow(arguments[1], "1番目の引数の型"); case 1: mm.allow(arguments[0], "0番目の引数の型"); } console.group("関数名"); var now = Date.now(); var rv = org_mm_each.apply(mm, arguments); _tm[path].time += (Date.now() - now); _tm[path].count++; console.groupEnd(); mm.allow(rv, "戻り値の型"); return rv; };
  • 20. mm.each = function() { switch (引数の数) { case 3: mm.allow(arguments[2], "2番目の引数の型"); case 2: mm.allow(arguments[1], "1番目の引数の型"); case 1: mm.allow(arguments[0], "0番目の引数の型"); } console.group("関数名"); var now = Date.now(); var rv = org_mm_each.apply(mm, arguments); _tm[path].time += (Date.now() - now); _tm[path].count++; console.groupEnd(); mm.allow(rv, "戻り値の型"); return rv; };
  • 21. mm.each = function() { switch (引数の数) { case 3: mm.allow(arguments[2], "2番目の引数の型"); case 2: mm.allow(arguments[1], "1番目の引数の型"); case 1: mm.allow(arguments[0], "0番目の引数の型"); } console.group("関数名"); var now = Date.now(); var rv = org_mm_each.apply(mm, arguments); _tm[path].time += (Date.now() - now); _tm[path].count++; console.groupEnd(); mm.allow(rv, "戻り値の型"); return rv; };
  • 22. – –
  • 23. – – // ライブラリ(lib)のAPIの型情報を登録 prof.add( 'lib.fn1()', 'lib.fn2(a:Integer/String = ",", b:Object):Object', 'lib.fn3(...:Mix):Array', 'lib.fn4(a:Mix):Boolean' ); // ネイティブオブジェクトの動的な型チェックも可能 prof.add( 'String#hoge(a:Mix,b:Mix,c:Mix):String' );
  • 24. <script src="debug/prof.js"></script> <script src="mm.js"></script> <!-- mm.js は mm.allow で動的な型チェックを使う場合に必要 --> <script> prof.add("…"); </script>
  • 25. • mofmof.js – http://code.google.com/p/mofmof-js/ • prof.js – http://code.google.com/p/mofmof- js/source/browse/trunk/js_src/debug/prof.js