Slide 1

Slide 1 text

V8 torque

Slide 2

Slide 2 text

Name @brn (ꫬꅿ⨳ⵃ) Occupation ؿٗٝزؒٝسؒٝآص،٥ط؎ذ؍ـؒٝآص، Company Cyberagent ،سذؙأةآؔ AI Messenger OSS Contributor of V8 About http://info.b6n.ch

Slide 3

Slide 3 text

What is torque? V8ⰻ鿇דⵃ欽ׅ׷׋׭ח⡲׵׸׋DSL TypeScript괏㄂ז俑岀ד葿ղ邌植ׅ׷

Slide 4

Slide 4 text

How does it works? torqueכ؝ٝػ؎ׁٕ׸׷הCSA(CodeStubAssembler)ח㢌䳔ׁ׸ ׷կ CSAכفٓحزؿؓ٦يꬊ⣛㶷זIRד剑穄涸ח،إٝـٓח؝ٝػ ؎ׁٕ׸׷կ

Slide 5

Slide 5 text

Why V8 need torque? CSAכ剅ְג׫׷ה׻ַ׷ָ穠圓הְֲַַז׶׃׿וְ -  ✲佦׶װְׅ -  僓כ㘗ָⰋגNode㘗׌׏׋ח׮ꟼ׻׵׆ⰻ鿇涸חכSmiהַ IntPtrהַ㘗ָאְגְגծ♶侭さؒٓ٦ָ⳿װַׅ׏׋կ -  ⵖ䖴圓俑ָ铣׫חְֻ

Slide 6

Slide 6 text

function add100() {! let value = 0;! for (let i = 0; i < 100; i++) {! value += 1;! }! return value;! }!

Slide 7

Slide 7 text

TNode Add100(TNode context) {! TVARIABLE(var_value, MachineType::PointerRepresentation(), IntPtrConstant(0));! TVARIABLE(var_index, MachineType::PointerRepresentation(), IntPtrConstant(0));! ! Label loop(this), after_loop(this);! ! Branch(IntPtrGreaterThan(IntPtrConstant(100), var_index), &loop, &after_loop);! BIND(&loop);! {! var_a.Bind(IntPtrAdd(var_a, IntPtrConstant(1)));! Increment(&var_index, 1);! Branch(IntPtrGreaterThan(IntPtrConstant(100), var_index),! &loop, &after_loop);! }! BIND(&after_loop);! return var_value.value;! }!

Slide 8

Slide 8 text

macro Add100(): Smi {! let value: Smi = 0;! let len: Smi = 100;! ! for (let i: Smi = 0; k < len; i = i + 1) {! value = value + 1;! }! return value;! }!

Slide 9

Slide 9 text

torque grammars 㛇劤涸חכ♧菙涸ז䩛竲ֹ㘗鎉铂הずׄ״ֲז俑岀 TypeScriptך㘗،ظذ٦ءّٝ׾⿫罋ח׃גְ׷ ָծDSLזךד׍׳׏ה暴婊ז俑岀׮㢳ְ

Slide 10

Slide 10 text

Type Definition TypeScriptך䕎ؒ؎ٔ،أה⡂גְ׷ָծֿ׍׵כC++ך㘗ה torqueⰻ鿇ך䕎׾֮׻ׇ׷湡涸

Slide 11

Slide 11 text

type Object generates 'TNode';! type int32 generates 'TNode';!

Slide 12

Slide 12 text

External functions V8ⰻ鿇חכׅדח㣐ꆀךِ٦ذ؍ٔذ؍ꟼ侧ָ㹀纏ׁ׸גֶ׶ծ ׉׸׾ⵃ欽ׅ׷׋׭חextern䭷㹀㶨ָ㹀纏ׁ׸גְ׷ -  macro CSAⰻ鿇ד㹀纏ׁ׸גְ׷ِ٦ذ؍ٔذ؍وؙٗ -  builtin V8ךbuiltins⟃♴ח֮׷ꟼ侧纇 -  runtime C++ד鎸鶢ׁ׸׋ًاحس

