Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ECMAScriptの視点で見る WeakRefの“正しい”使い方

uhyo
December 09, 2019

ECMAScriptの視点で見る WeakRefの“正しい”使い方

Ginza.js#7のLTです。

uhyo

December 09, 2019
Tweet

More Decks by uhyo

Other Decks in Programming

Transcript

  1. &$."4DSJQUך鋔挿ד鋅׷
    8FBL3FGךˑ姻׃ְ˒⢪ְ倯
    (JO[[email protected]

    View Slide

  2. 荈䊹稱➜
    –ؿٗٝزؒٝسؒٝآص،!-*/&吳䒭⠓爡
    – +BWB4DSJQU娖䎃ֻ׵ְ
    –2JJUB蔓➂&$."4DSJQUةؚDPOUSJCVUJPO侧⡘
    – չ+BWB4DSJQUך \^׾椚鍑ׅ׷պ
    – չ➙ַ׵ד׮鷄ְאֽ׷ +BWB4DSJQUךչ垥彊ٓ؎ـٓٔպ׾㷕עպ
    – չ׉׹׉׹+BWB4DSJQUח䱰欽ׁ׸׉ֲז0QUJPOBM$IBJOJOH׾➙ׁ׵䗡䎿鍑铡պ זו
    [email protected]

    View Slide

  3. [email protected]
    5BCMFPG$POUFOUT
    8FBL3FGך䗁统
    &$."4DSJQUהؖك٦آ؝ؙٖءّٝךꟼ⤘
    8FBL3FGכ➬圫חוך״ֲח剅ַ׸׋ךַ
    8FBL3FGָ䧮ղח♷ִ׷⥂鏾כ⡦ַ

    View Slide

  4. [email protected]
    8FBL3FGך䗁统
    –4UBHFفٗه٦ؠٕ
    –8FBL3FGؔـآؙؑزפך䓲⿫撑׾⡲䧭דֹ׷װא
    –'JOBMJ[BUJPO(SPVQؔـآؙؑزָؖك٦آ؝ؙٖز
    ׁ׸׋׵؝٦ٕغحؙㄎ׿דֻ׸׷װא
    ˟DG8FBL3FG+BWB4DSJQUח䓲⿫撑ָװ׏גֻ׷אְדח'JOBMJ[BUJPO׮ 2JJUB 㹑⠗

    View Slide

  5. [email protected]
    8FBL3FGך⢽
    const ref = new WeakRef(new ArrayBuffer(1024 ** 3));
    console.log(ref.deref()); // ArrayBuffer
    setTimeout(()=> {
    gc();
    console.log(ref.deref()); // undefined
    }, 100);
    new WeakRef ⦼

    ד⦼פך䓲⿫撑׾⡲䧭
    䓲⿫撑ך⚥魦כderef
    ًاحسד铣׬
    ($ח״׏ג䓲⿫撑ָ
    ⥂䭯ׅ׷ؔـآؙؑز
    ָ嶊ִ׋

    View Slide

  6. [email protected]
    8FBL3FGך⢽嶊ִזְ㜥さ
    const buf = new ArrayBuffer(1024 ** 3);
    const ref = new WeakRef(buf);
    console.log(ref.deref()); // ArrayBuffer
    console.log(ref.deref() === buf); // true
    setTimeout(()=> {
    gc();
    console.log(ref.deref()); // ArrayBuffer
    console.log(buf.byteLength); // 1073741824
    }, 100);
    㢌侧CVGח⦼׾Ⰵ׸׋
    䓲ֻזְ⿫撑
    䓲⿫撑ך⚥魦כ
    床׃׋⦼הずׄ
    ($䖓׮嶊ִגְזְ
    㢌侧buf׾鸐ׄג⦼ח
    ،ؙإأ〳腉זךד

    View Slide

  7. [email protected]
    'JOBMJ[BUJPO(SPVQך⢽
    const group = new FinalizationGroup(
    iterator => console.log([...iterator]));
    let obj = new ArrayBuffer(1024 ** 3);
    group.register(obj, 'דְַر٦ة’);
    obj = null;
    gc(); // [‘דְַر٦ة’] ה邌爙ׁ׸׷
    ؔـآؙؑزָ($ׁ׸׋
    הֹחㄎעꟼ侧׾床ׅ
    'JOBMJ[BUJPO(SPVQך
    湊鋔㼎韋ח obj׾鷄⸇
    objפך⿫撑׾嶊ׅ
    objָ($〳腉חז׷
    objָ($ׁ׸ג؝٦ٕ
    غحָؙㄎל׸׷

    View Slide

  8. &$."4DSJQUה($

    View Slide

  9. [email protected]
    &$."4DSJQUה($
    2הֿ׹דծ+4ך鎉铂➬圫&$."4DSJQUדכ
    ($כֿ׸תדוֲ䪔׻׸גְ׋ך
    ˟&$."4DSJQU +BWB4DSJQUך鎉铂➬圫׾㹀׭׷㕂ꥷ鋉呓կ
    չ+BWB4DSJQUպהչ&$."4DSJQUպך麩ְחכ长铡֮׷ָծ娖〷涸穗箮דせ⵸ָ麩ֲ׌ֽד䊴殯כ
    זְהְֲךָ涪邌罏ך䭯锷կ

    View Slide

  10. [email protected]
    &$."4DSJQUה($
    2הֿ׹דծ+4ך鎉铂➬圫&$."4DSJQUדכ
    ($כֿ׸תדוֲ䪔׻׸גְ׋ך
    " ⡦׮㹀纏ׁ׸גְתׇ׿ד׃׋
    ˟8FBL.BQך眍ח׍׳׏ה׌ֽ($פך鎉⿹ָ֮׷ָ/05&玎䏝
    ˟&$."4DSJQU +BWB4DSJQUך鎉铂➬圫׾㹀׭׷㕂ꥷ鋉呓կ
    չ+BWB4DSJQUպהչ&$."4DSJQUպך麩ְחכ长铡֮׷ָծ娖〷涸穗箮דせ⵸ָ麩ֲ׌ֽד䊴殯כ
    זְהְֲךָ涪邌罏ך䭯锷կ

    View Slide

  11. [email protected]
    &$."4DSJQUה($
    2ז׈⡦׮㹀纏ׁ׸גְזַ׏׋ך
    " ($כفؚٗٓيך䮙⹛חⰋֻ䕦갟׾⿹רׁזְַ׵
    –($כⳢ椚禸ח״׷剑黝⻉חֺׅזְ湡涸ًٌٔ⢪欽ꆀ׾⵴幾
    –剑黝⻉דفؚٗٓيך䮙⹛ָ㢌׻׷ץֹדכזְ
    ˟($ָ䮠ת׷ְׇדفؚٗٓيךػؿؓ٦وٝأָ衅׍׋׶ׅ׷ַ׮׃׸זְָծ
    ػؿؓ٦وٝأכ鎉铂➬圫ד⥂鏾ׁ׸גְזְךד➙㔐כ莆㄂ז׃

    View Slide

  12. [email protected]
    8FBL3FGך&$."4DSJQUפך䕦갟
    2ד׮8FBL3FGכفؚٗٓيך䮙⹛ח䕦갟ׅ׷״י

    View Slide

  13. [email protected]
    8FBL3FGך&$."4DSJQUפך䕦갟
    2ד׮8FBL3FGכفؚٗٓيך䮙⹛ח䕦갟ׅ׷״י
    " ׉ֲדׅי
    אְח&$."4DSJQUחؖك٦آ؝ؙٖءّٝך嚊䙀ָ

    View Slide

  14. [email protected]
    8FBL3FG➬圫ח鋅׷($
    IUUQTUDFTQSPQPTBMXFBLSFGT ״׶䒷欽

    View Slide

  15. [email protected]
    8FBL3FG➬圫ח鋅׷($
    ˑֿך➬圫כؖك٦آ؝ؙٖءّٝח㼎׃ג⡦׵ך⥂鏾׮遤׻זְ˒
    IUUQTUDFTQSPQPTBMXFBLSFGT ״׶䒷欽

    View Slide

  16. [email protected]
    ؖك٦آ؝ؙٖءّٝך➬圫♳ך㹀纏
    Ⳣ椚禸כ⟣䠐ךة؎ىؚٝדˑMJWFדזְ˒ؔـآؙؑز׾8FBL3FGַ׵
    嶊׃ג׮葺ְ⥂鏾כ搀ְ宕黅ח嶊ׁ׸זְ〳腉䚍׮֮׷
    • ˑMJWFדזְ˒ؔـآؙؑزؖك٦آ؝ؙٖءّٝך㼎韋ח
    ז׶䖤׷ؔـآؙؑزך䬄韋涸ז邌植

    View Slide

  17. [email protected]
    MJWFזؔـآؙؑزך㹀纏
    㼛勻涸ח8FBL3FG⟃㢩ך䩛媮דفؚٗٓيַ׵錁庠
    ׁ׸׷ֿה
    ךזְؔـآؙؑز

    View Slide

  18. [email protected]
    MJWFזؔـآؙؑزך㹀纏
    㼛勻涸ח8FBL3FG⟃㢩ך䩛媮דفؚٗٓيַ׵錁庠
    ׁ׸׷ֿה
    ךזְؔـآؙؑز
    錁庠הכ!!!!!!!!!!
    ˟׮׏ה׍ׯ׿ה׃׋㹀纏ח׃״ֲהְֲ陽锷כ֮׶תׅ

    View Slide

  19. תה׭

    View Slide

  20. [email protected]
    ➬圫חֶֽ׷8FBL3FGך⥂鏾
    –($ָ饯ֿ׷⥂鏾כ搀ְⳢ椚禸⣛㶷
    –($㼎韋הז׷ؔـآؙؑزך⿑㺘ז㹀纏׮Ⳣ椚禸⣛㶷
    –׬׃׹8FBL3FGכ⥂鏾׾幾׵ׅ
    չفؚٗٓيָ⥂䭯ׅ׷ؔـآؙؑزכ($ׁ׸זְպהְֲ⥂鏾׾PQUPVU〳腉

    View Slide

  21. [email protected]
    8FBL3FGך䠐纏
    8FBL3FGכ⥂鏾׾幾׵ׅ
    Ⳣ椚禸ךⵖ秈ָ幾׷
    剑黝⻉ך堣⠓ָ㟓⸇
    Ⱗ⡤涸חכًٌٔך⢪欽ꆀ⵴幾

    View Slide

  22. [email protected]
    תה׭
    8FBL3FGכ剑黝⻉ָ׉ך㈓♧ך㶷㖈䠐纏ד֮׶ծ
    ➭ך湡涸ד⢪ֲךכ⡦ַָ呎劤涸חֶַ׃ְךד
    罋ִ湫׃ת׃׳ֲ
    'JOBMJ[BUJPO(SPVQ׮ず圫

    View Slide