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
Equivalence_in_JS
Search
chikoski
August 27, 2017
Technology
1.6k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Equivalence_in_JS
This slide introduces "equivalence" and Set type in JavaScript
chikoski
August 27, 2017
More Decks by chikoski
See All by chikoski
20210825_ossx
chikoski
0
360
festudy02-wasm
chikoski
1
1.1k
An overview of WebAssembly; how it is used, created, and applied?
chikoski
1
800
Functions in JavaScript
chikoski
1
1.2k
20171018-WASM
chikoski
2
1.5k
20171002-wejs
chikoski
1
630
20170924-html5conference-wasm
chikoski
5
10k
いまさら振り返るPromise
chikoski
1
630
Design and Implementation of Tech Talks
chikoski
0
140
Other Decks in Technology
See All in Technology
[DroidKaigi 2026] Making UI specifications visible: Android UI development in the AI agent era supported by Compose Screenshot Testing and galleries
syarihu
0
600
AndroidでHDRメディアを「壊さずに」扱う
chigichan24
0
420
20260903 Tokyo Jazug Night #62 | Azure エンジニアよ、 その環境は本当にセキュアか?
olivia_0707
1
630
Microsoft 365 Copilot chat -tekoälypalvelun tietosuojaongelmat
hponka
0
540
PM領域でのAI Agentの活用
lycorptech_jp
PRO
0
280
Genie Code ワークショップ 応用編 / Genie-Code-Workshop-advanced
databricksjapan
PRO
0
360
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
610
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
240
GoにおけるFFIのこれまでとこれから
goccy
1
480
OpenTelemetry eBPF Instrumentationの舞台裏 / Behind the Scenes of OpenTelemetry eBPF Instrumentation
ymotongpoo
1
130
エンタープライズInnerSourceと開発者ポータル
nogikazuma
1
110
module Synths; end
asonas
1
120
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
480
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
3k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
320
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
490
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
270
Designing for Timeless Needs
cassininazir
1
470
New Earth Scene 8
popppiees
3
2.5k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Transcript
同じ、とは N.Shimizu (
[email protected]
)
2と10は同じ
3と10は同じ
2と30029は同じ
Set: 重複を許さない値の集まり DPOTUMJTU<
> DPOTUTOFX4FU < > TTJ[FMJTUMFOHUIGBMTF MJTUKPJO "SSBZGSPN T KPJO TIBT USVF TIBT GBMTF
「同じ値」のオブジェクトなのに重複してしまう DMBTT1PJOU\ DPOTUSVDUPS Y Z \UIJTY UIJTZ^ ^ DPOTUQ Y
Z OFX1PJOU Y Z DPOTUMJTU<Q Q Q Q Q Q > DPOTUTOFX4FU MJTU TTJ[FMJTUMFOHUIUSVF TIBT Q GBMTF
Setにとって、「同じ」とは?
ECMAScriptに定義されている同値性比較* 利用しているJSの演算子 / 関数 Setが利用しているもの Abstract Equality Comparison Strict
Equality Comparison SameValue 0CKFUJT SameValueZero "SSBZQSPUPUZQFJODMVEF ϧ * SameValueNonNumber もありますが、処理系内部での利用に限られるので割愛します
Y Z YZ YZ 0CKFDUJT Y Z 4BNF7BMVF;FSP Y Z
VOEFGJOFE OVMM USVF GBMTF USVF GBMTF USVF USVF GBMTF USVF /B/ /B/ GBMTF GBMTF USVF USVF VOEFGJOFE GBMTF USVF GBMTF GBMTF GBMTF \Y Z^ \Y Z^ GBMTF GBMTF GBMTF GBMTF \Y Z^ Y USVF USVF USVF USVF
Set.prototype.addの振る舞い DPOTUTOFX4FU ╘Ә㗶൶Ӽਃᘻ TBEE /B/ 4FU </B/> TBEE /B/
4FU </B/> TBEE VOEFGJOFE 4FU </B/ VOEFGJOFE> TBEE OVMM 4FU </B/ VOEFGJOFE OVMM> DPOTUY\Y Z^ TBEE Y 4FU </B/ VOEFGJOFE OVMM PCKFDU> TBEE Y 4FU </B/ VOEFGJOFE OVMM PCKFDU> TBEE \Y Z^ TBEE Y 4FU </B/ VOEFGJOFE OVMM PCKFDU PCKFDU>
演算子のオーバロードができない
継承によってSetの振る舞いを変える DMBTT.Z4FUFYUFOET4FU\ BEE Y \ JG UZQFPGYFRVBMTGVODUJPO <UIJT>GJMUFS JYFRVBMT J
MFOHUI \ SFUVSOUIJT ^ SFUVSOTVQFSBEE Y ^ ^
DMBTT1PJOU\ DPOTUSVDUPS Y Z \UIJTY UIJTZ^ FRVBMT QPJOU \SFUVSOUIJTYQPJOUYUIJTZQPJOUZ^ ^
DPOTUQOFX1PJOU DPOTUQOFX1PJOU QQGBMTF QFRVBMT Q USVF DPOTUTOFX.Z4FU TBEE Q 4FU <PCKFDU> TBEE Q 4FU <PCKFDU>
評価用のコード DPOTUOFYU*OUNBY7BMVF.BUIGMPPS NBY7BMVF .BUISBOEPN GVODUJPON TFU UJNFT \ MFUUPUBM
GPS MFUUUUJNFTU \ DPOTUTUBSU5JNF%BUFOPX DPOTUQOFX1PJOU OFYU*OU TFUTJ[F TFUBEE Q UPUBM %BUFOPX TUBSU5JNF ^ SFUVSOUPUBMUJNFT ^
適当な評価結果:激遅い* ͢Ͱʹೖ͍ͬͯΔཁૉ 4FU .Z4FU
* MacBook Pro 15inch 2016 / 2.7 GHz Intel Core i7 / 16 GB 2133 MHz LPDDR3 / N = 100
パフォーマンス測定結果 • MySet.prototype.addの半分はnextという処理に費やされている • Setから配列への変換に時間がかかっているものと思われる
「同じ値を持つもの」の検索に時間がかかってる? DMBTT.Z4FUFYUFOET4FU\ BEE Y \ JG UZQFPGYFRVBMTGVODUJPO <UIJT>GJMUFS JYFRVBMT J
MFOHUI \ SFUVSOUIJT ^ SFUVSOTVQFSBEE Y ^ ^
ハッシュ関数を用意する DMBTT)BTI4FUFYUFOET4FU\ DPOTUSVDUPS JUFSBCMF \ TVQFS UIJTIBTI7BMVFTOFX4FU GPS
DPOTUJPGJUFSBCMF \ UIJTBEE J ^ ^ BEE WBMVF \ JG UZQFPGWBMVFIBTIGVODUJPO \ DPOTUIBTIWBMVFIBTI JG UIJTIBTI7BMVFTIBT IBTI \ SFUVSOUIJT ^ UIJTIBTI7BMVFTBEE IBTI ^ TVQFSBEE WBMVF SFUVSOUIJT ^ ^ DMBTT1PJOU\ DPOTUSVDUPS Y Z \ UIJTYY UIJTZZ ^ IBTI \ SFUVSOA\UIJTY^ \UIJTZ^A ^ FRVBMT Q \ SFUVSOUIJTYQYUIJTZQZ ^ ^
速くなった!* ͢Ͱʹೖ͍ͬͯΔཁૉ 4FU .Z4FU )BTI4FU
* MacBook Pro 15inch 2016 / 2.7 GHz Intel Core i7 / 16 GB 2133 MHz LPDDR3 / N = 100
あの、属性値変わった場合は…
ユニークさが保てなくなる
解決策 • 変更を見張って、Set自体を作り直す • コスト高?変更の頻度が高いとうまくいかないのでは • 削除された要素を参照しているオブジェクトがいる場合は? • 集合の集合をつくる •
同じ値のグループをつくり、そのグループを管理 • 値が変更された、別のグループへ移す • コストは低い。メモリはよく使う。
同じ、は難しいのう