Slide 13

Slide 13 text

extern macro Print(Object);! ! extern builtin ToObject(Context, Number): Object;! ! extern runtime CreateDataProperty(! Context, Object, String, Object);!

Slide 14

Slide 14 text

Operators torqueכoperator׮ꟼ侧ה׃ג㹀纏ׅ׷ֿהָדֹ׷

Slide 15

Slide 15 text

extern operator "+" macro SmiAdd(Smi, Smi): Smi;! extern operator "-" macro SmiSub(Smi, Smi): Smi;!

Slide 16

Slide 16 text

Cast CastכCSAךCast׾ⵃ欽ׅ׷ָծ㣟侁׃׋㜥さחכGotoדٓكٕפ 굲ע

Slide 17

Slide 17 text

cast(a) otherwise CastError!

Slide 18

Slide 18 text

Labels CSAכ׮ה׮הַז׶⡚ٖكٕז邌植זךדծ if俑װfor俑瘝ךⵖ䖴圓俑׾׮׏גְזְկ ֿ׸׵׾邌植ׅ׷ךכׅץגLabelהGotoד֮׷կ

Slide 19

Slide 19 text

Branch(var_a, label1, label2)! ! BIND(&label1);! Print("A");! ! BIND(&label2);! Print("B");!

Slide 20

Slide 20 text

macro Foo(context: Context): Smi labels Bailout, CastError {! Goto Bailout;! }!

Slide 21

Slide 21 text

compiler::TNode FooFromDSLAssembler::Foo(! TNode p_context,! Label* label_Bailout_1,! Label* label_CastError_1) {! Goto(label_Bailout_1);! }!

Slide 22

Slide 22 text

WriteBarrier V8כ؝ٖٝؕٝز٥؎ًؙٝٔٝةٕGC׾琎׿דְ׷ךדծ ؔـآؙؑزפך،ؙإأךꥷחכWriteBarrierָ䗳갭׌ָ ֿ׸׮CSAך㜥さחכ荈ⴓדWriteBarrier׾⢪ֲַNoBarrierד遤ֻ ַ鼅䫛׃זֽ׸לז׵זְկ torqueדכ㼛勻涸חֿֿ׮荈⹛⻉ׅ׷✮㹀׵׃ְ

Slide 23

Slide 23 text

Compilation 植㖈ךהֿ׹ػ٦؟٦כAntlrד剅ַ׸גְ׷ 俑岀涸חכLL(1)דػ٦أ〳腉 㼛勻涸חכ䩛剅ֹךػ٦؟ח׃׋ְ׵׃ְ

Slide 24

Slide 24 text

Compilation V8ךؽٕسفٗإأ⚥ח.tqؿ؋؎ٕךؽٕسָ饥׶ծ ׉ך穠卓 <ر؍ؙٖزٔせ>-<ؿ؋؎ٕせ>-from-dsl-gen.h/cc הְֲC++ؿ؋؎ָٕ欰䧭ׁ׸ ׁ׵ח׉ךؿ؋؎ָٕؽٕسׁ׸غ؎شٔך♧鿇חז׷

Slide 25

Slide 25 text

.tq ~-from-dsl-gen.h/cc V8

Slide 26

Slide 26 text

SourceMaps 植㖈ךהֿ׹فٗزة؎ف׌ָծ--gdbjit-fullؔفءّٝדا٦أ⡘ 縧ךوحؾؚٝ׾׃גְ׷׵׃ְ

Slide 27

Slide 27 text

Summary ؝ٝػ؎ٓך⚥חDSL׾אֻ׷ךכ״ֻ֮׷鑧׌ָծ ֿֿתדֹ׏׍׶׃׋鎉铂כ穠圓棆׃ְ

Slide 28

Slide 28 text

Reference -  https://docs.google.com/presentation/d/ 1PlQEjS5xyJA-0GY8mjB4wr-pLyzFtdMRfhXczJJ2wic/ edit#slide=id.g388aa7220e_2_348 -  https://github.com/v8/v8/blob/master/src/builtins/typed- array.tq