Narcissus 自分自身を愛した美少年 JavaScript
description
Transcript of Narcissus 自分自身を愛した美少年 JavaScript
NarcissusNarcissus自分自身を愛した美少年自分自身を愛した美少年
JavaScriptJavaScript
株式会社アクセラートジャパン株式会社アクセラートジャパン代表取締役 小林悠代表取締役 小林悠
Brendan EichBrendan Eich
Mozilla Corp. CTOMozilla Corp. CTO JavaScriptJavaScript @@ Netscape Netscape
2.02.0 JavaScriptJavaScript @@ MozillaMozilla JavaScript on JavaScriJavaScript on JavaScri
pt Narcissuspt Narcissus↓↓
JavaScriptJavaScript バカバカJavaScriptJavaScript の父の父
NarcissusNarcissus
美少年@ギリシャ神美少年@ギリシャ神話話
水面に映った自分に水面に映った自分に恋をした恋をした
↓↓
バカバカ
使ってみた使ってみた
ドキュメント0ドキュメント0コメント0コメント0
((WikipediaWikipedia 英語版に書きまし英語版に書きました)た)
ベンチマークベンチマーク
0.234
35.891
0 10 20 30 40
SpiderMonkey
Narcissus
時間
でもでも
世界1美しい文法世界1美しい文法のの
世界1美しい実装世界1美しい実装
世界1美しい文法世界1美しい文法プログラミング言語プログラミング言語=文脈自由文法+例外=文脈自由文法+例外
C++C++ は例外だらけは例外だらけJavaScriptJavaScript はは例外が非常に少な例外が非常に少ないい
世界1美しい実装世界1美しい実装行数行数
パーサーパーサー 954954行行
実行エンジン実行エンジン 897897行行
予約語定義予約語定義 125125行行
ランチャーランチャー 77行行
Do-WhileDo-While の実装の実装 case DO:case DO: dodo { { try {try { execute(n.body, x);execute(n.body, x); } catch (e if e == BREAK && x.target == n) {} catch (e if e == BREAK && x.target == n) { break;break; } catch (e if e == CONTINUE && x.target == n) {} catch (e if e == CONTINUE && x.target == n) { continue;continue; }} } } whilewhile (getValue(execute(n.condition, x))); (getValue(execute(n.condition, x))); break;break;
IFのパースIFのパース case IF:case IF: n = new Node(t);n = new Node(t); n.n.conditioncondition = ParenExpression(t, x); = ParenExpression(t, x); x.stmtStack.push(n);x.stmtStack.push(n); n.n.thenPartthenPart = Statement(t, x); = Statement(t, x); n.n.elsePartelsePart = t.match(ELSE) ? Statement(t, x) : = t.match(ELSE) ? Statement(t, x) :
null;null; x.stmtStack.pop();x.stmtStack.pop(); return n;return n;
コメント0なのはコメント0なのはそのその美しさ美しさ故であった!故であった!
NarcissusNarcissus はは自分を愛した自分を愛した美少年美少年
ご静聴ご静聴ありがとうございまありがとうございま
したした