Slide 1

Slide 1 text

JavaScript.Next @ Kanazawa.js 1.7 with Mozilla by Tomoya ASAI (dynamis) Mozilla Japan - Technical Marketing last update on 2012.03.30 see also: http://dynamis.jp/r

Slide 2

Slide 2 text

BCPVUNF http:// dynamis.jp @dynamitter facebook.com/ dynamis mailto: Tomoya ASAI @

Slide 3

Slide 3 text

latest topic ECMAScript 5th ECMAScript 6th (Appendix) (References) Agenda

Slide 4

Slide 4 text

࠷ۙͷා͍࿩ɻ ոஊ࿩ʹ͸·ͩૣ͍ʁ

Slide 5

Slide 5 text

ͪΐͬͱݹ͍σʔλͰΰϝϯ

Slide 6

Slide 6 text

+BWB4DSJQU௒ߴ଎Խʂ "DUJPO4DSJQU஗͍ϚϚ

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

'MBTIήʔϜʹϥΠηϯεྉ 'MBTIͷϋʔυ΢ΣΞΞΫηϥ ϨʔγϣϯΛόϦόϦ࢖ͬͨ EPNBJONFNPSZ4UBHF% %ΞϓϦͰརӹΛ্͛ͨΒ རӹͷ͸"EPCF͕຅ऩʂ

Slide 9

Slide 9 text

"EPCFා͍ɻ ϓϩϓϥා͍ɻ +BWB4DSJQU͸ඪ४͔ͩΒ҆৺Ͱ͢Ͷ

Slide 10

Slide 10 text

͓͜ͱΘΓɻ ݱߦ࢓༷͸஫໨ػೳΛൈਮ ࣍ੈ୅࢓༷͸࣮૷͋ΓΛத৺ʹ ಛʹෳ਺BOEPS௕ظ࣮૷͋Γ ૲Ҋ SFW ΑΓ޿͍ൣғ ఏҊ QSPQPTBM Λத৺ʹѻ͏͕ ࢼҊ TUSBXNBO ΋Ұ෦ؚΉ cԋࢉࢠͱ͔ѻ͍·ͤΜɻ Proposal Strawman ࠓճ͸ωλతͳ࿩͸গͳΊͰ͢ m(_ _)m

Slide 11

Slide 11 text

ECMAScript 5th first release of Harmony...

Slide 12

Slide 12 text

&$."4DSJQUUI ݱߦͷඪ४࢓༷Ͱ͢ ͱ͸۠ผ͢Δҙຯͳ͠ *&Ҏ߱͸΄΅ϑϧαϙʔτ 'JSFGPY $ISPNF 0QFSB *& TUSJDUNPEFҎ֎ 4BGBSJ CJOEҎ֎ ৄࡉ͸ޓ׵දΛࢀর: http://kangax.github.com/es5-compat-table/

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

ޙํޓ׵εΫϦϓτ ࠷ॳʹಡΈࠐΜͰޙํޓ׵ʹ "VHNFOUKT IUUQBVHNFOUKTDPN EESFDNB IUUQDPEFHPPHMFDPNQEESFDNB FTTIJN IUUQTHJUIVCDPNLSJTLPXBMFTTIJN

Slide 15

Slide 15 text

/BUJWF+40/ Ϙεͷ࡞ͬͨ࢓༷ɻ *&ͦͷଞ޿͘αϙʔτ *& ʹ͸KTPOKTͰରԠ IUUQKTPOPSHKTIUNM Ready! http://json.org/

Slide 16

Slide 16 text

/BUJWF+40/ // JSON 文字列から JavaScript オブジェクトを生成 var obj1 = JSON.parse('[1, 2, 3, 4]'); var obj2 = JSON.parse('{"key": "value"}'); // JavaScript オブジェクトを JSON 文字列に変換 var obj = {}; obj.foo = "some property"; obj.bar = 1; var json = JSON.stringify(obj); // -> '{"foo":"some property","bar":1}'

Slide 17

Slide 17 text

+40/ར༻ͷ஫ҙ *&͸65'จࣈྻΛTUSJOHJGZ ͰΤεέʔϓ aV9999 ͞ΕΔ VOFTDBQF +40/TUSJOHJGZ จࣈ ྻ SFQMBDF aaVH V TUSJOHJGZୈҾ਺ʹ͸஫ҙ ݹ͍'JSFGPY౳ʹόά͋Γ %BUFΦϒδΣΫτʹ΋஫ҙ ϒϥ΢βؒͷڍಈ͕ҟͳΔ ड͚౉͢͠ΔσʔλʹΑͬͯ͸ཁ஫ҙ

