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
インドのパンについての話 / a story about Indian bread
Search
Arata
July 26, 2020
0
33
インドのパンについての話 / a story about Indian bread
Arata
July 26, 2020
Tweet
Share
More Decks by Arata
See All by Arata
eBPFを用いたAndroid向けデバッガ「eDBG」のx86_64 Linuxへの移植
arata_nvm
0
9
Pythonのcopy-and-patch JITの実装を読む
arata_nvm
0
100
eBPFを使った動的解析手法
arata_nvm
1
680
カーネルハック実験の振り返り
arata_nvm
1
44
Improving LLVM Backend Development with a New TableGen Language Server
arata_nvm
0
39
コードエディターのシンタックスハイライトの話
arata_nvm
0
190
LLVMのコード自動生成機構におけるコード記述を支援するツールの作成
arata_nvm
0
86
TableGenの言語サーバーをつくる
arata_nvm
0
600
pwn入門 / introduction to pwn
arata_nvm
1
2.6k
Featured
See All Featured
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
150
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
240
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
150
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.4k
BBQ
matthewcrist
89
10k
Music & Morning Musume
bryan
47
7.1k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
140
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
220
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
150
Navigating Team Friction
lara
192
16k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.9k
sira's awesome portfolio website redesign presentation
elsirapls
0
190
Transcript
インドのパンについての話 2020/07/26 SecHack365 輪講 @Arata
インドのパンと言えば?
インドのパンと言えば? = ナン
NaNの読みは? ※ NaN: Not a Number
NaNの読みは? = ナン ※ NaN: Not a Number
つまり...
つまり...
つまり... ∴インドのパンはナン(=NaN)である。
ありがとうございました
なんで?
なんで? - JavaScript の仕様で決められているから
他の言語では
他の言語では - Go言語 packge main import “math” func main() {
math.IsNaN(+”インドのパン”) }
他の言語では - Go言語 packge main import “math” func main() {
math.IsNaN(+”インドのパン”) } ./hoge.go:4:14: invalid operation: + untyped string
1. 式を調べる 2. ドキュメントを調べる 3. ソースコードを調べる もっと詳しく
式を調べる
式を調べる - 式の評価される順番を調べる
式を調べる Number.isNaN( + ’インドのパン’ ) - 式の評価される順番を調べる
式を調べる Number.isNaN( + ’インドのパン’ ) - 式の評価される順番を調べる
式を調べる Number.isNaN( + ’インドのパン’ ) - 式の評価される順番を調べる 1. [文字列] 2.
+[文字列] 3. Number.isNan
式を調べる Number.isNaN( + ’インドのパン’ ) - 式の評価される順番を調べる 1. [文字列] 2.
+[文字列] <- ??? 3. Number.isNan
ドキュメントを調べる
ドキュメントを調べる - ‘+’には2つの意味がある
ドキュメントを調べる - ‘+’には2つの意味がある - 単項演算子: 1つの式に対しての演算 - e.g. +10
ドキュメントを調べる - ‘+’には2つの意味がある - 単項演算子: 1つの式に対しての演算 - e.g. +10 -
二項演算子: 2つの式に対しての演算 - e.g. 10 + 5
ドキュメントを調べる - ‘+’には2つの意味がある - 単項演算子: 1つの式に対しての演算 - e.g. +10 -
二項演算子: 2つの式に対しての演算 - e.g. 10 + 5 - +[文字列]は単項演算子
ドキュメントを調べる - Unary plus (+) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unary_plus
ドキュメントを調べる - Unary plus (+) - If it cannot parse
a particular value, it will evaluate to NaN. - 意訳: 文字列が数字として解釈できなかったらNaNを返す https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unary_plus
ソースコードを調べる
ソースコードを調べる - 環境: Node.js v14.3.0
ソースコードを調べる - 環境: Node.js v14.3.0 - 内部でV8を使っている
ソースコードを調べる - 環境: Node.js v14.3.0 - 内部でV8を使っている - Google製のJavaScriptエンジン -
ECMA-262という仕様に従って実装されている - Chromeの内部で使われている
ソースコードを調べる - 環境: Node.js v14.3.0 - 内部でV8を使っている - Google製のJavaScriptエンジン -
ECMA-262という仕様に従って実装されている - Chromeの内部で使われている - GitHub: https://github.com/v8/v8
ソースコードを調べる - 調べ方
ソースコードを調べる - 調べ方 - GitHubの検索機能を使う - リポジトリをクローンして検索ツールを使う
ソースコードを調べる - 調べ方 - GitHubの検索機能を使う - リポジトリをクローンして検索ツールを使う
ソースコードを調べる - “unary plus”でコミットを検索する
ソースコードを調べる - “unary plus”でコミットを検索する - “Improve handling of unary plus.”
- +[hoge] を [hoge]*1 に置換する
ソースコードを調べる - “unary plus”でコミットを検索する - “Improve handling of unary plus.”
- +[hoge] を [hoge]*1 に置換する - [hoge]が文字列の場合、String::ToNumber([hoge])*1に 置換する
ソースコードを調べる - “String::ToNumber”でファイルを検索する
ソースコードを調べる - “String::ToNumber”でファイルを検索する - “src/objects/string.cc” 370~427行目
ソースコードを調べる - “String::ToNumber”でファイルを検索する - “src/objects/string.cc” 370~427行目 - 符号、指数表記、進数を判断して数値に変換する - 変換できなければNaNを返す
まとめ - Number.isNaN(+’インドのパン’)は次のように評価される 1. Number.isNaN(‘インドのパン’*1)
まとめ - Number.isNaN(+’インドのパン’)は次のように評価される 1. Number.isNaN(‘インドのパン’*1) 2. Number.isNaN(NaN)
まとめ - Number.isNaN(+’インドのパン’)は次のように評価される 1. Number.isNaN(‘インドのパン’*1) 2. Number.isNaN(NaN) 3. true
まとめ - Number.isNaN(+’インドのパン’)は次のように評価される 1. Number.isNaN(‘インドのパン’*1) 2. Number.isNaN(NaN) 3. true -
インドのパンがナンであることは関係ない
ナンはおいしい🙄