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
遅延評価と健康
Search
Susisu
October 16, 2016
Programming
0
600
遅延評価と健康
遅延評価でパーサコンビネータを高速化した話
http://connpass.com/event/39553/
Susisu
October 16, 2016
Tweet
Share
More Decks by Susisu
See All by Susisu
null or undefined
susisu
25
7.2k
Mackerel のフロントエンドフレームワーク移行 序章 / Hatena Engineer Seminar #13
susisu
0
2k
スクリーンショット撮影のために Puppeteer を操る / Kyoto.js 16
susisu
0
830
BuckleScript 使ってみた
susisu
0
310
Atom パッケージ開発のすゝめ
susisu
1
2.1k
5分でわかる Curry–Howard 同型対応
susisu
0
960
ジェネレータを有効活用し隊 / Kyoto.js 11 LT
susisu
2
2.1k
楽しく学ぶ難解プログラミング言語
susisu
0
790
多分これが一番早いと思います
susisu
0
410
Other Decks in Programming
See All in Programming
『テスト書いた方が開発が早いじゃん』を解き明かす #phpcon_nagoya
o0h
PRO
2
220
さいきょうのレイヤードアーキテクチャについて考えてみた
yahiru
3
750
1年目の私に伝えたい!テストコードを怖がらなくなるためのヒント/Tips for not being afraid of test code
push_gawa
0
140
Flutter × Firebase Genkit で加速する生成 AI アプリ開発
coborinai
0
160
時計仕掛けのCompose
mkeeda
1
300
Boost Performance and Developer Productivity with Jakarta EE 11
ivargrimstad
0
260
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
470
SwiftUI Viewの責務分離
elmetal
PRO
1
240
第3回 Snowflake 中部ユーザ会- dbt × Snowflake ハンズオン
hoto17296
4
370
Domain-Driven Transformation
hschwentner
2
1.9k
Amazon Bedrock Multi Agentsを試してきた
tm2
1
290
Grafana Cloudとソラカメ
devoc
0
170
Featured
See All Featured
Optimizing for Happiness
mojombo
376
70k
Building Flexible Design Systems
yeseniaperezcruz
328
38k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Bootstrapping a Software Product
garrettdimon
PRO
306
110k
Optimising Largest Contentful Paint
csswizardry
34
3.1k
Navigating Team Friction
lara
183
15k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Embracing the Ebb and Flow
colly
84
4.6k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.7k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
How GitHub (no longer) Works
holman
314
140k
GraphQLの誤解/rethinking-graphql
sonatard
68
10k
Transcript
Ԇ ධ Ձ ͱ ݈ ߁ 2 0 1
6 - 1 0 - 1 6 O U C C LT ձ # 5 @susisu2413
Ԇ ධ Ձ Ͱ ύ ʔ α ί ϯ
Ϗω ʔ λ Λ ޮ Խ ͠ ͨ Λ ͠ · ͢
ύ ʔ α ί ϯ Ϗω ʔ λ ʁ
ߏ จ ղ ੳ ͢ Δ ͭ h t
t p s : / / e n . w i k i p e d i a . o rg / w i k i / P a r s e r _ c o m b i n a t o r
ೖ ྗ Τ ϥ ʔ Γ ύʔα ύʔαΛؔͰදݱ
ʢ࣮༻্ΦϒδΣΫτͰϥοϓʣ
ೖ ྗ Τ ϥ ʔ Γ ύʔα ύ
ʔ α ύ ʔ α ύʔα ίϯϏωʔλ ύʔαίϯϏωʔλͰΑΓෳࡶͳύʔαΛߏங
༗ ໊ ͳ ͷ P a r s e c
( H a s k e l l ) h t t p s : / / g i t h u b . c o m / a s l a t t e r / p a r s e c P a r s i m m o n ( J a v a S c r i p t ) h t t p s : / / g i t h u b . c o m / j n e e n / p a r s i m m o n
࡞ ͬͯ Έ ͨ ʢ 2 લ ʣ
J a v a S c r i p t
Ͱ P a r s e c ؙ ύ Ϋ Ϧ h t t p s : / / g i t h u b . c o m / s u s i s u / L o q u a t
ͱ ͯ ศ ར ࣗ ࡞ ε Ϋ Ϧ
ϓ τ ݴ ޠ G r a s s ί ϯύ Π ϥ ︙
ੑ ೳ ʁ
1000ߦͷ JSON × 1000ճ (Node.js v6.7.0) ൺ ֱ
Parsimmon: 4.8 sec PEG.js: 8.47 sec Loquat: 72724ms ࣗ࡞: ? sec
1000ߦͷ JSON × 1000ճ ൺ ֱ Parsimmon: 4.8
sec PEG.js: 8.47 sec ࣗ࡞: 72.7 sec
None
ͳ ͥ ͍ ʁ
V 8 ͷ ϓ ϩ ϑ Ν Π ϥ Ͱ
ௐ Δ node --prof parse.js node --prof-process isolate-0x*-v8.log https://github.com/v8/v8/wiki/Using%20V8’s %20internal%20profiler
͍ ͷ ͨ ͪ ύ ʔ α ͷ
݁ ߹ จ ࣈ ͷ ύ ʔε Τ ϥ ʔ ॲ ཧ
ࠓ ͷ ϝ Π ϯ Τ ϥ ʔ ॲ
ཧ
Τ ϥ ʔ ॲ ཧ ߏ จ ղ ੳ ࣦ
ഊ ࣌ ʹ ώ ϯ τ Λ ग़ ͢ ͨ Ί ϝ ο η ʔ δ ྻ ͷ ݁ ߹ ͳ Ͳ
ࣦ ഊ ͠ ͨ ͱ ͖ ͷ Έ ඞ ཁ
ࣦ ഊ ͢ Δ · Ͱ ܭ ࢉ ͠ ͳ
͍
Ԇ ධ Ձ
ܭ ࢉ Λ Ԇ ͞ ͤ Δ ʹ
ʁ let x = 1 + 2;
Ϋ ϩ ʔ δ ϟ ʹ ͢ Ε ྑ
͍ let x = () => 1 + 2;
ຖ ճ ؔ ݺ ͼ ग़ ͠ Ω ϟ
ο γ ϡ ͞ Ε ͳ ͍ ͍ ͮ Β ͍
Φ ϒ δΣ Ϋ τ Ͱ ϥ ο ϓ
ΠϯλʔϑΣʔε͕ڞ௨ͨ̎ͭ͠ͷΫϥεΛ࡞ ParseError LazyParseError ௨ৗ൛ Ԇ൛
σʔλΛՃ͢Δͱ͖Ԇ൛Ͱ ܭࢉΛԆͤ͞Δ ParseError LazyParseError Ճʢ݁߹ͳͲʣ Ճ
௨ৗ൛Ͱ getter ͦͷ··Λฦ͢ ParseError LazyParseError
Ԇ൛Ͱ getter ධՁ͔ͯ͠ΒΛฦ͢ ParseError LazyParseError ධՁ ݁ՌΩϟογϡ
݁ Ռ
1000ߦͷ JSON × 1000ճ ൺ ֱ ݩ: 72.7
sec վྑ൛: 28.4 sec ԆධՁ͋Γ: ? sec
1000ߦͷ JSON × 1000ճ ൺ ֱ ԆධՁ͋Γ: 11.2
sec ݩ: 72.7 sec վྑ൛: 28.4 sec
1000ߦͷ JSON × 1000ճ ൺ ֱ Parsimmon: 4.8
sec PEG.js: 8.47 sec վྑ൛ + ԆධՁ: 11.2 sec
· ͱ Ί
Ԇ ධ Ձ ͍ ͍ ͧ ܭ ࢉ
ͷ ޮ Խ ଞ ʹ ॥ ఆ ٛ ͳ Ͳ
ܽ ͋ Δ ͷ Ͱ ҙ ࣌
ؒ ɾ ۭ ؒ త ί ε τ ࢥ Θ ͵ ε λ ο Ϋ ͷ ফ අ
ύ ʔ α ί ϯ Ϗω ʔ λ v 2
͝ ظ Լ ͞ ͍ h t t p s : / / g i t h u b . c o m / s u s i s u / l o q u a t - c o re