Slide 18

Slide 18 text

"SSBZ&YUSB ഑ྻૢ࡞ϝιουΛ௥Ճ JOEFY0G MBTU*OEFY0G FWFSZ TPNF GPS&BDI NBQ pMUFS SFEVDF SFEVDF3JHIU ݹ͔͘Β޿࣮͘૷͞Ε͖ͯͨ 'JSFGPY΍͕࠷ॳʹ࣮૷ *&dʹ͸"VHNFOUKTͳͲ Ready!

Slide 19

Slide 19 text

"SSBZ&YUSB#BTJD6TBHF function isPositive(e, i, arr) { return (e > 0); } [1,3,-1,-3,5].filter(isPositive); // -> [1, 3, 5] [2,5,10,3].every(isPositive); // -> true [3,2,-1,5].every(isPositive); // -> false [2,-5,1,3].some(isPositive); // -> true [-1,-20,0].every(isPositive); // -> false

Slide 20

Slide 20 text

"SSBZ&YUSB#BTJD6TBHF function sum(a,b) { return a+b; } function concatArray(a,b) { return a.concat(b); } var nestedArray = [[0, 1], [2, 3], [4, 5]]; var flat1 = nestedArray.reduce(concatArray); // -> [0, 1, 2, 3, 4, 5] var flat2 = nestedArray.reduceRight(concatArray); // -> [4, 5, 2, 3, 0, 1] var total = flat1.reduce(sum); // -> 15

Slide 21

Slide 21 text

"SSBZ&YUSB&YUSB6TBHF function getcharcode(x) { return x.charCodeAt(0); } Array.prototype.map.call("dynamis", getcharcode); // [100, 121, 110, 97, 109, 105, 115] // Array 以外にも Generic に使いたい場合は call する [1,2,3,2,1].map(parseInt); // [1, NaN, NaN, 2, 1] // parseInt は (文字列, 基数) を受け取る関数 // 関数には (要素, インデックス, 配列) が渡される

Slide 22

Slide 22 text

'VODUJPOQSPUPUZQFCJOE UIJTΛݻఆͨؔ͠਺Λఆٛ BSHVNFOUT΋ݻఆՄೳ 4BGBSJ͸ະαϙʔτ *& 'JSFGPY $ISPNF 0QFSBͰαϙʔτ 8FC,JU/JHIUMZ΋ରԠࡁΈ "VHNFOUKTͳͲͰ ΄΅ ޙํޓ׵ No Safari Ready!

Slide 23

Slide 23 text

CJOEͰϝιουΛؔ਺ʹ // Arguments などを Array に変換するショートカット定義 // call はメソッドとして使う必要があるので美しくない var slice1 = Array.prototype.slice; var argumentsArray1 = slice1.call(arguments); argumentsArray1.every( ... ) // Array のメソッドが使える // bind で関数として使えるシンプルなショートカットに var slice2 = Function.prototype.call.bind(slice1); var argumentsArray2 = slice2(arguments); argumentsArray2.filter( ... ) // Array は便利...

Slide 24

Slide 24 text

