古のEcmascript Harmony時代のTransplilerを自作していたので供養します。
MochaES Harmony Traspiler
View Slide
Name@brn (ꫬꅿ⨳ⵃ)Occupationؿٗٝزؒٝسؒٝآص،٥ط؎ذ؍ـؒٝآص،CompanyCyberagent ،سذؙأةآؔ AI MessengerBloghttp://abcdef.gets.b6n.ch/Twitterhttps://twitter.com/brn227GitHubhttps://github.com/brn
剑ⴱח闐זֽלזזְֿהָ֮תׅկ״ֻ罋ִֿכ⳿ؔث単ךדכ兛鸐ך単⢪גְׅתׇ
הְֲֽד㢳ⴓ耀ְג⡦חזזְ涪邌דׅ׃ַ⡲ך2011/04דְׅׅתׇוֲ׃ג⣘균׃ַׄׯ…
Ecmascript 2017Ecmascript 2016Ecmascript 6/2015EEccmmaassccrriipptt hhaarrmmoonnyyEcmascript 5Ecmascript 3
Harmony鋙ִגתַׅ
Ecmascript 4갽䮲ך穗꿀ַծぐكٝت٦װⰕד倜ז鎉铂堣腉ך瘻㹀ח《穈꧊ת
䔲儗ES wikiהְֲل٦آָ㶷㖈׃גֶծֿחproposalהstrawmanהְֲ✳珏겲ך堣腉فٗه٦ؠٕل٦آָ֮
鋅䔲儗ך猘כչزٓٝأػ؎ٓ⡲պהזךד֮Babelזגתזְ
せכ؝٦ؼ٦אזָדMochaח寸㹀װmochaכ猘ךקֲָ⯓חㄏせ׃דׅذأزخ٦ٕךmocha״⯓חת֮⚅ח⳿׃גזְַ䠐זְֽו
MochaC++ד剅ְEcmascript3ַEcmascript harmonyפךزٓٝأػ؎ٓV8䵧鯹׃גְךדreplד㹋ꥷח㢌䳔׃זָ㹋遤〳腉
DebuggableSourceMapָ㶷㖈׃גְזְ儗➿ךד♧遤♧遤ח遤侧הtry-catch䮠ֿהדرغحؚ〳腉ח
function fibonacci(num) {!var a = 1, b = 0, temp;!!while (num >= 0){!temp = a;!a = a + b;!b = temp;!num--;!}!!return b;!}!
function fibonacci(num) {!try {!__LINE__ = 2;!var a = 1,!b = 0,!temp;!!__LINE__ = 4;!while (num >= 0){!!__LINE__ = 5;!temp = a;!!__LINE__ = 6;!a = a+b;!!__LINE__ = 7;!b = temp;!!__LINE__ = 8;!num -- ;!}!__LINE__ = 11;!return b;!} catch(__mocha_error){!__Runtime.exceptionHandler(__LINE__, __FILE__, __mocha_error);!}!}!
Runtimeharmonyך葿ղז㢌䳔遤ֲחRuntime欽䠐Runtimeכⴓⶴׁגֶ䗳銲ח䘔ׄגappendׁׁח؝ٝػ؎ٕ儗חASTתד㢌䳔ׁךדծ鷄⸇ךزٓٝأؿؓ٦ي؝أزכקרئٗ
TransofrmHarmonyך圓俑הStrawmanח֮劢䱰欽ך،؎ر؍،ך⚕倯䱰欽
وصُ،ٕכֿֿחhttp://brn.github.io/mocha/ja/
Ideas㛇劤涸חכ䩛דػ٦؟剅ְגAST穈甧גגծַֿAST㢌䕎׃גְֻ剑䖓כתAST鴬גؿ؋؎ٕח剅ֹ⳿׃
Hard to solve،ٗ٦ꟼ侧ָ⦜זח׃ػة٦ָٝ㢳ְ
// thisを束縛しない関数宣言foo(x, y, z) -> console.log(this);!// thisを束縛しない関数式var foo = (x, y, z) -> console.log(this);!// thisを束縛する関数宣言var foo = (x, y, z) => console.log(this);!// thisを束縛する関数式foo(x,y,z) => console.log(this);!
File watcherؿ؋؎ٕ湊鋔堣腉㣐㢌windowծlinuxծmacדAPIָ麩ֲ…㧅⼿׃גlinuxכInotifyծ⟃㢩כٕ٦فח׃
V8V8ך⢪ְ倯项俱ָ㼰זֻג㣐㢌أٖحسָ窃ה閯ךAbort鸬涪ׅ׃…ا٦أ铣纷湡ח…
libuv׃ַ閯חLibuvתד䵧鯹׃גְגNode.JSךؙٗ٦ְٝז朐䡾ח…
תה⡲ך㣐㢌ֽו䖤ךכ㢳ַֿד䧭➣דֹתֿֿׅח㟌ָ֮https://github.com/brn/mocha