Upgrade to Pro — share decks privately, control downloads, hide ads and more …

V8のコードベース

 V8のコードベース

V8のC++コードベースについてなど

More Decks by Taketoshi Aono(青野健利 a.k.a brn)

Other Decks in Programming

Transcript

  1. V8 Codebase

    View Slide

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

    View Slide

  3. Basic C++ code
    倜׋ז؝٦سכC++14ד鷄⸇ׁ׸גְ׷կ
    〢ְ؝٦سחC++03ךせ婍כ֮׷׮ךךlambdaהַכ穠圓⢪׻׸ג
    ְ׷կ
    遤侧כ882,616遤֮׷

    View Slide

  4. Build tools
    GNהְֲًةؽٕسخ٦ٕ׾ⵃ欽׃גְ׷կ
    㹋ꥷךؽٕسכninja
    ؝ٝػ؎ٓכخ٦ٕثؑ٦ٝ׾تؐٝٗ٦سׅ׷״ֲחז׏גְג
    clang7.0.0׾تؐٝٗ٦س׃גⵃ欽ׅ׷״ֲחז׏גְ׷

    View Slide

  5. Lint
    ؝ىحز⵸חcpplintָ饥׏גծؿؓ٦وحز麩⿾ך؝٦سכ؝ىح
    زדֹזְ

    View Slide

  6. Format
    clang-formatד✲⵸חؿؓ٦وحز׃זְה؝ىحزדֹזְ

    View Slide

  7. Problems
    -  وָؙٗ㢳ְ٥זַזַ搀蘠
    -  ؝٦سك٦أָ㣐ְֹךדIDE禸כ㔿ת׷✲ָ㢳ְ
    -  ؝٦سك٦أָ㣐ְֹךדؽٕسָ鹼ְ

    View Slide

  8. Complicated Macros
    وָؙٗ醱꧟
    وؙٗדؙٓأ׾㹀纏׃׋׶…
    Problems

    View Slide

  9. #define IGNITION_HANDLER(Name, BaseAssembler) \!
    class Name##Assembler : public BaseAssembler { \!
    public: \!
    explicit Name##Assembler(compiler::CodeAssemblerState* state, \!
    Bytecode bytecode, OperandScale scale) \!
    : BaseAssembler(state, bytecode, scale) {} \!
    static void Generate(compiler::CodeAssemblerState* state, \!
    OperandScale scale); \!
    \!
    private: \!
    void GenerateImpl(); \!
    DISALLOW_COPY_AND_ASSIGN(Name##Assembler); \!
    }; \!
    void Name##Assembler::Generate(compiler::CodeAssemblerState* state, \!
    OperandScale scale) { \!
    Name##Assembler assembler(state, Bytecode::k##Name, scale); \!
    state->SetInitialDebugInformation(#Name, __FILE__, __LINE__); \!
    assembler.GenerateImpl(); \!
    } \!
    void Name##Assembler::GenerateImpl()!

    View Slide

  10. IGNITION_HANDLER(LdaZero, InterpreterAssembler) {!
    Node* zero_value = NumberConstant(0.0);!
    SetAccumulator(zero_value);!
    Dispatch();!
    }!

    View Slide

  11. Reusable Enum member
    وؙٗדenumךًٝغ׾ⱄⵃ欽ׅ׷؛٦أָ㢳ְ
    Problems

    View Slide

  12. #define BYTECODE_LIST(V) \!
    /* Extended width operands */ \!
    V(Wide, AccumulatorUse::kNone) \!
    V(ExtraWide, AccumulatorUse::kNone) \!
    \!
    /* Loading the accumulator */ \!
    V(LdaZero, AccumulatorUse::kWrite) \!
    V(LdaSmi, AccumulatorUse::kWrite, OperandType::kImm) \!
    V(LdaUndefined, AccumulatorUse::kWrite) \!
    V(LdaNull, AccumulatorUse::kWrite) \!
    V(LdaTheHole, AccumulatorUse::kWrite) \!
    V(LdaTrue, AccumulatorUse::kWrite) \!
    .!
    .!
    .!

    View Slide

  13. const OperandTypeInfo*!
    const Bytecodes::kOperandTypeInfos[] = {!
    #define ENTRY(Name, ...)
    BytecodeTraits::kOperandTypeInfos,!
    BYTECODE_LIST(ENTRY)!
    #undef ENTRY!
    };!

    View Slide

  14. switch (bytecode) {!
    #define CASE(Name, ...) \!
    case Bytecode::k##Name: \!
    return #Name;!
    BYTECODE_LIST(CASE)!
    #undef CASE!
    }!

    View Slide

  15. IDE Frozen
    ⬁כEmacsזךדRtagsדְַֽאדׅ(^^)
    Problems

    View Slide

  16. Slow Build
    EC2׾㤍秈׃גrsyncד؝٦س㢌刿ָ֮׷׋ןח鷏⥋ׅ׷״ֲח
    ׃׋
    ؽٕسכEC2ךUbuntuדװ׷
    Problems

    View Slide

  17. Watch
    overlookהְֲ،فٔ׾⢪ֲה؝٦س㢌刿׾嗚濼׃גءٕؑ٥؝
    وٝس׾㹋遤דֹ׷
    v8/src׾湊鋔׃גrsyncׅ׷
    Problems

    View Slide