Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
ECMAScriptの視点で見るWeakRefの“正しい”使い方
Search
uhyo
December 09, 2019
Programming
690
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ECMAScriptの視点で見る WeakRefの“正しい”使い方
Ginza.js#7のLTです。
uhyo
December 09, 2019
More Decks by uhyo
See All by uhyo
型があると何が嬉しいか
uhyo
2
76
Baseline対応のDOMの型定義を作った
uhyo
3
900
AIのReact習熟度を測る
uhyo
2
970
React、まだ楽しくて草
uhyo
7
4.9k
TypeScript 7.0の現在地と備え方
uhyo
6
3.8k
React 19時代のコンポーネント設計ベストプラクティス
uhyo
20
10k
型定義でAIと会話する:型を通じてAIに意図を伝えるテクニック
uhyo
1
110
タグ付きユニオン型を便利に使うテクニックとその注意点
uhyo
3
1.2k
ECMAScript仕様の最新動向: プロセスの変化と仕様のトレンド
uhyo
3
960
Other Decks in Programming
See All in Programming
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
信頼性の目標を誰も求めてない
shubox
0
490
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
160
Hono + Inertia + React で LP を構築した話
oukayuka
2
210
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
Building an Out-of-Order CPU
latte72
0
690
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
120
Oxlintはいいぞ(続)
yug1224
1
550
MySQLとPostgreSQLって何が違うの?
akagami
PRO
0
170
ソフトウェアエンジニアにとっての生成AI - 特性を知って使い倒す / generative ai for software enginner
kishida
7
2.3k
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
320
Featured
See All Featured
RailsConf 2023
tenderlove
30
1.5k
Abbi's Birthday
coloredviolet
3
9.8k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
Building Applications with DynamoDB
mza
96
7.2k
Designing Powerful Visuals for Engaging Learning
tmiket
1
530
Documentation Writing (for coders)
carmenintech
77
5.5k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
710
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
520
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Transcript
&$."4DSJQUך鋔挿ד鋅 8FBL3FGךˑ姻׃ְ˒⢪ְ倯 (JO[BKT!VIZP@
荈䊹稱➜ ؿٗٝزؒٝسؒٝآص،!-*/&吳䒭⠓爡 +BWB4DSJQU娖䎃ְֻ 2JJUB蔓➂&$."4DSJQUةؚDPOUSJCVUJPO侧⡘ չ+BWB4DSJQUך \^椚鍑ׅպ չ➙ַד鷄ְאֽ
+BWB4DSJQUךչ垥彊ٓ؎ـٓٔպ㷕עպ չ+BWB4DSJQUח䱰欽ֲׁז0QUJPOBM$IBJOJOH➙ׁ䗡䎿鍑铡պ זו !VIZP@
!VIZP@ 5BCMFPG$POUFOUT 8FBL3FGך䗁统 &$."4DSJQUהؖك٦آ؝ؙٖءّٝךꟼ⤘ 8FBL3FGכ➬圫חוך״ֲח剅ַךַ 8FBL3FGָ䧮ղח♷ִ⥂鏾כ⡦ַ
!VIZP@ 8FBL3FGך䗁统 4UBHFفٗه٦ؠٕ 8FBL3FGؔـآؙؑزפך䓲撑⡲䧭דֹװא 'JOBMJ[BUJPO(SPVQؔـآؙؑزָؖك٦آ؝ؙٖز ׁ؝٦ٕغحؙㄎדֻװא ˟DG8FBL3FG+BWB4DSJQUח䓲撑ָװגֻאְדח'JOBMJ[BUJPO 2JJUB 㹑⠗
!VIZP@ 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 ًاحسד铣 ($ח״ג䓲撑ָ ⥂䭯ׅؔـآؙؑز ָ嶊ִ
!VIZP@ 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鸐ׄג⦼ח ،ؙإأ〳腉זךד
!VIZP@ '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ָ($ׁג؝٦ٕ غحָؙㄎל
&$."4DSJQUה($
!VIZP@ &$."4DSJQUה($ 2הֿדծ+4ך鎉铂➬圫&$."4DSJQUדכ ($כֿתדוֲ䪔גְך ˟&$."4DSJQU +BWB4DSJQUך鎉铂➬圫㹀㕂ꥷ鋉呓կ չ+BWB4DSJQUպהչ&$."4DSJQUպך麩ְחכ长铡ָ֮ծ娖〷涸穗箮דせָ麩ֲֽד䊴殯כ זְהְֲךָ涪邌罏ך䭯锷կ
!VIZP@ &$."4DSJQUה($ 2הֿדծ+4ך鎉铂➬圫&$."4DSJQUדכ ($כֿתדוֲ䪔גְך " ⡦㹀纏ׁגְתׇד׃ ˟8FBL.BQך眍ח׳הֽ($פך鎉⿹ָָ֮/05&玎䏝 ˟&$."4DSJQU +BWB4DSJQUך鎉铂➬圫㹀㕂ꥷ鋉呓կ չ+BWB4DSJQUպהչ&$."4DSJQUպך麩ְחכ长铡ָ֮ծ娖〷涸穗箮דせָ麩ֲֽד䊴殯כ
זְהְֲךָ涪邌罏ך䭯锷կ
!VIZP@ &$."4DSJQUה($ 2ז⡦㹀纏ׁגְזַך " ($כفؚٗٓيך䮙⹛חⰋֻ䕦갟⿹רׁזְַ ($כⳢ椚禸ח״剑黝⻉חֺׅזְ湡涸ًٌٔ⢪欽ꆀ幾 剑黝⻉דفؚٗٓيך䮙⹛ָ㢌ץֹדכזְ ˟($ָ䮠תְׇדفؚٗٓيךػؿؓ٦وٝأָ衅ַׅ׃זְָծ ػؿؓ٦وٝأכ鎉铂➬圫ד⥂鏾ׁגְזְךד➙㔐כ莆ז׃
!VIZP@ 8FBL3FGך&$."4DSJQUפך䕦갟 2ד8FBL3FGכفؚٗٓيך䮙⹛ח䕦갟ׅ״י
!VIZP@ 8FBL3FGך&$."4DSJQUפך䕦갟 2ד8FBL3FGכفؚٗٓيך䮙⹛ח䕦갟ׅ״י " ֲדׅי אְח&$."4DSJQUחؖك٦آ؝ؙٖءّٝך嚊䙀ָ
!VIZP@ 8FBL3FG➬圫ח鋅($ IUUQTUDFTQSPQPTBMXFBLSFGT ״䒷欽
!VIZP@ 8FBL3FG➬圫ח鋅($ ˑֿך➬圫כؖك٦آ؝ؙٖءّٝח㼎׃ג⡦ך⥂鏾遤זְ˒ IUUQTUDFTQSPQPTBMXFBLSFGT ״䒷欽
!VIZP@ ؖك٦آ؝ؙٖءّٝך➬圫♳ך㹀纏 Ⳣ椚禸כ⟣䠐ךة؎ىؚٝדˑMJWFדזְ˒ؔـآؙؑز8FBL3FGַ 嶊׃ג葺ְ⥂鏾כ搀ְ宕黅ח嶊ׁזְ〳腉䚍֮ • ˑMJWFדזְ˒ؔـآؙؑزؖك٦آ؝ؙٖءّٝך㼎韋ח ז䖤ؔـآؙؑزך䬄韋涸ז邌植
!VIZP@ MJWFזؔـآؙؑزך㹀纏 㼛勻涸ח8FBL3FG⟃㢩ך䩛媮דفؚٗٓيַ錁庠 ֿׁה ךזְؔـآؙؑز
!VIZP@ MJWFזؔـآؙؑزך㹀纏 㼛勻涸ח8FBL3FG⟃㢩ך䩛媮דفؚٗٓيַ錁庠 ֿׁה ךזְؔـآؙؑز 錁庠הכ!!!!!!!!!! ˟הׯה׃㹀纏ח׃״ֲהְֲ陽锷כ֮תׅ
תה
!VIZP@ ➬圫חֶֽ8FBL3FGך⥂鏾 ($ָ饯ֿ⥂鏾כ搀ְⳢ椚禸⣛㶷 ($㼎韋הזؔـآؙؑزך⿑㺘ז㹀纏Ⳣ椚禸⣛㶷 ׃8FBL3FGכ⥂鏾幾ׅ չفؚٗٓيָ⥂䭯ׅؔـآؙؑزכ($ׁזְպהְֲ⥂鏾PQUPVU〳腉
!VIZP@ 8FBL3FGך䠐纏 8FBL3FGכ⥂鏾幾ׅ Ⳣ椚禸ךⵖ秈ָ幾 剑黝⻉ך堣⠓ָ㟓⸇ Ⱗ⡤涸חכًٌٔך⢪欽ꆀ幾
!VIZP@ תה 8FBL3FGכ剑黝⻉ָך㈓♧ך㶷㖈䠐纏ד֮ծ ➭ך湡涸ד⢪ֲךכ⡦ַָ呎劤涸חֶַ׃ְךד 罋ִ湫׃ת׃׳ֲ 'JOBMJ[BUJPO(SPVQず圫