$BMMCBDLͰ΋UIJTΛܧঝ var obj = { before: function() { // this を self に保持する必要あり var self = this; document.addEventListener('click', function(e) { self.handler(e) }, false); }, after: function() { // bind 使えば self なしでシンプルに document.addEventListener('click', this.handler.bind(this), false); }, handler: function(e) { // イベントハンドラ呼び出し時にも this === obj にしたい } } ͜Ε͚ͩͷͨΊͳΒ bind ࢖Θͣ self ʹอ࣋͢ΔͷͰे෼Ͱ͕͢...

Slide 25

Slide 25 text

CJOEͰؔ਺ͷҾ਺Λݻఆ // 2点間の距離 function distance(x1,y1, x2,y2) { return Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2,2)); } distance(2,11, 6,8); // -> 5 // 原点からの距離 (最初の2つの引数を固定) // 関数が this 使わないなら undefined で良い var distanceFromOrigin = distance.bind(undefined, 0, 0); distanceFromOrigin(6,8) // -> 10

Slide 26

Slide 26 text

4USJDU.PEF ྑ͋͘ΔϛεΛΤϥʔͱͯ͠ݕग़ *&ະαϙʔτʹཁ஫ҙ *& 'JSFGPY $ISPNF 4BGBSJ 0QFSB͕ରԠ *&͸·ͩόά͋Γ͕ͩظ଴ Φϯʹ͢Δ͚ͩͳΒޙํޓ׵ ඇޓ׵ίʔυΛ࢖Θͳ͚Ε͹ ςετ͚࣌ͩ࢖͏ͷ΋ΞϦ No IE ಛʹཧ༝ͳ͚Ε͹ Strict Mode ͰΤϥʔʹͳΒͳ͍ίʔυΛॻ͘श׳Λ෇͚·͠ΐ͏ No Shim

Slide 27

Slide 27 text

4USJDU.PEF // ファイル冒頭で "use strict"; を書くとオンになる "use strict"; var type = "foo"; // 未定義の変数への代入 typo = "bar"; // × asignment to undeclared variable typo // 書き込み禁止や削除禁止のプロパティ操作 NaN = null; // × NaN is read-only delete Object.prototype; // × property Object.prototype is non-configurable and // can't be deleted https://developer.mozilla.org/en/JavaScript/Strict_mode

Slide 28

Slide 28 text

4USJDU.PEF "use strict"; // オブジェクトのプロパティ名や関数の引数名の重複 var obj = { foo: 1, foo: 2 } // × property name foo appears more than once in object // literal function f(bar, bar) { return bar; } // × duplicate formal argument bar var sum = 015 + // 8 進数リテラル (誤用) 197 + 142; // × octal literals and octal escape sequences are // deprecated https://developer.mozilla.org/en/JavaScript/Strict_mode

Slide 29

Slide 29 text

4USJDU.PEF // Strict Mode は関数単位でも利用できます (function dosomething() { "use strict"; // 関数内だけ Strict Mode に typo = "(・・)."; // × Error })() console.log(typo); // -> undefined (function dootherthing() { // こちらは Classic Mode typo = "(・・)."; // グローバル変数を定義 })() console.log(typo) // -> "(・・)." https://developer.mozilla.org/en/JavaScript/Strict_mode

Slide 30

Slide 30 text

NPSFBCPVU4USJDU.PEF XJUI࢖༻ېࢭ BSHVNFOUTDBMMFSDBMMFFېࢭ ؔ਺தͰ͸UIJTOVMMHMPCBM FWBMதͷίʔυ͸֎෦είʔϓʹ ม਺ΛఆٛͰ͖ͳ͍ εΫϦϓτ·ͨ͸ؔ਺಺ͷτοϓ ϨϕϧҎ֎Ͱͷؔ਺ఆٛېࢭ ͦͷଞ͍Ζ͍Ζ

Slide 31

Slide 31 text

(FUUFS4FUUFS ϓϩύςΟ஋ͷऔಘɾઃఆΛߦ ͏ͨΊͷಛผͳϝιου HFUUFSؔ਺ͷฦΓ஋Λऔಘ TFUUFSؔ਺Λઃఆ࣌ʹ࣮ߦ @@EFpOF(FUUFS@@ͳͲ͸ඇඪ४ Ready! No Shim

Slide 32

Slide 32 text

(FUUFS4FUUFS var incremantal = { _n: 0, get next() { return this._n++; }, // アクセス時に呼び出し set next(n) { // 代入時に呼び出し if (n >= this._n) this._n=n; else throw "減らしちゃダメ!" } } incremantal.next; // -> 0 incremantal.next; // -> 1 incremantal.next = 3; incremantal.next; // -> 3 incremantal.next = 1; // -> "減らしちゃダメ!"

Slide 33

Slide 33 text

.FNPJ[BUJPO -B[JMZ-PBE var obj = { get somethinglarge() { // getter 自身を削除し、単なるプロパティに変更 delete this.somethinglarge; return this.somethinglarge = new Large(); } } // ここまで読み込んだだけでは new Large() されない // = getter 定義のコストしかかからない ... obj.somethinglarge ... // 最初にアクセスした時に new Large() される ... obj.somethinglarge ... // 2 度目からは new されずに再利用される ࢖͏ͱݶΒͳ͍͕܁Γฦ͠࢖͏େ͖ͳΦϒδΣΫτ͕͋Δ࣌ͷ Perf Tips

Slide 34

Slide 34 text

TFBMGSFF[F ΦϒδΣΫτΛ੩తʹ ؒҧͬͯॻ͖׵͑ΔͷΛ๷ࢭ ݩʹ໭͢͜ͱ͸Ͱ͖ͳ͍ TFBMϓϩύςΟ௥Ճɾ࡟আېࢭ GSFF[FϓϩύςΟมߋېࢭ 4USJDU.PEFͰ͸ྫ֎Λൃੜ Ready! No Shim seal/freeze ͞ΕͯΔ͔Ͳ͏͔͸ isSealed/isFrozen Ͱ֬ೝͰ͖Δ

Slide 35

Slide 35 text

TFBM var obj = { foo: 1, bar: 2 }; obj.foo = 3; obj.baz = 4; delete obj.bar; console.log(obj); // -> { foo: 3, baz: 4 } Object.seal(obj); obj.foo = 5; // 既存プロパティは変更可能 obj.bar = 6; // プロパティ追加は黙って無視 console.log(obj); // -> { foo: 5, baz: 4 } https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/seal

Slide 36

Slide 36 text

GSFF[F "use strict"; // 黙って無視せず例外を発生させる var obj = { foo: 1, bar: 2 }; obj.foo = 3; obj.baz = 4; delete obj.bar; console.log(obj); // -> { foo: 3, baz: 4 } Object.freeze(obj); obj.foo = 5; // × obj.foo is read-only obj.bar = 6; // × obj.bar is not extensible console.log(obj); // -> { foo: 3, baz: 4 } https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/freeze

Slide 37

Slide 37 text

BOENPSF 4USJOHQSPUPUZQFUSJN "SSBZJT"SSBZ %BUFOPX %BUFQSPUPUZQFUP*404USJOH /B/ *OpOJUZ VOEFpOFEఆ਺Խ QSFWFOU&YUFOTJPOT JT&YUFOTJCMF QFSTF*OU ͳͲ΋ਐ਺ʹ ͦͷଞ͍Ζ͍Ζ

Slide 38

Slide 38 text

BCPVU&$."UI 4USJDU.PEFͰϛεΛݮগ +40/΍"SSBZؔ਺͕ศརʹ ΦϒδΣΫτࢦ޲पΓ΋ڧԽ جຊతʹߏจ͸มԽͳ͠ ޙํޓ׵͸4IJNͰରԠ

Slide 39

Slide 39 text

ECMAScript 6th Next release of Harmony...

Slide 40

Slide 40 text

&$."4DSJQUUIͷ໨ඪ ΑΓॻ͖΍͍͢ݴޠ ෳࡶͳΞϓϦɺϥΠϒϥϦɺ ࣍࢓༷ͷίʔυδΣωϨʔλ ςετՄೳͳ࢓༷΁ ૬ޓӡ༻ੑΛ޲্ ՄೳͳΒσϑΝΫτΛ࠾༻ όʔδϣχϯά͸୯७ʹ ੩తݕূ΋Մೳʹ http://wiki.ecmascript.org/doku.php?id=harmony:harmony

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

ޙํޓ׵εΫϦϓτ ࠷ॳʹಡΈࠐΜͰޙํޓ׵ʹ FTTIJN IUUQTHJUIVCDPNQBVMNJMMSFTTIJN

Slide 43

Slide 43 text

4JNQMF.BQT ଞͷݴޠʹ΋͋Δ.BQ 1ZUIPOEJDU 3VCZ)BTI +BWBKBWBVUJM)BTI.BQ $TUEVOPSEFSE@NBQ 'JSFGPY $ISPNF $ISPNF͸BCPVUqBHTͰ༗ޮԽ ະ࣮૷Ͱ΋FDTIJNͰޓ׵ʹ Proposal http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets

Slide 44

Slide 44 text

4JNQMF.BQ var map = new Map(); var str = "Mozilla", obj = {}, func = function(){}; // Map に値を格納 map.set(str, "Firefox"); map.set(obj, "Thunderbird"); map.set(func, "Japan"); // キーに対応する値を取得 map.get(str); // -> "Firefox" map.get(obj); // -> "Thunderbird" map.get(func); // -> "Japan" // 設定したキーと引数を === 的に比較して検索されることに注意 map.get("Mozilla"); // -> "Firefox" map.get({}); // -> undefined map.get(function(){}) // -> undefined ΩʔͱҾ਺ͷൺֱ͸ === ԋࢉࢠʹ͍͕ۙݫີʹ͸ === ͱ΋ҟͳΔ

Slide 45

Slide 45 text

4JNQMF4FUT ଞͷݴޠʹ΋͋Δ4FU 1ZUIPOTFU 3VCZ4FU +BWBKBWBVUJM)BTI4FU $TUEVOPSEFSFE@TFU 'JSFGPY $ISPNF $ISPNF͸BCPVUqBHTͰ༗ޮԽ ະ࣮૷Ͱ΋FDTIJNͰޓ׵ʹ Proposal http://wiki.ecmascript.org/doku.php?id=harmony:simple_maps_and_sets

Slide 46

Slide 46 text

4JNQMF4FU var set = new Set(); // 集合に追加・確認・削除 set.add("Firefox"); set.add("Thunderbird"); set.add(+0); set.add(NaN); set.has("Firefox"); // -> true set.has("Sunbird"); // -> false set.delete("Firefox"); set.has("Firefox"); // -> false // -0 と +0 は区別される, NaN は区別されない set.has(-0); // -> false set.has(NaN); // -> true

Slide 47

Slide 47 text

8FBL.BQT 'JSFGPY $ISPNF 'JSFGPY͸ॳظ࢓༷ͷ࣮૷ $ISPNF͸BCPVUqBHTͰ༗ޮԽ ະ࣮૷Ͱ΋FDTIJNͰޓ׵ʹ .BQͷΩʔ͸ऑࢀরʹ($ର৅ ࢓༷มߋ͞ΕͯΔͷͰৄࡉׂѪ ৄ͘͠͸.%/ࢀর Proposal http://wiki.ecmascript.org/doku.php?id=harmony:weak_maps

Slide 48

Slide 48 text

1SPYZ 'JSFGPY $ISPNF ͍ͣΕ΋ॳظ࢓༷ͷ࣮૷ $ISPNF͸BCPVUqBHTͰ༗ޮԽ ࢓༷͸%JSFDU1SPYJFTʹҠߦ ࢓༷มߋ͞ΕͯΔͷͰৄࡉׂѪ ৄ͘͠͸.%/ࢀর Proposal http://wiki.ecmascript.org/doku.php?id=harmony:proxies

Slide 49

Slide 49 text

DPOTU MFU#MPDL4DPQF MFUͷ࣮૷͸޿͕Γͭͭ͋Δ 'JSFGPY͕ੲ͔Β࣮૷ $ISPNFBCPVUqBHT༗ޮԽ DPOTU͸޿͘αϙʔτ ୠ͠࠷৽࢓༷४ڌ͸ͳ͠ 4BGBSJ0QFSB͸WBSͱҰॹ *&͸DPOTUඇαϙʔτ http://wiki.ecmascript.org/doku.php?id=harmony:block_scoped_bindings Proposal

Slide 50

Slide 50 text

DPOTU DPOTU(PMEFO3BUJP ఆ਺Λએݴ ఆٛ MFUಉ༷ͷϒϩοΫείʔϓ એݴ࣌ʹॳظԽ ୅ೖ ͕ඞਢ ݱϒϥ΢βͷ࣮૷͸ݹ͍ ؔ਺είʔ ϓɺॳظԽෆཁ http://wiki.ecmascript.org/doku.php?id=harmony:const

Slide 51

Slide 51 text

DPOTUར༻ͷ஫ҙ DPOTUͰٯʹ஗͍͜ͱ΋͋Δ ա౉ظ࢓༷ͷܽؕʹΑΔ DPOTUม਺͕ॳظԽࡁΈ͔Ͳ͏͔ ࣮ߦ࣌ʹ൑அ͕ඞཁͳ৔߹ &$."UI४ڌ࣮૷ͳΒ0, DPOTU͸ॳظ஋ඞਢʹͳΔFUD 'YCVH +4$CVH http://d.hatena.ne.jp/Constellation/20111201/1322678350

Slide 52

Slide 52 text

MFU { // let 定義: ブロックスコープ let a = 1, b = 10; // let 式・文: let (...) に続く式・文中だけで有効 let (a = 100, c = 300) console.log(a); // -> 100 // for 文などでの let for (let a=0; a<3; a++) { console.log(a+b); // -> 10, 11, 12 } console.log(a); // -> 1 } console.log(a); // × ReferenceError: a is not defined http://wiki.ecmascript.org/doku.php?id=harmony:let

Slide 53

Slide 53 text

%FTUSVDUVSJOH ෼ׂ୅ೖ ୅ೖࠨลΛ഑ྻ΍ΦϒδΣΫτ ͷΑ͏ʹॻ͖Ұׅɾ෦෼୅ೖ 'JSFGPYͰݹ͔͘Β࣮૷ࡁΈ 0QFSB΋Ұ෦ಈ࡞͢Δ͕ɺ࣮࣭ తʹ͸࢖͍෺ʹͳΒͳ͍࣮૷ +40/σʔλॲཧͱ͔ಛʹศར Proposal http://wiki.ecmascript.org/doku.php?id=harmony:destructuring

Slide 54

Slide 54 text

%FTUSVDUVSJOH ෼ׂ୅ೖ // Array のサンプル: // 値の入れ替え [a, b] = [b, a]; // 関数から複数の値を返す var [c,d] = (function f() { return [1,2]; })(); // -> c=1, d=2 // 一部省略や入れ子も可能 var [e,,[x,y]] = (function f(){return [3,4,[10,20]]})(); // -> e=3,x=10,y=20

Slide 55

Slide 55 text

%FTUSVDUVSJOH ෼ׂ୅ೖ // Object のサンプル var fx={ name:"Firefox", vendor:"Mozilla", ver:13 }; var ch={ name:"Chrome", vendor:"Google", ver:19 }; var browsers={ firefox: fx, chrome: ch } // 欲しいプロパティだけ一括代入 var { name: n, ver: v } = fx; // -> n="Firefox", v=13 // for-each-in などとの組み合わせも for each ( let { vendor: ven, ver: ver } in browsers ) console.log(ven) // -> "Mozilla", "Google"

Slide 56

Slide 56 text

GPSPGϧʔϓ Ωʔ͡Όͳͯ͘ཁૉͰϧʔϓ ݱࡏ'JSFGPY͚͕ͩରԠ http://wiki.ecmascript.org/doku.php?id=harmony:iterators Proposal

Slide 57

Slide 57 text

GPSPGϧʔϓ let arr = ["Fx", "Ch", "IE"]; for (let k in arr) console.log(k); // -> 0, 1, 2 for (let v of arr) console.log(v); // -> "Fx", "Ch", "IE" // ECMAScript 5th でやると: arr.forEach(function(v) { console.log(v) }); // 昔々: for (var i=0; i

Slide 58

Slide 58 text

"SSBZ$PNQSFIFOTJPOT ഑ྻͷ಺แදه 1ZUIPO΍)BTLFMMʹ΋͋Δ΍ͭ +BWB4DSJQUߏจ͸'JSFGPY &$."UIߏจ͸'JSFGPY GPSFBDIJOͰͳ͘GPSPG Proposal http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions

Slide 59

Slide 59 text

"SSBZ$PNQSFIFOTJPOT // 配列のフィルタ [x for (x of [1,-4,5,3,-7]) if (x > 0)] // -> [1, 5, 3] // 配列のマップ [x*x for (x of [2,4,6])] // -> [4, 16, 36] // 2つの配列のデカルト積 [ i*j for (i of [0,2,4]) for (j of [5,3]) ] // -> [0, 0, 10, 6, 20, 12]

Slide 60

Slide 60 text

*UFSBUPST(FOFSBUPST 1ZUIPOͷδΣωϨʔλతͳϠπ 1ZUIPOͳͲΛࢀߟʹಋೖ͞Εͨ 'JSFGPY͕αϙʔτ ZJFME͸+4όʔδϣϯࢦఆඞਢ TDSJQUUZQFBQQMJDBUJPO KBWBTDSJQUWFSTJPO PQUJOඞਢͳͷͰࠓ೔͸ׂѪ http://wiki.ecmascript.org/doku.php?id=harmony:generators Proposal

Slide 61

Slide 61 text

5ZQFE"SSBZ ܕݻఆ഑ྻͰߴ଎਺஋ԋࢉ ݩʑ8FC(-Ͱಋೖ͞Ε'JMF"1* 9)3 8FC4PDLFUͳͲͰ΋࠾༻ &$."UIʹ΋ೖΔʁ *&ඇαϙʔτʹ஫ҙ *& 'Y $ISPNF 4BGBSJ 0QFSB Strawman http://wiki.ecmascript.org/doku.php?id=strawman:typed_arrays WebGL Spec

Slide 62

Slide 62 text

5ZQFE"SSBZ "SSBZ#VGGFS CZUF-FOHUI ϝϞϦΛ֬อ͢ΔόοϑΝ 5IF5ZQFE"SSBZ7JFX5ZQFT "SSBZ#VGGFSಡΈग़͠༻Ϗϡʔ *OU"SSBZ 6OJU"SSBZ *OU"SSBZ 6JOU"SSBZ *OU"SSBZ 6JOJU"SSBZ 'MPBU"SSBZ 'MPBU"SSBZ

Slide 63

Slide 63 text

5ZQFE"SSBZ7JFX // 16 バイト長のバッファを確保 var buffer = new ArrayBuffer(16); // 32bit 整数 x 4 として読み出すビューを定義 var int32View = new Int32Array(buffer); // 32bit 整数として 0, 2, 4, 6 を格納 for (var i=0; i 0, 0, 2, 0, 4, 0, 6, 0

Slide 64

Slide 64 text

.PSF-JCSBSJFT ະ࣮૷͕ͩ4IJNͰޙํޓ׵ʹ .BUIͷ֦ு DPTI TJOI UBOI BSPTI BTJOI BUBOI MPHQ MPH MPH TJHO USVOD 4USJOHͷ֦ு TUBSUT8JUI FOET8JUI DPOUBJOT 3FQFBU UP"SSBZ SFWFSTF /VNCFSͷ֦ு JT'JOJUF JT/B/ JT*OUFHFS UP*OUFHFS MS ͸ϓϩτλΠϓ࣮૷ΛϓϥάΠϯͱͯ͠ެ։ Proposal Strawman & Ready!

Slide 65

Slide 65 text

(MPCBMJ[BUJPO ೔࣌΍௨՟ͳͲͷจࣈྻΛϩ έʔϧ౳ʹԠͯ͡ग़ྗ .4͕ϓϩτλΠϓ࣮૷Λϓϥά Πϯͱͯ͠ެ։ *&ຊମʹ͸ະ࣮૷ͳͷͰׂѪ ·ͩ୯ͳΔࢼҊͷஈ֊ Strawman http://wiki.ecmascript.org/doku.php?id=globalization:globalization

Slide 66

Slide 66 text

+4/FYUָ͍͠Ͷʂ +4/FYUษڧձ΍Γ·͠ΐ͏ ɾɾ

Slide 67

Slide 67 text

+BWB4DSJQU'VUVSF ѻ͍қ͘ॻ͖қ͘ αʔό΍ΤϯλʔϓϥΠζ΋ "1*͸)5.-%0.Ͱ (16΍ϋʔυ΋ϑϧ׆༻

Slide 68

Slide 68 text

୭΋ଚܟͯ͘͠Εͳ͍ +BWBͷͰ͖ͦ͜ͳ͍ ೥લ

Slide 69

Slide 69 text

)5.-ͷج൫ݴޠ ԿͰ΋)5.-ʹԿͰ΋+BWB4DSJQU ݱࡏ

Slide 70

Slide 70 text

+BWBͱର౳ʹ ଚܟ͞ΕѪ͞ΕΔݴޠʹͳΓ͍ͨ ೥ޙ

Slide 71

Slide 71 text

͍΍ɺ+BWBΛӽ͑Δʂ ෕Λ৐Γӽ͑ͯҰਓલ ೥ޙ

Slide 72

Slide 72 text

"OZ2VFTUJPOʁ

Slide 73

Slide 73 text

Appendix other ideas...

Slide 74

Slide 74 text

&$."4DSJQU+BWB4DSJQU &$."4DSJQU +BWB4DSJQUͷجຊػೳΛඪ४Խ ͨ͠εΫϦϓτݴޠ +BWB4DSJQU ޿ٛ &$."4DSJQUʴϒϥ΢β༻ػೳ +BWB4DSJQU ڱٛ /FUTDBQF'JSFGPYͷ࣮૷ ޿ٛͷ JS ʹόʔδϣϯ͸͋Γ·ͤΜ (JS 1.x ͳͲ͸ Firefox όʔδϣϯʹରԠ)

Slide 75

Slide 75 text

7FSTJPOJOHʹ͍ͭͯ )BSNPOZͷޙํඇޓ׵ػೳʹ PQUJO͢Δํ๏͸ະ֬ఆ VTFWFSTJPOʁ.PEVMFར༻࣌ʁ 'JSFGPY͸UIઐ༻Ϟʔυͳ͠ 7͸ݱࡏϞʔυ࣮૷ DMBTTJD TUSJDU FYUFOEFE IBSNPOZϑϥάͰFYUFOEFE ߋʹIBSNPOZ@TDPQJOHͱ͔

Slide 76

Slide 76 text

8FC$- 0QFO$-Λ+BWB4DSJQU͔Β /WJEJB͕'JSFGPYʹࢼݧ࣮૷ 4BNTVOH͕8FC,JUʹࢼݧ࣮૷ 8FCΞϓϦͰ΋(16ϑϧ׆༻ ύϑΥʔϚϯεࠩ͸ྺવɻ http://www.khronos.org/webcl/

Slide 77

Slide 77 text

3JWFS5SBJM ฒྻܭࢉ༻"1* *OUFMʹΑΔఏҊɾ࣮૷ 'JSFGPY֦ுػೳͱͯ͠ࢼݧ࣮૷ http://blogs.intel.com/research/2011/09/15/pjs/ https://github.com/RiverTrail/RiverTrail

Slide 78

Slide 78 text

%0.$SZQU ҉߸Խॲཧαϙʔτ༻"1* 'JSFGPY֦ுػೳͱͯ͠ࢼݧ࣮૷ +BWB4DSJQUߴ଎Խ ʹΤϯδϯߴ଎Խʴઐ༻"1* Ұ෦"1*͸%0.Ͱඪ४Խ &$."4DSJQU͕શͯͰ͸ͳ͍ JSON ͷΑ͏ʹधཁͷ͋Δઐ༻ API ͕ఆٛ͞Ε͍ͯ͘ https://addons.mozilla.org/ja/firefox/addon/domcrypt/

Slide 79

Slide 79 text

References link list...

Slide 80

Slide 80 text

ݱߦ࢓༷ &$."4DSJQU &$." http://www.ecma-international.org/publications/standards/ Ecma-262.htm &$."4DSJQUUI)5.-൛ http://es5.github.com/ &$."4DSJQUGPS9.- &9 &$." http://www.ecma-international.org/publications/standards/ Ecma-357.htm &$."4DSJQU࣌୅͔Βͷ૲Ҋ http://wiki.ecmascript.org/doku.php? id=es3.1:es3.1_proposal_working_draft

Slide 81

Slide 81 text

࣍ੈ୅࢓༷ &$."4DSJQU8JLJ http://wiki.ecmascript.org &$."4DSJQUUI%SBGU4QFDJpDBUJPO http://wiki.ecmascript.org/doku.php? id=harmony:specification_drafts )BSNPOZ1SPQPTBMT http://wiki.ecmascript.org/doku.php?id=harmony:proposals )BSNPOZ4USBXNBO http://wiki.ecmascript.org/doku.php?id=strawman:strawman

Slide 82

Slide 82 text

ϒϥ΢β࣮૷ঢ়گ $PNQBUJCJMJUZ5BCMF ୯७ݕग़ͳͷͰόά͋Γ࣮૷΋ؚΉˍݕग़ϛε΋͋Γ ߋ৽ස౓͸ఔʑͳͷͰ։ൃ൛ͷ࣮૷ঢ়گ͸ࢀߟఔ౓ http://kangax.github.com/es5-compat-table/ .%/Ͱݸผػೳϖʔδ຤ඌΛ֬ೝ͢Δͷ͕ൺֱత࣮֬ https://developer.mozilla.org/

Slide 83

Slide 83 text

ߏจςετͳͲ +4-JOUCZ5IF#PTTPG:PV http://jslint.com/ JWKT&4OFYU&4OFYUMFYFSBOEQBSTFS http://constellation.github.com/iv/js/es.next.html &$."4DSJQUUI4ZOUBY(SBNNFS http://teramako.github.com/ECMAScript/ ecma6th_syntax.html 5SZ4USJDUCZ.4 http://ie.microsoft.com/testdrive/HTML5/TryStrict/ Default.html

Slide 84

Slide 84 text

࣮૷ 4QJEFS.POLFZ#VJME%PDVNFOUBUJPO https://developer.mozilla.org/en/SpiderMonkey/ Build_Documentation )PXUP%PXOMPBEBOE#VJME7 http://code.google.com/intl/ja/apis/v8/build.html +BWB4DSJQU$PSF http://trac.webkit.org/wiki/JavaScriptCore MW&$."ΤϯδϯCZ!$POTUFMMBUJPO https://github.com/Constellation/iv WJNQFSBUPSͰ&4OFYU http://d.hatena.ne.jp/caisui/20111217/1324098318